# Makefile for GNU fileutils.
# Do not use this makefile directly, but only from `../Makefile'.
# Copyright (C) 1986, 1988, 1989, 1990 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

SHELL = /bin/sh

SOURCES = cat.c chmod.c chgrp.c chown.c cmp.c cp-aux.c cp-hash.c cp.c cut.c \
dd.c du.c expand.c head.c install.c ln.c ls.c mkdir.c \
mkfifo.c mv.c mvdir.c paste.c rm.c rmdir.c tac.c \
split.c tail.c touch.c unexpand.c

DISTFILES = Makefile cp.h system.h $(SOURCES)

# Executable files in this directory.
PROGS = cat chmod chgrp chown cmp cp cut dd du expand ginstall head \
	ln dir vdir ls mkdir mkfifo mv paste rm rmdir split \
	tac tail touch unexpand

all: $(PROGS) $(LIBPROGS)
.PHONY: all

install: all
	[ "x$(LIBPROGS)" = x ] || ./ginstall -o root -m 4755 $(LIBPROGS) $(libdir)
	./ginstall $(PROGS) $(bindir)
	cd $(bindir); ./ln -f dir d; ./ln -f vdir v; ./mv -f ginstall install
.PHONY: install

tags: $(SOURCES)
	ctags $(SOURCES)

TAGS: $(SOURCES)
	etags $(SOURCES)

# Use /bin/rm instead of ./rm in case ./rm is compiled for a different
# architecture.
clean:
	/bin/rm -f $(PROGS) $(LIBPROGS) *.o dir.c vdir.c tags TAGS a.out core
.PHONY: clean

dist:
	ln $(DISTFILES) ../$(DISTDIR)/src
.PHONY: dist

# Linking rules.

$(PROGS): ../lib/libfu.a

cat: cat.o
	$(CC) $(LDFLAGS) -o $@ cat.o ../lib/libfu.a $(LIBS)

chmod: chmod.o
	$(CC) $(LDFLAGS) -o $@ chmod.o ../lib/libfu.a $(LIBS)

chgrp: chgrp.o
	$(CC) $(LDFLAGS) -o $@ chgrp.o ../lib/libfu.a $(LIBS)

chown: chown.o
	$(CC) $(LDFLAGS) -o $@ chown.o ../lib/libfu.a $(LIBS)

cmp: cmp.o
	$(CC) $(LDFLAGS) -o $@ cmp.o ../lib/libfu.a $(LIBS)

cp: cp.o cp-hash.o cp-aux.o
	$(CC) $(LDFLAGS) -o $@ cp.o cp-hash.o cp-aux.o ../lib/libfu.a $(LIBS)

cut: cut.o
	$(CC) $(LDFLAGS) -o $@ cut.o ../lib/libfu.a $(LIBS)

dd: dd.o
	$(CC) $(LDFLAGS) -o $@ dd.o ../lib/libfu.a $(LIBS)

dir: dir.o
	$(CC) $(LDFLAGS) -o $@ dir.o ../lib/libfu.a $(LIBS)

du: du.o
	$(CC) $(LDFLAGS) -o $@ du.o ../lib/libfu.a $(LIBS)

expand: expand.o
	$(CC) $(LDFLAGS) -o $@ expand.o ../lib/libfu.a $(LIBS)

ginstall: install.o
	$(CC) $(LDFLAGS) -o $@ install.o ../lib/libfu.a $(LIBS)

head: head.o
	$(CC) $(LDFLAGS) -o $@ head.o ../lib/libfu.a $(LIBS)

ln: ln.o
	$(CC) $(LDFLAGS) -o $@ ln.o ../lib/libfu.a $(LIBS)

ls: ls.o
	$(CC) $(LDFLAGS) -o $@ ls.o ../lib/libfu.a $(LIBS)

mkdir: mkdir.o
	$(CC) $(LDFLAGS) -o $@ mkdir.o ../lib/libfu.a $(LIBS)

mkfifo: mkfifo.o
	$(CC) $(LDFLAGS) -o $@ mkfifo.o ../lib/libfu.a $(LIBS)

mv: mv.o
	$(CC) $(LDFLAGS) -o $@ mv.o ../lib/libfu.a $(LIBS)

mvdir: mvdir.o
	$(CC) $(LDFLAGS) -o $@ mvdir.o ../lib/libfu.a $(LIBS)

paste: paste.o
	$(CC) $(LDFLAGS) -o $@ paste.o ../lib/libfu.a $(LIBS)

rm: rm.o
	$(CC) $(LDFLAGS) -o $@ rm.o ../lib/libfu.a $(LIBS)

rmdir: rmdir.o
	$(CC) $(LDFLAGS) -o $@ rmdir.o ../lib/libfu.a $(LIBS)

split: split.o
	$(CC) $(LDFLAGS) -o $@ split.o ../lib/libfu.a $(LIBS)

tac: tac.o
	$(CC) $(LDFLAGS) -o $@ tac.o ../lib/libfu.a $(LIBS)

tail: tail.o
	$(CC) $(LDFLAGS) -o $@ tail.o ../lib/libfu.a $(LIBS)

touch: touch.o
	$(CC) $(LDFLAGS) -o $@ touch.o ../lib/libfu.a $(LIBS)

unexpand: unexpand.o
	$(CC) $(LDFLAGS) -o $@ unexpand.o ../lib/libfu.a $(LIBS)

vdir: vdir.o
	$(CC) $(LDFLAGS) -o $@ vdir.o ../lib/libfu.a $(LIBS)

# Compilation rules.

chmod.o mkdir.o mkfifo.o: ../lib/modechange.h

cp.o mv.o ln.o: ../lib/backupfile.h

cp.o cp-hash.o cp-aux.o: cp.h

tac.o: ../lib/regex.h

# These rules are workarounds for C compilers that don't accept -o and
# -c at the same time.
dir.o:		ls.c
	cp ls.c dir.c
	$(CC) $(CFLAGS) -DMULTI_COL -c dir.c
	rm dir.c

vdir.o:		ls.c
	cp ls.c vdir.c
	$(CC) $(CFLAGS) -DLONG_FORMAT -c vdir.c
	rm vdir.c
