# Makefile -- Makefile for util-linux-1.0 Linux utilities
# Created: Sat Dec 26 20:09:40 1992
# Revised: Tue May  3 20:02:28 1994 by faith@cs.unc.edu
# Copyright 1992, 1993, 1994 Rickard E. Faith (faith@cs.unc.edu)
#

ETCBIN=         /sbin
USRETCBIN=      /usr/sbin
WTMPPATH=	/var/adm/wtmp
VARPATH=	/var

CC=        	gcc
CFLAGS=    	-pipe -O2 -m486 -I. -DETCBIN=\"$(ETCBIN)\" \
			-DWTMPPATH=\"$(WTMPPATH)\" -DVARPATH=\"$(VARPATH)\"
LDFLAGS=	-s -N
LDSO_ADDR= 	62f00000
LDSO_ENTRY=	"(0x$(LDSO_ADDR)+32)"

# Where to put man pages?

MAN1= 		arch.1 cal.1 clear.1 col.1 colcrt.1 colrm.1 column.1 \
		hexdump.1 last.1 logger.1 look.1 mesg.1 reset.1 \
		script.1 strings.1 ul.1 uudecode.1 uuencode.1 whereis.1 \
 		domainname.1 hostname.1 kill.1 more.1 namei.1 \
		pwd.1 rev.1 setterm.1 tsort.1 wall.1 write.1

MAN1.NONSHADOW= chsh.1 login.1 newgrp.1 passwd.1

MAN5= 		uuencode.5

MAN6= 		banner.6

MAN8= 		agetty.8 bdflush.8 cfdisk.8 chroot.8 clock.8 ctrlaltdel.8 \
		dmesg.8 fastboot.8 fasthalt.8 fdformat.8 fdisk.8 frag.8 \
		fsck.8 fsck.minix.8 halt.8 ipcrm.8 ipcs.8 kbdrate.8 \
		mkfs.8 mkfs.minix.8 mkswap.8 ramsize.8 rdev.8 reboot.8 \
		renice.8 rootflags.8 setfdprm.8 setserial.8 setsid.8 \
		shutdown.8 simpleinit.8 swapdev.8 sync.8 update.8 vidmode.8

# Where to put binaries?
# See the "install" rule for the links. . .

DEV=            MAKEDEV

SBIN= 		agetty bdflush cfdisk clock fdisk fsck fsck.minix kbdrate \
		mkfs.minix mkswap shutdown simpleinit sln update

BIN=            arch dmesg domainname hostname kill more pwd \
		setserial sync

BIN.NONSHADOW=  login

USRSBIN=	chroot ctrlaltdel frag

USRBIN=		banner cal clear col colcrt colrm column fdformat \
		hexdump ipcrm ipcs last logger look mesg namei \
		rdev renice reset rev script setsid setterm setfdprm \
		strings tsort ul uudecode uuencode wall whereis write

USRBIN.NONSHADOW= chsh newgrp passwd

SHUTDOWNDIR=    $(ETCBIN)
FSCKDIR=        $(ETCBIN)
RDEVDIR=        /usr/bin
PASSWDDIR=	/usr/bin
EDDIR=          /bin

# Where to put datebase files?

ETC=		fdprm
USRLIB=		more.help
USRINFO=        ipc.info

# Subdirectories

SUBDIRS=   	syslogd mount selection time

# Programs requiring special compilation

NEEDS_TERMCAP=  more setterm ul
SCRIPTS= 	clear reset

all: $(SBIN) $(BIN) $(BIN.NONSHADOW) \
		$(USRSBIN) $(USRBIN) $(USRBIN.NONSHADOW) ed getoptprog
	@@for i in $(SUBDIRS) ;\
	do \
	(cd ./$$i && echo "Running make in $$i..." && \
	$(MAKE) ETCBIN=$(ETCBIN)); \
	done

ed:
	(cd ed.posix; \
	$(MAKE) -f Makefile.linux 'CC=gcc $(CFLAGS)' 'LDADD=$(LDFLAGS)' ed)

sln: sln.c
	$(CC) -static $(CFLAGS) $< -o $@

sync: sync.c
	$(CC) -static $(CFLAGS) $< -o $@

cfdisk: cfdisk.c
	$(CC) $(CFLAGS) $< -o $@ -lcurses -ltermcap -lm

%.o: %.c
	$(CC) -c $(CFLAGS) $< -o $@

$(NEEDS_TERMCAP):
	$(CC) $(LDFLAGS) $^ -o $@ -ltermcap

$(SCRIPTS):
	cp $@.sh $@

# Rules for hexdump

