Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6725 siemargl 1
######################################################################
2
#
3
# Makefile for Info-ZIP's unzip, unzipsfx, and funzip on BeOS
4
#
5
# Copyright (c) 1998-2006 Info-ZIP
6
#             Chris Herborth (chrish@qnx.com)
7
#
8
# This is the new New and Improved Makefile for BeOS; it will:
9
#
10
# 1) automatically detect your platform (PowerPC or x86) if none is
11
#    specified; the default compiler is CodeWarrior for PowerPC, or
12
#    gcc for x86
13
#
14
# 2) let you cross-compile for the other platform (PowerPC or x86), in
15
#    theory
16
#
17
# 3) let you use Metrowerks CodeWarrior (default) or GNU C to build with
18
#    for either platfor, in theory
19
#
20
# To choose a specific architecture, define the ARCH environment
21
# variable on the make command-line:
22
#
23
# ARCH=what make -f beos/Makefile
24
#
25
# where "what" can be "powerpc" or "x86".
26
#
27
# To choose a specific compiler, define the CC environment variable on
28
# the make command-line:
29
#
30
# CC=compiler make -f beos/Makefile
31
#
32
# where "compiler" can be "mwcc" or "x86".
33
#
34
# Of course, you can combine these two:
35
#
36
# ARCH=powerpc CC=mwcc make -f beos/Makefile
37
#
38
# or:
39
#
40
# CC=gcc ARCH=x86 make -f beos/Makefile
41
#
42
# To automatically install the fresh new unzip, use the "install" target:
43
#
44
# make -f beos/Makefile install
45
 
46
######################################################################
47
# Things that don't change:
48
 
49
SHELL = /bin/sh
50
 
51
# Punish those of you not running on SMP hardware...
52
MAKE  = make -j 4 -f beos/Makefile
53
 
54
LOC=$(LOCAL_UNZIP) -DPASSWD_FROM_STDIN
55
AF=$(LOC)
56
 
57
# UnZipSfx flags
58
SL = -o unzipsfx
59
SL2 = $(LF2)
60
 
61
# fUnZip flags
62
FL = -o funzip
63
FL2 = $(LF2)
64
 
65
# general-purpose stuff
66
CP = cp
67
RM = rm -f
68
LN = ln -sf
69
E =
70
O = .o
71
M = beos
72
 
73
# defaults for crc32 stuff and system-dependent headers
74
CRCA_O =
75
OSDEP_H = beos/beocfg.h
76
 
77
# object files
78
OBJS1 = unzip$O crc32$O crypt$O envargs$O explode$O
79
OBJS2 = extract$O fileio$O globals$O inflate$O list$O match$O
80
OBJS3 = process$O ttyio$O ubz2err$O unreduce$O unshrink$O zipinfo$O
81
OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $M$O $(BEOS_MAIN)
82
LOBJS = $(OBJS)
83
OBJSDLL = $(OBJS) api$O
84
OBJX = unzipsfx$O crc32_$O crypt_$O extract_$O fileio_$O globals_$O \
85
	inflate_$O match_$O process_$O ttyio_$O ubz2err_$O $M_$O $(BEOS_MAIN)
86
LOBJX = $(OBJX)
87
OBJF = funzip$O crc32f$O cryptf$O globalsf$O inflatef$O ttyiof$O
88
UNZIP_H = unzip.h unzpriv.h globals.h $(OSDEP_H)
89
 
90
# installation
91
INSTALL = install
92
# on some systems, manext=l and MANDIR=/usr/man/man$(manext) may be appropriate
93
manext = 1
94
prefix = /boot/home/config
95
BINDIR = $(prefix)/bin#			where to install executables
96
MANDIR = $(prefix)/man/man$(manext)#	where to install man pages
97
INSTALLEDBIN = $(BINDIR)/funzip$E $(BINDIR)/zipinfo$E $(BINDIR)/unzipsfx$E \
98
	$(BINDIR)/unzip$E
