CMakeLists.txt 19.2 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 "")

Guillaume Roguez's avatar
Guillaume Roguez committed
14
SET(RING_VERSION_NAME "Liberté, Égalité, Fraternité - Version 1.0")
15

16
MESSAGE("Building Ring version - " ${RING_VERSION_NAME} " " ${RING_VERSION})
17
SET(PROJ_COPYRIGHT " © 2015-2017 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
FIND_PACKAGE(Qt5Widgets REQUIRED)
26
FIND_PACKAGE(Qt5Sql REQUIRED)
Alexandre Lision's avatar
Alexandre Lision committed
27
FIND_PACKAGE(LibRingClient REQUIRED)
28
FIND_PACKAGE(OpenGL REQUIRED)
Alexandre Lision's avatar
Alexandre Lision committed
29

30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
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)

49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
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()
74 75
      MESSAGE(WARNING "Sparkle framework not found, disabling it... to build it see README")
      SET(ENABLE_SPARKLE 0 CACHE BOOLEAN "Enable Sparkle")
76 77 78
   ENDIF(EXISTS ${SPARKLE_FRAMEWORK})
ENDIF(NOT (${ENABLE_SPARKLE} MATCHES false))

Alexandre Lision's avatar
Alexandre Lision committed
79
INCLUDE_DIRECTORIES(SYSTEM ${Qt5Core_INCLUDE_DIRS})
80
INCLUDE_DIRECTORIES(SYSTEM ${Qt5MacExtras_INCLUDE_DIRS})
Alexandre Lision's avatar
Alexandre Lision committed
81 82 83
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR})
INCLUDE_DIRECTORIES(${LIB_RING_CLIENT_INCLUDE_DIR})
84
INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
Alexandre Lision's avatar
Alexandre Lision committed
85

Alexandre Lision's avatar
Alexandre Lision committed
86 87 88 89 90 91
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)

92
MESSAGE("LRC is here:" ${LIB_RING_CLIENT_INCLUDE_DIR})
Alexandre Lision's avatar
Alexandre Lision committed
93 94 95
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")

#Files to compile
96
SET(ringclient_CONTROLLERS
97
   src/QNSTreeController.mm
98 99 100 101 102 103 104 105
   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
106 107
   src/PreferencesWC.mm
   src/PreferencesWC.h
108
   src/AccGeneralVC.mm
109
   src/AccGeneralVC.h
110 111
   src/AccMediaVC.mm
   src/AccMediaVC.h
112
   src/AccRingVC.mm
113
   src/AccRingVC.h
114
   src/AccAdvancedVC.mm
115
   src/AccAdvancedVC.h
116
   src/AccSecurityVC.mm
117
   src/AccSecurityVC.h
118 119
   src/CertificateWC.mm
   src/CertificateWC.h
120 121 122 123
   src/BackupAccountWC.mm
   src/BackupAccountWC.h
   src/RestoreAccountWC.mm
   src/RestoreAccountWC.h
124
   src/AudioPrefsVC.mm
125 126 127
   src/AudioPrefsVC.h
   src/AccountsVC.mm
   src/AccountsVC.h
128
   src/VideoPrefsVC.mm
129 130 131 132
   src/VideoPrefsVC.h
   src/GeneralPrefsVC.h
   src/HistoryVC.mm
   src/HistoryVC.h
133
   src/PersonsVC.mm
Alexandre Lision's avatar
Alexandre Lision committed
134 135
   src/PersonsVC.h
   src/ChatVC.mm
136 137
   src/ChatVC.h
   src/PersonLinkerVC.mm
138 139
   src/PersonLinkerVC.h
   src/SmartViewVC.mm
Alexandre Lision's avatar
Alexandre Lision committed
140 141
   src/SmartViewVC.h
   src/BrokerVC.mm
142 143
   src/BrokerVC.h
   src/ConversationVC.mm
144 145 146 147
   src/ConversationVC.h
   src/LoadingWCDelegate.h
   src/AbstractLoadingWC.h
   src/AbstractLoadingWC.mm
148 149 150 151
   src/AccDevicesVC.mm
   src/AccDevicesVC.h
   src/ExportPasswordWC.mm
   src/ExportPasswordWC.h
152 153
   src/MigrateRingAccountsWC.mm
   src/MigrateRingAccountsWC.h
154 155 156 157 158 159
   src/RingWizardChooseVC.h
   src/RingWizardChooseVC.mm
   src/RingWizardLinkAccountVC.h
   src/RingWizardLinkAccountVC.mm
   src/RingWizardNewAccountVC.mm
   src/RingWizardNewAccountVC.h
Alexandre Lision's avatar
Alexandre Lision committed
160 161
   src/DialpadWC.mm
   src/DialpadWC.h
162 163
   src/RegisterNameWC.mm
   src/RegisterNameWC.h
164 165
   src/ChooseAccountVC.h
   src/ChooseAccountVC.mm
166 167 168 169
   src/ContactRequestsListVC.h
   src/ContactRequestsListVC.mm
   src/ContactRequestVC.h
   src/ContactRequestVC.mm
170 171
   src/AccBannedContactsVC.h
   src/AccBannedContactsVC.mm
Kateryna Kostiuk's avatar
Kateryna Kostiuk committed
172 173
   src/MessagesVC.h
   src/MessagesVC.mm
174 175
   src/PasswordChangeWC.h
   src/PasswordChangeWC.mm
176
)
Alexandre Lision's avatar
Alexandre Lision committed
177

