BundleUtilities: Add rpath to loadable modules in test.
This commit is contained in:
parent
8064044c94
commit
e17135e882
|
@ -9,12 +9,6 @@ add_library(shared SHARED shared.cpp shared.h)
|
||||||
# another shared library
|
# another shared library
|
||||||
add_library(shared2 SHARED shared2.cpp shared2.h)
|
add_library(shared2 SHARED shared2.cpp shared2.h)
|
||||||
|
|
||||||
# a loadable module (depends on shared2)
|
|
||||||
# test app will load this at runtime
|
|
||||||
add_library(module MODULE module.cpp module.h)
|
|
||||||
set_target_properties(module PROPERTIES PREFIX "")
|
|
||||||
get_target_property(module_loc module LOCATION)
|
|
||||||
target_link_libraries(module shared2)
|
|
||||||
|
|
||||||
# a framework library
|
# a framework library
|
||||||
add_library(framework SHARED framework.cpp framework.h)
|
add_library(framework SHARED framework.cpp framework.h)
|
||||||
|
@ -22,28 +16,37 @@ add_library(framework SHARED framework.cpp framework.h)
|
||||||
#set_target_properties(framework PROPERTIES FRAMEWORK 1)
|
#set_target_properties(framework PROPERTIES FRAMEWORK 1)
|
||||||
|
|
||||||
# make sure rpaths are not helping BundleUtilities or the executables
|
# make sure rpaths are not helping BundleUtilities or the executables
|
||||||
set_target_properties(shared shared2 module framework PROPERTIES
|
set_target_properties(shared shared2 framework PROPERTIES
|
||||||
SKIP_BUILD_RPATH 1)
|
SKIP_BUILD_RPATH 1)
|
||||||
|
|
||||||
|
|
||||||
###### test a Bundle application using dependencies
|
###### test a Bundle application using dependencies
|
||||||
|
|
||||||
set(TESTBUNDLEDIR "${CMAKE_CURRENT_BINARY_DIR}/testdir1")
|
# a loadable module (depends on shared2)
|
||||||
add_executable(testbundleutils1 MACOSX_BUNDLE testbundleutils.cpp)
|
# testbundleutils1 will load this at runtime
|
||||||
|
add_library(module1 MODULE module.cpp module.h)
|
||||||
|
set_target_properties(module1 PROPERTIES PREFIX "")
|
||||||
|
get_target_property(module_loc module1 LOCATION)
|
||||||
|
target_link_libraries(module1 shared2)
|
||||||
|
|
||||||
|
# a bundle application
|
||||||
|
add_executable(testbundleutils1 MACOSX_BUNDLE testbundleutils1.cpp)
|
||||||
target_link_libraries(testbundleutils1 shared framework ${CMAKE_DL_LIBS})
|
target_link_libraries(testbundleutils1 shared framework ${CMAKE_DL_LIBS})
|
||||||
set_target_properties(testbundleutils1 PROPERTIES
|
|
||||||
INSTALL_RPATH "${TESTBUNDLEDIR}"
|
|
||||||
BUILD_WITH_INSTALL_RPATH 1)
|
|
||||||
get_target_property(loc testbundleutils1 LOCATION)
|
get_target_property(loc testbundleutils1 LOCATION)
|
||||||
|
|
||||||
|
set_target_properties(testbundleutils1 module1 PROPERTIES
|
||||||
|
INSTALL_RPATH "${CMAKE_CURRENT_BINARY_DIR}/testdir1"
|
||||||
|
BUILD_WITH_INSTALL_RPATH 1)
|
||||||
|
|
||||||
|
# add custom target to install and test the app
|
||||||
add_custom_target(testbundleutils1_test ALL
|
add_custom_target(testbundleutils1_test ALL
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
"-DINPUT=${loc}"
|
"-DINPUT=${loc}"
|
||||||
"-DMODULE=${module_loc}"
|
"-DMODULE=${module_loc}"
|
||||||
"-DINPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
|
"-DINPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
|
||||||
"-DOUTPUTDIR=${TESTBUNDLEDIR}"
|
"-DOUTPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/testdir1"
|
||||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/bundleutils.cmake"
|
-P "${CMAKE_CURRENT_SOURCE_DIR}/bundleutils.cmake"
|
||||||
DEPENDS testbundleutils1 module
|
DEPENDS testbundleutils1 module1
|
||||||
)
|
)
|
||||||
|
|
||||||
add_dependencies(testbundleutils1_test testbundleutils1)
|
add_dependencies(testbundleutils1_test testbundleutils1)
|
||||||
|
@ -52,21 +55,30 @@ add_dependencies(testbundleutils1_test testbundleutils1)
|
||||||
|
|
||||||
###### test a non-Bundle application using dependencies
|
###### test a non-Bundle application using dependencies
|
||||||
|
|
||||||
set(TESTBUNDLEDIR "${CMAKE_CURRENT_BINARY_DIR}/testdir2")
|
# a loadable module (depends on shared2)
|
||||||
add_executable(testbundleutils2 testbundleutils.cpp)
|
# testbundleutils2 will load this at runtime
|
||||||
|
add_library(module2 MODULE module.cpp module.h)
|
||||||
|
set_target_properties(module2 PROPERTIES PREFIX "")
|
||||||
|
get_target_property(module_loc module2 LOCATION)
|
||||||
|
target_link_libraries(module2 shared2)
|
||||||
|
|
||||||
|
# a non-bundle application
|
||||||
|
add_executable(testbundleutils2 testbundleutils2.cpp)
|
||||||
target_link_libraries(testbundleutils2 shared framework ${CMAKE_DL_LIBS})
|
target_link_libraries(testbundleutils2 shared framework ${CMAKE_DL_LIBS})
|
||||||
set_target_properties(testbundleutils2 PROPERTIES
|
|
||||||
INSTALL_RPATH "${TESTBUNDLEDIR}"
|
|
||||||
BUILD_WITH_INSTALL_RPATH 1)
|
|
||||||
get_target_property(loc testbundleutils2 LOCATION)
|
get_target_property(loc testbundleutils2 LOCATION)
|
||||||
|
|
||||||
|
set_target_properties(testbundleutils2 module2 PROPERTIES
|
||||||
|
INSTALL_RPATH "${CMAKE_CURRENT_BINARY_DIR}/testdir2"
|
||||||
|
BUILD_WITH_INSTALL_RPATH 1)
|
||||||
|
|
||||||
|
# add custom target to install and test the app
|
||||||
add_custom_target(testbundleutils2_test ALL
|
add_custom_target(testbundleutils2_test ALL
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
"-DINPUT=${loc}"
|
"-DINPUT=${loc}"
|
||||||
"-DMODULE=${module_loc}"
|
"-DMODULE=${module_loc}"
|
||||||
"-DINPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
|
"-DINPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
|
||||||
"-DOUTPUTDIR=${TESTBUNDLEDIR}"
|
"-DOUTPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/testdir2"
|
||||||
-P "${CMAKE_CURRENT_SOURCE_DIR}/bundleutils.cmake"
|
-P "${CMAKE_CURRENT_SOURCE_DIR}/bundleutils.cmake"
|
||||||
DEPENDS testbundleutils1 module
|
DEPENDS testbundleutils1 module2
|
||||||
)
|
)
|
||||||
add_dependencies(testbundleutils2_test testbundleutils2)
|
add_dependencies(testbundleutils2_test testbundleutils2)
|
||||||
|
|
|
@ -15,16 +15,16 @@ int main(int, char**)
|
||||||
shared();
|
shared();
|
||||||
|
|
||||||
#if defined(WIN32)
|
#if defined(WIN32)
|
||||||
HANDLE lib = LoadLibraryA("module.dll");
|
HANDLE lib = LoadLibraryA("module1.dll");
|
||||||
if(!lib)
|
if(!lib)
|
||||||
{
|
{
|
||||||
printf("Failed to open module\n");
|
printf("Failed to open module1\n");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void* lib = dlopen("module.so", RTLD_LAZY);
|
void* lib = dlopen("module1.so", RTLD_LAZY);
|
||||||
if(!lib)
|
if(!lib)
|
||||||
{
|
{
|
||||||
printf("Failed to open module\n%s\n", dlerror());
|
printf("Failed to open module1\n%s\n", dlerror());
|
||||||
}
|
}
|
||||||
#endif
|
#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("module2.dll");
|
||||||
|
if(!lib)
|
||||||
|
{
|
||||||
|
printf("Failed to open module2\n");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void* lib = dlopen("module2.so", RTLD_LAZY);
|
||||||
|
if(!lib)
|
||||||
|
{
|
||||||
|
printf("Failed to open module2\n%s\n", dlerror());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
return lib == 0 ? 1 : 0;
|
||||||
|
}
|
Loading…
Reference in New Issue