1#
2# Root directory. Mainly useful for package building; leave empty for
3# normal installation.
4#
5ROOT=
6
7#
8# The destination directory for the "sh" and "jsh" binaries.
9#
10SV3BIN=/usr/5bin
11
12#
13# Location for manual pages (with man1 below).
14#
15MANDIR=/usr/share/man/5man
16
17#
18# Enable this definition if spell checking should be done for the
19# "cd" special command.
20#
21#SPELL=-DSPELL
22
23#
24# A BSD-compatible install command.
25#
26UCBINST=/usr/ucb/install
27
28#
29# The strip command that is used at installation time.
30#
31STRIP=strip
32
33#
34# A command to create the link from "jsh" to "sh".
35#
36LNS=ln -s
37
38#
39# Uncomment the following line to compile with diet libc. -Ifakewchar might
40# be usable for other environments without wide character support too.
41#
42#CC=diet gcc -Ifakewchar
43
44#
45# Compiler flags.
46#
47CFLAGS=-O
48
49#
50# Flags for the C preprocessor.
51#
52CFLAGS=-D_GNU_SOURCE
53
54#
55# A define for large file support, if necessary.
56#
57LARGEF=-D_FILE_OFFSET_BITS=64L
58
59#
60# The compiler warning options.
61#
62WERROR=-Werror
63WARN = -Wchar-subscripts -Wformat -Wno-format-y2k -Wimplicit \
64	-Wmissing-braces -Wsequence-point -Wreturn-type -Wtrigraphs \
65	-Wunused-function -Wunused-label -Wunused-variable -Wunused-value \
66	-Wuninitialized -Wmultichar -Wpointer-arith $(WERROR)
67WARN=
68
69#
70# End of adjustable settings.
71#
72
73OBJ = args.o blok.o bltin.o cmd.o ctype.o defs.o echo.o error.o \
74	expand.o fault.o func.o hash.o hashserv.o io.o jobs.o \
75	macro.o main.o msg.o name.o print.o pwd.o service.o \
76	setbrk.o stak.o string.o test.o ulimit.o word.o xec.o \
77	gmatch.o getopt.o strsig.o version.o mapmalloc.o umask.o
78
79.c.o: ; $(CC) -c $(CFLAGS) $(CPPFLAGS) $(LARGEF) $(SPELL) $(WARN) $<
80
81all: sh jsh sh.1.out
82
83sh: $(OBJ)
84	$(CC) $(LDFLAGS) $(OBJ) $(LIBS) -o sh
85
86jsh: sh
87	rm -f jsh
88	$(LNS) sh jsh
89
90sh.1.out: sh.1
91	test "x$(SPELL)" != x && cat sh.1 >$@ || \
92		sed '/BEGIN SPELL/,/END SPELL/d' <sh.1 >$@
93
94install: all
95	test -d $(ROOT)$(SV3BIN) || mkdir -p $(ROOT)$(SV3BIN)
96	$(UCBINST) -c -m 755 sh $(ROOT)$(SV3BIN)/sh
97	$(STRIP) $(ROOT)$(SV3BIN)/sh
98	rm -f $(ROOT)$(SV3BIN)/jsh
99	cd $(ROOT)$(SV3BIN) && $(LNS) sh jsh
100	test -d $(ROOT)$(MANDIR)/man1 || mkdir -p $(ROOT)$(MANDIR)/man1
101	$(UCBINST) -c -m 644 sh.1.out $(ROOT)$(MANDIR)/man1/sh.1
102	rm -f $(ROOT)$(MANDIR)/man1/jsh.1
103	cd $(ROOT)$(MANDIR)/man1 && $(LNS) sh.1 jsh.1
104
105maninstall: sh.1.out
106	$(UCBINST) -c -m 644 sh.1.out $(ROOT)$(MANDIR)/man1/sh.1
107
108diet:
109	$(MAKE) CC='diet gcc -Ifakewchar' CFLAGS='-Os -fomit-frame-pointer' \
110		STRIP='strip -s -R .comment -R .note' WERROR=
111
112dietinstall:
113	ldd sh >/dev/null 2>&1 && { echo dynamic; exit 1; } || :
114	$(MAKE) install SV3BIN=/sbin
115
116world:
117	$(MAKE) clean
118	$(MAKE)
119	sudo $(MAKE) install
120	$(MAKE) clean
121	$(MAKE) diet
122	sudo $(MAKE) dietinstall
123	$(MAKE) clean
124
125clean:
126	rm -f $(OBJ) sh jsh sh.1.out core log *~
127
128mrproper: clean
129
130args.o: args.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
131blok.o: blok.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
132bltin.o: bltin.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h \
133  sym.h hash.h
134cmd.o: cmd.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h sym.h
135ctype.o: ctype.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
136defs.o: defs.c mode.h name.h
137echo.o: echo.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
138error.o: error.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
139expand.o: expand.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
140fault.o: fault.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
141func.o: func.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
142getopt.o: getopt.c
143gmatch.o: gmatch.c mbtowi.h
144hash.o: hash.c hash.h defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
145hashserv.o: hashserv.c hash.h defs.h mac.h mode.h name.h stak.h brkincr.h \
146  ctype.h
147io.o: io.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h dup.h
148jobs.o: jobs.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
149macro.o: macro.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h \
150  sym.h
151main.o: main.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h sym.h \
152  hash.h timeout.h dup.h
153mapmalloc.o: mapmalloc.c
154msg.o: msg.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h sym.h
155name.o: name.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
156print.o: print.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
157pwd.o: pwd.c mac.h defs.h mode.h name.h stak.h brkincr.h ctype.h
158service.o: service.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
159setbrk.o: setbrk.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
160stak.o: stak.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
161string.o: string.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
162strsig.o: strsig.c
163test.o: test.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
164ulimit.o: ulimit.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
165umask.o: umask.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h
166version.o: version.c
167word.o: word.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h sym.h
168xec.o: xec.c defs.h mac.h mode.h name.h stak.h brkincr.h ctype.h sym.h \
169  hash.h
170