Skip to content

Commit be17b00

Browse files
author
kyngchaos
committedOct 30, 2010
Mac cmake update:
cleaner framework detection; optional bundle Qt/PyQt and libraries, and fixup paths git-svn-id: http://svn.osgeo.org/qgis/trunk@14458 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent da26890 commit be17b00

19 files changed

+929
-237
lines changed
 

‎CMakeLists.txt

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ SET(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINO
55
SET(RELEASE_NAME "Trunk")
66
SET(PROJECT_VERSION ${COMPLETE_VERSION})
77
PROJECT(qgis${PROJECT_VERSION})
8+
IF (APPLE)
9+
SET(QGIS_APP_NAME "QGIS")
10+
ELSE (APPLE)
11+
SET(QGIS_APP_NAME "qgis")
12+
ENDIF (APPLE)
813

914
# Note the version no is Mmmpp for Major/minor/patch, 0-padded, thus '10100' for 1.1.0
1015
MATH(EXPR QGIS_VERSION_INT "${CPACK_PACKAGE_VERSION_MAJOR}*10000+${CPACK_PACKAGE_VERSION_MINOR}*100+${CPACK_PACKAGE_VERSION_PATCH}")
@@ -268,21 +273,51 @@ ELSE (WIN32)
268273

269274
IF (APPLE)
270275
# for Mac OS X, everything is put inside an application bundle
271-
SET (CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app/Contents/MacOS)
276+
SET (QGIS_MACAPP_PREFIX ${CMAKE_INSTALL_PREFIX}/${QGIS_APP_NAME}.app/Contents)
277+
SET (CMAKE_INSTALL_PREFIX ${QGIS_MACAPP_PREFIX}/MacOS)
272278
# path for library references
273279
SET (CMAKE_INSTALL_NAME_DIR @executable_path/lib)
280+
# 4 bundling levels, each includes previous
281+
# 0 nothing
282+
# 1 Qt frameworks
283+
# 2 non-system libraries, "standard"
284+
# 3 non-system frameworks, "standalone"
285+
SET (QGIS_MACAPP_BUNDLE 0 CACHE STRING "What to bundle into app package")
286+
# if we have @loader_path, >=OSX 10.5 (darwin 9+)
287+
IF (CMAKE_SYSTEM_VERSION VERSION_GREATER 9.0.0 OR CMAKE_SYSTEM_VERSION VERSION_EQUAL 9.0.0)
288+
SET (OSX_HAVE_LOADERPATH 1)
289+
ELSE ()
290+
SET (OSX_HAVE_LOADERPATH 0)
291+
ENDIF ()
274292
#this will define ${APP_SERVICES_LIBRARY}
275293
FIND_LIBRARY(APP_SERVICES_LIBRARY ApplicationServices )
276-
ENDIF (APPLE)
277294

278-
# common for MAC and UNIX
295+
SET (DEFAULT_BIN_SUBDIR bin)
296+
SET (QGIS_BIN_SUBDIR_REV ..)
297+
SET (DEFAULT_CGIBIN_SUBDIR fcgi-bin)
298+
SET (QGIS_CGIBIN_SUBDIR_REV ..)
299+
SET (DEFAULT_LIB_SUBDIR lib)
300+
SET (QGIS_LIB_SUBDIR_REV ..)
301+
SET (QGIS_FW_SUBDIR ../Frameworks)
302+
SET (QGIS_FW_SUBDIR_REV ../MacOS)
303+
SET (DEFAULT_DATA_SUBDIR ../Resources)
304+
SET (QGIS_DATA_SUBDIR_REV ../MacOS)
305+
SET (DEFAULT_LIBEXEC_SUBDIR lib/qgis)
306+
SET (QGIS_LIBEXEC_SUBDIR_REV ../..)
307+
SET (DEFAULT_PLUGIN_SUBDIR ../PlugIns/qgis)
308+
SET (QGIS_PLUGIN_SUBDIR_REV ../../MacOS)
309+
SET (DEFAULT_INCLUDE_SUBDIR include/qgis)
310+
311+
ELSE (APPLE)
312+
# UNIX
279313
SET (DEFAULT_BIN_SUBDIR bin)
280314
SET (DEFAULT_CGIBIN_SUBDIR bin)
281315
SET (DEFAULT_LIB_SUBDIR lib${LIB_SUFFIX})
282316
SET (DEFAULT_DATA_SUBDIR share/qgis)
283317
SET (DEFAULT_LIBEXEC_SUBDIR lib${LIB_SUFFIX}/qgis)
284318
SET (DEFAULT_PLUGIN_SUBDIR lib${LIB_SUFFIX}/qgis/plugins)
285319
SET (DEFAULT_INCLUDE_SUBDIR include/qgis)
320+
ENDIF (APPLE)
286321

287322
ENDIF (WIN32)
288323

@@ -334,7 +369,7 @@ SET (QGIS_INCLUDE_SUBDIR ${DEFAULT_INCLUDE_SUBDIR} CACHE STRING "Subdirectory wh
334369

335370
# mark *_SUBDIR variables as advanced as this is not something
336371
# that an average user would use
337-
MARK_AS_ADVANCED (QGIS_BIN_SUBDIR QGIS_LIB_SUBDIR QGIS_LIBEXEC_SUBDIR QGIS_DATA_SUBDIR QGIS_PLUGIN_SUBDIR QGIS_INCLUDE_SUBDIR)
372+
MARK_AS_ADVANCED (QGIS_BIN_SUBDIR QGIS_CGIBIN_SUBDIR QGIS_LIB_SUBDIR QGIS_LIBEXEC_SUBDIR QGIS_DATA_SUBDIR QGIS_PLUGIN_SUBDIR QGIS_INCLUDE_SUBDIR)
338373

339374
# full paths for the installation
340375
SET (QGIS_BIN_DIR ${QGIS_BIN_SUBDIR})
@@ -442,18 +477,22 @@ IF (ENABLE_TESTS)
442477
SUBDIRS(tests)
443478
ENDIF (ENABLE_TESTS)
444479

480+
IF (APPLE)
481+
# must be last for install, so install_name_tool can do its work
482+
SUBDIRS (mac)
483+
ENDIF (APPLE)
484+
445485
#############################################################
446486
# install stuff
447487

448488
INSTALL (FILES AUTHORS CONTRIBUTORS SPONSORS DONORS TRANSLATORS INSTALL CODING
449489
DESTINATION ${QGIS_DATA_DIR}/doc)
450490

451491
# manual page - makes sense only on unix systems
452-
IF (UNIX)
492+
IF (UNIX AND NOT APPLE)
453493
INSTALL (FILES qgis.1 qgis_help.1
454494
DESTINATION ${QGIS_MANUAL_DIR}/man1)
455-
ENDIF (UNIX)
456-
495+
ENDIF (UNIX AND NOT APPLE)
457496

458497
#############################################################
459498
# Uninstall stuff see: http://www.vtk.org/Wiki/CMake_FAQ

‎cmake/FindGDAL.cmake

Lines changed: 91 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -38,98 +38,112 @@ ELSE(WIN32)
3838
IF(UNIX)
3939

4040
# try to use framework on mac
41+
# want clean framework path, not unix compatibility path
4142
IF (APPLE)
42-
SET (GDAL_MAC_PATH /Library/Frameworks/GDAL.framework/Programs)
43+
IF (CMAKE_FIND_FRAMEWORK MATCHES "FIRST"
44+
OR CMAKE_FRAMEWORK_PATH MATCHES "ONLY"
45+
OR NOT CMAKE_FIND_FRAMEWORK)
46+
SET (CMAKE_FIND_FRAMEWORK_save ${CMAKE_FIND_FRAMEWORK} CACHE STRING "" FORCE)
47+
SET (CMAKE_FIND_FRAMEWORK "ONLY" CACHE STRING "" FORCE)
48+
FIND_LIBRARY(GDAL_LIBRARY GDAL)
49+
IF (GDAL_LIBRARY)
50+
# they're all the same in a framework
51+
SET (GDAL_INCLUDE_DIR ${GDAL_LIBRARY}/Headers CACHE PATH "Path to a file.")
52+
SET (GDAL_CONFIG ${GDAL_LIBRARY}/Programs/geos-config CACHE FILEPATH "Path to a program.")
53+
ENDIF (GDAL_LIBRARY)
54+
SET (CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_save} CACHE STRING "" FORCE)
55+
ENDIF ()
4356
ENDIF (APPLE)
4457

45-
SET(GDAL_CONFIG_PREFER_PATH "$ENV{GDAL_HOME}/bin" CACHE STRING "preferred path to GDAL (gdal-config)")
46-
SET(GDAL_CONFIG_PREFER_FWTOOLS_PATH "$ENV{FWTOOLS_HOME}/bin_safe" CACHE STRING "preferred path to GDAL (gdal-config) from FWTools")
47-
FIND_PROGRAM(GDAL_CONFIG gdal-config
48-
${GDAL_CONFIG_PREFER_PATH}
49-
${GDAL_CONFIG_PREFER_FWTOOLS_PATH}
50-
${GDAL_MAC_PATH}
51-
/usr/local/bin/
52-
/usr/bin/
53-
)
54-
# MESSAGE("DBG GDAL_CONFIG ${GDAL_CONFIG}")
58+
IF (NOT GDAL_INCLUDE_DIR AND NOT GDAL_LIBRARY AND NOT GDAL_CONFIG)
59+
# didn't find OS X framework, and was not set by user
60+
SET(GDAL_CONFIG_PREFER_PATH "$ENV{GDAL_HOME}/bin" CACHE STRING "preferred path to GDAL (gdal-config)")
61+
SET(GDAL_CONFIG_PREFER_FWTOOLS_PATH "$ENV{FWTOOLS_HOME}/bin_safe" CACHE STRING "preferred path to GDAL (gdal-config) from FWTools")
62+
FIND_PROGRAM(GDAL_CONFIG gdal-config
63+
${GDAL_CONFIG_PREFER_PATH}
64+
${GDAL_CONFIG_PREFER_FWTOOLS_PATH}
65+
/usr/local/bin/
66+
/usr/bin/
67+
)
68+
# MESSAGE("DBG GDAL_CONFIG ${GDAL_CONFIG}")
5569

56-
IF (GDAL_CONFIG)
57-
58-
## extract gdal version
59-
EXEC_PROGRAM(${GDAL_CONFIG}
60-
ARGS --version
61-
OUTPUT_VARIABLE GDAL_VERSION )
62-
STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" GDAL_VERSION_MAJOR "${GDAL_VERSION}")
63-
STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" GDAL_VERSION_MINOR "${GDAL_VERSION}")
70+
IF (GDAL_CONFIG)
71+
72+
## extract gdal version
73+
EXEC_PROGRAM(${GDAL_CONFIG}
74+
ARGS --version
75+
OUTPUT_VARIABLE GDAL_VERSION )
76+
STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\1" GDAL_VERSION_MAJOR "${GDAL_VERSION}")
77+
STRING(REGEX REPLACE "([0-9]+)\\.([0-9]+)\\.([0-9]+)" "\\2" GDAL_VERSION_MINOR "${GDAL_VERSION}")
6478

65-
# MESSAGE("DBG GDAL_VERSION ${GDAL_VERSION}")
66-
# MESSAGE("DBG GDAL_VERSION_MAJOR ${GDAL_VERSION_MAJOR}")
67-
# MESSAGE("DBG GDAL_VERSION_MINOR ${GDAL_VERSION_MINOR}")
79+
# MESSAGE("DBG GDAL_VERSION ${GDAL_VERSION}")
80+
# MESSAGE("DBG GDAL_VERSION_MAJOR ${GDAL_VERSION_MAJOR}")
81+
# MESSAGE("DBG GDAL_VERSION_MINOR ${GDAL_VERSION_MINOR}")
6882

69-
# check for gdal version
70-
# version 1.2.5 is known NOT to be supported (missing CPL_STDCALL macro)
71-
# According to INSTALL, 1.4.0+ is required
72-
IF (GDAL_VERSION_MAJOR LESS 1 OR GDAL_VERSION_MINOR LESS 4)
83+
# check for gdal version
84+
# version 1.2.5 is known NOT to be supported (missing CPL_STDCALL macro)
85+
# According to INSTALL, 1.4.0+ is required
86+
IF (GDAL_VERSION_MAJOR LESS 1 OR GDAL_VERSION_MINOR LESS 4)
7387
MESSAGE (FATAL_ERROR "GDAL version is too old (${GDAL_VERSION}). Use 1.4.0 or higher.")
74-
ENDIF (GDAL_VERSION_MAJOR LESS 1 OR GDAL_VERSION_MINOR LESS 4)
75-
76-
# set INCLUDE_DIR to prefix+include
77-
EXEC_PROGRAM(${GDAL_CONFIG}
78-
ARGS --prefix
79-
OUTPUT_VARIABLE GDAL_PREFIX)
80-
#SET(GDAL_INCLUDE_DIR ${GDAL_PREFIX}/include CACHE STRING INTERNAL)
81-
FIND_PATH(GDAL_INCLUDE_DIR
82-
gdal.h
83-
${GDAL_PREFIX}/include/gdal
84-
${GDAL_PREFIX}/include
85-
/usr/local/include
86-
/usr/include
87-
)
88-
89-
## extract link dirs for rpath
90-
EXEC_PROGRAM(${GDAL_CONFIG}
91-
ARGS --libs
92-
OUTPUT_VARIABLE GDAL_CONFIG_LIBS )
93-
94-
## split off the link dirs (for rpath)
95-
## use regular expression to match wildcard equivalent "-L*<endchar>"
96-
## with <endchar> is a space or a semicolon
97-
STRING(REGEX MATCHALL "[-][L]([^ ;])+"
98-
GDAL_LINK_DIRECTORIES_WITH_PREFIX
99-
"${GDAL_CONFIG_LIBS}" )
88+
ENDIF (GDAL_VERSION_MAJOR LESS 1 OR GDAL_VERSION_MINOR LESS 4)
89+
90+
# set INCLUDE_DIR to prefix+include
91+
EXEC_PROGRAM(${GDAL_CONFIG}
92+
ARGS --prefix
93+
OUTPUT_VARIABLE GDAL_PREFIX)
94+
#SET(GDAL_INCLUDE_DIR ${GDAL_PREFIX}/include CACHE STRING INTERNAL)
95+
FIND_PATH(GDAL_INCLUDE_DIR
96+
gdal.h
97+
${GDAL_PREFIX}/include/gdal
98+
${GDAL_PREFIX}/include
99+
/usr/local/include
100+
/usr/include
101+
)
102+
103+
## extract link dirs for rpath
104+
EXEC_PROGRAM(${GDAL_CONFIG}
105+
ARGS --libs
106+
OUTPUT_VARIABLE GDAL_CONFIG_LIBS )
107+
108+
## split off the link dirs (for rpath)
109+
## use regular expression to match wildcard equivalent "-L*<endchar>"
110+
## with <endchar> is a space or a semicolon
111+
STRING(REGEX MATCHALL "[-][L]([^ ;])+"
112+
GDAL_LINK_DIRECTORIES_WITH_PREFIX
113+
"${GDAL_CONFIG_LIBS}" )
100114
# MESSAGE("DBG GDAL_LINK_DIRECTORIES_WITH_PREFIX=${GDAL_LINK_DIRECTORIES_WITH_PREFIX}")
101115

102-
## remove prefix -L because we need the pure directory for LINK_DIRECTORIES
116+
## remove prefix -L because we need the pure directory for LINK_DIRECTORIES
103117

104-
IF (GDAL_LINK_DIRECTORIES_WITH_PREFIX)
105-
STRING(REGEX REPLACE "[-][L]" "" GDAL_LINK_DIRECTORIES ${GDAL_LINK_DIRECTORIES_WITH_PREFIX} )
106-
ENDIF (GDAL_LINK_DIRECTORIES_WITH_PREFIX)
107-
108-
## split off the name
109-
## use regular expression to match wildcard equivalent "-l*<endchar>"
110-
## with <endchar> is a space or a semicolon
111-
STRING(REGEX MATCHALL "[-][l]([^ ;])+"
112-
GDAL_LIB_NAME_WITH_PREFIX
113-
"${GDAL_CONFIG_LIBS}" )
118+
IF (GDAL_LINK_DIRECTORIES_WITH_PREFIX)
119+
STRING(REGEX REPLACE "[-][L]" "" GDAL_LINK_DIRECTORIES ${GDAL_LINK_DIRECTORIES_WITH_PREFIX} )
120+
ENDIF (GDAL_LINK_DIRECTORIES_WITH_PREFIX)
121+
122+
## split off the name
123+
## use regular expression to match wildcard equivalent "-l*<endchar>"
124+
## with <endchar> is a space or a semicolon
125+
STRING(REGEX MATCHALL "[-][l]([^ ;])+"
126+
GDAL_LIB_NAME_WITH_PREFIX
127+
"${GDAL_CONFIG_LIBS}" )
114128
# MESSAGE("DBG GDAL_LIB_NAME_WITH_PREFIX=${GDAL_LIB_NAME_WITH_PREFIX}")
115129

116130

117-
## remove prefix -l because we need the pure name
131+
## remove prefix -l because we need the pure name
118132

119-
IF (GDAL_LIB_NAME_WITH_PREFIX)
120-
STRING(REGEX REPLACE "[-][l]" "" GDAL_LIB_NAME ${GDAL_LIB_NAME_WITH_PREFIX} )
121-
ENDIF (GDAL_LIB_NAME_WITH_PREFIX)
122-
123-
IF (APPLE)
124-
SET(GDAL_LIBRARY ${GDAL_LINK_DIRECTORIES}/lib${GDAL_LIB_NAME}.dylib CACHE STRING INTERNAL)
125-
ELSE (APPLE)
126-
SET(GDAL_LIBRARY ${GDAL_LINK_DIRECTORIES}/lib${GDAL_LIB_NAME}.so CACHE STRING INTERNAL)
127-
ENDIF (APPLE)
133+
IF (GDAL_LIB_NAME_WITH_PREFIX)
134+
STRING(REGEX REPLACE "[-][l]" "" GDAL_LIB_NAME ${GDAL_LIB_NAME_WITH_PREFIX} )
135+
ENDIF (GDAL_LIB_NAME_WITH_PREFIX)
136+
137+
IF (APPLE)
138+
SET(GDAL_LIBRARY ${GDAL_LINK_DIRECTORIES}/lib${GDAL_LIB_NAME}.dylib CACHE STRING INTERNAL)
139+
ELSE (APPLE)
140+
SET(GDAL_LIBRARY ${GDAL_LINK_DIRECTORIES}/lib${GDAL_LIB_NAME}.so CACHE STRING INTERNAL)
141+
ENDIF (APPLE)
128142

129-
ELSE(GDAL_CONFIG)
130-
MESSAGE("FindGDAL.cmake: gdal-config not found. Please set it manually. GDAL_CONFIG=${GDAL_CONFIG}")
131-
ENDIF(GDAL_CONFIG)
132-
143+
ELSE(GDAL_CONFIG)
144+
MESSAGE("FindGDAL.cmake: gdal-config not found. Please set it manually. GDAL_CONFIG=${GDAL_CONFIG}")
145+
ENDIF(GDAL_CONFIG)
146+
ENDIF (NOT GDAL_INCLUDE_DIR AND NOT GDAL_LIBRARY AND NOT GDAL_CONFIG)
133147
ENDIF(UNIX)
134148
ENDIF(WIN32)
135149

0 commit comments

Comments
 (0)
Please sign in to comment.