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
9 # To build the man page from POD, run 'make man' after CMake.
10 # To install the resulting man page, run 'make install'
14 cmake_minimum_required(VERSION 2.8)
17 set(Prog_NAME "GammaRay")
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}")
28 if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
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})")
39 if(NOT CMAKE_BUILD_TYPE)
40 set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
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)
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")
67 INSTALL_TARGETS_DEFAULT_ARGS
68 RUNTIME DESTINATION bin
69 LIBRARY DESTINATION ${LIB_INSTALL_DIR}
70 ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT Devel
74 add_definitions(-DUNICODE -D_UNICODE)
78 # on the Mac support an extra install directory for application bundles
80 INSTALL_TARGETS_DEFAULT_ARGS
81 ${INSTALL_TARGETS_DEFAULT_ARGS}
82 BUNDLE DESTINATION "/Applications/Qt4"
86 if(UNIX AND NOT APPLE)
87 set(DOC_INSTALL_DIR share/doc/gammaray/)
89 set(DOC_INSTALL_DIR .)
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.
95 GAMMARAY_UNKNOWN_CXX_MANGLED_NAMES
96 "Enable if your compiler uses an unsupported C++ name mangling scheme"
99 if(GAMMARAY_UNKNOWN_CXX_MANGLED_NAMES)
100 add_definitions(-DGAMMARAY_UNKNOWN_CXX_MANGLED_NAMES)
104 ${CMAKE_CURRENT_SOURCE_DIR}/config-gammaray.h.cmake
105 ${CMAKE_CURRENT_BINARY_DIR}/config-gammaray.h
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")
119 if(HAVE_GCC_LOGICAL_OP)
120 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wlogical-op")
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
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
147 set(gammaray_runner_srcs
148 ${gammaray_runner_srcs}
149 injector/gdbinjector.cpp
150 attach/processlist_unix.cpp
153 set(gammaray_runner_srcs
154 ${gammaray_runner_srcs}
155 attach/processlist_win.cpp
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})
170 objectpropertymodel.cpp
171 objectdynamicpropertymodel.cpp
172 objectstaticpropertymodel.cpp
173 objectclassinfomodel.cpp
174 objectmethodmodel.cpp
178 connectionfilterproxymodel.cpp
179 tools/sceneinspector/scenemodel.cpp
180 tools/statemachineinspector/statemodel.cpp
181 tools/statemachineinspector/transitionmodel.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
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
230 set(gammaray_srcs ${gammaray_srcs} tools/messagehandler/backtrace_unix.cpp)
232 set(gammaray_srcs ${gammaray_srcs}
233 tools/messagehandler/backtrace_win.cpp
234 tools/messagehandler/StackWalker.cpp)
237 qt4_automoc(${gammaray_srcs} ${gammaray_runner_srcs})
238 qt4_wrap_ui(gammaray_srcs
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
265 ${QT_QTSCRIPT_LIBRARY}
266 ${QT_QTSCRIPTTOOLS_LIBRARY}
267 ${QT_QTWEBKIT_LIBRARY}
270 target_link_libraries(gammaray_probe dl)
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)
290 set(LICENSE_FILE "License.txt")
291 set(README_FILE "ReadMe.txt")
293 install(FILES "${LICENSE_FILE}" "${README_FILE}" DESTINATION ${DOC_INSTALL_DIR})
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}")
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"
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
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)
323 include(ExternalProject)
325 add_subdirectory(tests)