## -----------------------------------------------------------------------
##   
##   Copyright 2001 H. Peter Anvin - All Rights Reserved
##
##   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, Inc., 675 Mass Ave, Cambridge MA 02139,
##   USA; either version 2 of the License, or (at your option) any later
##   version; incorporated herein by reference.
##
## -----------------------------------------------------------------------

##
## Makefile for mkzftree
##
## mkzftree mirrors a tree in a form suitable for "mkisofs -z".
##

-include MCONFIG
include MRULES

PROGS     = mkzftree
MAN1PAGES = mkzftree.1

OBJS = 	mkzftree.o walk.o workers.o util.o hash.o iso9660.o copytime.o \
	compress.o uncompress.o

all: $(PROGS)

spec: zisofs-tools.spec

clean:
	rm -f *.o *.i *.s version.h $(PROGS)

distclean: clean
	rm -f MCONFIG config.status config.log config.h *~ \#*
	rm -f core *.orig *.rej
	rm -rf *.cache

release:
	$(MAKE) configure
	$(MAKE) spec
	$(MAKE) distclean

mkzftree: $(OBJS)
	$(CC) $(LDFLAGS) -o mkzftree $(OBJS) $(LIBS)

spotless: distclean
	rm -f configure config.h.in zisofs-tools.spec

install: all
	mkdir -p $(INSTALLROOT)$(bindir)
	$(INSTALL_PROGRAM) $(PROGS) $(INSTALLROOT)$(bindir)
	mkdir -p $(INSTALLROOT)$(mandir)/man1
	$(INSTALL_DATA) $(MAN1PAGES) $(INSTALLROOT)$(mandir)/man1

config:	MCONFIG

MCONFIG: configure MCONFIG.in config.h.in
	./configure

config.h: MCONFIG
	: Generated by side effect

config.h.in: configure.in
	rm -f config.h.in
	autoheader

configure: configure.in aclocal.m4
	autoconf
	rm -f MCONFIG config.cache config.log config.status config.h

#
# Version header
#
VERSION = $(shell cat version)

version.h: version
	echo "#define ZISOFS_TOOLS_VERSION \"$(VERSION)\"" > version.h

zisofs-tools.spec: zisofs-tools.spec.in version
	sed -e 's/@@VERSION@@/$(VERSION)/g' < zisofs-tools.spec.in > $@

#
# Dependencies
#
mkzftree.o:	mkzftree.c mkzftree.h config.h version.h
workers.o:	workers.c mkzftree.h config.h
compress.o:	compress.c mkzftree.h config.h iso9660.h
copytime.o:	copytime.c mkzftree.h config.h
hash.o:		hash.c mkzftree.h config.h
iso9660.o:	iso9660.c iso9660.h
uncompress.o:	uncompress.c mkzftree.h config.h iso9660.h
util.o:		util.c mkzftree.h config.h
walk.o:		walk.c mkzftree.h config.h
workers.o:	workers.c mkzftree.h config.h
