• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
2# Library Makefile for CUPS.
3#
4# Copyright © 2007-2018 by Apple Inc.
5# Copyright © 1997-2006 by Easy Software Products, all rights reserved.
6#
7# These coded instructions, statements, and computer programs are the
8# property of Apple Inc. and are protected by Federal copyright
9# law.  Distribution and use rights are outlined in the file "LICENSE.txt"
10# which should have been included with this file.  If this file is
11# missing or damaged, see the license at "http://www.cups.org/".
12#
13# This file is subject to the Apple OS-Developed Software exception.
14#
15
16include ../Makedefs
17
18
19#
20# Options to build libcups without the use of deprecated APIs...
21#
22
23OPTIONS	=	-D_CUPS_NO_DEPRECATED=1 -D_PPD_DEPRECATED=""
24
25
26#
27# Object files...
28#
29
30LIBOBJS	=	\
31		adminutil.o \
32		array.o \
33		auth.o \
34		backchannel.o \
35		backend.o \
36		debug.o \
37		dest.o \
38		dest-job.o \
39		dest-localization.o \
40		dest-options.o \
41		dir.o \
42		encode.o \
43		file.o \
44		getdevices.o \
45		getifaddrs.o \
46		getputfile.o \
47		globals.o \
48		hash.o \
49		http.o \
50		http-addr.o \
51		http-addrlist.o \
52		http-support.o \
53		ipp.o \
54		ipp-support.o \
55		langprintf.o \
56		language.o \
57		md5.o \
58		md5passwd.o \
59		notify.o \
60		options.o \
61		ppd.o \
62		ppd-attr.o \
63		ppd-cache.o \
64		ppd-conflicts.o \
65		ppd-custom.o \
66		ppd-emit.o \
67		ppd-localize.o \
68		ppd-mark.o \
69		ppd-page.o \
70		ppd-util.o \
71		pwg-media.o \
72		request.o \
73		sidechannel.o \
74		snmp.o \
75		snprintf.o \
76		string.o \
77		tempfile.o \
78		thread.o \
79		tls.o \
80		transcode.o \
81		usersys.o \
82		util.o
83TESTOBJS	= \
84		testadmin.o \
85		testarray.o \
86		testcache.o \
87		testconflicts.o \
88		testcreds.o \
89		testcups.o \
90		testdest.o \
91		testfile.o \
92		testgetdests.o \
93		testhttp.o \
94		testi18n.o \
95		testipp.o \
96		testoptions.o \
97		testlang.o \
98		testppd.o \
99		testpwg.o \
100		testsnmp.o \
101		tlscheck.o
102OBJS	=	\
103		$(LIBOBJS) \
104		$(TESTOBJS)
105
106
107#
108# Header files to install...
109#
110
111HEADERS	=	\
112		adminutil.h \
113		array.h \
114		backend.h \
115		cups.h \
116		dir.h \
117		file.h \
118		http.h \
119		ipp.h \
120		language.h \
121		ppd.h \
122		pwg.h \
123		raster.h \
124		sidechannel.h \
125		transcode.h \
126		versioning.h
127
128HEADERSPRIV =	\
129		array-private.h \
130		cups-private.h \
131		debug-private.h \
132		file-private.h \
133		http-private.h \
134		ipp-private.h \
135		language-private.h \
136		md5-private.h \
137		ppd-private.h \
138		pwg-private.h \
139		raster-private.h \
140		snmp-private.h \
141		string-private.h \
142		thread-private.h
143
144
145#
146# Targets in this directory...
147#
148
149LIBTARGETS =	\
150		$(LIBCUPSSTATIC) \
151		$(LIBCUPS)
152
153UNITTARGETS =	\
154		testadmin \
155		testarray \
156		testcache \
157		testconflicts \
158		testcreds \
159		testcups \
160		testdest \
161		testfile \
162		testgetdests \
163		testhttp \
164		testi18n \
165		testipp \
166		testlang \
167		testoptions \
168		testppd \
169		testpwg \
170		testsnmp \
171		tlscheck
172
173TARGETS	=	\
174		$(LIBTARGETS)
175
176
177#
178# Make all targets...
179#
180
181all:		$(TARGETS)
182
183
184#
185# Make library targets...
186#
187
188libs:		$(LIBTARGETS)
189
190
191#
192# Make unit tests...
193#
194
195unittests:	$(UNITTARGETS)
196
197
198#
199# Remove object and target files...
200#
201
202clean:
203	$(RM) $(OBJS) $(TARGETS) $(UNITTARGETS)
204	$(RM) libcups.so libcups.dylib
205
206
207#
208# Update dependencies (without system header dependencies...)
209#
210
211depend:
212	$(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies
213
214
215#
216# Run oclint to check code coverage...
217#
218
219oclint:
220	oclint -o=oclint.html -html $(LIBOBJS:.o=.c) -- $(ALL_CFLAGS)
221
222
223#
224# Install all targets...
225#
226
227install:	all install-data install-headers install-libs install-exec
228
229
230#
231# Install data files...
232#
233
234install-data:
235
236
237#
238# Install programs...
239#
240
241install-exec:
242
243
244#
245# Install headers...
246#
247
248install-headers:
249	echo Installing header files into $(INCLUDEDIR)/cups...
250	$(INSTALL_DIR) -m 755 $(INCLUDEDIR)/cups
251	for file in $(HEADERS); do \
252		$(INSTALL_DATA) $$file $(INCLUDEDIR)/cups; \
253	done
254	if test "x$(privateinclude)" != x; then \
255		echo Installing private header files into $(PRIVATEINCLUDE)...; \
256		$(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \
257		for file in $(HEADERSPRIV); do \
258			$(INSTALL_DATA) $$file $(PRIVATEINCLUDE)/$$file; \
259		done; \
260	fi
261
262
263#
264# Install libraries...
265#
266
267install-libs: $(INSTALLSTATIC)
268	echo Installing libraries in $(LIBDIR)...
269	$(INSTALL_DIR) -m 755 $(LIBDIR)
270	$(INSTALL_LIB) $(LIBCUPS) $(LIBDIR)
271	if test $(LIBCUPS) = "libcups.so.2"; then \
272		$(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
273		$(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
274	fi
275	if test $(LIBCUPS) = "libcups.2.dylib"; then \
276		$(RM) $(LIBDIR)/libcups.dylib; \
277		$(LN) $(LIBCUPS) $(LIBDIR)/libcups.dylib; \
278	fi
279	if test "x$(SYMROOT)" != "x"; then \
280		$(INSTALL_DIR) $(SYMROOT); \
281		cp $(LIBCUPS) $(SYMROOT); \
282		dsymutil $(SYMROOT)/$(LIBCUPS); \
283	fi
284
285installstatic:
286	$(INSTALL_DIR) -m 755 $(LIBDIR)
287	$(INSTALL_LIB) -m 755 $(LIBCUPSSTATIC) $(LIBDIR)
288	$(RANLIB) $(LIBDIR)/$(LIBCUPSSTATIC)
289	$(CHMOD) 555 $(LIBDIR)/$(LIBCUPSSTATIC)
290
291
292#
293# Uninstall object and target files...
294#
295
296uninstall:
297	$(RM) $(LIBDIR)/libcups.2.dylib
298	$(RM) $(LIBDIR)/$(LIBCUPSSTATIC)
299	$(RM) $(LIBDIR)/libcups.dylib
300	$(RM) $(LIBDIR)/libcups.so
301	$(RM) $(LIBDIR)/libcups.so.2
302	-$(RMDIR) $(LIBDIR)
303	for file in $(HEADERS); do \
304		$(RM) $(INCLUDEDIR)/cups/$$file; \
305	done
306	-$(RMDIR) $(INCLUDEDIR)/cups
307
308
309#
310# libcups.so.2
311#
312
313libcups.so.2:	$(LIBOBJS)
314	echo Linking $@...
315	$(DSO) $(ARCHFLAGS) $(LDFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LIBGSSAPI) \
316		$(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
317	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
318	$(RM) `basename $@ .2`
319	$(LN) $@ `basename $@ .2`
320
321
322#
323# libcups.2.dylib
324#
325
326libcups.2.dylib:	$(LIBOBJS) $(LIBCUPSORDER)
327	echo Creating export list for $@...
328	nm -gm $(LIBOBJS) 2>/dev/null | grep "__text" | grep -v weak | \
329		awk '{print $$NF}' | \
330		grep -v -E -e '^(_cupsConnect|_cupsCharset|_cupsEncodingName|_cupsSetDefaults|_cupsSetHTTPError|_cupsUserDefault)$$' | \
331		sort >t.exp
332	echo Linking $@...
333	$(DSO) $(ARCHFLAGS) $(LDFLAGS) $(DSOFLAGS) -o $@ \
334		-install_name $(libdir)/$@ \
335		-current_version 2.13.0 \
336		-compatibility_version 2.0.0 \
337		-exported_symbols_list t.exp \
338		$(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
339		$(COMMONLIBS) $(LIBZ)
340	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
341	$(RM) libcups.dylib t.exp
342	$(LN) $@ libcups.dylib
343
344
345#
346# libcups.la
347#
348
349libcups.la:    $(LIBOBJS)
350	echo Linking $@...
351	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) \
352		-rpath $(LIBDIR) -version-info 2:13 $(LIBGSSAPI) $(SSLLIBS) \
353		$(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
354
355
356#
357# libcups.a
358#
359
360libcups.a:	$(LIBOBJS)
361	echo Archiving $@...
362	$(RM) $@
363	$(AR) $(ARFLAGS) $@ $(LIBOBJS)
364	$(RANLIB) $@
365
366
367#
368# libcups2.def (Windows DLL exports file...)
369#
370
371libcups2.def: $(LIBOBJS) Makefile
372	echo Generating $@...
373	echo "LIBRARY libcups2" >libcups2.def
374	echo "VERSION 2.13" >>libcups2.def
375	echo "EXPORTS" >>libcups2.def
376	(nm $(LIBOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}'; \
377	 echo __cups_strcpy; echo __cups_strlcat; echo __cups_strlcpy) | \
378		grep -v -E \
379		    -e 'cups_debug|Apple|BackChannel|Backend|FileCheck|Filter|GSSService|SetNegotiate|SideChannel|SNMP' \
380		    -e 'Block$$' | \
381		sed -e '1,$$s/^_//' | sort >>libcups2.def
382
383
384#
385# testadmin (dependency on static CUPS library is intentional)
386#
387
388testadmin:	testadmin.o $(LIBCUPSSTATIC)
389	echo Linking $@...
390	$(LD_CC) $(LDFLAGS) -o $@ testadmin.o $(LIBCUPSSTATIC) \
391		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
392	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
393
394
395#
396# testarray (dependency on static CUPS library is intentional)
397#
398
399testarray:	testarray.o $(LIBCUPSSTATIC)
400	echo Linking $@...
401	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testarray.o $(LIBCUPSSTATIC) \
402		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
403	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
404	echo Running array API tests...
405	./testarray
406
407
408#
409# testcache (dependency on static CUPS library is intentional)
410#
411
412testcache:	testcache.o $(LIBCUPSSTATIC)
413	echo Linking $@...
414	$(LD_CC) $(LDFLAGS) -o $@ testcache.o $(LIBCUPSSTATIC) \
415		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
416	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
417
418
419#
420# testconflicts (dependency on static CUPS library is intentional)
421#
422
423testconflicts:	testconflicts.o $(LIBCUPSSTATIC)
424	echo Linking $@...
425	$(LD_CC) $(LDFLAGS) -o $@ testconflicts.o $(LIBCUPSSTATIC) \
426		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
427	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
428
429
430#
431# testcreds (dependency on static CUPS library is intentional)
432#
433
434testcreds:	testcreds.o $(LIBCUPSSTATIC)
435	echo Linking $@...
436	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testcreds.o $(LIBCUPSSTATIC) \
437		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
438	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
439
440
441#
442# testcups (dependency on static CUPS library is intentional)
443#
444
445testcups:	testcups.o $(LIBCUPSSTATIC)
446	echo Linking $@...
447	$(LD_CC) $(LDFLAGS) -o $@ testcups.o $(LIBCUPSSTATIC) \
448		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
449	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
450
451
452#
453# testdest (dependency on static CUPS library is intentional)
454#
455
456testdest:	testdest.o $(LIBCUPSSTATIC)
457	echo Linking $@...
458	$(LD_CC) $(LDFLAGS) -o $@ testdest.o $(LIBCUPSSTATIC) \
459		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
460	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
461
462
463#
464# testfile (dependency on static CUPS library is intentional)
465#
466
467testfile:	testfile.o $(LIBCUPSSTATIC)
468	echo Linking $@...
469	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testfile.o $(LIBCUPSSTATIC) \
470		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
471	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
472	echo Running file API tests...
473	./testfile
474
475
476#
477# testgetdests (dependency on static CUPS library is intentional)
478#
479
480testgetdests:	testgetdests.o $(LIBCUPSSTATIC)
481	echo Linking $@...
482	$(LD_CC) $(LDFLAGS) -o $@ testgetdests.o $(LIBCUPSSTATIC) \
483		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
484	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
485
486
487#
488# testhttp (dependency on static CUPS library is intentional)
489#
490
491testhttp:	testhttp.o $(LIBCUPSSTATIC)
492	echo Linking $@...
493	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testhttp.o $(LIBCUPSSTATIC) \
494		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
495	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
496	echo Running HTTP API tests...
497	./testhttp
498
499
500#
501# testipp (dependency on static CUPS library is intentional)
502#
503
504testipp:	testipp.o $(LIBCUPSSTATIC)
505	echo Linking $@...
506	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testipp.o $(LIBCUPSSTATIC) \
507		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
508	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
509	echo Running IPP API tests...
510	./testipp
511
512
513#
514# testi18n (dependency on static CUPS library is intentional)
515#
516
517testi18n:	testi18n.o $(LIBCUPSSTATIC)
518	echo Linking $@...
519	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testi18n.o $(LIBCUPSSTATIC) \
520		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
521	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
522	echo Running internationalization API tests...
523	./testi18n
524
525
526#
527# testlang (dependency on static CUPS library is intentional)
528#
529
530testlang:	testlang.o $(LIBCUPSSTATIC)
531	echo Linking $@...
532	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testlang.o $(LIBCUPSSTATIC) \
533		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
534	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
535	echo Creating locale directory structure...
536	$(RM) -r locale
537	$(MKDIR) locale/en
538	echo 'msgid "No"' > locale/en/cups_en.po
539	echo 'msgstr "No"' >> locale/en/cups_en.po
540	echo 'msgid "Yes"' >> locale/en/cups_en.po
541	echo 'msgstr "Yes"' >> locale/en/cups_en.po
542	for po in ../locale/cups_*.po; do \
543		lang=`basename $$po .po | sed -e '1,$$s/^cups_//'`; \
544		$(MKDIR) locale/$$lang; \
545		$(LN) ../../$$po locale/$$lang; \
546	done
547	echo Running language API tests...
548	LOCALEDIR=locale ./testlang
549
550
551#
552# testoptions (dependency on static CUPS library is intentional)
553#
554
555testoptions:	testoptions.o $(LIBCUPSSTATIC)
556	echo Linking $@...
557	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testoptions.o $(LIBCUPSSTATIC) \
558		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
559	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
560	echo Running option API tests...
561	./testoptions
562
563
564#
565# testppd (dependency on static CUPS library is intentional)
566#
567
568testppd:	testppd.o $(LIBCUPSSTATIC) test.ppd test2.ppd
569	echo Linking $@...
570	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testppd.o $(LIBCUPSSTATIC) \
571		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
572	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
573	echo Running PPD API tests...
574	./testppd
575
576
577#
578# testpwg (dependency on static CUPS library is intentional)
579#
580
581testpwg:	testpwg.o $(LIBCUPSSTATIC) test.ppd
582	echo Linking $@...
583	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testpwg.o $(LIBCUPSSTATIC) \
584		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
585	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
586	echo Running PWG API tests...
587	./testpwg test.ppd
588
589
590#
591# testsnmp (dependency on static CUPS library is intentional)
592#
593
594testsnmp:	testsnmp.o $(LIBCUPSSTATIC)
595	echo Linking $@...
596	$(LD_CC) $(LDFLAGS) -o $@ testsnmp.o $(LIBCUPSSTATIC) \
597		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
598	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
599
600
601#
602# tlscheck (dependency on static CUPS library is intentional)
603#
604
605tlscheck:	tlscheck.o $(LIBCUPSSTATIC)
606	echo Linking $@...
607	$(LD_CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ tlscheck.o $(LIBCUPSSTATIC) \
608		$(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
609	$(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@
610
611
612#
613# Automatic API help files...
614#
615
616apihelp:
617	echo Generating CUPS API help files...
618	$(RM) cupspm.xml
619	mxmldoc --section "Programming" --body cupspm.md \
620		cupspm.xml \
621		auth.c cups.h dest*.c encode.c http.h http*.c ipp.h ipp*.c \
622		options.c tls-darwin.c usersys.c util.c \
623		--coverimage cupspm.png \
624		--epub ../doc/help/cupspm.epub
625	mxmldoc --section "Programming" --body cupspm.md \
626		cupspm.xml > ../doc/help/cupspm.html
627	$(RM) cupspm.xml
628	mxmldoc --section "Programming" --title "Administration APIs" \
629		--css ../doc/cups-printable.css \
630		--header api-admin.header --intro api-admin.shtml \
631		api-admin.xml \
632		adminutil.c adminutil.h getdevices.c >../doc/help/api-admin.html
633	$(RM) api-admin.xml
634	mxmldoc --section "Programming" --title "PPD API (DEPRECATED)" \
635		--css ../doc/cups-printable.css \
636		--header api-ppd.header --intro api-ppd.shtml \
637		api-ppd.xml ppd.h ppd-*.c >../doc/help/api-ppd.html
638	$(RM) api-ppd.xml
639	mxmldoc --section "Programming" \
640		--title "Filter and Backend Programming" \
641		--css ../doc/cups-printable.css \
642		--header api-filter.header --intro api-filter.shtml \
643		api-filter.xml \
644		backchannel.c backend.h backend.c sidechannel.c sidechannel.h \
645		>../doc/help/api-filter.html
646	$(RM) api-filter.xml
647
648
649#
650# Lines of code computation...
651#
652
653sloc:
654	echo "libcups: \c"
655	sloccount $(LIBOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}'
656
657
658#
659# Dependencies...
660#
661
662include Dependencies
663tls.o: tls-darwin.c tls-gnutls.c tls-sspi.c
664