Merge topic 'GetPrerequisites-rpath-OSX'
98d2031
Fix BundleUtilities test failure with space in build path.36d6641
Fix new BundleUtilities test failure on Mac 10.4.x0d96dec
GetPrerequisites: Add test for @rpath support.880139a
GetPrerequisites: Add support for @rpath on Mac OS X.9a6b102
GetPrerequisites: Add support for @rpath on Mac OS X.
This commit is contained in:
commit
476679afaf
|
@ -303,6 +303,26 @@ function(gp_resolve_item context item exepath dirs resolved_item_var)
|
||||||
endif(item MATCHES "@loader_path")
|
endif(item MATCHES "@loader_path")
|
||||||
endif(NOT resolved)
|
endif(NOT resolved)
|
||||||
|
|
||||||
|
if(NOT resolved)
|
||||||
|
if(item MATCHES "@rpath")
|
||||||
|
#
|
||||||
|
# @rpath references are relative to the paths built into the binaries with -rpath
|
||||||
|
# We handle this case like we do for other Unixes
|
||||||
|
#
|
||||||
|
string(REPLACE "@rpath/" "" norpath_item "${item}")
|
||||||
|
|
||||||
|
set(ri "ri-NOTFOUND")
|
||||||
|
find_file(ri "${norpath_item}" ${exepath} ${dirs} NO_DEFAULT_PATH)
|
||||||
|
if(ri)
|
||||||
|
#message(STATUS "info: 'find_file' in exepath/dirs (${ri})")
|
||||||
|
set(resolved 1)
|
||||||
|
set(resolved_item "${ri}")
|
||||||
|
set(ri "ri-NOTFOUND")
|
||||||
|
endif(ri)
|
||||||
|
|
||||||
|
endif(item MATCHES "@rpath")
|
||||||
|
endif(NOT resolved)
|
||||||
|
|
||||||
if(NOT resolved)
|
if(NOT resolved)
|
||||||
set(ri "ri-NOTFOUND")
|
set(ri "ri-NOTFOUND")
|
||||||
find_file(ri "${item}" ${exepath} ${dirs} NO_DEFAULT_PATH)
|
find_file(ri "${item}" ${exepath} ${dirs} NO_DEFAULT_PATH)
|
||||||
|
@ -461,6 +481,15 @@ function(gp_resolved_file_type original_file file exepath dirs type_var)
|
||||||
get_filename_component(path "${lower}" PATH)
|
get_filename_component(path "${lower}" PATH)
|
||||||
if("${original_path}" STREQUAL "${path}")
|
if("${original_path}" STREQUAL "${path}")
|
||||||
set(is_local 1)
|
set(is_local 1)
|
||||||
|
else()
|
||||||
|
string(LENGTH "${original_path}/" original_length)
|
||||||
|
string(LENGTH "${lower}" path_length)
|
||||||
|
if(${path_length} GREATER ${original_length})
|
||||||
|
string(SUBSTRING "${lower}" 0 ${original_length} path)
|
||||||
|
if("${original_path}/" STREQUAL "${path}")
|
||||||
|
set(is_embedded 1)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -82,3 +82,52 @@ add_custom_target(testbundleutils2_test ALL
|
||||||
DEPENDS testbundleutils1 module2
|
DEPENDS testbundleutils1 module2
|
||||||
)
|
)
|
||||||
add_dependencies(testbundleutils2_test testbundleutils2)
|
add_dependencies(testbundleutils2_test testbundleutils2)
|
||||||
|
|
||||||
|
|
||||||
|
if(APPLE AND NOT CMAKE_SYSTEM_VERSION VERSION_LESS 9.0)
|
||||||
|
###### Test a Bundle application using dependencies
|
||||||
|
###### and @rpaths on Mac OS X 10.5 or greater
|
||||||
|
|
||||||
|
# a shared library
|
||||||
|
add_library(shared-3 SHARED shared.cpp shared.h)
|
||||||
|
|
||||||
|
# another shared library
|
||||||
|
add_library(shared2-3 SHARED shared2.cpp shared2.h)
|
||||||
|
|
||||||
|
# a framework library
|
||||||
|
add_library(framework-3 SHARED framework.cpp framework.h)
|
||||||
|
set_target_properties(framework-3 PROPERTIES FRAMEWORK 1)
|
||||||
|
|
||||||
|
# build dependencies with @rpath install name
|
||||||
|
set_target_properties(shared-3 shared2-3 framework-3 PROPERTIES
|
||||||
|
INSTALL_NAME_DIR "@rpath"
|
||||||
|
BUILD_WITH_INSTALL_RPATH 1)
|
||||||
|
|
||||||
|
# a loadable module (depends on shared2)
|
||||||
|
# testbundleutils1 will load this at runtime
|
||||||
|
add_library(module3 MODULE module.cpp module.h)
|
||||||
|
set_target_properties(module3 PROPERTIES PREFIX "" LINK_FLAGS "-Wl,-rpath,@loader_path/")
|
||||||
|
get_target_property(module_loc module3 LOCATION)
|
||||||
|
target_link_libraries(module3 shared2-3)
|
||||||
|
|
||||||
|
# a non-bundle application
|
||||||
|
add_executable(testbundleutils3 testbundleutils3.cpp)
|
||||||
|
target_link_libraries(testbundleutils3 shared-3 framework-3 ${CMAKE_DL_LIBS})
|
||||||
|
get_target_property(loc testbundleutils3 LOCATION)
|
||||||
|
|
||||||
|
set_target_properties(testbundleutils3 module3 PROPERTIES
|
||||||
|
LINK_FLAGS "-Wl,-rpath,@loader_path/")
|
||||||
|
|
||||||
|
# add custom target to install and test the app
|
||||||
|
add_custom_target(testbundleutils3_test ALL
|
||||||
|
COMMAND ${CMAKE_COMMAND}
|
||||||
|
"-DINPUT=${loc}"
|
||||||
|
"-DMODULE=${module_loc}"
|
||||||
|
"-DINPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
|
||||||
|
"-DOUTPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/testdir3"
|
||||||
|
-P "${CMAKE_CURRENT_SOURCE_DIR}/bundleutils.cmake"
|
||||||
|
DEPENDS testbundleutils3 module3
|
||||||
|
)
|
||||||
|
|
||||||
|
add_dependencies(testbundleutils3_test testbundleutils3)
|
||||||
|
endif()
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
|
||||||
|
#include "framework.h"
|
||||||
|
#include "shared.h"
|
||||||
|
#include "stdio.h"
|
||||||
|
|
||||||
|
#if defined(WIN32)
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
|
#include "dlfcn.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int main(int, char**)
|
||||||
|
{
|
||||||
|
framework();
|
||||||
|
shared();
|
||||||
|
|
||||||
|
#if defined(WIN32)
|
||||||
|
HANDLE lib = LoadLibraryA("module3.dll");
|
||||||
|
if(!lib)
|
||||||
|
{
|
||||||
|
printf("Failed to open module3\n");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void* lib = dlopen("module3.so", RTLD_LAZY);
|
||||||
|
if(!lib)
|
||||||
|
{
|
||||||
|
printf("Failed to open module3\n%s\n", dlerror());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
return lib == 0 ? 1 : 0;
|
||||||
|
}
|
Loading…
Reference in New Issue