1-include config.mk 2 3STATICLIB=libimagequant.a 4SHAREDLIB=libimagequant.$(SOLIBSUFFIX) 5SOVER=0 6ifeq ($(SOLIBSUFFIX),dylib) 7 SHAREDLIBVER=libimagequant.$(SOVER).$(SOLIBSUFFIX) 8 FIX_INSTALL_NAME=install_name_tool -id $(LIBDIR)/$(SHAREDLIBVER) $(DESTDIR)$(LIBDIR)/$(SHAREDLIBVER) 9else 10 SHAREDLIBVER=libimagequant.$(SOLIBSUFFIX).$(SOVER) 11 FIX_INSTALL_NAME= 12endif 13 14JNILIB=libimagequant.jnilib 15DLL=imagequant.dll 16DLLIMP=imagequant_dll.a 17DLLDEF=imagequant_dll.def 18JNIDLL=libimagequant.dll 19JNIDLLIMP=libimagequant_dll.a 20JNIDLLDEF=libimagequant_dll.def 21 22OBJS = pam.o mediancut.o blur.o mempool.o kmeans.o nearest.o libimagequant.o 23SHAREDOBJS = $(subst .o,.lo,$(OBJS)) 24 25JAVACLASSES = org/pngquant/LiqObject.class org/pngquant/PngQuant.class org/pngquant/Image.class org/pngquant/Result.class 26JAVAHEADERS = $(JAVACLASSES:.class=.h) 27JAVAINCLUDE = -I'$(JAVA_HOME)/include' -I'$(JAVA_HOME)/include/linux' -I'$(JAVA_HOME)/include/win32' -I'$(JAVA_HOME)/include/darwin' 28 29DISTFILES = $(OBJS:.o=.c) *.h README.md CHANGELOG COPYRIGHT Makefile configure imagequant.pc.in 30TARNAME = libimagequant-$(VERSION) 31TARFILE = $(TARNAME)-src.tar.bz2 32PKGCONFIG = imagequant.pc 33 34all: static shared 35 36static: $(STATICLIB) 37 38shared: $(SHAREDLIB) 39 40dll: 41 $(MAKE) CFLAGS="$(CFLAGS) -DIMAGEQUANT_EXPORTS" $(DLL) 42 43java: $(JNILIB) 44 45java-dll: 46 $(MAKE) CFLAGS="$(CFLAGS) -DIMAGEQUANT_EXPORTS" $(JNIDLL) 47 48$(DLL) $(DLLIMP): $(OBJS) 49 $(CC) -fPIC -shared -o $(DLL) $^ $(LDFLAGS) -Wl,--out-implib,$(DLLIMP),--output-def,$(DLLDEF) 50 51$(STATICLIB): $(OBJS) 52 $(AR) $(ARFLAGS) $@ $^ 53 54$(SHAREDOBJS): 55 $(CC) -fPIC $(CFLAGS) -c $(@:.lo=.c) -o $@ 56 57libimagequant.so: $(SHAREDOBJS) 58 $(CC) -shared -Wl,-soname,$(SHAREDLIBVER) -o $(SHAREDLIBVER) $^ $(LDFLAGS) 59 ln -fs $(SHAREDLIBVER) $(SHAREDLIB) 60 61libimagequant.dylib: $(SHAREDOBJS) 62 $(CC) -shared -o $(SHAREDLIBVER) $^ $(LDFLAGS) 63 ln -fs $(SHAREDLIBVER) $(SHAREDLIB) 64 65$(OBJS): $(wildcard *.h) config.mk 66 67$(JNILIB): $(JAVAHEADERS) $(STATICLIB) org/pngquant/PngQuant.c 68 $(CC) -g $(CFLAGS) $(LDFLAGS) $(JAVAINCLUDE) -shared -o $@ org/pngquant/PngQuant.c $(STATICLIB) 69 70$(JNIDLL) $(JNIDLLIMP): $(JAVAHEADERS) $(OBJS) org/pngquant/PngQuant.c 71 $(CC) -fPIC -shared -I. $(JAVAINCLUDE) -o $(JNIDLL) $^ $(LDFLAGS) -Wl,--out-implib,$(JNIDLLIMP),--output-def,$(JNIDLLDEF) 72 73$(JAVACLASSES): %.class: %.java 74 javac $< 75 76$(JAVAHEADERS): %.h: %.class 77 javah -o $@ $(subst /,., $(patsubst %.class,%,$<)) && touch $@ 78 79dist: $(TARFILE) cargo 80 81$(TARFILE): $(DISTFILES) 82 rm -rf $(TARFILE) $(TARNAME) 83 mkdir $(TARNAME) 84 cp $(DISTFILES) $(TARNAME) 85 tar -cjf $(TARFILE) --numeric-owner --exclude='._*' $(TARNAME) 86 rm -rf $(TARNAME) 87 -shasum $(TARFILE) 88 89cargo: 90 rm -rf msvc-dist 91 git clone . -b msvc msvc-dist 92 rm -rf msvc-dist/Cargo.toml msvc-dist/org msvc-dist/rust msvc-dist/README.md msvc-dist/COPYRIGHT 93 cargo test 94 95example: example.c lodepng.h lodepng.c $(STATICLIB) 96 $(CC) -g $(CFLAGS) -Wall example.c $(STATICLIB) -o example -lm 97 98lodepng.h: 99 curl -o lodepng.h -L https://raw.githubusercontent.com/lvandeve/lodepng/master/lodepng.h 100 101lodepng.c: 102 curl -o lodepng.c -L https://raw.githubusercontent.com/lvandeve/lodepng/master/lodepng.cpp 103 104clean: 105 rm -f $(OBJS) $(SHAREDOBJS) $(SHAREDLIBVER) $(SHAREDLIB) $(STATICLIB) $(TARFILE) $(DLL) '$(DLLIMP)' '$(DLLDEF)' 106 rm -f $(JAVAHEADERS) $(JAVACLASSES) $(JNILIB) example 107 rm -rf target rust-api/target rust-sys/target 108 109distclean: clean 110 rm -f config.mk 111 rm -f imagequant.pc 112 113install: all $(PKGCONFIG) 114 install -d $(DESTDIR)$(LIBDIR) 115 install -d $(DESTDIR)$(PKGCONFIGDIR) 116 install -d $(DESTDIR)$(INCLUDEDIR) 117 install -m 644 $(STATICLIB) $(DESTDIR)$(LIBDIR)/$(STATICLIB) 118 install -m 755 $(SHAREDLIBVER) $(DESTDIR)$(LIBDIR)/$(SHAREDLIBVER) 119 ln -sf $(SHAREDLIBVER) $(DESTDIR)$(LIBDIR)/$(SHAREDLIB) 120 install -m 644 $(PKGCONFIG) $(DESTDIR)$(PKGCONFIGDIR)/$(PKGCONFIG) 121 install -m 644 libimagequant.h $(DESTDIR)$(INCLUDEDIR)/libimagequant.h 122 $(FIX_INSTALL_NAME) 123 124uninstall: 125 rm -f $(DESTDIR)$(LIBDIR)/$(STATICLIB) 126 rm -f $(DESTDIR)$(LIBDIR)/$(SHAREDLIBVER) 127 rm -f $(DESTDIR)$(LIBDIR)/$(SHAREDLIB) 128 rm -f $(DESTDIR)$(PKGCONFIGDIR)/$(PKGCONFIG) 129 rm -f $(DESTDIR)$(INCLUDEDIR)/libimagequant.h 130 131config.mk: 132ifeq ($(filter %clean %distclean, $(MAKECMDGOALS)), ) 133 ./configure 134endif 135 136$(PKGCONFIG): config.mk 137 sed 's|@PREFIX@|$(PREFIX)|;s|@VERSION@|$(VERSION)|' < imagequant.pc.in > $(PKGCONFIG) 138 139.PHONY: all static shared clean dist distclean dll java cargo 140.DELETE_ON_ERROR: 141