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