From 358f6dcc92750de39501671298b8485677c6aebd Mon Sep 17 00:00:00 2001 From: Shehzan Mohammed Date: Mon, 17 Oct 2016 14:41:35 -0400 Subject: [PATCH 1/5] Fix Forge shared files being installer directly in /usr/local --- CMakeModules/osx_install/OSXInstaller.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeModules/osx_install/OSXInstaller.cmake b/CMakeModules/osx_install/OSXInstaller.cmake index 729f5a4996..1e4d4a640c 100644 --- a/CMakeModules/osx_install/OSXInstaller.cmake +++ b/CMakeModules/osx_install/OSXInstaller.cmake @@ -261,10 +261,10 @@ IF(BUILD_GRAPHICS) PKG_BUILD( PKG_NAME ForgeLibrary DEPENDS OSX_INSTALL_SETUP_FORGE_LIB TARGETS forge_lib_package - INSTALL_LOCATION /usr/local/ + INSTALL_LOCATION /usr/local/lib SCRIPT_DIR ${OSX_INSTALL_SOURCE}/forge_scripts IDENTIFIER com.arrayfire.pkg.forge.lib - PATH_TO_FILES ${OSX_TEMP}/Forge) + PATH_TO_FILES ${OSX_TEMP}/Forge/lib) PKG_BUILD( PKG_NAME ForgeHeaders DEPENDS OSX_INSTALL_SETUP_FORGE_INCLUDE From 65bff6a87233386b8be92064f596c695b7fc5f33 Mon Sep 17 00:00:00 2001 From: Shehzan Mohammed Date: Mon, 17 Oct 2016 14:42:08 -0400 Subject: [PATCH 2/5] OSX post install script needs to be executable --- CMakeModules/osx_install/forge_scripts/postinstall | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 CMakeModules/osx_install/forge_scripts/postinstall diff --git a/CMakeModules/osx_install/forge_scripts/postinstall b/CMakeModules/osx_install/forge_scripts/postinstall old mode 100644 new mode 100755 From 40840b35eefd128092cb1380fa02a5af9891c65a Mon Sep 17 00:00:00 2001 From: Shehzan Mohammed Date: Mon, 17 Oct 2016 14:45:18 -0400 Subject: [PATCH 3/5] Fixes to postinstall script for OSX installer * Fix how the user is obtained (http://apple.stackexchange.com/questions/144159/how-can-i-determine-the-invoking-user-in-an-apple-installer-postinstall-script) * Do brew install/tap commands only if the packages are not found * This was we avoid errors from double installation --- .../osx_install/forge_scripts/postinstall | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/CMakeModules/osx_install/forge_scripts/postinstall b/CMakeModules/osx_install/forge_scripts/postinstall index 88ef20b231..316b16e4fd 100755 --- a/CMakeModules/osx_install/forge_scripts/postinstall +++ b/CMakeModules/osx_install/forge_scripts/postinstall @@ -14,7 +14,8 @@ if [ ! -f $brew ]; then exit 1 fi -user=$(ps aux | grep console | grep -v 'grep\|root' | cut -d' ' -f1 | head -n1) +#user=$(ps aux | grep console | grep -v 'grep\|root' | cut -d' ' -f1 | head -n1) +user=$(stat -f '%Su' $HOME) if [ -z $user ]; then echo "User not found" >> $err_file @@ -30,5 +31,26 @@ function deps_err exit 1 } -su $user -c "$brew tap homebrew/versions" >> $err_file 2>&1 -su $user -c "$brew install glfw3 fontconfig" >> $err_file 2>&1 || deps_err +BREW_VERSIONS=$(su $user -c "$brew tap" | grep "homebrew/versions") +if [[ ${BREW_VERSIONS} != 0 ]]; then + su $user -c "$brew tap homebrew/versions" >> $err_file 2>&1 +else + echo "Homebrew/Versions already present in brew tap." >> $err_file +fi + +GLFW_TEST=$(su $user -c "$brew ls --versions glfw3") +GLFW_INSTALLED=$? +if [[ ${GLFW_INSTALLED} != 0 ]]; then + su $user -c "$brew install glfw3" >> $err_file 2>&1 || deps_err +else + echo "GLFW Version ${GLFW_TEST} is already installed." >> $err_file +fi + +FTCG_TEST=$(su $user -c "$brew ls --versions fontconfig") +FTCG_INSTALLED=$? +echo ${FTCG_TEST} ${FTCG_INSTALLED} +if [[ ${FTCG_INSTALLED} != 0 ]]; then + su $user -c "$brew install fontconfig" >> $err_file 2>&1 || deps_err +else + echo "FontConfig Version ${FTCG_TEST} is already installed." >> $err_file +fi From b75962cc3e7e871c301c3df46ce71e5d38d53540 Mon Sep 17 00:00:00 2001 From: Shehzan Mohammed Date: Tue, 18 Oct 2016 14:07:05 -0400 Subject: [PATCH 4/5] Major OSX Installer Fix: Libraries were being deep copied and not symlinks This issue probably originated around 3.3 where libaf*.dylib / libaf*.major.dylib were not being treated as symlinks but were full versions of the library on their own. This was due to CMake copying symlinks as the files they point to rather than symlinks. --- CMakeModules/osx_install/OSXInstaller.cmake | 43 +++++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/CMakeModules/osx_install/OSXInstaller.cmake b/CMakeModules/osx_install/OSXInstaller.cmake index 1e4d4a640c..1540a275f4 100644 --- a/CMakeModules/osx_install/OSXInstaller.cmake +++ b/CMakeModules/osx_install/OSXInstaller.cmake @@ -29,7 +29,7 @@ ENDFOREACH() # Backends - CPU, CUDA, OpenCL, Unified MACRO(OSX_INSTALL_SETUP BACKEND LIB) - FILE(GLOB ${BACKEND}LIB "${CMAKE_INSTALL_PREFIX}/${AF_INSTALL_LIB_DIR}/lib${LIB}*.dylib") + FILE(GLOB ${BACKEND}LIB "${CMAKE_INSTALL_PREFIX}/${AF_INSTALL_LIB_DIR}/lib${LIB}.${AF_VERSION}.dylib") FILE(GLOB ${BACKEND}CMAKE "${CMAKE_INSTALL_PREFIX}/${AF_INSTALL_CMAKE_DIR}/ArrayFire${BACKEND}*.cmake") ADD_CUSTOM_TARGET(OSX_INSTALL_SETUP_${BACKEND}) @@ -39,9 +39,24 @@ MACRO(OSX_INSTALL_SETUP BACKEND LIB) COMMAND ${CMAKE_COMMAND} -E copy ${SRC} "${OSX_TEMP}/${BACKEND}/${SRC_REL}" WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMENT "Copying ${BACKEND} files to temporary OSX Install Dir" + COMMENT "Copying ${BACKEND} files to temporary OSX Install Dir - File: ${SRC_REL}" ) ENDFOREACH() + # Create symlinks separately. Copying them in above command will do a deep copy + ADD_CUSTOM_COMMAND(TARGET OSX_INSTALL_SETUP_${BACKEND} PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E create_symlink + "lib${LIB}.${AF_VERSION}.dylib" + "lib${LIB}.${AF_VERSION_MAJOR}.dylib" + WORKING_DIRECTORY "${OSX_TEMP}/${BACKEND}/${AF_INSTALL_LIB_DIR}" + COMMENT "Copying ${BACKEND} files to temporary OSX Install Dir (Symlink)" + ) + ADD_CUSTOM_COMMAND(TARGET OSX_INSTALL_SETUP_${BACKEND} PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E create_symlink + "lib${LIB}.${AF_VERSION_MAJOR}.dylib" + "lib${LIB}.dylib" + WORKING_DIRECTORY "${OSX_TEMP}/${BACKEND}/${AF_INSTALL_LIB_DIR}" + COMMENT "Copying ${BACKEND} files to temporary OSX Install Dir (Symlink)" + ) ENDMACRO(OSX_INSTALL_SETUP) OSX_INSTALL_SETUP(CPU afcpu) @@ -79,7 +94,12 @@ IF(BUILD_GRAPHICS) MAKE_DIRECTORY("${OSX_TEMP}/Forge") # Forge Library - FILE(GLOB FORGE_LIB "${CMAKE_INSTALL_PREFIX}/${AF_INSTALL_LIB_DIR}/libforge*.dylib") + FILE(GLOB FORGE_LIB "${CMAKE_INSTALL_PREFIX}/${AF_INSTALL_LIB_DIR}/libforge.*.*.*.dylib") + + GET_FILENAME_COMPONENT(LIBFORGE_NAME ${FORGE_LIB} NAME_WE) # Will return libforge + STRING(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" FORGE_VERSION ${FORGE_LIB}) # Will return x.y.z + STRING(SUBSTRING ${FORGE_VERSION} 0 1 FORGE_VERSION_MAJOR) # Will return x + ADD_CUSTOM_TARGET(OSX_INSTALL_SETUP_FORGE_LIB) FOREACH(SRC ${FORGE_LIB}) FILE(RELATIVE_PATH SRC_REL ${CMAKE_INSTALL_PREFIX} ${SRC}) @@ -87,9 +107,24 @@ IF(BUILD_GRAPHICS) COMMAND ${CMAKE_COMMAND} -E copy ${SRC} "${OSX_TEMP}/Forge/${SRC_REL}" WORKING_DIRECTORY ${PROJECT_BINARY_DIR} - COMMENT "Copying libforge files to temporary OSX Install Dir" + COMMENT "Copying libforge files to temporary OSX Install Dir - File: ${SRC_REL}" ) ENDFOREACH() + # Create symlinks separately. Copying them in above command will do a deep copy + ADD_CUSTOM_COMMAND(TARGET OSX_INSTALL_SETUP_FORGE_LIB PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E create_symlink + "${LIBFORGE_NAME}.${FORGE_VERSION}.dylib" + "${LIBFORGE_NAME}.${FORGE_VERSION_MAJOR}.dylib" + WORKING_DIRECTORY "${OSX_TEMP}/Forge/${AF_INSTALL_LIB_DIR}" + COMMENT "Copying libforge files to temporary OSX Install Dir (Symlink)" + ) + ADD_CUSTOM_COMMAND(TARGET OSX_INSTALL_SETUP_FORGE_LIB PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E create_symlink + "${LIBFORGE_NAME}.${FORGE_VERSION_MAJOR}.dylib" + "${LIBFORGE_NAME}.dylib" + WORKING_DIRECTORY "${OSX_TEMP}/Forge/${AF_INSTALL_LIB_DIR}" + COMMENT "Copying libforge files to temporary OSX Install Dir (Symlink)" + ) # Forge Headers ADD_CUSTOM_TARGET(OSX_INSTALL_SETUP_FORGE_INCLUDE From 2ade7fc28084c0ff2e49831ef34e84b43c228e05 Mon Sep 17 00:00:00 2001 From: Shehzan Mohammed Date: Tue, 18 Oct 2016 16:07:44 -0400 Subject: [PATCH 5/5] More verbose post install script. Fix failures due to grep not found --- .../osx_install/forge_scripts/postinstall | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/CMakeModules/osx_install/forge_scripts/postinstall b/CMakeModules/osx_install/forge_scripts/postinstall index 316b16e4fd..209f35cdc0 100755 --- a/CMakeModules/osx_install/forge_scripts/postinstall +++ b/CMakeModules/osx_install/forge_scripts/postinstall @@ -22,6 +22,8 @@ if [ -z $user ]; then exit 1 fi +echo "User: ${user}" >> $err_file + function deps_err { osascript -e 'tell app "Installer" to display dialog "ArrayFire files installed but failed to install ArrayFire/Forge dependencies using Brew."' @@ -31,26 +33,34 @@ function deps_err exit 1 } -BREW_VERSIONS=$(su $user -c "$brew tap" | grep "homebrew/versions") -if [[ ${BREW_VERSIONS} != 0 ]]; then +echo "Output of brew tap:" >> $err_file +echo "-------------------" >> $err_file +su $user -c "$brew tap" >> $err_file +echo "-------------------" >> $err_file + +BREW_VERSIONS=$(su $user -c "$brew tap" | grep "homebrew/versions") || true +if [[ -z "${BREW_VERSIONS}" ]]; then su $user -c "$brew tap homebrew/versions" >> $err_file 2>&1 else echo "Homebrew/Versions already present in brew tap." >> $err_file fi -GLFW_TEST=$(su $user -c "$brew ls --versions glfw3") -GLFW_INSTALLED=$? -if [[ ${GLFW_INSTALLED} != 0 ]]; then +GLFW_INSTALLED=$(su $user -c "$brew ls --versions glfw3" | grep "glfw3") || true +if [[ -z "${GLFW_INSTALLED}" ]]; then + echo "Installing GLFW3" >> $err_file + echo "-------------------" >> $err_file su $user -c "$brew install glfw3" >> $err_file 2>&1 || deps_err + echo "-------------------" >> $err_file else - echo "GLFW Version ${GLFW_TEST} is already installed." >> $err_file + echo "GLFW Version ${GLFW_INSTALLED} is already installed." >> $err_file fi -FTCG_TEST=$(su $user -c "$brew ls --versions fontconfig") -FTCG_INSTALLED=$? -echo ${FTCG_TEST} ${FTCG_INSTALLED} -if [[ ${FTCG_INSTALLED} != 0 ]]; then +FTCG_INSTALLED=$(su $user -c "$brew ls --versions fontconfig" | grep "fontconfig") || true +if [[ -z "${FTCG_INSTALLED}" ]]; then + echo "Installing FontConfig" >> $err_file + echo "-------------------" >> $err_file su $user -c "$brew install fontconfig" >> $err_file 2>&1 || deps_err + echo "-------------------" >> $err_file else - echo "FontConfig Version ${FTCG_TEST} is already installed." >> $err_file + echo "FontConfig Version ${FTCG_INSTALLED} is already installed." >> $err_file fi