tools/CreateMacBundle.cmake.in
author koda
Mon, 17 Jun 2013 17:40:01 +0200
changeset 9234 2bf3796c5855
parent 9050 e9d54cd577e7
child 9345 bb9bf1efd0d2
permissions -rw-r--r--
This commit changes many aspect of our cmake build system - shared libraries are compiled by default: * this modifies RPATH of unix executables; * this will prevent a lot of linking issues, esp. from pascal world; * the old behaviour (static libs) is still available with -DBUILD_SHARED_LIBS=off; * of course in this case you have to provide the full list of dependencies with FPFLAGS and CMAKE_C_FLAGS; - pascal is now fully integrated with cmake, meaning you can just do add_sources and use CMAKE_Pascal_FLAGS: * some of the language features are only partially implemented, for example .inc files will not get rebuilt if you modify them; * target_link_libraries for pascal targets is just dummy as linking is determined within pascal files; * universal builds for osx are not available any more; - bundled libraries and system libraries are addressed using the target name: * this avoids depedency tracking; * this allows to name output as we wish.

message(STATUS "Performing standalone bundle creation...")

execute_process(COMMAND stat ${frameworks_dir} RESULT_VARIABLE doBundle OUTPUT_QUIET ERROR_QUIET)
execute_process(COMMAND mkdir -p ${frameworks_dir})
# macdeployqt will convert safely any absolute path library for 'hedgewars'
execute_process(COMMAND ${macdeployqt_executable} ${CMAKE_BINARY_DIR}/Hedgewars.app OUTPUT_QUIET ERROR_QUIET)

if(NOT ${NOVIDEOREC})
    # but macdeployqt will not work for 'hwengine'; luckily the dylibs were already updated before
    execute_process(COMMAND install_name_tool -change ${LIBAVCODEC_LIBRARY} @executable_path/../Frameworks/libavcodec.dylib ${engine_full_path})
    execute_process(COMMAND install_name_tool -change ${LIBAVFORMAT_LIBRARY} @executable_path/../Frameworks/libavformat.dylib ${engine_full_path})
    execute_process(COMMAND install_name_tool -change ${LIBAVUTIL_LIBRARY} @executable_path/../Frameworks/libavutil.dylib ${engine_full_path})
endif()

if(NOT ${NOPNG})
    #same here, for libpng and hwengine, let's assume the version pulled by macdeployqt is the same
    #(yes libpng is pulled by macdeployqt even when NOVIDEOREC is active)
    execute_process(COMMAND install_name_tool -change ${PNG_LIBRARY} @executable_path/../Frameworks/${PNG_LIBNAME} ${engine_full_path})
    execute_process(COMMAND install_name_tool -change ${ZLIB_LIBRARY} @executable_path/../Frameworks/${ZLIB_LIBNAME} ${engine_full_path})
endif()

if(doBundle EQUAL 1)
    execute_process(COMMAND cp -pPR ${sdl_library_only} ${frameworks_dir}/SDL.framework)
    execute_process(COMMAND cp -pPR ${SDLIMAGE_LIBRARY} ${frameworks_dir}/SDL_image.framework)
    execute_process(COMMAND cp -pPR ${SDLNET_LIBRARY}   ${frameworks_dir}/SDL_net.framework)
    execute_process(COMMAND cp -pPR ${SDLTTF_LIBRARY}   ${frameworks_dir}/SDL_ttf.framework)
    execute_process(COMMAND cp -pPR ${SDLMIXER_LIBRARY} ${frameworks_dir}/SDL_mixer.framework)
    execute_process(COMMAND cp -pPR ${OGG_LIBRARY}      ${frameworks_dir}/Ogg.framework)
    execute_process(COMMAND cp -pPR ${VORBIS_LIBRARY}   ${frameworks_dir}/Vorbis.framework)

    if(${SPARKLE_FOUND})
        execute_process(COMMAND cp -pPR ${SPARKLE_LIBRARY} ${frameworks_dir}/Sparkle.framework)
    endif()
    message(STATUS "Bundle frameworks added")
else()
    message(STATUS "Bundle frameworks already present; skipping...")
endif()