#
#       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.

# for Dell
#CFLAGS	= -O -DDELL -DLOCKF
# for Sparc
#CFLAGS	= -O -DSPARC -DBSD -DFLOCK
# for Xenix
#CFLAGS = -O -M2e -DINT16 -DXENIX -DLOCKF
#LDFLAGS = -s -M2e -i -f 5000

# for Linux (locking device files does not work reliably?)
CFLAGS	= -O2 -DLOADDEVS -DUSE_2M -DUSE_SERIAL -Wall -m486
LDFLAGS = -s -N -Wl,-qmagic

# for Sparc-odd (Sparc reading 1.72 Mb disks)
CC      = gcc
#CFLAGS	= -O -DLOADDEVS -D_POSIX_SOURCE -traditional -Wall -DSPARC_ODD -DNO_STRERROR #-DFLOCK
#LDFLAGS	= -N

LD	= $(CC)
LINT	= lint
SHLIB	=
SHAR	= shar -a
BINDIR	= ${DEST}/usr/bin
ETCDIR	= ${DEST}/etc
MAN1	= mattrib mbadblocks mcd mcopy mdel mdir mformat mlabel mmd mmount 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	= 750
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 mdir mformat mlabel mmd mmount mrd \
      mread mren mtype mwrite
MTOOLS = mattrib.o mbadblocks.o mcd.o mcopy.o mdel.o mdir.o mformat.o misc.o \
	 mlabel.o mmd.o mmount.o mrd.o mread.o mren.o mtype.o mwrite.o \
	 buf_read.o buf_write.o devices.o dir_make.o dir_read.o dir_write.o \
	 expand.o fat_free.o fat_read.o fat_write.o file_read.o file_write.o \
	 init.o is_dir.o match.o parse.o subdir.o mtools.o

MKMAN1IFEST = mkmanifest.o

all:	mtools $(LINKS) mkmanifest

mtools:	$(MTOOLS)
	$(LD) $(LDFLAGS) $(MTOOLS) $(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)

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

spotless:	clean
	-rm -f mtools $(LINKS) 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 $(PERM) scripts/$$j $(BINDIR)/$$j ; \
		echo $(BINDIR)/$$j mode $(PERM); \
	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

buf_read.o:	msdos.h
buf_write.o:	msdos.h
devices.o:	msdos.h
dir_make.o:	msdos.h
dir_read.o:	msdos.h
dir_write.o:	msdos.h
fat_free.o:	msdos.h
fat_read.o:	msdos.h
fat_write.o:	msdos.h
file_read.o:	msdos.h
file_write.o:	msdos.h
init.o:		msdos.h
is_dir.o:	msdos.h
misc.o:		msdos.h

mattrib.o:	msdos.h mattrib.c
mbadblocks.o:	msdos.h mbadblocks.c
mcd.o:		msdos.h mcd.c
mcopy.o:	msdos.h getopt.h mcopy.c
mdel.o:		msdos.h mdel.c
mdir.o:		msdos.h mdir.c
mformat.o:	msdos.h getopt.h mformat.c
mlabel.o:	msdos.h mlabel.c
mmd.o:		msdos.h mmd.c
mmount.o:	msdos.h
mrd.o:		msdos.h mrd.c
mread.o:	msdos.h mread.c
mren.o:		msdos.h mren.c
mtype.o:	msdos.h getopt.h mtype.c
mwrite.o:	msdos.h mwrite.c

parse.o:	msdos.h
subdir.o:	msdos.h

mtools.o:	msdos.h patchlevel.h mtools.c
# DO NOT DELETE THIS LINE -- make depend depends on it.
