CMakeLists.txt 9.46 KB
Newer Older
Alexandre Lision's avatar
Alexandre Lision committed
1 2 3 4 5 6
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

IF(POLICY CMP0022)
  CMAKE_POLICY(SET CMP0022 NEW)
ENDIF(POLICY CMP0022)

7
SET(PROJ_NAME Ring)
Guillaume Roguez's avatar
Guillaume Roguez committed
8
SET(RING_VERSION "0.4.0")
9
SET(RING_VERSION_NAME "Samuel de Champlain")
Guillaume Roguez's avatar
Guillaume Roguez committed
10
SET(BUNDLE_VERSION "Samuel de Champlain - beta")
11 12

SET(PROJ_COPYRIGHT " © 2015 Savoir-faire Linux \n GPLv3 https://www.gnu.org/copyleft/gpl.html")
13

14
ADD_DEFINITIONS("-std=c++11 -fobjc-arc")
Alexandre Lision's avatar
Alexandre Lision committed
15

Alexandre Lision's avatar
Alexandre Lision committed
16
PROJECT(${PROJ_NAME})
Alexandre Lision's avatar
Alexandre Lision committed
17 18

FIND_PACKAGE(Qt5Core REQUIRED)
19
FIND_PACKAGE(Qt5MacExtras REQUIRED)
Alexandre Lision's avatar
Alexandre Lision committed
20 21 22 23
FIND_PACKAGE(Qt5Widgets REQUIRED)
FIND_PACKAGE(LibRingClient REQUIRED)

INCLUDE_DIRECTORIES(SYSTEM ${Qt5Core_INCLUDE_DIRS})
24
INCLUDE_DIRECTORIES(SYSTEM ${Qt5MacExtras_INCLUDE_DIRS})
Alexandre Lision's avatar
Alexandre Lision committed
25 26 27 28 29 30 31 32
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR})
INCLUDE_DIRECTORIES(${LIB_RING_CLIENT_INCLUDE_DIR})

MESSAGE("LibRingClient is here:" ${LIB_RING_CLIENT_INCLUDE_DIR})
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")

#Files to compile
33
SET(ringclient_CONTROLLERS
34
   src/QNSTreeController.mm
35 36 37 38 39 40 41 42 43 44 45 46
   src/QNSTreeController.h
   src/CurrentCallVC.mm
   src/CurrentCallVC.h
   src/GeneralPrefsVC.mm
   src/RingWizardWC.mm
   src/RingWizardWC.h
   src/RingWindowController.mm
   src/RingWindowController.h
   src/ConversationsVC.mm
   src/ConversationsVC.h
   src/PreferencesVC.mm
   src/PreferencesVC.h
47
   src/AccGeneralVC.mm
48
   src/AccGeneralVC.h
49
   src/AccVideoVC.mm
50 51 52
   src/AccVideoVC.h
   src/AccAudioVC.mm
   src/AccAudioVC.h
53
   src/AccRingVC.mm
54
   src/AccRingVC.h
55
   src/AccAdvancedVC.mm
56
   src/AccAdvancedVC.h
57
   src/AccSecurityVC.mm
58
   src/AccSecurityVC.h
59 60
   src/CertificateWC.mm
   src/CertificateWC.h
61
   src/AudioPrefsVC.mm
62 63 64
   src/AudioPrefsVC.h
   src/AccountsVC.mm
   src/AccountsVC.h
65
   src/VideoPrefsVC.mm
66 67 68 69
   src/VideoPrefsVC.h
   src/GeneralPrefsVC.h
   src/HistoryVC.mm
   src/HistoryVC.h
70
   src/PersonsVC.mm
Alexandre Lision's avatar
Alexandre Lision committed
71 72 73
   src/PersonsVC.h
   src/ChatVC.mm
   src/ChatVC.h)
Alexandre Lision's avatar
Alexandre Lision committed
74

75 76
SET(ringclient_BACKENDS
   src/backends/AddressBookBackend.mm
Alexandre Lision's avatar
Alexandre Lision committed
77
   src/backends/AddressBookBackend.h)
78

79
SET(ringclient_VIEWS
Alexandre Lision's avatar
Alexandre Lision committed
80
   src/views/CallView.mm
81 82 83 84 85 86 87 88 89 90
   src/views/CallView.h
   src/views/PersonCell.mm
   src/views/PersonCell.h)

SET(ringclient_OTHERS
   src/main.mm
   src/AppDelegate.mm
   src/AppDelegate.h
   src/delegates/ImageManipulationDelegate.mm
   src/delegates/ImageManipulationDelegate.h)
Alexandre Lision's avatar
Alexandre Lision committed
91

Alexandre Lision's avatar
Alexandre Lision committed
92

