-
Notifications
You must be signed in to change notification settings - Fork 171
/
Copy pathSimutransInstall.cmake
132 lines (122 loc) · 5.66 KB
/
SimutransInstall.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
if (APPLE)
# Self-contained bundle
set(SIMUTRANS_BASE_DIR "${CMAKE_BINARY_DIR}/simutrans/simutrans.app/Contents/Resources/simutrans")
set(SIMUTRANS_BIN_DIR "${CMAKE_BINARY_DIR}/simutrans")
set(SIMUTRANS_OUTPUT_DIR "")
elseif (UNIX AND NOT OPTION_BUNDLE_LIBRARIES AND NOT SINGLE_INSTALL)
# System Installation (Linux only)
include(GNUInstallDirs)
if (USE_GAMES_DATADIR)
set(SIMUTRANS_BASE_DIR "${CMAKE_INSTALL_DATADIR}/games/simutrans")
else ()
set(SIMUTRANS_BASE_DIR "${CMAKE_INSTALL_DATADIR}/simutrans")
endif ()
set(SIMUTRANS_BIN_DIR "${CMAKE_INSTALL_BINDIR}")
set(SIMUTRANS_OUTPUT_DIR "${CMAKE_INSTALL_PREFIX}")
install(FILES ${CMAKE_SOURCE_DIR}/src/simutrans/simutrans.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
install(FILES ${CMAKE_SOURCE_DIR}/src/linux/simutrans.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES ${CMAKE_SOURCE_DIR}/src/linux/com.simutrans.Simutrans.metainfo.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
else ()
# Portable installation
set(SIMUTRANS_BASE_DIR "${CMAKE_BINARY_DIR}/simutrans")
set(SIMUTRANS_BIN_DIR "${CMAKE_BINARY_DIR}/simutrans")
set(SIMUTRANS_OUTPUT_DIR "")
endif ()
install(TARGETS simutrans RUNTIME DESTINATION "${SIMUTRANS_BIN_DIR}" BUNDLE DESTINATION "${SIMUTRANS_BIN_DIR}")
install(DIRECTORY "${CMAKE_SOURCE_DIR}/simutrans/" DESTINATION ${SIMUTRANS_BASE_DIR} REGEX "get_pak.sh" EXCLUDE)
#
# Download language files
#
if (SIMUTRANS_UPDATE_LANGFILES)
if (MSVC)
# MSVC has no variable on the install target path at execution time, which is why we expand the directories at creation time!
install(CODE "execute_process(COMMAND powershell -ExecutionPolicy Bypass -File ${CMAKE_SOURCE_DIR}/tools/get_lang_files.ps1 WORKING_DIRECTORY ${SIMUTRANS_OUTPUT_DIR}/${SIMUTRANS_BASE_DIR}/..)")
else ()
install(CODE "execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/tools/get_lang_files.sh WORKING_DIRECTORY ${SIMUTRANS_OUTPUT_DIR}/${SIMUTRANS_BASE_DIR}/.. )")
endif ()
endif ()
#
# Pak installer
#
if (NOT WIN32)
install(FILES "${CMAKE_SOURCE_DIR}/tools/get_pak.sh" DESTINATION "${SIMUTRANS_BASE_DIR}"
PERMISSIONS
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE
WORLD_READ WORLD_EXECUTE
)
else ()
# NSIS must be installed manually in the path with the right addons
if(MINGW)
install(CODE "execute_process(COMMAND makensis onlineupgrade.nsi WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/Windows/nsis)")
else ()
install(CODE "execute_process(COMMAND cmd /k \"$ENV{ProgramFiles\(x86\)}/NSIS/makensis.exe\" onlineupgrade.nsi WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src/Windows/nsis)")
endif ()
install(FILES "${CMAKE_SOURCE_DIR}/src/Windows/nsis/download-paksets.exe" DESTINATION "${SIMUTRANS_BASE_DIR}")
endif ()
#
# Install pak64 if requested or needed
#
if (SIMUTRANS_INSTALL_PAK64)
if (MSVC)
install(CODE
"if(NOT EXISTS ${SIMUTRANS_BASE_DIR}/pak)
execute_process(COMMAND powershell -Command \"Remove-Item \'${SIMUTRANS_BASE_DIR}/pak\' -Recurse\" WORKING_DIRECTORY ${SIMUTRANS_OUTPUT_DIR}/${SIMUTRANS_BASE_DIR})
file(STRINGS ${CMAKE_SOURCE_DIR}/src/simutrans/paksetinfo.h URLpak64 REGEX \"/pak64/\")
string( REGEX REPLACE \"^.[\\t ]*\\\"\" \"\" URLpak64 \${URLpak64})
string( REGEX REPLACE \"\\\", .*\$\" \"\" URLpak64 \${URLpak64})
message(\"install pak to \" ${SIMUTRANS_BASE_DIR})
execute_process(COMMAND powershell -ExecutionPolicy Bypass -File ${CMAKE_SOURCE_DIR}/tools/get_pak.ps1 \${URLpak64} WORKING_DIRECTORY ${SIMUTRANS_OUTPUT_DIR}/${SIMUTRANS_BASE_DIR})
endif ()
")
else ()
# install pak64 with the bundle
install(CODE
"file(STRINGS ${CMAKE_SOURCE_DIR}/src/simutrans/paksetinfo.h URLpak64 REGEX \"/pak64/\")
string( REGEX REPLACE \"^.[\\t ]*\\\"\" \"\" URLpak64 \${URLpak64})
string( REGEX REPLACE \"\\\", .*\$\" \"\" URLpak64 \${URLpak64})
execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/tools/get_pak.sh \${URLpak64} WORKING_DIRECTORY ${SIMUTRANS_OUTPUT_DIR}/${SIMUTRANS_BASE_DIR})
")
endif ()
endif ()
#
# Bundle libraries on linux if requested
#
if (OPTION_BUNDLE_LIBRARIES AND UNIX AND NOT APPLE)
# Steam Runtime already includes some of our libraries
if (SIMUTRANS_STEAM_BUILT)
install(CODE [[
file(GET_RUNTIME_DEPENDENCIES
RESOLVED_DEPENDENCIES_VAR DEPENDENCIES
EXECUTABLES "${CMAKE_BINARY_DIR}/simutrans/simutrans"
PRE_EXCLUDE_REGEXES "libSDL2*|libz.so*|libfreetype*|libpng*|libglib*|libogg*|libpcre*|libvorbis*|libfontconfig*|libsteam_api.so*"
POST_EXCLUDE_REGEXES "ld-linux|libc.so|libdl.so|libm.so|libgcc_s.so|libpthread.so|libstdc...so|libgomp.so")
]])
else ()
install(CODE [[
file(GET_RUNTIME_DEPENDENCIES
RESOLVED_DEPENDENCIES_VAR DEPENDENCIES
EXECUTABLES "${CMAKE_BINARY_DIR}/simutrans/simutrans"
PRE_EXCLUDE_REGEXES "libSDL2*|libz.so*|libfontconfig*"
POST_EXCLUDE_REGEXES "ld-linux|libc.so|libdl.so|libm.so|libgcc_s.so|libpthread.so|libstdc...so|libgomp.so")
]])
endif ()
install(CODE [[
file(INSTALL
DESTINATION "${CMAKE_BINARY_DIR}/simutrans/lib"
FILES ${DEPENDENCIES}
FOLLOW_SYMLINK_CHAIN)
]])
endif ()
#
# Include steam library (for some reason it is not done automagically as others)
#
if (SIMUTRANS_STEAM_BUILT)
if(MSVC AND CMAKE_GENERATOR_PLATFORM MATCHES "Win32")
install(FILES ${CMAKE_SOURCE_DIR}/sdk/redistributable_bin/steam_api.dll DESTINATION ${CMAKE_BINARY_DIR}/simutrans)
elseif(MSVC AND CMAKE_GENERATOR_PLATFORM MATCHES "x64")
install(FILES ${CMAKE_SOURCE_DIR}/sdk/redistributable_bin/win64/steam_api64.dll DESTINATION ${CMAKE_BINARY_DIR}/simutrans)
elseif(UNIX AND NOT APPLE) # For Apple it was already done in MacBundle.cmake
install(FILES ${CMAKE_SOURCE_DIR}/sdk/redistributable_bin/linux64/libsteam_api.so DESTINATION ${CMAKE_BINARY_DIR}/simutrans/lib)
endif()
endif()