#
#       Makefile for Mtools
#
# check the Configure file for some examples of device-specific setups
# Berkeley flavors of Unix should include -DBSD in the CFLAGS.  Pick
# a lock method... either -DLOCKF, -DFLOCK, or -DFCNTL and put that
# string in the CFLAGS line below.

#DEST = /usr/local

#ETCDIR = ${DEST}/etc/default		## For SVR4, use /etc/defaults
ETCDIR	= ${DEST}/etc

CC      = gcc

# for Dell
#CFLAGS	= -O -DDELL -DLOCKF -DETCDIR=\"$(ETCDIR)\"

# for generic SVR4
#CFLAGS	= -O -DLOCKF -DLOADDEVS -Wall -Wno-unused -DETCDIR=\"$(ETCDIR)\"
#LDFLAGS =
#SHLIB = -lc -L/usr/ucblib -lucb

# for SPARC Solaris2
#CFLAGS	= -O -DSPARC -DLOCKF -DETCDIR=\"$(ETCDIR)\" -DSOLARIS2

# for SPARC SunOS4
#CFLAGS	= -g -O3 -DNO_STRERROR -DLOADDEVS -DFLOCK -DETCDIR=\"$(ETCDIR)\"

# for Xenix
#CFLAGS = -O -M2e -DINT16 -DXENIX -DLOCKF -DETCDIR=\"$(ETCDIR)\"
#LDFLAGS = -s -M2e -i -f 5000

# for Linux, QMAGIC (locking device files does not work reliably?)
#CFLAGS	= -DLOADDEVS -Wall -m486 -Wno-unused -DETCDIR=\"$(ETCDIR)\" -fno-strength-reduce
#LDFLAGS = -s -N -Wl,-qmagic
#SHLIB =

# for Linux, ELF without debugging
CFLAGS	= -O -DLOADDEVS -m486 -Wall -Wno-unused -DETCDIR=\"$(ETCDIR)\" -DUSE_XDF -fno-strength-reduce
LDFLAGS = -s
SHLIB =

# for Linux, ELF without debugging or XDF
#CFLAGS        = -O -m486 -fomit-frame-pointer -Wall -Wno-unused \
       -DLOADDEVS -DETCDIR=\"$(ETCDIR)\" # -DUSE_XDF
#LDFLAGS = -s
#SHLIB =

# for Ultrix (testing purposes only, as the Decstation has no floppy drive)
#CFLAGS	= -g -DLOADDEVS -Wall -Wno-unused -DETCDIR=\"$(ETCDIR)\" -DBSD_TIME
#LDFLAGS =
#SHLIB =

# for AIX
#CFLAGS	= -g -DLOADDEVS -Wall -Wno-unused -DETCDIR=\"$(ETCDIR)\"
#LDFLAGS =
#SHLIB =

# for HP9000 serie 7xxx under HP-UX
#CFLAGS = -g -DLOADDEVS -Wall -DFCNTL -DHPPA
#LDFLAGS = -z -g


# for Sparc-odd (Sparc reading 1.72 Mb disks)
#CFLAGS	= -O -DLOADDEVS -D_POSIX_SOURCE -traditional -Wall -DSPARC_ODD -DNO_STRERROR -DETCDIR=\"$(ETCDIR)\" # -DFLOCK
#LDFLAGS	= -N
#SHLIB =


LD	= $(CC)
LINT	= lint
SHAR	= shar -a
BINDIR	= ${DEST}/usr/bin
MAN1	= mattrib mbadblocks mcd mcopy mdel mdeltree mdir mlabel mmd mmount \
	mmove mrd mread mren mtools mtype mwrite mkmanifest
MAN1EXT	= 1
MAN1DIR	= ${DEST}/usr/man/man$(MAN1EXT)
MAN5	= mtools
MAN5EXT	= 5
MAN5DIR	= ${DEST}/usr/man/man$(MAN5EXT)
PERM	= 755
SCRIPTPERM = 755
MANPERM	= 644
INSTALL	= install -c
UID	= root
GID	= floppy
#
# for AT&T Unix PC 7300/3b1 style shared libraries.
#SHOBJ	= /lib/crt0s.o /lib/shlib.ifile
#LD	= ld

LINKS=mattrib mbadblocks mcd mcopy mdel mdeltree mdir mformat mlabel \
	mmd mmount mmove mrd mread mren mtype mwrite mtest

OBJS = mdir.o mformat.o hash.o \
	 mcopy.o mmove.o mmd.o mdel.o mlabel.o mattrib.o mcd.o \
	 mmount.o mbadblocks.o \
	 buffer.o devices.o directory.o misc.o signal.o \
	 expand.o fat_free.o fat.o file.o filter.o copyfile.o \
	 init.o match.o parse.o subdir.o force_io.o plain_io.o \
	 xdf_io.o mtools.o vfat.o file_name.o streamcache.o \
	 mk_direntry.o stream.o codepage.o codepages.o toupper.o \
	 config.o

