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

Alexandre Lision's avatar
Alexandre Lision committed
14
ADD_DEFINITIONS("-std=c++11")
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 33
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
SET(ringclient_SRCS
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
   src/main.mm
   src/AppDelegate.mm
   src/RingWindowController.mm
   src/ConversationsViewController.mm
   src/PreferencesViewController.mm
   src/QNSTreeController.mm
   src/AccGeneralVC.mm
   src/AccAudioVC.mm
   src/AccVideoVC.mm
   src/AccRingVC.mm
   src/AccAdvancedVC.mm
   src/AccSecurityVC.mm
   src/AccountsVC.mm
   src/CurrentCallVC.mm
   src/AudioPrefsVC.mm
   src/VideoPrefsVC.mm
   src/GeneralPrefsVC.mm
   src/RingWizardWC.mm
   src/HistoryViewController.mm
53
   src/PersonsVC.mm
Alexandre Lision's avatar
Alexandre Lision committed
54

55 56 57
   src/delegates/ImageManipulationDelegate.mm

   src/views/PersonCell.mm
Alexandre Lision's avatar
Alexandre Lision committed
58 59
   src/views/CallView.mm

60
   src/backends/AddressBookBackend.mm
61
   src/backends/MinimalHistoryBackend.mm)
Alexandre Lision's avatar
Alexandre Lision committed
62

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
SET(ringclient_XIBS
   MainMenu
   RingWindow
   CurrentCall
   GeneralPrefs
   Accounts
   AccGeneral
   AccAudio
   AccVideo
   AccRing
   AccAdvanced
   AccSecurity
   AudioPrefs
   VideoPrefs
   PreferencesScreen
   RingWizard)
Alexandre Lision's avatar
Alexandre Lision committed
79 80

SET(ringclient_HDRS
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
   src/AppDelegate.h
   src/RingWindowController.h
   src/CurrentCallVC.h
   src/ConversationsViewController.h
   src/PreferencesViewController.h
   src/AccGeneralVC.h
   src/AccVideoVC.h
   src/AccAudioVC.h
   src/AccRingVC.h
   src/AccAdvancedVC.h
   src/AccSecurityVC.h
   src/AudioPrefsVC.h
   src/AccountsVC.h
   src/VideoPrefsVC.h
   src/GeneralPrefsVC.h
   src/HistoryViewController.h
   src/RingWizardWC.h
   src/QNSTreeController.h
99 100 101
   src/PersonsVC.h

   src/delegates/ImageManipulationDelegate.h
Alexandre Lision's avatar
Alexandre Lision committed
102

103
   src/views/PersonCell.h
Alexandre Lision's avatar
Alexandre Lision committed
104 105
   src/views/CallView.h

106
   src/backends/AddressBookBackend.h
107
   src/backends/MinimalHistoryBackend.h)
Alexandre Lision's avatar
Alexandre Lision committed
108 109 110

# Icons

111
# This part tells CMake where to find and install the file itself
Alexandre Lision's avatar
Alexandre Lision committed
112 113 114 115
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
116 117 118 119 120 121
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
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_email.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_new_email.png
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_search.png
Alexandre Lision's avatar
Alexandre Lision committed
122 123 124 125
${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
126
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_video.png)
127

Alexandre Lision's avatar
Alexandre Lision committed
128
SET_SOURCE_FILES_PROPERTIES(${ring_ICONS} PROPERTIES
Alexandre Lision's avatar
Alexandre Lision committed
129
       MACOSX_PACKAGE_LOCATION Resources)
130 131
SET_SOURCE_FILES_PROPERTIES(Credits.rtf PROPERTIES
       MACOSX_PACKAGE_LOCATION Resources)
Alexandre Lision's avatar
Alexandre Lision committed
132

133 134
# append '.xib' extension before linking xib files in executable
FOREACH(xib ${ringclient_XIBS})
135
  SET(ringclient_XIBS_FOR_EXECUTABLE ${ringclient_XIBS_FOR_EXECUTABLE} ui/${xib}.xib)
136 137
ENDFOREACH()

138
ADD_EXECUTABLE(${PROJ_NAME} MACOSX_BUNDLE
Alexandre Lision's avatar
Alexandre Lision committed
139
   ${ringclient_SRCS}
Alexandre Lision's avatar
Alexandre Lision committed
140
   ${ringclient_HDRS}
141
   ${ringclient_XIBS_FOR_EXECUTABLE}
Alexandre Lision's avatar
Alexandre Lision committed
142
   ${myApp_ICON}
143
   Credits.rtf
Alexandre Lision's avatar
Alexandre Lision committed
144 145
   ${ring_ICONS})

146
TARGET_LINK_LIBRARIES( ${PROJ_NAME}
Alexandre Lision's avatar
Alexandre Lision committed
147
   ${LIB_RING_CLIENT_LIBRARY}
Alexandre Lision's avatar
Alexandre Lision committed
148
   ${Qt5Core_LIBRARIES}
149
   ${Qt5MacExtras_LIBRARIES}
Alexandre Lision's avatar
Alexandre Lision committed
150 151 152
   ${Qt5Widgets_LIBRARIES}
)

153 154 155 156 157 158 159 160 161
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
162

163 164 165
SET_TARGET_PROPERTIES(${PROJ_NAME} PROPERTIES
        MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in
        MACOSX_BUNDLE_GUI_IDENTIFIER "cx.ring"
166
        MACOSX_BUNDLE_SHORT_VERSION_STRING ${RING_VERSION_NAME}
167 168
        MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJ_NAME} ${RING_VERSION} Nightly"
        MACOSX_BUNDLE_BUNDLE_VERSION ${RING_VERSION}
169
        MACOSX_BUNDLE_COPYRIGHT "${PROJ_COPYRIGHT}"
170 171 172 173
        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"
    )
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191

# 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
192 193
                             ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib
                      COMMENT "Compiling ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib")
194 195

ENDFOREACH()
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238

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

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

#--------------------------------------------------------------------------------
# Install the QtTest application, on Apple, the bundle is at the root of the
# install tree
INSTALL(TARGETS ${PROJ_NAME} BUNDLE DESTINATION . COMPONENT Runtime)

SET(QT_PLUGINS_DESTDIR ${PROJ_NAME}.app/Contents/Plugins/platforms)
#--------------------------------------------------------------------------------
# Install needed Qt plugins by copying directories from the qt installation
LIST(APPEND QT_PLUGINS Qt5::QTgaPlugin Qt5::QTiffPlugin Qt5::QCocoaIntegrationPlugin)
FOREACH(plugin ${QT_PLUGINS})
  GET_TARGET_PROPERTY(_loc ${plugin} LOCATION)
  INSTALL(FILES ${_loc} DESTINATION ${QT_PLUGINS_DESTDIR} COMPONENT Runtime)
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)