99
INSTALLEDMAN = $(MANDIR)/unzip.$(manext) $(MANDIR)/funzip.$(manext) \
100
	$(MANDIR)/unzipsfx.$(manext) $(MANDIR)/zipinfo.$(manext)
101
#
102
UNZIPS = unzip$E funzip$E unzipsfx$E zipinfo$E
103
# this is a little ugly...well, no, it's a lot ugly:
104
MANS = man/unzip.1 man/unzipsfx.1 man/zipinfo.1 man/funzip.1 man/zipgrep.1
105
DOCS = unzip.txt unzipsfx.txt zipinfo.txt funzip.txt zipgrep.txt
106
 
107
######################################################################
108
# Things that change:
109
 
110
# Select an architecture:
111
ifndef ARCH
112
MACHINE=$(shell uname -m)
113
ifeq "$(MACHINE)" "BePC"
114
ARCH=x86
115
CC=gcc
116
else
117
ARCH=powerpc
118
CC=mwcc
119
endif
120
endif
121
 
122
# Now select compiler flags and whatnot based on the ARCH and CC:
123
WHAT=$(ARCH)-$(CC)
124
 
125
ifeq "$(WHAT)" "powerpc-mwcc"
126
CC=mwccppc
127
LD=mwccppc
128
CF=-w9 -O7 -opt schedule604 -rostr -I. $(LOC)
129
LF=-o unzip
130
LF2=-warn -L/boot/develop/lib/ppc -lbe -lroot
131
BEOS_MAIN=beosmain$O
132
TARGET=$(UNZIPS)
133
endif
134
 
135
ifeq "$(WHAT)" "powerpc-gcc"
136
CC=gcc
137
LD=gcc
138
CF=-O3 -mcpu=604 -Wall -ansi -I. -I/boot/develop/headers/be/support \
139
   -I/boot/develop/headers/be/storage $(LOC)
140
LF=-o unzip
141
LF2=-L/boot/develop/lib/ppc -lbe -lroot
142
BEOS_MAIN=beosmain$O
143
TARGET=$(UNZIPS)
144
endif
145
 
146
# This isn't likely to happen for R4 or later...
147
ifeq "$(WHAT)" "x86-mwcc"
148
CC=mwccx86
149
LD=mwccx86
150
CF=-O2 -w9 -I. $(LOC)
151
LF=-o unzip
152
LF2=-warn -L/boot/develop/lib/x86 -lbe -lroot
153
BEOS_MAIN=beosmain$O
154
TARGET=$(UNZIPS)
155
endif
156
 
157
ifeq "$(WHAT)" "x86-gcc"
158
CC=gcc
159
LD=gcc
160
CF=-O3 -mpentiumpro \
161
   -Wall -Wno-multichar -Wno-trigraphs \
162
   -ansi -I. -I/boot/develop/headers/be/support \
163
   -I/boot/develop/headers/be/storage $(LOC)
164
LF=-o unzip
165
LF2=-L/boot/develop/lib/x86 -lbe -lroot
166
BEOS_MAIN=beosmain$O
167
TARGET=$(UNZIPS)
168
endif
169
 
170
ifndef TARGET
171
TARGET=help
172
endif
173
 
174
######################################################################
175
# Helpful targets
176
all:
177
	@echo 'TARGET = $(TARGET)'
178
	@echo 'ARCH   = $(ARCH)'
179
	@echo 'CC     = $(CC)'
180
	if [ -n "$(TARGET)" ] ; then \
181
		$(MAKE) CC=$(CC) CF="$(CF)" LD="$(LD)" \
182
			LF="$(LF)" LF2="$(LF2)" CCPP="$(CC)" CPPF="$(CF)" \
183
			OBJS="$(OBJS)" LOBJS="$(LOBJS)" OBJX="$(OBJX)" \
184
			LOBJX="$(LOBJX)" $(TARGET) ; \
185
	else \
186
		$(MAKE) help ; \
187
	fi
188
 
189
help:
190
	@echo ''
191
	@echo "This Makefile lets you build Info-ZIP's zip."
192
	@echo ''
193
	@echo 'To build zip for this computer using the default compiler, just do:'
194
	@echo ''