178 179
SET(ringclient_BACKENDS
   src/backends/AddressBookBackend.mm
Alexandre Lision's avatar
Alexandre Lision committed
180
   src/backends/AddressBookBackend.h)
181

182
SET(ringclient_VIEWS
Alexandre Lision's avatar
Alexandre Lision committed
183
   src/views/CallView.mm
184
   src/views/CallView.h
185 186
   src/views/CallLayer.mm
   src/views/CallLayer.h
187 188
   src/views/ITProgressIndicator.mm
   src/views/ITProgressIndicator.h
189
   src/views/RingOutlineView.mm
190 191
   src/views/RingOutlineView.h
   src/views/RingIDField.mm
Alexandre Lision's avatar
Alexandre Lision committed
192 193 194 195 196
   src/views/RingIDField.h
   src/views/HoverTableRowView.mm
   src/views/HoverTableRowView.h
   src/views/NSColor+RingTheme.mm
   src/views/NSColor+RingTheme.h
197 198
   src/views/NSImage+Extensions.mm
   src/views/NSImage+Extensions.h
Alexandre Lision's avatar
Alexandre Lision committed
199
   src/views/ContextualTableCellView.mm
Alexandre Lision's avatar
Alexandre Lision committed
200 201
   src/views/ContextualTableCellView.h
   src/views/IconButton.h
202
   src/views/IconButton.mm
203 204
   src/views/BackgroundView.h
   src/views/BackgroundView.mm
205
   src/views/IMTableCellView.h
206 207
   src/views/IMTableCellView.mm
   src/views/AccountMenuItemView.h
208
   src/views/AccountMenuItemView.mm
209
   src/views/RoundedTextField.h
Kateryna Kostiuk's avatar
Kateryna Kostiuk committed
210 211 212
   src/views/RoundedTextField.mm
   src/views/MessageBubbleView.h
   src/views/MessageBubbleView.mm
213 214 215 216
   src/views/SendMessageCell.h
   src/views/SendMessageCell.mm
   src/views/SendMessagePanel.h
   src/views/SendMessagePanel.mm
217 218
   src/views/HoverButton.h
   src/views/HoverButton.mm
Kateryna Kostiuk's avatar
Kateryna Kostiuk committed
219
)
220 221 222 223 224

SET(ringclient_OTHERS
   src/main.mm
   src/AppDelegate.mm
   src/AppDelegate.h
Alexandre Lision's avatar
Alexandre Lision committed
225
   src/Constants.h
226 227
   src/INDSequentialTextSelectionManager.mm
   src/INDSequentialTextSelectionManager.h
228
   src/delegates/ImageManipulationDelegate.mm
229 230 231
   src/delegates/ImageManipulationDelegate.h
   src/AccountSelectionManager.h
   src/AccountSelectionManager.mm)
Alexandre Lision's avatar
Alexandre Lision committed
232

Alexandre Lision's avatar
Alexandre Lision committed
233

234 235 236 237 238 239 240
SET(ringclient_XIBS
   MainMenu
   RingWindow
   CurrentCall
   GeneralPrefs
   Accounts
   AccGeneral
241
   AccMedia
242 243 244 245 246
   AccRing
   AccAdvanced
   AccSecurity
   AudioPrefs
   VideoPrefs
Alexandre Lision's avatar
Alexandre Lision committed
247
   PreferencesWindow
248
   RingWizard
249
   CertificateWindow
250 251
   BackupAccountWindow
   RestoreAccountWindow
252
   ExportPasswordWindow
253
   MigrateRingAccountsWindow
Alexandre Lision's avatar
Alexandre Lision committed
254
   PersonLinker
255
   Broker
256
   Conversation
257 258 259
   AccDevices
   RingWizardLinkAccount
   RingWizardNewAccount
Alexandre Lision's avatar
Alexandre Lision committed
260 261
   RingWizardChoose
   Dialpad
262
   RegisterNameWindow
263 264
   ChooseAccount
   AccountMenuItemView
265 266
   ContactRequestList
   ContactRequest
267
   AccBannedContacts
268
   PasswordChange
Alexandre Lision's avatar
Alexandre Lision committed
269
)
Alexandre Lision's avatar
Alexandre Lision committed
270 271

