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