93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
SET(ringclient_XIBS
   MainMenu
   RingWindow
   CurrentCall
   GeneralPrefs
   Accounts
   AccGeneral
   AccAudio
   AccVideo
   AccRing
   AccAdvanced
   AccSecurity
   AudioPrefs
   VideoPrefs
   PreferencesScreen
108 109
   RingWizard
   CertificateWindow)
Alexandre Lision's avatar
Alexandre Lision committed
110 111

# Icons
112
# This part tells CMake where to find and install the file itself
Alexandre Lision's avatar
Alexandre Lision committed
113 114 115 116
SET(myApp_ICON ${CMAKE_CURRENT_SOURCE_DIR}/data/appicon.icns)
SET_SOURCE_FILES_PROPERTIES(${myApp_ICON} PROPERTIES
       MACOSX_PACKAGE_LOCATION "Resources")

Alexandre Lision's avatar
Alexandre Lision committed
117 118 119
SET(ring_ICONS ${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_accept.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_call.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_cancel.png
120 121 122 123 124 125
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_hangup.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_hold.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_holdoff.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_mute_video.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_mute_audio.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_chat.png
Alexandre Lision's avatar
Alexandre Lision committed
126
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_search.png
Alexandre Lision's avatar
Alexandre Lision committed
127 128 129 130
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ancrage.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/audio.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/general.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/video.png
Alexandre Lision's avatar
Alexandre Lision committed
131
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_video.png)
132

Alexandre Lision's avatar
Alexandre Lision committed
133
SET_SOURCE_FILES_PROPERTIES(${ring_ICONS} PROPERTIES
Alexandre Lision's avatar
Alexandre Lision committed
134
       MACOSX_PACKAGE_LOCATION Resources)
135 136
SET_SOURCE_FILES_PROPERTIES(Credits.rtf PROPERTIES
       MACOSX_PACKAGE_LOCATION Resources)
Alexandre Lision's avatar
Alexandre Lision committed
137

138 139
# append '.xib' extension before linking xib files in executable
FOREACH(xib ${ringclient_XIBS})
140
  SET(ringclient_XIBS_FOR_EXECUTABLE ${ringclient_XIBS_FOR_EXECUTABLE} ui/${xib}.xib)
141 142
ENDFOREACH()

143
ADD_EXECUTABLE(${PROJ_NAME} MACOSX_BUNDLE
144 145 146 147
   ${ringclient_CONTROLLERS}
   ${ringclient_BACKENDS}
   ${ringclient_VIEWS}
   ${ringclient_OTHERS}
148
   ${ringclient_XIBS_FOR_EXECUTABLE}
Alexandre Lision's avatar
Alexandre Lision committed
149
   ${myApp_ICON}
150
   Credits.rtf
Alexandre Lision's avatar
Alexandre Lision committed
151 152
   ${ring_ICONS})

153 154 155 156 157 158 159 160
# Follow Xcode hierarchy principles
SOURCE_GROUP("Controllers" FILES ${ringclient_CONTROLLERS})
SOURCE_GROUP("Backends" FILES ${ringclient_BACKENDS})
SOURCE_GROUP("CustomViews" FILES ${ringclient_VIEWS})
SOURCE_GROUP("Classes" FILES ${ringclient_OTHERS})
SOURCE_GROUP("Resources\\Interface Builder" FILES ${ringclient_XIBS_FOR_EXECUTABLE})


161
TARGET_LINK_LIBRARIES( ${PROJ_NAME}
Alexandre Lision's avatar
Alexandre Lision committed
162
   ${LIB_RING_CLIENT_LIBRARY}
Alexandre Lision's avatar
Alexandre Lision committed
163
   ${Qt5Core_LIBRARIES}
164
   ${Qt5MacExtras_LIBRARIES}
Alexandre Lision's avatar
Alexandre Lision committed
165 166 167
   ${Qt5Widgets_LIBRARIES}
)

168 169 170 171 172 173 174 175 176
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework AppKit")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Cocoa")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework Quartz")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework AVFoundation")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework AddressBook")

# These variables are specific to our plist and are NOT standard CMake variables
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "MainMenu")
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "NSApplication")
Alexandre Lision's avatar
Alexandre Lision committed
177

178 179 180
SET_TARGET_PROPERTIES(${PROJ_NAME} PROPERTIES
        MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in
        MACOSX_BUNDLE_GUI_IDENTIFIER "cx.ring"
181
        MACOSX_BUNDLE_SHORT_VERSION_STRING ${RING_VERSION_NAME}
182 183
        MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJ_NAME} ${RING_VERSION} Nightly"
        MACOSX_BUNDLE_BUNDLE_VERSION ${RING_VERSION}
184
        MACOSX_BUNDLE_COPYRIGHT "${PROJ_COPYRIGHT}"