# Icons
272
# This part tells CMake where to find and install the file itself
Alexandre Lision's avatar
Alexandre Lision committed
273 274
SET(myApp_ICON ${CMAKE_CURRENT_SOURCE_DIR}/data/appicon.icns)
SET_SOURCE_FILES_PROPERTIES(${myApp_ICON} PROPERTIES
275
       MACOSX_PACKAGE_LOCATION Resources)
Alexandre Lision's avatar
Alexandre Lision committed
276

277 278
SET(ring_ICONS
${CMAKE_CURRENT_SOURCE_DIR}/data/symbol_name.png
279 280
${CMAKE_CURRENT_SOURCE_DIR}/data/background-light.png
${CMAKE_CURRENT_SOURCE_DIR}/data/background-dark.png
Alexandre Lision's avatar
Alexandre Lision committed
281
${CMAKE_CURRENT_SOURCE_DIR}/data/symbol_blue.png
Alexandre Lision's avatar
Alexandre Lision committed
282
${CMAKE_CURRENT_SOURCE_DIR}/data/background_tile.png
Alexandre Lision's avatar
Alexandre Lision committed
283 284
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_more.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_dialpad.png
285
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_accept.png
286
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_arrow_back.png
Alexandre Lision's avatar
Alexandre Lision committed
287 288
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_call.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_cancel.png
289 290 291 292 293 294
${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
295
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_search.png
296
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_quality.png
Alexandre Lision's avatar
Alexandre Lision committed
297
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_record.png
298 299 300
${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
301
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_transfer.png
302 303
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_add_participant.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_merge_calls.png
304
${CMAKE_CURRENT_SOURCE_DIR}/data/default_user_icon.png
305
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_send.png
Alexandre Lision's avatar
Alexandre Lision committed
306
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/audio.png
307
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_person_add.png
308 309
${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
310 311
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/general.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/video.png
Alexandre Lision's avatar
Alexandre Lision committed
312
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_delete.png
313
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/qrcode.png
314 315
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_video.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/pending_contact_request.png)
316

Alexandre Lision's avatar
Alexandre Lision committed
317
SET_SOURCE_FILES_PROPERTIES(${ring_ICONS} PROPERTIES
Alexandre Lision's avatar
Alexandre Lision committed
318
       MACOSX_PACKAGE_LOCATION Resources)
319 320
SET_SOURCE_FILES_PROPERTIES(Credits.rtf PROPERTIES
       MACOSX_PACKAGE_LOCATION Resources)
Alexandre Lision's avatar
Alexandre Lision committed
321

322 323 324 325 326 327
# 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()
328

329 330 331 332 333 334 335 336 337 338
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()
339 340 341

SET_SOURCE_FILES_PROPERTIES(${ring_RINGTONES}
                PROPERTIES MACOSX_PACKAGE_LOCATION Resources/ringtones)
Alexandre Lision's avatar
Alexandre Lision committed
342 343 344 345 346 347 348 349 350 351 352 353 354 355

# 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")
356 357 358 359 360 361 362 363 364 365 366
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
367
                        PROPERTIES MACOSX_PACKAGE_LOCATION Resources/${LANG}.lproj)
368 369 370 371 372 373 374

        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
375
                        PROPERTIES MACOSX_PACKAGE_LOCATION Resources/${LANG}.lproj)
376

377
            SET(LOCALIZED_${LANG} ${LOCALIZED_${LANG}}
378 379 380
                        ${LPROJ}/${xib}.strings)
        ENDIF()
    ENDFOREACH()
Alexandre Lision's avatar
Alexandre Lision committed
381 382 383 384 385 386 387 388

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

389 390
# append '.xib' extension before linking xib files in executable
FOREACH(xib ${ringclient_XIBS})
391
  SET(ringclient_XIBS_FOR_EXECUTABLE ${ringclient_XIBS_FOR_EXECUTABLE} ui/Base.lproj/${xib}.xib)
392 393
ENDFOREACH()

Alexandre Lision's avatar
Alexandre Lision committed
394
SET(TO_ADD
395 396 397 398
   ${ringclient_CONTROLLERS}
   ${ringclient_BACKENDS}
   ${ringclient_VIEWS}
   ${ringclient_OTHERS}
399
   ${ringclient_XIBS_FOR_EXECUTABLE}
Alexandre Lision's avatar
Alexandre Lision committed
400
   ${LOCALIZABLE_FILES}
Alexandre Lision's avatar
Alexandre Lision committed
401
   ${myApp_ICON}
402
   Credits.rtf
403 404
   ${ring_ICONS}
   ${ring_RINGTONES})
Alexandre Lision's avatar
Alexandre Lision committed
405

406 407 408 409 410 411
IF(ENABLE_SPARKLE)
   SET( TO_ADD ${TO_ADD} ${PUBLIC_KEY} ${SPARKLE_FRAMEWORK})
ENDIF(ENABLE_SPARKLE)

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

412 413
ADD_DEPENDENCIES(${PROJ_NAME} libqrencode)

414 415 416 417 418
# 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
419 420
SOURCE_GROUP("Resources\\Interface Builder" FILES
                                    ${ringclient_XIBS_FOR_EXECUTABLE})
421
SOURCE_GROUP("Resources\\ringtones" FILES ${ring_RINGTONES})
422

423 424 425
IF(ENABLE_SPARKLE)
    SOURCE_GROUP("Frameworks" FILES ${SPARKLE_FRAMEWORK})
ENDIF(ENABLE_SPARKLE)
426

427
TARGET_LINK_LIBRARIES( ${PROJ_NAME}
Alexandre Lision's avatar
Alexandre Lision committed
428
   ${LIB_RING_CLIENT_LIBRARY}
Alexandre Lision's avatar
Alexandre Lision committed
429
   ${Qt5Core_LIBRARIES}
430
   ${Qt5MacExtras_LIBRARIES}
Alexandre Lision's avatar
Alexandre Lision committed
431
   ${Qt5Widgets_LIBRARIES}
432
   ${OPENGL_LIBRARIES}
433
   -lqrencode
Alexandre Lision's avatar
Alexandre Lision committed
434 435
)

436 437 438 439
IF(ENABLE_SPARKLE)
   TARGET_LINK_LIBRARIES(${PROJ_NAME} ${SPARKLE_FRAMEWORK})
ENDIF(ENABLE_SPARKLE)

440 441 442 443 444
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")
445
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -framework SystemConfiguration")
446 447

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

451 452 453
SET_TARGET_PROPERTIES(${PROJ_NAME} PROPERTIES
        MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in
        MACOSX_BUNDLE_GUI_IDENTIFIER "cx.ring"
454 455 456
        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}
457
        MACOSX_BUNDLE_COPYRIGHT "${PROJ_COPYRIGHT}"
458 459 460 461
        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"
    )
