#
# NuFX archive manipulation library
# Copyright (C) 2000-2007 by Andy McFadden, All Rights Reserved.
# This is free software; you can redistribute it and/or modify it under the
# terms of the BSD License, see the file COPYING-LIB.
#
# Makefile for nufxlib (should work with non-GNU "make").
#
# You can use:
#	make (builds library and sample applications)
#	make shared (builds shared library if you're using GNU ld or similar)
#
# The shared library support currently leaves much to be desired.
#
# If you build with -DDEBUG_MSGS, nulib2 will be able to use the hidden
# 'g' command, which generates a verbose archive dump for debugging.
#

# NufxLib install location.
prefix		= /usr/local
exec_prefix	= ${prefix}
includedir	= ${prefix}/include
libdir		= ${exec_prefix}/lib
srcdir		= .

SHELL		= /bin/sh
INSTALL		= /usr/bin/install -c
INSTALL_PROGRAM	= ${INSTALL}
INSTALL_DATA	= ${INSTALL} -m 644
CC			= gcc
AR			= ar rcv
#OPT 		= -g -O2 -DNDEBUG
OPT			= -g -O2
#OPT 		= -g -O2 -DDEBUG_MSGS
#OPT 		= -g -O2 -DDEBUG_VERBOSE
GCC_FLAGS	= -Wall -Wwrite-strings -Wstrict-prototypes -Wpointer-arith -Wshadow
CFLAGS		= $(OPT) $(GCC_FLAGS) -I. -DHAVE_CONFIG_H -DOPTFLAGSTR="\"$(OPT)\""

SRCS		= Archive.c ArchiveIO.c Bzip2.c Charset.c Compress.c Crc16.c \
			  Debug.c Deferred.c Deflate.c Entry.c Expand.c FileIO.c Funnel.c \
			  Lzc.c Lzw.c MiscStuff.c MiscUtils.c Record.c SourceSink.c \
			  Squeeze.c Thread.c Value.c Version.c
OBJS		= Archive.o ArchiveIO.o Bzip2.o Charset.o Compress.o Crc16.o \
			  Debug.o Deferred.o Deflate.o Entry.o Expand.o FileIO.o Funnel.o \
			  Lzc.o Lzw.o MiscStuff.o MiscUtils.o Record.o SourceSink.o \
			  Squeeze.o Thread.o Value.o Version.o

STATIC_PRODUCT	= libnufx.a
SHARED_PRODUCT	= libnufx.so
PRODUCT	= $(STATIC_PRODUCT)


#
# Build stuff
#

all: $(PRODUCT) samples
	@true

install: $(STATIC_PRODUCT)
	$(srcdir)/mkinstalldirs $(libdir)
	$(INSTALL_DATA) $(STATIC_PRODUCT) $(libdir)
	$(srcdir)/mkinstalldirs $(includedir)
	$(INSTALL_DATA) NufxLib.h $(includedir)

install-shared: $(SHARED_PRODUCT)
	$(srcdir)/mkinstalldirs $(libdir)
	$(INSTALL_DATA) $(SHARED_PRODUCT) $(libdir)
	$(srcdir)/mkinstalldirs $(includedir)
	$(INSTALL_DATA) NufxLib.h $(includedir)

samples::
	@echo "Building samples..."
	@(cd samples; set +e; unset CFLAGS OBJS; set -e; \
		 LIB_PRODUCT="../$(PRODUCT)" $(MAKE))

shared::
	PRODUCT="$(SHARED_PRODUCT)" $(MAKE) -e

$(STATIC_PRODUCT): $(OBJS)
	-rm -f $(STATIC_PRODUCT) $(SHARED_PRODUCT)
	$(AR) $@ $(OBJS)
	ranlib $@

# BUG: we need -fPIC, maybe -D_REENTRANT when compiling for this.
# BUG: for Linux we may want -Wl,-soname,libnufx.so.1 on the link line.
$(SHARED_PRODUCT): $(OBJS)
	-rm -f $(STATIC_PRODUCT) $(SHARED_PRODUCT)
	$(CC) -shared -o $@ $(OBJS)  -lz

clean:
	(cd samples; make clean)
	-rm -f *.o core
	-rm -f $(SHARED_PRODUCT) $(STATIC_PRODUCT)

# build tags; assumes fancy GNU tag generation
tags::
	@ctags -R --totals *
	@#ctags *.[ch]

distclean: clean
	(cd samples; make distclean)
	-rm -f Makefile Makefile.bak
	-rm -f config.log config.cache config.status config.h
	-rm -f tags

# Make a tarfile with a backup of the essential files.  We include "Makefile" 
# so that we can do a "make distclean" during packaging.
baktar:
	@tar cvf nufxlib.tar *.txt COPYING-LIB INSTALL configure *.in Makefile \
		Makefile.msc Makefile.dll install-sh config.guess config.sub \
		mkinstalldirs *.[ch] samples/*.txt samples/Makefile* samples/*.[ch]
	@gzip -9 nufxlib.tar
	@mv -i nufxlib.tar.gz /home/fadden/BAK/

# dependency info
COMMON_HDRS = NufxLibPriv.h NufxLib.h MiscStuff.h SysDefs.h
Archive.o: Archive.c $(COMMON_HDRS)
ArchiveIO.o: ArchiveIO.c $(COMMON_HDRS)
Bzip2.o: Bzip2.c $(COMMON_HDRS)
Charset.o: Charset.c $(COMMON_HDRS)
Compress.o: Compress.c $(COMMON_HDRS)
Crc16.o: Crc16.c $(COMMON_HDRS)
Debug.o: Debug.c $(COMMON_HDRS)
Deferred.o: Deferred.c $(COMMON_HDRS)
Deflate.o: Deflate.c $(COMMON_HDRS)
Entry.o: Entry.c $(COMMON_HDRS)
Expand.o: Expand.c $(COMMON_HDRS)
FileIO.o: FileIO.c $(COMMON_HDRS)
Funnel.o: Funnel.c $(COMMON_HDRS)
Lzc.o: Lzc.c $(COMMON_HDRS)
Lzw.o: Lzw.c $(COMMON_HDRS)
MiscStuff.o: MiscStuff.c $(COMMON_HDRS)
MiscUtils.o: MiscUtils.c $(COMMON_HDRS)
Record.o: Record.c $(COMMON_HDRS)
SourceSink.o: SourceSink.c $(COMMON_HDRS)
Squeeze.o: Squeeze.c $(COMMON_HDRS)
Thread.o: Thread.c $(COMMON_HDRS)
Value.o: Value.c $(COMMON_HDRS)
Version.o: Version.c $(COMMON_HDRS) Makefile

