From 83f1a926bfeee068a233a4ad80fe086d99d110f0 Mon Sep 17 00:00:00 2001 From: Bart van Strien Date: Sun, 31 Dec 2023 12:36:25 +0100 Subject: [PATCH] Make OS-check for install/cpack cmake targets more explicit Previously there was an early return, trying to match the same thing. Making this explicit allows me to more easily add a linux version. --- CMakeLists.txt | 274 ++++++++++++++++++++++++------------------------- 1 file changed, 136 insertions(+), 138 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 52390b865..72001db9a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2042,142 +2042,140 @@ if(NOT ANDROID) endif() endif() -if (NOT MSVC OR MINGW) - return() +if("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows") + ################################### + # Version + ################################### + + # Extract version.h contents. + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/src/common/version.h LOVE_VERSION_FILE_CONTENTS) + + # Extract one of LOVE_VERSION_MAJOR/MINOR/REV. + function(match_version ARG_STRING OUT_VAR) + string(REGEX MATCH "VERSION_${ARG_STRING} = ([0-9]+);" TMP_VER "${LOVE_VERSION_FILE_CONTENTS}") + string(REGEX MATCH "[0-9]+" TMP_VER "${TMP_VER}") + set(${OUT_VAR} ${TMP_VER} PARENT_SCOPE) + endfunction() + + match_version("MAJOR" LOVE_VERSION_MAJOR) + match_version("MINOR" LOVE_VERSION_MINOR) + match_version("REV" LOVE_VERSION_REV) + + set(LOVE_VERSION_STR "${LOVE_VERSION_MAJOR}.${LOVE_VERSION_MINOR}") + + message(STATUS "Version: ${LOVE_VERSION_STR}") + + ################################### + # CPack + ################################### + install(TARGETS ${LOVE_EXE_NAME} ${LOVE_CONSOLE_EXE_NAME} ${LOVE_LIB_NAME} RUNTIME DESTINATION .) + + # Our install script (and NSIS) doesn't fully support Windows ARM64 yet. + if(MEGA_ARM64) + set(CPACK_GENERATOR ZIP) + set(CPACK_SYSTEM_NAME woa64) + else() + set(CPACK_GENERATOR ZIP NSIS) + endif() + + # Extra DLLs. + if(LOVE_EXTRA_DLLS) + foreach(DLL ${LOVE_EXTRA_DLLS}) + get_filename_component(DLL_NAME ${DLL} NAME) + message(STATUS "Extra DLL: ${DLL_NAME}") + endforeach() + install(FILES ${LOVE_EXTRA_DLLS} DESTINATION .) + endif() + + # Dynamic runtime libs. + if(LOVE_MSVC_DLLS) + foreach(DLL ${LOVE_MSVC_DLLS}) + get_filename_component(DLL_NAME ${DLL} NAME) + message(STATUS "Runtime DLL: ${DLL_NAME}") + endforeach() + install(FILES ${LOVE_MSVC_DLLS} DESTINATION .) + endif() + + # Copy a text file from CMAKE_CURRENT_SOURCE_DIR to CMAKE_CURRENT_BINARY_DIR. + # On Windows, this function will convert line endings to CR,LF. + function(copy_text_file ARG_FILE_IN ARG_FILE_OUT) + file(READ ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_FILE_IN} TMP_TXT_CONTENTS) + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${ARG_FILE_OUT} ${TMP_TXT_CONTENTS}) + endfunction() + + # Text files. + copy_text_file(readme.md readme.txt) + copy_text_file(license.txt license.txt) + copy_text_file(changes.txt changes.txt) + + install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/changes.txt + ${CMAKE_CURRENT_BINARY_DIR}/license.txt + ${CMAKE_CURRENT_BINARY_DIR}/readme.txt + DESTINATION .) + + # Icons + install(FILES + ${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis/love.ico + ${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis/game.ico + DESTINATION .) + + set(CPACK_PACKAGE_NAME "love") + set(CPACK_PACKAGE_VENDOR "love2d.org") + set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LOVE -- It's awesome") + set(CPACK_PACKAGE_VERSION "${LOVE_VERSION_STR}") + set(CPACK_PACKAGE_VERSION_MAJOR "${LOVE_VERSION_MAJOR}") + set(CPACK_PACKAGE_VERSION_MINOR "${LOVE_VERSION_MINOR}") + set(CPACK_PACKAGE_VERSION_PATCH "${LOVE_VERSION_REV}") + set(CPACK_PACKAGE_INSTALL_DIRECTORY "LOVE") + set(CPACK_PACKAGE_EXECUTABLES "${LOVE_EXE_NAME};LOVE") + set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/readme.md") + set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/license.txt") + + set(CPACK_NSIS_EXECUTABLES_DIRECTORY .) + set(CPACK_NSIS_PACKAGE_NAME "LOVE") + set(CPACK_NSIS_DISPLAY_NAME "LOVE ${LOVE_VERSION_STR}") + set(CPACK_NSIS_MODIFY_PATH OFF) + + if(LOVE_X64) + set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") + else() + set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") + endif() + + set(CPACK_NSIS_MENU_LINKS "http://love2d.org/wiki" "Documentation") + + # Some bug somewhere in NSIS requires "\\\\" somewhere in the path, + # according to The Internet. (And sure enough, it does not work + # without it). + set(NSIS_LEFT_BMP "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\left.bmp") + set(NSIS_TOP_BMP "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\top.bmp") + set(NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\love.ico") + set(NSIS_MUI_UNICON "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\love.ico") + + set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE " + !define MUI_WELCOMEPAGE_TITLE \\\"LOVE ${LOVE_VERSION_STR} Setup\\\" + !define MUI_WELCOMEFINISHPAGE_BITMAP \\\"${NSIS_LEFT_BMP}\\\" + !define MUI_HEADERIMAGE_BITMAP \\\"${NSIS_TOP_BMP}\\\" + !define MUI_ICON \\\"${NSIS_MUI_ICON}\\\" + !define MUI_UNICON \\\"${NSIS_MUI_UNICON}\\\" + ") + + set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " + WriteRegStr HKCR \\\".love\\\" \\\"\\\" \\\"LOVE\\\" + WriteRegStr HKCR \\\"LOVE\\\" \\\"\\\" \\\"LOVE Game File\\\" + WriteRegStr HKCR \\\"LOVE\\\\DefaultIcon\\\" \\\"\\\" \\\"$INSTDIR\\\\game.ico\\\" + WriteRegStr HKCR \\\"LOVE\\\\shell\\\" \\\"\\\" \\\"open\\\" + WriteRegStr HKCR \\\"LOVE\\\\shell\\\\open\\\" \\\"\\\" \\\"Open in LOVE\\\" + WriteRegStr HKCR \\\"LOVE\\\\shell\\\\open\\\\command\\\" \\\"\\\" \\\"$INSTDIR\\\\love.exe $\\\\\\\"%1$\\\\\\\"\\\" + System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' + ") + + set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " + DeleteRegKey HKCR \\\"LOVE\\\" + DeleteRegKey HKCR \\\".love\\\" + System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' + ") + + include(CPack) endif() - -################################### -# Version -################################### - -# Extract version.h contents. -file(READ ${CMAKE_CURRENT_SOURCE_DIR}/src/common/version.h LOVE_VERSION_FILE_CONTENTS) - -# Extract one of LOVE_VERSION_MAJOR/MINOR/REV. -function(match_version ARG_STRING OUT_VAR) - string(REGEX MATCH "VERSION_${ARG_STRING} = ([0-9]+);" TMP_VER "${LOVE_VERSION_FILE_CONTENTS}") - string(REGEX MATCH "[0-9]+" TMP_VER "${TMP_VER}") - set(${OUT_VAR} ${TMP_VER} PARENT_SCOPE) -endfunction() - -match_version("MAJOR" LOVE_VERSION_MAJOR) -match_version("MINOR" LOVE_VERSION_MINOR) -match_version("REV" LOVE_VERSION_REV) - -set(LOVE_VERSION_STR "${LOVE_VERSION_MAJOR}.${LOVE_VERSION_MINOR}") - -message(STATUS "Version: ${LOVE_VERSION_STR}") - -################################### -# CPack -################################### -install(TARGETS ${LOVE_EXE_NAME} ${LOVE_CONSOLE_EXE_NAME} ${LOVE_LIB_NAME} RUNTIME DESTINATION .) - -# Our install script (and NSIS) doesn't fully support Windows ARM64 yet. -if(MEGA_ARM64) - set(CPACK_GENERATOR ZIP) - set(CPACK_SYSTEM_NAME woa64) -else() - set(CPACK_GENERATOR ZIP NSIS) -endif() - -# Extra DLLs. -if(LOVE_EXTRA_DLLS) - foreach(DLL ${LOVE_EXTRA_DLLS}) - get_filename_component(DLL_NAME ${DLL} NAME) - message(STATUS "Extra DLL: ${DLL_NAME}") - endforeach() - install(FILES ${LOVE_EXTRA_DLLS} DESTINATION .) -endif() - -# Dynamic runtime libs. -if(LOVE_MSVC_DLLS) - foreach(DLL ${LOVE_MSVC_DLLS}) - get_filename_component(DLL_NAME ${DLL} NAME) - message(STATUS "Runtime DLL: ${DLL_NAME}") - endforeach() - install(FILES ${LOVE_MSVC_DLLS} DESTINATION .) -endif() - -# Copy a text file from CMAKE_CURRENT_SOURCE_DIR to CMAKE_CURRENT_BINARY_DIR. -# On Windows, this function will convert line endings to CR,LF. -function(copy_text_file ARG_FILE_IN ARG_FILE_OUT) - file(READ ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_FILE_IN} TMP_TXT_CONTENTS) - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${ARG_FILE_OUT} ${TMP_TXT_CONTENTS}) -endfunction() - -# Text files. -copy_text_file(readme.md readme.txt) -copy_text_file(license.txt license.txt) -copy_text_file(changes.txt changes.txt) - -install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/changes.txt - ${CMAKE_CURRENT_BINARY_DIR}/license.txt - ${CMAKE_CURRENT_BINARY_DIR}/readme.txt - DESTINATION .) - -# Icons -install(FILES - ${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis/love.ico - ${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis/game.ico - DESTINATION .) - -set(CPACK_PACKAGE_NAME "love") -set(CPACK_PACKAGE_VENDOR "love2d.org") -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "LOVE -- It's awesome") -set(CPACK_PACKAGE_VERSION "${LOVE_VERSION_STR}") -set(CPACK_PACKAGE_VERSION_MAJOR "${LOVE_VERSION_MAJOR}") -set(CPACK_PACKAGE_VERSION_MINOR "${LOVE_VERSION_MINOR}") -set(CPACK_PACKAGE_VERSION_PATCH "${LOVE_VERSION_REV}") -set(CPACK_PACKAGE_INSTALL_DIRECTORY "LOVE") -set(CPACK_PACKAGE_EXECUTABLES "${LOVE_EXE_NAME};LOVE") -set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/readme.md") -set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/license.txt") - -set(CPACK_NSIS_EXECUTABLES_DIRECTORY .) -set(CPACK_NSIS_PACKAGE_NAME "LOVE") -set(CPACK_NSIS_DISPLAY_NAME "LOVE ${LOVE_VERSION_STR}") -set(CPACK_NSIS_MODIFY_PATH OFF) - -if(LOVE_X64) - set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") -else() - set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") -endif() - -set(CPACK_NSIS_MENU_LINKS "http://love2d.org/wiki" "Documentation") - -# Some bug somewhere in NSIS requires "\\\\" somewhere in the path, -# according to The Internet. (And sure enough, it does not work -# without it). -set(NSIS_LEFT_BMP "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\left.bmp") -set(NSIS_TOP_BMP "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\top.bmp") -set(NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\love.ico") -set(NSIS_MUI_UNICON "${CMAKE_CURRENT_SOURCE_DIR}/extra/nsis\\\\love.ico") - -set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE " - !define MUI_WELCOMEPAGE_TITLE \\\"LOVE ${LOVE_VERSION_STR} Setup\\\" - !define MUI_WELCOMEFINISHPAGE_BITMAP \\\"${NSIS_LEFT_BMP}\\\" - !define MUI_HEADERIMAGE_BITMAP \\\"${NSIS_TOP_BMP}\\\" - !define MUI_ICON \\\"${NSIS_MUI_ICON}\\\" - !define MUI_UNICON \\\"${NSIS_MUI_UNICON}\\\" -") - -set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " - WriteRegStr HKCR \\\".love\\\" \\\"\\\" \\\"LOVE\\\" - WriteRegStr HKCR \\\"LOVE\\\" \\\"\\\" \\\"LOVE Game File\\\" - WriteRegStr HKCR \\\"LOVE\\\\DefaultIcon\\\" \\\"\\\" \\\"$INSTDIR\\\\game.ico\\\" - WriteRegStr HKCR \\\"LOVE\\\\shell\\\" \\\"\\\" \\\"open\\\" - WriteRegStr HKCR \\\"LOVE\\\\shell\\\\open\\\" \\\"\\\" \\\"Open in LOVE\\\" - WriteRegStr HKCR \\\"LOVE\\\\shell\\\\open\\\\command\\\" \\\"\\\" \\\"$INSTDIR\\\\love.exe $\\\\\\\"%1$\\\\\\\"\\\" - System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' -") - -set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " - DeleteRegKey HKCR \\\"LOVE\\\" - DeleteRegKey HKCR \\\".love\\\" - System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)' -") - -include(CPack)