b8a4140272fb83c699e86a3aa9633f31d6e524a0
[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_property(SOURCE main.cpp APPEND PROPERTY COMPILE_DEFINITIONS EMBED_DATA)
14 endif()
15
16 if (HAVE_UMASK)
17     set_property(SOURCE main.cpp APPEND PROPERTY COMPILE_DEFINITIONS HAVE_UMASK)
18 endif()
19
20 if (WITH_BUNDLED_ICONS)
21     set_property(SOURCE main.cpp APPEND PROPERTY COMPILE_DEFINITIONS WITH_BUNDLED_ICONS)
22 endif()
23
24 # Windows icon resource
25 if(WIN32)
26     if(MINGW)
27         find_program(WINDRES_EXECUTABLE NAMES windres)
28         if(WINDRES_EXECUTABLE)
29             exec_program(windres
30                 ARGS "-i ${CMAKE_SOURCE_DIR}/pics/win32.rc"
31                      "-o ${CMAKE_CURRENT_BINARY_DIR}/win32.o"
32                      "--include-dir=${CMAKE_SOURCE_DIR}/pics"
33                 )
34             set(WIN_RC ${CMAKE_CURRENT_BINARY_DIR}/win32.o)
35         endif()
36     else()
37         set(WIN_RC ${CMAKE_SOURCE_DIR}/pics/win32.rc)
38     endif()
39 endif()
40
41
42 # Build the executables
43 if (WANT_CORE)
44     add_executable(quasselcore main.cpp ${WIN_RC})
45     setup_executable(quasselcore -DBUILD_CORE Qt5::Core Quassel::Core)
46 endif()
47
48 if (WANT_CLIENT OR WANT_QTCLIENT)
49     add_executable(quasselclient WIN32 main.cpp ${WIN_RC})
50     setup_executable(quasselclient -DBUILD_QTUI Qt5::Core Qt5::Gui Quassel::QtUi)
51     if (WITH_KDE)
52         target_link_libraries(quasselclient PRIVATE KF5::CoreAddons)
53     endif()
54 endif()
55
56 if (WANT_MONO)
57     add_executable(quassel WIN32 main.cpp monoapplication.cpp ${WIN_RC})
58     setup_executable(quassel -DBUILD_MONO Qt5::Core Qt5::Gui Quassel::Core Quassel::QtUi)
59     if (WITH_KDE)
60         target_link_libraries(quassel PRIVATE KF5::CoreAddons)
61     endif()
62 endif()
63
64 # Build bundles for MacOSX
65 if (APPLE)
66     add_custom_command(TARGET quasselclient POST_BUILD
67                        COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makebundle.py
68                                ${CMAKE_SOURCE_DIR} "Quassel Client" ${CMAKE_BINARY_DIR}/quasselclient)
69
70     add_custom_command(TARGET quassel POST_BUILD
71                        COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makebundle.py
72                                ${CMAKE_SOURCE_DIR} "Quassel" ${CMAKE_BINARY_DIR}/quassel)
73     if (DEPLOY)
74         add_custom_command(TARGET quasselclient POST_BUILD WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
75                            COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makePackage.sh Client ${CMAKE_BINARY_DIR} qsvgicon)
76         add_custom_command(TARGET quasselcore POST_BUILD WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
77                            COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makePackage.sh Core ${CMAKE_BINARY_DIR})
78         add_custom_command(TARGET quassel POST_BUILD WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
79                            COMMAND ${CMAKE_SOURCE_DIR}/scripts/build/macosx_makePackage.sh Mono ${CMAKE_BINARY_DIR} qsvgicon)
80     endif()
81 endif()