diff --git a/cmake/MacBundleMacros.cmake b/cmake/MacBundleMacros.cmake new file mode 100644 index 000000000000..63ac32e7d552 --- /dev/null +++ b/cmake/MacBundleMacros.cmake @@ -0,0 +1,35 @@ +# Mac Bundle Macros + +# BundleUtilities has functions to bundle and fixup libraries into an +# application package, but it's all-or-nothing and is missing some features: +# +# - @loader_path +# - helper functions can't get install_name, just dependencies + +# get the install_name of a library or framework +# regex stuff taken from GetPrerequisites + +FUNCTION (GET_INSTALL_NAME LIBFILE LIBNAME OUTVAR) + EXECUTE_PROCESS (COMMAND otool -D "${LIBFILE}" OUTPUT_VARIABLE iname_out) + STRING (REGEX REPLACE ".*:\n" "" iname "${iname_out}") + IF (iname) + # trim it + STRING (REGEX MATCH "[^\n ].*[^\n ]" iname "${iname}") + SET (${OUTVAR} ${iname} PARENT_SCOPE) + ENDIF (iname) +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/mac/cmake/0qgis.cmake.in b/mac/cmake/0qgis.cmake.in index 04a6c22ffc8c..1901c9f5176e 100644 --- a/mac/cmake/0qgis.cmake.in +++ b/mac/cmake/0qgis.cmake.in @@ -23,18 +23,7 @@ SET (QT_FWVER @QT_VERSION_MAJOR@) SET (ATEXECUTABLE "@executable_path") SET (ATLOADER "@loader_path") -# message only if verbose makefiles (use for install_name_tool echos) -FUNCTION (MYMESSAGE MSG) - IF (@CMAKE_VERBOSE_MAKEFILE@) - MESSAGE (STATUS "${MSG}") - ENDIF (@CMAKE_VERBOSE_MAKEFILE@) -ENDFUNCTION (MYMESSAGE) - -# isntall_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) +INCLUDE (@CMAKE_SOURCE_DIR@/cmake/MacBundleMacros.cmake) FILE (GLOB QGLIBLIST RELATIVE ${QLIBDIR} ${QLIBDIR}/libqgis*.dylib) FILE (GLOB QGPLUGLIST ${QPLUGDIR}/*.so) diff --git a/mac/cmake/1qt.cmake.in b/mac/cmake/1qt.cmake.in index 047e922a67e8..c250455e1597 100644 --- a/mac/cmake/1qt.cmake.in +++ b/mac/cmake/1qt.cmake.in @@ -3,9 +3,6 @@ # so we configure it first to do substitutions # make sure to use @varname@ -# need part of BundleUtilities -INCLUDE (GetPrerequisites) - # kill boolean warnings CMAKE_POLICY (SET CMP0012 NEW) @@ -26,30 +23,7 @@ SET (QT_FWVER @QT_VERSION_MAJOR@) SET (ATEXECUTABLE "@executable_path") SET (ATLOADER "@loader_path") -# helper functions - -FUNCTION (GET_INSTALL_NAME LIBFILE LIBNAME OUTVAR) - get_prerequisites ("${LIBFILE}" LIBLIST 1 0 "" "") - FOREACH (L ${LIBLIST}) - STRING (REGEX MATCH ".*${LIBNAME}.+" LL ${L}) - IF (LL) - SET (${OUTVAR} ${LL} PARENT_SCOPE) - ENDIF (LL) - ENDFOREACH () -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) +INCLUDE (@CMAKE_SOURCE_DIR@/cmake/MacBundleMacros.cmake) # build list of Qt frameworks to bundle diff --git a/mac/cmake/2lib.cmake.in b/mac/cmake/2lib.cmake.in index b7162df371bc..c771feb10436 100644 --- a/mac/cmake/2lib.cmake.in +++ b/mac/cmake/2lib.cmake.in @@ -7,9 +7,6 @@ # libpq # libfcgi (non-system) -# need part of BundleUtilities -INCLUDE (GetPrerequisites) - # kill boolean warnings CMAKE_POLICY (SET CMP0012 NEW) @@ -30,30 +27,7 @@ SET (QT_FWVER @QT_VERSION_MAJOR@) SET (ATEXECUTABLE "@executable_path") SET (ATLOADER "@loader_path") -# helper functions - -FUNCTION (GET_INSTALL_NAME LIBFILE LIBNAME OUTVAR) - get_prerequisites ("${LIBFILE}" LIBLIST 1 0 "" "") - FOREACH (L ${LIBLIST}) - STRING (REGEX MATCH ".*${LIBNAME}.+" LL ${L}) - IF (LL) - SET (${OUTVAR} ${LL} PARENT_SCOPE) - ENDIF (LL) - ENDFOREACH () -ENDFUNCTION (GET_INSTALL_NAME) - -# message only if verbose makefiles (use for install_name_tool echos) -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) +INCLUDE (@CMAKE_SOURCE_DIR@/cmake/MacBundleMacros.cmake) FUNCTION (UPDATEQGISPATHS LIBFROM LIBTO) IF (LIBFROM) diff --git a/mac/cmake/3fw.cmake.in b/mac/cmake/3fw.cmake.in index a83a9803bafc..71ad3d85a4e7 100644 --- a/mac/cmake/3fw.cmake.in +++ b/mac/cmake/3fw.cmake.in @@ -5,9 +5,6 @@ MESSAGE (STATUS "Bundling frameworks is not functional yet, skipping...") -# need part of BundleUtilities -INCLUDE (GetPrerequisites) - # kill boolean warnings CMAKE_POLICY (SET CMP0012 NEW) @@ -28,30 +25,7 @@ SET (QT_FWVER @QT_VERSION_MAJOR@) SET (ATEXECUTABLE "@executable_path") SET (ATLOADER "@loader_path") -# helper functions - -FUNCTION (GET_INSTALL_NAME LIBFILE LIBNAME OUTVAR) - get_prerequisites ("${LIBFILE}" LIBLIST 1 0 "" "") - FOREACH (L ${LIBLIST}) - STRING (REGEX MATCH ".*${LIBNAME}.+" LL ${L}) - IF (LL) - SET (${OUTVAR} ${LL} PARENT_SCOPE) - ENDIF (LL) - ENDFOREACH () -ENDFUNCTION (GET_INSTALL_NAME) - -# message only if verbose makefiles (use for install_name_tool echos) -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) +INCLUDE (@CMAKE_SOURCE_DIR@/cmake/MacBundleMacros.cmake) FUNCTION (UPDATEQGISPATHS LIBFROM LIBTO) IF (LIBFROM)