CMakeLists.txt 17.1 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)
8 9 10

# To build nighlies we need to update RING_VERSION with an optional command line arg
IF("${RING_VERSION}" STREQUAL "")
Guillaume Roguez's avatar
Guillaume Roguez committed
11
   SET(RING_VERSION "1.0.0")
12 13
ENDIF("${RING_VERSION}" STREQUAL "")

Alexandre Lision's avatar
Alexandre Lision committed
14
SET(RING_VERSION_NAME "Louis-Joseph Papineau")
15

16
MESSAGE("Building Ring version - " ${RING_VERSION_NAME} " " ${RING_VERSION})
Alexandre Lision's avatar
Alexandre Lision committed
17
SET(PROJ_COPYRIGHT " © 2015-2016 Savoir-faire Linux \n GPLv3 https://www.gnu.org/copyleft/gpl.html")
18

Alexandre Lision's avatar
Alexandre Lision committed
19
ADD_DEFINITIONS("-std=c++11 -stdlib=libc++ -fobjc-arc")
Alexandre Lision's avatar
Alexandre Lision committed
20

Alexandre Lision's avatar
Alexandre Lision committed
21
PROJECT(${PROJ_NAME})
Alexandre Lision's avatar
Alexandre Lision committed
22 23

FIND_PACKAGE(Qt5Core REQUIRED)
24
FIND_PACKAGE(Qt5MacExtras REQUIRED)
Alexandre Lision's avatar
Alexandre Lision committed
25 26 27
FIND_PACKAGE(Qt5Widgets REQUIRED)
FIND_PACKAGE(LibRingClient REQUIRED)

28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
EXECUTE_PROCESS(COMMAND git submodule update --init
                WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})

INCLUDE(ExternalProject)
ExternalProject_Add(libqrencode
    GIT_SUBMODULES libqrencode
    SOURCE_DIR ${CMAKE_SOURCE_DIR}/libqrencode
    BINARY_DIR  ${CMAKE_SOURCE_DIR}/libqrencode
    INSTALL_DIR ${CMAKE_SOURCE_DIR}/libqrencode
    CONFIGURE_COMMAND
    #hack to fix incomplete config.h on first run
    COMMAND ./autogen.sh
    COMMAND ./autogen.sh && ./configure --prefix=${CMAKE_SOURCE_DIR}/libqrencode
    BUILD_COMMAND make
    INSTALL_COMMAND make install)

INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/libqrencode/include)
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/libqrencode/lib)

47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
IF(NOT (${ENABLE_SPARKLE} MATCHES false))
   MESSAGE("Sparkle auto-update enabled")

   # find_library searches in /Library/Frameworks by default
   # We add an hint to our custom location

   FIND_LIBRARY(SPARKLE_FRAMEWORK
                NAMES Sparkle
                HINTS ${CMAKE_CURRENT_SOURCE_DIR}/sparkle)
   IF(EXISTS ${SPARKLE_FRAMEWORK})
      SET(ENABLE_SPARKLE 1 CACHE BOOLEAN "Enable Sparkle")
      ADD_DEFINITIONS(-DENABLE_SPARKLE=1)
      MESSAGE("Sparkle is here:" ${SPARKLE_FRAMEWORK})
      FIND_PATH(SPARKLE_INCLUDE_DIR Sparkle.h HINTS ${SPARKLE_FRAMEWORK}/Headers)
      # we need to copy the public key to check the updates
      SET(PUBLIC_KEY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/sparkle/dsa_pub.pem")
      IF(EXISTS ${PUBLIC_KEY_PATH})
         MESSAGE(STATUS "Looking for Public Key - found")
         SET_SOURCE_FILES_PROPERTIES(${PUBLIC_KEY_PATH} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
         SET(PUBLIC_KEY ${PUBLIC_KEY_PATH})
      ELSE(EXISTS ${PUBLIC_KEY_PATH})
         MESSAGE(WARNING "Looking for Public Key - not found")
         MESSAGE(WARNING "${PUBLIC_KEY_PATH} not found Sparkle Framework will NOT work and may even prevent application from launching. Please consider disabling Sparkle Framework, creating a keypair for testing purposes")
      ENDIF(EXISTS ${PUBLIC_KEY_PATH})
   ELSE()
72 73
      MESSAGE(WARNING "Sparkle framework not found, disabling it... to build it see README")
      SET(ENABLE_SPARKLE 0 CACHE BOOLEAN "Enable Sparkle")
74 75 76
   ENDIF(EXISTS ${SPARKLE_FRAMEWORK})
ENDIF(NOT (${ENABLE_SPARKLE} MATCHES false))

Alexandre Lision's avatar
Alexandre Lision committed
77
INCLUDE_DIRECTORIES(SYSTEM ${Qt5Core_INCLUDE_DIRS})
78
INCLUDE_DIRECTORIES(SYSTEM ${Qt5MacExtras_INCLUDE_DIRS})
Alexandre Lision's avatar
Alexandre Lision committed
79 80 81 82
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR})
INCLUDE_DIRECTORIES(${LIB_RING_CLIENT_INCLUDE_DIR})

