1#
2# "$Id: Makefile 12133 2014-08-29 11:28:25Z msweet $"
3#
4# Scheduler Makefile for CUPS.
5#
6# Copyright 2007-2013 by Apple Inc.
7# Copyright 1997-2007 by Easy Software Products, all rights reserved.
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
16include ../Makedefs
17
18CUPSDOBJS =	\
19		auth.o \
20		banners.o \
21		cert.o \
22		classes.o \
23		client.o \
24		colorman.o \
25		conf.o \
26		dirsvc.o \
27		env.o \
28		file.o \
29		main.o \
30		ipp.o \
31		listen.o \
32		job.o \
33		log.o \
34		network.o \
35		policy.o \
36		printers.o \
37		process.o \
38		quotas.o \
39		select.o \
40		server.o \
41		statbuf.o \
42		subscriptions.o \
43		sysman.o
44LIBOBJS =	\
45		filter.o \
46		mime.o \
47		type.o
48COBJS	=	\
49		$(CUPSDOBJS) \
50		$(LIBOBJS) \
51		cupsfilter.o \
52		cups-deviced.o \
53		cups-exec.o \
54		cups-lpd.o \
55		testlpd.o \
56		testmime.o \
57		testspeed.o \
58		testsub.o \
59		util.o
60CXXOBJS	=	\
61		cups-driverd.o
62OBJS	=	\
63		$(COBJS) \
64		$(CXXOBJS)
65LIBTARGETS =	\
66		$(LIBCUPSMIME) \
67		libcupsmime.a
68
69UNITTARGETS =	\
70		testlpd \
71		testmime \
72		testspeed \
73		testsub
74
75PROGRAMS =	\
76		cupsd \
77		cupsfilter \
78		cups-deviced \
79		cups-driverd \
80		cups-exec \
81		cups-lpd
82
83TARGETS	=	\
84		$(LIBTARGETS) \
85		$(PROGRAMS)
86
87
88#
89# Make everything...
90#
91
92all:		$(TARGETS)
93
94
95#
96# Make library targets...
97#
98
99libs:		$(LIBTARGETS)
100
101
102#
103# Make unit tests...
104#
105
106unittests:	$(UNITTARGETS)
107
108
109#
110# Clean all object files...
111#
112
113clean:
114	$(RM) $(OBJS)
115	$(RM) $(TARGETS) $(UNITTARGETS) convert
116	$(RM) libcupsmime.so libcupsmime.dylib
117
118
119#
120# Update dependencies (without system header dependencies...)
121#
122
123depend:
124	$(CC) -MM $(ALL_CFLAGS) $(COBJS:.o=.c) >Dependencies
125	$(CXX) -MM $(ALL_CXXFLAGS) $(CXXOBJS:.o=.cxx) >>Dependencies
126
127
128#
129# Run oclint to check code coverage...
130#
131
132oclint:
133	oclint -o=oclint.html -html $(CUPSDOBJS:.o=.c) $(LIBOBJS:.o=.c) -- $(ALL_CFLAGS)
134
135
136#
137# Install all targets...
138#
139
140install:	all install-data install-headers install-libs install-exec
141
142
143#
144# Install data files...
145#
146
147install-data:
148	echo Creating $(SERVERBIN)/driver...
149	$(INSTALL_DIR) -m 755 $(SERVERBIN)/driver
150	echo Creating $(SERVERROOT)...
151	$(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT)
152	echo Creating $(SERVERROOT)/interfaces...
153	$(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT)/interfaces
154	echo Creating $(SERVERROOT)/ppd...
155	$(INSTALL_DIR) -m 755 -g $(CUPS_GROUP) $(SERVERROOT)/ppd
156	if test "x`uname`" != xDarwin; then \
157		echo Creating $(SERVERROOT)/ssl...; \
158		$(INSTALL_DIR) -m 700 -g $(CUPS_GROUP) $(SERVERROOT)/ssl; \
159	fi
160	if test "$(STATEDIR)" != "$(SERVERROOT)"; then \
161		echo Creating $(STATEDIR)...; \
162		$(INSTALL_DIR) -m 755 $(STATEDIR); \
163	fi
164	echo Creating $(STATEDIR)/certs...
165	$(INSTALL_DIR) -m 511 -o $(CUPS_USER) -g $(CUPS_PRIMARY_SYSTEM_GROUP) \
166		$(STATEDIR)/certs
167	echo Creating $(LOGDIR)...
168	$(INSTALL_DIR) -m 755 $(LOGDIR)
169	echo Creating $(REQUESTS)...
170	$(INSTALL_DIR) -m 710 -g $(CUPS_GROUP) $(REQUESTS)
171	echo Creating $(REQUESTS)/tmp...
172	$(INSTALL_DIR) -m 1770 -g $(CUPS_GROUP) $(REQUESTS)/tmp
173	echo Creating $(CACHEDIR)...
174	$(INSTALL_DIR) -m 770 -g $(CUPS_GROUP) $(CACHEDIR)
175	if test "x$(INITDIR)" != x; then \
176		echo Installing init scripts...; \
177		$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/init.d; \
178		$(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDIR)/init.d/cups; \
179		for level in $(RCLEVELS); do \
180			$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc$${level}.d; \
181			$(LN) ../init.d/cups $(BUILDROOT)$(INITDIR)/rc$${level}.d/S$(RCSTART)cups; \
182			$(LN) ../init.d/cups $(BUILDROOT)$(INITDIR)/rc$${level}.d/K$(RCSTOP)cups; \
183		done; \
184		$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDIR)/rc0.d; \
185		$(LN) ../init.d/cups $(BUILDROOT)$(INITDIR)/rc0.d/K$(RCSTOP)cups; \
186	fi
187	if test "x$(INITDDIR)" != x; then \
188		echo Installing init script...; \
189		$(INSTALL_DIR) -m 755 $(BUILDROOT)$(INITDDIR); \
190		$(INSTALL_SCRIPT) cups.sh $(BUILDROOT)$(INITDDIR); \
191	fi
192	if test "x$(LAUNCHD_DIR)" != x; then \
193		echo Installing launchd configuration files...; \
194		$(INSTALL_DIR) $(BUILDROOT)$(LAUNCHD_DIR); \
195		$(INSTALL_DATA) org.cups.cupsd.plist $(BUILDROOT)$(LAUNCHD_DIR); \
196		$(INSTALL_DATA) org.cups.cups-lpd.plist $(BUILDROOT)$(LAUNCHD_DIR); \
197	fi
198	if test "x$(SMFMANIFESTDIR)" != x; then \
199		echo Installing SMF manifest in $(SMFMANIFESTDIR)...;\
200		$(INSTALL_DIR) $(BUILDROOT)/$(SMFMANIFESTDIR); \
201		$(INSTALL_SCRIPT) cups.xml $(BUILDROOT)$(SMFMANIFESTDIR)/cups.xml; \
202	fi
203	if test "x$(SYSTEMD_DIR)" != x; then \
204		echo Installing systemd configuration files...; \
205		$(INSTALL_DIR) $(BUILDROOT)$(SYSTEMD_DIR); \
206		$(INSTALL_DATA) org.cups.cupsd.path $(BUILDROOT)$(SYSTEMD_DIR); \
207		$(INSTALL_DATA) org.cups.cupsd.service $(BUILDROOT)$(SYSTEMD_DIR); \
208		$(INSTALL_DATA) org.cups.cupsd.socket $(BUILDROOT)$(SYSTEMD_DIR); \
209	fi
210	if test "x$(XINETD)" != x; then \
211		echo Installing xinetd configuration file for cups-lpd...; \
212		$(INSTALL_DIR) -m 755 $(BUILDROOT)$(XINETD); \
213		$(INSTALL_DATA) cups-lpd.xinetd $(BUILDROOT)$(XINETD)/cups-lpd; \
214	fi
215
216
217#
218# Install programs...
219#
220
221install-exec:
222	echo Installing programs in $(SBINDIR)...
223	$(INSTALL_DIR) -m 755 $(SBINDIR)
224	$(INSTALL_BIN) -m $(CUPS_CUPSD_FILE_PERM) cupsd $(SBINDIR)
225	$(INSTALL_BIN) cupsfilter $(SBINDIR)
226	echo Installing programs in $(SERVERBIN)/daemon...
227	$(INSTALL_DIR) -m 755 $(SERVERBIN)
228	$(INSTALL_DIR) -m 755 $(SERVERBIN)/daemon
229	$(INSTALL_BIN) cups-deviced $(SERVERBIN)/daemon
230	$(INSTALL_BIN) cups-driverd $(SERVERBIN)/daemon
231	$(INSTALL_BIN) cups-exec $(SERVERBIN)/daemon
232	$(INSTALL_BIN) cups-lpd $(SERVERBIN)/daemon
233	if test "x$(SYMROOT)" != "x"; then \
234		$(INSTALL_DIR) $(SYMROOT); \
235		for file in $(PROGRAMS); do \
236			cp $$file $(SYMROOT); \
237			dsymutil $(SYMROOT)/$$file; \
238		done \
239	fi
240
241
242#
243# Install headers...
244#
245
246install-headers:
247	echo Installing header files in $(INCLUDEDIR)/cups...
248	$(INSTALL_DIR) -m 755 $(INCLUDEDIR)/cups
249	$(INSTALL_DATA) mime.h $(INCLUDEDIR)/cups
250
251
252#
253# Install libraries...
254#
255
256install-libs: $(INSTALLSTATIC)
257	echo Installing libraries in $(LIBDIR)...
258	$(INSTALL_DIR) -m 755 $(LIBDIR)
259	$(INSTALL_LIB) $(LIBCUPSMIME) $(LIBDIR)
260	if test $(LIBCUPSMIME) = "libcupsmime.so.1"; then \
261		$(RM) $(LIBDIR)/`basename $(LIBCUPSMIME) .1`; \
262		$(LN) $(LIBCUPSMIME) $(LIBDIR)/`basename $(LIBCUPSMIME) .1`; \
263	fi
264	if test $(LIBCUPSMIME) = "libcupsmime.1.dylib"; then \
265		$(RM) $(LIBDIR)/libcupsmime.dylib; \
266		$(LN) $(LIBCUPSMIME) $(LIBDIR)/libcupsmime.dylib; \
267	fi
268	if test "x$(SYMROOT)" != "x"; then \
269		$(INSTALL_DIR) $(SYMROOT); \
270		cp $(LIBCUPSMIME) $(SYMROOT); \
271		dsymutil $(SYMROOT)/$(LIBCUPSMIME); \
272	fi
273
274installstatic:
275	$(INSTALL_DIR) -m 755 $(LIBDIR)
276	$(INSTALL_LIB) -m 755 libcupsmime.a $(LIBDIR)
277	$(RANLIB) $(LIBDIR)/libcupsmime.a
278	$(CHMOD) 555 $(LIBDIR)/libcupsmime.a
279
280
281#
282# Uninstall the scheduler...
283#
284
285uninstall:
286	$(RM) $(SBINDIR)/cupsd
287	$(RM) $(SBINDIR)/cupsfilter
288	$(RM) $(SERVERBIN)/daemon/cups-deviced
289	$(RM) $(SERVERBIN)/daemon/cups-driverd
290	$(RM) $(SERVERBIN)/daemon/cups-exec
291	$(RM) $(SERVERBIN)/daemon/cups-lpd
292	-$(RMDIR) $(STATEDIR)/certs
293	-$(RMDIR) $(STATEDIR)
294	-$(RMDIR) $(SERVERROOT)/ppd
295	-$(RMDIR) $(SERVERROOT)/interfaces
296	-$(RMDIR) $(SERVERROOT)
297	-$(RMDIR) $(SERVERBIN)/driver
298	-$(RMDIR) $(SERVERBIN)/daemon
299	-$(RMDIR) $(SERVERBIN)
300	-$(RMDIR) $(SBINDIR)
301	-$(RMDIR) $(REQUESTS)/tmp
302	-$(RMDIR) $(REQUESTS)
303	-$(RMDIR) $(LOGDIR)
304	-$(RMDIR) $(CACHEDIR)
305	$(RM) $(LIBDIR)/libcupsmime.1.dylib
306	$(RM) $(LIBDIR)/libcupsmime.a
307	$(RM) $(LIBDIR)/libcupsmime.dylib
308	$(RM) $(LIBDIR)/libcupsmime.so
309	$(RM) $(LIBDIR)/libcupsmime.so.1
310	-$(RMDIR) $(LIBDIR)
311	$(RM) $(INCLUDEDIR)/cups/mime.h
312	-$(RMDIR) $(INCLUDEDIR)/cups
313	if test "x$(INITDIR)" != x; then \
314		echo Uninstalling init scripts...; \
315		$(RM) $(BUILDROOT)$(INITDIR)/init.d/cups; \
316		$(RMDIR) $(BUILDROOT)$(INITDIR)/init.d; \
317		$(RM)  $(BUILDROOT)$(INITDIR)/rc0.d/K00cups; \
318		$(RMDIR) $(BUILDROOT)$(INITDIR)/rc0.d; \
319		$(RM) $(BUILDROOT)$(INITDIR)/rc2.d/S99cups; \
320		$(RMDIR) $(BUILDROOT)$(INITDIR)/rc2.d; \
321		$(RM) $(BUILDROOT)$(INITDIR)/rc3.d/S99cups; \
322		$(RMDIR) $(BUILDROOT)$(INITDIR)/rc3.d; \
323		$(RM) $(BUILDROOT)$(INITDIR)/rc5.d/S99cups; \
324		$(RMDIR) $(BUILDROOT)$(INITDIR)/rc5.d; \
325	fi
326	if test "x$(INITDDIR)" != x; then \
327		echo Uninstalling startup script...; \
328		$(RM) $(BUILDROOT)$(INITDDIR)/cups.sh; \
329		$(RMDIR) $(BUILDROOT)$(INITDDIR); \
330	fi
331	if test "x$LAUNCHD_DIR" != x; then \
332		echo Uninstalling launchd files...; \
333		$(RM) $(BUILDROOT)$(LAUNCHD_DIR)/org.cups.cupsd.plist; \
334		$(RM) $(BUILDROOT)$(LAUNCHD_DIR)/org.cups.cups-lpd.plist; \
335	fi
336	if test "x$SYSTEMD_DIR" != x; then \
337		echo Uninstalling systemd files...; \
338		$(RM) $(BUILDROOT)$(SYSTEMD_DIR)/org.cups.cupsd.path; \
339		$(RM) $(BUILDROOT)$(SYSTEMD_DIR)/org.cups.cupsd.service; \
340		$(RM) $(BUILDROOT)$(SYSTEMD_DIR)/org.cups.cupsd.socket; \
341	fi
342	if test "x$(SMFMANIFESTDIR)" != x; then \
343		echo Uninstalling SMF manifest file...;\
344		$(RM) $(BUILDROOT)$(SMFMANIFESTDIR)/cups.xml; \
345	fi
346	if test "x$(XINETD)" != x; then \
347		echo Uninstalling xinetd configuration file for cups-lpd...; \
348		$(RM) $(BUILDROOT)$(XINETD)/cups-lpd; \
349	fi
350
351
352#
353# Automatic API help files...
354#
355
356apihelp:
357	mxmldoc --section "Programming" \
358		--title "MIME API" \
359		--css ../doc/cups-printable.css \
360		--header api-mime.header --intro api-mime.shtml \
361		mime.h $(LIBOBJS:.o=.c) >../doc/help/api-mime.html
362	mxmldoc --tokens help/api-mime.html api-mime.xml >../doc/help/api-mime.tokens
363	$(RM) api-mime.xml
364
365framedhelp:
366	mxmldoc --framed api-mime \
367		--section "Programming" \
368		--title "MIME API" \
369		--css ../doc/cups-printable.css \
370		--header api-mime.header --intro api-mime.shtml \
371		mime.h $(LIBOBJS:.o=.c)
372
373
374#
375# Make the scheduler executable, "cupsd".
376#
377
378cupsd:	$(CUPSDOBJS) $(LIBCUPSMIME) ../cups/$(LIBCUPS)
379	echo Linking $@...
380	$(CC) $(LDFLAGS) -o cupsd $(CUPSDOBJS) -L. -lcupsmime \
381		$(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
382		$(LIBPAPER) $(LIBMALLOC) $(SERVERLIBS) $(ONDEMANDLIBS) \
383                $(DNSSDLIBS) $(LIBS) $(LIBGSSAPI) $(LIBWRAP)
384
385cupsd-static:	$(CUPSDOBJS) libcupsmime.a ../cups/$(LIBCUPSSTATIC)
386	echo Linking $@...
387	$(CC) $(LDFLAGS) -o cupsd-static $(CUPSDOBJS) libcupsmime.a \
388		$(LIBZ) $(SSLLIBS) $(LIBSLP) $(LIBLDAP) $(PAMLIBS) \
389		../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(LIBPAPER) \
390		$(LIBMALLOC) $(SERVERLIBS) $(ONDEMANDLIBS) $(DNSSDLIBS) \
391                $(LIBGSSAPI) $(LIBWRAP)
392
393
394#
395# Make the cupsfilter utility.
396#
397
398cupsfilter:	cupsfilter.o $(LIBCUPSMIME) ../cups/$(LIBCUPS)
399	echo Linking $@...
400	$(CC) $(LDFLAGS) -o cupsfilter cupsfilter.o -L. -lcupsmime $(LIBS)
401	$(RM) convert
402	$(LN) cupsfilter convert
403
404
405#
406# Make the device daemon, "cups-deviced".
407#
408
409cups-deviced:	cups-deviced.o util.o ../cups/$(LIBCUPS)
410	echo Linking $@...
411	$(CC) $(LDFLAGS) -o cups-deviced cups-deviced.o util.o $(LIBS)
412
413
414#
415# Make the driver daemon, "cups-driverd".
416#
417
418cups-driverd:	cups-driverd.o util.o ../cups/$(LIBCUPS) ../ppdc/$(LIBCUPSPPDC)
419	echo Linking $@...
420	$(CXX) $(LDFLAGS) -o cups-driverd cups-driverd.o util.o \
421		-L../ppdc -lcupsppdc $(LIBS)
422
423
424#
425# Make the sandbox execution helper, "cups-exec".
426#
427
428cups-exec:	cups-exec.o
429	echo Linking $@...
430	$(CC) $(LDFLAGS) -o cups-exec cups-exec.o $(LIBS)
431
432
433#
434# Make the line printer daemon, "cups-lpd".
435#
436
437cups-lpd:	cups-lpd.o ../cups/$(LIBCUPS)
438	echo Linking $@...
439	$(CC) $(LDFLAGS) -o cups-lpd cups-lpd.o $(LIBS)
440
441
442#
443# libcupsmime.so.1
444#
445
446libcupsmime.so.1:	$(LIBOBJS)
447	echo Linking $@...
448	$(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LIBS)
449	$(RM) `basename $@ .1`
450	$(LN) $@ `basename $@ .1`
451
452
453#
454# libcupsmime.1.dylib
455#
456
457libcupsmime.1.dylib:	$(LIBOBJS) libcupsmime.exp
458	echo Linking $@...
459	$(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \
460		-install_name $(libdir)/$@ \
461		-current_version 1.0.0 \
462		-compatibility_version 1.0.0 \
463		-exported_symbols_list libcupsmime.exp \
464		$(LIBOBJS) $(LIBS)
465	$(RM) libcupsmime.dylib
466	$(LN) $@ libcupsmime.dylib
467
468
469#
470# libcupsmime.la
471#
472
473libcupsmime.la:    $(LIBOBJS)
474	echo Linking $@...
475	$(CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) -rpath $(LIBDIR) \
476		-version-info 1:0 $(LIBS)
477
478
479#
480# libcupsmime.a
481#
482
483libcupsmime.a:	$(LIBOBJS)
484	echo Archiving $@...
485	$(RM) $@
486	$(AR) $(ARFLAGS) $@ $(LIBOBJS)
487	$(RANLIB) $@
488
489
490#
491# Make the test program, "testlpd".
492#
493
494testlpd:	testlpd.o ../cups/$(LIBCUPSSTATIC) cups-lpd
495	echo Linking $@...
496	$(CC) $(LDFLAGS) -o testlpd testlpd.o ../cups/$(LIBCUPSSTATIC) \
497		$(COMMONLIBS) $(LIBZ) $(SSLLIBS) $(DNSSDLIBS) $(LIBGSSAPI)
498
499
500#
501# testmime
502#
503
504testmime:	testmime.o libcupsmime.a ../cups/$(LIBCUPSSTATIC)
505	echo Linking $@...
506	$(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testmime.o libcupsmime.a \
507		../cups/$(LIBCUPSSTATIC) $(COMMONLIBS) $(LIBZ) $(SSLLIBS) \
508		$(DNSSDLIBS) $(LIBGSSAPI)
509	echo Running MIME tests...
510	./testmime
511
512
513#
514# Make the test program, "testspeed".
515#
516
517testspeed:	testspeed.o ../cups/$(LIBCUPSSTATIC)
518	echo Linking $@...
519	$(CC) $(LDFLAGS) -o testspeed testspeed.o ../cups/$(LIBCUPSSTATIC) \
520		$(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) $(LIBGSSAPI)
521
522
523#
524# Make the test program, "testsub".
525#
526
527testsub:	testsub.o ../cups/$(LIBCUPSSTATIC)
528	echo Linking $@...
529	$(CC) $(LDFLAGS) -o testsub testsub.o ../cups/$(LIBCUPSSTATIC) \
530		$(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) $(LIBGSSAPI)
531
532
533#
534# Lines of code computation...
535#
536
537sloc:
538	echo "cupsd: \c"
539	sloccount $(CUPSDOBJS:.o=.c) $(LIBOBJS:.o=.c) cups-driverd.cxx cups-lpd.c 2>/dev/null | grep "Total Physical" | awk '{print $$9}'
540
541
542#
543# Dependencies...
544#
545
546include Dependencies
547
548
549#
550# End of "$Id: Makefile 12133 2014-08-29 11:28:25Z msweet $".
551#
552