1 # release requirements:
2 # a graphical environment
3 # vorbis-tools: vorbiscomment, oggdec, oggenc
5 # https://github.com/divVerent/s2tc.git: s2tc_compress
7 add_custom_target(release)
9 string(TIMESTAMP stamp "%Y%m%d")
10 string(TIMESTAMP filestamp "%Y-%m-%d")
12 file(STRINGS data/xonotic-data.pk3dir/xonotic-common.cfg _contents REGEX "^gameversion ")
14 message(FATAL_ERROR "xonotic-common.cfg does not contain gameversion")
16 string(REGEX REPLACE ".*gameversion ([0-9]+).*" "\\1" versionstr "${_contents}")
17 math(EXPR versionstr_major "${versionstr} / 10000")
18 math(EXPR versionstr_minor "${versionstr} / 100 - ${versionstr_major} * 100")
19 math(EXPR versionstr_patch "${versionstr} - ${versionstr_major} * 10000 - ${versionstr_minor} * 100")
20 set(versionstr "${versionstr_major}.${versionstr_minor}.${versionstr_patch}")
21 message("game version: ${versionstr}")
24 # foreach repo: git tag "xonotic-v${versionstr}"
26 function(getbinary artifact)
27 find_package(Git REQUIRED)
28 get_filename_component(dpname ${artifact} NAME)
29 string(REGEX REPLACE "^xonotic" "darkplaces" dpname ${dpname})
31 COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
32 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/darkplaces
34 OUTPUT_STRIP_TRAILING_WHITESPACE)
35 message(STATUS "Downloading http://beta.xonotic.org/autobuild-bin/${rev}/${dpname}")
36 file(DOWNLOAD "http://beta.xonotic.org/autobuild-bin/${rev}/${dpname}"
37 "${PROJECT_BINARY_DIR}/${artifact}"
42 # TODO: build from source
43 message(STATUS "Downloading NetRadiant")
45 file(DOWNLOAD http://www.icculus.org/netradiant/files/netradiant-1.5.0-20120301.tar.bz2
46 "${PROJECT_BINARY_DIR}/netradiant-1.5.0-20120301.tar.bz2"
48 EXPECTED_HASH SHA256=5e720cd8ebd2379ee5d388dfb8f2613bfd5798fb33d16bc7415d44a11fb4eadb)
50 file(DOWNLOAD http://www.icculus.org/netradiant/files/netradiant-1.5.0-20120301-win32-7z.exe
51 "${PROJECT_BINARY_DIR}/netradiant-1.5.0-20120301-win32-7z.exe"
53 EXPECTED_HASH SHA256=c4bb30b6f14c3f71f1ed29fa38cddac209a7bc2ab5b38e5bf5b442106279b5c4)
57 # TODO: build from source
58 message(STATUS "Downloading Darkplaces")
60 getbinary(Xonotic/xonotic-x86.exe)
61 getbinary(Xonotic/xonotic-x86-wgl.exe)
62 getbinary(Xonotic/xonotic-x86-dedicated.exe)
63 getbinary(Xonotic/xonotic.exe)
64 getbinary(Xonotic/xonotic-wgl.exe)
65 getbinary(Xonotic/xonotic-dedicated.exe)
67 getbinary(Xonotic/Xonotic.app/Contents/MacOS/xonotic-osx-sdl-bin) # +x
68 getbinary(Xonotic/xonotic-osx-dedicated) # +x
70 getbinary(Xonotic/xonotic-linux64-sdl) # +x
71 getbinary(Xonotic/xonotic-linux64-glx) # +x
72 getbinary(Xonotic/xonotic-linux64-dedicated) # +x
75 function(buildpk3s src)
77 string(REGEX REPLACE "\\.pk3dir$" "" name ${src})
78 if (name MATCHES "^xonotic-")
79 string(REGEX REPLACE "^xonotic-" "xonotic-${stamp}-" name ${name})
81 set(name "${name}-${stamp}")
83 file(GLOB_RECURSE files RELATIVE "${PROJECT_SOURCE_DIR}/${dir}" "${dir}/*")
84 string(REGEX REPLACE "\\.git/[^;]+;?" "" files "${files}")
85 # string(REGEX REPLACE "[^;]+(qh|inc|txt|cfg|sh|po|pl|yml|cmake);?" "" files "${files}")
86 foreach (pair ${ARGN})
87 list(GET pair 0 filter)
88 list(GET pair 1 flavor)
89 buildpk3(${name}${flavor}.pk3)
93 function(buildpk3 pk3)
94 message("registered pk3 ${pk3}")
96 foreach (file IN LISTS files)
97 set(marker "done.data/${pk3}dir/${file}")
98 string(REPLACE "#" "_" marker ${marker}) # OUTPUT cannot contain '#'
99 list(APPEND deps "${marker}")
100 get_filename_component(rel ${file} DIRECTORY)
101 add_custom_command(OUTPUT ${marker}
102 DEPENDS "${dir}/${file}"
103 COMMAND ${CMAKE_COMMAND}
104 "-Dsrc=${PROJECT_SOURCE_DIR}/${dir}/${file}"
105 "-Ddst=data/${pk3}dir/${rel}"
106 "-Dconv=data/${pk3}dir/${file}"
107 -P "transform-${filter}.cmake"
110 add_custom_target(${pk3}dir DEPENDS ${deps})
111 add_custom_target(${pk3}dir-zip DEPENDS ${pk3})
112 add_dependencies(release ${pk3}dir-zip)
113 add_custom_command(OUTPUT ${pk3}
115 COMMAND ${CMAKE_COMMAND} -E tar cvf "../../${pk3}" --mtime=${filestamp} --format=zip -- * # TODO: no wildcard
116 WORKING_DIRECTORY "data/${pk3}dir")
119 function(deftransform name)
120 file(WRITE ${PROJECT_BINARY_DIR}/transform-${name}.cmake "")
122 list(APPEND pairs "del_src\;true")
123 foreach (pair IN LISTS pairs)
126 file(APPEND ${PROJECT_BINARY_DIR}/transform-${name}.cmake "set(ENV{${k}} \"${v}\")\n")
128 file(APPEND ${PROJECT_BINARY_DIR}/transform-${name}.cmake
130 " COMMAND ${CMAKE_COMMAND} -E copy \${src} \${conv}\n"
131 " COMMAND ${PROJECT_SOURCE_DIR}/misc/tools/cached-converter.sh \${conv}\n"
132 " COMMAND ${CMAKE_COMMAND} -E make_directory done.\${conv}\n"
133 " COMMAND ${CMAKE_COMMAND} -E touch done.\${conv}\n"
134 " RESULT_VARIABLE res_var\n"
137 file(WRITE ${PROJECT_BINARY_DIR}/transform-raw.cmake
139 " COMMAND ${CMAKE_COMMAND} -E copy \${src} \${conv}\n"
140 " COMMAND ${CMAKE_COMMAND} -E make_directory done.\${conv}\n"
141 " COMMAND ${CMAKE_COMMAND} -E touch done.\${conv}\n"
144 # default to "del_src\;true"
146 # texture: convert to jpeg and dds
153 deftransform(normaldds
154 # texture: convert to jpeg and dds
155 # music: reduce bitrate
157 "do_jpeg_if_not_dds\;true"
165 # texture: convert to jpeg and dds
166 # music: reduce bitrate
174 # texture: convert to jpeg and dds
181 # texture: convert to jpeg and dds
182 # music: reduce bitrate
184 "do_jpeg_if_not_dds\;true"
192 # texture: convert to jpeg and dds
193 # music: reduce bitrate
202 ## remove stuff radiant has no use for
203 #verbose find . -name \*_norm.\* -exec rm -f {} \;
204 #verbose find . -name \*_bump.\* -exec rm -f {} \;
205 #verbose find . -name \*_glow.\* -exec rm -f {} \;
206 #verbose find . -name \*_gloss.\* -exec rm -f {} \;
207 #verbose find . -name \*_pants.\* -exec rm -f {} \;
208 #verbose find . -name \*_shirt.\* -exec rm -f {} \;
209 #verbose find . -name \*_reflect.\* -exec rm -f {} \;
210 #verbose find . -not \( -name \*.tga -o -name \*.png -o -name \*.jpg \) -exec rm -f {} \;
212 buildpk3s(font-unifont.pk3dir "raw\;")
213 buildpk3s(font-xolonium.pk3dir "raw\;")
214 buildpk3s(xonotic-data.pk3dir "low\;-low" "normaldds\;" "normal\;-high")
215 buildpk3s(xonotic-maps.pk3dir "low\;-low" "normaldds\;" "normal\;-high" "mapping\;-mapping")
216 buildpk3s(xonotic-music.pk3dir "raw\;" "low\;-low")
217 buildpk3s(xonotic-nexcompat.pk3dir "normaldds\;")
219 message("CMake may appear to halt at '-- Configuring done', this is not the case")