11
11
# These directories should be in the .gitignore file.
12
12
# Note that wmake intercepts `mkdir` and `rm`.
13
13
OBJECT_DIR = objects
14
+ PACKAGE_DIR = fdpackage
14
15
PRODUCT_DIR = products
15
16
TEST_DIR = tests
16
17
@@ -84,6 +85,36 @@ DOSBOX = flatpak run com.dosbox_x.DOSBox-X
84
85
DOSOPT = -exit -fastlaunch -nolog
85
86
DOSCNF = tests.in/dosbox.cnf
86
87
88
+ # Generates $(VERSION_SH) from the git log.
89
+ GIT_FORMAT = "format:COMMIT_HASH='%h'%nCOMMIT_AUTHOR_EMAIL='%ae'%nCOMMIT_AUTHOR_NAME='%an'%nMAINTAINED_BY='%ae (%an)'%n"
90
+
91
+ # The patch series put in the $(PATCHES_ZIP) file.
92
+ GIT_RANGE = upstream..HEAD
93
+
94
+ # Most apps in FreeDOS distribution are packed by UPX.
95
+ UPX = upx
96
+ UPXOPT = --ultra-brute -qq
97
+ UPXTARGETS = $(PACKAGE_DIR ) /BIN/CABEXT.EXE $(PACKAGE_DIR ) /BIN/CABINFO.EXE
98
+
99
+ # The AdvanceCOMP implementation of zip.
100
+ ZIP = advzip
101
+
102
+ # `-a2` is libdeflate, which does 5% better than InfoZIP.
103
+ # `-a4i1024` is 1k iterations of zopfli, which does 1% better than libdeflate.
104
+ ZIP_DEFLATE = $(ZIP ) -a2
105
+
106
+ # Store the source package, which makes it solid in the binary package.
107
+ ZIP_STORE = $(ZIP ) -a0
108
+
109
+ # InfoZIP equivalents.
110
+ # ZIP = zip
111
+ # ZIP_DEFLATE = $(ZIP) -9 --no-extra --recurse-paths --dos-names
112
+ # ZIP_STORE = $(ZIP) -0 --no-extra --recurse-paths
113
+
114
+ # Source code for the FreeDOS package.
115
+ PATCHES_ZIP = $(PACKAGE_DIR ) /SOURCE/CABEXT/PATCHES.ZIP
116
+ SOURCES_ZIP = $(PACKAGE_DIR ) /SOURCE/CABEXT/SOURCES.ZIP
117
+
87
118
# The default rule.
88
119
all : .SYMBOLIC $(TARGETS )
89
120
@%null
@@ -113,6 +144,10 @@ $(OBJECT_DIR):
113
144
mkdir -p $@ /mspack
114
145
mkdir -p $@ /src
115
146
147
+ $(PACKAGE_DIR ) : fdpackage.in
148
+ cp -r $< $@
149
+ mkdir -p $@ /BIN
150
+
116
151
$(PRODUCT_DIR ) :
117
152
mkdir -p $@
118
153
@@ -126,7 +161,7 @@ $(VERSION_SH): ../configure.ac $(OBJECT_DIR)
126
161
-e ' /AC_INIT/{ print "VERSION=" $$4; exit; }' &
127
162
../configure.ac; &
128
163
if test -d ../../.git && which -s git; then &
129
- echo COMMIT_HASH= ` git rev-parse --short HEAD ` ; &
164
+ git log -1 --pretty= $( GIT_FORMAT ) ; &
130
165
fi ; &
131
166
) > $@
132
167
@$(MADE ) $@
@@ -169,8 +204,19 @@ $(PRODUCT_DIR)/CABINFO.EXE: $(PRODUCT_DIR) $(VERSION_H) $(CABINFO_OBJ)
169
204
$(LD ) $(LFLAGS ) name $@ file { $( CABINFO_OBJ) } | $( LD_SQUELCH)
170
205
@$(MADE ) $@
171
206
207
+ $(PACKAGE_DIR ) /BIN/CABEXT.EXE : $(PRODUCT_DIR ) /CABEXT.EXE
208
+ rm -f $@
209
+ $(UPX ) $(UPXOPT ) -o $@ $<
210
+ @$(MADE ) $@
211
+
212
+ $(PACKAGE_DIR ) /BIN/CABINFO.EXE : $(PRODUCT_DIR ) /CABINFO.EXE
213
+ rm -f $@
214
+ $(UPX ) $(UPXOPT ) -o $@ $<
215
+ @$(MADE ) $@
216
+
172
217
clean : .SYMBOLIC
173
218
rm -fr $(OBJECT_DIR )
219
+ rm -fr $(PACKAGE_DIR )
174
220
rm -fr $(PRODUCT_DIR )
175
221
rm -fr $(TEST_DIR )
176
222
@@ -187,3 +233,46 @@ $(TEST_DIR)/report.txt: .PRECIOUS $(TEST_DIR) $(DOSCNF) $(TARGETS)
187
233
188
234
test : .SYMBOLIC $(TEST_DIR ) /report.txt
189
235
@%null
236
+
237
+ $(SOURCES_ZIP ) : $(PACKAGE_DIR )
238
+ @ ($( SHOPT) &
239
+ cd ../..; &
240
+ git archive HEAD --format=zip -0; &
241
+ ) > $@
242
+ @$(MADE ) $@
243
+
244
+ $(PATCHES_ZIP ) : $(PACKAGE_DIR )
245
+ @ ($( SHOPT) &
246
+ cd $^ :; &
247
+ git format-patch $(GIT_RANGE ) ; &
248
+ if ls * .patch 1> /dev/null 2>&1 ; &
249
+ then &
250
+ $(ZIP_STORE ) $^ . * .patch; &
251
+ rm * .patch; &
252
+ else &
253
+ :> $^ .; &
254
+ fi ; &
255
+ )
256
+ @$(MADE ) $@
257
+
258
+ package : .SYMBOLIC $(PACKAGE_DIR ) $(PATCHES_ZIP ) $(SOURCES_ZIP ) $(UPXTARGETS ) $(VERSION_SH )
259
+ cp ../AUTHORS $(PACKAGE_DIR ) /DOC/CABEXT/AUTHORS.TXT
260
+ cp ../ChangeLog $(PACKAGE_DIR ) /DOC/CABEXT/CHANGES.TXT
261
+ cp ../README $(PACKAGE_DIR ) /DOC/CABEXT/README.TXT
262
+ cp ../NEWS $(PACKAGE_DIR ) /DOC/CABEXT/NEWS.TXT
263
+ cp ../TODO $(PACKAGE_DIR ) /DOC/CABEXT/TODO.TXT
264
+ unix2dos $(PACKAGE_DIR ) /DOC/CABEXT/* .TXT &
265
+ $(PACKAGE_DIR ) /APPINFO/*
266
+ @ ($( SHOPT) &
267
+ . $(VERSION_SH ) ; &
268
+ PRODUCT_DIR=" ` pwd` /$( PRODUCT_DIR) " ; &
269
+ PACKAGE_OUT=" cabextract-$$ VERSION+$$ COMMIT_HASH.dos.zip" ; &
270
+ cd " $( PACKAGE_DIR) " ; &
271
+ sed -e " s/Maintained-by:.*/Maintained-by: $$ MAINTAINED_BY\r/" &
272
+ -e " s/Modified-date:.*/Modified-date: ` date --iso-8601` \r/" &
273
+ -e " s/Version:.*/Version: $$ VERSION\r/" &
274
+ -i APPINFO/CABEXT.LSM; &
275
+ $(ZIP_DEFLATE ) " $$ PRODUCT_DIR/$$ PACKAGE_OUT" * ; &
276
+ cd -; &
277
+ $(MADE ) $(PRODUCT_DIR ) /$$ PACKAGE_OUT &
278
+ )
0 commit comments