hexdump: hexdump.o conv.o display.o getopt.o hexsyntax.o odsyntax.o parse.o
hexdump.o: hexdump.c hexdump.h
conv.o: conv.c hexdump.h
display.o: display.c hexdump.h
hexsyntax.o: hexsyntax.c hexdump.h
odsyntax.o: odsyntax.c hexdump.h
parse.o: parse.c hexdump.h

# Rules for everything else

agetty: agetty.o
arch: arch.o
banner: banner.o getopt.o
bdflush: bdflush.o
cal: cal.o getopt.o
chroot: chroot.o
chsh: chsh.o
clear: clear.sh
clock: clock.o
col: col.o getopt.o
colcrt: colcrt.o
colrm: colrm.o
column: column.o
ctrlaltdel: ctrlaltdel.o
dmesg: dmesg.o
domainname: domainname.o
fdformat: fdformat.o
fdisk: fdisk.o
frag: frag.o
fsck.minix: fsck.minix.o
fsck: fsck.o
getoptprog: getoptprog.o getopt.o
hostname: hostname.o
ipcrm: ipcrm.o
ipcs: ipcs.o
kbdrate: kbdrate.o
kill: kill.o
last: last.o getopt.o
logger: logger.o getopt.o
login: login.o
look: look.o
mesg: mesg.o
mkfs.minix: mkfs.minix.o
mkswap: mkswap.o
more.o: more.c pathnames.h
more: more.o
namei: namei.o
newgrp: newgrp.o
passwd: passwd.o
pwd: pwd.o
rdev: rdev.o
renice: renice.o
reset: reset.sh
rev: rev.o
script: script.o
setfdprm: setfdprm.o
setroot: setroot.o
setserial: setserial.o
setsid: setsid.o
setterm: setterm.o
shutdown: shutdown.o
simpleinit: simpleinit.o
strings: strings.o getopt.o
tsort: tsort.o
ul: ul.o getopt.o
update: update.o
uudecode: uudecode.o
uuencode: uuencode.o getopt.o
wall: wall.o ttymsg.o
whereis: whereis.o
write: write.o

install: all install.shadow
	install -m 755 $(BIN.NONSHADOW) /bin
	install -m 755 $(USRBIN.NONSHADOW) /usr/bin
	install -m 644 $(MAN1.NONSHADOW) /usr/man/man1
	chown root /usr/bin/chsh
	chmod u+s /usr/bin/chsh
	install -m 755 getoptprog /usr/bin/getopt
	install -m 644 getoptprog.1 /usr/man/man1/getopt.1

install.shadow: all
	install -m 755 $(DEV) /dev
	install -m 755 $(SBIN) $(ETCBIN)
	install -m 755 $(BIN) /bin
	install -m 755 $(USRSBIN) $(USRETCBIN)
	install -m 755 $(USRBIN) /usr/bin
	(cd $(SHUTDOWNDIR); ln -sf shutdown reboot)
	(cd $(SHUTDOWNDIR); ln -sf shutdown fastboot)
	(cd $(SHUTDOWNDIR); ln -sf shutdown halt)
	(cd $(SHUTDOWNDIR); ln -sf shutdown fasthalt)
	(cd $(FSCKDIR); ln -sf fsck mkfs)
	(cd $(RDEVDIR); ln -sf rdev swapdev)
	(cd $(RDEVDIR); ln -sf rdev ramsize)
	(cd $(RDEVDIR); ln -sf rdev vidmode)
	(cd $(RDEVDIR); ln -sf rdev rootflags)
	chown root $(PASSWDDIR)/passwd
	chmod u+s $(PASSWDDIR)/passwd
	install -m 644 $(ETC) /etc
	install -m 644 $(USRLIB) /usr/lib
	install -m 644 $(MAN1) /usr/man/man1
	install -m 644 $(MAN5) /usr/man/man5
	install -m 644 $(MAN6) /usr/man/man6
	install -m 644 $(MAN8) /usr/man/man8
	install -m 644 $(USRINFO) /usr/info
	install -m 644 ed.posix/ed.1 /usr/man/man1
	install -m 755 ed.posix/ed $(EDDIR) 
	@@for i in $(SUBDIRS) ;\
	do \
	(cd $$i ; echo "Running make install in $$i..."; \
	$(MAKE) ETCBIN=$(ETCBIN) install); \
	done

clean:
	-rm -f $(SBIN) $(BIN) $(BIN.NONSHADOW) \
		$(USRSBIN) $(USRBIN) $(USRBIN.NONSHADOW) *.o *~ getoptprog
	@@for i in $(SUBDIRS) ;\
	do \
	(cd $$i && echo "Running make clean in $$i..." && \
	$(MAKE) ETCBIN=$(ETCBIN) clean); \
	done
	(cd ed.posix; $(MAKE) -f Makefile.linux clean)
