fix build failure caused by incorrect %setup
[toolchains/unzip.git] / beos / Makefile
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.'