261 lines
7.9 KiB
Makefile
261 lines
7.9 KiB
Makefile
VERSION_MAJOR = @libxmp_VERSION_MAJOR@
|
|
VERSION_MINOR = @libxmp_VERSION_MINOR@
|
|
VERSION_RELEASE = @libxmp_VERSION_PATCH@
|
|
|
|
VERSION = @libxmp_VERSION@
|
|
|
|
# This dylib will support anything linked against COMPAT_VERSION through VERSION
|
|
COMPAT_VERSION = $(VERSION_MAJOR)
|
|
|
|
CC = @CC@
|
|
CFLAGS = -c @CFLAGS@ @DEFS@ -D_REENTRANT
|
|
#CFLAGS += -DDEBUG
|
|
CFLAGS_SHARED = @CFLAGS_SHARED@
|
|
CFLAGS_STATIC = -DLIBXMP_STATIC
|
|
LD = @CC@
|
|
LDFLAGS = @LDFLAGS@
|
|
LIBS = @LIBS@
|
|
AR = @AR@
|
|
RANLIB = @RANLIB@
|
|
INSTALL = @INSTALL@
|
|
DESTDIR =
|
|
prefix = @prefix@
|
|
exec_prefix = @prefix@
|
|
datarootdir = @datarootdir@
|
|
BINDIR = @bindir@
|
|
LIBDIR = @libdir@
|
|
MANDIR = @mandir@/man3
|
|
INCLUDEDIR = @includedir@
|
|
LD_VERSCRIPT = @LD_VERSCRIPT@
|
|
SHELL = /bin/sh
|
|
|
|
DIST = libxmp-$(VERSION)
|
|
DFILES = README INSTALL install-sh configure configure.ac config.sub config.guess \
|
|
Makefile.in Makefile.vc Makefile.dos Makefile.os2 Makefile.w32 watcom.mif \
|
|
CMakeLists.txt aclocal.m4 autogen.sh libxmp.map libxmp.pc.in libxmp-config.cmake \
|
|
libxmp-config.cmake.autotools libxmp-config-version.cmake.autotools.in
|
|
DDIRS = docs include src loaders prowiz depackers lhasa test cmake m4
|
|
V = 0
|
|
LIB = libxmp.a
|
|
SOLIB = libxmp.so
|
|
SHLIB = $(SOLIB).$(VERSION)
|
|
SONAME = $(SOLIB).$(VERSION_MAJOR)
|
|
DLL = libxmp.dll
|
|
IMPLIB = libxmp.dll.a
|
|
DYLIB = libxmp.$(VERSION_MAJOR).dylib
|
|
GCLIB = libxmp-gc.a
|
|
DYLIB_COMPAT = -compatibility_version,$(COMPAT_VERSION),
|
|
|
|
DARWIN_VERSION = @DARWIN_VERSION@
|
|
|
|
# https://github.com/cmatsuoka/libxmp/issues/1
|
|
ifneq ($(DARWIN_VERSION),)
|
|
ifeq ($(shell test $(DARWIN_VERSION) -lt 9 && echo true), true)
|
|
DYLIB_COMPAT=
|
|
endif
|
|
endif
|
|
|
|
all: @STATIC@ @SHARED@
|
|
|
|
include include/Makefile
|
|
include cmake/Makefile
|
|
include m4/Makefile
|
|
include src/Makefile
|
|
include src/loaders/Makefile
|
|
include src/loaders/prowizard/Makefile
|
|
include src/depackers/Makefile
|
|
include src/depackers/lhasa/Makefile
|
|
include test/Makefile
|
|
include docs/Makefile
|
|
|
|
ALL_OBJS=$(OBJS) @PROWIZARD_OBJS@ @DEPACKER_OBJS@
|
|
|
|
LOBJS = $(ALL_OBJS:.o=.lo)
|
|
|
|
GCOBJS = $(ALL_OBJS:.o=.gco)
|
|
|
|
CFLAGS += -Iinclude
|
|
|
|
.SUFFIXES: .c .o .lo .a .so .dll .in .gco .gcda .gcno
|
|
|
|
.c.o:
|
|
@CMD='$(CC) $(CPPFLAGS) $(CFLAGS_STATIC) $(CFLAGS) -o $*.o $<'; \
|
|
if [ "$(V)" -gt 0 ]; then echo $$CMD; else echo CC $*.o ; fi; \
|
|
eval $$CMD
|
|
|
|
.c.lo:
|
|
@CMD='$(CC) $(CPPFLAGS) $(CFLAGS_SHARED) $(CFLAGS) -o $*.lo $<'; \
|
|
if [ "$(V)" -gt 0 ]; then echo $$CMD; else echo CC $*.lo ; fi; \
|
|
eval $$CMD
|
|
|
|
.c.gco:
|
|
@CMD='$(CC) $(CPPFLAGS) $(CFLAGS_STATIC) $(CFLAGS) -O0 -fno-inline -fprofile-arcs -ftest-coverage -o $*.gco $<'; \
|
|
if [ "$(V)" -gt 0 ]; then echo $$CMD; else echo CC $*.gco ; fi; \
|
|
eval $$CMD
|
|
|
|
static: lib/$(LIB)
|
|
|
|
shared: lib/$(SHLIB)
|
|
|
|
coverage: lib/$(GCLIB)
|
|
|
|
dll: lib/$(DLL)
|
|
|
|
dylib: lib/$(DYLIB)
|
|
|
|
lib/$(LIB): $(ALL_OBJS)
|
|
@mkdir -p lib
|
|
@CMD='$(AR) r $@ $(ALL_OBJS)'; \
|
|
if [ "$(V)" -gt 0 ]; then echo $$CMD; else echo AR $@ ; fi; \
|
|
eval $$CMD
|
|
$(RANLIB) $@
|
|
|
|
lib/$(SHLIB): $(LOBJS)
|
|
@mkdir -p lib
|
|
@CMD='$(LD) $(LDFLAGS) -shared -Wl,-soname,$(SONAME) $(LD_VERSCRIPT) -o $@ $(LOBJS) $(LIBS)'; \
|
|
if [ "$(V)" -gt 0 ]; then echo $$CMD; else echo LD $@ ; fi; \
|
|
eval $$CMD
|
|
ln -sf $(SHLIB) lib/$(SONAME)
|
|
ln -sf $(SONAME) lib/$(SOLIB)
|
|
|
|
lib/$(DLL): $(LOBJS)
|
|
@mkdir -p lib
|
|
@CMD='$(LD) $(LDFLAGS) -shared -Wl,--output-def,lib/libxmp.def,--out-implib,lib/$(IMPLIB) -o $@ $(LOBJS) $(LIBS)'; \
|
|
if [ "$(V)" -gt 0 ]; then echo $$CMD; else echo LD $@ ; fi; \
|
|
eval $$CMD
|
|
|
|
# From http://stackoverflow.com/questions/15905310:
|
|
# The version number checks that dyld performs are limited to ensuring that
|
|
# the compatibility version of the library being loaded is higher than the
|
|
# compatibility version of the library that was used at build time.
|
|
#
|
|
lib/$(DYLIB): $(LOBJS)
|
|
@mkdir -p lib
|
|
@CMD='$(LD) $(LDFLAGS) -dynamiclib -Wl,-headerpad_max_install_names,$(DYLIB_COMPAT)-current_version,$(VERSION),-install_name,$(prefix)/lib/$(DYLIB) -o $@ $(LOBJS) $(LIBS)'; \
|
|
if [ "$(V)" -gt 0 ]; then echo $$CMD; else echo LD $@ ; fi; \
|
|
eval $$CMD
|
|
ln -sf $(DYLIB) lib/libxmp.dylib
|
|
|
|
lib/$(GCLIB): $(GCOBJS)
|
|
@mkdir -p lib
|
|
@CMD='$(AR) r $@ $(GCOBJS)'; \
|
|
if [ "$(V)" -gt 0 ]; then echo $$CMD; else echo AR $@ ; fi; \
|
|
eval $$CMD
|
|
$(RANLIB) $@
|
|
|
|
docs: all-docs
|
|
|
|
clean:
|
|
@rm -f $(ALL_OBJS) $(LOBJS) $(T_OBJS)
|
|
@rm -f $(GCOBJS) $(ALL_OBJS:.o=.gcno) $(ALL_OBJS:.o=.gcda)
|
|
|
|
distclean: clean
|
|
@rm -f config.log config.cache config.status libxmp.pc depend Makefile lib/* test/libxmp-test*
|
|
|
|
install: all
|
|
@mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(INCLUDEDIR)
|
|
@if [ -f lib/$(LIB) ]; then \
|
|
echo "Installing $(LIB)..."; \
|
|
$(INSTALL) -m644 lib/$(LIB) $(DESTDIR)$(LIBDIR); \
|
|
fi
|
|
@if [ -f lib/$(DYLIB) ]; then \
|
|
echo "Installing $(DYLIB)..."; \
|
|
$(INSTALL) -m755 lib/$(DYLIB) $(DESTDIR)$(LIBDIR); \
|
|
ln -sf $(DYLIB) $(DESTDIR)$(LIBDIR)/libxmp.dylib; \
|
|
fi
|
|
@if [ -f lib/$(DLL) ]; then \
|
|
echo "Installing $(DLL)..."; \
|
|
$(INSTALL) -m644 lib/$(DLL) $(DESTDIR)$(BINDIR); \
|
|
$(INSTALL) -m644 lib/$(IMPLIB) $(DESTDIR)$(LIBDIR); \
|
|
fi
|
|
@if [ -f lib/$(SHLIB) ]; then \
|
|
echo "Installing $(SHLIB)..."; \
|
|
$(INSTALL) -m644 lib/$(SHLIB) $(DESTDIR)$(LIBDIR); \
|
|
ln -sf $(SHLIB) $(DESTDIR)$(LIBDIR)/$(SONAME); \
|
|
ln -sf $(SONAME) $(DESTDIR)$(LIBDIR)/$(SOLIB); \
|
|
fi
|
|
@echo "Installing xmp.h..."
|
|
@$(INSTALL) -m644 include/xmp.h $(DESTDIR)$(INCLUDEDIR)
|
|
@echo "Installing libxmp.pc..."
|
|
@mkdir -p $(DESTDIR)$(LIBDIR)/pkgconfig
|
|
@$(INSTALL) -m644 libxmp.pc $(DESTDIR)$(LIBDIR)/pkgconfig/
|
|
@echo "Installing libxmp-config.cmake..."
|
|
@mkdir -p $(DESTDIR)$(LIBDIR)/cmake/libxmp
|
|
@$(INSTALL) -m644 libxmp-config.cmake.autotools $(DESTDIR)$(LIBDIR)/cmake/libxmp/libxmp-config.cmake
|
|
@$(INSTALL) -m644 libxmp-config-version.cmake.autotools $(DESTDIR)$(LIBDIR)/cmake/libxmp/libxmp-config-version.cmake
|
|
|
|
#FIXME: do better?
|
|
depend:
|
|
@echo Building dependencies...
|
|
@echo > $@
|
|
@for i in $(ALL_OBJS) $(T_OBJS); do \
|
|
c="$${i%.o}.c"; l="$${i%.o}.lo"; \
|
|
$(CC) $(CFLAGS) -MM $$c | \
|
|
sed "s!^.*\.o:!$$i $$l:!" >> $@ ; \
|
|
done
|
|
|
|
dist: version-prepare all-docs dist-prepare dist-jni dist-subdirs
|
|
|
|
dist-jni:
|
|
mkdir $(DIST)/jni
|
|
cp jni/Android.mk jni/Application.mk $(DIST)/jni
|
|
|
|
dist-prepare: cmake-prepare vc-prepare watcom-prepare
|
|
./config.status
|
|
rm -Rf $(DIST) $(DIST).tar.gz
|
|
mkdir -p $(DIST)
|
|
cp -RPp $(DFILES) $(DIST)/
|
|
|
|
space := $(eval) $(eval)
|
|
cmake-prepare:
|
|
@echo Generate cmake/libxmp-sources.cmake
|
|
@sed -e 's!@SRCS@!\n$(subst $(space), , $(OBJS:.o=.c\n))!' \
|
|
-e 's!@PSRCS@!\n$(subst $(space), , $(PROWIZARD_OBJS:.o=.c\n))!' \
|
|
-e 's!@DSRCS@!\n$(subst $(space), , $(DEPACKER_OBJS:.o=.c\n))!' \
|
|
cmake/libxmp-sources.cmake.in > cmake/libxmp-sources.cmake
|
|
|
|
vc-prepare:
|
|
@echo Generate Makefile.vc
|
|
@sed -e 's!@OBJS@!\\\r\n $(subst /,\\,$(OBJS:.o=.obj \\\r\n))!' \
|
|
-e 's!@POBJS@!\\\r\n $(subst /,\\,$(PROWIZARD_OBJS:.o=.obj \\\r\n))!' \
|
|
-e 's!@DOBJS@!\\\r\n $(subst /,\\,$(DEPACKER_OBJS:.o=.obj \\\r\n))!' \
|
|
Makefile.vc.in > Makefile.vc
|
|
|
|
watcom-prepare:
|
|
@echo Generate watcom.mif
|
|
@sed -e 's!@OBJS@! \&\n $(OBJS:.o=.obj \&\n)!' \
|
|
-e 's!@POBJS@! \&\n $(PROWIZARD_OBJS:.o=.obj \&\n)!' \
|
|
-e 's!@DOBJS@! \&\n $(DEPACKER_OBJS:.o=.obj \&\n)!' \
|
|
watcom.mif.in > watcom.mif
|
|
|
|
dist-subdirs: $(addprefix dist-,$(DDIRS))
|
|
chmod -R u+w $(DIST)/*
|
|
tar cvf - $(DIST) | gzip -9c > $(DIST).tar.gz
|
|
rm -Rf $(DIST)
|
|
ls -l $(DIST).tar.gz
|
|
|
|
distcheck:
|
|
rm -Rf $(DIST)
|
|
tar xf $(DIST).tar.gz
|
|
(cd $(DIST); ./configure --enable-static --prefix=`pwd`/test-install; make; make check; make install; find test-install)
|
|
|
|
devcheck:
|
|
$(MAKE) -C test-dev
|
|
|
|
covercheck: coverage
|
|
$(MAKE) -C test-dev covercheck
|
|
|
|
coverclean:
|
|
@rm -f $(ALL_OBJS:.o=.gco) $(ALL_OBJS:.o=.gcno) $(ALL_OBJS:.o=.gcda)
|
|
$(MAKE) -C test-dev coverclean
|
|
|
|
$(ALL_OBJS): Makefile
|
|
|
|
$(LOBJS): Makefile
|
|
|
|
version-prepare:
|
|
vercode=`printf "0x%02x%02x%02x" $(VERSION_MAJOR) $(VERSION_MINOR) $(VERSION_RELEASE)`; \
|
|
sed -i -e "s/\(^#define XMP_VERSION\).*/\1 \"$(VERSION)\"/;s/\(^#define XMP_VERCODE\).*/\1 $$vercode/;s/\(^#define XMP_VER_MAJOR\).*/\1 $(VERSION_MAJOR)/;s/\(^#define XMP_VER_MINOR\).*/\1 $(VERSION_MINOR)/;s/\(^#define XMP_VER_RELEASE\).*/\1 $(VERSION_RELEASE)/" include/xmp.h
|
|
./config.status
|
|
|
|
sinclude depend
|