BundleUtilities: Add rpath to loadable modules in test.

This commit is contained in:
Clinton Stimpson 2011-06-02 09:08:49 -06:00
parent 8064044c94
commit e17135e882
3 changed files with 70 additions and 25 deletions

View File

@ -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)

View File

@ -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

View File

@ -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;
}