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