# Makefile for defrag, the Linux filesystem defragmenter
#
# Copyright (C) 1992, 1993, 1994 Stephen Tweedie (sct@dcs.ed.ac.uk)
# This file may be distributed under the terms of the GNU
# General Public License. 
#
# Note - you need GNU make version 3.70 or later to run this makefile.

VERSION = 0.6

BINDIR = /sbin
MANDIR = /usr/man

CC = gcc
RANLIB = ranlib
ETAGS = /usr/emacs/etc/etags -T

# For 486-specific optimisations:
#CC = gcc -m486

#For the brave...
#CFLAGS = -N -O6 -fomit-frame-pointer -Wall -DNODEBUG
#LDFLAGS = -N -s

ifdef DEBUG
CFLAGS = -Wall -g
LDFLAGS = -g
else
CFLAGS = -Wall -O2 -fomit-frame-pointer
LDFLAGS = -s
endif
LIBS= -lncurses

# Comment this out if you don't want QMAGIC executables.
LDFLAGS:=$(LDFLAGS) -Xlinker -qmagic

PROGS = e2defrag defrag edefrag xdefrag e2dump xdump frag
MAN = defrag.8 frag.8
OBJS = defrag.o buffers.o display.o misc.o

all:	$(PROGS)

defrag:		libminix.a
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
edefrag:	libext.a
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
e2defrag:	libext2.a
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
xdefrag:	libxia.a
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)

e2dump:		e2dump.ext2.o libext2.a
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
xdump:		xdump.xia.o libxia.a
	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)

libminix.a: libminix.a($(OBJS:.o=.minix.o) minix.minix.o)
	$(RANLIB) $@
libext.a: libext.a($(OBJS:.o=.ext.o) ext.ext.o)
	$(RANLIB) $@
libext2.a: libext2.a($(OBJS:.o=.ext2.o) ext2.ext2.o)
	$(RANLIB) $@
libxia.a: libxia.a($(OBJS:.o=.xia.o) xia.xia.o)
	$(RANLIB) $@

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

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

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

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

version.h:
	echo "char *version = \"$(VERSION)\";" >> version.h


install: all
	install $(PROGS) $(BINDIR)
	install $(MAN) $(MANDIR)/man8

	
clean:
	rm -f $(PROGS) *.o *.a core .depend version.h

spotless: clean
	rm -f a.out *.i *.s *~ .depend TAGS
	
tags:
	$(ETAGS) *.[ch] README CHANGES INSTALL

distribution: spotless
	(cd ..; \
	 (echo RCS | \
	 tar -cvzf defrag-$(VERSION).tar.gz -X - defrag-$(VERSION)))

PHONY: dep depend
dep depend .depend: version.h
	rm -f .depend
# fudge for dependencies for separate filesystem binaries.
# Try to avoid referring to intermediate object files in the .depend
# file, so that make will delete them automatically once they have
# been incorporated into their lib???.a archive files.
	for f in $(OBJS) ; do \
	  g=`basename $$f .o`; \
	  $(CPP) -M -DMINIX $$g.c \
		| sed "s/$$f/libminix.a($$g.minix.o)/" >> .depend; \
	  $(CPP) -M -DEXT2FS $$g.c \
		| sed "s/$$f/libext2.a($$g.ext2.o)/" >> .depend; \
	  $(CPP) -M -DXIAFS $$g.c \
		| sed "s/$$f/libxia.a($$g.xia.o)/" >> .depend; \
	  $(CPP) -M -DEXTFS $$g.c \
		| sed "s/$$f/libext.a($$g.ext.o)/" >> .depend; \
	done
	\
	$(CPP) -M -DMINIXFS minix.c \
		| sed "s/^\([a-z0-9]*\).o/libminix.a(\1.minix.o)/" >> .depend
	$(CPP) -M -DEXT2FS ext2.c \
		| sed "s/^\([a-z0-9]*\).o/libext2.a(\1.ext2.o)/" >> .depend
	$(CPP) -M -DXIAFS xia.c  \
		| sed "s/^\([a-z0-9]*\).o/libxia.a(\1.xia.o)/" >> .depend
	$(CPP) -M -DEXTFS ext.c \
		| sed "s/^\([a-z0-9]*\).o/libext.a(\1.ext.o)/" >> .depend
	\
	$(CPP) -M -DEXT2FS e2dump.c\
		| sed "s/^\([a-z0-9]*\).o/\1.ext2.o/" >> .depend
	$(CPP) -M -DXIAFS xdump.c \
		| sed "s/^\([a-z0-9]*\).o/\1.xia.o/" >> .depend
include .depend
