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:
David Cole 2008-09-02 11:07:04 -04:00
parent 698b8044a6
commit a54e97cf94
3 changed files with 31 additions and 2 deletions

View File

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

View File

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

View File

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