# Bundle Zephyr program and tcl scripts into a starpack # Capitalize executable on windows and mac set(ZEPHYR_EXECUTABLE_ROOT Zephyr) if(LINUX) set(ZEPHYR_EXECUTABLE_ROOT zephyr) endif(LINUX) if(WIN32) set(ZEPHYR_EXECUTABLE_NAME ${ZEPHYR_EXECUTABLE_ROOT}.exe) else(WIN32) set(ZEPHYR_EXECUTABLE_NAME ${ZEPHYR_EXECUTABLE_ROOT}) endif(WIN32) # tclkit packager with Tk find_program(TCLKIT_EXECUTABLE NAMES tclkit8.5 tclkit85 tclkit tclkit-win32.upx.exe tclkit-linux-x86 tclkit85-darwin-univ-aqua tclkit-linux-x86_64 ) # tclkit packager command-line version # Even if there is only one tclkit for your platform, you must at least make # a copy, as the two tclkits must not refer to the same file. find_program(TCLKITSH_EXECUTABLE NAMES tclkitsh8.5 tclkitsh85 tclkitsh tclkitsh-win32.upx.exe tclkitsh-linux-x86 tclkitsh85-darwin-univ-aqua tclkitsh-linux-x86_64 ) # sdx.kit is used for creating a platform-specific starpack find_path(SDX_KIT_PATH sdx.kit) set(TCLKIT_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/build_tclkit) # Construct directory structure for use in tclkit/starpack set(VFS_DIR "${TCLKIT_BUILD_DIR}/${ZEPHYR_EXECUTABLE_ROOT}.vfs") file(GLOB TCL_SOURCES_IN RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.tcl" "tcl_lib_dir/*.tcl" "tcl_lib_dir/*.tm") # Version file is handled specially later list(REMOVE_ITEM TCL_SOURCES_IN tcl_lib_dir/ZephyrVersion.tcl) set(TCL_SOURCES_OUT "") foreach(SRC ${TCL_SOURCES_IN}) set(OUT ${VFS_DIR}/${SRC}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${SRC} ${OUT} COPYONLY) set(TCL_SOURCES_OUT ${TCL_SOURCES_OUT} ${OUT}) endforeach(SRC ${TCL_SOURCES_IN}) # Encode program version into installed files configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/tcl_lib_dir/ZephyrVersion.tcl.in ${VFS_DIR}/tcl_lib_dir/ZephyrVersion.tcl @ONLY ) set(TCL_SOURCES_OUT ${TCL_SOURCES_OUT} ${VFS_DIR}/tcl_lib_dir/ZephyrVersion.tcl) file(GLOB IMAGES_IN RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "images/*.gif") list(REMOVE_ITEM IMAGES_IN images/installIcon.gif) list(REMOVE_ITEM IMAGES_IN images/UninstallIcon.gif) set(IMAGES_OUT "") foreach(SRC ${IMAGES_IN}) set(OUT ${VFS_DIR}/${SRC}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${SRC} ${OUT} COPYONLY) set(IMAGES_OUT ${TCL_SOURCES_OUT} ${OUT}) endforeach(SRC ${IMAGES_IN}) # Let sdx fold in our custom Zephyr icon (on Windows) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/images/Zephyr.ico ${VFS_DIR}/tclkit.ico COPYONLY ) # And starpack file description (on Windows) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/tclkit.inf.in ${VFS_DIR}/tclkit.inf @ONLY ) add_custom_command( OUTPUT "${TCLKIT_BUILD_DIR}/${ZEPHYR_EXECUTABLE_NAME}" COMMAND "${TCLKITSH_EXECUTABLE}" ARGS "${SDX_KIT_PATH}/sdx.kit" wrap ${ZEPHYR_EXECUTABLE_NAME} -runtime "${TCLKIT_EXECUTABLE}" DEPENDS ${TCL_SOURCES_OUT} ${IMAGES_OUT} ${VFS_DIR}/tclkit.ico WORKING_DIRECTORY ${TCLKIT_BUILD_DIR} COMMENT "Building Starpack executable" ) add_custom_target(ZephyrStarpack ALL DEPENDS "${TCLKIT_BUILD_DIR}/${ZEPHYR_EXECUTABLE_NAME}" ) # Apple Mac OS X bundle puts executable in the MacOS dir, not the regular Resources install dir # so elide this install rule for Mac if(NOT APPLE) install(PROGRAMS "${TCLKIT_BUILD_DIR}/${ZEPHYR_EXECUTABLE_NAME}" DESTINATION "." ) endif(NOT APPLE)