195
	@echo '	make -f beos/Makefile'
196
	@echo ''
197
	@echo 'To build zip for a specific architecture using a specific'
198
	@echo 'compiler, do:'
199
	@echo ''
200
	@echo '	ARCH=cpu CC=compiler make -f beos/Makefile'
201
	@echo ''
202
	@echo 'Where:'
203
	@echo '	cpu is either "powerpc" or "x86"'
204
	@echo '	compiler is either "mwcc" or "gcc"'
205
	@echo ''
206
 
207
######################################################################
208
# Basic compile instructions and dependencies
209
 
210
# this is for GNU make; comment out and notify zip-bugs if it causes errors
211
.SUFFIXES:	.c .o
212
 
213
# default for compiling C files
214
.c.o:
215
	$(CC) -c $(CF) $*.c
216
 
217
 
218
unzips:		$(UNZIPS)
219
objs:		$(OBJS)
220
objsdll:	$(OBJSDLL)
221
docs:		$(DOCS)
222
unzipsman:	unzips docs
223
unzipsdocs:	unzips docs
224
 
225
 
226
unzip$E:	$(OBJS) beos/unzip.rsc
227
	$(LD) $(LF) $(LOBJS) $(LF2)
228
	chmod +x unzip$E
229
	xres -o unzip$E beos/unzip.rsc
230
	mimeset -f -all unzip$E
231
 
232
unzipsfx$E:	$(OBJX) beos/unzipsfx.rsc
233
	$(LD) $(SL) $(LOBJX) $(SL2)
234
	chmod +x unzipsfx$E
235
	xres -o unzipsfx$E beos/unzipsfx.rsc
236
	mimeset -f -all unzipsfx
237
 
238
funzip$E:	$(OBJF)
239
	$(LD) $(FL) $(OBJF) $(FL2)
240
	chmod +x funzip$E
241
 
242
zipinfo$E:	unzip$E
243
	$(LN) unzip$E zipinfo$E
244
 
245
 
246
crc32$O:	crc32.c $(UNZIP_H) zip.h crc32.h
247
crypt$O:	crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
248
envargs$O:	envargs.c $(UNZIP_H)
249
explode$O:	explode.c $(UNZIP_H)
250
extract$O:	extract.c $(UNZIP_H) crc32.h crypt.h
251
fileio$O:	fileio.c $(UNZIP_H) crc32.h crypt.h ttyio.h ebcdic.h
252
funzip$O:	funzip.c $(UNZIP_H) crc32.h crypt.h ttyio.h
253
globals$O:	globals.c $(UNZIP_H)
254
inflate$O:	inflate.c inflate.h $(UNZIP_H)
255
list$O:		list.c $(UNZIP_H)
256
match$O:	match.c $(UNZIP_H)
257
process$O:	process.c $(UNZIP_H)
258
ttyio$O:	ttyio.c $(UNZIP_H) zip.h crypt.h ttyio.h
259
ubz2err$O:	ubz2err.c $(UNZIP_H)
260
unreduce$O:	unreduce.c $(UNZIP_H)
261
unshrink$O:	unshrink.c $(UNZIP_H)
262
unzip$O:	unzip.c $(UNZIP_H) crypt.h unzvers.h consts.h
263
zipinfo$O:	zipinfo.c $(UNZIP_H)
264
 
265
# unzipsfx compilation section
266
unzipsfx$O:	unzip.c $(UNZIP_H) crypt.h unzvers.h consts.h
267
	$(CP) unzip.c unzipsfx.c
268
	$(CC) -c $(CF) -DSFX unzipsfx.c
269
	$(RM) unzipsfx.c
270
 
271
crc32_$O:	crc32.c $(UNZIP_H) zip.h crc32.h
272
	$(CP) crc32.c crc32_.c
273
	$(CC) -c $(CF) -DSFX crc32_.c
274
	$(RM) crc32_.c
275
 
276
crypt_$O:	crypt.c $(UNZIP_H) zip.h crypt.h ttyio.h
277
	$(CP) crypt.c crypt_.c