SRCS = mdir.c  mformat.c hash.c \
	 mcopy.c mmove.c mmd.c mdel.c mlabel.c mattrib.c mcd.c \
	 mmount.c mbadblocks.c \
	 buffer.c devices.c directory.c misc.c signal.c \
	 expand.c fat_free.c fat.c file.c filter.c copyfile.c \
	 init.c match.c parse.c subdir.c force_io.c plain_io.c \
	 xdf_io.c mtools.c vfat.c file_name.c streamcache.c \
	 mk_direntry.c stream.c codepage.c codepages.c toupper.c \
	 config.c


#OBJS = mbadblocks.o mcopy.o mdel.o mdir.o misc.o \
#	 mmd.o mmount.o mrd.o mread.o mren.o mtype.o mwrite.o \
#	 buffer.o devices.o dir_make.o dir_read.o dir_write.o \
#	 expand.o fat_free.o fat.o file.o filter.o file_read.o \
#	 init.o is_dir.o match.o parse.o subdir.o force_io.o plain_io.o \
#	 xdf_io.o mtools.o stub.o vfat.o file_name.o streamcache.o \
#	 mk_direntry.o

#SRCS = mbadblocks.c mcd.c mcopy.c mdel.c mdir.c misc.c \
#	 mmd.c mmount.c mrd.c mread.c mren.c mtype.c mwrite.c \
#	 buffer.c devices.c dir_make.c dir_read.c dir_write.c \
#	 expand.c fat_free.c fat.c file.c filter.c file_read.c file_write.c \
#	 init.c is_dir.c match.c parse.c subdir.c force_io.c plain_io.c \
#	 xdf_io.c mtools.c stub.c vfat.c file_name.c streamcache.c \
#	 mk_direntry.c

MKMAN1IFEST = mkmanifest.o

all:	mtools $(LINKS) mkmanifest

mtools:	$(OBJS)
	$(LD) $(LDFLAGS) $(OBJS) $(SHOBJ) -o mtools $(SHLIB)

$(LINKS):	mtools
	for name in $(LINKS); \
	do rm -f $$name && ln mtools $$name; done

mkmanifest:	$(MKMAN1IFEST)
	$(LD) $(LDFLAGS) $(MKMAN1IFEST) $(SHOBJ) -o mkmanifest $(SHLIB)

tidy:
	-rm -f *~ *.orig *.o a.out core 2>/dev/null

clean:	tidy
		-rm -f mtools $(LINKS) mkmanifest 2>/dev/null

install:	$(BINDIR)/mtools install-man install-links \
		$(BINDIR)/mkmanifest install-scripts

$(BINDIR)/mtools: mtools
	rm -f  $(BINDIR)/mtools
	$(INSTALL) -o $(UID) -g $(GID) -m $(PERM) mtools $(BINDIR)/mtools

$(BINDIR)/mkmanifest: mkmanifest 
	rm -f $(BINDIR)/mkmanifest
	$(INSTALL) -o $(UID) -g $(GID) -m $(PERM) mkmanifest $(BINDIR)/mkmanifest

$(ETCDIR)/mtools: mtools.etc
	cp mtools.etc $(ETCDIR)/mtools

install-links: $(BINDIR)/mtools
	cd $(BINDIR) && for name in $(LINKS); \
	do rm -f $$name && ln mtools $$name; done

## "z" is the older version of "gz"; the name is just *too* short
install-scripts: $(BINDIR)/mtools
	@for j in mcheck mxtar uz gz xcopy mcomp; do \
		rm -f $$j ; \
		install -c -m $(SCRIPTPERM) scripts/$$j $(BINDIR)/$$j ; \
		echo $(BINDIR)/$$j mode $(SCRIPTPERM); \
	done
	rm -f $(BINDIR)/z $(BINDIR)/lz
	ln -s uz $(BINDIR)/lz

install-man:
	@for j in $(MAN1); do \
		rm -f $(MAN1DIR)/$$j.$(MAN1EXT); \
		$(INSTALL) -m $(MANPERM) $$j.1 $(MAN1DIR)/$$j.$(MAN1EXT) ; \
		echo $(MAN1DIR)/$$j.$(MAN1EXT) mode $(MANPERM); \
	done
	@for j in $(MAN5); do \
		rm -f $(MAN5DIR)/$$j.$(MAN5EXT) ; \
		$(INSTALL) -m $(MANPERM) $$j.5 $(MAN5DIR)/$$j.$(MAN5EXT) ; \
		echo $(MAN5DIR)/$$j.$(MAN5EXT) mode $(MANPERM); \
	done

depend:
	makedepend -- $(CFLAGS) -- $(SRCS)

# DO NOT DELETE THIS LINE -- make depend depends on it.
