cmake: Modernize build system
[quassel.git] / src / main / CMakeLists.txt
1 # Convenience function to avoid boilerplate
2 function(setup_executable _target _define)
3     set_target_properties(${_target} PROPERTIES
4         COMPILE_FLAGS ${_define}
5         RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
6     )
7     target_link_libraries(${_target} PRIVATE ${ARGN})
8     install(TARGETS ${_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
9 endfunction()
10
11 # We need to initialize the appropriate resources, so let's give our main.cpp some hints
12 if (EMBED_DATA)
13     set_source_files_properties(main.cpp PROPERTIES COMPILE_DEFINITIONS EMBED_DATA)
14 endif()
15
16 # Build the executables
17 if (WANT_CORE)
18     add_executable(quasselcore main.cpp)
19     setup_executable(quasselcore -DBUILD_CORE Qt5::Core Quassel::Core)
20 endif()
21
22 if (WANT_CLIENT OR WANT_QTCLIENT)
23     add_executable(quasselclient WIN32 main.cpp)
24     setup_executable(quasselclient -DBUILD_QTUI Qt5::Core Qt5::Gui Quassel::QtUi)
25     if (WITH_KDE)
26         target_link_libraries(quasselclient PRIVATE KF5::CoreAddons)
27     endif()
28 endif()
29
30 if (WANT_MONO)
31     add_executable(quassel WIN32 main.cpp monoapplication.cpp)
32     setup_executable(quassel -DBUILD_MONO Qt5::Core Qt5::Gui Quassel::Core Quassel::QtUi)
33     if (WITH_KDE)
34         target_link_libraries(quassel PRIVATE KF5::CoreAddons)
35     endif()
36 endif()
37
38 # Build bundles for MacOSX
39 if (APPLE)
40     add_custom_command(TARGET quasselclient POST_BUILD
41                        COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makebundle.py
42                                ${CMAKE_SOURCE_DIR} "Quassel Client" ${CMAKE_BINARY_DIR}/quasselclient)
43
44     add_custom_command(TARGET quassel POST_BUILD
45                        COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makebundle.py
46                                ${CMAKE_SOURCE_DIR} "Quassel" ${CMAKE_BINARY_DIR}/quassel)
47     if (DEPLOY)
48         add_custom_command(TARGET quasselclient POST_BUILD WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
49                            COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makePackage.sh Client ${CMAKE_BINARY_DIR} qsvgicon)
50         add_custom_command(TARGET quasselcore POST_BUILD WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
51                            COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makePackage.sh Core ${CMAKE_BINARY_DIR})
52         add_custom_command(TARGET quassel POST_BUILD WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
53                            COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makePackage.sh Mono ${CMAKE_BINARY_DIR} qsvgicon)
54     endif()
55 endif()