CMakeLists.txt 7.82 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
   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
Alexandre Lision's avatar
Alexandre Lision committed
51 52 53

   src/views/CallView.mm

54
   src/backends/MinimalHistoryBackend.mm)
Alexandre Lision's avatar
Alexandre Lision committed
55

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

SET(ringclient_HDRS
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
Alexandre Lision's avatar
Alexandre Lision committed
92 93 94

   src/views/CallView.h

95
   src/backends/MinimalHistoryBackend.h)
Alexandre Lision's avatar
Alexandre Lision committed
96 97 98

# Icons

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

Alexandre Lision's avatar
Alexandre Lision committed
116
SET_SOURCE_FILES_PROPERTIES(${ring_ICONS} PROPERTIES
Alexandre Lision's avatar
Alexandre Lision committed
117
       MACOSX_PACKAGE_LOCATION Resources)
118 119
SET_SOURCE_FILES_PROPERTIES(Credits.rtf PROPERTIES
       MACOSX_PACKAGE_LOCATION Resources)
Alexandre Lision's avatar
Alexandre Lision committed
120

121 122
# append '.xib' extension before linking xib files in executable
FOREACH(xib ${ringclient_XIBS})
123
  SET(ringclient_XIBS_FOR_EXECUTABLE ${ringclient_XIBS_FOR_EXECUTABLE} ui/${xib}.xib)
124 125
ENDFOREACH()

126
ADD_EXECUTABLE(${PROJ_NAME} MACOSX_BUNDLE
Alexandre Lision's avatar
Alexandre Lision committed
127
   ${ringclient_SRCS}
Alexandre Lision's avatar
Alexandre Lision committed
128
   ${ringclient_HDRS}
129
   ${ringclient_XIBS_FOR_EXECUTABLE}
Alexandre Lision's avatar
Alexandre Lision committed
130
   ${myApp_ICON}
131
   Credits.rtf
Alexandre Lision's avatar
Alexandre Lision committed
132 133
   ${ring_ICONS})

134
TARGET_LINK_LIBRARIES( ${PROJ_NAME}
Alexandre Lision's avatar
Alexandre Lision committed
135
   ${LIB_RING_CLIENT_LIBRARY}
Alexandre Lision's avatar
Alexandre Lision committed
136
   ${Qt5Core_LIBRARIES}
Alexandre Lision's avatar
Alexandre Lision committed
137 138 139
   ${Qt5Widgets_LIBRARIES}
)

140 141 142 143 144 145 146 147 148
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
149

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

# 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
179 180
                             ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib
                      COMMENT "Compiling ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib")
181 182

ENDFOREACH()
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 222 223 224 225

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)