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