Install gammaray_probe.so to /usr/lib/gammaray
[gammaray-debian.git] / CMakeLists.txt
blob55015426c58482b713509d75ffeabb6cf214f1d3
1 # This is the top-level CMakeLists.txt file for the GammaRay project.
3 # Pass the following variables to cmake to control the build:
5 # -DGAMMARAY_UNKNOWN_CXX_MANGLED_NAMES=[on|off]
6 #  Set this if your compiler uses an unsupported C++ name mangling scheme
7 #  Default=off
9 # To build the man page from POD, run 'make man' after CMake.
10 # To install the resulting man page, run 'make install'
13 project(GammaRay)
14 cmake_minimum_required(VERSION 2.8)
16 if(NOT Prog_NAME)
17   set(Prog_NAME "GammaRay")
18 endif()
20 set(GAMMARAY_VERSION_MAJOR "1")
21 set(GAMMARAY_VERSION_MINOR "0")
22 set(GAMMARAY_VERSION_PATCH "1")
23 set(GAMMARAY_VERSION "${GAMMARAY_VERSION_MAJOR}.${GAMMARAY_VERSION_MINOR}.${GAMMARAY_VERSION_PATCH}")
24 set(GAMMARAY_VERSION_STRING "${GAMMARAY_VERSION}")
26 enable_testing()
28 if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
29   find_package(Git)
30   if(GIT_FOUND)
31     execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
32                     WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
33                     OUTPUT_VARIABLE _git_revision)
34     string(REGEX REPLACE "\n" "" _git_revision "${_git_revision}")
35     set(GAMMARAY_VERSION_STRING "${GAMMARAY_VERSION_STRING} (revision: ${_git_revision})")
36   endif()
37 endif()
39 if(NOT CMAKE_BUILD_TYPE)
40   set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
41 endif()
43 message(STATUS "Building ${Prog_NAME} ${GAMMARAY_VERSION_STRING} in ${CMAKE_BUILD_TYPE} mode")
44 add_definitions(-DPROGRAM_NAME=\"${Prog_NAME}\")
46 include(CheckCXXCompilerFlag)
48 set(QT_MIN_VERSION "4.7.0")
49 find_package(Qt4 REQUIRED)
51 if(CMAKE_BUILD_TYPE MATCHES "^[Rr]elease$")
52   add_definitions(-DQT_NO_DEBUG_OUTPUT)
53 endif()
55 include_directories(
56   ${QT_INCLUDES}
57   ${CMAKE_BINARY_DIR}
58   ${CMAKE_SOURCE_DIR}
59   ${CMAKE_SOURCE_DIR}/3rdparty
62 set(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
63 set(LIB_INSTALL_DIR "lib${LIB_SUFFIX}")
64 set(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/qt4/plugins")
66 set(
67   INSTALL_TARGETS_DEFAULT_ARGS
68   RUNTIME DESTINATION bin
69   LIBRARY DESTINATION ${LIB_INSTALL_DIR}
70   ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT Devel
73 if(WIN32)
74   add_definitions(-DUNICODE -D_UNICODE)
75 endif()
77 if(APPLE)
78   # on the Mac support an extra install directory for application bundles
79   set(
80     INSTALL_TARGETS_DEFAULT_ARGS
81     ${INSTALL_TARGETS_DEFAULT_ARGS}
82     BUNDLE DESTINATION "/Applications/Qt4"
83   )
84 endif()
86 if(UNIX AND NOT APPLE)
87   set(DOC_INSTALL_DIR share/doc/gammaray/)
88 else()
89   set(DOC_INSTALL_DIR .)
90 endif()
92 # TODO: find a nicer way for all this. ideally auto-detect the name mangling
93 # format, but at least guess a default based on OS + compiler.
94 option(
95   GAMMARAY_UNKNOWN_CXX_MANGLED_NAMES
96   "Enable if your compiler uses an unsupported C++ name mangling scheme"
97   OFF
99 if(GAMMARAY_UNKNOWN_CXX_MANGLED_NAMES)
100   add_definitions(-DGAMMARAY_UNKNOWN_CXX_MANGLED_NAMES)
101 endif()
103 configure_file(
104   ${CMAKE_CURRENT_SOURCE_DIR}/config-gammaray.h.cmake
105   ${CMAKE_CURRENT_BINARY_DIR}/config-gammaray.h
107 configure_file(
108   ${CMAKE_CURRENT_SOURCE_DIR}/config-gammaray-version.h.cmake
109   ${CMAKE_CURRENT_BINARY_DIR}/config-gammaray-version.h
112 if(CMAKE_COMPILER_IS_GNUCXX)
113   check_cxx_compiler_flag(-Wunused-but-set-variable HAVE_GCC_UNUSED_BUT_SET)
114   check_cxx_compiler_flag(-Wlogical-op HAVE_GCC_LOGICAL_OP)
115   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wextra -Woverloaded-virtual -Winit-self -Wmissing-include-dirs -Wunused -Wno-div-by-zero -Wundef -Wpointer-arith -Wcast-qual -Wcast-align -Wmissing-noreturn -Werror=return-type")
116   if(HAVE_GCC_UNUSED_BUT_SET)
117     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wunused-but-set-variable")
118   endif()
119   if(HAVE_GCC_LOGICAL_OP)
120     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wlogical-op")
121   endif()
122 endif()
124 add_subdirectory(injector)
126 set(gammaray_runner_srcs
127   injector/abstractinjector.cpp
128   injector/injectorfactory.cpp
129   injector/preloadinjector.cpp
130   injector/styleinjector.cpp
131   injector/windllinjector.cpp
132   injector/interactiveprocess.cpp
133   probefinder.cpp
134   main.cpp
135   promolabel.cpp
136   splashscreen.cpp
138   attach/attachdialog.cpp
139   attach/processmodel.cpp
140   attach/processfiltermodel.cpp
142   3rdparty/kde/kidentityproxymodel.cpp
143   3rdparty/kde/krecursivefilterproxymodel.cpp
144   3rdparty/kde/kfilterproxysearchline.cpp
146 if(NOT WIN32)
147   set(gammaray_runner_srcs
148     ${gammaray_runner_srcs}
149     injector/gdbinjector.cpp
150     attach/processlist_unix.cpp
151   )
152 else()
153   set(gammaray_runner_srcs
154     ${gammaray_runner_srcs}
155     attach/processlist_win.cpp
156   )
157 endif()
159 qt4_wrap_ui(gammaray_runner_srcs attach/attachdialog.ui)
160 qt4_add_resources(gammaray_runner_srcs resources/gammaray.qrc)
162 add_executable(gammaray ${gammaray_runner_srcs})
163 target_link_libraries(gammaray ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
165 set(gammaray_srcs
166   mainwindow.cpp
167   probe.cpp
168   propertywidget.cpp
169   objectlistmodel.cpp
170   objectpropertymodel.cpp
171   objectdynamicpropertymodel.cpp
172   objectstaticpropertymodel.cpp
173   objectclassinfomodel.cpp
174   objectmethodmodel.cpp
175   objectenummodel.cpp
176   objecttreemodel.cpp
177   connectionmodel.cpp
178   connectionfilterproxymodel.cpp
179   tools/sceneinspector/scenemodel.cpp
180   tools/statemachineinspector/statemodel.cpp
181   tools/statemachineinspector/transitionmodel.cpp
182   util.cpp
183   tools/widgetinspector/widgetpreviewwidget.cpp
184   methodinvocationdialog.cpp
185   methodargumentmodel.cpp
186   multisignalmapper.cpp
187   singlecolumnobjectproxymodel.cpp
188   tools/modelinspector/modeltester.cpp
189   tools/modelinspector/modelmodel.cpp
190   tools/modelinspector/modelcellmodel.cpp
191   tools/sceneinspector/graphicsview.cpp
192   tools/sceneinspector/graphicssceneview.cpp
193   tools/metatypebrowser/metatypesmodel.cpp
194   tools/fontbrowser/fontmodel.cpp
195   tools/codecbrowser/codecmodel.cpp
196   tools/textdocumentinspector/textdocumentmodel.cpp
197   tools/textdocumentinspector/textdocumentformatmodel.cpp
198   tools/textdocumentinspector/textdocumentcontentview.cpp
199   tools/messagehandler/messagehandler.cpp
200   tools/messagehandler/messagemodel.cpp
201   toolmodel.cpp
202   promolabel.cpp
203   sidepane.cpp
205   tools/codecbrowser/codecbrowser.cpp
206   tools/connectioninspector/connectioninspector.cpp
207   tools/fontbrowser/fontbrowser.cpp
208   tools/metatypebrowser/metatypebrowser.cpp
209   tools/modelinspector/modelinspector.cpp
210   tools/modelinspector/modelinspectorwidget.cpp
211   tools/objectinspector/objectinspector.cpp
212   tools/resourcebrowser/resourcebrowser.cpp
213   tools/resourcebrowser/resourcefiltermodel.cpp
214   tools/sceneinspector/sceneinspector.cpp
215   tools/scriptenginedebugger/scriptenginedebugger.cpp
216   tools/selectionmodelinspector/selectionmodelinspector.cpp
217   tools/statemachineinspector/statemachineinspector.cpp
218   tools/textdocumentinspector/textdocumentinspector.cpp
219   tools/webinspector/webinspector.cpp
220   tools/widgetinspector/widgetinspector.cpp
221   tools/widgetinspector/overlaywidget.cpp
223   3rdparty/kde/kidentityproxymodel.cpp
224   3rdparty/kde/krecursivefilterproxymodel.cpp
225   3rdparty/kde/kfilterproxysearchline.cpp
226   3rdparty/qt/resourcemodel.cpp
229 if(NOT WIN32)
230   set(gammaray_srcs ${gammaray_srcs} tools/messagehandler/backtrace_unix.cpp)
231 else()
232   set(gammaray_srcs ${gammaray_srcs}
233                     tools/messagehandler/backtrace_win.cpp
234                     tools/messagehandler/StackWalker.cpp)
235 endif()
237 qt4_automoc(${gammaray_srcs} ${gammaray_runner_srcs})
238 qt4_wrap_ui(gammaray_srcs
239   mainwindow.ui
240   propertywidget.ui
241   methodinvocationdialog.ui
242   tools/sceneinspector/graphicssceneview.ui
244   tools/codecbrowser/codecbrowser.ui
245   tools/connectioninspector/connectioninspector.ui
246   tools/fontbrowser/fontbrowser.ui
247   tools/messagehandler/messagehandler.ui
248   tools/metatypebrowser/metatypebrowser.ui
249   tools/modelinspector/modelinspectorwidget.ui
250   tools/objectinspector/objectinspector.ui
251   tools/resourcebrowser/resourcebrowser.ui
252   tools/sceneinspector/sceneinspector.ui
253   tools/scriptenginedebugger/scriptenginedebugger.ui
254   tools/selectionmodelinspector/selectionmodelinspector.ui
255   tools/statemachineinspector/statemachineinspector.ui
256   tools/textdocumentinspector/textdocumentinspector.ui
257   tools/webinspector/webinspector.ui
258   tools/widgetinspector/widgetinspector.ui
260 qt4_add_resources(gammaray_srcs resources/gammaray.qrc)
261 add_library(gammaray_probe SHARED ${gammaray_srcs})
262 target_link_libraries(gammaray_probe
263   ${QT_QTCORE_LIBRARY}
264   ${QT_QTGUI_LIBRARY}
265   ${QT_QTSCRIPT_LIBRARY}
266   ${QT_QTSCRIPTTOOLS_LIBRARY}
267   ${QT_QTWEBKIT_LIBRARY}
269 if(NOT WIN32)
270   target_link_libraries(gammaray_probe dl)
271 endif()
272 set_target_properties(gammaray_probe PROPERTIES PREFIX "")
274 install(TARGETS gammaray gammaray_probe ${INSTALL_TARGETS_DEFAULT_ARGS})
276 if(UNIX AND NOT APPLE)
277   set(XDG_APPS_INSTALL_DIR share/applications)
278   install(FILES GammaRay.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
280   install(FILES resources/GammaRay-16x16.png DESTINATION share/icons/hicolor/16x16/apps)
281   install(FILES resources/GammaRay-32x32.png DESTINATION share/icons/hicolor/32x32/apps)
282   install(FILES resources/GammaRay-48x48.png DESTINATION share/icons/hicolor/48x48/apps)
283   install(FILES resources/GammaRay-128x128.png DESTINATION share/icons/hicolor/128x128/apps)
284   install(FILES resources/GammaRay-256x256.png DESTINATION share/icons/hicolor/256x256/apps)
285   install(FILES resources/GammaRay-512x512.png DESTINATION share/icons/hicolor/512x512/apps)
287   install(FILES resources/kdablogo160.png resources/kdabproducts.png resources/splashscreen.png DESTINATION share/icons/hicolor/apps)
288 endif()
290 set(LICENSE_FILE "License.txt")
291 set(README_FILE "ReadMe.txt")
292 if(NOT APPLE)
293   install(FILES "${LICENSE_FILE}" "${README_FILE}" DESTINATION ${DOC_INSTALL_DIR})
294 endif()
296 add_subdirectory(qmldebugcontrol)
298 find_program(CPPCHECK_EXECUTABLE cppcheck)
299 if(CPPCHECK_EXECUTABLE)
300   set(_cppcheck_flags "-I${CMAKE_CURRENT_BINARY_DIR}")
301   get_directory_property(_inc_dirs INCLUDE_DIRECTORIES)
302   foreach(_current ${_inc_dirs})
303     set(_cppcheck_flags ${_cppcheck_flags} "-I${_current}")
304   endforeach()
305   add_custom_target(cppcheck
306     COMMAND ${CPPCHECK_EXECUTABLE} --enable=all -j 4 --quiet ${_cppcheck_flags} ${CMAKE_CURRENT_SOURCE_DIR}
307     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
308     COMMENT "Running the cppcheck static code checker"
309   )
310 endif()
312 if(UNIX)
313   add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/gammaray.1
314                      COMMAND pod2man -c "KDAB Products" -r "\"${GAMMARAY_VERSION}\"" -s 1 ${CMAKE_SOURCE_DIR}/gammaray.pod ${CMAKE_BINARY_DIR}/gammaray.1
315                      DEPENDS ${CMAKE_SOURCE_DIR}/gammaray.pod
316                      )
318   add_custom_target(man ALL DEPENDS ${CMAKE_BINARY_DIR}/gammaray.1)
320   install(FILES ${CMAKE_BINARY_DIR}/gammaray.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/man/man1)
321 endif()
323 include(ExternalProject)
325 add_subdirectory(tests)