462 463 464 465 466 467 468 469 470 471 472 473 474

# 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
475 476 477
                              --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")
478 479

ENDFOREACH()
480

481
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX})
482 483 484 485 486

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

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

487
SET(QT_PLUGINS_DESTDIR ${PROJ_NAME}.app/Contents/Plugins)
488 489
#--------------------------------------------------------------------------------
# Install needed Qt plugins by copying directories from the qt installation
490 491 492 493 494 495 496 497 498 499 500 501


#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
502
                                    Qt5::QTiffPlugin)
503 504 505 506 507 508 509

# 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})
510
  GET_TARGET_PROPERTY(_loc ${plugin} LOCATION)
511 512
  INSTALL(FILES ${_loc} DESTINATION ${QT_PLUGINS_DESTDIR}/imageformats COMPONENT Runtime)
  LIST(APPEND QT_PLUGINS ${plugin})
513 514
ENDFOREACH()

515 516 517 518 519
# Add SQLite driver for QtSql
GET_TARGET_PROPERTY(_loc Qt5::QSQLiteDriverPlugin LOCATION)
INSTALL(FILES ${_loc} DESTINATION ${QT_PLUGINS_DESTDIR}/sqldrivers COMPONENT Runtime)
LIST(APPEND QT_PLUGINS Qt5::QSQLiteDriverPlugin)

520
# directories to look for dependencies
521 522 523 524
SET(DIRS    ${CMAKE_INSTALL_PREFIX}/lib
            ${QT_LIB_DIR}
            ${CMAKE_CURRENT_SOURCE_DIR}/sparkle
            ${CMAKE_CURRENT_SOURCE_DIR}/libqrencode/lib)
525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546

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)