278
	$(CC) -c $(CF) -DSFX crypt_.c
279
	$(RM) crypt_.c
280
 
281
extract_$O:	extract.c $(UNZIP_H) crc32.h crypt.h
282
	$(CP) extract.c extract_.c
283
	$(CC) -c $(CF) -DSFX extract_.c
284
	$(RM) extract_.c
285
 
286
fileio_$O:	fileio.c $(UNZIP_H) crc32.h crypt.h ttyio.h ebcdic.h
287
	$(CP) fileio.c fileio_.c
288
	$(CC) -c $(CF) -DSFX fileio_.c
289
	$(RM) fileio_.c
290
 
291
globals_$O:	globals.c $(UNZIP_H)
292
	$(CP) globals.c globals_.c
293
	$(CC) -c $(CF) -DSFX globals_.c
294
	$(RM) globals_.c
295
 
296
inflate_$O:	inflate.c inflate.h $(UNZIP_H) crypt.h
297
	$(CP) inflate.c inflate_.c
298
	$(CC) -c $(CF) -DSFX inflate_.c
299
	$(RM) inflate_.c
300
 
301
process_$O:	process.c $(UNZIP_H) crc32.h
302
	$(CP) process.c process_.c
303
	$(CC) -c $(CF) -DSFX process_.c
304
	$(RM) process_.c
305
 
306
ttyio_$O:	ttyio.c $(UNZIP_H) zip.h crypt.h ttyio.h
307
	$(CP) ttyio.c ttyio_.c
308
	$(CC) -c $(CF) -DSFX ttyio_.c
309
	$(RM) ttyio_.c
310
 
311
ubz2err$O:	ubz2err.c $(UNZIP_H)
312
	$(CP) ubz2err.c ubz2err_.c
313
	$(CC) -c $(CF) -DSFX ubz2err_.c
314
	$(RM) ubz2err_.c
315
 
316
# funzip compilation section
317
crc32f$O:	crc32.c $(UNZIP_H) zip.h crc32.h
318
	$(CP) crc32.c crc32f.c
319
	$(CC) -c $(CF) -DFUNZIP crc32f.c
320
	$(RM) crc32f.c
321
 
322
cryptf$O:	crypt.c $(UNZIP_H) zip.h crypt.h crc32.h ttyio.h
323
	$(CP) crypt.c cryptf.c
324
	$(CC) -c $(CF) -DFUNZIP cryptf.c
325
	$(RM) cryptf.c
326
 
327
globalsf$O:	globals.c $(UNZIP_H)
328
	$(CP) globals.c globalsf.c
329
	$(CC) -c $(CF) -DFUNZIP globalsf.c
330
	$(RM) globalsf.c
331
 
332
inflatef$O:	inflate.c inflate.h $(UNZIP_H) crypt.h
333
	$(CP) inflate.c inflatef.c
334
	$(CC) -c $(CF) -DFUNZIP inflatef.c
335
	$(RM) inflatef.c
336
 
337
ttyiof$O:	ttyio.c $(UNZIP_H) zip.h crypt.h ttyio.h
338
	$(CP) ttyio.c ttyiof.c
339
	$(CC) -c $(CF) -DFUNZIP ttyiof.c
340
	$(RM) ttyiof.c
341
 
342
# BeOS specific code
343
beos$O:		beos/beos.c $(UNZIP_H) unzvers.h beos/beos.h
344
	$(CC) -c $(CF) beos/beos.c
345
 
346
beosmain$O:	beos/beosmain.cpp $(UNZIP_H) unzvers.h
347
	$(CCPP) -c $(CPPF) beos/beosmain.cpp
348
 
349
# version() not used by unzipsfx, so no unzvers.h dependency
350
beos_$O:	beos/beos.c $(UNZIP_H) beos/beos.h		# unzipsfx only
351
	$(CP) beos/beos.c beos_.c
352
	$(CC) -c $(CF) -Ibeos -DSFX beos_.c
353
	$(RM) beos_.c
354
 
