It is a pure terminal application, so you are probably right. However, the old 
way to install it was that a user had to first install Fink, then wait a few 
hours for the correct gcc version to be installed with gfortran, then download 
the correct version of the executable. Or he/she could download the specific 
libraries you needed manually and use this install_name_tool to manually relink 
the libraries. In the end it felt quite complicated for many, every user did 
something different, and helping people out when they got stuck was a mess.

Perhaps I should use some of the other packaging types, like tgz or zip. I will 
play around with it. At least now I have something that works and is 
self-contained which was my main goal.

Cheers,
Yngve

On Friday, January 21, 2011 02:16:56 pm Michael Jackson wrote:
> IS your application a GUI application or an terminal application? If it is 
> really a terminal application then you really should NOT be creating an .app 
> bundle but instead just a plain executable.
> ___________________________________________________________
> Mike Jackson                      www.bluequartz.net
> Principal Software Engineer       mike.jack...@bluequartz.net 
> BlueQuartz Software               Dayton, Ohio   
> 
> 
> 
> On Jan 21, 2011, at 5:10 AM, Yngve Inntjore Levinsen wrote:
> 
> > Thank you so much for your tips and help Michael! My stupid mistake as you 
> > can see it below is that I ran the install target command AFTER the 
> > fixup_bundle. Hence the app did not exist in its location when the 
> > fixup_bundle ran, but when I checked afterwards it all looked as one would 
> > expect.
> > 
> > Last question, anyone have some tip on how to set up a terminal application 
> > in an app bundle? Currently I have to suggest to the user to open the 
> > bundle and go to the MacOS folder and click on the binary file there. This 
> > is of course a minor issue, but would be nicer if a click on the app bundle 
> > itself would have the same behaviour... Something I can set in the plist 
> > file perhaps?
> > 
> > Cheers
> > Yngve
> > 
> > On 1/20/11 9:02 PM, Michael Jackson wrote:
> >> There are a lot of different reasons it can fail. I usually end up 
> >> debugging through the fixup_bundle() code and placing lots of 
> >> "message(STATUS ....)" commands in order to try and follow what is going 
> >> on. There are already some through out the cmake code you usually just 
> >> have to set a cmake variable to "1" to get them to print. You can try 
> >> posting the complete output from your "make install" run to try and see 
> >> what is going on.
> >> --
> >> Mike Jackson<www.bluequartz.net>
> >> 
> >> On Jan 20, 2011, at 2:35 PM, Yngve Levinsen wrote:
> >> 
> >>> Well I do have a folder structure, which looks like this:
> >>> $ ls -R madx_dev.app/
> >>> Contents
> >>> 
> >>> madx_dev.app//Contents:
> >>> Info.plist MacOS      Resources
> >>> 
> >>> madx_dev.app//Contents/MacOS:
> >>> madx_dev
> >>> 
> >>> madx_dev.app//Contents/Resources:
> >>> MadX.icns
> >>> 
> >>> But it does not seem that the fixup-command does anything for me with
> >>> the current configuration. Don't get why.
> >>> 
> >>> On 20 January 2011 15:40, Michael Jackson<mike.jack...@bluequartz.net>  
> >>> wrote:
> >>>> If you are creating a command line program then the included 
> >>>> fixup_bundle will not work since it looks for a ".app" folder structure 
> >>>> to fix. Instead you probably want to pass in the path to the executable 
> >>>> located in ${CMAKE_INSTALL_PREFIX}/bin/MyExecutable to BundleUtilities.
> >>>> 
> >>>> Any library located in /usr/lib or System/Library/* will NOT be copied 
> >>>> into your bundle/Folder structure as those are considered system 
> >>>> libraries and available on every OS X system.
> >>>> 
> >>>> --
> >>>> Mike Jackson<www.bluequartz.net>
> >>>> 
> >>>> On Jan 20, 2011, at 6:15 AM, Yngve Inntjore Levinsen wrote:
> >>>> 
> >>>>> Thank you for your kind reply Michael, it got me some bit further and I 
> >>>>> think I understand a bit more. I could not see any examples of the 
> >>>>> usage of the BundleUtilities in CMake, but the example given in the 
> >>>>> Wiki works as expected on my machine.
> >>>>> 
> >>>>> I forgot to add some significant parts of my CMakeLists.txt file. I 
> >>>>> have also made some fixes, so the current parts look like this:
> >>>>> ...
> >>>>> if (APPLE)
> >>>>>  # So that we get the system X11 libraries if they exist:
> >>>>>  set(CMAKE_LIBRARY_PATH /usr/lib/ /usr/X11/lib/ ${CMAKE_LIBRARY_PATH})
> >>>>> endif (APPLE)
> >>>>> ...
> >>>>> if(APPLE)
> >>>>>  SET(MACOSX_BUNDLE_STARTUP_COMMAND madx${BINARY_POSTFIX})
> >>>>>  SET(MACOSX_BUNDLE_ICON_FILE 
> >>>>> "${CMAKE_CURRENT_SOURCE_DIR}/cmakesrc/MadX.icns")
> >>>>>  SET(MACOSX_BUNDLE_LONG_VERSION_STRING "MadX ${BINARY_POSTFIX} version 
> >>>>> ${madX_MAJOR_VERSION}.${madX_MINOR_VERSION}.${madX_PATCH_LEVEL}")
> >>>>>  SET(MACOSX_BUNDLE_BUNDLE_NAME "MadX${BINARY_POSTFIX}")
> >>>>>  SET(MACOSX_BUNDLE_GUI_IDENTIFIER "MadX${BINARY_POSTFIX}")
> >>>>>  # add icns to the .app/Resources with these TWO commands:
> >>>>>  SET(srcfiles ${srcfiles} 
> >>>>> ${CMAKE_CURRENT_SOURCE_DIR}/cmakesrc/MadX.icns)
> >>>>>  
> >>>>> SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/cmakesrc/MadX.icns
> >>>>>  PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
> >>>>> endif(APPLE)
> >>>>> 
> >>>>> add_executable(madx${BINARY_POSTFIX} MACOSX_BUNDLE ${srcfiles})
> >>>>> SET_TARGET_PROPERTIES(madx${BINARY_POSTFIX} PROPERTIES LINKER_LANGUAGE 
> >>>>> Fortran)
> >>>>> ...
> >>>>> FIND_PACKAGE(X11)
> >>>>> IF(X11_FOUND)
> >>>>>   message("Found X11 libraries")
> >>>>>   INCLUDE_DIRECTORIES(${X11_INCLUDE_DIR})
> >>>>>   TARGET_LINK_LIBRARIES(madx${BINARY_POSTFIX} ${X11_X11_LIB})
> >>>>> ENDIF(X11_FOUND)
> >>>>> ...
> >>>>> target_link_libraries(madx${BINARY_POSTFIX} z)
> >>>>> target_link_libraries(madx${BINARY_POSTFIX} pthread)
> >>>>> target_link_libraries(madx${BINARY_POSTFIX} c)
> >>>>> target_link_libraries(madx${BINARY_POSTFIX} gcc_eh)
> >>>>> ...
> >>>>> if(APPLE)
> >>>>>  set(APPS "\${CMAKE_INSTALL_PREFIX}/madx${BINARY_POSTFIX}.app")  # 
> >>>>> paths to executables
> >>>>>  set(DIRS "")
> >>>>>  message("aps: ${APPS}")
> >>>>>  INSTALL(CODE "
> >>>>>    include(BundleUtilities)
> >>>>>    message(\"aps: ${APPS}\")
> >>>>>    fixup_bundle(\"${APPS}\"   \"\"   \"${DIRS}\")
> >>>>>    " COMPONENT Runtime)
> >>>>>  INSTALL(TARGETS madx${BINARY_POSTFIX}
> >>>>>   BUNDLE DESTINATION . COMPONENT Runtime
> >>>>>   RUNTIME DESTINATION bin COMPONENT Runtime
> >>>>>   )
> >>>>> else(APPLE)
> >>>>>  INSTALL(TARGETS madx${BINARY_POSTFIX}
> >>>>>   RUNTIME DESTINATION bin
> >>>>>   LIBRARY DESTINATION lib
> >>>>>   ARCHIVE DESTINATION lib
> >>>>>  )
> >>>>> endif(APPLE)
> >>>>> ...
> >>>>> # so that we can build dragndrop on osx (actually needed?):
> >>>>> set(CPACK_BINARY_DRAGNDROP ON)
> >>>>> include (CPack)
> >>>>> ...
> >>>>> 
> >>>>> 
> >>>>> What I don't understand is why it does not work on my own project. From 
> >>>>> what I can see you can actually replace the fixup_bundle() in the 
> >>>>> example with simply fixup_bundle(\"${APPS}\" \"\" \"\"). This still 
> >>>>> gives the following result when I check the binary with otools:
> >>>>> otool -L 
> >>>>> _CPack_Packages/Darwin/DragNDrop/QtTest-0.1.1-Darwin/QtTest.app/Contents/MacOS/QtTest
> >>>>> _CPack_Packages/Darwin/DragNDrop/QtTest-0.1.1-Darwin/QtTest.app/Contents/MacOS/QtTest:
> >>>>>    @executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui 
> >>>>> (compatibility version 4.7.0, current version 4.7.0)
> >>>>>    @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore 
> >>>>> (compatibility version 4.7.0, current version 4.7.0)
> >>>>>    @executable_path/../MacOS/libstdc++.6.dylib (compatibility version 
> >>>>> 7.0.0, current version 7.13.0)
> >>>>>    @executable_path/../MacOS/libgcc_s.1.dylib (compatibility version 
> >>>>> 1.0.0, current version 1.0.0)
> >>>>>    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
> >>>>> version 125.2.1)
> >>>>> The original shows:
> >>>>> otool -L QtTest.app/Contents/MacOS/QtTest
> >>>>> QtTest.app/Contents/MacOS/QtTest:
> >>>>>    
> >>>>> /opt/local/libexec/qt4-mac-devel/lib/QtGui.framework/Versions/4/QtGui 
> >>>>> (compatibility version 4.7.0, current version 4.7.0)
> >>>>>    
> >>>>> /opt/local/libexec/qt4-mac-devel/lib/QtCore.framework/Versions/4/QtCore 
> >>>>> (compatibility version 4.7.0, current version 4.7.0)
> >>>>>    /opt/local/lib/gcc44/libstdc++.6.dylib (compatibility version 7.0.0, 
> >>>>> current version 7.13.0)
> >>>>>    /opt/local/lib/gcc44/libgcc_s.1.dylib (compatibility version 1.0.0, 
> >>>>> current version 1.0.0)
> >>>>>    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
> >>>>> version 125.2.1)
> >>>>> 
> >>>>> So it seems that it by itself figured out that libraries in /opt/local 
> >>>>> should be relinked and added to the bundle, whereas the /usr/lib 
> >>>>> library can stay as it is. This is great stuff.
> >>>>> 
> >>>>> Doing the same with mine it fails with the "not a valid bundle" error. 
> >>>>> I have the following original output from otools:
> >>>>> otool -L madx_dev.app/Contents/MacOS/madx_dev
> >>>>> madx_dev.app/Contents/MacOS/madx_dev:
> >>>>>    /usr/X11/lib/libX11.6.dylib (compatibility version 9.0.0, current 
> >>>>> version 9.0.0)
> >>>>>    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 
> >>>>> 1.2.3)
> >>>>>    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
> >>>>> version 125.2.1)
> >>>>>    /opt/local/lib/gcc44/libstdc++.6.dylib (compatibility version 7.0.0, 
> >>>>> current version 7.13.0)
> >>>>>    /opt/local/lib/gcc44/libgfortran.3.dylib (compatibility version 
> >>>>> 4.0.0, current version 4.0.0)
> >>>>>    /opt/local/lib/gcc44/libgcc_s.1.dylib (compatibility version 1.0.0, 
> >>>>> current version 1.0.0)
> >>>>> 
> >>>>> In principle the only thing not available in /usr/ is the gfortran 
> >>>>> library (right), but I guess I should expect that it would copy 
> >>>>> everything that is linked to a library residing in /opt/local in the 
> >>>>> same manner as for QtTest. However, the fixup_utilities does not relink 
> >>>>> any of those libraries. What am I doing wrong? Are there anything you 
> >>>>> need to set prior to the install(CODE "... command? I have been trying 
> >>>>> to read through the QtTest example, and I don't see anything that 
> >>>>> should imply so.
> >>>>> 
> >>>>> I have too many questions at once I suppose, but there is still one 
> >>>>> more important: My application is a "terminal app", so it does not come 
> >>>>> with a GUI. Does this mean that the bundle-concept of osx is not fitted 
> >>>>> very well to my application? Can I somehow run a script that will open 
> >>>>> my application in a new Terminal.app window or something of that sort? 
> >>>>> I realized that other applications work so that if you click on the 
> >>>>> Name.app you see the GUI only, whereas if you click on the executable 
> >>>>> Contents/MacOS/Name you first see a terminal that then opens the 
> >>>>> GUI...? Is e.g. Octave bundled, and how is that done?
> >>>>> 
> >>>>> Cheers
> >>>>> Yngve
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> On 1/19/11 4:42 PM, Michael Jackson wrote:
> >>>>>> You will need to look into the "BundleUtilities" functionality, 
> >>>>>> specifically the "fixup_bundle()" function. This will copy and fixup 
> >>>>>> dependent dylibs/frameworks needed by your project. There is a short 
> >>>>>> example that uses Qt that you can download.
> >>>>>> 
> >>>>>>   You will also probably need to properly configure a plist that 
> >>>>>> resides in your Application bundle. THere are CMake variables for this 
> >>>>>> that you can set then CMake will create a default plist for you.
> >>>>>> 
> >>>>>>   There are a number of examples, CMake itself is one, that uses the 
> >>>>>> "fixup_bundle()" in its own code.
> >>>>>> 
> >>>>>>   Separate from all of that is all the CPack variables that you 
> >>>>>> probably need to set.
> >>>>>> 
> >>>>>> Here is a macro that I wrote for one of my own projects:
> >>>>>> 
> >>>>>> #-------------------------------------------------------------------------------
> >>>>>> # This macro will set all the variables necessary to have a "good" OS 
> >>>>>> X Application
> >>>>>> # bundle. The variables are as follows:
> >>>>>> #  PROJECT_NAME - which can be taken from the ${PROJECT_NAME} variable 
> >>>>>> is needed
> >>>>>> #  DEBUG_EXTENSION - The extension used to denote a debug built 
> >>>>>> Application. Typically
> >>>>>> #   this is '_debug'
> >>>>>> #  ICON_FILE_PATH - The complete path to the bundle icon file
> >>>>>> #  VERSION_STRING - The version string that you wish to use for the 
> >>>>>> bundle. For OS X
> >>>>>> #   this string is usually XXXX.YY.ZZ in type. Look at the Apple docs 
> >>>>>> for more info
> >>>>>> #-------------------------------------------------------------------------------
> >>>>>> macro(ConfigureMacOSXBundlePlist PROJECT_NAME DEBUG_EXTENSION 
> >>>>>> ICON_FILE_PATH VERSION_STRING)
> >>>>>>   # message(STATUS "ConfigureMacOSXBundlePlist for ${PROJECT_NAME} ")
> >>>>>>   IF(CMAKE_BUILD_TYPE MATCHES "Release")
> >>>>>>     SET(DBG_EXTENSION "")
> >>>>>>   else()
> >>>>>>     set(DBG_EXTENSION ${DEBUG_EXTENSION})
> >>>>>>   endif()
> >>>>>>   get_filename_component(ICON_FILE_NAME "${ICON_FILE_PATH}" NAME)
> >>>>>> 
> >>>>>>  #CFBundleGetInfoString
> >>>>>>  SET(MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME}${DBG_EXTENSION} 
> >>>>>> Version ${VERSION_STRING}, Copyright 2009 BlueQuartz Software.")
> >>>>>>  SET(MACOSX_BUNDLE_ICON_FILE ${ICON_FILE_NAME})
> >>>>>>  SET(MACOSX_BUNDLE_GUI_IDENTIFIER "${PROJECT_NAME}${DBG_EXTENSION}")
> >>>>>>  #CFBundleLongVersionString
> >>>>>>  SET(MACOSX_BUNDLE_LONG_VERSION_STRING 
> >>>>>> "${PROJECT_NAME}${DBG_EXTENSION} Version ${VERSION_STRING}")
> >>>>>>  SET(MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}${DBG_EXTENSION})
> >>>>>>  SET(MACOSX_BUNDLE_SHORT_VERSION_STRING ${VERSION_STRING})
> >>>>>>  SET(MACOSX_BUNDLE_BUNDLE_VERSION ${VERSION_STRING})
> >>>>>>  SET(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010, BlueQuartz Software. All 
> >>>>>> Rights Reserved.")
> >>>>>> 
> >>>>>>  SET(${PROJECT_NAME}_PROJECT_SRCS ${${PROJECT_NAME}_PROJECT_SRCS} 
> >>>>>> ${ICON_FILE_PATH})
> >>>>>>  SET_SOURCE_FILES_PROPERTIES(${ICON_FILE_PATH} PROPERTIES
> >>>>>>                              MACOSX_PACKAGE_LOCATION Resources)
> >>>>>> 
> >>>>>> endmacro()
> >>>>>> 
> >>>>>> Hope that helps
> >>>>>> ___________________________________________________________
> >>>>>> Mike Jackson                      www.bluequartz.net
> >>>>>> Principal Software Engineer       mike.jack...@bluequartz.net
> >>>>>> BlueQuartz Software               Dayton, Ohio
> >>>>>> 
> >>>>>> On Jan 19, 2011, at 7:08 AM, Yngve Inntjore Levinsen wrote:
> >>>>>> 
> >>>>>>> Dear fellow cmake users,
> >>>>>>> 
> >>>>>>> I am trying to create a bundle of my project that I build using 
> >>>>>>> CMake. I have tried using the DragNDrop generator, which works to 
> >>>>>>> some extent. I do manage to create a .app folder which contains the 
> >>>>>>> one binary that is the outcome of the project in the Contents/MacOS 
> >>>>>>> folder. I do also create a .dmg file. However:
> >>>>>>> - When clicking the .dmg I am first presented with the license 
> >>>>>>> (great!) before the dmg is mounted and I see an empty folder (??)
> >>>>>>> - When clicking on the<package>.app nothing happens. However, 
> >>>>>>> clicking on the binary in Contents/MacOS works as expected.
> >>>>>>> - I would also like to know how to include the shared libraries 
> >>>>>>> (dylib) that I need. I currently depend on stuff that is installed 
> >>>>>>> with MacPorts, and I don't want to require that the user have to 
> >>>>>>> install all that stuff. Isn't the bundle supposed to be 
> >>>>>>> "self-contained"? Ideally I would like the bundle to automatically 
> >>>>>>> include the libraries that are listed with the "otools -L<binary>" 
> >>>>>>> command...
> >>>>>>> 
> >>>>>>> Question: Where do I find the DragNDrop documentation/examples? On 
> >>>>>>> the wiki ( 
> >>>>>>> http://www.paraview.org/Wiki/CMake:CPackPackageGenerators#DragNDrop_.28OSX_only.29
> >>>>>>>  ) there are only two small lines, and my googling skills are 
> >>>>>>> apparently not good enough..
> >>>>>>> 
> >>>>>>> Here is an extraction of the relevant part of my CMakeLists.txt:
> >>>>>>> ...
> >>>>>>> if(APPLE)
> >>>>>>>  add_executable(madx${BINARY_POSTFIX} MACOSX_BUNDLE ${srcfiles})
> >>>>>>>  SET_TARGET_PROPERTIES(madx${BINARY_POSTFIX} PROPERTIES 
> >>>>>>> CPACK_BUNDLE_STARTUP_COMMAND madx${BINARY_POSTFIX})
> >>>>>>>  SET_TARGET_PROPERTIES(madx${BINARY_POSTFIX} PROPERTIES 
> >>>>>>> CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/cmakesrc/MadX.icns")
> >>>>>>> else(APPLE)
> >>>>>>>  add_executable(madx${BINARY_POSTFIX} ${srcfiles})
> >>>>>>> endif(APPLE)
> >>>>>>> ...
> >>>>>>> 
> >>>>>>> I also set some CPACK_BUNDLE properties because I earlier on tried to 
> >>>>>>> use the BUNDLE generator, but from what I understand this should have 
> >>>>>>> nothing to do with the DragNDrop generator?
> >>>>>>> 
> >>>>>>> Thank you all for reading and thanks in advance for all help you 
> >>>>>>> might provide!
> >>>>>>> 
> >>>>>>> Cheers,
> >>>>>>> Yngve
> >>>>>>> 
> >>>>> _______________________________________________
> >>>>> 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
> >>>> 
> >>> _______________________________________________
> >>> 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
> > 
> > _______________________________________________
> > 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
> 
_______________________________________________
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