NAME = libfallocate
OBJECTS = sys_fallocate.o falloc_sparse.o falloc_xfs_ocfs2.o linux_fallocate.o
HEADERS = fallocate.h
DOCS = README
TARVERSION = 0.1.1
SOVERSION = 0.1
SOVER = 0
TARGET = $(NAME).so
STATIC = $(NAME).a

CC = gcc
ifdef DEBUG
RPM_OPT_FLAGS = -O0 -g -Wall
else 
ifdef SIZE
RPM_OPT_FLAGS = -Os -Wall
else
RPM_OPT_FLAGS = -O2 -Wall
endif
endif
CFLAGS = $(RPM_OPT_FLAGS) $(EXTRA_CFLAGS) -DHAVE_CONFIG_H
PIC = -fPIC
LD = gcc
LN_S = ln -sf
INSTALL = install
PREFIX = /usr
LIB = lib
LIBDIR = $(PREFIX)/$(LIB)
DOCDIR = $(PREFIX)/share/doc/packages/libfallocate/

def: $(TARGET)

static: $(STATIC)

clean:
	rm -f *.a *.o *.so *.so.* test_falloc test_falloc_32 TEST core
	
distclean: clean
	rm -f falloc_config.h falloc_config.h.in configure config.log config.status
	rm -rf autom4te.cache

test_falloc: test_falloc.o libfallocate.so
	$(LD) -o $@ $< -L . -lfallocate

test_falloc_32: test_falloc_32.o libfallocate_32.so
	$(LD) -m32 -o $@ $< -L . -lfallocate_32

.c.o: fallocate.h falloc.h falloc_config.h
	$(CC) $(CFLAGS) $(PIC) -c -o $@ $<

%_32.o: %.c fallocate.h falloc.h falloc_config.h
	$(CC) $(CFLAGS) -fPIC -m32 -c -o $@ $<

falloc_config.h:
	./autogen.sh

$(TARGET): $(OBJECTS)
	$(CC) $(PIC) -shared -o $@.$(SOVERSION) -Wl,-soname,$@.$(SOVER) $^ #-Wl,--version-script=libfallocate.version
	$(LN_S) $@.$(SOVERSION) $@.$(SOVER)
	$(LN_S) $@.$(SOVER) $@

$(NAME)_32.so: $(patsubst %.o,%_32.o,$(OBJECTS))
	$(CC) $(PIC) -shared -m32 -o $@.$(SOVERSION) -Wl,-soname,$@.$(SOVER) $^ #-Wl,--version-script=libfallocate.version
	$(LN_S) $@.$(SOVERSION) $@.$(SOVER)
	$(LN_S) $@.$(SOVER) $@

$(STATIC): $(OBJECTS)
	ar rs $@ $^

strip: $(TARGET)
	strip -S $(TARGET).$(SOVERSION)
	@strip -S $(STATIC) 2>/dev/null || true

realstrip: $(TARGET)
	strip $(TARGET).$(SOVERSION)
	@strip $(STATIC) 2>/dev/null || true

install: install-lib install-header install-doc

install-lib: $(TARGET)
	$(INSTALL) -d $(DESTDIR)$(LIBDIR)
	$(INSTALL) -m 0755 $<.$(SOVERSION) $(DESTDIR)$(LIBDIR)
	$(LN_S) $<.$(SOVERSION) $(DESTDIR)$(LIBDIR)/$<.$(SOVER)
	$(LN_S) $<.$(SOVER) $(DESTDIR)$(LIBDIR)/$<

install-static: $(STATIC)
	$(INSTALL) -d $(DESTDIR)$(LIBDIR)
	$(INSTALL) -m 0644 $(STATIC) $(DESTDIR)$(LIBDIR)

install-header:
	$(INSTALL) -d $(DESTDIR)$(PREFIX)/include
	$(INSTALL) -m 0644 $(HEADERS) $(DESTDIR)$(PREFIX)/include/

install-doc:
	$(INSTALL) -d $(DESTDIR)$(DOCDIR)
	$(INSTALL) -m 0644 $(DOCS) $(DESTDIR)$(DOCDIR)

check: test_falloc
	LD_LIBRARY_PATH=. ./test_falloc TEST
	ls -lh TEST
	du -h TEST
	rm TEST

check_32: test_falloc_32
	LD_LIBRARY_PATH=. ./test_falloc_32 TEST
	ls -lh TEST
	du -h TEST
	rm TEST

dist: distclean
	cd .. && mv $(NAME) $(NAME)-$(TARVERSION) && tar cvjf $(NAME)-$(TARVERSION).tar.bz2 $(NAME)-$(TARVERSION) --exclude .hg && mv $(NAME)-$(TARVERSION) $(NAME)


.PHONY: clean distclean dist check check_32 install strip realstrip install-doc install-header install-lib


