cmake_minimum_required (VERSION 2.6) PROJECT(BundleTest) SET(MACOSX_BUNDLE_INFO_STRING "bundle_info_string") SET(CMAKE_MacOSX_Content_COMPILE_OBJECT "\"${CMAKE_COMMAND}\" -E copy_if_different ") ADD_CUSTOM_COMMAND( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/randomResourceFile.plist" COMMAND /bin/cp ARGS "${CMAKE_CURRENT_SOURCE_DIR}/randomResourceFile.plist.in" "${CMAKE_CURRENT_BINARY_DIR}/randomResourceFile.plist") SET_SOURCE_FILES_PROPERTIES( "${CMAKE_CURRENT_BINARY_DIR}/randomResourceFile.plist" PROPERTIES MACOSX_PACKAGE_LOCATION Resources ) SET_SOURCE_FILES_PROPERTIES( SomeRandomFile.txt "${BundleTest_SOURCE_DIR}/../../ChangeLog.txt" PROPERTIES MACOSX_PACKAGE_LOCATION MacOS ) SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/foobar") # Test building a bundle linking to a shared library where the # shared library links to CoreFoundation, but the executable does not # explicitly link to CoreFoundation, but the executable does *depend* # on CoreFoundation. 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) TARGET_LINK_LIBRARIES(BundleTestLib "-framework CoreFoundation") ADD_EXECUTABLE(BundleTest MACOSX_BUNDLE BundleTest.cxx SomeRandomFile.txt "${BundleTest_SOURCE_DIR}/../../ChangeLog.txt" "${CMAKE_CURRENT_BINARY_DIR}/randomResourceFile.plist" ) TARGET_LINK_LIBRARIES(BundleTest BundleTestLib) # # DO NOT: TARGET_LINK_LIBRARIES(BundleTest "-framework CoreFoundation") # (see above comments about CoreFoundation) # # Test bundle installation. #INSTALL(TARGETS BundleTestLib DESTINATION Applications/BundleTestExe.app/Contents/Plugins) INSTALL(TARGETS BundleTestLib DESTINATION Applications/SecondBundleExe.app/Contents/Plugins) INSTALL(TARGETS BundleTest DESTINATION Applications) # Test whether bundles respect the output name. Since the library is # installed into a location that uses this output name this will fail if the # bundle does not respect the name. Also the executable will not be found by # the test driver if this does not work. SET_TARGET_PROPERTIES(BundleTest PROPERTIES OUTPUT_NAME BundleTestExe) # Test executable versioning if it is supported. IF(NOT XCODE) SET_TARGET_PROPERTIES(BundleTest PROPERTIES VERSION 1) ENDIF(NOT XCODE) # Make sure the executable can find its installed library. SET_TARGET_PROPERTIES(BundleTestLib PROPERTIES INSTALL_NAME_DIR "@executable_path/../Plugins") INCLUDE(CPack) # test the framework find stuff IF(EXISTS /usr/lib/libtcl.dylib AND EXISTS /System/Library/Frameworks/Tcl.framework) SET(TCL NOTFOUND) FIND_LIBRARY(TCL tcl) MESSAGE("frame: ${TCL}") IF(NOT "${TCL}" MATCHES .framework) MESSAGE(FATAL_ERROR "Could not find tcl framework, found ${TCL}") ENDIF(NOT "${TCL}" MATCHES .framework) SET(TCL NOTFOUND) SET(CMAKE_FIND_FRAMEWORK LAST) FIND_LIBRARY(TCL tcl) IF("${TCL}" MATCHES .framework) MESSAGE(FATAL_ERROR "Found framework and should have found dylib ${TCL}") ENDIF("${TCL}" MATCHES .framework) SET(TCL NOTFOUND) SET(CMAKE_FIND_FRAMEWORK NEVER) FIND_LIBRARY(TCL tcl) IF("${TCL}" MATCHES .framework) MESSAGE(FATAL_ERROR "Found framework and should have found dylib ${TCL}") ENDIF("${TCL}" MATCHES .framework) MESSAGE("not frame: ${TCL}") SET(TCL NOTFOUND) SET(CMAKE_FIND_FRAMEWORK FIRST) FIND_LIBRARY(TCL tcl) IF(NOT "${TCL}" MATCHES .framework) MESSAGE(FATAL_ERROR "Could not find tcl framework, found ${TCL}") ENDIF(NOT "${TCL}" MATCHES .framework) MESSAGE("frame: ${TCL}") ENDIF(EXISTS /usr/lib/libtcl.dylib AND EXISTS /System/Library/Frameworks/Tcl.framework) SUBDIRS(BundleSubDir)