From 405226893f5bb62e68b68222717ac642137d9737 Mon Sep 17 00:00:00 2001 From: William Kyngesburye Date: Mon, 4 Jul 2011 11:15:40 -0500 Subject: [PATCH] OS X frameworks for qgis libs; dev frameworks install option; cmake cleanup --- CMakeLists.txt | 23 +- cmake/FindQGIS.cmake | 43 ++- cmake/MacBundleMacros.cmake | 9 - images/icons/CMakeLists.txt | 9 + mac/cmake/0qgis.cmake.in | 32 ++- mac/cmake/1qt.cmake.in | 42 ++- mac/cmake/2lib.cmake.in | 21 +- mac/cmake/3fw.cmake.in | 2 +- src/CMakeLists.txt | 5 - src/analysis/CMakeLists.txt | 45 +++- src/app/CMakeLists.txt | 26 +- src/browser/CMakeLists.txt | 19 +- src/core/CMakeLists.txt | 249 ++++++++++-------- src/gui/CMakeLists.txt | 123 +++++---- src/helpviewer/CMakeLists.txt | 19 +- src/plugins/CMakeLists.txt | 2 +- src/providers/grass/CMakeLists.txt | 16 +- .../sqlanyconnection/CMakeLists.txt | 11 +- src/python/CMakeLists.txt | 5 +- 19 files changed, 412 insertions(+), 289 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d9547fe78e3..ba535401b90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -269,16 +269,19 @@ ELSE (WIN32) IF (APPLE) # for Mac OS X, everything is put inside an application bundle + # save the root install prefix for the app later + SET (QGIS_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) SET (QGIS_MACAPP_PREFIX ${CMAKE_INSTALL_PREFIX}/${QGIS_APP_NAME}.app/Contents) + # common prefix for components, let cmake handle it SET (CMAKE_INSTALL_PREFIX ${QGIS_MACAPP_PREFIX}/MacOS) - # path for library references - SET (CMAKE_INSTALL_NAME_DIR @executable_path/lib) # 4 bundling levels, each includes previous # 0 nothing # 1 Qt frameworks # 2 non-system libraries, "standard" # 3 non-system frameworks, "standalone" - SET (QGIS_MACAPP_BUNDLE 0 CACHE STRING "What to bundle into app package") + SET (QGIS_MACAPP_BUNDLE 1 CACHE STRING "What to bundle into app package") + SET (QGIS_MACAPP_INSTALL_DEV FALSE CACHE BOOL "Install developer frameworks") + SET (QGIS_MACAPP_DEV_PREFIX "/Library/Frameworks" CACHE STRING "Path to install developer frameworks") # if we have @loader_path, >=OSX 10.5 (darwin 9+) IF (CMAKE_SYSTEM_VERSION VERSION_GREATER 9.0.0 OR CMAKE_SYSTEM_VERSION VERSION_EQUAL 9.0.0) SET (OSX_HAVE_LOADERPATH 1) @@ -303,6 +306,8 @@ ELSE (WIN32) SET (DEFAULT_PLUGIN_SUBDIR ../PlugIns/qgis) SET (QGIS_PLUGIN_SUBDIR_REV ../../MacOS) SET (DEFAULT_INCLUDE_SUBDIR include/qgis) + # path for framework references + SET (CMAKE_INSTALL_NAME_DIR @executable_path/${QGIS_FW_SUBDIR}) ELSE (APPLE) # UNIX @@ -367,12 +372,12 @@ SET (QGIS_PLUGIN_DIR ${QGIS_PLUGIN_SUBDIR}) SET (QGIS_INCLUDE_DIR ${QGIS_INCLUDE_SUBDIR}) # manual page - makes sense only on unix systems -IF (UNIX) +IF (UNIX AND NOT APPLE) SET (DEFAULT_MANUAL_SUBDIR man) SET (QGIS_MANUAL_SUBDIR ${DEFAULT_MANUAL_SUBDIR} CACHE STRING "Subdirectory where manual files will be installed") MARK_AS_ADVANCED (QGIS_MANUAL_SUBDIR) SET (QGIS_MANUAL_DIR ${CMAKE_INSTALL_PREFIX}/${QGIS_MANUAL_SUBDIR}) -ENDIF (UNIX) +ENDIF (UNIX AND NOT APPLE) ############################################################# # Python bindings @@ -402,9 +407,9 @@ ENDIF (WITH_BINDINGS) ############################################################# # create qgsconfig.h +# installed with app target CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake_templates/qgsconfig.h.in ${CMAKE_BINARY_DIR}/qgsconfig.h) -INSTALL(FILES ${CMAKE_BINARY_DIR}/qgsconfig.h DESTINATION ${QGIS_INCLUDE_DIR}) INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}) # Added by Jef to prevent python core and gui libs linking to other qgisCore and qgisGui libs @@ -427,18 +432,22 @@ IF (GIT_MARKER) WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) ELSE(MSVC) + EXECUTE_PROCESS(COMMAND ${GIT} log -n1 --pretty=%h OUTPUT_VARIABLE REVISION) + STRING(STRIP "${REVISION}" REVISION) ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qgsversion.h - COMMAND echo \\\#define QGSVERSION \\\"$$\( ${GIT} log -n1 --pretty=%h \)\\\" >${CMAKE_CURRENT_BINARY_DIR}/qgsversion.h + COMMAND echo \\\#define QGSVERSION \\\"${REVISION}\\\" >${CMAKE_CURRENT_BINARY_DIR}/qgsversion.h MAIN_DEPENDENCY ${GIT_MARKER} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) ENDIF(MSVC) ELSE(GIT) MESSAGE(STATUS "git marker, but no git found - version will be unknown") + SET(REVISION "unknown") FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/qgsversion.h "#define QGSVERSION \"unknown\"") ENDIF(GIT) ELSE (GIT_MARKER) + SET(REVISION "exported") FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/qgsversion.h "#define QGSVERSION \"exported\"") ENDIF (GIT_MARKER) diff --git a/cmake/FindQGIS.cmake b/cmake/FindQGIS.cmake index 1ad9180cce2..998a360be0c 100644 --- a/cmake/FindQGIS.cmake +++ b/cmake/FindQGIS.cmake @@ -4,6 +4,7 @@ ## ## QGIS_CORE_LIBRARY = full path to the CORE library ## QGIS_GUI_LIBRARY = full path to the GUI library +## QGIS_ANALYSIS_LIBRARY = full path to the ANALYSIS library ## QGIS_PLUGIN_DIR = full path to where QGIS plugins are installed ## QGIS_INCLUDE_DIR = where to find headers ## @@ -66,21 +67,34 @@ IF(WIN32) "$ENV{OSGEO4W_ROOT}/lib" "$ENV{PROGRAMFILES}/Quantum GIS/lib" ) + FIND_LIBRARY(QGIS_ANALYSIS_LIBRARY + NAMES qgis_analysis + PATHS + "$ENV{LIB_DIR}" + "$ENV{LIB}" + "$ENV{OSGEO4W_ROOT}/lib" + "$ENV{PROGRAMFILES}/Quantum GIS/lib" + ) ENDIF (MSVC) ELSE(WIN32) IF(UNIX) # try to use bundle on mac IF (APPLE) #MESSAGE("Searching for QGIS in /Applications/QGIS.app/Contents/MacOS") - #SET (QGIS_MAC_PATH /Applications/qgis1.0.0.app/Contents/MacOS) - SET (QGIS_MAC_PATH /Applications/qgis1.1.0.app/Contents/MacOS) + SET (QGIS_MAC_PATH /Applications/QGIS.app/Contents/MacOS) SET (QGIS_LIB_DIR ${QGIS_MAC_PATH}/lib) - SET (QGIS_PLUGIN_DIR ${QGIS_MAC_PATH}/lib/qgis CACHE STRING INTERNAL) - # set INCLUDE_DIR to prefix+include - SET(QGIS_INCLUDE_DIR ${QGIS_MAC_PATH}/include/qgis CACHE STRING INTERNAL) - ## extract link dirs - SET(QGIS_CORE_LIBRARY ${QGIS_LIB_DIR}/libqgis_core.dylib CACHE STRING INTERNAL) - SET(QGIS_GUI_LIBRARY ${QGIS_LIB_DIR}/libqgis_gui.dylib CACHE STRING INTERNAL) + SET (QGIS_FW_DIR ${QGIS_MAC_PATH}/../Frameworks) + SET (QGIS_PLUGIN_DIR ${QGIS_MAC_PATH}/../PlugIns/qgis CACHE STRING INTERNAL) + # set INCLUDE_DIR to frameworks + SET(QGIS_INCLUDE_DIR + ${QGIS_FW_DIR}/qgis_core.framework/Headers + ${QGIS_FW_DIR}/qgis_gui.framework/Headers + ${QGIS_FW_DIR}/qgis_analysis.framework/Headers + CACHE STRING INTERNAL) + # extract link dirs + SET(QGIS_CORE_LIBRARY ${QGIS_FW_DIR}/qgis_core.framework/qgis_core CACHE STRING INTERNAL) + SET(QGIS_GUI_LIBRARY ${QGIS_FW_DIR}/qgis_gui.framework/qgis_gui CACHE STRING INTERNAL) + SET(QGIS_ANALYSIS_LIBRARY ${QGIS_FW_DIR}/qgis_analysis.framework/qgis_analysis CACHE STRING INTERNAL) ELSE (APPLE) #MESSAGE("Searching for QGIS in /usr/bin; /usr/local/bin") FIND_PATH(QGIS_PLUGIN_DIR @@ -115,18 +129,27 @@ ELSE(WIN32) /usr/local/lib "$ENV{LIB_DIR}/lib/" ) + FIND_LIBRARY(QGIS_ANALYSIS_LIBRARY + NAMES qgis_analysis + PATHS + /usr/lib64 + /usr/lib + /usr/local/lib + "$ENV{LIB_DIR}/lib/" + ) ENDIF (APPLE) ENDIF(UNIX) ENDIF(WIN32) -IF (QGIS_INCLUDE_DIR AND QGIS_CORE_LIBRARY AND QGIS_GUI_LIBRARY) +IF (QGIS_INCLUDE_DIR AND QGIS_CORE_LIBRARY AND QGIS_GUI_LIBRARY AND QGIS_ANALYSIS_LIBRARY) SET(QGIS_FOUND TRUE) -ENDIF (QGIS_INCLUDE_DIR AND QGIS_CORE_LIBRARY AND QGIS_GUI_LIBRARY) +ENDIF (QGIS_INCLUDE_DIR AND QGIS_CORE_LIBRARY AND QGIS_GUI_LIBRARY AND QGIS_ANALYSIS_LIBRARY) IF (QGIS_FOUND) IF (NOT QGIS_FIND_QUIETLY) MESSAGE(STATUS "Found QGIS core: ${QGIS_CORE_LIBRARY}") MESSAGE(STATUS "Found QGIS gui: ${QGIS_GUI_LIBRARY}") + MESSAGE(STATUS "Found QGIS analysis: ${QGIS_ANALYSIS_LIBRARY}") MESSAGE(STATUS "Found QGIS plugins directory: ${QGIS_PLUGIN_DIR}") ENDIF (NOT QGIS_FIND_QUIETLY) ELSE (QGIS_FOUND) diff --git a/cmake/MacBundleMacros.cmake b/cmake/MacBundleMacros.cmake index 58e7b8993e9..d05f655c132 100644 --- a/cmake/MacBundleMacros.cmake +++ b/cmake/MacBundleMacros.cmake @@ -20,17 +20,8 @@ FUNCTION (GET_INSTALL_NAME LIBFILE LIBNAME OUTVAR) SET (${OUTVAR} ${iname} PARENT_SCOPE) ENDFUNCTION (GET_INSTALL_NAME) -# message only if verbose makefiles - -FUNCTION (MYMESSAGE MSG) - IF (@CMAKE_VERBOSE_MAKEFILE@) - MESSAGE (STATUS "${MSG}") - ENDIF (@CMAKE_VERBOSE_MAKEFILE@) -ENDFUNCTION (MYMESSAGE) - # install_name_tool -change CHANGE CHANGETO CHANGEBIN FUNCTION (INSTALLNAMETOOL_CHANGE CHANGE CHANGETO CHANGEBIN) - MYMESSAGE ("install_name_tool -change ${CHANGE} ${CHANGETO} \"${CHANGEBIN}\"") EXECUTE_PROCESS (COMMAND install_name_tool -change ${CHANGE} ${CHANGETO} "${CHANGEBIN}") ENDFUNCTION (INSTALLNAMETOOL_CHANGE) diff --git a/images/icons/CMakeLists.txt b/images/icons/CMakeLists.txt index 2124ab8de06..c70146d394e 100644 --- a/images/icons/CMakeLists.txt +++ b/images/icons/CMakeLists.txt @@ -2,3 +2,12 @@ FILE (GLOB IMAGES *.png) INSTALL (FILES ${IMAGES} DESTINATION ${QGIS_DATA_DIR}/images/icons) + +IF(MSVC) + INSTALL(FILES qgis.ico DESTINATION ${CMAKE_INSTALL_PREFIX}/icons) +ENDIF(MSVC) + +# OS X app/doc icons +IF (APPLE) + ADD_SUBDIRECTORY(mac) +ENDIF (APPLE) diff --git a/mac/cmake/0qgis.cmake.in b/mac/cmake/0qgis.cmake.in index 34f9890d322..c59e495ddd2 100644 --- a/mac/cmake/0qgis.cmake.in +++ b/mac/cmake/0qgis.cmake.in @@ -16,6 +16,7 @@ SET (QLIBXDIR "${QAPPDIR}/@QGIS_LIBEXEC_SUBDIR@") SET (QDATADIR "${QAPPDIR}/@QGIS_DATA_SUBDIR@") SET (QPLUGDIR "${QAPPDIR}/@QGIS_PLUGIN_SUBDIR@") SET (QGISPYDIR "${QAPPDIR}/@QGIS_DATA_SUBDIR@/python") +SET (Q_FWVER @CPACK_PACKAGE_VERSION_MAJOR@.@CPACK_PACKAGE_VERSION_MINOR@) # Qt framework version is major version SET (QT_FWVER @QT_VERSION_MAJOR@) @@ -25,7 +26,16 @@ SET (ATLOADER "@loader_path") INCLUDE (@CMAKE_SOURCE_DIR@/cmake/MacBundleMacros.cmake) -FILE (GLOB QGLIBLIST RELATIVE ${QLIBDIR} ${QLIBDIR}/libqgis*.dylib) +# message only if verbose makefiles +FUNCTION (MYMESSAGE MSG) + IF (@CMAKE_VERBOSE_MAKEFILE@) + MESSAGE (STATUS "${MSG}") + ENDIF (@CMAKE_VERBOSE_MAKEFILE@) +ENDFUNCTION (MYMESSAGE) + +FILE (GLOB QGFWLIST RELATIVE ${QFWDIR} ${QFWDIR}/qgis*.framework) +# for some reason, REPLACE is stripping list seps +STRING(REPLACE ".framework" ";" QGFWLIST ${QGFWLIST}) FILE (GLOB QGPLUGLIST ${QPLUGDIR}/*.so) FILE (GLOB QGPYLIST ${QGISPYDIR}/qgis/*.so) @@ -36,27 +46,29 @@ FILE (GLOB QGPYLIST ${QGISPYDIR}/qgis/*.so) IF (@OSX_HAVE_LOADERPATH@) MESSAGE (STATUS "Updating QGIS library paths...") # inter-library links - do all combos, many will be noops - FOREACH (QL ${QGLIBLIST}) - FOREACH (QLL ${QGLIBLIST}) - INSTALLNAMETOOL_CHANGE (@CMAKE_INSTALL_NAME_DIR@/${QLL} ${ATLOADER}/${QLL} "${QLIBDIR}/${QL}") + FOREACH (QL ${QGFWLIST}) + FOREACH (QLL ${QGFWLIST}) + INSTALLNAMETOOL_CHANGE (@CMAKE_INSTALL_NAME_DIR@/${QLL}.framework/Versions/${Q_FWVER}/${QLL} ${ATLOADER}/../../../${QLL}.framework/Versions/${Q_FWVER}/${QLL} "${QFWDIR}/${QL}.framework/${QL}") ENDFOREACH (QLL) + # libqgispython is not a framework + INSTALLNAMETOOL_CHANGE (@CMAKE_INSTALL_NAME_DIR@/${QL}.framework/Versions/${Q_FWVER}/${QL} ${ATLOADER}/@QGIS_LIB_SUBDIR_REV@/@QGIS_FW_SUBDIR@/${QL}.framework/Versions/${Q_FWVER}/${QL} "${QLIBDIR}/libqgispython.dylib") ENDFOREACH (QL) # plugins FOREACH (QP ${QGPLUGLIST}) - FOREACH (QLL ${QGLIBLIST}) - INSTALLNAMETOOL_CHANGE (@CMAKE_INSTALL_NAME_DIR@/${QLL} ${ATLOADER}/@QGIS_PLUGIN_SUBDIR_REV@/@QGIS_LIB_SUBDIR@/${QLL} "${QP}") + FOREACH (QLL ${QGFWLIST}) + INSTALLNAMETOOL_CHANGE (@CMAKE_INSTALL_NAME_DIR@/${QLL}.framework/Versions/${Q_FWVER}/${QLL} ${ATLOADER}/@QGIS_PLUGIN_SUBDIR_REV@/@QGIS_FW_SUBDIR@/${QLL}.framework/Versions/${Q_FWVER}/${QLL} "${QP}") ENDFOREACH (QLL) ENDFOREACH (QP) # qgis python FOREACH (PG ${QGPYLIST}) - FOREACH (QLL ${QGLIBLIST}) - INSTALLNAMETOOL_CHANGE (@CMAKE_INSTALL_NAME_DIR@/${QLL} ${ATLOADER}/../../@QGIS_DATA_SUBDIR_REV@/@QGIS_LIB_SUBDIR@/${QLL} "${PG}") + FOREACH (QLL ${QGFWLIST}) + INSTALLNAMETOOL_CHANGE (@CMAKE_INSTALL_NAME_DIR@/${QLL}.framework/Versions/${Q_FWVER}/${QLL} ${ATLOADER}/../../@QGIS_DATA_SUBDIR_REV@/@QGIS_FW_SUBDIR@/${QLL}.framework/Versions/${Q_FWVER}/${QLL} "${PG}") ENDFOREACH (QLL) ENDFOREACH (PG) # qgis-mapserver IF (@WITH_MAPSERVER@) - FOREACH (QLL ${QGLIBLIST}) - INSTALLNAMETOOL_CHANGE (@CMAKE_INSTALL_NAME_DIR@/${QLL} ${ATEXECUTABLE}/@QGIS_CGIBIN_SUBDIR_REV@/@QGIS_LIB_SUBDIR@/${QLL} "${QCGIDIR}/qgis_mapserv.fcgi") + FOREACH (QLL ${QGFWLIST}) + INSTALLNAMETOOL_CHANGE (@CMAKE_INSTALL_NAME_DIR@/${QLL}.framework/Versions/${Q_FWVER}/${QLL} ${ATLOADER}/@QGIS_CGIBIN_SUBDIR_REV@/@QGIS_FW_SUBDIR@/${QLL}.framework/Versions/${Q_FWVER}/${QLL} "${QCGIDIR}/qgis_mapserv.fcgi") ENDFOREACH (QLL) ENDIF () ENDIF (@OSX_HAVE_LOADERPATH@) diff --git a/mac/cmake/1qt.cmake.in b/mac/cmake/1qt.cmake.in index 2aaf0f2eb18..7017fbd4f93 100644 --- a/mac/cmake/1qt.cmake.in +++ b/mac/cmake/1qt.cmake.in @@ -25,6 +25,13 @@ SET (ATLOADER "@loader_path") INCLUDE (@CMAKE_SOURCE_DIR@/cmake/MacBundleMacros.cmake) +# message only if verbose makefiles +FUNCTION (MYMESSAGE MSG) + IF (@CMAKE_VERBOSE_MAKEFILE@) + MESSAGE (STATUS "${MSG}") + ENDIF (@CMAKE_VERBOSE_MAKEFILE@) +ENDFUNCTION (MYMESSAGE) + # build list of Qt frameworks to bundle SET (QTLISTQG QtCore QtGui phonon) @@ -128,14 +135,11 @@ ENDFOREACH (QTC) MESSAGE (STATUS "Copying Qwt and updating library paths...") IF (NOT EXISTS "${QLIBDIR}/libqwt.dylib") EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@QWT_LIBRARY@" "${QLIBDIR}/libqwt.dylib") - GET_INSTALL_NAME ("@QWT_LIBRARY@" "libqwt" QLIB) - IF (QLIB) - SET (QWT_CHG "${QLIB}") - # default for Qgis and no loader_path - SET (QWT_CHG_TO "${ATEXECUTABLE}/@QGIS_LIB_SUBDIR@/libqwt.dylib") - INSTALLNAMETOOL_CHANGE (${QWT_CHG} ${QWT_CHG_TO} "${QAPPDIR}/Qgis") - ENDIF (QLIB) ENDIF () +GET_INSTALL_NAME ("@QWT_LIBRARY@" "libqwt" QLIB) +IF (QLIB) + INSTALLNAMETOOL_CHANGE ("${QLIB}" "${ATEXECUTABLE}/@QGIS_LIB_SUBDIR@/libqwt.dylib" "${QAPPDIR}/@QGIS_APP_NAME@") +ENDIF (QLIB) # PyQt @@ -199,8 +203,11 @@ ENDIF (QWT_CHG) # don't load plugins from system-installed Qt FILE (WRITE "${QAPPDIRC}/Resources/qt.conf" "") FILE (WRITE "${QBINDIR}/qgis_help.app/Contents/Resources/qt.conf" "") +FILE (WRITE "${QBINDIR}/qbrowser.app/Contents/Resources/qt.conf" "") -FILE (GLOB QGLIBLIST ${QLIBDIR}/libqgis*.dylib) +FILE (GLOB QGFWLIST RELATIVE ${QFWDIR} ${QFWDIR}/qgis*.framework) +# for some reason, REPLACE is stripping list seps +STRING(REPLACE ".framework" ";" QGFWLIST ${QGFWLIST}) FILE (GLOB QGPLUGLIST ${QPLUGDIR}/*.so) FILE (GLOB QGPYLIST ${QGISPYDIR}/qgis/*.so) @@ -215,10 +222,11 @@ FOREACH (QFW ${QTLISTQG}) SET (QFW_CHG "${QQ}") SET (QFW_CHG_TO "${ATEXECUTABLE}/@QGIS_FW_SUBDIR@/${QFW}.framework/${QFW}") # app - always @executable_path - INSTALLNAMETOOL_CHANGE (${QFW_CHG} ${QFW_CHG_TO} "${QAPPDIR}/Qgis") - # qgis_help - use symlink, even when have loader_path, + INSTALLNAMETOOL_CHANGE (${QFW_CHG} ${QFW_CHG_TO} "${QAPPDIR}/@QGIS_APP_NAME@") + # qgis_help, qbrowser - use symlink, even when have loader_path, # applications behave better that way INSTALLNAMETOOL_CHANGE (${QFW_CHG} ${QFW_CHG_TO} "${QBINDIR}/qgis_help.app/Contents/MacOS/qgis_help") + INSTALLNAMETOOL_CHANGE (${QFW_CHG} ${QFW_CHG_TO} "${QBINDIR}/qbrowser.app/Contents/MacOS/qbrowser") # qgis-mapserver IF (@WITH_MAPSERVER@) IF (@OSX_HAVE_LOADERPATH@) @@ -227,12 +235,20 @@ FOREACH (QFW ${QTLISTQG}) INSTALLNAMETOOL_CHANGE (${QFW_CHG} ${QFW_CHG_TO} "${QCGIDIR}/qgis_mapserv.fcgi") ENDIF () # libs + IF (@OSX_HAVE_LOADERPATH@) + SET (QFW_CHG_TO "${ATLOADER}/../../../${QFW}.framework/${QFW}") + ENDIF (@OSX_HAVE_LOADERPATH@) + FOREACH (QL ${QGFWLIST}) + INSTALLNAMETOOL_CHANGE (${QFW_CHG} ${QFW_CHG_TO} "${QFWDIR}/${QL}.framework/${QL}") + ENDFOREACH (QL) + # libqgispython is not a framework + IF (@OSX_HAVE_LOADERPATH@) + SET (QFW_CHG_TO "${ATLOADER}/@QGIS_LIB_SUBDIR_REV@/@QGIS_FW_SUBDIR@/${QFW}.framework/${QFW}") + ENDIF (@OSX_HAVE_LOADERPATH@) + INSTALLNAMETOOL_CHANGE (${QFW_CHG} ${QFW_CHG_TO} "${QLIBDIR}/libqgispython.dylib") IF (@OSX_HAVE_LOADERPATH@) SET (QFW_CHG_TO "${ATLOADER}/@QGIS_LIB_SUBDIR_REV@/@QGIS_FW_SUBDIR@/${QFW}.framework/${QFW}") ENDIF (@OSX_HAVE_LOADERPATH@) - FOREACH (QL ${QGLIBLIST}) - INSTALLNAMETOOL_CHANGE (${QFW_CHG} ${QFW_CHG_TO} "${QL}") - ENDFOREACH (QL) # Qwt INSTALLNAMETOOL_CHANGE (${QFW_CHG} ${QFW_CHG_TO} "${QLIBDIR}/libqwt.dylib") # GRASS libexec stuff diff --git a/mac/cmake/2lib.cmake.in b/mac/cmake/2lib.cmake.in index 8ae56d297a0..0e5c7231b3f 100644 --- a/mac/cmake/2lib.cmake.in +++ b/mac/cmake/2lib.cmake.in @@ -29,12 +29,19 @@ SET (ATLOADER "@loader_path") INCLUDE (@CMAKE_SOURCE_DIR@/cmake/MacBundleMacros.cmake) +# message only if verbose makefiles +FUNCTION (MYMESSAGE MSG) + IF (@CMAKE_VERBOSE_MAKEFILE@) + MESSAGE (STATUS "${MSG}") + ENDIF (@CMAKE_VERBOSE_MAKEFILE@) +ENDFUNCTION (MYMESSAGE) + FUNCTION (UPDATEQGISPATHS LIBFROM LIBTO) IF (LIBFROM) SET (LIB_CHG_TO "${ATEXECUTABLE}/@QGIS_LIB_SUBDIR@/${LIBTO}") # app - always @executable_path - INSTALLNAMETOOL_CHANGE (${LIBFROM} ${LIB_CHG_TO} "${QAPPDIR}/Qgis") - # qgis_help - doesn't link anything else than Qt/Qgis + INSTALLNAMETOOL_CHANGE (${LIBFROM} ${LIB_CHG_TO} "${QAPPDIR}/@QGIS_APP_NAME@") + # qgis_help, qbrowser - doesn't link anything else than Qt/Qgis # qgis-mapserver IF (@WITH_MAPSERVER@) IF (@OSX_HAVE_LOADERPATH@) @@ -46,8 +53,8 @@ FUNCTION (UPDATEQGISPATHS LIBFROM LIBTO) IF (@OSX_HAVE_LOADERPATH@) SET (LIB_CHG_TO "${ATLOADER}/@QGIS_LIB_SUBDIR_REV@/@QGIS_LIB_SUBDIR@/${LIBTO}") ENDIF (@OSX_HAVE_LOADERPATH@) - FOREACH (QL ${QGLIBLIST}) - INSTALLNAMETOOL_CHANGE (${LIBFROM} ${LIB_CHG_TO} "${QL}") + FOREACH (QL ${QGFWLIST}) + INSTALLNAMETOOL_CHANGE (${LIBFROM} ${LIB_CHG_TO} "${QFWDIR}/${QL}.framework/${QL}") ENDFOREACH (QL) # GRASS libexec stuff #IF (EXISTS "${QLIBXDIR}/grass/bin/qgis.g.browser") @@ -85,7 +92,9 @@ FOREACH (QARCH @CMAKE_OSX_ARCHITECTURES@) SET (QARCHS ${QARCHS} "--arch" "${QARCH}") ENDFOREACH (QARCH) -FILE (GLOB QGLIBLIST ${QLIBDIR}/libqgis*.dylib) +FILE (GLOB QGFWLIST RELATIVE ${QFWDIR} ${QFWDIR}/qgis*.framework) +# for some reason, REPLACE is stripping list seps +STRING(REPLACE ".framework" ";" QGFWLIST ${QGFWLIST}) FILE (GLOB QGPLUGLIST ${QPLUGDIR}/*.so) FILE (GLOB QGPYLIST ${QGISPYDIR}/qgis/*.so) @@ -93,7 +102,6 @@ FILE (GLOB QGPYLIST ${QGISPYDIR}/qgis/*.so) IF (@POSTGRES_LIBRARY@ MATCHES ".*libpq.dylib") MESSAGE (STATUS "Copying libpq and updating library paths...") - MYMESSAGE ("ditto ${QARCHS} \"@POSTGRES_LIBRARY@\" \"${QLIBDIR}/libpq.dylib\"") EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@POSTGRES_LIBRARY@" "${QLIBDIR}/libpq.dylib") GET_INSTALL_NAME ("@POSTGRES_LIBRARY@" "libpq" PQLIB) UPDATEQGISPATHS (${PQLIB} libpq.dylib) @@ -113,7 +121,6 @@ ENDIF () IF (@FCGI_LIBRARY@ MATCHES ".*libfcgi.dylib" AND NOT @FCGI_LIBRARY@ MATCHES "/usr/lib/.*") MESSAGE (STATUS "Copying libfcgi and updating library paths...") - MYMESSAGE ("ditto ${QARCHS} \"@FCGI_LIBRARY@\" \"${QLIBDIR}/libfcgi.dylib\"") EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@FCGI_LIBRARY@" "${QLIBDIR}/libfcgi.dylib") GET_INSTALL_NAME ("@FCGI_LIBRARY@" "libfcgi" FCGILIB) UPDATEQGISPATHS (${FCGILIB} libfcgi.dylib) diff --git a/mac/cmake/3fw.cmake.in b/mac/cmake/3fw.cmake.in index f19ddb8bb4c..6e125730c4e 100644 --- a/mac/cmake/3fw.cmake.in +++ b/mac/cmake/3fw.cmake.in @@ -31,7 +31,7 @@ FUNCTION (UPDATEQGISPATHS LIBFROM LIBTO) IF (LIBFROM) SET (LIB_CHG_TO "${ATEXECUTABLE}/@QGIS_LIB_SUBDIR@/${LIBTO}") # app - always @executable_path - INSTALLNAMETOOL_CHANGE (${LIBFROM} ${LIB_CHG_TO} "${QAPPDIR}/Qgis") + INSTALLNAMETOOL_CHANGE (${LIBFROM} ${LIB_CHG_TO} "${QAPPDIR}/@QGIS_APP_NAME@") # qgis_help - doesn't link anything else than Qt/Qgis # qgis-mapserver IF (@WITH_MAPSERVER@) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f2b53d81c45..f87a9335fc5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,8 +20,3 @@ ENDIF (WITH_MAPSERVER) IF (WITH_ASTYLE) ADD_SUBDIRECTORY(astyle) ENDIF(WITH_ASTYLE) - -IF (APPLE) - ADD_SUBDIRECTORY(mac) -ENDIF(APPLE) - diff --git a/src/analysis/CMakeLists.txt b/src/analysis/CMakeLists.txt index 6f2ab0e1d7a..72bc1b00f58 100644 --- a/src/analysis/CMakeLists.txt +++ b/src/analysis/CMakeLists.txt @@ -56,6 +56,16 @@ SET(QGIS_ANALYSIS_MOC_HDRS QT4_WRAP_CPP(QGIS_ANALYSIS_MOC_SRCS ${QGIS_ANALYSIS_MOC_HDRS}) +# install headers + +SET(QGIS_ANALYSIS_HDRS + vector/qgsgeometryanalyzer.h + vector/qgszonalstatistics.h + interpolation/qgsinterpolator.h + interpolation/qgsgridfilewriter.h + interpolation/qgsidwinterpolator.h + interpolation/qgstininterpolator.h +) INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} @@ -81,12 +91,22 @@ ENDIF (WIN32) ############################################################# # qgis_analysis library -ADD_LIBRARY(qgis_analysis SHARED ${QGIS_ANALYSIS_SRCS} ${QGIS_ANALYSIS_MOC_SRCS} ) +ADD_LIBRARY(qgis_analysis SHARED ${QGIS_ANALYSIS_SRCS} ${QGIS_ANALYSIS_MOC_SRCS} ${QGIS_ANALYSIS_HDRS}) + +SET_TARGET_PROPERTIES(qgis_analysis PROPERTIES + VERSION ${COMPLETE_VERSION} + SOVERSION ${COMPLETE_VERSION} + # no moc headers, messes up PROPERTIES syntax + PUBLIC_HEADER "${QGIS_ANALYSIS_HDRS}" + CLEAN_DIRECT_OUTPUT 1 + FRAMEWORK 1 + FRAMEWORK_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}" + MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/framework.info.plist.in" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${COMPLETE_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER org.qgis.qgis_analysis) ADD_DEPENDENCIES(qgis_analysis qgis_core) -SET_TARGET_PROPERTIES(qgis_analysis PROPERTIES VERSION ${COMPLETE_VERSION} SOVERSION ${COMPLETE_VERSION}) - TARGET_LINK_LIBRARIES(qgis_analysis qgis_core ) @@ -95,16 +115,19 @@ IF (APPLE) SET_TARGET_PROPERTIES(qgis_analysis PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE ) ENDIF (APPLE) +# install + INSTALL(TARGETS qgis_analysis RUNTIME DESTINATION ${QGIS_BIN_DIR} LIBRARY DESTINATION ${QGIS_LIB_DIR} - ARCHIVE DESTINATION ${QGIS_LIB_DIR}) + ARCHIVE DESTINATION ${QGIS_LIB_DIR} + FRAMEWORK DESTINATION ${QGIS_FW_SUBDIR} + PUBLIC_HEADER DESTINATION ${QGIS_INCLUDE_DIR}) +# Mac dev frameworks -# Added by Tim to install headers - -SET(QGIS_ANALYSIS_HDRS vector/qgsgeometryanalyzer.h vector/qgszonalstatistics.h vector/qgsgeometryanalyzer.h interpolation/qgsinterpolator.h interpolation/qgsgridfilewriter.h interpolation/qgsidwinterpolator.h interpolation/qgstininterpolator.h -) - -INSTALL(CODE "MESSAGE(\"Installing ANALYSIS headers...\")") -INSTALL(FILES ${QGIS_ANALYSIS_HDRS} ${QGIS_ANALYSIS_MOC_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) +IF (APPLE AND QGIS_MACAPP_INSTALL_DEV) + INSTALL(TARGETS qgis_analysis FRAMEWORK DESTINATION ${QGIS_MACAPP_DEV_PREFIX}) + INSTALL(CODE "EXECUTE_PROCESS(COMMAND install_name_tool -id \"${QGIS_MACAPP_DEV_PREFIX}/qgis_analysis.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_analysis\" \"$ENV{DESTDIR}${QGIS_MACAPP_DEV_PREFIX}/qgis_analysis.framework/qgis_analysis\")") + INSTALL(CODE "EXECUTE_PROCESS(COMMAND install_name_tool -change \"${CMAKE_INSTALL_NAME_DIR}/qgis_core.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_core\" \"${QGIS_MACAPP_DEV_PREFIX}/qgis_core.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_core\" \"$ENV{DESTDIR}${QGIS_MACAPP_DEV_PREFIX}/qgis_analysis.framework/qgis_analysis\")") +ENDIF (APPLE AND QGIS_MACAPP_INSTALL_DEV) diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index 4d22c84c54a..3e8d09ce8e4 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -380,11 +380,7 @@ ENDIF (POSTGRES_FOUND) ############# -IF (WIN32) - ADD_EXECUTABLE(${QGIS_APP_NAME} WIN32 ${QGIS_APP_SRCS} ${QGIS_APP_MOC_SRCS} ${IMAGE_RCC_SRCS}) -ELSE (WIN32) - ADD_EXECUTABLE(${QGIS_APP_NAME} ${QGIS_APP_SRCS} ${QGIS_APP_MOC_SRCS} ${IMAGE_RCC_SRCS}) -ENDIF (WIN32) +ADD_EXECUTABLE(${QGIS_APP_NAME} MACOSX_BUNDLE WIN32 ${QGIS_APP_SRCS} ${QGIS_APP_MOC_SRCS} ${IMAGE_RCC_SRCS}) TARGET_LINK_LIBRARIES(${QGIS_APP_NAME} ${QWT_LIBRARY} @@ -413,7 +409,7 @@ ENDIF (APPLE) SET_TARGET_PROPERTIES(${QGIS_APP_NAME} PROPERTIES INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${QGIS_LIB_DIR} INSTALL_RPATH_USE_LINK_PATH true - ) + MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/app.info.plist.in") IF (POSTGRES_FOUND) TARGET_LINK_LIBRARIES (${QGIS_APP_NAME} ${POSTGRES_LIBRARY}) @@ -423,18 +419,10 @@ IF (SPATIALITE_FOUND) TARGET_LINK_LIBRARIES (${QGIS_APP_NAME} ${SPATIALITE_LIBRARY}) ENDIF (SPATIALITE_FOUND) +INSTALL(TARGETS ${QGIS_APP_NAME} + BUNDLE DESTINATION ${QGIS_INSTALL_PREFIX} + RUNTIME DESTINATION ${QGIS_BIN_DIR}) + IF (APPLE) - # For Mac OS X, the executable must be at the root of the bundle's executable folder - INSTALL(TARGETS ${QGIS_APP_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}) -ELSE (APPLE) - INSTALL(TARGETS ${QGIS_APP_NAME} RUNTIME DESTINATION ${QGIS_BIN_DIR}) + INSTALL(CODE "EXECUTE_PROCESS(COMMAND /bin/echo -n \"APPLQGIS\" OUTPUT_FILE \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/../PkgInfo\")") ENDIF (APPLE) - -IF(MSVC) - INSTALL(FILES qgis.ico DESTINATION ${CMAKE_INSTALL_PREFIX}/icons) -ENDIF(MSVC) - -########## Install headers for developers to use against qgis libs -#commented out since app classes don't go into any lib there is little point -#INSTALL(FILES ${CMAKE_BINARY_DIR}/src/ui/ui_qgsmeasurebase.h DESTINATION ${QGIS_INCLUDE_DIR}) -#INSTALL(FILES ${QGIS_APP_MOC_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) diff --git a/src/browser/CMakeLists.txt b/src/browser/CMakeLists.txt index ad3ad9f4841..47fe09b3a5f 100644 --- a/src/browser/CMakeLists.txt +++ b/src/browser/CMakeLists.txt @@ -54,15 +54,7 @@ QT4_WRAP_CPP (BROWSER_MOC_SRCS ${BROWSER_MOC_HDRS}) QT4_ADD_RESOURCES(IMAGE_RCC_SRCS ${IMAGE_RCCS}) #QT4_ADD_RESOURCES(BROWSER_RCC_SRCS ${BROWSER_RCCS}) -IF(WIN32) - ADD_EXECUTABLE(qbrowser WIN32 ${BROWSER_SRCS} ${BROWSER_MOC_SRCS} ${BROWSER_UIS_H} ${IMAGE_RCC_SRCS}) -ELSE(WIN32) - IF(APPLE) - ADD_EXECUTABLE (qbrowser MACOSX_BUNDLE ${BROWSER_SRCS} ${BROWSER_MOC_SRCS} ${BROWSER_UIS_H} ${IMAGE_RCC_SRCS}) - ELSE(APPLE) - ADD_EXECUTABLE (qbrowser ${BROWSER_SRCS} ${BROWSER_MOC_SRCS} ${BROWSER_UIS_H} ${IMAGE_RCC_SRCS}) - ENDIF(APPLE) -ENDIF(WIN32) +ADD_EXECUTABLE (qbrowser MACOSX_BUNDLE WIN32 ${BROWSER_SRCS} ${BROWSER_MOC_SRCS} ${BROWSER_UIS_H} ${IMAGE_RCC_SRCS}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../core @@ -104,11 +96,10 @@ SET_TARGET_PROPERTIES(qbrowser PROPERTIES ######################################################## # Install +INSTALL (TARGETS qbrowser + BUNDLE DESTINATION ${QGIS_BIN_DIR} + RUNTIME DESTINATION ${QGIS_BIN_DIR} +) IF (APPLE) - INSTALL (TARGETS qbrowser BUNDLE DESTINATION ${QGIS_BIN_DIR}) - # needed because global install_name prefix is for main qgis app - INSTALL (CODE "EXECUTE_PROCESS(COMMAND install_name_tool -change ${CMAKE_INSTALL_NAME_DIR}/libqgis_core.${COMPLETE_VERSION}.dylib @executable_path/../../../../lib/libqgis_core.${COMPLETE_VERSION}.dylib \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qbrowser.app/Contents/MacOS/qbrowser\")") INSTALL (CODE "EXECUTE_PROCESS(COMMAND ln -sfh ../../../${QGIS_FW_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qbrowser.app/Contents/Frameworks\")") -ELSE (APPLE) - INSTALL (TARGETS qbrowser RUNTIME DESTINATION ${QGIS_BIN_DIR}) ENDIF (APPLE) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index a998e99a634..6b06a155156 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -263,120 +263,14 @@ SET(QGIS_CORE_MOC_HDRS QT4_WRAP_CPP(QGIS_CORE_MOC_SRCS ${QGIS_CORE_MOC_HDRS}) -INCLUDE_DIRECTORIES( - ${CMAKE_CURRENT_SOURCE_DIR} - composer - pal - raster - renderer - symbology - spatialindex/include - symbology-ng - gps/qextserialport - ${PROJ_INCLUDE_DIR} - ${GEOS_INCLUDE_DIR} - ${GDAL_INCLUDE_DIR} -) - -IF (NOT WITH_INTERNAL_SPATIALITE) - INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIR}) -ENDIF (NOT WITH_INTERNAL_SPATIALITE) - -IF (WIN32) - IF (MSVC) - ADD_DEFINITIONS("-DCORE_EXPORT=__declspec(dllexport)") - ELSE (MSVC) - ADD_DEFINITIONS("-UCORE_EXPORT \"-DCORE_EXPORT=__declspec(dllexport)\"") - ENDIF (MSVC) -ENDIF (WIN32) - -#for PAL classes -IF (WIN32) - ADD_DEFINITIONS("-D_HAVE_WINDOWS_H_") -ELSE (WIN32) - ADD_DEFINITIONS("-D_HAVE_PTHREAD_") -ENDIF (WIN32) - -############################################################# -# spatial indexing library - -# add path prefix to every specified file -MACRO(PATH_PREFIX OUTPUT PREFIX) - FOREACH(F ${ARGN}) - SET(${OUTPUT} ${${OUTPUT}} ${PREFIX}/${F}) - ENDFOREACH(F) -ENDMACRO(PATH_PREFIX) - -# tools library -PATH_PREFIX(TOOLS_SRC tools ExternalSort.cc ExternalSort.h TemporaryFile.cc Tools.cc) -PATH_PREFIX(GEOM_SRC geometry LineSegment.cc Point.cc Region.cc) - -# spatial index library -PATH_PREFIX(SPINDEX_SRC spatialindex SpatialIndexImpl.cc) -PATH_PREFIX(STMAN_SRC storagemanager Buffer.cc DiskStorageManager.cc MemoryStorageManager.cc RandomEvictionsBuffer.cc) -PATH_PREFIX(RTREE_SRC rtree BulkLoader.cc Index.cc Leaf.cc Node.cc RTree.cc Statistics.cc) - -SET(SPINDEX_SRC ${TOOLS_SRC} ${GEOM_SRC} ${SPINDEX_SRC} ${STMAN_SRC} ${RTREE_SRC}) - -PATH_PREFIX(INDEX_SRC spatialindex ${SPINDEX_SRC}) - -############################################################# -# qgis_core library - -ADD_LIBRARY(qgis_core SHARED ${QGIS_CORE_SRCS} ${QGIS_CORE_MOC_SRCS} ${INDEX_SRC}) - -SET_TARGET_PROPERTIES(qgis_core PROPERTIES VERSION ${COMPLETE_VERSION} SOVERSION ${COMPLETE_VERSION}) - -# make sure to create qgsversion.h before compiling -ADD_DEPENDENCIES(qgis_core version) - -# because of htonl -IF (WIN32) - FIND_LIBRARY(SETUPAPI_LIBRARY NAMES setupapi PATHS $ENV{LIB}) - TARGET_LINK_LIBRARIES(qgis_core wsock32 ${SETUPAPI_LIBRARY}) -ENDIF (WIN32) - -IF(APPLE) - TARGET_LINK_LIBRARIES(qgis_core "-framework CoreFoundation -framework IOKit") -ENDIF(APPLE) - -TARGET_LINK_LIBRARIES(qgis_core - ${QT_QTMAIN_LIBRARY} - ${QT_QTXML_LIBRARY} - ${QT_QTCORE_LIBRARY} - ${QT_QTGUI_LIBRARY} - ${QT_QTNETWORK_LIBRARY} - ${QT_QTSVG_LIBRARY} - - ${PROJ_LIBRARY} - ${GEOS_LIBRARY} - ${GDAL_LIBRARY} -) - -IF (WITH_INTERNAL_SPATIALITE) - IF (WIN32 OR APPLE) - TARGET_LINK_LIBRARIES(qgis_core ${ICONV_LIBRARY}) - ENDIF (WIN32 OR APPLE) - IF (UNIX) - TARGET_LINK_LIBRARIES(qgis_core pthread ${CMAKE_DL_LIBS}) - ENDIF (UNIX) -ELSE (WITH_INTERNAL_SPATIALITE) - TARGET_LINK_LIBRARIES(qgis_core ${SQLITE3_LIBRARY}) -ENDIF (WITH_INTERNAL_SPATIALITE) - -IF (APPLE) - SET_TARGET_PROPERTIES(qgis_core PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE ) -ENDIF (APPLE) - -INSTALL(TARGETS qgis_core - RUNTIME DESTINATION ${QGIS_BIN_DIR} - LIBRARY DESTINATION ${QGIS_LIB_DIR} - ARCHIVE DESTINATION ${QGIS_LIB_DIR}) - - -# Added by Tim to install headers +# install headers +# install qgsconfig.h and plugin.h here so they can get into +# the OS X framework target SET(QGIS_CORE_HDRS + ${CMAKE_BINARY_DIR}/qgsconfig.h + ../plugins/qgisplugin.h + ../plugins/qgsrendererplugin.h qgis.h qgsapplication.h qgsattributeaction.h @@ -484,5 +378,132 @@ SET(QGIS_CORE_HDRS spatialindex/qgsspatialindex.h ) -INSTALL(CODE "MESSAGE(\"Installing CORE headers...\")") -INSTALL(FILES ${QGIS_CORE_HDRS} ${QGIS_CORE_MOC_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_SOURCE_DIR} + composer + pal + raster + renderer + symbology + spatialindex/include + symbology-ng + gps/qextserialport + ${PROJ_INCLUDE_DIR} + ${GEOS_INCLUDE_DIR} + ${GDAL_INCLUDE_DIR} +) + +IF (NOT WITH_INTERNAL_SPATIALITE) + INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIR}) +ENDIF (NOT WITH_INTERNAL_SPATIALITE) + +IF (WIN32) + IF (MSVC) + ADD_DEFINITIONS("-DCORE_EXPORT=__declspec(dllexport)") + ELSE (MSVC) + ADD_DEFINITIONS("-UCORE_EXPORT \"-DCORE_EXPORT=__declspec(dllexport)\"") + ENDIF (MSVC) +ENDIF (WIN32) + +#for PAL classes +IF (WIN32) + ADD_DEFINITIONS("-D_HAVE_WINDOWS_H_") +ELSE (WIN32) + ADD_DEFINITIONS("-D_HAVE_PTHREAD_") +ENDIF (WIN32) + +############################################################# +# spatial indexing library + +# add path prefix to every specified file +MACRO(PATH_PREFIX OUTPUT PREFIX) + FOREACH(F ${ARGN}) + SET(${OUTPUT} ${${OUTPUT}} ${PREFIX}/${F}) + ENDFOREACH(F) +ENDMACRO(PATH_PREFIX) + +# tools library +PATH_PREFIX(TOOLS_SRC tools ExternalSort.cc ExternalSort.h TemporaryFile.cc Tools.cc) +PATH_PREFIX(GEOM_SRC geometry LineSegment.cc Point.cc Region.cc) + +# spatial index library +PATH_PREFIX(SPINDEX_SRC spatialindex SpatialIndexImpl.cc) +PATH_PREFIX(STMAN_SRC storagemanager Buffer.cc DiskStorageManager.cc MemoryStorageManager.cc RandomEvictionsBuffer.cc) +PATH_PREFIX(RTREE_SRC rtree BulkLoader.cc Index.cc Leaf.cc Node.cc RTree.cc Statistics.cc) + +SET(SPINDEX_SRC ${TOOLS_SRC} ${GEOM_SRC} ${SPINDEX_SRC} ${STMAN_SRC} ${RTREE_SRC}) + +PATH_PREFIX(INDEX_SRC spatialindex ${SPINDEX_SRC}) + +############################################################# +# qgis_core library + +ADD_LIBRARY(qgis_core SHARED ${QGIS_CORE_SRCS} ${QGIS_CORE_MOC_SRCS} ${INDEX_SRC} ${QGIS_CORE_HDRS} ${QGIS_CORE_MOC_HDRS}) + +SET_TARGET_PROPERTIES(qgis_core PROPERTIES + VERSION ${COMPLETE_VERSION} + SOVERSION ${COMPLETE_VERSION} + PUBLIC_HEADER "${QGIS_CORE_HDRS};${QGIS_CORE_MOC_HDRS}" + CLEAN_DIRECT_OUTPUT 1 + FRAMEWORK 1 + FRAMEWORK_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}" + MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/framework.info.plist.in" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${COMPLETE_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER org.qgis.qgis_core) + +# make sure to create qgsversion.h before compiling +ADD_DEPENDENCIES(qgis_core version) + +# because of htonl +IF (WIN32) + FIND_LIBRARY(SETUPAPI_LIBRARY NAMES setupapi PATHS $ENV{LIB}) + TARGET_LINK_LIBRARIES(qgis_core wsock32 ${SETUPAPI_LIBRARY}) +ENDIF (WIN32) + +IF(APPLE) + TARGET_LINK_LIBRARIES(qgis_core "-framework CoreFoundation -framework IOKit") +ENDIF(APPLE) + +TARGET_LINK_LIBRARIES(qgis_core + ${QT_QTMAIN_LIBRARY} + ${QT_QTXML_LIBRARY} + ${QT_QTCORE_LIBRARY} + ${QT_QTGUI_LIBRARY} + ${QT_QTNETWORK_LIBRARY} + ${QT_QTSVG_LIBRARY} + + ${PROJ_LIBRARY} + ${GEOS_LIBRARY} + ${GDAL_LIBRARY} +) + +IF (WITH_INTERNAL_SPATIALITE) + IF (WIN32 OR APPLE) + TARGET_LINK_LIBRARIES(qgis_core ${ICONV_LIBRARY}) + ENDIF (WIN32 OR APPLE) + IF (UNIX) + TARGET_LINK_LIBRARIES(qgis_core pthread ${CMAKE_DL_LIBS}) + ENDIF (UNIX) +ELSE (WITH_INTERNAL_SPATIALITE) + TARGET_LINK_LIBRARIES(qgis_core ${SQLITE3_LIBRARY}) +ENDIF (WITH_INTERNAL_SPATIALITE) + +IF (APPLE) + SET_TARGET_PROPERTIES(qgis_core PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE ) +ENDIF (APPLE) + +# install + +INSTALL(TARGETS qgis_core + RUNTIME DESTINATION ${QGIS_BIN_DIR} + LIBRARY DESTINATION ${QGIS_LIB_DIR} + ARCHIVE DESTINATION ${QGIS_LIB_DIR} + FRAMEWORK DESTINATION ${QGIS_FW_SUBDIR} + PUBLIC_HEADER DESTINATION ${QGIS_INCLUDE_DIR}) + +# Mac dev frameworks + +IF (APPLE AND QGIS_MACAPP_INSTALL_DEV) + INSTALL(TARGETS qgis_core FRAMEWORK DESTINATION ${QGIS_MACAPP_DEV_PREFIX}) + INSTALL(CODE "EXECUTE_PROCESS(COMMAND install_name_tool -id \"${QGIS_MACAPP_DEV_PREFIX}/qgis_core.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_core\" \"$ENV{DESTDIR}${QGIS_MACAPP_DEV_PREFIX}/qgis_core.framework/qgis_core\")") +ENDIF (APPLE AND QGIS_MACAPP_INSTALL_DEV) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 34c6920025c..01bb476ddfc 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -127,6 +127,51 @@ qgssearchquerybuilder.h QT4_WRAP_CPP(QGIS_GUI_MOC_SRCS ${QGIS_GUI_MOC_HDRS}) +# for installing headers + +SET(QGIS_GUI_HDRS +qgisgui.h +qgisinterface.h +qgscolorbutton.h +qgscursors.h +qgsencodingfiledialog.h +qgsfiledropedit.h +qgsgenericprojectionselector.h +qgsmapcanvas.h +qgsmapcanvasitem.h +qgsmapcanvasmap.h +qgsmapcanvassnapper.h +qgsmapoverviewcanvas.h +qgsmaptool.h +qgsmaptoolemitpoint.h +qgsmaptoolpan.h +qgsmaptoolzoom.h +qgsmessageviewer.h +qgscredentialdialog.h +qgsprojectionselector.h +qgsrubberband.h +qgsvertexmarker.h +qgsmaptip.h +qgssearchquerybuilder.h +qgsattributeeditor.h +qgsfieldvalidator.h + +attributetable/qgsattributetablemodel.h +attributetable/qgsattributetablememorymodel.h +attributetable/qgsattributetableview.h +attributetable/qgsattributetablefiltermodel.h +attributetable/qgsattributetableidcolumnpair.h +attributetable/qgsattributetabledelegate.h +) + +SET(QGIS_GUI_UI_HDRS +${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsdetaileditemwidgetbase.h +${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsgenericprojectionselectorbase.h +${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsmessageviewer.h +${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgscredentialdialog.h +${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsprojectionselectorbase.h +${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsquerybuilderbase.h +) INCLUDE_DIRECTORIES( ${QT_QTUITOOLS_INCLUDE_DIR} @@ -176,9 +221,18 @@ ENDIF(MSVC) ############################################################# # qgis_gui library -ADD_LIBRARY(qgis_gui SHARED ${QGIS_GUI_SRCS} ${QGIS_GUI_MOC_SRCS}) +ADD_LIBRARY(qgis_gui SHARED ${QGIS_GUI_SRCS} ${QGIS_GUI_MOC_SRCS} ${QGIS_GUI_HDRS} ${QGIS_GUI_MOC_HDRS}) -SET_TARGET_PROPERTIES(qgis_gui PROPERTIES VERSION ${COMPLETE_VERSION} SOVERSION ${COMPLETE_VERSION}) +SET_TARGET_PROPERTIES(qgis_gui PROPERTIES + VERSION ${COMPLETE_VERSION} + SOVERSION ${COMPLETE_VERSION} + PUBLIC_HEADER "${QGIS_GUI_HDRS};${QGIS_GUI_MOC_HDRS}" + CLEAN_DIRECT_OUTPUT 1 + FRAMEWORK 1 + FRAMEWORK_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}" + MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/framework.info.plist.in" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${COMPLETE_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER org.qgis.qgis_gui) # make sure that UI files will be processed first ADD_DEPENDENCIES(qgis_gui ui) @@ -196,56 +250,27 @@ IF (APPLE) SET_TARGET_PROPERTIES(qgis_gui PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE ) ENDIF (APPLE) +# install + INSTALL(TARGETS qgis_gui RUNTIME DESTINATION ${QGIS_BIN_DIR} LIBRARY DESTINATION ${QGIS_LIB_DIR} - ARCHIVE DESTINATION ${QGIS_LIB_DIR}) + ARCHIVE DESTINATION ${QGIS_LIB_DIR} + FRAMEWORK DESTINATION ${QGIS_FW_SUBDIR} + PUBLIC_HEADER DESTINATION ${QGIS_INCLUDE_DIR}) -# for installing headers +# ui headers to install, don't exist at target definition time, install manually +IF (APPLE) + INSTALL(FILES ${QGIS_GUI_UI_HDRS} DESTINATION ${QGIS_FW_SUBDIR}/qgis_gui.framework/Headers) +ELSE (APPLE) + INSTALL(FILES ${QGIS_GUI_UI_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) +ENDIF (APPLE) -SET(QGIS_GUI_HDRS -qgisgui.h -qgisinterface.h -qgscolorbutton.h -qgscursors.h -qgsencodingfiledialog.h -qgsfiledropedit.h -qgsgenericprojectionselector.h -qgsmapcanvas.h -qgsmapcanvasitem.h -qgsmapcanvasmap.h -qgsmapcanvassnapper.h -qgsmapoverviewcanvas.h -qgsmaptool.h -qgsmaptoolemitpoint.h -qgsmaptoolpan.h -qgsmaptoolzoom.h -qgsmessageviewer.h -qgscredentialdialog.h -qgsprojectionselector.h -qgsrubberband.h -qgsvertexmarker.h -qgsmaptip.h -qgssearchquerybuilder.h -qgsattributeeditor.h -qgsfieldvalidator.h - -attributetable/qgsattributetablemodel.h -attributetable/qgsattributetablememorymodel.h -attributetable/qgsattributetableview.h -attributetable/qgsattributetablefiltermodel.h -attributetable/qgsattributetableidcolumnpair.h -attributetable/qgsattributetabledelegate.h - -${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsdetaileditemwidgetbase.h -${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsgenericprojectionselectorbase.h -${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsmessageviewer.h -${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgscredentialdialog.h -${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsprojectionselectorbase.h -${CMAKE_CURRENT_BINARY_DIR}/../ui/ui_qgsquerybuilderbase.h -) - - -INSTALL(CODE "MESSAGE(\"Installing GUI headers...\")") -INSTALL(FILES ${QGIS_GUI_HDRS} ${QGIS_GUI_MOC_HDRS} DESTINATION ${QGIS_INCLUDE_DIR}) +# Mac dev frameworks +IF (APPLE AND QGIS_MACAPP_INSTALL_DEV) + INSTALL(TARGETS qgis_gui FRAMEWORK DESTINATION ${QGIS_MACAPP_DEV_PREFIX}) + INSTALL(FILES ${QGIS_GUI_UI_HDRS} DESTINATION ${QGIS_MACAPP_DEV_PREFIX}/qgis_gui.framework/Headers) + INSTALL(CODE "EXECUTE_PROCESS(COMMAND install_name_tool -id \"${QGIS_MACAPP_DEV_PREFIX}/qgis_gui.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_gui\" \"$ENV{DESTDIR}${QGIS_MACAPP_DEV_PREFIX}/qgis_gui.framework/qgis_gui\")") + INSTALL(CODE "EXECUTE_PROCESS(COMMAND install_name_tool -change \"${CMAKE_INSTALL_NAME_DIR}/qgis_core.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_core\" \"${QGIS_MACAPP_DEV_PREFIX}/qgis_core.framework/Versions/${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}/qgis_core\" \"$ENV{DESTDIR}${QGIS_MACAPP_DEV_PREFIX}/qgis_gui.framework/qgis_gui\")") +ENDIF (APPLE AND QGIS_MACAPP_INSTALL_DEV) diff --git a/src/helpviewer/CMakeLists.txt b/src/helpviewer/CMakeLists.txt index 9106ad26f22..8f7179fcbdb 100644 --- a/src/helpviewer/CMakeLists.txt +++ b/src/helpviewer/CMakeLists.txt @@ -54,15 +54,7 @@ QT4_WRAP_CPP (HELP_MOC_SRCS ${HELP_MOC_HDRS}) #QT4_ADD_RESOURCES(HELP_RCC_SRCS ${HELP_RCCS}) -IF(WIN32) - ADD_EXECUTABLE (qgis_help WIN32 ${HELP_SRCS} ${HELP_MOC_SRCS} ${HELP_UIS_H}) -ELSE(WIN32) - IF(APPLE) - ADD_EXECUTABLE (qgis_help MACOSX_BUNDLE ${HELP_SRCS} ${HELP_MOC_SRCS} ${HELP_UIS_H}) - ELSE(APPLE) - ADD_EXECUTABLE (qgis_help ${HELP_SRCS} ${HELP_MOC_SRCS} ${HELP_UIS_H}) - ENDIF(APPLE) -ENDIF(WIN32) +ADD_EXECUTABLE (qgis_help MACOSX_BUNDLE WIN32 ${HELP_SRCS} ${HELP_MOC_SRCS} ${HELP_UIS_H}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../core @@ -100,11 +92,10 @@ SET_TARGET_PROPERTIES(qgis_help PROPERTIES ######################################################## # Install +INSTALL (TARGETS qgis_help + BUNDLE DESTINATION ${QGIS_BIN_DIR} + RUNTIME DESTINATION ${QGIS_LIBEXEC_DIR} +) IF (APPLE) - INSTALL (TARGETS qgis_help BUNDLE DESTINATION ${QGIS_BIN_DIR}) - # needed because global install_name prefix is for main qgis app - INSTALL (CODE "EXECUTE_PROCESS(COMMAND install_name_tool -change ${CMAKE_INSTALL_NAME_DIR}/libqgis_core.${COMPLETE_VERSION}.dylib @executable_path/../../../../lib/libqgis_core.${COMPLETE_VERSION}.dylib \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_help.app/Contents/MacOS/qgis_help\")") INSTALL (CODE "EXECUTE_PROCESS (COMMAND ln -sfh ../../../${QGIS_FW_SUBDIR} \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${QGIS_BIN_DIR}/qgis_help.app/Contents/Frameworks\")") -ELSE (APPLE) - INSTALL (TARGETS qgis_help RUNTIME DESTINATION ${QGIS_LIBEXEC_DIR}) ENDIF (APPLE) diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt index 5a8299ad913..dc5eab374fc 100644 --- a/src/plugins/CMakeLists.txt +++ b/src/plugins/CMakeLists.txt @@ -36,4 +36,4 @@ IF (GRASS_FOUND) ADD_SUBDIRECTORY(grass) ENDIF (GRASS_FOUND) -INSTALL(FILES qgisplugin.h qgsrendererplugin.h DESTINATION ${QGIS_INCLUDE_DIR}) +# headers installed in qgis_core target diff --git a/src/providers/grass/CMakeLists.txt b/src/providers/grass/CMakeLists.txt index 1088331d3bd..3cfc58ed72e 100644 --- a/src/providers/grass/CMakeLists.txt +++ b/src/providers/grass/CMakeLists.txt @@ -17,9 +17,18 @@ INCLUDE_DIRECTORIES( # ADD_LIBRARY(qgisgrass SHARED qgsgrass.cpp) + SET_TARGET_PROPERTIES(qgisgrass PROPERTIES - VERSION ${COMPLETE_VERSION} SOVERSION ${COMPLETE_VERSION} - COMPILE_FLAGS "\"-DGRASS_LIB_EXPORT=${DLLEXPORT}\" \"-DGRASS_EXPORT=${DLLIMPORT}\"" ) + VERSION ${COMPLETE_VERSION} + SOVERSION ${COMPLETE_VERSION} + CLEAN_DIRECT_OUTPUT 1 + FRAMEWORK 1 + FRAMEWORK_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}" + MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/framework.info.plist.in" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${COMPLETE_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER org.qgis.qgisgrass + COMPILE_FLAGS "\"-DGRASS_LIB_EXPORT=${DLLEXPORT}\" \"-DGRASS_EXPORT=${DLLIMPORT}\"" ) + TARGET_LINK_LIBRARIES(qgisgrass qgis_core ${GRASS_LIBRARY_gis} @@ -79,7 +88,8 @@ TARGET_LINK_LIBRARIES(qgis.g.info INSTALL(TARGETS qgisgrass RUNTIME DESTINATION ${QGIS_BIN_DIR} - LIBRARY DESTINATION ${QGIS_LIB_DIR}) + LIBRARY DESTINATION ${QGIS_LIB_DIR} + FRAMEWORK DESTINATION ${QGIS_FW_SUBDIR}) INSTALL(TARGETS grassprovider RUNTIME DESTINATION ${QGIS_PLUGIN_DIR} diff --git a/src/providers/sqlanywhere/sqlanyconnection/CMakeLists.txt b/src/providers/sqlanywhere/sqlanyconnection/CMakeLists.txt index 22e2be0d82a..9c4fdd7a767 100644 --- a/src/providers/sqlanywhere/sqlanyconnection/CMakeLists.txt +++ b/src/providers/sqlanywhere/sqlanyconnection/CMakeLists.txt @@ -27,7 +27,15 @@ INCLUDE_DIRECTORIES( ADD_LIBRARY (qgissqlanyconnection SHARED ${SACONN_SRCS}) -SET_TARGET_PROPERTIES(qgissqlanyconnection PROPERTIES VERSION ${COMPLETE_VERSION} SOVERSION ${COMPLETE_VERSION}) +SET_TARGET_PROPERTIES(qgissqlanyconnection PROPERTIES + VERSION ${COMPLETE_VERSION} + SOVERSION ${COMPLETE_VERSION} + CLEAN_DIRECT_OUTPUT 1 + FRAMEWORK 1 + FRAMEWORK_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}" + MACOSX_FRAMEWORK_INFO_PLIST "${CMAKE_SOURCE_DIR}/mac/framework.info.plist.in" + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${COMPLETE_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER org.qgis.qgisgrass) TARGET_LINK_LIBRARIES(qgissqlanyconnection qgis_core @@ -49,6 +57,7 @@ ELSE (WIN32) INSTALL(TARGETS qgissqlanyconnection RUNTIME DESTINATION ${QGIS_PLUGIN_DIR} LIBRARY DESTINATION ${QGIS_LIB_DIR} + FRAMEWORK DESTINATION ${QGIS_FW_SUBDIR} ) ENDIF (WIN32) diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index f09ce207b52..abe919315a9 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -22,7 +22,10 @@ INCLUDE_DIRECTORIES( ADD_LIBRARY (qgispython SHARED ${QGISPYTHON_SRCS}) -SET_TARGET_PROPERTIES(qgispython PROPERTIES VERSION ${COMPLETE_VERSION} SOVERSION ${COMPLETE_VERSION}) +SET_TARGET_PROPERTIES(qgispython PROPERTIES + VERSION ${COMPLETE_VERSION} + SOVERSION ${COMPLETE_VERSION} + CLEAN_DIRECT_OUTPUT 1) TARGET_LINK_LIBRARIES(qgispython qgis_core