#  Copyright 1996-2004,2006-2010 Alain Knaff.
#  This file is part of mtools.
#
#  Mtools 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 3 of the License, or
#  (at your option) any later version.
#
#  Mtools 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 Mtools.  If not, see <http://www.gnu.org/licenses/>.
#
#       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.

# User specified flags
USERCFLAGS = 
USERLDFLAGS =
USERLDLIBS =

MAKEINFO = makeinfo
TEXI2DVI = texi2dvi
TEXI2PDF = texi2pdf
TEXI2HTML = texi2html


# do not edit below this line
# =============================================================================

SHELL = /bin/sh

top_srcdir=@top_srcdir@
srcdir=@srcdir@
VPATH=@srcdir@

prefix      = @prefix@
exec_prefix = @exec_prefix@
bindir      = @bindir@
infodir     = @infodir@
mandir      = @mandir@
sysconfdir  = @sysconfdir@
datarootdir = @datarootdir@

CC         = @CC@
CXX        = @CXX@
MYCFLAGS   = @CFLAGS@
MYCXXFLAGS = @CXXFLAGS@
CPPFLAGS   = @CPPFLAGS@
HOST_ID    = @HOST_ID@
DEFS       = @DEFS@ -DSYSCONFDIR=\"$(sysconfdir)\" $(HOST_ID)

LDFLAGS     = @LDFLAGS@
LIBS        = @LIBS@
SHLIB       = @SHLIB@
MACHDEPLIBS = @MACHDEPLIBS@	
LN_S        = @LN_S@

INSTALL         = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA    = @INSTALL_DATA@
INSTALL_INFO	= @INSTALL_INFO@

.SUFFIXES:
.SUFFIXES: .o .c
.SUFFIXES: .o .c

MAN1 = floppyd.1 floppyd_installtest.1 mattrib.1 mbadblocks.1 mcat.1 mcd.1 \
mclasserase.1 mcopy.1 mdel.1 mdeltree.1 mdir.1 mdu.1 mformat.1  minfo.1 \
mkmanifest.1 mlabel.1 mmd.1 mmount.1 mmove.1 mpartition.1 \
mrd.1 mren.1 mshortname.1 mshowfat.1 mtoolstest.1 mtools.1 mtype.1 mzip.1
MAN1EXT	= 1
MAN1DIR	= $(DESTDIR)$(mandir)/man${MAN1EXT}
MAN5	= mtools.5
MAN5EXT	= 5
MAN5DIR	= $(DESTDIR)$(mandir)/man${MAN5EXT}

# all files in this directory included in the distribution
DIST = \
COPYING Changelog INSTALL Makefile Makefile.in README Release.notes \
buffer.c buffer.h charsetConv.c codepage.h codepages.c config.c \
config.guess config.h.in config.log config.sub configure configure.in \
copyfile.c devices.c devices.h dirCache.c dirCache.h directory.c direntry.c \
expand.c fat.c \
fat_free.c file.c file.h file_name.h file_name.c files filter.c floppyd.1 \
floppyd.c floppyd_io.c floppyd_io.h force_io.c fs.h fsP.h \
getopt.h hash.c htable.h init.c llong.c mainloop.c match.c mattrib.1 \
mattrib.c mbadblocks.1 mbadblocks.c mcat.1 mcat.c mcd.1 mcd.c mclasserase.c \
mcopy.1 \
mcopy.c mdel.1 mdel.c mdeltree.1 mdir.1 mdir.c mdu.c mdu.1 mformat.1 \
mformat.c minfo.c \
misc.c tty.c scsi.c missFuncs.c mk_direntry.c mkmanifest.1 mkmanifest.c \
mlabel.1 mlabel.c mmd.1 mmd.c mmount.1 mmount.c mmove.1 mmove.c \
mpartition.1 mpartition.c mrd.1 \
mren.1 msdos.h mshortname.1 mshowfat.1 mtoolstest.1 mtools.1 mtools.5 mtools.c \
mtools.conf mtools.h mtype.1 nameclash.h patchlevel.c \
plain_io.c plain_io.h precmd.c privileges.c scripts signal.c stream.c stream.h \
streamcache.c streamcache.h subdir.c strtonum.c sysincludes.h unixdir.c todo \
vfat.c vfat.h xdf_io.c xdf_io.h

OBJS1 = buffer.o charsetConv.o codepages.o config.o copyfile.o \
devices.o dirCache.o directory.o direntry.o expand.o fat.o fat_free.o file.o  \
file_name.o filter.o floppyd_io.o force_io.o hash.o init.o llong.o lockdev.o \
match.o mainloop.o mattrib.o mbadblocks.o mcat.o mcd.o mclasserase.o mcopy.o \
mdel.o mdir.o mdoctorfat.o mdu.o \
mformat.o minfo.o misc.o missFuncs.o mk_direntry.o mlabel.o mmd.o mmount.o \
mmove.o mpartition.o mshortname.o mshowfat.o mzip.o mtools.o old_dos.o \
patchlevel.o plain_io.o precmd.o privileges.o scsi.o signal.o stream.o \
streamcache.o subdir.o unixdir.o tty.o vfat.o xdf_io.o strtonum.o

