2 # "$Id: Makefile 11173 2013-07-23 12:31:34Z msweet $"
4 # API library Makefile for CUPS.
6 # Copyright 2007-2012 by Apple Inc.
7 # Copyright 1997-2006 by Easy Software Products, all rights reserved.
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/".
15 # This file is subject to the Apple OS-Developed Software exception.
94 # Header files to install...
131 # Targets in this directory...
158 # Make all targets...
165 # Make library targets...
175 unittests: $(UNITTARGETS)
179 # Remove object and target files...
183 $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS)
184 $(RM) libcups.so libcups.sl libcups.dylib
188 # Update dependencies (without system header dependencies...)
192 $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies
196 # Run oclint to check code coverage...
200 oclint -o=oclint.html -html $(LIBOBJS:.o=.c) -- $(ALL_CFLAGS)
204 # Install all targets...
207 install: all install-data install-headers install-libs install-exec
211 # Install data files...
218 # Install programs...
229 echo Installing header files into $(INCLUDEDIR)/cups...
230 $(INSTALL_DIR) -m 755 $(INCLUDEDIR)/cups
231 for file in $(HEADERS); do \
232 $(INSTALL_DATA) $$file $(INCLUDEDIR)/cups; \
234 if test "x$(privateinclude)" != x; then \
235 echo Installing private header files into $(PRIVATEINCLUDE)...; \
236 $(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \
237 for file in $(HEADERSPRIV); do \
238 $(INSTALL_DATA) $$file $(PRIVATEINCLUDE)/$$file; \
244 # Install libraries...
247 install-libs: $(INSTALLSTATIC)
248 echo Installing libraries in $(LIBDIR)...
249 $(INSTALL_DIR) -m 755 $(LIBDIR)
250 $(INSTALL_LIB) $(LIBCUPS) $(LIBDIR)
251 if test $(LIBCUPS) = "libcups.so.2" -o $(LIBCUPS) = "libcups.sl.2"; then \
252 $(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
253 $(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \
255 if test $(LIBCUPS) = "libcups.2.dylib"; then \
256 $(RM) $(LIBDIR)/libcups.dylib; \
257 $(LN) $(LIBCUPS) $(LIBDIR)/libcups.dylib; \
259 if test "x$(SYMROOT)" != "x"; then \
260 $(INSTALL_DIR) $(SYMROOT); \
261 cp $(LIBCUPS) $(SYMROOT); \
265 $(INSTALL_DIR) -m 755 $(LIBDIR)
266 $(INSTALL_LIB) -m 755 $(LIBCUPSSTATIC) $(LIBDIR)
267 $(RANLIB) $(LIBDIR)/$(LIBCUPSSTATIC)
268 $(CHMOD) 555 $(LIBDIR)/$(LIBCUPSSTATIC)
272 # Uninstall object and target files...
276 $(RM) $(LIBDIR)/libcups.2.dylib
277 $(RM) $(LIBDIR)/$(LIBCUPSSTATIC)
278 $(RM) $(LIBDIR)/libcups.dylib
279 $(RM) $(LIBDIR)/libcups_s.a
280 $(RM) $(LIBDIR)/libcups.sl
281 $(RM) $(LIBDIR)/libcups.sl.2
282 $(RM) $(LIBDIR)/libcups.so
283 $(RM) $(LIBDIR)/libcups.so.2
285 for file in $(HEADERS); do \
286 $(RM) $(INCLUDEDIR)/cups/$$file; \
288 -$(RMDIR) $(INCLUDEDIR)/cups
292 # libcups.so.2, libcups.sl.2
295 libcups.so.2 libcups.sl.2: $(LIBOBJS)
297 $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LIBGSSAPI) \
298 $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
299 $(RM) `basename $@ .2`
300 $(LN) $@ `basename $@ .2`
307 libcups.2.dylib: $(LIBOBJS) $(LIBCUPSORDER)
308 echo Creating export list for $@...
309 nm $(LIBOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}' | \
310 grep -v -e '^(_cupsConnect|_cupsCharset|_cupsEncodingName|_cupsSetDefaults|_cupsSetHTTPError|_cupsUserDefault|_httpWait)$$' | \
313 $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \
314 -install_name $(libdir)/$@ \
315 -current_version 2.10.0 \
316 -compatibility_version 2.0.0 \
317 -exported_symbols_list t.exp \
318 $(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
319 $(COMMONLIBS) $(LIBZ)
320 $(RM) libcups.dylib t.exp
321 $(LN) $@ libcups.dylib
328 libcups_s.a: $(LIBOBJS) libcups_s.exp
330 $(DSO) $(DSOFLAGS) -Wl,-bexport:libcups_s.exp -o libcups_s.o \
331 $(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \
332 $(COMMONLIBS) $(LIBZ)
334 $(AR) $(ARFLAGS) $@ libcups_s.o
341 libcups.la: $(LIBOBJS)
343 $(CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) \
344 -rpath $(LIBDIR) -version-info 2:10 $(LIBGSSAPI) $(SSLLIBS) \
345 $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
352 libcups.a: $(LIBOBJS)
355 $(AR) $(ARFLAGS) $@ $(LIBOBJS)
360 # testadmin (dependency on static CUPS library is intentional)
363 testadmin: testadmin.o $(LIBCUPSSTATIC)
365 $(CC) $(LDFLAGS) -o $@ testadmin.o $(LIBCUPSSTATIC) \
366 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
370 # testarray (dependency on static CUPS library is intentional)
373 testarray: testarray.o $(LIBCUPSSTATIC)
375 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testarray.o $(LIBCUPSSTATIC) \
376 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
377 echo Running array API tests...
382 # testconflicts (dependency on static CUPS library is intentional)
385 testconflicts: testconflicts.o $(LIBCUPSSTATIC)
387 $(CC) $(LDFLAGS) -o $@ testconflicts.o $(LIBCUPSSTATIC) \
388 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
392 # testcups (dependency on static CUPS library is intentional)
395 testcups: testcups.o $(LIBCUPSSTATIC)
397 $(CC) $(LDFLAGS) -o $@ testcups.o $(LIBCUPSSTATIC) \
398 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
402 # testfile (dependency on static CUPS library is intentional)
405 testfile: testfile.o $(LIBCUPSSTATIC)
407 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testfile.o $(LIBCUPSSTATIC) \
408 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
409 echo Running file API tests...
414 # testhttp (dependency on static CUPS library is intentional)
417 testhttp: testhttp.o $(LIBCUPSSTATIC)
419 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testhttp.o $(LIBCUPSSTATIC) \
420 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
421 echo Running HTTP API tests...
426 # testipp (dependency on static CUPS library is intentional)
429 testipp: testipp.o $(LIBCUPSSTATIC)
431 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testipp.o $(LIBCUPSSTATIC) \
432 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
433 echo Running IPP API tests...
438 # testi18n (dependency on static CUPS library is intentional)
441 testi18n: testi18n.o $(LIBCUPSSTATIC)
443 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testi18n.o $(LIBCUPSSTATIC) \
444 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
445 echo Running internationalization API tests...
450 # testlang (dependency on static CUPS library is intentional)
453 testlang: testlang.o $(LIBCUPSSTATIC)
455 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testlang.o $(LIBCUPSSTATIC) \
456 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
457 echo Running language API tests...
462 # testoptions (dependency on static CUPS library is intentional)
465 testoptions: testoptions.o $(LIBCUPSSTATIC)
467 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testoptions.o $(LIBCUPSSTATIC) \
468 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
469 echo Running option API tests...
474 # testppd (dependency on static CUPS library is intentional)
477 testppd: testppd.o $(LIBCUPSSTATIC) test.ppd test2.ppd
479 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testppd.o $(LIBCUPSSTATIC) \
480 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
481 echo Running PPD API tests...
486 # testpwg (dependency on static CUPS library is intentional)
489 testpwg: testpwg.o $(LIBCUPSSTATIC) test.ppd
491 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testpwg.o $(LIBCUPSSTATIC) \
492 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
493 echo Running PWG API tests...
498 # testsnmp (dependency on static CUPS library is intentional)
501 testsnmp: testsnmp.o $(LIBCUPSSTATIC)
503 $(CC) $(LDFLAGS) -o $@ testsnmp.o $(LIBCUPSSTATIC) \
504 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ)
508 # Automatic API help files...
512 echo Generating CUPS API help files...
513 mxmldoc --section "Programming" \
514 --title "Introduction to CUPS Programming" \
515 --css ../doc/cups-printable.css \
516 --header api-overview.header --intro api-overview.shtml \
517 >../doc/help/api-overview.html
518 mxmldoc --section "Programming" --title "Array API" \
519 --css ../doc/cups-printable.css \
520 --header api-array.header --intro api-array.shtml \
522 array.h array.c >../doc/help/api-array.html
523 mxmldoc --tokens help/api-array.html api-array.xml >../doc/help/api-array.tokens
525 mxmldoc --section "Programming" --title "CUPS API" \
526 --css ../doc/cups-printable.css \
527 --header api-cups.header --intro api-cups.shtml \
529 cups.h adminutil.c dest*.c language.c notify.c \
530 options.c tempfile.c usersys.c \
531 util.c >../doc/help/api-cups.html
532 mxmldoc --tokens help/api-cups.html api-cups.xml >../doc/help/api-cups.tokens
534 mxmldoc --section "Programming" --title "File and Directory APIs" \
535 --css ../doc/cups-printable.css \
536 --header api-filedir.header --intro api-filedir.shtml \
538 file.h file.c dir.h dir.c >../doc/help/api-filedir.html
539 mxmldoc --tokens api-filedir.xml >../doc/help/api-filedir.tokens
540 $(RM) api-filedir.xml
541 mxmldoc --section "Programming" --title "PPD API (DEPRECATED)" \
542 --css ../doc/cups-printable.css \
543 --header api-ppd.header --intro api-ppd.shtml \
545 ppd.h attr.c conflicts.c custom.c emit.c localize.c mark.c page.c \
546 ppd.c >../doc/help/api-ppd.html
547 mxmldoc --tokens help/api-ppd.html api-ppd.xml >../doc/help/api-ppd.tokens
549 mxmldoc --section "Programming" --title "HTTP and IPP APIs" \
550 --css ../doc/cups-printable.css \
551 --header api-httpipp.header --intro api-httpipp.shtml \
553 http.h ipp.h auth.c getdevices.c getputfile.c encode.c \
554 http.c http-addr.c http-support.c ipp.c ipp-support.c \
555 md5passwd.c request.c >../doc/help/api-httpipp.html
556 mxmldoc --tokens help/api-httpipp.html api-httpipp.xml >../doc/help/api-httpipp.tokens
557 $(RM) api-httpipp.xml
558 mxmldoc --section "Programming" \
559 --title "Filter and Backend Programming" \
560 --css ../doc/cups-printable.css \
561 --header api-filter.header --intro api-filter.shtml \
563 backchannel.c backend.h backend.c sidechannel.c sidechannel.h \
564 >../doc/help/api-filter.html
565 mxmldoc --tokens help/api-filter.html api-filter.xml >../doc/help/api-filter.tokens
569 echo Generating CUPS API help files...
570 mxmldoc --framed api-overview \
571 --section "Programming" \
572 --title "Introduction to CUPS Programming" \
573 --css ../doc/cups-printable.css \
574 --header api-overview.header --intro api-overview.shtml
575 mxmldoc --framed api-array \
576 --section "Programming" --title "Array API" \
577 --css ../doc/cups-printable.css \
578 --header api-array.header --intro api-array.shtml \
580 mxmldoc --framed api-cups \
581 --section "Programming" --title "CUPS API" \
582 --css ../doc/cups-printable.css \
583 --header api-cups.header --intro api-cups.shtml \
584 cups.h adminutil.c dest*.c language.c notify.c \
585 options.c tempfile.c usersys.c \
587 mxmldoc --framed api-filedir \
588 --section "Programming" --title "File and Directory APIs" \
589 --css ../doc/cups-printable.css \
590 --header api-filedir.header --intro api-filedir.shtml \
591 file.h file.c dir.h dir.c
592 mxmldoc --framed api-ppd \
593 --section "Programming" --title "PPD API (DEPRECATED)" \
594 --css ../doc/cups-printable.css \
595 --header api-ppd.header --intro api-ppd.shtml \
596 ppd.h attr.c conflicts.c custom.c emit.c localize.c mark.c \
598 mxmldoc --framed api-httpipp \
599 --section "Programming" --title "HTTP and IPP APIs" \
600 --css ../doc/cups-printable.css \
601 --header api-httpipp.header --intro api-httpipp.shtml \
602 http.h ipp.h auth.c getdevices.c getputfile.c encode.c \
603 http.c http-addr.c http-support.c ipp.c ipp-support.c \
604 md5passwd.c request.c
605 mxmldoc --framed api-filter \
606 --section "Programming" \
607 --title "Filter and Backend Programming" \
608 --css ../doc/cups-printable.css \
609 --header api-filter.header --intro api-filter.shtml \
610 backchannel.c backend.h backend.c sidechannel.c sidechannel.h
614 # Lines of code computation...
618 echo "libcupslite: \c"
619 sloccount $(LITEOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}'
621 sloccount $(LIBOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}'
632 # End of "$Id: Makefile 11173 2013-07-23 12:31:34Z msweet $".