CMakeLists.txt 7.77 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
SET(RING_VERSION "0.1.0")
9
SET(RING_VERSION_NAME "Samuel de Champlain")
10
SET(BUNDLE_VERSION "Samuel de Champlain (0.1.0")
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 19 20 21 22 23 24 25 26 27 28 29 30 31

FIND_PACKAGE(Qt5Core REQUIRED)
FIND_PACKAGE(Qt5Widgets REQUIRED)
FIND_PACKAGE(LibRingClient REQUIRED)

INCLUDE_DIRECTORIES(SYSTEM ${Qt5Core_INCLUDE_DIRS})
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
32 33 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
   
   src/backends/MinimalHistoryBackend.mm)
Alexandre Lision's avatar
Alexandre Lision committed
53

54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
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
70 71

SET(ringclient_HDRS
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
   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
   
   src/backends/MinimalHistoryBackend.h)
Alexandre Lision's avatar
Alexandre Lision committed
92 93 94

# Icons

95
# This part tells CMake where to find and install the file itself
Alexandre Lision's avatar
Alexandre Lision committed
96 97 98 99
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
100 101 102 103 104 105
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
106 107 108 109
${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
110
${CMAKE_CURRENT_SOURCE_DIR}/data/dark/ic_action_video.png)
111

Alexandre Lision's avatar
Alexandre Lision committed
112
SET_SOURCE_FILES_PROPERTIES(${ring_ICONS} PROPERTIES
Alexandre Lision's avatar
Alexandre Lision committed
113
       MACOSX_PACKAGE_LOCATION Resources)
114 115
SET_SOURCE_FILES_PROPERTIES(Credits.rtf PROPERTIES
       MACOSX_PACKAGE_LOCATION Resources)
Alexandre Lision's avatar
Alexandre Lision committed
116

117 118
# append '.xib' extension before linking xib files in executable
FOREACH(xib ${ringclient_XIBS})
119
  SET(ringclient_XIBS_FOR_EXECUTABLE ${ringclient_XIBS_FOR_EXECUTABLE} ui/${xib}.xib)
120 121
ENDFOREACH()

122
ADD_EXECUTABLE(${PROJ_NAME} MACOSX_BUNDLE
Alexandre Lision's avatar
Alexandre Lision committed
123
   ${ringclient_SRCS}
Alexandre Lision's avatar
Alexandre Lision committed
124
   ${ringclient_HDRS}
125
   ${ringclient_XIBS_FOR_EXECUTABLE}
Alexandre Lision's avatar
Alexandre Lision committed
126
   ${myApp_ICON}
127
   Credits.rtf
Alexandre Lision's avatar
Alexandre Lision committed
128 129
   ${ring_ICONS})

130
TARGET_LINK_LIBRARIES( ${PROJ_NAME}
Alexandre Lision's avatar
Alexandre Lision committed
131
   ${LIB_RING_CLIENT_LIBRARY}
Alexandre Lision's avatar
Alexandre Lision committed
132
   ${Qt5Core_LIBRARIES}
Alexandre Lision's avatar
Alexandre Lision committed
133 134 135
   ${Qt5Widgets_LIBRARIES}
)

136 137 138 139 140 141 142 143 144
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
145

146 147 148
SET_TARGET_PROPERTIES(${PROJ_NAME} PROPERTIES
        MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/cmake/MacOSXBundleInfo.plist.in
        MACOSX_BUNDLE_GUI_IDENTIFIER "cx.ring"
149
        MACOSX_BUNDLE_SHORT_VERSION_STRING ${RING_VERSION_NAME}
150 151
        MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJ_NAME} ${RING_VERSION} Nightly"
        MACOSX_BUNDLE_BUNDLE_VERSION ${RING_VERSION}
152
        MACOSX_BUNDLE_COPYRIGHT "${PROJ_COPYRIGHT}"
153 154 155 156
        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"
    )
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174

# 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
175 176
                             ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib
                      COMMENT "Compiling ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib")
177 178

ENDFOREACH()
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 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

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)