Alexandre Lision's avatar
Alexandre Lision committed
83 84 85 86 87 88
SET(CMAKE_MACOSX_RPATH ON)
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
SET(CMAKE_INSTALL_RPATH "${CMAKE_CURRENT_SOURCE_DIR}")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

89
MESSAGE("LRC is here:" ${LIB_RING_CLIENT_INCLUDE_DIR})
Alexandre Lision's avatar
Alexandre Lision committed
90 91 92
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")

#Files to compile
93
SET(ringclient_CONTROLLERS
94
   src/QNSTreeController.mm
95 96 97 98 99 100 101 102
   src/QNSTreeController.h
   src/CurrentCallVC.mm
   src/CurrentCallVC.h
   src/GeneralPrefsVC.mm
   src/RingWizardWC.mm
   src/RingWizardWC.h
   src/RingWindowController.mm
   src/RingWindowController.h
Alexandre Lision's avatar
Alexandre Lision committed
103 104
   src/PreferencesWC.mm
   src/PreferencesWC.h
105
   src/AccGeneralVC.mm
106
   src/AccGeneralVC.h
107 108
   src/AccMediaVC.mm
   src/AccMediaVC.h
109
   src/AccRingVC.mm
110
   src/AccRingVC.h
111
   src/AccAdvancedVC.mm
112
   src/AccAdvancedVC.h
113
   src/AccSecurityVC.mm
114
   src/AccSecurityVC.h
115 116
   src/CertificateWC.mm
   src/CertificateWC.h
Alexandre Lision's avatar
Alexandre Lision committed
117 118
   src/PathPasswordWC.mm
   src/PathPasswordWC.h
119
   src/AudioPrefsVC.mm
120 121 122
   src/AudioPrefsVC.h
   src/AccountsVC.mm
   src/AccountsVC.h
123
   src/VideoPrefsVC.mm
124 125 126 127
   src/VideoPrefsVC.h
   src/GeneralPrefsVC.h
   src/HistoryVC.mm
   src/HistoryVC.h
128
   src/PersonsVC.mm
Alexandre Lision's avatar
Alexandre Lision committed
129 130
   src/PersonsVC.h
   src/ChatVC.mm
131 132
   src/ChatVC.h
   src/PersonLinkerVC.mm
133 134
   src/PersonLinkerVC.h
   src/SmartViewVC.mm
Alexandre Lision's avatar
Alexandre Lision committed
135 136
   src/SmartViewVC.h
   src/BrokerVC.mm
137 138
   src/BrokerVC.h
   src/ConversationVC.mm
139 140 141 142 143
   src/ConversationVC.h
   src/LoadingWCDelegate.h
   src/AbstractLoadingWC.h
   src/AbstractLoadingWC.mm
)
Alexandre Lision's avatar
Alexandre Lision committed
144

145 146
SET(ringclient_BACKENDS
   src/backends/AddressBookBackend.mm
Alexandre Lision's avatar
Alexandre Lision committed
147
   src/backends/AddressBookBackend.h)
148

149
SET(ringclient_VIEWS
Alexandre Lision's avatar
Alexandre Lision committed
150
   src/views/CallView.mm
151
   src/views/CallView.h
152 153
   src/views/ITProgressIndicator.mm
   src/views/ITProgressIndicator.h
154
   src/views/RingOutlineView.mm
155 156
   src/views/RingOutlineView.h
   src/views/RingIDField.mm
Alexandre Lision's avatar
Alexandre Lision committed
157 158 159 160 161
   src/views/RingIDField.h
   src/views/HoverTableRowView.mm
   src/views/HoverTableRowView.h
   src/views/NSColor+RingTheme.mm
   src/views/NSColor+RingTheme.h
162 163
   src/views/NSImage+Extensions.mm
   src/views/NSImage+Extensions.h
Alexandre Lision's avatar
Alexandre Lision committed
164
   src/views/ContextualTableCellView.mm
Alexandre Lision's avatar
Alexandre Lision committed
165 166
   src/views/ContextualTableCellView.h
   src/views/IconButton.h
167 168 169
   src/views/IconButton.mm
   src/views/IMTableCellView.h
   src/views/IMTableCellView.mm)
