CMake/packaging/mac/MacPackagingTasks.cmake.in |
|
---|---|
OS X packaging tasks |
|
This file is processed by |
SET(PROJECT_NAME @PROJECT_NAME@)
SET(PROJECT_SOURCE_DIR @PROJECT_SOURCE_DIR@)
SET(PROJECT_BINARY_DIR @PROJECT_BINARY_DIR@)
SET(TeXworks_LIB_DIRS @TeXworks_LIB_DIRS@)
SET(CMAKE_SHARED_LIBRARY_SUFFIX @CMAKE_SHARED_LIBRARY_SUFFIX@)
SET(QT_PLUGINS @QT_PLUGINS@)
SET(QT_VERSION_MAJOR @QT_VERSION_MAJOR@) |
Poppler data files: version, matching hash, and derived variables. |
SET(POPPLER_DATA_VERSION "0.4.7")
SET(POPPLER_DATA_ARCHIVE_MD5 "636a8f2b9f6df9e7ced8ec0946961eaf")
SET(POPPLER_DATA_BASE "poppler-data-${POPPLER_DATA_VERSION}")
SET(POPPLER_DATA_ARCHIVE "${POPPLER_DATA_BASE}.tar.gz")
SET(POPPLER_DATA_ARCHIVE_URL "http://poppler.freedesktop.org/${POPPLER_DATA_ARCHIVE}") |
TeXworks HTML manual: version, matching hash, and derived variables. |
SET(TW_MANUAL_VERSION "20150506-64280a1")
SET(TW_MANUAL_ARCHIVE_MD5 "6f4cb6bb29b1ff3b482ff0700ff06d9d")
SET(TW_MANUAL_BASE "TeXworks-manual-html-${TW_MANUAL_VERSION}")
SET(TW_MANUAL_ARCHIVE "${TW_MANUAL_BASE}.zip")
SET(TW_MANUAL_ARCHIVE_URL "https://github.com/TeXworks/manual/releases/download/2015-05-06/${TW_MANUAL_ARCHIVE}") |
This |
IF ( ${CMAKE_INSTALL_PREFIX} MATCHES .*/_CPack_Packages/.* ) |
Download and install Poppler data |
IF ( NOT EXISTS "${PROJECT_SOURCE_DIR}/${POPPLER_DATA_ARCHIVE}" )
MESSAGE(STATUS "Downloading Poppler data files")
FILE(DOWNLOAD "${POPPLER_DATA_ARCHIVE_URL}"
"${PROJECT_SOURCE_DIR}/${POPPLER_DATA_ARCHIVE}"
EXPECTED_MD5 "${POPPLER_DATA_ARCHIVE_MD5}"
SHOW_PROGRESS
)
ENDIF ()
IF ( NOT EXISTS "${PROJECT_SOURCE_DIR}/${POPPLER_DATA_BASE}" )
EXECUTE_PROCESS(
COMMAND tar xzf "${PROJECT_SOURCE_DIR}/${POPPLER_DATA_ARCHIVE}"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
)
ENDIF ()
FILE(INSTALL "${PROJECT_SOURCE_DIR}/${POPPLER_DATA_BASE}/"
DESTINATION "${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app/Contents/poppler-data"
PATTERN CMakeLists.txt EXCLUDE
PATTERN Makefile EXCLUDE
) |
Download and install TeXworks manual |
IF ( NOT EXISTS "${PROJECT_SOURCE_DIR}/${TW_MANUAL_ARCHIVE}" )
MESSAGE(STATUS "Downloading TeXworks HTML manual")
FILE(DOWNLOAD "${TW_MANUAL_ARCHIVE_URL}"
"${PROJECT_SOURCE_DIR}/${TW_MANUAL_ARCHIVE}"
EXPECTED_MD5 "${TW_MANUAL_ARCHIVE_MD5}"
SHOW_PROGRESS
)
ENDIF ()
IF ( NOT EXISTS "${PROJECT_SOURCE_DIR}/${TW_MANUAL_BASE}" )
FILE(MAKE_DIRECTORY "${PROJECT_SOURCE_DIR}/${TW_MANUAL_BASE}")
EXECUTE_PROCESS(
COMMAND unzip "${PROJECT_SOURCE_DIR}/${TW_MANUAL_ARCHIVE}"
WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/${TW_MANUAL_BASE}"
)
ENDIF ()
FILE(INSTALL "${PROJECT_SOURCE_DIR}/${TW_MANUAL_BASE}/TeXworks-manual"
DESTINATION "${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app/Contents/texworks-help/"
) |
Copy all runtime dependencies and rewrite loader paths |
|
Bring in This module offers the
|
SET(CMAKE_MODULE_PATH @CMAKE_MODULE_PATH@)
if (QT_VERSION_MAJOR EQUAL 4)
INCLUDE(DeployQt4)
elseif (QT_VERSION_MAJOR EQUAL 5)
INCLUDE(DeployQt5)
endif () |
Gather all TeXworks Plugin libraries. |
FILE(GLOB TeXworks_PLUGINS
${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app/Contents/PlugIns/*${CMAKE_SHARED_MODULE_SUFFIX}) |
If |
SET(BU_CHMOD_BUNDLE_ITEMS ON)
if (QT_VERSION_MAJOR EQUAL 4)
FIXUP_QT4_BUNDLE(${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app "${QT_PLUGINS}" "${TeXworks_PLUGINS}" "${TeXworks_LIB_DIRS}")
elseif(QT_VERSION_MAJOR EQUAL 5)
FIXUP_QT5_EXECUTABLE(${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app "${QT_PLUGINS}" "${TeXworks_PLUGINS}" "${TeXworks_LIB_DIRS}")
endif() |
Remove unecessary architectures from universal binaries |
|
Some libraries copied from the OS X system, such as X11 libraries, may
contain up to 4 different architectures. Here we will iterate over these
libraries and use |
|
Another useful function from |
GET_BUNDLE_MAIN_EXECUTABLE(${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app APP_MAIN) |
We look at the TeXworks binary that was built rather than consulting the
value of the |
MESSAGE(STATUS "Reducing the size of bundled libraries.")
MESSAGE(STATUS "Scanning architectures of: ${APP_MAIN}")
EXECUTE_PROCESS( |
Piping this output to |
COMMAND lipo -info ${APP_MAIN}
COMMAND cut -d : -f 3-
OUTPUT_VARIABLE APP_ARCHS
) |
Strip leading and trailing whitespace. |
STRING(STRIP ${APP_ARCHS} APP_ARCHS) |
Convert spaces to semicolons so CMake will interpret the string as a list. |
STRING(REPLACE " " ";" APP_ARCHS ${APP_ARCHS})
MESSAGE(STATUS "Will reduce bundled libraries to: ${APP_ARCHS}")
FOREACH(ARCH IN LISTS APP_ARCHS)
SET(ARCHS_TO_EXTRACT "${ARCHS_TO_EXTRACT} -extract ${ARCH}")
ENDFOREACH () |
NOTE: This will not process any dylibs from Frameworks copied by
|
FILE(GLOB BUNDLED_DYLIBS
${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app/Contents/MacOS/*${CMAKE_SHARED_LIBRARY_SUFFIX})
FOREACH(DYLIB IN LISTS BUNDLED_DYLIBS) |
|
EXECUTE_PROCESS(
COMMAND lipo -info ${DYLIB}
COMMAND cut -d : -f 1
COMMAND grep -q "Non-fat file"
RESULT_VARIABLE DYLIB_IS_FAT
)
IF(NOT ${DYLIB_IS_FAT} EQUAL 0)
MESSAGE(STATUS "Processing fat library: ${DYLIB}") |
|
EXECUTE_PROCESS(
COMMAND bash -c "lipo ${ARCHS_TO_EXTRACT} ${DYLIB} -output ${DYLIB}"
)
ELSE()
MESSAGE(STATUS "Skipping non-fat library: ${DYLIB}")
ENDIF()
ENDFOREACH ()
MESSAGE(STATUS "Finished stripping architectures from bundled libraries.")
ENDIF () |