option(PSEMEK_PACKAGE_MODE "Enable packaging mode" OFF) set(PSEMEK_PACKAGE_ROOT "" CACHE PATH "Packaging environment root") if(PSEMEK_PACKAGE_MODE) if(WIN32) set(PSEMEK_PACKAGE_SUFFIX_RAW win) elseif(UNIX AND (NOT APPLE)) set(PSEMEK_PACKAGE_SUFFIX_RAW linux) elseif(UNIX AND APPLE) set(PSEMEK_PACKAGE_SUFFIX_RAW mac) else() message(FATAL "Uknown system for packaging") endif() set(PSEMEK_PACKAGE_SUFFIX ${PSEMEK_PACKAGE_SUFFIX_RAW} CACHE INTERNAL "Packaging suffix" FORCE) if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")) list(APPEND PSEMEK_CXX_FLAGS "-Wl,-rpath,." "-static-libgcc" "-static-libstdc++") endif() set(PSEMEK_COPY_FILES_RAW) # SDL2 find_package(SDL2 REQUIRED) list(LENGTH SDL2_LIBRARIES SDL2_LIBRARIES_COUNT) if(NOT (SDL2_LIBRARIES_COUNT EQUAL 1)) message(FATAL "SDL2_LIBRARIES contains more than 1 entry: ${SDL2_LIBRARIES}") message(FATAL "Aborting packaging") endif() list(APPEND PSEMEK_COPY_FILES_RAW ${SDL2_LIBRARIES}) set(PSEMEK_COPY_FILES_DIR "${CMAKE_CURRENT_BINARY_DIR}/copy_files") set(PSEMEK_COPY_FILES_ABSOLUTE) foreach(FILE ${PSEMEK_COPY_FILES_RAW}) get_filename_component(REALPATH "${FILE}" REALPATH) get_filename_component(NAME "${FILE}" NAME) configure_file("${REALPATH}" "${PSEMEK_COPY_FILES_DIR}/${NAME}" COPYONLY) list(APPEND PSEMEK_COPY_FILES_ABSOLUTE "${PSEMEK_COPY_FILES_DIR}/${NAME}") endforeach() set(PSEMEK_COPY_FILES ${PSEMEK_COPY_FILES_ABSOLUTE} CACHE INTERNAL "List of external files to copy into the package" FORCE) endif() function(psemek_package_target target) if(PSEMEK_PACKAGE_MODE) add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_STRIP} $) add_custom_command(TARGET ${target} POST_BUILD COMMAND zip ${CMAKE_CURRENT_SOURCE_DIR}/${target}-${PSEMEK_PACKAGE_SUFFIX}.zip -j $ ${PSEMEK_COPY_FILES} ) endif() endfunction()