ENH: Add indirect dependency to Carbon and call a Carbon function from executable. This will allow detecting broken dependency chaining for '-framework blah' style lib dependencies.
This commit is contained in:
parent
698b8044a6
commit
a54e97cf94
|
@ -3,6 +3,8 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
|
||||||
int fileExists(char* filename)
|
int fileExists(char* filename)
|
||||||
{
|
{
|
||||||
#ifndef R_OK
|
#ifndef R_OK
|
||||||
|
@ -49,6 +51,11 @@ int findBundleFile(char* exec, const char* file)
|
||||||
|
|
||||||
int foo(char *exec)
|
int foo(char *exec)
|
||||||
{
|
{
|
||||||
|
// Call a "Carbon" function...
|
||||||
|
//
|
||||||
|
CFBundleRef br = CFBundleGetMainBundle();
|
||||||
|
(void) br;
|
||||||
|
|
||||||
int res1 = findBundleFile(exec, "Resources/randomResourceFile.plist");
|
int res1 = findBundleFile(exec, "Resources/randomResourceFile.plist");
|
||||||
int res2 = findBundleFile(exec, "MacOS/SomeRandomFile.txt");
|
int res2 = findBundleFile(exec, "MacOS/SomeRandomFile.txt");
|
||||||
int res3 = findBundleFile(exec, "MacOS/ChangeLog.txt");
|
int res3 = findBundleFile(exec, "MacOS/ChangeLog.txt");
|
||||||
|
|
|
@ -1,9 +1,20 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <Carbon/Carbon.h>
|
||||||
|
|
||||||
extern int foo(char* exec);
|
extern int foo(char* exec);
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
printf("Started with: %d arguments\n", argc);
|
printf("Started with: %d arguments\n", argc);
|
||||||
|
|
||||||
|
// Call a "Carbon" function... but pull in the link dependency on "-framework
|
||||||
|
// Carbon" via CMake's dependency chaining mechanism. This code exists to
|
||||||
|
// verify that the chaining mechanism works with "-framework blah" style
|
||||||
|
// link dependencies.
|
||||||
|
//
|
||||||
|
CFBundleRef br = CFBundleGetMainBundle();
|
||||||
|
(void) br;
|
||||||
|
|
||||||
return foo(argv[0]);
|
return foo(argv[0]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,16 @@ SET_SOURCE_FILES_PROPERTIES(
|
||||||
|
|
||||||
SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/foobar")
|
SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/foobar")
|
||||||
|
|
||||||
# Test building a bundle linking to a shared library.
|
# Test building a bundle linking to a shared library where the
|
||||||
|
# shared library links to Carbon, but the executable does not
|
||||||
|
# explicitly link to Carbon, but the executable does *depend*
|
||||||
|
# on Carbon. There should be a link failure for the executable
|
||||||
|
# if CMake's dependency chaining for libraries with "-framework
|
||||||
|
# blah" style dependencies gets broken...
|
||||||
|
#
|
||||||
ADD_LIBRARY(BundleTestLib SHARED BundleLib.cxx)
|
ADD_LIBRARY(BundleTestLib SHARED BundleLib.cxx)
|
||||||
|
TARGET_LINK_LIBRARIES(BundleTestLib "-framework Carbon")
|
||||||
|
|
||||||
ADD_EXECUTABLE(BundleTest
|
ADD_EXECUTABLE(BundleTest
|
||||||
MACOSX_BUNDLE
|
MACOSX_BUNDLE
|
||||||
BundleTest.cxx
|
BundleTest.cxx
|
||||||
|
@ -33,8 +41,11 @@ ADD_EXECUTABLE(BundleTest
|
||||||
"${BundleTest_SOURCE_DIR}/../../ChangeLog.txt"
|
"${BundleTest_SOURCE_DIR}/../../ChangeLog.txt"
|
||||||
"${CMAKE_CURRENT_BINARY_DIR}/randomResourceFile.plist"
|
"${CMAKE_CURRENT_BINARY_DIR}/randomResourceFile.plist"
|
||||||
)
|
)
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES(BundleTest BundleTestLib)
|
TARGET_LINK_LIBRARIES(BundleTest BundleTestLib)
|
||||||
|
#
|
||||||
|
# DO NOT: TARGET_LINK_LIBRARIES(BundleTest "-framework Carbon")
|
||||||
|
# (see above comments about Carbon)
|
||||||
|
#
|
||||||
|
|
||||||
# Test bundle installation.
|
# Test bundle installation.
|
||||||
#INSTALL(TARGETS BundleTestLib DESTINATION Applications/BundleTestExe.app/Contents/Plugins)
|
#INSTALL(TARGETS BundleTestLib DESTINATION Applications/BundleTestExe.app/Contents/Plugins)
|
||||||
|
|
Loading…
Reference in New Issue