summaryrefslogtreecommitdiff
path: root/Tests/BundleUtilities/CMakeLists.txt
blob: 8f24afe9abea21ec2b2ef53df9bedad89c2adfe5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
cmake_minimum_required(VERSION 2.8)
project(BundleUtilities)

###### the various types of dependencies we can have

# a shared library
add_library(shared SHARED shared.cpp shared.h)

# another shared library
add_library(shared2 SHARED shared2.cpp shared2.h)


# a framework library
add_library(framework SHARED framework.cpp framework.h)
# TODO: fix problems with local frameworks without rpaths
#set_target_properties(framework PROPERTIES FRAMEWORK 1)

# make sure rpaths are not helping BundleUtilities or the executables
set_target_properties(shared shared2 framework PROPERTIES
                      SKIP_BUILD_RPATH 1)


######  test a Bundle application using dependencies

# a loadable module (depends on shared2)
# 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})
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
  COMMAND ${CMAKE_COMMAND}
  "-DINPUT=${loc}"
  "-DMODULE=${module_loc}"
  "-DINPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
  "-DOUTPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/testdir1"
  -P "${CMAKE_CURRENT_SOURCE_DIR}/bundleutils.cmake"
  DEPENDS testbundleutils1 module1
  )

add_dependencies(testbundleutils1_test testbundleutils1)



######  test a non-Bundle application using dependencies

# a loadable module (depends on shared2)
# 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})
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
  COMMAND ${CMAKE_COMMAND}
  "-DINPUT=${loc}"
  "-DMODULE=${module_loc}"
  "-DINPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}"
  "-DOUTPUTDIR=${CMAKE_CURRENT_BINARY_DIR}/testdir2"
  -P "${CMAKE_CURRENT_SOURCE_DIR}/bundleutils.cmake"
  DEPENDS testbundleutils1 module2
  )
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()