# Makefile -- Makefile for util-linux-1.0 Linux utilities
# Created: Sat Dec 26 20:09:40 1992
# Revised: Wed Sep 14 23:09:37 1994 by faith@cs.unc.edu
# Copyright 1992, 1993, 1994 Rickard E. Faith (faith@cs.unc.edu)
#

SBINDIR=         /sbin
USRSBINDIR=      /usr/sbin
LOGDIR=          /var/adm
VARPATH=         /var

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

CC=        	gcc
OPTFLAGS=	-O2 -m486 -fomit-frame-pointer
#OPTFLAGS=	-O2 -fomit-frame-pointer  # or change on make's command line
CFLAGS=    	-pipe $(OPTFLAGS) -I. \
			-DSBINDIR=\"$(SBINDIR)\" \
			-DUSRSBINDIR=\"$(USRSBINDIR)\" \
			-DLOGDIR=\"$(LOGDIR)\" \
			-DVARPATH=\"$(VARPATH)\"
LDFLAGS=	-s -N

# Where to put man pages?

MAN1= 		arch.1 cal.1 clear.1 col.1 colcrt.1 colrm.1 column.1 ddate.1 \
		dsplit.1 hexdump.1 hostid.1 last.1 logger.1 look.1 mesg.1 \
		reset.1 script.1 strings.1 ul.1 whereis.1 kill.1 more.1 \
		namei.1 rev.1 setterm.1 tsort.1 wall.1 write.1

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

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 \
		lpcntl.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 tunelp.8 \
		update_state.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

BIN=            arch dmesg kill more setserial sync

BIN.NONSHADOW=  login

USRSBIN=	chroot ctrlaltdel frag update_state

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

USRGAMES=       banner

USRBIN.NONSHADOW= chsh newgrp passwd

SHUTDOWNDIR=    $(SBINDIR)
FSCKDIR=        $(SBINDIR)
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 update_state

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

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

sync: sync.S
	/lib/cpp sync.S > sync.s
	as -o sync.o sync.s
	ld -s -N -e _main sync.o -o sync
	-rm sync.s

# Don't use C version of sync any more
#sync: sync.c
#	$(CC) $(CFLAGS) $< -o $@

cfdisk: cfdisk.c
	$(CC) $(CFLAGS) $(LDFLAGS) $< -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.o: pathnames.h
agetty: agetty.o
arch: arch.o
banner: banner.o getopt.o err.o
bdflush: bdflush.o
cal: cal.o getopt.o err.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 err.o
ctrlaltdel: ctrlaltdel.o
ddate: ddate.o
dsplit: dsplit.o
dmesg: dmesg.o
domainname: domainname.o
err.o: err.h
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.o: pathnames.h
last: last.o getopt.o
logger: logger.o getopt.o
login.o: pathnames.h
login: login.o
look: look.o
lpcntl: lpcntl.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.o: pathnames.h
newgrp: newgrp.o
passwd: passwd.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.o: pathnames.h
shutdown: shutdown.o
simpleinit.o: pathnames.h
simpleinit: simpleinit.o
strings: strings.o getopt.o
tsort: tsort.o
tunelp: tunelp.o
ul: ul.o getopt.o
update_state: update_state.sh
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
	chown root $(PASSWDDIR)/passwd
	chmod u+s $(PASSWDDIR)/passwd
	chown root /bin/login
	chmod u+s /bin/login
	install -m 755 getoptprog /usr/bin/getopt
	install -m 644 getoptprog.1 /usr/man/man1/getopt.1

install.shadow: all
	install -d -m 755 /dev $(SBINDIR) /bin \
		$(USRSBINDIR) /usr/bin /usr/games
	install -m 755 $(DEV) /dev
	install -m 755 $(SBIN) $(SBINDIR)
	(cd $(SBINDIR); mv bdflush update)
	install -m 755 $(BIN) /bin
	install -m 755 $(USRSBIN) $(USRSBINDIR)
	install -m 755 $(USRBIN) /usr/bin
	install -m 755 $(USRGAMES) /usr/games
	(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)
	install -d -m 755 /etc /usr/lib
	install -m 644 $(ETC) /etc
	install -m 644 $(USRLIB) /usr/lib
	install -d -m 755 /usr/man/man1 /usr/man/man6 /usr/man/man8 /usr/info
	install -m 644 $(MAN1) /usr/man/man1
	install -m 644 $(MAN6) /usr/man/man6
	install -m 644 $(MAN8) /usr/man/man8
	(cd /usr/man/man8; mv bdflush.8 update.8)
	install -m 644 $(USRINFO) /usr/info
	@@for i in $(SUBDIRS) ;\
	do \
	(cd $$i ; echo "Running make install in $$i..."; \
	$(MAKE) SBINDIR=$(SBINDIR) install); \
	done

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