355
beosmain_$O:	beos/beosmain.cpp $(UNZIP_H)			# unzipsfx only
356
	$(CP) beos/beosmain.cpp beosmain_.cpp
357
	$(CCPP) -c $(CPPF) -Ibeos -DSFX beosmain_.cpp
358
	$(RM) beosmain_.cpp
359
 
360
 
361
# this really only works for Unix targets, unless E and O specified on cmd line
362
clean:
363
	-rm -f $(UNZIPS) $(OBJS) $(OBJF) $(OBJX) api$O apihelp$O crc_gcc$O \
364
	  unzipstb$O beosmain.o beosmain_.o
365
 
366
install:	all
367
	$(INSTALL) -m 755 $(UNZIPS) $(BINDIR)
368
	mimeset -f -all $(BINDIR)/unzip
369
	mimeset -f -all $(BINDIR)/unzipsfx
370
	$(RM) $(BINDIR)/zipinfo$E
371
	$(LN) unzip$E $(BINDIR)/zipinfo$E
372
	$(RM) $(BINDIR)/zipgrep$E
373
	$(INSTALL) -m 755 unix/zipgrep $(BINDIR)/zipgrep$E
374
	$(INSTALL) -m 644 man/unzip.1 $(MANDIR)/unzip.$(manext)
375
	$(INSTALL) -m 644 man/unzipsfx.1 $(MANDIR)/unzipsfx.$(manext)
376
	$(INSTALL) -m 644 man/zipinfo.1 $(MANDIR)/zipinfo.$(manext)
377
	$(INSTALL) -m 644 man/funzip.1 $(MANDIR)/funzip.$(manext)
378
	$(INSTALL) -m 644 man/zipgrep.1 $(MANDIR)/zipgrep.$(manext)
379
	$(INSTALL) -m 644 $(DOCS) $(MANDIR)
380
 
381
# alternatively, could use zip method:  -cd $(BINDIR); rm -f $(UNZIPS)  [etc.]
382
uninstall:
383
	rm -f $(INSTALLEDBIN) $(INSTALLEDMAN)
384
 
385
 
386
TESTZIP = testmake.zip	# the test zipfile
387
 
388
# test some basic features of the build
389
test:		check
390
 
391
check:	unzips
392
	@echo '  This is a Unix-specific target.  (Just so you know.)'
393
	@echo '  (Should work ok on BeOS... [cjh])'
394
	if test ! -f $(TESTZIP); then \
395
		echo "  error:  can't find test file $(TESTZIP)"; exit 1; fi
396
#
397
	echo "  testing extraction"
398
	./unzip -b $(TESTZIP) testmake.zipinfo
399
	if test $? ; then \
400
	    echo "  error:  file extraction from $(TESTZIP) failed"; exit 1; fi
401
#
402
	echo '  testing zipinfo (unzip -Z)'
403
	./unzip -Z $(TESTZIP) > testmake.unzip-Z
404
	if diff testmake.unzip-Z testmake.zipinfo; then ;; else \
405
	    echo '  error:  zipinfo output doesn't match stored version'; fi
406
	$(RM) testmake.unzip-Z testmake.zipinfo
407
#
408
	echo '  testing unzip -d exdir option'
409
	./unzip -b $(TESTZIP) -d testun
410
	cat testun/notes
411
#
412
	echo '  testing unzip -o and funzip (ignore funzip warning)'
413
	./unzip -boq $(TESTZIP) notes -d testun
414
	./funzip < $(TESTZIP) > testun/notes2
415
	if diff testun/notes testun/notes2; then ;; else \
416
	    echo 'error:  funzip output disagrees with unzip'; fi
417
#
418
	echo '  testing unzipsfx (self-extractor)'
419
	cat unzipsfx $(TESTZIP) > testsfx
420
	$(CHMOD) 0700 testsfx
421
	./testsfx -b notes
422
	if diff notes testun/notes; then ;; else \
423
	    echo '  error:  unzipsfx file disagrees with unzip'; fi
424
	$(RM) testsfx notes testun/notes testun/notes2
425
	rmdir testun
426
#
427
	echo '  testing complete.'