Instructions to reproduce: Pull the sample Qt Project from the CMake wiki
http://www.cmake.org/Wiki/images/2/25/QtTest-Package-Example.zip Unzip it cd into it. Replace the CMakeLists.txt file with the one attached to this email. run the following: git clone git://scm.bluequartz.net/support-libraries/cmp.git configure the project. Note how the plist is NOT filled in correct. Edit the CMakeLists.txt file at line 137 to make cmake go into the "if()" statement. Reconfigure. Note how the plist has all the "correct" values now. The functions and macros you want to look at are in QtTest/cmp/cmpCMakeMacros.cmake. ___________________________________________________________ Mike Jackson www.bluequartz.net
#-------------------------------------------------------------------------------- # This is an example project that uses CMake as a build system to compile a Qt4.x # based project. # To have CMake pick a Qt installation of your choice that won't be found # automatically, set the CMAKE_PREFIX_PATH environment variable. # For example: "export CMAKE_PREFIX_PATH=/usr/local/trolltech/qt4.3.5" # PROJECT (QtTest) cmake_minimum_required(VERSION 2.8) # ---------- Setup output Directories ------------------------- SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin CACHE PATH "Single Directory for all Libraries" ) # --------- Setup the Executable output Directory ------------- SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin CACHE PATH "Single Directory for all Executables." ) # --------- Setup the Executable output Directory ------------- SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin CACHE PATH "Single Directory for all static libraries." ) SET (PROJECT_CODE_DIR ${PROJECT_SOURCE_DIR}/.) SET (PROJECT_RESOURCES_DIR ${PROJECT_SOURCE_DIR}/.) SET (PROJECT_PREFIX "xxx" CACHE STRING "The Prefix to be used for Preprocessor definitions") SET (EXE_DEBUG_EXTENSION "_debug") SET (PROJECT_INSTALL_HEADERS "0") SET (PROJECT_INSTALL_EXECUTABLES "1") #------------------------------------------------------------------------------- # Include the cmp project to perform all the basic configuration tests for the # project. #------------------------------------------------------------------------------- #set (CMP_HEADER_DIR ${AIMRepresentation_BINARY_DIR}/MXA) set (CMP_CONFIGURATION_FILE_NAME "CMPConfiguration.h") set (CMP_TYPES_FILE_NAME "CMPTypes.h") set (CMP_VERSION_HEADER_FILE_NAME "CMPVersion.h") set (CMP_EXTRA_CONFIGURATION_FILE "CMPConfiguration.h") set (CMP_PROJECT_NAMESPACE "CMP") set (CMP_PROJECT_NAME "QtTest") set (CMP_ENABLE_PLUGINS "0") set (CMP_LIB_SEARCH_DIRS "") INCLUDE (${PROJECT_RESOURCES_DIR}/cmp/cmpProject.cmake) #-------------------------------------------------------------------------------- # This is the list of source files that need to be compiled #-------------------------------------------------------------------------------- SET( QTTEST_SRCS main.cpp TestForm.cpp ) #-------------------------------------------------------------------------------- # another list, this time it includes all header files that should be treated with moc #-------------------------------------------------------------------------------- SET( QTTEST_MOC_HDRS TestForm.h ) #-------------------------------------------------------------------------------- # .ui files that are used in the project #-------------------------------------------------------------------------------- SET( QTTEST_UIS TestForm.ui ) #-------------------------------------------------------------------------------- # and finally any resource files. I do not have any in this example #-------------------------------------------------------------------------------- SET( QTTEST_RCS ) #-------------------------------------------------------------------------------- # This sets the windows build that will need the special winmain@16 call. Qt provides # this for us in the qtmain.lib file. Using this cmake code will ensure we have it # linked into our build. Not needed on Unix/OS X/Linux which is why we have the # IF(WIN32) conditional. IF (WIN32) SET (QT_USE_QTMAIN TRUE) ENDIF (WIN32) #-------------------------------------------------------------------------------- # this command finds Qt4 libraries and sets all required variables # note that it's Qt4, not QT4 or qt4 FIND_PACKAGE( Qt4 REQUIRED ) #-------------------------------------------------------------------------------- # QT_USE_FILE is a variable defined by FIND_PACKAGE( Qt4 ) that contains a path to # a CMake script that sets up this directory for building with Qt4 INCLUDE( ${QT_USE_FILE} ) #-------------------------------------------------------------------------------- # this command will generate rules that will run rcc on all files from QTTEST_RCS # in result QTTEST_GEN_RCS variable will contain paths to files produced by rcc QT4_ADD_RESOURCES( QTTEST_GEN_RCS ${QTTEST_RCS} ) #-------------------------------------------------------------------------------- # this will run uic on .ui files: QT4_WRAP_UI( QTTEST_GEN_UIS ${QTTEST_UIS} ) #-------------------------------------------------------------------------------- # and finally this will run moc on the headers QT4_WRAP_CPP( QTTEST_GEN_MOC_HDRS ${QTTEST_MOC_HDRS} ) #-------------------------------------------------------------------------------- # we need this to be able to include headers produced by uic in our code # CMAKE_BINARY_DIR holds a path to the build directory, while INCLUDE_DIRECTORIES() # works just like INCLUDEPATH from qmake INCLUDE_DIRECTORIES ( # Look in the cmake build directory (some generated headers could be there) ${CMAKE_CURRENT_BINARY_DIR} ) #-------------------------------------------------------------------------------- # For Apple set the icns file containing icons IF(APPLE) # set how it shows up in the Info.plist file SET(MACOSX_BUNDLE_ICON_FILE QtTest.icns) # set where in the bundle to put the icns file SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/QtTest.icns PROPERTIES MACOSX_PACKAGE_LOCATION Resources) # include the icns file in the target SET(QTTEST_SRCS ${QTTEST_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/QtTest.icns) if (0) ConfigureMacOSXBundlePlist(${PROJECT_NAME} ${EXE_DEBUG_EXTENSION} ${MACOSX_BUNDLE_ICON_FILE} "1.0.1" ) endif() ENDIF(APPLE) # file(READ ${PROJECT_BINARY_DIR}/Qt_Plugins.txt QT_PLUGINS) BuildQtAppBundle( TARGET ${PROJECT_NAME} SOURCES ${QTTEST_SRCS} ${QTTEST_GEN_MOC_HDRS} ${QTTEST_GEN_UIS} ${QTTEST_GEN_RCS} DEBUG_EXTENSION ${EXE_DEBUG_EXTENSION} ICON_FILE ${MACOSX_BUNDLE_ICON_FILE} VERSION_MAJOR ${CMP_VER_MAJOR} VERSION_MINOR ${CMP_VER_MINOR} VERSION_PATCH ${CMP_VER_PATCH} BINARY_DIR ${${PROJECT_NAME}_BINARY_DIR} LINK_LIBRARIES ${QT_LIBRARIES} LIB_SEARCH_DIRS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} # QT_PLUGINS ${QT_PLUGINS} # OTHER_PLUGINS ${OTHER_PLUGINS} COMPONENT Applications INSTALL_DEST "." ) #-------------------------------------------------------------------------------- # CMake's way of creating an executable #ADD_EXECUTABLE( QtTest MACOSX_BUNDLE WIN32 # ${QTTEST_SRCS} # ${QTTEST_GEN_MOC_HDRS} # ${QTTEST_GEN_UIS} # ${QTTEST_GEN_RCS} #) #-------------------------------------------------------------------------------- # Tell CMake which libraries we need to link our executable against. #TARGET_LINK_LIBRARIES ( QtTest ${QT_LIBRARIES} ) #-------------------------------------------------------------------------------- # Now the installation stuff below #-------------------------------------------------------------------------------- SET(plugin_dest_dir bin) SET(qtconf_dest_dir bin) SET(APPS "\${CMAKE_INSTALL_PREFIX}/bin/QtTest") IF(APPLE) SET(plugin_dest_dir QtTest.app/Contents/MacOS) SET(qtconf_dest_dir QtTest.app/Contents/Resources) SET(APPS "\${CMAKE_INSTALL_PREFIX}/QtTest.app") ENDIF(APPLE) IF(WIN32) SET(APPS "\${CMAKE_INSTALL_PREFIX}/bin/QtTest.exe") ENDIF(WIN32) #-------------------------------------------------------------------------------- # Install the QtTest application, on Apple, the bundle is at the root of the # install tree, and on other platforms it'll go into the bin directory. INSTALL(TARGETS QtTest BUNDLE DESTINATION . COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime ) #-------------------------------------------------------------------------------- # Install needed Qt plugins by copying directories from the qt installation # One can cull what gets copied by using 'REGEX "..." EXCLUDE' INSTALL(DIRECTORY "${QT_PLUGINS_DIR}/imageformats" DESTINATION ${plugin_dest_dir}/plugins COMPONENT Runtime) #-------------------------------------------------------------------------------- # install a qt.conf file # this inserts some cmake code into the install script to write the file INSTALL(CODE " file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${qtconf_dest_dir}/qt.conf\" \"\") " COMPONENT Runtime) #-------------------------------------------------------------------------------- # Use BundleUtilities to get all other dependencies for the application to work. # It takes a bundle or executable along with possible plugins and inspects it # for dependencies. If they are not system dependencies, they are copied. # directories to look for dependencies SET(DIRS ${QT_LIBRARY_DIRS}) # Now the work of copying dependencies into the bundle/package # The quotes are escaped and variables to use at install time have their $ escaped # An alternative is the do a configure_file() on a script and use install(SCRIPT ...). # Note that the image plugins depend on QtSvg and QtXml, and it got those copied # over. INSTALL(CODE " file(GLOB_RECURSE QTPLUGINS \"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\") include(BundleUtilities) fixup_bundle(\"${APPS}\" \"\${QTPLUGINS}\" \"${DIRS}\") " COMPONENT Runtime) # To Create a package, one can run "cpack -G DragNDrop CPackConfig.cmake" on Mac OS X # where CPackConfig.cmake is created by including CPack # And then there's ways to customize this as well set(CPACK_BINARY_DRAGNDROP ON) include(CPack)
On Feb 10, 2011, at 2:39 PM, David Cole wrote: > Can you share your source code so I can repro the issue here? > > Thx, > David > > > On Thu, Feb 10, 2011 at 2:25 PM, Michael Jackson > <mike.jack...@bluequartz.net> wrote: > > On Feb 10, 2011, at 2:04 PM, David Cole wrote: > > > On Thu, Feb 10, 2011 at 1:51 PM, Bill Hoffman <bill.hoff...@kitware.com> > > wrote: > > On 2/10/2011 1:27 PM, Michael Jackson wrote: > > Bump? > > > > Did you try cmake --trace to see when it was configure... > > > > > > -- > > Mike Jackson<www.bluequartz.net> > > > > On Feb 8, 2011, at 5:36 PM, Michael Jackson wrote: > > > > At what point is the MacOSXBundleInfo.plist.in configured? I am setting all > > the relevant variables but they are not getting inserted into the plist. > > > > Here is some debug output from a CMake run of my project: > > > > -- MACOSX_BUNDLE_INFO_STRING: StatsGenerator_debug Version 2011.02.08, > > Copyright 2009 BlueQuartz Software. > > -- MACOSX_BUNDLE_ICON_FILE: StatsGenerator.icns > > -- MACOSX_BUNDLE_GUI_IDENTIFIER: StatsGenerator_debug > > -- MACOSX_BUNDLE_LONG_VERSION_STRING: StatsGenerator_debug Version > > 2011.02.08 > > -- MACOSX_BUNDLE_BUNDLE_NAME: StatsGenerator_debug > > -- MACOSX_BUNDLE_SHORT_VERSION_STRING: 2011.02.08 > > -- MACOSX_BUNDLE_BUNDLE_VERSION: 2011.02.08 > > -- MACOSX_BUNDLE_COPYRIGHT: Copyright 2011, BlueQuartz Software. All Rights > > Reserved. > > > > > > I set all those variables before and after the add_executable call but most > > of the values does not show up in the plist file. Probably something simple > > I am missing. > > > > Thanks. > > ___________________________________________________________ > > Mike Jackson www.bluequartz.net > > Principal Software Engineer mike.jack...@bluequartz.net > > BlueQuartz Software Dayton, Ohio > > > > > > Does your add_executable call have the MACOSX_BUNDLE flag in it? > > > > You should definitely set those variables before calling add_executable, > > and they should definitely show up if you have MACOSX_BUNDLE turned on. > > > > What generator are you using? Xcode or Unix Makefiles or something else? > > > > > > Using Makefiles generator. Correctly set MACOSX_BUNDLE in the > add_executable() call. This is on OS X 10.6.6 with CMake 2.8.3 (self compiled) > > I tried the --trace but I don't really know what I should be looking for. > There is a lot of output to look through. > > Tried from a clean build directory and still has the same thing. > > Mike Jackson > > > > _______________________________________________ > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Follow this link to subscribe/unsubscribe: > http://www.cmake.org/mailman/listinfo/cmake >
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake