1# 2# API library Makefile for CUPS. 3# 4# Copyright 2007-2016 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 testhttp.o \ 93 testi18n.o \ 94 testipp.o \ 95 testoptions.o \ 96 testlang.o \ 97 testppd.o \ 98 testpwg.o \ 99 testsnmp.o \ 100 tlscheck.o 101OBJS = \ 102 $(LIBOBJS) \ 103 $(TESTOBJS) 104 105 106# 107# Header files to install... 108# 109 110HEADERS = \ 111 adminutil.h \ 112 array.h \ 113 backend.h \ 114 cups.h \ 115 dir.h \ 116 file.h \ 117 http.h \ 118 ipp.h \ 119 language.h \ 120 ppd.h \ 121 pwg.h \ 122 raster.h \ 123 sidechannel.h \ 124 transcode.h \ 125 versioning.h 126 127HEADERSPRIV = \ 128 array-private.h \ 129 cups-private.h \ 130 debug-private.h \ 131 file-private.h \ 132 http-private.h \ 133 ipp-private.h \ 134 language-private.h \ 135 md5-private.h \ 136 ppd-private.h \ 137 pwg-private.h \ 138 raster-private.h \ 139 snmp-private.h \ 140 string-private.h \ 141 thread-private.h 142 143 144# 145# Targets in this directory... 146# 147 148LIBTARGETS = \ 149 $(LIBCUPSSTATIC) \ 150 $(LIBCUPS) 151 152UNITTARGETS = \ 153 testadmin \ 154 testarray \ 155 testcache \ 156 testconflicts \ 157 testcreds \ 158 testcups \ 159 testdest \ 160 testfile \ 161 testhttp \ 162 testi18n \ 163 testipp \ 164 testlang \ 165 testoptions \ 166 testppd \ 167 testpwg \ 168 testsnmp \ 169 tlscheck 170 171TARGETS = \ 172 $(LIBTARGETS) 173 174 175# 176# Make all targets... 177# 178 179all: $(TARGETS) 180 181 182# 183# Make library targets... 184# 185 186libs: $(LIBTARGETS) 187 188 189# 190# Make unit tests... 191# 192 193unittests: $(UNITTARGETS) 194 195 196# 197# Remove object and target files... 198# 199 200clean: 201 $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS) 202 $(RM) libcups.so libcups.dylib 203 204 205# 206# Update dependencies (without system header dependencies...) 207# 208 209depend: 210 $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies 211 212 213# 214# Run oclint to check code coverage... 215# 216 217oclint: 218 oclint -o=oclint.html -html $(LIBOBJS:.o=.c) -- $(ALL_CFLAGS) 219 220 221# 222# Install all targets... 223# 224 225install: all install-data install-headers install-libs install-exec 226 227 228# 229# Install data files... 230# 231 232install-data: 233 234 235# 236# Install programs... 237# 238 239install-exec: 240 241 242# 243# Install headers... 244# 245 246install-headers: 247 echo Installing header files into $(INCLUDEDIR)/cups... 248 $(INSTALL_DIR) -m 755 $(INCLUDEDIR)/cups 249 for file in $(HEADERS); do \ 250 $(INSTALL_DATA) $$file $(INCLUDEDIR)/cups; \ 251 done 252 if test "x$(privateinclude)" != x; then \ 253 echo Installing private header files into $(PRIVATEINCLUDE)...; \ 254 $(INSTALL_DIR) -m 755 $(PRIVATEINCLUDE); \ 255 for file in $(HEADERSPRIV); do \ 256 $(INSTALL_DATA) $$file $(PRIVATEINCLUDE)/$$file; \ 257 done; \ 258 fi 259 260 261# 262# Install libraries... 263# 264 265install-libs: $(INSTALLSTATIC) 266 echo Installing libraries in $(LIBDIR)... 267 $(INSTALL_DIR) -m 755 $(LIBDIR) 268 $(INSTALL_LIB) $(LIBCUPS) $(LIBDIR) 269 if test $(LIBCUPS) = "libcups.so.2"; then \ 270 $(RM) $(LIBDIR)/`basename $(LIBCUPS) .2`; \ 271 $(LN) $(LIBCUPS) $(LIBDIR)/`basename $(LIBCUPS) .2`; \ 272 fi 273 if test $(LIBCUPS) = "libcups.2.dylib"; then \ 274 $(RM) $(LIBDIR)/libcups.dylib; \ 275 $(LN) $(LIBCUPS) $(LIBDIR)/libcups.dylib; \ 276 fi 277 if test "x$(SYMROOT)" != "x"; then \ 278 $(INSTALL_DIR) $(SYMROOT); \ 279 cp $(LIBCUPS) $(SYMROOT); \ 280 dsymutil $(SYMROOT)/$(LIBCUPS); \ 281 fi 282 283installstatic: 284 $(INSTALL_DIR) -m 755 $(LIBDIR) 285 $(INSTALL_LIB) -m 755 $(LIBCUPSSTATIC) $(LIBDIR) 286 $(RANLIB) $(LIBDIR)/$(LIBCUPSSTATIC) 287 $(CHMOD) 555 $(LIBDIR)/$(LIBCUPSSTATIC) 288 289 290# 291# Uninstall object and target files... 292# 293 294uninstall: 295 $(RM) $(LIBDIR)/libcups.2.dylib 296 $(RM) $(LIBDIR)/$(LIBCUPSSTATIC) 297 $(RM) $(LIBDIR)/libcups.dylib 298 $(RM) $(LIBDIR)/libcups.so 299 $(RM) $(LIBDIR)/libcups.so.2 300 -$(RMDIR) $(LIBDIR) 301 for file in $(HEADERS); do \ 302 $(RM) $(INCLUDEDIR)/cups/$$file; \ 303 done 304 -$(RMDIR) $(INCLUDEDIR)/cups 305 306 307# 308# libcups.so.2 309# 310 311libcups.so.2: $(LIBOBJS) 312 echo Linking $@... 313 $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LIBGSSAPI) \ 314 $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 315 $(RM) `basename $@ .2` 316 $(LN) $@ `basename $@ .2` 317 318 319# 320# libcups.2.dylib 321# 322 323libcups.2.dylib: $(LIBOBJS) $(LIBCUPSORDER) 324 echo Creating export list for $@... 325 nm -gm $(LIBOBJS) 2>/dev/null | grep "__text" | grep -v weak | \ 326 awk '{print $$NF}' | \ 327 grep -v -E -e '^(_cupsConnect|_cupsCharset|_cupsEncodingName|_cupsSetDefaults|_cupsSetHTTPError|_cupsUserDefault)$$' | \ 328 sort >t.exp 329 echo Linking $@... 330 $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \ 331 -install_name $(libdir)/$@ \ 332 -current_version 2.12.0 \ 333 -compatibility_version 2.0.0 \ 334 -exported_symbols_list t.exp \ 335 $(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ 336 $(COMMONLIBS) $(LIBZ) 337 $(RM) libcups.dylib t.exp 338 $(LN) $@ libcups.dylib 339 340 341# 342# libcups.la 343# 344 345libcups.la: $(LIBOBJS) 346 echo Linking $@... 347 $(CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) \ 348 -rpath $(LIBDIR) -version-info 2:12 $(LIBGSSAPI) $(SSLLIBS) \ 349 $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 350 351 352# 353# libcups.a 354# 355 356libcups.a: $(LIBOBJS) 357 echo Archiving $@... 358 $(RM) $@ 359 $(AR) $(ARFLAGS) $@ $(LIBOBJS) 360 $(RANLIB) $@ 361 362 363# 364# libcups2.def (Windows DLL exports file...) 365# 366 367libcups2.def: $(LIBOBJS) Makefile 368 echo Generating $@... 369 echo "LIBRARY libcups2" >libcups2.def 370 echo "VERSION 2.12" >>libcups2.def 371 echo "EXPORTS" >>libcups2.def 372 (nm $(LIBOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}'; \ 373 echo __cups_strcpy; echo __cups_strlcat; echo __cups_strlcpy) | \ 374 grep -v -E \ 375 -e 'cups_debug|Apple|BackChannel|Backend|FileCheck|Filter|GSSService|SetNegotiate|SideChannel' \ 376 -e 'Block$$' | \ 377 sed -e '1,$$s/^_//' | sort >>libcups2.def 378 379 380# 381# testadmin (dependency on static CUPS library is intentional) 382# 383 384testadmin: testadmin.o $(LIBCUPSSTATIC) 385 echo Linking $@... 386 $(CC) $(LDFLAGS) -o $@ testadmin.o $(LIBCUPSSTATIC) \ 387 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 388 389 390# 391# testarray (dependency on static CUPS library is intentional) 392# 393 394testarray: testarray.o $(LIBCUPSSTATIC) 395 echo Linking $@... 396 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testarray.o $(LIBCUPSSTATIC) \ 397 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 398 echo Running array API tests... 399 ./testarray 400 401 402# 403# testcache (dependency on static CUPS library is intentional) 404# 405 406testcache: testcache.o $(LIBCUPSSTATIC) 407 echo Linking $@... 408 $(CC) $(LDFLAGS) -o $@ testcache.o $(LIBCUPSSTATIC) \ 409 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 410 411 412# 413# testconflicts (dependency on static CUPS library is intentional) 414# 415 416testconflicts: testconflicts.o $(LIBCUPSSTATIC) 417 echo Linking $@... 418 $(CC) $(LDFLAGS) -o $@ testconflicts.o $(LIBCUPSSTATIC) \ 419 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 420 421 422# 423# testcreds (dependency on static CUPS library is intentional) 424# 425 426testcreds: testcreds.o $(LIBCUPSSTATIC) 427 echo Linking $@... 428 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testcreds.o $(LIBCUPSSTATIC) \ 429 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 430 431 432# 433# testcups (dependency on static CUPS library is intentional) 434# 435 436testcups: testcups.o $(LIBCUPSSTATIC) 437 echo Linking $@... 438 $(CC) $(LDFLAGS) -o $@ testcups.o $(LIBCUPSSTATIC) \ 439 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 440 441 442# 443# testdest (dependency on static CUPS library is intentional) 444# 445 446testdest: testdest.o $(LIBCUPSSTATIC) 447 echo Linking $@... 448 $(CC) $(LDFLAGS) -o $@ testdest.o $(LIBCUPSSTATIC) \ 449 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 450 451 452# 453# testfile (dependency on static CUPS library is intentional) 454# 455 456testfile: testfile.o $(LIBCUPSSTATIC) 457 echo Linking $@... 458 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testfile.o $(LIBCUPSSTATIC) \ 459 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 460 echo Running file API tests... 461 ./testfile 462 463 464# 465# testhttp (dependency on static CUPS library is intentional) 466# 467 468testhttp: testhttp.o $(LIBCUPSSTATIC) 469 echo Linking $@... 470 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testhttp.o $(LIBCUPSSTATIC) \ 471 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 472 echo Running HTTP API tests... 473 ./testhttp 474 475 476# 477# testipp (dependency on static CUPS library is intentional) 478# 479 480testipp: testipp.o $(LIBCUPSSTATIC) 481 echo Linking $@... 482 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testipp.o $(LIBCUPSSTATIC) \ 483 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 484 echo Running IPP API tests... 485 ./testipp 486 487 488# 489# testi18n (dependency on static CUPS library is intentional) 490# 491 492testi18n: testi18n.o $(LIBCUPSSTATIC) 493 echo Linking $@... 494 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testi18n.o $(LIBCUPSSTATIC) \ 495 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 496 echo Running internationalization API tests... 497 ./testi18n 498 499 500# 501# testlang (dependency on static CUPS library is intentional) 502# 503 504testlang: testlang.o $(LIBCUPSSTATIC) 505 echo Linking $@... 506 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testlang.o $(LIBCUPSSTATIC) \ 507 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 508 echo Running language API tests... 509 ./testlang 510 511 512# 513# testoptions (dependency on static CUPS library is intentional) 514# 515 516testoptions: testoptions.o $(LIBCUPSSTATIC) 517 echo Linking $@... 518 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testoptions.o $(LIBCUPSSTATIC) \ 519 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 520 echo Running option API tests... 521 ./testoptions 522 523 524# 525# testppd (dependency on static CUPS library is intentional) 526# 527 528testppd: testppd.o $(LIBCUPSSTATIC) test.ppd test2.ppd 529 echo Linking $@... 530 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testppd.o $(LIBCUPSSTATIC) \ 531 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 532 echo Running PPD API tests... 533 ./testppd 534 535 536# 537# testpwg (dependency on static CUPS library is intentional) 538# 539 540testpwg: testpwg.o $(LIBCUPSSTATIC) test.ppd 541 echo Linking $@... 542 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testpwg.o $(LIBCUPSSTATIC) \ 543 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 544 echo Running PWG API tests... 545 ./testpwg test.ppd 546 547 548# 549# testsnmp (dependency on static CUPS library is intentional) 550# 551 552testsnmp: testsnmp.o $(LIBCUPSSTATIC) 553 echo Linking $@... 554 $(CC) $(LDFLAGS) -o $@ testsnmp.o $(LIBCUPSSTATIC) \ 555 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 556 557 558# 559# tlscheck (dependency on static CUPS library is intentional) 560# 561 562tlscheck: tlscheck.o $(LIBCUPSSTATIC) 563 echo Linking $@... 564 $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ tlscheck.o $(LIBCUPSSTATIC) \ 565 $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) 566 567 568# 569# Automatic API help files... 570# 571 572apihelp: 573 echo Generating CUPS API help files... 574 mxmldoc --section "Programming" \ 575 --title "Introduction to CUPS Programming" \ 576 --css ../doc/cups-printable.css \ 577 --header api-overview.header --intro api-overview.shtml \ 578 >../doc/help/api-overview.html 579 mxmldoc --section "Programming" --title "Administration APIs" \ 580 --css ../doc/cups-printable.css \ 581 --header api-admin.header --intro api-admin.shtml \ 582 api-admin.xml \ 583 adminutil.c adminutil.h getdevices.c >../doc/help/api-admin.html 584 mxmldoc --tokens help/api-admin.html api-admin.xml >../doc/help/api-admin.tokens 585 $(RM) api-admin.xml 586 mxmldoc --section "Programming" --title "Array API" \ 587 --css ../doc/cups-printable.css \ 588 --header api-array.header --intro api-array.shtml \ 589 api-array.xml \ 590 array.h array.c >../doc/help/api-array.html 591 mxmldoc --tokens help/api-array.html api-array.xml >../doc/help/api-array.tokens 592 $(RM) api-array.xml 593 mxmldoc --section "Programming" --title "CUPS API" \ 594 --css ../doc/cups-printable.css \ 595 --header api-cups.header --intro api-cups.shtml \ 596 api-cups.xml \ 597 cups.h pwg.h adminutil.c dest*.c language.c notify.c \ 598 options.c pwg-media.c tempfile.c usersys.c \ 599 util.c >../doc/help/api-cups.html 600 mxmldoc --tokens help/api-cups.html api-cups.xml >../doc/help/api-cups.tokens 601 $(RM) api-cups.xml 602 mxmldoc --section "Programming" --title "File and Directory APIs" \ 603 --css ../doc/cups-printable.css \ 604 --header api-filedir.header --intro api-filedir.shtml \ 605 api-filedir.xml \ 606 file.h file.c dir.h dir.c >../doc/help/api-filedir.html 607 mxmldoc --tokens api-filedir.xml >../doc/help/api-filedir.tokens 608 $(RM) api-filedir.xml 609 mxmldoc --section "Programming" --title "PPD API (DEPRECATED)" \ 610 --css ../doc/cups-printable.css \ 611 --header api-ppd.header --intro api-ppd.shtml \ 612 api-ppd.xml ppd.h ppd-*.c >../doc/help/api-ppd.html 613 mxmldoc --tokens help/api-ppd.html api-ppd.xml >../doc/help/api-ppd.tokens 614 $(RM) api-ppd.xml 615 mxmldoc --section "Programming" --title "HTTP and IPP APIs" \ 616 --css ../doc/cups-printable.css \ 617 --header api-httpipp.header --intro api-httpipp.shtml \ 618 api-httpipp.xml \ 619 http.h ipp.h auth.c getdevices.c getputfile.c encode.c \ 620 http.c http-addr.c http-support.c ipp.c ipp-support.c \ 621 md5passwd.c request.c >../doc/help/api-httpipp.html 622 mxmldoc --tokens help/api-httpipp.html api-httpipp.xml >../doc/help/api-httpipp.tokens 623 $(RM) api-httpipp.xml 624 mxmldoc --section "Programming" \ 625 --title "Filter and Backend Programming" \ 626 --css ../doc/cups-printable.css \ 627 --header api-filter.header --intro api-filter.shtml \ 628 api-filter.xml \ 629 backchannel.c backend.h backend.c sidechannel.c sidechannel.h \ 630 >../doc/help/api-filter.html 631 mxmldoc --tokens help/api-filter.html api-filter.xml >../doc/help/api-filter.tokens 632 $(RM) api-filter.xml 633 634 635# 636# Lines of code computation... 637# 638 639sloc: 640 echo "libcupslite: \c" 641 sloccount $(LITEOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}' 642 echo "libcups: \c" 643 sloccount $(LIBOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}' 644 645 646# 647# Dependencies... 648# 649 650include Dependencies 651tls.o: tls-darwin.c tls-gnutls.c tls-sspi.c 652