170 171 172 173 174

SET(ringclient_OTHERS
   src/main.mm
   src/AppDelegate.mm
   src/AppDelegate.h
Alexandre Lision's avatar
Alexandre Lision committed
175
   src/Constants.h
176 177
   src/INDSequentialTextSelectionManager.mm
   src/INDSequentialTextSelectionManager.h
178 179
   src/delegates/ImageManipulationDelegate.mm
   src/delegates/ImageManipulationDelegate.h)
Alexandre Lision's avatar
Alexandre Lision committed
180

Alexandre Lision's avatar
Alexandre Lision committed
181

182 183 184 185 186 187 188
SET(ringclient_XIBS
   MainMenu
   RingWindow
   CurrentCall
   GeneralPrefs
   Accounts
   AccGeneral
189
   AccMedia
190 191 192 193 194
   AccRing
   AccAdvanced
   AccSecurity
   AudioPrefs
   VideoPrefs
Alexandre Lision's avatar
Alexandre Lision committed
195
   PreferencesWindow
196
   RingWizard
197
   CertificateWindow
Alexandre Lision's avatar
Alexandre Lision committed
198
   PathPasswordWindow
Alexandre Lision's avatar
Alexandre Lision committed
199
   PersonLinker
200 201
   Broker
   Conversation)
Alexandre Lision's avatar
Alexandre Lision committed
202 203

# Icons
204
# This part tells CMake where to find and install the file itself
Alexandre Lision's avatar
Alexandre Lision committed
205 206
SET(myApp_ICON ${CMAKE_CURRENT_SOURCE_DIR}/data/appicon.icns)
SET_SOURCE_FILES_PROPERTIES(${myApp_ICON} PROPERTIES
207
       MACOSX_PACKAGE_LOCATION Resources)
Alexandre Lision's avatar
Alexandre Lision committed
208

