#
# Makefile for compiling libzio
#
# Author: Werner Fink, <werner@suse.de>
#

LARGE	= $(shell getconf LFS_CFLAGS)
CFLAGS	= $(RPM_OPT_FLAGS) -pipe -Wall -D_GNU_SOURCE -D_REENTRANT $(LARGE)
CC	= gcc
MAJOR	= 0
MINOR	= 8
VERSION	= $(MAJOR).$(MINOR)
SONAME	= libzio.so.$(MAJOR)
LDMAP	= -Wl,--version-script=zio.map

prefix	= /usr
libdir	= $(prefix)/lib
datadir	= $(prefix)/share
mandir	= $(datadir)/man
incdir	= $(prefix)/include

FILES	= README	\
	  COPYING	\
	  Makefile	\
	  zio.c		\
	  zioP.h	\
	  zio.h.in	\
	  testt.c	\
	  tests.c	\
	  lzw.h		\
	  unlzw.c	\
	  zio.map	\
	  fzopen.3.in

all: shared static
shared:	libzio.so.$(VERSION) zio.map
static:	libzio.a

obj/zio.o: zio.c zioP.h zio.h
	test -d obj/ || mkdir obj/
	$(CC) $(CFLAGS) -o $@ -c $<

obs/zio.o: zio.c zioP.h zio.h
	test -d obs/ || mkdir obs/
	$(CC) $(CFLAGS) -fPIC -o $@ -c $<

obj/unlzw.o: unlzw.c lzw.h
	test -d obj/ || mkdir obj/
	$(CC) $(CFLAGS) -funroll-loops -o $@ -c $<

obs/unlzw.o: unlzw.c lzw.h
	test -d obs/ || mkdir obs/
	$(CC) $(CFLAGS) -fPIC -o $@ -c $<

libzio.a: obj/zio.o obj/unlzw.o
	ar -rv $@ $^
	ranlib $@

libzio.so.$(VERSION): obs/zio.o obs/unlzw.o
	gcc -shared -Wl,-soname,$(SONAME),-stats $(LDMAP) -o $@ $^

zioP.h: /usr/include/bzlib.h /usr/include/zlib.h
zio.h:  zio.h.in /usr/include/stdio.h
	sed 's/@@VERSION@@/$(VERSION)/' < $< > $@
fzopen.3: fzopen.3.in
	sed 's/@@VERSION@@/$(VERSION)/' < $< > $@

unlzw.c: lzw.h

install: install-shared install-static install-data

install-shared: libzio.so.$(VERSION)
	mkdir -p $(DESTDIR)$(libdir)
	install -m 0755 libzio.so.$(VERSION) $(DESTDIR)$(libdir)/
	ln -sf libzio.so.$(VERSION)	     $(DESTDIR)$(libdir)/libzio.so.$(MAJOR)
	ln -sf libzio.so.$(MAJOR)	     $(DESTDIR)$(libdir)/libzio.so

install-static: libzio.a
	mkdir -p $(DESTDIR)$(libdir)
	install -m 0644 libzio.a             $(DESTDIR)$(libdir)/

install-data: zio.h fzopen.3
	mkdir -p $(DESTDIR)$(incdir)
	mkdir -p $(DESTDIR)$(mandir)/man3
	install -m 0644 zio.h                $(DESTDIR)$(incdir)/
	install -m 0644 fzopen.3             $(DESTDIR)$(mandir)/man3/

clean:
	rm -f *.a *.so* testt tests zio.h
	rm -rf obj/ obs/
	rm -f libzio-$(VERSION).tar.gz

dest:   clean
	mkdir libzio-$(VERSION)
	cp -p $(FILES) libzio-$(VERSION)/
	tar czf libzio-$(VERSION).tar.gz libzio-$(VERSION)/
	rm -rf libzio-$(VERSION)/

testt:  testt.c libzio.a
	$(CC) $(CFLAGS) -o $@ $^ -lz -lbz2

tests:  tests.c libzio.a
	$(CC) $(CFLAGS) -o $@ $^ -lz -lbz2