OBJS2 = missFuncs.o mkmanifest.o misc.o patchlevel.o

OBJS3 = floppyd.o llong.o lockdev.o

OBJS4 = floppyd_installtest.o misc.o expand.o privileges.o strtonum.o

SRCS = buffer.c codepages.c config.c copyfile.c devices.c \
dirCache.c directory.c direntry.c expand.c fat.c fat_free.c file.c file_name.c \
file_read.c filter.c floppyd_io.c force_io.c hash.c init.c lockdev.c match.c \
mainloop.c mattrib.c mbadblocks.c mcat.c mcd.c mclasserase.c mcopy.c mdel.c \
mdir.c mdu.c mdoctorfat.c mformat.c minfo.c misc.c \
missFuncs.c mk_direntry.c mlabel.c mmd.c mmount.c mmove.c mpartition.c \
mshortname.c mshowfat.c mzip.c mtools.c old_dos.c plain_io.c precmd.c \
privileges.c \
scsi.c signal.c stream.c streamcache.c subdir.c unixdir.c tty.o vfat.c \
xdf_io.c mkmanifest.c


SCRIPTS = mcheck mxtar uz tgz mcomp amuFormat.sh

LINKS=mattrib mcat mcd mclasserase mcopy mdel mdeltree mdir mdu mformat minfo \
mlabel mmd mmount mmove mpartition mrd mren mtype mtoolstest mshortname \
mshowfat mbadblocks mzip

X_CFLAGS = @X_CFLAGS@
X_LIBS = @X_LIBS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
CFLAGS = $(CPPFLAGS) $(DEFS) $(MYCFLAGS) -fno-strict-aliasing -I. @extraincludedir@ -I@srcdir@ $(USERCFLAGS)
CXXFLAGS  = $(CPPFLAGS) $(DEFS) $(MYCXXFLAGS) -I. @extraincludedir@ -I@srcdir@ $(USERCFLAGS)
LINK      = $(CC) $(LDFLAGS) $(USERLDFLAGS) @extralibdir@
ALLLIBS   = $(USERLDLIBS) $(MACHDEPLIBS) $(SHLIB) $(LIBS)
X_LDFLAGS = $(X_EXTRA_LIBS) $(X_LIBS) -lXau -lX11 $(LIBS)
X_CCFLAGS = $(X_CFLAGS) $(CFLAGS)

all:    mtools $(LINKS) mkmanifest @FLOPPYD@ mtools.1 mtools.5

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

#%.o: %.cpp
#	$(CXX) $(CXXFLAGS) -c $<

mtools: $(OBJS1)
	$(LINK) $(OBJS1) -o $@ $(ALLLIBS)

mkmanifest: $(OBJS2)
	$(LINK) $(OBJS2) -o $@ $(ALLLIBS)

floppyd.o: floppyd.c
	$(CC) $(X_CCFLAGS) -c $?

floppyd: $(OBJS3)
	$(LINK) $(OBJS3) -o $@ $(X_LDFLAGS)
floppyd_installtest: $(OBJS4)
	$(LINK) $(OBJS4) -o $@ $(ALLLIBS)


$(LINKS): mtools
	rm -f $@ && $(LN_S) mtools $@

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

clean:	mostlyclean
	-rm -f mtools $(LINKS) floppyd floppyd_installtest mkmanifest *.info* *.dvi *.html 2>/dev/null


texclean:
	-rm -f mtools.aux mtools.toc mtools.log
	-rm -f mtools.cps mtools.pgs mtools.vrs
	-rm -f mtools.cp mtools.fn mtools.ky
	-rm -f mtools.pg mtools.tp mtools.vr

info: mtools.info
%.info: %.texi sysconfdir.texi
	$(MAKEINFO) -I$(srcdir) $< --no-split --output=$@

dvi: mtools.dvi
%.dvi: %.texi sysconfdir.texi
	$(TEXI2DVI) $<

ps: mtools.ps
%.ps: %.dvi
	dvips -f < $< > $@

pdf: mtools.pdf
%.pdf: %.texi sysconfdir.texi
	$(TEXI2PDF) $<

mtools.1: mtools.tmpl.1 Makefile
	sed "s%SYSCONFDIR%$(sysconfdir)/%g" $(srcdir)/mtools.tmpl.1 >mtools.1

mtools.5: mtools.tmpl.5 Makefile
	sed "s%SYSCONFDIR%$(sysconfdir)/%g" $(srcdir)/mtools.tmpl.5 >mtools.5

sysconfdir.texi:
	echo "@set SYSCONFDIR $(sysconfdir)/" >sysconfdir.texi