209 210
SET(ring_ICONS
${CMAKE_CURRENT_SOURCE_DIR}/data/symbol_name.png
Alexandre Lision's avatar
Alexandre Lision committed
211
${CMAKE_CURRENT_SOURCE_DIR}/data/symbol_blue.png
Alexandre Lision's avatar
Alexandre Lision committed
212
${CMAKE_CURRENT_SOURCE_DIR}/data/background_tile.png
213
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_accept.png
214
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_arrow_back.png
Alexandre Lision's avatar
Alexandre Lision committed
215 216
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_call.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_cancel.png
217 218 219 220 221 222
${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
223
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_search.png
224
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_quality.png
Alexandre Lision's avatar
Alexandre Lision committed
225
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_record.png
226 227 228
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_call_received.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_call_missed.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_call_made.png
Alexandre Lision's avatar
Alexandre Lision committed
229
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_transfer.png
230 231
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_add_participant.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_merge_calls.png
232
${CMAKE_CURRENT_SOURCE_DIR}/data/default_user_icon.png
Alexandre Lision's avatar
Alexandre Lision committed
233
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ancrage.png
234
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_send.png
Alexandre Lision's avatar
Alexandre Lision committed
235
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/audio.png
236
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_person_add.png
237 238
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_persons.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_history.png
Alexandre Lision's avatar
Alexandre Lision committed
239 240
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/general.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/video.png
Alexandre Lision's avatar
Alexandre Lision committed
241
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_delete.png
242
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/qrcode.png
Alexandre Lision's avatar
Alexandre Lision committed
243
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_video.png)
244

Alexandre Lision's avatar
Alexandre Lision committed
245
SET_SOURCE_FILES_PROPERTIES(${ring_ICONS} PROPERTIES
Alexandre Lision's avatar
Alexandre Lision committed
246
       MACOSX_PACKAGE_LOCATION Resources)
247 248
SET_SOURCE_FILES_PROPERTIES(Credits.rtf PROPERTIES
       MACOSX_PACKAGE_LOCATION Resources)
Alexandre Lision's avatar
Alexandre Lision committed
249

250 251 252 253 254 255
# package ringtones
IF(NOT IS_DIRECTORY ${RINGTONE_DIR})
    MESSAGE("No ringtone folder provided, use RINGTONE_DIR to specify one")
    SET(RINGTONE_DIR ${CMAKE_INSTALL_PREFIX}/share/ring/ringtones)
    MESSAGE("Trying ${RINGTONE_DIR}")
ENDIF()
256

257 258 259 260 261 262 263 264 265 266
IF(IS_DIRECTORY ${RINGTONE_DIR})
    FILE(GLOB RINGTONE_LIST ${RINGTONE_DIR}/*)
    FOREACH(RINGTONE ${RINGTONE_LIST})
        MESSAGE("Adding ringtone ${RINGTONE}")
        GET_FILENAME_COMPONENT(FILE_PATH ${RINGTONE} ABSOLUTE)
        SET(ring_RINGTONES ${ring_RINGTONES} ${FILE_PATH})
    ENDFOREACH()
ELSE()
    MESSAGE("${RINGTONE_DIR} does not exist or is not readable")
ENDIF()
267 268 269

SET_SOURCE_FILES_PROPERTIES(${ring_RINGTONES}
                PROPERTIES MACOSX_PACKAGE_LOCATION Resources/ringtones)
Alexandre Lision's avatar
Alexandre Lision committed
270 271 272 273 274 275 276 277 278 279 280 281 282 283

# Check which translations are found for LRC
SET(LRC_TRANSLATIONS_PATH ${CMAKE_INSTALL_PREFIX}/share/libringclient/translations)
FILE(GLOB QM_LIST ${LRC_TRANSLATIONS_PATH}/*.qm)

FOREACH(QM_FILE ${QM_LIST})
    # Extract country code from filename
    GET_FILENAME_COMPONENT(FILENAME ${QM_FILE} NAME_WE)
    STRING(REGEX REPLACE "^lrc_" "" LANG ${FILENAME})

    SET_SOURCE_FILES_PROPERTIES(${LRC_TRANSLATIONS_PATH}/lrc_${LANG}.qm
                PROPERTIES MACOSX_PACKAGE_LOCATION Resources/QtTranslations)
    SET(LOCALIZED_${LANG} ${LOCALIZED_${LANG}}
                "${LRC_TRANSLATIONS_PATH}/lrc_${LANG}.qm")
284 285 286 287 288 289 290 291 292 293 294
ENDFOREACH()

# Check which translations are found for the client
FILE(GLOB LPROJ_LIST ui/*.lproj)

FOREACH(LPROJ ${LPROJ_LIST})
    # Extract country code from <lang>.lproj folder name
    GET_FILENAME_COMPONENT(LANG ${LPROJ} NAME_WE)
    IF(EXISTS "${LPROJ}/Localizable.strings")
        MESSAGE("Localizable:" ${LANG})
        SET_SOURCE_FILES_PROPERTIES(${LPROJ}/Localizable.strings
295
                        PROPERTIES MACOSX_PACKAGE_LOCATION Resources/${LANG}.lproj)
296 297 298 299 300 301 302

        SET(LOCALIZED_${LANG} ${LOCALIZED_${LANG}}
                        ${LPROJ}/Localizable.strings)
    ENDIF()
    FOREACH(xib ${ringclient_XIBS})
       IF(EXISTS "${LPROJ}/${xib}.strings")
            SET_SOURCE_FILES_PROPERTIES(${LPROJ}/${xib}.strings
303
                        PROPERTIES MACOSX_PACKAGE_LOCATION Resources/${LANG}.lproj)
304

305
            SET(LOCALIZED_${LANG} ${LOCALIZED_${LANG}}
306 307 308
                        ${LPROJ}/${xib}.strings)
        ENDIF()
    ENDFOREACH()
Alexandre Lision's avatar
Alexandre Lision committed
309 310 311 312 313 314 315 316

    # Regroup those files under a .lproj folder
    SOURCE_GROUP("Resources\\${LANG}.lproj" FILES
                                    ${LOCALIZED_${LANG}})
    # Add them to the list of files to package
    SET(LOCALIZABLE_FILES ${LOCALIZABLE_FILES} ${LOCALIZED_${LANG}})
ENDFOREACH()

317 318
# append '.xib' extension before linking xib files in executable
FOREACH(xib ${ringclient_XIBS})
319
  SET(ringclient_XIBS_FOR_EXECUTABLE ${ringclient_XIBS_FOR_EXECUTABLE} ui/Base.lproj/${xib}.xib)
320 321
ENDFOREACH()

Alexandre Lision's avatar
Alexandre Lision committed
322
SET(TO_ADD
323 324 325 326
   ${ringclient_CONTROLLERS}
   ${ringclient_BACKENDS}
   ${ringclient_VIEWS}
   ${ringclient_OTHERS}
327
   ${ringclient_XIBS_FOR_EXECUTABLE}
Alexandre Lision's avatar
Alexandre Lision committed
328
   ${LOCALIZABLE_FILES}
Alexandre Lision's avatar
Alexandre Lision committed
329
   ${myApp_ICON}
330
   Credits.rtf
331 332
   ${ring_ICONS}
   ${ring_RINGTONES})
Alexandre Lision's avatar
Alexandre Lision committed
333

334 335 336 337 338 339
IF(ENABLE_SPARKLE)
   SET( TO_ADD ${TO_ADD} ${PUBLIC_KEY} ${SPARKLE_FRAMEWORK})
ENDIF(ENABLE_SPARKLE)

ADD_EXECUTABLE(${PROJ_NAME} MACOSX_BUNDLE ${TO_ADD})

340 341
ADD_DEPENDENCIES(${PROJ_NAME} libqrencode)

342 343 344 345 346
# 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})
Alexandre Lision's avatar
Alexandre Lision committed
347 348
SOURCE_GROUP("Resources\\Interface Builder" FILES
                                    ${ringclient_XIBS_FOR_EXECUTABLE})
349
SOURCE_GROUP("Resources\\ringtones" FILES ${ring_RINGTONES})
350

351 352 353
IF(ENABLE_SPARKLE)
    SOURCE_GROUP("Frameworks" FILES ${SPARKLE_FRAMEWORK})
ENDIF(ENABLE_SPARKLE)
354

355
TARGET_LINK_LIBRARIES( ${PROJ_NAME}
Alexandre Lision's avatar
Alexandre Lision committed
356
   ${LIB_RING_CLIENT_LIBRARY}
Alexandre Lision's avatar
Alexandre Lision committed
357
   ${Qt5Core_LIBRARIES}
358
   ${Qt5MacExtras_LIBRARIES}
Alexandre Lision's avatar
Alexandre Lision committed
359
   ${Qt5Widgets_LIBRARIES}
360
   -lqrencode
Alexandre Lision's avatar
Alexandre Lision committed
361 362
)

363 364 365 366
IF(ENABLE_SPARKLE)
   TARGET_LINK_LIBRARIES(${PROJ_NAME} ${SPARKLE_FRAMEWORK})
ENDIF(ENABLE_SPARKLE)

367 368 369 370 371
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")
372
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework SystemConfiguration")
373 374

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

378 379 380
SET_TARGET_PROPERTIES(${PROJ_NAME} PROPERTIES
        MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in
        MACOSX_BUNDLE_GUI_IDENTIFIER "cx.ring"
381 382 383
        MACOSX_BUNDLE_SHORT_VERSION_STRING "${RING_VERSION_NAME}"
        MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJ_NAME} ${RING_VERSION_NAME} Nightly"
        MACOSX_BUNDLE_BUNDLE_VERSION ${RING_VERSION}
384
        MACOSX_BUNDLE_COPYRIGHT "${PROJ_COPYRIGHT}"
385 386 387 388
        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"
    )
389 390 391 392 393 394 395 396 397 398 399 400 401

# 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()

# 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
402 403 404
                              --compile ${CMAKE_CURRENT_BINARY_DIR}/\${CONFIGURATION}/${PROJ_NAME}.app/Contents/Resources/Base.lproj/${xib}.nib
                             ${CMAKE_CURRENT_SOURCE_DIR}/ui/Base.lproj/${xib}.xib
                      COMMENT "Compiling ${CMAKE_CURRENT_SOURCE_DIR}/ui/Base.lproj/${xib}.xib")
405 406

ENDFOREACH()
407

408
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX})
409 410 411 412 413

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

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

414
SET(QT_PLUGINS_DESTDIR ${PROJ_NAME}.app/Contents/Plugins)
415 416
#--------------------------------------------------------------------------------
# Install needed Qt plugins by copying directories from the qt installation
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439


#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})
440
  GET_TARGET_PROPERTY(_loc ${plugin} LOCATION)
441 442
  INSTALL(FILES ${_loc} DESTINATION ${QT_PLUGINS_DESTDIR}/imageformats COMPONENT Runtime)
  LIST(APPEND QT_PLUGINS ${plugin})
443 444 445
ENDFOREACH()

# directories to look for dependencies
446 447 448 449
SET(DIRS    ${CMAKE_INSTALL_PREFIX}/lib
            ${QT_LIB_DIR}
            ${CMAKE_CURRENT_SOURCE_DIR}/sparkle
            ${CMAKE_CURRENT_SOURCE_DIR}/libqrencode/lib)
450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471

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)