diff --git a/CMakeModules/osx_install/OSXInstaller.cmake b/CMakeModules/osx_install/OSXInstaller.cmake index 729f5a4996..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 @@ -261,10 +296,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 diff --git a/CMakeModules/osx_install/forge_scripts/postinstall b/CMakeModules/osx_install/forge_scripts/postinstall old mode 100644 new mode 100755 index 88ef20b231..209f35cdc0 --- a/CMakeModules/osx_install/forge_scripts/postinstall +++ b/CMakeModules/osx_install/forge_scripts/postinstall @@ -14,13 +14,16 @@ 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 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."' @@ -30,5 +33,34 @@ 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 +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_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_INSTALLED} is already installed." >> $err_file +fi + +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_INSTALLED} is already installed." >> $err_file +fi