html: mtools.html mtools_toc.html
%.html %_toc.html: %.texi  sysconfdir.texi
	$(TEXI2HTML) $<

# Don't cd, to avoid breaking install-sh references.
install-info: info
	$(top_srcdir)/mkinstalldirs $(DESTDIR)$(infodir)
	if test -f mtools.info; then \
	  for i in mtools.info*; do \
	    $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/$$i; \
	  done; \
	else \
	  for i in $(srcdir)/mtools.info*; do \
	    $(INSTALL_DATA) $$i $(DESTDIR)$(infodir)/`echo $$i | sed 's|^$(srcdir)/||'`; \
	  done; \
	fi; \
	if [ -n "$(INSTALL_INFO)" ] ; then \
		$(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/mtools.info; \
	fi

uninstall-info:
	cd $(DESTDIR)$(infodir) && rm -f mtools.info*

install:	$(DESTDIR)$(bindir)/mtools @BINFLOPPYD@ install-man install-links \
		$(DESTDIR)$(bindir)/mkmanifest install-scripts install-info

uninstall:	uninstall-bin uninstall-man uninstall-links \
		uninstall-scripts

distclean: clean texclean
	rm -f config.cache config.h config.status config.log Makefile
maintainer-clean: distclean


$(DESTDIR)$(bindir)/floppyd: floppyd
	$(top_srcdir)/mkinstalldirs $(DESTDIR)$(bindir)
	$(INSTALL_PROGRAM) floppyd $(DESTDIR)$(bindir)/floppyd

$(DESTDIR)$(bindir)/floppyd_installtest: floppyd_installtest
	$(top_srcdir)/mkinstalldirs $(DESTDIR)$(bindir)
	$(INSTALL_PROGRAM) floppyd_installtest $(DESTDIR)$(bindir)/floppyd_installtest

$(DESTDIR)$(bindir)/mtools: mtools
	$(top_srcdir)/mkinstalldirs $(DESTDIR)$(bindir)
	$(INSTALL_PROGRAM) mtools $(DESTDIR)$(bindir)/mtools

$(DESTDIR)$(bindir)/mkmanifest: mkmanifest
	$(top_srcdir)/mkinstalldirs $(DESTDIR)$(bindir)
	$(INSTALL_PROGRAM) mkmanifest $(DESTDIR)$(bindir)/mkmanifest

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

install-links: $(DESTDIR)$(bindir)/mtools
	@for j in $(LINKS); do \
		rm -f $(DESTDIR)$(bindir)/$$j ; \
		$(LN_S) mtools $(DESTDIR)$(bindir)/$$j ; \
		echo $(DESTDIR)$(bindir)/$$j ; \
	done

## "z" is the older version of "gz"; the name is just *too* short
install-scripts: $(DESTDIR)$(bindir)/mtools
	@$(top_srcdir)/mkinstalldirs $(DESTDIR)$(bindir)
	@for j in $(SCRIPTS) ; do \
		$(INSTALL_PROGRAM) $(srcdir)/scripts/$$j $(DESTDIR)$(bindir)/$$j ; \
		echo $(DESTDIR)$(bindir)/$$j ; \
	done
	rm -f $(DESTDIR)$(bindir)/lz
	cd $(DESTDIR)$(bindir) && $(LN_S) uz lz

install-man:
	@$(top_srcdir)/mkinstalldirs $(MAN1DIR)
	@for j in $(MAN1); do \
		$(INSTALL_DATA) $(srcdir)/$$j $(MAN1DIR)/$$j ; \
		echo $(MAN1DIR)/$$j ; \
	done
	@$(top_srcdir)/mkinstalldirs $(MAN5DIR)
	@for j in $(MAN5); do \
		$(INSTALL_DATA) $(srcdir)/$$j $(MAN5DIR)/$$j ; \
		echo $(MAN5DIR)/$$j ; \
	done

uninstall-bin:
	@for j in mtools mkmanifest; do \
		rm -f $(DESTDIR)$(bindir)/$$j ; \
		echo $(DESTDIR)$(bindir)/$$j ; \
	done

uninstall-scripts:
	@for j in $(SCRIPTS); do \
		rm -f $(DESTDIR)$(bindir)/$$j ; \
		echo $(DESTDIR)$(bindir)/$$j ; \
	done

uninstall-man:
	@for j in $(MAN1); do \
		rm -f $(MAN1DIR)/$$j ; \
		echo $(MAN1DIR)/$$j ; \
	done
	@for j in $(MAN5); do \
		rm -f $(MAN5DIR)/$$j ; \
		echo $(MAN5DIR)/$$j ; \
	done

uninstall-links:
	@for j in $(LINKS); \
		do rm -f $(DESTDIR)$(bindir)/$$j ; \
		echo $(DESTDIR)$(bindir)/$$j ; \
	done

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

check:
	echo No self tests included
# check target needed even if empty, in order to make life easier for
# automatic tools to install GNU soft


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