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

Reply via email to