2 # Library Makefile for CUPS.
4 # Copyright © 2007-2019 by Apple Inc.
5 # Copyright © 1997-2006 by Easy Software Products, all rights reserved.
7 # Licensed under Apache License v2.0. See the file "LICENSE" for more
118 # Header files to install...
156 DRIVERHEADERSPRIV
= \
165 # Targets in this directory...
203 # Make all targets...
210 # Make library targets...
220 unittests
: $(UNITTARGETS
)
224 # Remove object and target files...
228 $(RM
) $(OBJS
) $(TARGETS
) $(UNITTARGETS
)
229 $(RM
) libcups.so libcups.dylib
230 $(RM
) libcupsimage.so libcupsimage.dylib
234 # Update dependencies (without system header dependencies...)
238 $(CC
) -MM
$(ALL_CFLAGS
) $(OBJS
:.o
=.c
) >Dependencies
242 # Run oclint to check code coverage...
246 oclint
-o
=oclint.html
-html
$(LIBOBJS
:.o
=.c
) -- $(ALL_CFLAGS
)
250 # Install all targets...
253 install: all install-data install-headers install-libs install-exec
257 # Install data files...
264 # Install programs...
275 echo Installing header files into
$(INCLUDEDIR
)/cups...
276 $(INSTALL_DIR
) -m
755 $(INCLUDEDIR
)/cups
277 for file in
$(HEADERS
); do \
278 $(INSTALL_DATA
) $$file $(INCLUDEDIR
)/cups
; \
280 if
test "x$(privateinclude)" != x
; then \
281 echo Installing private header files into
$(PRIVATEINCLUDE
)...
; \
282 $(INSTALL_DIR
) -m
755 $(PRIVATEINCLUDE
); \
283 for file in
$(HEADERSPRIV
); do \
284 $(INSTALL_DATA
) $$file $(PRIVATEINCLUDE
)/$$file; \
290 # Install libraries...
293 install-libs
: $(LIBTARGETS
) $(INSTALLSTATIC
)
294 echo Installing libraries in
$(LIBDIR
)...
295 $(INSTALL_DIR
) -m
755 $(LIBDIR
)
296 $(INSTALL_LIB
) $(LIBCUPS
) $(LIBDIR
)
297 if
test $(LIBCUPS
) = "libcups.so.2"; then \
298 $(RM
) $(LIBDIR
)/`basename $(LIBCUPS) .2`; \
299 $(LN
) $(LIBCUPS
) $(LIBDIR
)/`basename $(LIBCUPS) .2`; \
301 if
test $(LIBCUPS
) = "libcups.2.dylib"; then \
302 $(RM
) $(LIBDIR
)/libcups.dylib
; \
303 $(LN
) $(LIBCUPS
) $(LIBDIR
)/libcups.dylib
; \
305 -if
test "x$(LIBCUPSIMAGE)" != x
; then \
306 $(INSTALL_LIB
) $(LIBCUPSIMAGE
) $(LIBDIR
); \
308 -if
test "x$(LIBCUPSIMAGE)" = "xlibcupsimage.so.2"; then \
309 $(RM
) $(LIBDIR
)/`basename $(LIBCUPSIMAGE) .2`; \
310 $(LN
) $(LIBCUPSIMAGE
) $(LIBDIR
)/`basename $(LIBCUPSIMAGE) .2`; \
312 -if
test "x$(LIBCUPSIMAGE)" = "xlibcupsimage.2.dylib"; then \
313 $(RM
) $(LIBDIR
)/libcupsimage.dylib
; \
314 $(LN
) $(LIBCUPSIMAGE
) $(LIBDIR
)/libcupsimage.dylib
; \
316 if
test "x$(SYMROOT)" != "x"; then \
317 $(INSTALL_DIR
) $(SYMROOT
); \
318 cp
$(LIBCUPS
) $(SYMROOT
); \
319 dsymutil
$(SYMROOT
)/$(LIBCUPS
); \
320 if
test "x$(LIBCUPSIMAGE)" != x
; then \
321 cp
$(LIBCUPSIMAGE
) $(SYMROOT
); \
322 dsymutil
$(SYMROOT
)/$(LIBCUPSIMAGE
); \
327 $(INSTALL_DIR
) -m
755 $(LIBDIR
)
328 $(INSTALL_LIB
) -m
755 $(LIBCUPSSTATIC
) $(LIBDIR
)
329 $(RANLIB
) $(LIBDIR
)/$(LIBCUPSSTATIC
)
330 $(CHMOD
) 555 $(LIBDIR
)/$(LIBCUPSSTATIC
)
331 $(INSTALL_LIB
) -m
755 libcupsimage.a
$(LIBDIR
)
332 $(RANLIB
) $(LIBDIR
)/libcupsimage.a
333 $(CHMOD
) 555 $(LIBDIR
)/libcupsimage.a
337 # Uninstall object and target files...
341 $(RM
) $(LIBDIR
)/libcups
.2.dylib
342 $(RM
) $(LIBDIR
)/libcups.a
343 $(RM
) $(LIBDIR
)/libcups.dylib
344 $(RM
) $(LIBDIR
)/libcups.so
345 $(RM
) $(LIBDIR
)/libcups.so
.2
346 $(RM
) $(LIBDIR
)/libcupsimage
.2.dylib
347 $(RM
) $(LIBDIR
)/libcupsimage.a
348 $(RM
) $(LIBDIR
)/libcupsimage.dylib
349 $(RM
) $(LIBDIR
)/libcupsimage.so
350 $(RM
) $(LIBDIR
)/libcupsimage.so
.2
352 for file in
$(HEADERS
); do \
353 $(RM
) $(INCLUDEDIR
)/cups
/$$file; \
355 -$(RMDIR
) $(INCLUDEDIR
)/cups
356 if
test "x$(privateinclude)" != x
; then \
357 for file in
$(HEADERSPRIV
); do \
358 $(RM
) $(PRIVATEINCLUDE
)/cups
/$$file; \
360 $(RMDIR
) $(PRIVATEINCLUDE
)/cups
; \
368 libcups.so
.2: $(LIBOBJS
)
370 $(DSO
) $(ARCHFLAGS
) $(ALL_DSOFLAGS
) -o
$@
$(LIBOBJS
) $(LIBS
)
371 $(RM
) `basename $@ .2`
372 $(LN
) $@
`basename $@ .2`
379 libcups
.2.dylib
: $(LIBOBJS
)
381 $(DSO
) $(ARCHFLAGS
) $(ALL_DSOFLAGS
) -o
$@ \
382 -install_name
$(libdir)/$@ \
383 -current_version
2.14.0 \
384 -compatibility_version
2.0.0 \
386 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
388 $(LN
) $@ libcups.dylib
395 libcups.la
: $(LIBOBJS
)
397 $(LD_CC
) $(ARCHFLAGS
) $(ALL_DSOFLAGS
) -o
$@
$(LIBOBJS
:.o
=.lo
) \
398 -rpath
$(LIBDIR
) -version-info
2:14 $(LIBS
)
405 libcups.a
: $(LIBOBJS
)
408 $(AR
) $(ARFLAGS
) $@
$(LIBOBJS
)
413 # libcups2.def (Windows DLL exports file...)
416 libcups2.def
: $(LIBOBJS
) $(IMAGEOBJS
) Makefile
417 echo Generating
$@...
418 echo
"LIBRARY libcups2" >libcups2.def
419 echo
"VERSION 2.14" >>libcups2.def
420 echo
"EXPORTS" >>libcups2.def
421 (nm
$(LIBOBJS
) $(IMAGEOBJS
) 2>/dev
/null | grep
"T _" | awk
'{print $$3}'; \
422 echo __cups_strcpy
; echo __cups_strlcat
; echo __cups_strlcpy
; \
423 echo __cups_snprintf
; echo __cups_vsnprintf
; echo __cups_gettimeofday
) | \
425 -e
'cups_debug|Apple|BackChannel|Backend|FileCheck|Filter|GSSService|SetNegotiate|SideChannel|SNMP' \
427 sed
-e
'1,$$s/^_//' |
sort >>libcups2.def
434 libcupsimage.so
.2: $(IMAGEOBJS
) libcups.so
.2
436 $(DSO
) $(ARCHFLAGS
) $(ALL_DSOFLAGS
) -o
$@
$(IMAGEOBJS
) $(LINKCUPS
)
437 $(RM
) `basename $@ .2`
438 $(LN
) $@
`basename $@ .2`
442 # libcupsimage.2.dylib
445 libcupsimage
.2.dylib
: $(IMAGEOBJS
) libcups
.2.dylib
447 $(DSO
) $(ARCHFLAGS
) $(ALL_DSOFLAGS
) -o
$@ \
448 -install_name
$(libdir)/$@ \
449 -current_version
2.3.0 \
450 -compatibility_version
2.0.0 \
451 $(IMAGEOBJS
) $(LINKCUPS
)
452 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
453 $(RM
) libcupsimage.dylib
454 $(LN
) $@ libcupsimage.dylib
461 libcupsimage.la
: $(IMAGEOBJS
) libcups.la
463 $(DSO
) $(ARCHFLAGS
) $(ALL_DSOFLAGS
) -o
$@
$(IMAGEOBJS
:.o
=.lo
) \
464 $(LINKCUPS
) -rpath
$(LIBDIR
) -version-info
2:3
471 libcupsimage.a
: $(IMAGEOBJS
)
474 $(AR
) $(ARFLAGS
) $@
$(IMAGEOBJS
)
479 # rasterbench (dependency on static CUPS library is intentional)
482 rasterbench
: rasterbench.o
$(LIBCUPSSTATIC
)
484 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ rasterbench.o
$(LINKCUPSSTATIC
)
485 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
489 # testadmin (dependency on static CUPS library is intentional)
492 testadmin
: testadmin.o
$(LIBCUPSSTATIC
)
494 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ testadmin.o
$(LINKCUPSSTATIC
)
495 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
499 # testarray (dependency on static CUPS library is intentional)
502 testarray
: testarray.o
$(LIBCUPSSTATIC
)
504 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testarray.o
$(LINKCUPSSTATIC
)
505 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
506 echo Running array API tests...
511 # testcache (dependency on static CUPS library is intentional)
514 testcache
: testcache.o
$(LIBCUPSSTATIC
)
516 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ testcache.o
$(LINKCUPSSTATIC
)
517 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
521 # testclient (dependency on static libraries is intentional)
524 testclient
: testclient.o
$(LIBCUPSSTATIC
)
526 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ testclient.o
$(LINKCUPSSTATIC
)
527 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
531 # testconflicts (dependency on static CUPS library is intentional)
534 testconflicts
: testconflicts.o
$(LIBCUPSSTATIC
)
536 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ testconflicts.o
$(LINKCUPSSTATIC
)
537 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
541 # testcreds (dependency on static CUPS library is intentional)
544 testcreds
: testcreds.o
$(LIBCUPSSTATIC
)
546 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testcreds.o
$(LINKCUPSSTATIC
)
547 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
551 # testcups (dependency on static CUPS library is intentional)
554 testcups
: testcups.o
$(LIBCUPSSTATIC
)
556 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ testcups.o
$(LINKCUPSSTATIC
)
557 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
561 # testdest (dependency on static CUPS library is intentional)
564 testdest
: testdest.o
$(LIBCUPSSTATIC
)
566 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ testdest.o
$(LINKCUPSSTATIC
)
567 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
571 # testfile (dependency on static CUPS library is intentional)
574 testfile
: testfile.o
$(LIBCUPSSTATIC
)
576 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testfile.o
$(LINKCUPSSTATIC
)
577 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
578 echo Running file API tests...
583 # testgetdests (dependency on static CUPS library is intentional)
586 testgetdests
: testgetdests.o
$(LIBCUPSSTATIC
)
588 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ testgetdests.o
$(LINKCUPSSTATIC
)
589 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
593 # testhttp (dependency on static CUPS library is intentional)
596 testhttp
: testhttp.o
$(LIBCUPSSTATIC
)
598 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testhttp.o
$(LINKCUPSSTATIC
)
599 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
600 echo Running HTTP API tests...
605 # testipp (dependency on static CUPS library is intentional)
608 testipp
: testipp.o
$(LIBCUPSSTATIC
)
610 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testipp.o
$(LINKCUPSSTATIC
)
611 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
612 echo Running IPP API tests...
617 # testi18n (dependency on static CUPS library is intentional)
620 testi18n
: testi18n.o
$(LIBCUPSSTATIC
)
622 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testi18n.o
$(LINKCUPSSTATIC
)
623 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
624 echo Running internationalization API tests...
629 # testlang (dependency on static CUPS library is intentional)
632 testlang
: testlang.o
$(LIBCUPSSTATIC
)
634 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testlang.o
$(LINKCUPSSTATIC
)
635 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
636 echo Creating locale directory structure...
638 for po in ..
/locale
/cups_
*.po
; do \
639 lang
=`basename $$po .po | sed -e '1,$$s/^cups_//'`; \
640 $(MKDIR
) locale
/$$lang; \
641 $(LN
) ..
/..
/$$po locale
/$$lang; \
643 echo Running language API tests...
644 LOCALEDIR
=locale .
/testlang
648 # testoptions (dependency on static CUPS library is intentional)
651 testoptions
: testoptions.o
$(LIBCUPSSTATIC
)
653 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testoptions.o
$(LINKCUPSSTATIC
)
654 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
655 echo Running option API tests...
660 # testppd (dependency on static CUPS library is intentional)
663 testppd
: testppd.o
$(LIBCUPSSTATIC
) test.ppd test2.ppd
665 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testppd.o
$(LINKCUPSSTATIC
)
666 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
667 echo Running PPD API tests...
672 # testpwg (dependency on static CUPS library is intentional)
675 testpwg
: testpwg.o
$(LIBCUPSSTATIC
) test.ppd
677 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testpwg.o
$(LINKCUPSSTATIC
)
678 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
679 echo Running PWG API tests...
684 # testraster (dependency on static CUPS library is intentional)
687 testraster
: testraster.o
$(LIBCUPSSTATIC
)
689 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ testraster.o
$(LINKCUPSSTATIC
)
690 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
691 echo Running raster API tests...
696 # testsnmp (dependency on static CUPS library is intentional)
699 testsnmp
: testsnmp.o
$(LIBCUPSSTATIC
)
701 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ testsnmp.o
$(LINKCUPSSTATIC
)
702 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
706 # testthreads (dependency on static CUPS library is intentional)
709 testthreads
: testthreads.o
$(LIBCUPSSTATIC
)
711 $(LD_CC
) $(ALL_LDFLAGS
) -o
$@ testthreads.o
$(LINKCUPSSTATIC
)
712 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
716 # tlscheck (dependency on static CUPS library is intentional)
719 tlscheck
: tlscheck.o
$(LIBCUPSSTATIC
)
721 $(LD_CC
) $(ARCHFLAGS
) $(ALL_LDFLAGS
) -o
$@ tlscheck.o
$(LINKCUPSSTATIC
)
722 $(CODE_SIGN
) -s
"$(CODE_SIGN_IDENTITY)" $@
726 # Automatic API help files...
730 echo Generating CUPS API help files...
732 codedoc
--section
"Programming" --body cupspm.md \
734 auth.c cups.h dest
*.c encode.c http.h http
*.c ipp.h ipp
*.c \
735 options.c tls-darwin.c usersys.c util.c \
736 --coverimage cupspm.png \
737 --epub ..
/doc
/help
/cupspm.epub
738 codedoc
--section
"Programming" --body cupspm.md \
739 cupspm.xml
> ..
/doc
/help
/cupspm.html
741 codedoc
--section
"Programming" --title
"Administration APIs" \
742 --css ..
/doc
/cups-printable.css \
743 --header api-admin.header
--body api-admin.shtml \
744 adminutil.c adminutil.h getdevices.c
>..
/doc
/help
/api-admin.html
745 codedoc
--section
"Programming" --title
"PPD API (DEPRECATED)" \
746 --css ..
/doc
/cups-printable.css \
747 --header api-ppd.header
--body api-ppd.shtml \
748 ppd.h ppd-
*.c raster-interstub.c
>..
/doc
/help
/api-ppd.html
749 codedoc
--section
"Programming" --title
"Raster API" \
750 --css ..
/doc
/cups-printable.css \
751 --header api-raster.header
--body api-raster.shtml \
752 ..
/cups
/raster.h raster-stubs.c \
753 >..
/doc
/help
/api-raster.html
754 codedoc
--section
"Programming" \
755 --title
"Filter and Backend Programming" \
756 --css ..
/doc
/cups-printable.css \
757 --header api-filter.header
--body api-filter.shtml \
758 backchannel.c backend.h backend.c sidechannel.c sidechannel.h \
759 >..
/doc
/help
/api-filter.html
763 # Lines of code computation...
768 sloccount
$(LIBOBJS
:.o
=.c
) 2>/dev
/null | grep
"Total Physical" | awk
'{print $$9}'
769 echo
"libcupsimage: \c"
770 sloccount
$(IMAGEOBJS
:.o
=.c
) 2>/dev
/null | grep
"Total Physical" | awk
'{print $$9}'
778 tls.o
: tls-darwin.c tls-gnutls.c tls-sspi.c