mirror of
https://github.com/love2d/love.git
synced 2026-08-12 08:30:56 +02:00
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.
This commit is contained in:
+136
-138
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user