-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
100 lines (80 loc) · 3.52 KB
/
Makefile
File metadata and controls
100 lines (80 loc) · 3.52 KB
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
# Copyright (c) 2025 Marleson Graf
# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
# associated documentation files (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge, publish, distribute,
# sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all copies or
# substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
# NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
# OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
project:=HexedUT2k4
packages:=HexedSRC HexedUT HexedVOTE HexedARENA HexedNET HexedPatches
requiresint:=HexedSRC HexedUT HexedVOTE HexedARENA HexedNET HexedPatches
requirescompressed:=HexedSRC HexedUT HexedVOTE HexedARENA HexedNET
helpfiles:=README.md LICENSE CHANGELOG.md
.outdir:=build
.versionfiles:=$(packages:%=$(.outdir)/%.make)
-include $(.versionfiles)
.projectversion:=v7.0-preview1
.packages:=$(foreach p,$(packages),$p$($p.version))
.intpackages:=$(foreach p,$(requiresint),$p$($p.version))
.compressedpackages:=$(foreach p,$(requirescompressed),$p$($p.version))
.archive:=$(.outdir)/$(project)$(.projectversion).zip
.helpfiles:=$(addprefix $(.outdir)/Help/$(project)$(.projectversion)-, $(helpfiles))
.ufiles:=$(.packages:%=$(.outdir)/System/%.u)
.intfiles:=$(.intpackages:%=$(.outdir)/System/%.int)
.compressedfiles:=$(.compressedpackages:%=$(.outdir)/%.u.uz2)
.targets:=$(.ufiles) $(.intfiles)
.winecmd:=WINEDEBUG=-all WINEPREFIX=~/.ucc-prefix wine
.findsources=$(wildcard $1/Classes/*.uc) $(wildcard $1/Classes/Include/*.uci)
$(foreach p,$(packages),$(if $($p.version),$(eval $p$($p.version).name:=$p)))
$(foreach p,$(packages),$(eval $p$($p.version).sources:=$p/make.ini $(call .findsources,$p)))
.SECONDEXPANSION:
.ONESHELL:
.PHONY: all compressed release clean distclean
all: $(.targets)
compressed: $(.compressedfiles)
release: $(.archive)
clean:
@rm -rf $(.outdir)/System
@rm -f $(.compressedfiles)
@rm -f $(.archive)
distclean: clean
@rm -rf $(.outdir)
$(.outdir)/System/%.u: $$($$*.sources)
@mkdir -p $(@D)
@$(if $($*.name),ln -s $($*.name) $*)
@rm -f System/$*.{u,ucl}
@cd System
$(.winecmd) UCC.exe make -ini=../$*/make.ini
@cd ../
@$(if $($*.name),rm $*)
@cp System/$*.u $(@D)
@if [[ -f System/$*.ucl ]]; then cp System/$*.ucl $(@D); fi
$(.outdir)/System/%.int: $(.outdir)/System/%.u
@mkdir -p $(@D)
@rm -f System/$*.int
@cd System
$(.winecmd) UCC.exe dumpint $*.u
@cd ../
@cp System/$*.int $(@D)
$(.outdir)/%.u.uz2: $(.outdir)/System/%.u
@rm -f System/$*.u.uz2
@cd System
$(.winecmd) UCC.exe compress $*.u
@cd ../
@cp System/$*.u.uz2 $(@D)
$(.outdir)/%.zip: $(.targets) $(.compressedfiles) $(.helpfiles)
@rm -f $@
@cd $(.outdir)
@7z a -mmt=8 -mx=9 $(@F) System/ $(.compressedfiles:$(.outdir)/%=%) $(.helpfiles:$(.outdir)/%=%)
$(.outdir)/Help/$(project)$(.projectversion)-%: %
@mkdir -p $(@D)
@cp $^ $@
$(.versionfiles): $(.outdir)/%.make: %/make.ini
@mkdir -p $(@D)
@sed -nr "s/.*=[ ]*$*([vV]?[.0-9]*[a-zA-Z0-9]*)$$/$*.version:=\1/gp" $*/make.ini > $@