185 186 187 188
        MACOSX_BUNDLE_INFO_STRING "Nightly build of ${PROJ_NAME} ${RING_VERSION} for testing and development"
        MACOSX_BUNDLE_BUNDLE_NAME ${PROJ_NAME}
        MACOSX_BUNDLE_ICON_FILE "appicon.icns"
    )
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206

# Make sure we can find the 'ibtool' program. If we can NOT find it we
# skip generation of this project
FIND_PROGRAM(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin")
IF(${IBTOOL} STREQUAL "IBTOOL-NOTFOUND")
  MESSAGE(SEND_ERROR "ibtool can not be found and is needed to compile the .xib files. It should have been installed with
                    the Apple developer tools. The default system paths were searched in addition to ${OSX_DEVELOPER_ROOT}/usr/bin")
endif()

# Make sure the 'Resources' Directory is correctly created before we build
ADD_CUSTOM_COMMAND(TARGET ${PROJ_NAME} PRE_BUILD
                      COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/\${CONFIGURATION}/${PROJ_NAME}.app/Contents/Resources)

# Compile the .xib files using the 'ibtool' program with the destination being the app package
FOREACH(xib ${ringclient_XIBS})
  ADD_CUSTOM_COMMAND(TARGET ${PROJ_NAME} POST_BUILD
                      COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text
                              --compile ${CMAKE_CURRENT_BINARY_DIR}/\${CONFIGURATION}/${PROJ_NAME}.app/Contents/Resources/${xib}.nib
207 208
                             ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib
                      COMMENT "Compiling ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib")
209 210

ENDFOREACH()
211 212 213 214 215 216 217

set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX})

SET(APPS "\${CMAKE_INSTALL_PREFIX}/${PROJ_NAME}.app")

INSTALL(TARGETS ${PROJ_NAME} BUNDLE DESTINATION . COMPONENT Runtime)

218
SET(QT_PLUGINS_DESTDIR ${PROJ_NAME}.app/Contents/Plugins)
219 220
#--------------------------------------------------------------------------------
# Install needed Qt plugins by copying directories from the qt installation
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243


#MESSAGE("GUI====")
#foreach(plugin ${Qt5Gui_PLUGINS})
#  message("Plugin ${plugin} is at location ${_loc}")
#endforeach()

LIST(APPEND QT_PLUGINS_IMAGEFORMAT  Qt5::QTgaPlugin
                                    Qt5::QGifPlugin
                                    Qt5::QICNSPlugin
                                    Qt5::QICOPlugin
                                    Qt5::QJpegPlugin
                                    Qt5::QJp2Plugin
                                    Qt5::QMngPlugin
                                    Qt5::QTiffPlugin
                                    Qt5::QDDSPlugin)

# we need two plugin directories platform and imageformats
GET_TARGET_PROPERTY(_loc Qt5::QCocoaIntegrationPlugin LOCATION)
INSTALL(FILES ${_loc} DESTINATION ${QT_PLUGINS_DESTDIR}/platforms COMPONENT Runtime)
LIST(APPEND QT_PLUGINS Qt5::QCocoaIntegrationPlugin)

FOREACH(plugin ${QT_PLUGINS_IMAGEFORMAT})
244
  GET_TARGET_PROPERTY(_loc ${plugin} LOCATION)
245 246
  INSTALL(FILES ${_loc} DESTINATION ${QT_PLUGINS_DESTDIR}/imageformats COMPONENT Runtime)
  LIST(APPEND QT_PLUGINS ${plugin})
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
ENDFOREACH()

# directories to look for dependencies
SET(DIRS ${CMAKE_INSTALL_PREFIX}/lib ${QT_LIB_DIR})

INSTALL(CODE "
    file(GLOB_RECURSE QTPLUGINS
      \"\${CMAKE_INSTALL_PREFIX}/${QT_PLUGINS_DESTDIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
    include(BundleUtilities)
    SET(BU_CHMOD_BUNDLE_ITEMS TRUE)
    fixup_bundle(\"${APPS}\" \"\${QTPLUGINS}\" \"${DIRS}\")
    " COMPONENT Runtime)

#================================
# Packaging
#================================
SET( CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJ_NAME})
SET( CPACK_PACKAGE_NAME ${PROJ_NAME} )
SET( CPACK_PACKAGE_CONTACT "Alexandre Lision")
SET( CPACK_PACKAGE_VENDOR "Savoir-faire Linux")
SET( CPACK_PACKAGE_VERSION_MAJOR ${PROG_MAJOR_VERSION})
SET( CPACK_PACKAGE_VERSION_MINOR ${PROG_MINOR_VERSION})
SET( CPACK_PACKAGE_VERSION_PATCH ${PROG_PATCH_VERSION})
SET(CPACK_BINARY_DRAGNDROP ON)
SET( CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
INCLUDE(CPack)