1#
2# "$Id: Makefile 11801 2014-04-08 19:55:21Z msweet $"
3#
4# Makefile for the CUPS PPD Compiler.
5#
6# Copyright 2007-2014 by Apple Inc.
7# Copyright 2002-2006 by Easy Software Products.
8#
9# These coded instructions, statements, and computer programs are the
10# property of Apple Inc. and are protected by Federal copyright
11# law.  Distribution and use rights are outlined in the file "LICENSE.txt"
12# which should have been included with this file.  If this file is
13# file is missing or damaged, see the license at "http://www.cups.org/".
14#
15
16#
17# Include standard definitions...
18#
19
20include ../Makedefs
21
22
23#
24# Object files...
25#
26
27LIBOBJS =	\
28		ppdc-array.o \
29		ppdc-attr.o \
30		ppdc-catalog.o \
31		ppdc-choice.o \
32		ppdc-constraint.o \
33		ppdc-driver.o \
34		ppdc-file.o \
35		ppdc-filter.o \
36		ppdc-font.o \
37		ppdc-group.o \
38		ppdc-import.o \
39		ppdc-mediasize.o \
40		ppdc-message.o \
41		ppdc-option.o \
42		ppdc-profile.o \
43		ppdc-shared.o \
44		ppdc-source.o \
45		ppdc-string.o \
46		ppdc-variable.o
47OBJS =		\
48		$(LIBOBJS) \
49		genstrings.o \
50		ppdc.o \
51		ppdhtml.o \
52		ppdi.o \
53		ppdmerge.o \
54		ppdpo.o \
55		testcatalog.o
56LIBTARGETS =	\
57		$(LIBCUPSPPDC) \
58		libcupsppdc.a
59UNITTARGETS =	\
60		ppdc-static \
61		ppdi-static \
62		testcatalog
63EXECTARGETS =	\
64		ppdc \
65		ppdhtml \
66		ppdi \
67		ppdmerge \
68		ppdpo
69
70TARGETS	=	\
71		$(LIBTARGETS) \
72		$(EXECTARGETS) \
73		genstrings
74
75
76#
77# Make everything...
78#
79
80all:		$(TARGETS)
81
82
83#
84# Make library targets...
85#
86
87libs:		$(LIBTARGETS)
88
89
90#
91# Make unit tests...
92#
93
94unittests:	$(UNITTARGETS)
95
96
97#
98# Clean everything...
99#
100
101clean:
102	$(RM) $(OBJS) core
103	$(RM) *.bak *.bck core.*
104	$(RM) $(TARGETS) $(UNITTARGETS)
105	$(RM) -r ppd ppd2
106	$(RM) sample-import.drv sample.c test.drv
107	$(RM) libcupsppdc.so libcupsppdc.dylib
108
109
110#
111# Update dependencies...
112#
113
114depend:
115	$(CXX) -MM $(ALL_CXXFLAGS) $(OBJS:.o=.cxx) >Dependencies
116
117
118#
119# Install all targets...
120#
121
122install:	all install-data install-headers install-libs install-exec
123
124
125#
126# Install data files...
127#
128
129install-data:
130	$(INSTALL_DIR) $(DATADIR)/drv
131	$(INSTALL_DATA) sample.drv $(DATADIR)/drv
132
133
134#
135# Install programs...
136#
137
138install-exec:
139	echo Installing PPD compiler programs...
140	$(INSTALL_DIR) $(BINDIR)
141	for file in $(EXECTARGETS); do \
142		$(INSTALL_BIN) $$file $(BINDIR); \
143	done
144	if test "x$(SYMROOT)" != "x"; then \
145		$(INSTALL_DIR) $(SYMROOT); \
146		for file in $(EXECTARGETS); do \
147			cp $$file $(SYMROOT); \
148			dsymutil $(SYMROOT)/$$file; \
149		done \
150	fi
151
152
153#
154# Install headers...
155#
156
157install-headers:
158	echo Installing header files in $(INCLUDEDIR)/cups...
159	$(INSTALL_DIR) -m 755 $(INCLUDEDIR)/cups
160	$(INSTALL_DATA) ppdc.h $(INCLUDEDIR)/cups
161
162
163#
164# Install libraries...
165#
166
167install-libs: $(INSTALLSTATIC)
168	echo Installing libraries in $(LIBDIR)...
169	$(INSTALL_DIR) -m 755 $(LIBDIR)
170	$(INSTALL_LIB) $(LIBCUPSPPDC) $(LIBDIR)
171	if test $(LIBCUPSPPDC) = "libcupsppdc.so.1"; then \
172		$(RM) $(LIBDIR)/`basename $(LIBCUPSPPDC) .1`; \
173		$(LN) $(LIBCUPSPPDC) $(LIBDIR)/`basename $(LIBCUPSPPDC) .1`; \
174	fi
175	if test $(LIBCUPSPPDC) = "libcupsppdc.1.dylib"; then \
176		$(RM) $(LIBDIR)/libcupsppdc.dylib; \
177		$(LN) $(LIBCUPSPPDC) $(LIBDIR)/libcupsppdc.dylib; \
178	fi
179	if test "x$(SYMROOT)" != "x"; then \
180		$(INSTALL_DIR) $(SYMROOT); \
181		cp $(LIBCUPSPPDC) $(SYMROOT); \
182		dsymutil $(SYMROOT)/$(LIBCUPSPPDC); \
183	fi
184
185installstatic:
186	$(INSTALL_DIR) -m 755 $(LIBDIR)
187	$(INSTALL_LIB) -m 755 libcupsppdc.a $(LIBDIR)
188	$(RANLIB) $(LIBDIR)/libcupsppdc.a
189	$(CHMOD) 555 $(LIBDIR)/libcupsppdc.a
190
191
192#
193# Uninstall...
194#
195
196uninstall:
197	for file in $(EXECTARGETS); do \
198		$(RM) $(BINDIR)/$$file; \
199	done
200	$(RM) $(DATADIR)/drv/sample.drv
201	$(RMDIR) $(DATADIR)/drv
202	$(RM) $(LIBDIR)/libcupsppdc.1.dylib
203	$(RM) $(LIBDIR)/libcupsppdc.a
204	$(RM) $(LIBDIR)/libcupsppdc.dylib
205	$(RM) $(LIBDIR)/libcupsppdc.so
206	$(RM) $(LIBDIR)/libcupsppdc.so.1
207	-$(RMDIR) $(LIBDIR)
208	$(RM) $(INCLUDEDIR)/cups/ppdc.h
209	-$(RMDIR) $(INCLUDEDIR)/cups
210
211
212#
213# Automatic API help files...
214#
215
216apihelp:
217	mxmldoc --section "Programming" \
218		--title "PPD Compiler API" \
219		--css ../doc/cups-printable.css \
220		--header api-ppdc.header --intro api-ppdc.shtml \
221		api-ppdc.xml \
222		ppdc.h $(LIBOBJS:.o=.cxx) >../doc/help/api-ppdc.html
223	mxmldoc --tokens help/api-ppdc.html api-ppdc.xml >../doc/help/api-ppdc.tokens
224	$(RM) api-ppdc.xml
225
226framedhelp:
227	mxmldoc --framed api-ppdc \
228		--section "Programming" \
229		--title "PPD Compiler API" \
230		--css ../doc/cups-printable.css \
231		--header api-ppdc.header --intro api-ppdc.shtml \
232		ppdc.h $(LIBOBJS:.o=.cxx)
233
234
235#
236# genstrings - generate GNU gettext strings.
237#
238
239genstrings:		genstrings.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) \
240			sample.drv ../data/media.defs
241	echo Linking $@...
242	$(CXX) $(ARCHFLAGS) $(LDFLAGS) -o genstrings genstrings.o \
243		libcupsppdc.a ../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) \
244		$(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
245	echo Generating localization strings...
246	./genstrings >sample.c
247
248
249#
250# ppdc, the PPD compiler.
251#
252
253ppdc:			ppdc.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
254	echo Linking $@...
255	$(CXX) $(LDFLAGS) -o $@ ppdc.o -L. -lcupsppdc $(LIBS)
256
257
258ppdc-static:		ppdc.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC) foo.drv foo-fr.po
259	echo Linking $@...
260	$(CXX) $(ARCHFLAGS) $(LDFLAGS) -o ppdc-static ppdc.o libcupsppdc.a \
261		../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
262		$(COMMONLIBS) $(LIBZ)
263	echo Testing PPD compiler...
264	./ppdc-static -l en,fr -I ../data foo.drv
265	./ppdc-static -l en,fr -z -I ../data foo.drv
266
267
268#
269# ppdhtml, the PPD to HTML utility.
270#
271
272ppdhtml:			ppdhtml.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
273	echo Linking $@...
274	$(CXX) $(LDFLAGS) -o $@ ppdhtml.o -L. -lcupsppdc $(LIBS)
275
276
277#
278# ppdi, import PPD files.
279#
280
281ppdi:			ppdi.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
282	echo Linking $@...
283	$(CXX) $(LDFLAGS) -o $@ ppdi.o -L. -lcupsppdc $(LIBS)
284
285
286ppdi-static:		ppdc-static ppdi.o libcupsppdc.a  ../cups/$(LIBCUPSSTATIC)
287	echo Linking $@...
288	$(CXX) $(ARCHFLAGS) $(LDFLAGS) -o ppdi-static ppdi.o libcupsppdc.a \
289		../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
290		$(COMMONLIBS) $(LIBZ)
291	echo Testing PPD importer...
292	$(RM) -r ppd ppd2 sample-import.drv
293	./ppdc-static -l en -I ../data sample.drv
294	./ppdi-static -I ../data -o sample-import.drv ppd/*
295	./ppdc-static -l en -I ../data -d ppd2 sample-import.drv
296	if diff -r ppd ppd2 >/dev/null; then \
297		echo PPD import OK; \
298	else \
299		echo PPD import FAILED; \
300		exit 1; \
301	fi
302
303
304#
305# ppdmerge, merge PPD files.
306#
307
308ppdmerge:			ppdmerge.o ../cups/$(LIBCUPS)
309	echo Linking $@...
310	$(CXX) $(LDFLAGS) -o $@ ppdmerge.o $(LIBS)
311
312
313#
314# ppdpo, create message catalog files.
315#
316
317ppdpo:			ppdpo.o $(LIBCUPSPPDC) ../cups/$(LIBCUPS)
318	echo Linking $@...
319	$(CXX) $(LDFLAGS) -o $@ ppdpo.o -L. -lcupsppdc $(LIBS)
320
321
322#
323# testcatalog, test ppdcCatalog class.
324#
325
326testcatalog:		testcatalog.o libcupsppdc.a ../cups/$(LIBCUPSSTATIC)
327	echo Linking $@...
328	$(CXX) $(LDFLAGS) -o $@ testcatalog.o libcupsppdc.a \
329		../cups/$(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
330		$(COMMONLIBS) $(LIBZ)
331
332
333#
334# libcupsppdc.so.1
335#
336
337libcupsppdc.so.1:	$(LIBOBJS) ../cups/$(LIBCUPS)
338	echo Linking $@...
339	$(DSOXX) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LINKCUPS)
340	$(RM) `basename $@ .1`
341	$(LN) $@ `basename $@ .1`
342
343
344#
345# libcupsppdc.1.dylib
346#
347
348libcupsppdc.1.dylib:	$(LIBOBJS) ../cups/$(LIBCUPS)
349	echo Creating export list for $@...
350	nm $(LIBOBJS) | grep "T __" | awk '{print $$3}' | sort >t.exp
351	echo Linking $@...
352	$(DSOXX) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \
353		-install_name $(libdir)/$@ \
354		-current_version 1.0.0 \
355		-compatibility_version 1.0.0 \
356		-exported_symbols_list t.exp \
357		$(LIBOBJS) $(LINKCUPS)
358	$(RM) libcupsppdc.dylib t.exp
359	$(LN) $@ libcupsppdc.dylib
360
361
362#
363# libcupsppdc.la
364#
365
366libcupsppdc.la:    $(LIBOBJS) ../cups/$(LIBCUPS)
367	echo Linking $@...
368	$(CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \
369		-version-info 1:0 $(LINKCUPS)
370
371
372#
373# libcupsppdc.a
374#
375
376libcupsppdc.a:	$(LIBOBJS)
377	echo Archiving $@...
378	$(RM) $@
379	$(AR) $(ARFLAGS) $@ $(LIBOBJS)
380	$(RANLIB) $@
381
382
383#
384# Include dependencies...
385#
386
387include Dependencies
388
389
390#
391# End of "$Id: Makefile 11801 2014-04-08 19:55:21Z msweet $".
392#
393