From ac391fa912902b285dc42cb266f4ef766731e4e7 Mon Sep 17 00:00:00 2001 From: yuuki-hirano Date: Wed, 25 Sep 2019 14:33:12 +0900 Subject: [PATCH] First commit of CUPS 2.3(https://github.com/apple/cups/archive/v2.3.0.zip) --- .idea/CUPS-for-Android.iml | 9 + .idea/encodings.xml | 4 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + Android.mk | 16 +- CHANGES-1.0.txt | 217 -- CHANGES-1.1.txt | 3462 ----------------- CHANGES-1.2.txt | 1261 ------ CHANGES-1.3.txt | 856 ---- CHANGES-1.4.txt | 843 ---- CHANGES-1.5.txt | 312 -- CHANGES-1.6.txt | 244 -- CHANGES-1.7.txt | 250 -- CHANGES-2.0.txt | 215 - CHANGES-2.1.txt | 150 - CHANGES.txt | 503 ++- CONTRIBUTING.txt | 15 + CREDITS.txt | 2 +- DEVELOPING.txt | 626 +++ INSTALL.txt | 56 +- LICENSE | 202 + LICENSE.txt | 965 ----- Makedefs.in | 104 +- Makefile | 73 +- NOTICE | 51 + README.md | 2 +- README.txt | 130 +- config.guess | 1568 ++++++++ config.h | 19 +- config.h.in | 70 +- config.sub | 1793 +++++++++ config.sh => configure | 2739 ++++++------- configure.in => configure.ac | 46 +- cups-config.in | 34 +- cups/Dependencies | 660 ++-- cups/Makefile | 381 +- cups/adminutil.c | 978 +---- cups/adminutil.h | 10 +- cups/api-admin.header | 9 +- cups/api-admin.shtml | 11 +- cups/api-array.header | 32 - cups/api-array.shtml | 194 - cups/api-cups.header | 38 - cups/api-cups.shtml | 441 --- cups/api-filedir.header | 34 - cups/api-filedir.shtml | 29 - cups/api-filter.header | 9 +- cups/api-filter.shtml | 16 +- cups/api-httpipp.header | 37 - cups/api-httpipp.shtml | 315 -- cups/api-overview.header | 54 - cups/api-overview.shtml | 92 - cups/api-ppd.header | 16 +- cups/api-ppd.shtml | 20 +- cups/api-raster.header | 31 + {filter => cups}/api-raster.shtml | 13 +- cups/array-private.h | 12 +- cups/array.c | 10 +- cups/array.h | 8 +- cups/attr.c | 335 -- cups/auth.c | 611 ++- cups/backchannel.c | 21 +- cups/backend.c | 8 +- cups/backend.h | 8 +- cups/conflicts.c | 1214 ------ cups/cups-private.h | 92 +- cups/cups.h | 90 +- cups/cupspm-icon.png | Bin 0 -> 13000 bytes cups/cupspm.md | 1005 +++++ cups/cupspm.opacity | Bin 0 -> 78640 bytes cups/cupspm.png | Bin 0 -> 146927 bytes cups/custom.c | 122 - cups/debug-internal.h | 84 + cups/debug-private.h | 70 +- cups/debug.c | 42 +- cups/dest-job.c | 9 +- cups/dest-localization.c | 352 +- cups/dest-options.c | 720 +++- cups/dest.c | 1402 ++++--- cups/dir.c | 18 +- cups/dir.h | 6 +- cups/emit.c | 1229 ------ cups/encode.c | 711 ++-- cups/file-private.h | 56 +- cups/file.c | 121 +- cups/file.h | 50 +- cups/getdevices.c | 14 +- cups/getifaddrs-internal.h | 113 + cups/getifaddrs.c | 13 +- cups/getputfile.c | 80 +- cups/globals.c | 48 +- cups/hash.c | 125 +- cups/http-addr.c | 24 +- cups/http-addrlist.c | 72 +- cups/http-private.h | 229 +- cups/http-support.c | 179 +- cups/http.c | 701 ++-- cups/http.h | 204 +- cups/ipp-file.c | 846 ++++ cups/ipp-private.h | 170 +- cups/ipp-support.c | 623 ++- cups/ipp-vars.c | 250 ++ cups/ipp.c | 619 ++- cups/ipp.h | 254 +- cups/langprintf.c | 9 +- cups/language-private.h | 60 +- cups/language.c | 635 ++- cups/language.h | 18 +- cups/libcups2.def | 75 +- cups/libcups_s.exp | 85 - cups/localize.c | 779 ---- cups/mark.c | 1101 ------ cups/{md5-private.h => md5-internal.h} | 14 +- cups/md5.c | 172 +- cups/md5passwd.c | 60 +- cups/notify.c | 9 +- cups/options.c | 14 +- cups/page.c | 396 -- cups/ppd-attr.c | 8 +- cups/ppd-cache.c | 2027 ++++++---- cups/ppd-conflicts.c | 15 +- cups/ppd-custom.c | 17 +- cups/ppd-emit.c | 42 +- cups/ppd-localize.c | 79 +- cups/ppd-mark.c | 42 +- cups/ppd-page.c | 11 +- cups/ppd-private.h | 89 +- cups/ppd-util.c | 181 +- cups/ppd.c | 300 +- cups/ppd.h | 196 +- cups/pwg-media.c | 35 +- cups/pwg-private.h | 12 +- cups/pwg.h | 8 +- cups/raster-error.c | 132 + filter/interpret.c => cups/raster-interpret.c | 20 +- cups/raster-interstub.c | 63 + cups/raster-private.h | 77 +- filter/raster.c => cups/raster-stream.c | 915 ++--- cups/raster-stubs.c | 355 ++ cups/raster.h | 52 +- {filter => cups}/rasterbench.c | 8 +- cups/request.c | 83 +- cups/sidechannel.c | 15 +- cups/sidechannel.h | 28 +- cups/snmp-private.h | 37 +- cups/snmp.c | 52 +- cups/snprintf.c | 19 +- cups/sspi-private.h | 82 - cups/sspi.c | 1485 ------- cups/string-private.h | 55 +- cups/string.c | 31 +- cups/tempfile.c | 64 +- cups/test.ppd | 22 +- cups/test2.ppd | 22 +- cups/testadmin.c | 8 +- cups/testarray.c | 15 +- cups/testcache.c | 12 +- cups/testclient.c | 1058 +++++ cups/testconflicts.c | 8 +- cups/testcreds.c | 8 +- cups/testcups.c | 80 +- cups/testdest.c | 177 +- cups/testfile.c | 46 +- cups/testfile.txt | 477 +++ cups/testgetdests.c | 45 + cups/testhttp.c | 79 +- cups/testi18n.c | 8 +- cups/testipp.c | 445 ++- cups/testlang.c | 376 +- cups/testoptions.c | 8 +- cups/testppd.c | 642 ++- cups/testpwg.c | 8 +- {filter => cups}/testraster.c | 473 +-- cups/testsnmp.c | 10 +- cups/thread-private.h | 40 +- cups/thread.c | 62 +- cups/tls-darwin.c | 468 ++- cups/tls-darwin.h | 35 + cups/tls-gnutls.c | 214 +- cups/tls-sspi.c | 72 +- cups/tls.c | 15 +- cups/tlscheck.c | 60 +- cups/transcode.c | 9 +- cups/transcode.h | 8 +- cups/usersys.c | 310 +- cups/util.c | 70 +- cups/versioning.h | 322 +- filter/Dependencies | 62 +- filter/Makefile | 223 +- filter/api-raster.header | 35 - filter/commandtops.c | 6 +- filter/common.c | 8 +- filter/common.h | 8 +- filter/error.c | 272 -- filter/gziptoany.c | 8 +- filter/libcupsimage2.def | 14 - filter/libcupsimage_s.exp | 16 - filter/postscript-driver.header | 11 +- filter/ppd-compiler.header | 11 +- filter/pstops.c | 18 +- filter/raster-driver.header | 11 +- filter/rastertoepson.c | 13 +- filter/rastertohp.c | 12 +- filter/rastertolabel.c | 24 +- filter/rastertopwg.c | 11 +- filter/spec-ppd.header | 11 +- filter/spec-ppd.shtml | 237 +- mopria.c | 12 + 208 files changed, 21593 insertions(+), 28445 deletions(-) create mode 100644 .idea/CUPS-for-Android.iml create mode 100644 .idea/encodings.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml delete mode 100644 CHANGES-1.0.txt delete mode 100644 CHANGES-1.1.txt delete mode 100644 CHANGES-1.2.txt delete mode 100644 CHANGES-1.3.txt delete mode 100644 CHANGES-1.4.txt delete mode 100644 CHANGES-1.5.txt delete mode 100644 CHANGES-1.6.txt delete mode 100644 CHANGES-1.7.txt delete mode 100644 CHANGES-2.0.txt delete mode 100644 CHANGES-2.1.txt create mode 100644 CONTRIBUTING.txt create mode 100644 DEVELOPING.txt create mode 100644 LICENSE delete mode 100644 LICENSE.txt create mode 100644 NOTICE create mode 100644 config.guess create mode 100644 config.sub rename config.sh => configure (88%) rename configure.in => configure.ac (60%) delete mode 100644 cups/api-array.header delete mode 100644 cups/api-array.shtml delete mode 100644 cups/api-cups.header delete mode 100644 cups/api-cups.shtml delete mode 100644 cups/api-filedir.header delete mode 100644 cups/api-filedir.shtml delete mode 100644 cups/api-httpipp.header delete mode 100644 cups/api-httpipp.shtml delete mode 100644 cups/api-overview.header delete mode 100644 cups/api-overview.shtml create mode 100644 cups/api-raster.header rename {filter => cups}/api-raster.shtml (90%) delete mode 100644 cups/attr.c delete mode 100644 cups/conflicts.c create mode 100644 cups/cupspm-icon.png create mode 100644 cups/cupspm.md create mode 100644 cups/cupspm.opacity create mode 100644 cups/cupspm.png delete mode 100644 cups/custom.c create mode 100644 cups/debug-internal.h delete mode 100644 cups/emit.c create mode 100644 cups/getifaddrs-internal.h create mode 100644 cups/ipp-file.c create mode 100644 cups/ipp-vars.c delete mode 100644 cups/libcups_s.exp delete mode 100644 cups/localize.c delete mode 100644 cups/mark.c rename cups/{md5-private.h => md5-internal.h} (90%) delete mode 100644 cups/page.c create mode 100644 cups/raster-error.c rename filter/interpret.c => cups/raster-interpret.c (98%) create mode 100644 cups/raster-interstub.c rename filter/raster.c => cups/raster-stream.c (69%) create mode 100644 cups/raster-stubs.c rename {filter => cups}/rasterbench.c (94%) delete mode 100644 cups/sspi-private.h delete mode 100644 cups/sspi.c create mode 100644 cups/testclient.c create mode 100644 cups/testfile.txt create mode 100644 cups/testgetdests.c rename {filter => cups}/testraster.c (65%) create mode 100644 cups/tls-darwin.h delete mode 100644 filter/api-raster.header delete mode 100644 filter/error.c delete mode 100644 filter/libcupsimage2.def delete mode 100644 filter/libcupsimage_s.exp create mode 100644 mopria.c diff --git a/.idea/CUPS-for-Android.iml b/.idea/CUPS-for-Android.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/CUPS-for-Android.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..15a15b2 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..fe097cd --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Android.mk b/Android.mk index 112b924..ed00e26 100644 --- a/Android.mk +++ b/Android.mk @@ -21,7 +21,6 @@ LOCAL_SRC_FILES:= \ cups/array.c \ cups/auth.c \ cups/backchannel.c \ - cups/backend.c \ cups/debug.c \ cups/dest.c \ cups/dest-job.c \ @@ -31,7 +30,6 @@ LOCAL_SRC_FILES:= \ cups/encode.c \ cups/file.c \ cups/getdevices.c \ - cups/getifaddrs.c \ cups/getputfile.c \ cups/globals.c \ cups/hash.c \ @@ -47,14 +45,10 @@ LOCAL_SRC_FILES:= \ cups/md5passwd.c \ cups/notify.c \ cups/options.c \ - cups/ppd.c \ - cups/ppd-attr.c \ - cups/ppd-cache.c \ - cups/ppd-conflicts.c \ - cups/ppd-custom.c \ - cups/ppd-mark.c \ - cups/ppd-page.c \ cups/pwg-media.c \ + cups/raster-error.c \ + cups/raster-stream.c \ + cups/raster-stubs.c \ cups/request.c \ cups/sidechannel.c \ cups/snmp.c \ @@ -66,8 +60,6 @@ LOCAL_SRC_FILES:= \ cups/transcode.c \ cups/usersys.c \ cups/util.c \ - filter/error.c \ - filter/raster.c \ mopria.c \ disabled_src_files:= \ @@ -78,7 +70,7 @@ LOCAL_C_INCLUDES := \ LOCAL_CFLAGS := -D_PPD_DEPRECATED= -Wno-implicit-function-declaration -Wno-empty-body LOCAL_MODULE := lib$(PRIV_LIB_NAME)cups LOCAL_MODULE_TAGS := optional -LOCAL_LDLIBS += -lz -llog -Wl,--no-warn-shared-textrel +LOCAL_LDLIBS += -lz -llog LOCAL_STATIC_LIBRARIES := libgnutls LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true include $(BUILD_SHARED_LIBRARY) \ No newline at end of file diff --git a/CHANGES-1.0.txt b/CHANGES-1.0.txt deleted file mode 100644 index 296d89f..0000000 --- a/CHANGES-1.0.txt +++ /dev/null @@ -1,217 +0,0 @@ -CHANGES-1.0.txt ---------------- - -CHANGES IN CUPS v1.0.5 - - - The HP-GL/2 filter did not correctly set the pen color - for pens other than #1. - - The scheduler would only accept 26 simultaneous jobs - under some OS releases (mkstemp() limitation.) It now - handles up to 2^32 simultaneous jobs. - - The PostScript filter loaded the printer's PPD file - twice. - - The PAM authentication code now uses pam_strerror() to - provide a textual error message in the error_log file. - - The scheduler now copies PPD and interface script - files instead of moving them; this fixes installations - with a separate requests directory. - - The PostScript RIP did not generate correct 6-color - output. - - Several filters were marking PPD options twice when - they didn't need to. - - The scheduler did not save the printer or class state - after an accept-jobs or reject-jobs operation. - - The cupsGetDefault() function now ignores the PRINTER - environment variable if it is set to "lp". - - New ippErrorString() function to get textual error - messages. - - Better error reporting in the System V commands. - - The lpadmin and lpstat commands always tried to - connect to the default server. - - The text filter didn't load the charset files from the - correct location. - - Wasn't sending a WWW-Authenticate: field to HTTP - clients when authentication was required. - - httpSeparate() didn't always set the default port - number for known methods. - - The HP-GL/2 filter now looks for "PSwidth,length" - instead of (the correct) "PSlength,width" as - documented by HP. It appears that many major CAD - applications are broken and this change allows the - auto-rotation to work with them. - - The IPP "printer-resolution" option was not being - translated. - - The charset files did not include the Microsoft - "standard" characters from 128 to 159 (unused by the - ISO-8859-x charsets) - - The scheduler was chunking the Content-Type field from - CGI programs; this problem was most noticeable with - Microsoft Internet Explorer 5. - - By popular demand, the printers, jobs, and classes - CGIs no longer force a reload of the page every 10/30 - seconds. - - The scheduler incorrectly required that the IPP client - provide a document-format attribute for the - validate-job operation. - - Clients that sent bad IPP requests without the - required attributes-natural-language and - attributes-charset attributes would crash the - scheduler. - - -CHANGES IN CUPS v1.0.4 - - - Documentation updates. - - Jobs would get stuck in the queue and wouldn't print - until you enabled the queue. - - The lp and lpr commands now catch SIGHUP and SIGINTR. - - The lp and lpr commands now use sigaction or sigset - when available. - - CUPS library updates for WIN32/OS-2 - - -CHANGES IN CUPS v1.0.3 - - - Documentation updates. - - The lpq man page was missing. - - The configure script was not properly detecting the - image libraries. - - The top-level makefile was calling "make" instead of - "$(MAKE)". - - PostScript filter fixes for number-up, OutputOrder, - and %Trailer. - - The imagetops filter didn't end the base-85 encoding - properly if the image data was not a multiple of 4 - bytes in length. - - The imagetoraster filter didn't generate good banded - RGB or CMY data (was dividing the line width by 4 - instead of 3...) - - The imagetoraster filter now records the bounding - box of the image on the page. - - The CUPS image library cache code wasn't working as - designed; images larger than the maximum RIP cache - would eventually thrash using the same cache tile. - - The CUPS image library TIFF loading code didn't - handle unknown resolution units properly; the fixed - code uses a default resolution of 128 PPI. - - cupsGetClasses() and cupsGetPrinters() did not free - existing strings if they ran out of memory. - - The scheduler logs incorrectly contained 3 digits for - the timezone offset instead of 4. - - The scheduler now does a lookup for the default user - and group ID; the previous hardcoded values caused - problems with the LPD backend. - - The cancel-job operation now allows any user in the - system group to cancel any job. - - The cancel-job operation stopped the print queue if - the job was being printed. - - Now only stop printers if the backend fails. If the - filter fails then the failure is noted in the - error_log and printing continues with the next file in - the queue. - - Now log whether a filter fails because of a signal - or because it returned a non-zero exit status. - - The root user now always passes the system group test. - - Printers with an interface script and remote printers - and classes didn't have a printer-make-and-model - attribute. - - Added logging of lost/timed-out remote printers. - - The HP-GL/2 filter was scaling the pen width twice. - - Updated the HP-GL/2 filter to use a single SP (Set - Pen) procedure. This makes the output smaller and is - more appropriate since the filter keeps track of the - pen states already. - - The scheduler didn't handle passwords with spaces. - - The IPP backend now does multiple copies and retries - if the destination server requires it (e.g. HP - JetDirect.) - - The disable command didn't implement the "-c" option - (cancel all jobs.) - - Changed the CMYK generation function for the image file - and PostScript RIPs. - - The lp command didn't support the "-h" option as - documented. - - The AppSocket, IPP, and LPD backends now retry on all - network errors. This should prevent stopped queues - caused by a printer being disconnected from the - network or powered off. - - The scheduler now restarts a job if the corresponding - printer is modified. - - The image RIPs now rotate the image if needed to fit - on the page. - - -CHANGES IN CUPS v1.0.2 - - - The HP-GL/2 filter didn't always scale the output - correctly. - - The HP-GL/2 filter now supports changing the page size - automatically when the "fitplot" option is not used. - - The cancel-job operation was expecting a resource name - of the form "/job/#" instead of "/jobs/#"; this - prevented the cancel and lprm commands from working. - - The backends didn't log pages when files were printed - using the "-oraw" option. - - The authorization code did not work with the Slackware - long shadow password package because its crypt() can - return NULL. - - The chunking code didn't work for reading the response - of a POST request. - - cupsGetPPD() now does authentication as needed. - - The N-up code in the PostScript filter didn't work - with some printers (grestoreall would restore the - default blank page and device settings). - - The N-up code in the PostScript filter didn't scale - the pages to fit within the imageable area of the - page. - - Wasn't doing an fchown() on the request files. This - caused problems when the default root account group - and CUPS group were not the same. - - -CHANGES IN CUPS v1.0.1 - - - Documentation updates. - - Fixed a bunch of possible buffer-overflow conditions. - - The scheduler now supports authentication using PAM. - - Updated the Italian message file. - - httpEncode64() didn't add an extra "=" if there was - only one byte in the last three-byte group. - - Now drop any trailing character set from the locale - string (e.g. "en_US.ISO_8859-1" becomes "en_US") - - Fixed "timezone" vs "tm_gmtoff" usage for BSD-based - operating systems. - - Updated IPP security so that "get" operations can be - done from any resource name; this allows the CGIs to - work with printer authentication enabled so long as - authentication isn't turned on for the whole "site". - - The IPP code didn't properly handle the "unsupported" - group; this caused problems with the HP JetDirect since - it doesn't seem to support the "copies" attribute. - - The HTTP chunking code was missing a CR LF pair at the - end of a 0-length chunk. - - The httpSeparate() function didn't handle embedded - usernames and passwords in the URI properly. - - Doing "lpadmin -p printer -E" didn't restart printing - if there were pending jobs. - - The cancel-job operation now requires either a - requesting-user-name attribute or an authenticated - username. - - The add-printer code did not report errors if the - interface script or PPD file could not be renamed. - - Request files are now created without world read - permissions. - - Added a cupsLastError() function to the CUPS API to - retrieve the IPP error code from the last request. - - Options are now case-insensitive. - - The lpq command now provides 10 characters for the - username instead of the original (Berkeley standard) - 7. - - The cancel command needed a local CUPS server to work - (or the appropriate ServerName in cupsd.conf) - - The cancel and lprm commands didn't report the IPP - error if the job could not be cancelled. - - The lp and lpr commands didn't intercept SIGTERM to - remove temporary files when printing from stdin. - - The lp and lpr commands didn't report the IPP error if - the job could not be printed. diff --git a/CHANGES-1.1.txt b/CHANGES-1.1.txt deleted file mode 100644 index c641e79..0000000 --- a/CHANGES-1.1.txt +++ /dev/null @@ -1,3462 +0,0 @@ -CHANGES-1.1.txt ---------------- - -CHANGES IN CUPS V1.1.23 - - - Updated the Spanish man pages (STR #1041) - - The lpstat man page contained a typo (STR #1040) - - The scheduler's is_path_absolute() code could cause a - DoS (STR #1042) - - The scheduler's device loading code used the wrong - size limits for the make/model and info parameters - (STR #1035) - - The PNG loading code did not use a "long unsigned - integer" format specifier for the width and height - (STR #1032) - - The web interface only showed the first 4 or 8 - characters of "{variable-name}" for undefined template - variables (STR #1031) - - The hpgltops filter did not handle a common PCL - command to enter HP-GL/2 mode (STR #1037) - - -CHANGES IN CUPS V1.1.23rc1 - - - The lpr man page did not document the "-U" option (STR - #998) - - The scheduler no longer sends the page-set option when - printing banner pages (STR #995) - - Fixed a debug message in the imagetops filter (STR - #1012) - - The lprm man page listed the "-" option in the wrong - order (STR #911) - - The hpgltops filter contained two buffer overflows - that could potentially allow remote access to the "lp" - account (STR #1024) - - The lppasswd command did not protect against file - descriptor or ulimit attacks (STR #1023) - - The "lpc status" command used the wrong resource path - when querying the list of printers and jobs, causing - unnecessary authentication requests (STR #1018) - - The httpWait() function did not handle signal - interruptions (STR #1020) - - The USB backend used the wrong size status variable - when checking the printer status (STR #1017) - - The scheduler did not delete classes from other - classes or implicit classes, which could cause a crash - (STR #1015) - - The IPP backend now logs the remote print job ID at - log level NOTICE instead of INFO (so it shows up in - the error_log file...) - - -CHANGES IN CUPS V1.1.22 - - - The lpstat man page incorrectly listed the "-s" option - as using the equivalent of the "-p" option to list the - printers; it uses the "-v" option to list the printers - (STR #986) - - Now allow 0-length reads in the CUPS file API (STR - #985) - - cupsDoFileRequest() now sets cupsLastError() to - IPP_ERROR on network errors (STR #953) - - The pdftops filter didn't scale small pages up to the - output page size when the fitplot option was used (STR - #984) - - Fixed the ipptest program usage message (STR #959) - - Added Spanish man pages (STR #963) - - Fixed the order of comparisons in the client.conf - reading code (STR #971) - - cupsLangGet() incorrectly set the current locale (STR - #970) - - -CHANGES IN CUPS V1.1.22rc2 - - - The pdftops filter didn't check the range of all - integer attributes (STR #972) - - Documentation corrections (STR #944, STR #946) - - Also sanitize device URI in argv[0] (STR #933) - - cupsRasterReadHeader() didn't swap bytes for the - numeric fields properly (STR #930) - - -CHANGES IN CUPS V1.1.22rc1 - - - Now sanitize the device URI that is reported in the - error_log file (STR #920) - - Fixed some memory and file descriptor leaks in the job - dispatch code (STR #921) - - Deleting a printer could cause a crash with browsing - enabled (STR #865, STR #881, STR #928) - - Browsing would turn off if the scheduler got an EAGAIN - error (STR #924) - - The mime.types file didn't recognize PostScript as a - PJL language name (STR #925) - - -CHANGES IN CUPS V1.1.21 - - - The scheduler did not separate Digest authentication - parameters with commas (STR #882) - - Fixed some problems with image printing to custom page - sizes (STR #891) - - Removed the remaining scheduler code that did not use - the "close-on-exec" file descriptor flag to speed up - program invocations (STR #890) - - The "lpr -r" command removed the print file even if it - was not printed. It now only removes the file if the - job is successfully created (STR #886) - - Revamped the custom page size orientation fix (STR - #127) - - The lp, lpq, lpr, and lpstat commands now report when - an environment variable is pointing to a non-existent - printer instead of just saying "no default - destination" (STR #879) - - Queue names with 2 periods (e.g. "printer..2") were - not supported (STR #866) - - -CHANGES IN CUPS V1.1.21rc2 - - - Fixed a denial-of-service bug in the CUPS browse - protocol support (STR #863) - - The scheduler used a select() timeout of INT_MAX - seconds when there was nothing to do, which doesn't - work on IRIX (STR #864) - - Updated the cupsaddsmb program to use the new Windows - 2000 PostScript drivers instead of the Windows NT - printer drivers (STR #390) - - The gziptoany filter did not produce copies for raw - print jobs (STR #808) - - The cupsLangGet() function now uses nl_langinfo(), - when available, to get the current encoding (STR #856) - - Added a ReloadTimeout directive to control how long - the scheduler waits for jobs to complete before - restarting the scheduler (STR #861) - - Added a note to the default cupsd.conf file which - mentions that you must allow connections from - localhost for the command-line and web interfaces to - work (STR #850) - - The IPP backend incorrectly used the local port when - communicating with a remote server; this caused - problems with some custom configurations (STR #852) - - The cups-lpd mini-daemon wasn't using the right - default banner option (STR #851) - - Updated the new httpDecode64_2() and httpEncode64_2() - functions to handle arbitrary binary data, not just - text (STR #860) - - String options with quotes in their values were not - quoted properly by the scheduler (STR #839) - - Configure script changes for GNU/Hurd (STR #838) - - The lppasswd program was not installed properly by GNU - install when the installer was not root (STR #836) - - Updated the cups-lpd man page (STR #843) - - Fixed a typo in the cupsd man page (STR #833) - - The USB backend now defaults to using the newer - /dev/usb/lpN filenames; this helps on systems which - use the devfs filesystem type on Linux (STR #818) - - The config.h file did not define the HAVE_USERSEC_H - constant when the configure script detected the - usersec.h header file. This caused authentication - errors on AIX (STR #832) - - The lp and lpr commands now report the temporary - filename and error if they are unable to create a - temporary file (STR #812) - - Added ServerTokens directive to control the Server - header in HTTP responses (STR #792) - - Added new httpDecode64_2(), httpEncode64_2(), and - httpSeparate2() functions which offer buffer size - arguments (STR #797) - - The cupsGetFile() and cupsPutFile() code did not - support CDSA or GNUTLS (STR #794) - - The httpSeparate() function did not decode all - character escapes (STR #795) - - The cupstestppd program now checks for invalid Duplex - option choices and fails PPD files that use - non-standard values (STR #791) - - Updated the printer name error message to indicate - that spaces are not allowed (STR #675) - - The scheduler didn't handle HTTP GET form data - properly (STR #744) - - The pstops filter now makes sure that the prolog code - is sent before the setup code (STR #776) - - The pstops filter now handles print files that - incorrectly start @PJL commands without a language - escape (STR #734) - - Miscellaneous build fixes for NetBSD (STR #788) - - Added support for quoted system group names (STR #784) - - Added "version" option to IPP backend to workaround - serious bug in Linksys's IPP implementation (STR #767) - - Added Spanish translation of web interface (STR #772, - STR #802) - - The LPD backend now uses geteuid() instead of getuid() - when it is available (STR #752) - - The IPP backend did not report the printer state if - the wait option was set to "no" (STR #761) - - The printer state was not updated for "STATE: foo,bar" - messages (STR #745) - - Added new CUPS API convenience functions which accept - a HTTP connection to eliminate extra username/password - prompts. This resolves a previous authentication - caching issue (STR #729, STR #743) - - The scheduler did not correctly throttle the browse - broadcasts, resulting in missing printers on client - machines (STR #754) - - The scheduler did not pass the correct CUPS_ENCRYPTION - setting to CGI programs which caused problems on - systems which used non-standard encryption settings - (STR #773) - - The lpq command showed 11st, 12nd, and 13rd instead of - 11th, 12th, and 13th for the rank (STR #769) - - "make install" didn't work on some platforms due to an - error in the man page makefiles (STR #775) - - Changed some calls to snprintf() in the scheduler to - SetStringf() (STR #740) - - -CHANGES IN CUPS V1.1.21rc1 - - - Fixed some "type-punned" warnings produced by GCC when - -fstrict-aliasing is specified (STR #679) - - The PDF filter incorrectly calculated the bounding box - of a page (STR #682) - - The IPP backend did not use SSL when printing over a - port other than 443 (STR #730) - - The scheduler could crash when processing a Limit or - LimitExcept directive (STR #728) - - The lpq, lpr, and lp commands did not differentiate - between the server being unresponsive and the lack of - a default printer (STR #728) - - The PAM checks in the configure script did not stop - after the first match (STR #728) - - The cups-config man page was incorrectly placed in - section 3 (STR #728) - - The cupstestppd utility did not show a warning message - when a PPD file indicated BCP protocol support with - PJL (STR #720) - - The scheduler did not return the correct exit code - when startup failed (STR #718) - - The cupsRasterReadPixels() function checked for - EAGAIN, which caused problems on FreeBSD (STR #723) - - The cupsGetDests() function did not use the current - encryption setting (STR #653) - - The scheduler did not properly parse name-based - BrowseRelay directives in the cupsd.conf file (STR - #711) - - The IPP backend now supports the following options in - the device URI: encryption, waitjob, and waitprinter - (STR #699) - - The parallel, serial, socket, and USB backends did not - return a non-zero exit status when a job failed to - print in the middle of sending it (STR #715) - - Location directives in the cupsd.conf file were - case-sensitive for printer and class names, so - queue-specific access control was not reliable (STR - #700) - - cupsDoFileRequest() did not handle HTTP continue - status messages in all cases, causing sporatic - problems with IPP printers from some vendors (STR - #716) - - The rastertodymo driver now supports the Zebra ZPL - language (STR #713) - - The test suite no longer generates a printcap file, - which caused problems when testing as the root user - (STR #693) - - The scheduler now updates the accepting state of an - implicit class based upon the accepting state of its - member printers (STR #697) - - The pstops filter didn't properly skip leading PJL - commands (STR #664) - - The reinterpret_cast keyword was not highlighted when - printing C/C++ source files in prettyprint mode (STR - #694) - - Fixed a segfault problem with some of the client - programs (STR #668) - - When using RunAsUser, the scheduler did not correctly - set the ownership of the log files, preventing log - file rotation (STR #686) - - The image filters did not correctly load 1-bit PNG - files (STR #687) - - The pdftops filter did not show all annotation objects - in a PDF file (STR #674) - - The pdftops filter did not print the contents of - textual form elements, making it impossible to print a - filled-in form (STR #663) - - Integrated the MacOS X/Darwin USB backend into the - CUPS baseline (STR #661) - - The USB backend incorrectly reported "media tray - empty" (STR #660) - - The scheduler did not use a case-insensitive - comparison when checking for group membership, which - caused problems with Win9x clients printing via SAMBA - (STR #647) - - The scheduler did not report the addresses associated - with certain network errors, making troubleshooting - difficult (STR #648, #649) - - The cupstestppd program did not allow a default choice - of "Unknown" as required by the PPD spec (STR #651) - - The select() buffers are now allocated to be at least - as large as sizeof(fd_set) (STR #639) - - The LPD backend now supports overriding the print job - username via the device URI (STR #631) - - The scheduler did not handle an unknown MIME type when - checking for a CGI script (STR #603) - - Added a timeout optimization to the scheduler's main - loop to allow CUPS to sleep more of the time (STR - #629) - - The USB backend now retries printing to devices of the - form "usb://make/model" if any USB port shows up as - "busy" (STR #617) - - The httpGetHostByName() function did not range check - IP address values (STR #608) - - The httpUpdate() function could return HTTP_ERROR - instead of the HTTP status if the server closed the - connection before the client received the whole - response (STR #611) - - The LPD mini-daemon did not allow the administrator to - force banner pages on (STR #605) - - Added PAM support for Darwin/MacOS X (STR #550) - - The web interface now provides a "Set As Default" - button to set the default printer or class on a server - (STR #577) - - The HTTP authentication cache was broken (STR #517) - - The cupstestppd utility now fails PPD files that have - a DefaultOption keyword for a non-existance option - name (STR #476) - - Optimized the scanning of new PPD files on scheduler - startup (STR #424) - - The EPM list file did not include the bin, lib, or - sbin directories (STR #598) - - The web interface did not redirect administration - tasks to the primary server for a class or printer - (STR #491, #652) - - The cups-lpd mini-daemon did not reject print jobs to - queues that were rejecting new print jobs (STR #515) - - Some calls to the ctype functions did not account for - platforms that use a signed char type by default (STR - #518) - - The scheduler could use excess amounts of CPU if a CGI - program was sending data faster than the client could - take it (STR #595) - - Updated the Ghostscript 8.x integration stuff (STR - #484) - - The lpd backend used a source port of 732 by default, - which is outside of the range defined by RFC 1179; - also added a new (default) "reserve=any" option for - any priviledged port from 1 to 1023 (STR #474) - - The scheduler did not check for a valid Listen/Port - configuration (STR #499) - - The cupsPrintFiles() function did not always set the - last IPP error message (STR #538) - - The pstops filter did not write the PostScript header - line if the file began with a PJL escape sequence (STR - #574) - - The printer-is-accepting-jobs status of remote - printers was not sent to clients via browsing or - polling (STR #571) - - Browse packets did not indicate whether a printer - was accepting or rejecting jobs. - - The web interface did not show the printer state - history information (STR #592) - - The rastertoepson filter would crash under certain - cirsumstances (STR #583) - - The USB backend did not handle serial numbers using - the (incorrect) SN keyword and did not terminate the - make and model name strings properly (STR #471, STR - #588) - - The USB backend did not build on Solaris x86 (STR - #585) - - The cupsDoAuthentication() function did not use the - method name for Digest authentication (STR #584) - - The scheduler could crash if a print job could not be - printed and the PreserveJobHistory option was turned - off (STR #535) - - cups-lpd now logs the temporary filenames that could - not be opened in order to make troubleshooting easier - (STR #565) - - cupsGetJobs() now returns -1 on error (STR #569) - - Added localization for Belarusian (STR #575) - - The LPD backend used the full length of the hostname - when creating the data and control filenames, which - causes problems with older systems that can't handle - long filenames (STR #560) - - The scheduler did not refresh the common printer data - after a fast reload; this prevented banner and other - information from being updated (STR #562) - - The scheduler did not send common or history data to - the client when processing a CUPS-Get-Default request - (STR #559) - - The httpFlush() function did not always flush the - remaining response data in requests (STR #558) - - The scheduler could complete a job before it collected - the exit status from all filters and the backend (STR - #448) - - The PPD conformance tests did not catch group - translation strings that exceeded the maximum allowed - size (STR #454) - - Updated the client code in the scheduler to close the - client connection on errors rather than shutting down - the receive end of the socket; this caused resource - problems on some systems (STR #434) - - cups-polld didn't compile on Tru64 5.1B (STR #436) - - "lpc stat" crashed if the device URI was empty (STR - #548) - - The scheduler did not compile without zlib (STR #433) - - std:floor() cast needed on IRIX 6.5 with SGI C++ - compiler (STR #497) - - cupsRasterReadPixels() and cupsRasterWritePixels() did - not handle EAGAIN and EINTR properly (STR #473) - - RequiresPageRegion should not be consulted for Manual - Feed (STR #514) - - International characters were not substituted in - banner files properly (STR #468) - - Updated pdftops to Xpdf 2.03 code to fix printing bugs - (STR #470) - - The Digest authentication code did not include the - (required) "uri" attribute in the Authorization - response, preventing interoperation with Apache - (STR #408) - - The web interface could lockup when displaying certain - URLs (STR #459) - - The PostScript filters now convert underscores ("_") - to spaces for custom classification names (STR #555) - - -CHANGES IN CUPS V1.1.20 - - - The pstops filter didn't properly handle collated, - duplexed copies of documents with an odd number of - pages on printers that did not do their own collated - copies (STR #389) - - Tru64 doesn't define a prototype for hstrerror() (STR - #430) - - Updated the pdftops filter to use the annotation flags - instead of the subtype to determine whether to print - an annotation (STR #425) - - The French web interface localization did not use - absolute paths for the navigation bar (STR #428) - - The CUPS test suite did not undefine the PRINTER and - LPDEST environment variables. This could lead to bogus - test results (STR #380) - - The cupsLangDefault() function now works if you don't - have the base OS localization installed (STR #418) - - The pdftops filter no longer needs to create temporary - files with tmpnam (STR #406) - - The HTTP code did not use a case-insensitive - comparison when checking for the Basic authentication - method (STR #407) - - The httpEncode() function always added a trailing "=" - character, which is not required by the Base64 - encoding specification (STR #407) - - The signal handlers did not need to call sigset(); - this caused a recursion problem on some versions of - IRIX (STR #422) - - Moved the scheduler termination code into the mainline - to be consistent with the way other signals are - handled (STR #423) - - The cupsaddsmb program didn't export the new CUPS - driver for Windows properly (STR #390) - - The ppdOpen() functions did not issue an error when a - translation string exceeded the maximum allowed by the - Adobe PPD specification (STR #399) - - The default landscape orientation was not the same as - that defined in the PPD file (STR #397) - - Updated the pstoraster patch files and CUPS driver to - work with Ghostscript 8 (STR #402) - - The hpgltops filter did not skip PJL commands (STR - #379) - - -CHANGES IN CUPS V1.1.20rc6 - - - "lp -i jobid -H restart" would often return an error - even though the job restarted successfully (STR #362) - - The scheduler did not check for invalid allow/deny - addresses such as "11.22.33.44/24". It now masks off - the extra address bits and logs a warning message in - the error_log file (STR #337) - - The cupstestppd utility now checks for missing - ImageableArea and PaperDimension attributes for each - defined PageSize (STR #365) - - The IPP code did not wait for a reply indefinitely on - HTTP connections in "blocking" mode (STR #377) - - The web interfaces did not rewrite the default printer - URI properly (STR #299 and #369) - - The LPD backend passed the C and L commands in the - wrong order (STR #378) - - The Dymo label printer driver did not set the label - length properly (STR #373) - - The scheduler did not support job IDs higher than - 99999 (STR #371) - - The Visual C++ project files did not work (STR #366) - - The scheduler's cupsLangSeek() function did not reset - the "EOF" flag, preventing compressed files from being - typed properly in some cases (STR #368) - - The cupsLangGet() cache was only used if the locale - name provided an explicit character set name (STR - #354) - - The CUPS API convenience functions did not call - cupsLangFree() when they were done with the - localization data (STR #354) - - The scheduler did not return the - job-hold-until-supported or job-hold-until-default - attributes (STR #356) - - The cupsaddsmb program did not support the new CUPS - driver for Windows (STR #357) - - -CHANGES IN CUPS V1.1.20rc5 - - - The scheduler did not initialize the browse socket - file descriptor properly when only SLP browsing was - enabled (STR #259) - - The scheduler accessed the job attributes before they - were set (STR #347, fix to STR #335) - - The cupsCancelJob() function did not return 0 when the - job could not be canceled (STR #340) - - -CHANGES IN CUPS V1.1.20rc4 - - - The scheduler did not move the incoming job attributes - in the operation group to the job group (STR #335) - - The cupsDoFileRequest() function did not check for an - early HTTP response while sending the file (STR #314) - - The web interfaces did not quote #, ?, or . in printer - names, which caused some problems with the generated - URLs (STR #320) - - CUPS couldn't be completely compiled with the -dDEBUG - option (STR #331) - - -CHANGES IN CUPS V1.1.20rc3 - - - More SLP changes (STR #259) - - Revamped the child signal handling code to completely - avoid deadlock issues on Solaris (STR #325) - - The lpadmin command displayed an incorrect error - message when the "-u" option was provided with no - arguments (STR #313) - - The web admin interface did not display an error - message if the PPD file could not be loaded (STR #308) - - The ppdEmit() functions did not use the correct - orientation value position for custom page sizes (STR - #292) - - -CHANGES IN CUPS V1.1.20rc2 - - - The serial backend set the IXANY option on the port - for XON/XOFF flow control; this caused problems with - printers that returned status info but were not ready - for more print data (STR #287) - - The scheduler didn't support scripted index files - (index.php, index.pl, etc. - STR #290) - - The scheduler did not correctly localize script files - with "GET" variables (STR #268) - - Changes in job classification are now logged (STR - #289) - - Fixed a few more SLP-related bugs (STR #259) - - Updated the user/group configure checks for MacOS X - 10.3 (STR #270) - - Fixed an offset bug in the PDF filter (STR #284) - - The cupsDoRequest() and cupsDoFileRequest() functions - did not map several HTTP status codes to their IPP - counterparts. This made detecting certain conditions - very difficult (STR #277) - - Config, spool, and status files are now owned by the - scheduler user (usually root) with read permission for - the filter group (STR #283) - - The HP-GL/2 filter did not support the SI command, - some values for the AD and SD commands, and did not - rotate labels properly via the DI command (STR #282) - - The fax support did not update/set the job-hold-until - attribute when a fax job fails (STR #269) - - The cupsLangGet() function didn't support locales of - the form "ll.charset" (STR #271) - - The scheduler did not use the charset when getting the - language localization for a request; this caused extra - disk IO for every request (STR #271) - - The scheduler did not support requests with more than - one language specified (STR #267) - - -CHANGES IN CUPS V1.1.20rc1 - - - The scheduler now waits up to 60 seconds before - restarting to allow active jobs to complete printing - and pending requests to be processed (STR #226) - - The web interface did not work on systems where time_t - is 64 bits (STR #262) - - Added backend tweeks and content-length check from Red - Hat (STR #253) - - The USB backend now uses the 8255 constants instead of - the standard constants when reporting printer status - bits on Linux (STR #254) - - Added new cupsDoAuthentication(), cupsGetFd(), - cupsGetFile(), cupsPutFd(), and cupsPutFile() functions - to the CUPS API (STR #112) - - The PDF filter always scaled and offset pages; this - caused problems under MacOS X, so now the "fitplot" - option controls whether PDF files are scaled to fit - within the printable area of the page (STR #250) - - The LPD backend did not support the port number in a - URI (STR #247) - - Some filters didn't properly support boolean options - (STR #249) - - Landscape PDF files were not always offset by the - correct amount when rotating (STR #243) - - The scheduler could hang in a call to localtime() when - logging messages from the signal handler (STR #242) - - The PDF filter no longer prints form widgets; this - duplicates the behavior of Acrobat Reader (STR #241) - - cupsGetPPD() didn't handle a late termination of a - HTTP connection with the server (STR #220) - - ppdOpen() did not correctly check for "*PPD-Adobe-4." - on the first line of a PPD file. This caused incorrect - PASS results for some PPD files (STR #233) - - cupsEncodeOptions() did not allow boolean options to - use "yes" and "on" for true values (STR #227) - - The pstops filter only sent the TBCP exit sequence if - it was defined in the JCLEnd attribute in the PPD file - (STR #224) - - Support for more than 1024 files was broken on Solaris - 9 (STR #217) - - The setgroups() calls now pass in 1 group (the - configured group) instead of 0 for compatibility with - BSD and Darwin (STR #213) - - The scheduler's built-in broadcast throttling was - ineffective since incoming packets would cause the - next group of outgoing packets to be sent immediately - rather than waiting for the next time slot (STR #211) - - Added a new ppdSetConformance() function to set the - conformance requirements for PPD files. Currently only - two levels are defined, PPD_CONFORM_RELAXED and - PPD_CONFORM_STRICT, and the default is the relaxed - level (STR #212) - - The IPP backend did not correctly execute the - pictwpstops filter on OSX (STR #210) - - The LPD backend did not set the banner class when the - "banner=yes" option was specified in the device URI - (STR #209) - - The imagetoraster filter did not support all of the - page device attributes (STR #208) - - The pdftops filter incorrectly auto-rotated pages when - the user already had specified the proper orientation - (STR #207) - - Fixed AIX shared library support (STR #201) - - Added support for live testing with Valgrind (STR - #193) - - The CGI programs now collect the list of needed - attributes for the class, job, and printer template - files (STR #192) - - The scheduler now passes the first port that is bound - to the local loopback or "any" addresses to the CGI - programs rather than the port that the browser - connected to (STR #103) - - The cupstestppd program now checks for bad - JobPatchFile attributes and incorrect versions of the - Manufacturer attribute for HP printers (STR #155) - - The filter makefile incorrectly installed - libcupsimage.a in the filter directory (STR #180) - - The scheduler did not verify that the job history - files define the job-priority and - job-originating-user-name attributes (STR #178) - - The pstops filter didn't handle poorly-formed binary - PostScript files that had CTRL-D's in them (STR #156) - - The ppdOpen*() and cupsLangGet() functions did not - make a copy of the old locale strings when using the - POSIX locale when reading files, which apparently - caused problems with some implementations of the - standard C library. (STR #159) - - The pdftops filter did not work properly with some - embedded Type1C fonts (STR #177) - - Updated the pdftops filter to be based upon Xpdf - 2.02pl1 (STR #191) - - The scheduler did not reset the group list when - running CGI and filter processes (STR #185) - - The scheduler no longer calls malloc and free from the - signal handlers (STR #190) - - The USB backend now uses the manufacturer and model - strings if the description string is not available - (STR #174) - - The ppdOpen functions still supported the - VariablePaperSize attribute, which was removed in v4.0 - of the PPD spec. This caused problems with PPD files - that relocated the PageSize option to a non-standard - group (STR #158) - - The cups.list file referenced MAN1EXT, MAN3EXT, and - MAN5EXT, but none of those were actually defined (STR - #147) - - Chunked requests could cause a Denial of Service if - the connection is terminated before the first byte of - chunk data is sent/received (STR #143) - - Printers with special characters in their names were - not accessible from the web interface (STR #120) - - The lpstat command now shows the correct interface - script or PPD file, if any, for a print queue (STR #89) - - The lpstat command now shows the printer-state-message - and printer-state-reasons attributes whenever they are - not blank (STR #152) - - The French and German option-conflict.tmpl template - files did not get installed (STR #148) - - The cups.list.in file did not work when compiling - without shared libraries (STR #149) - - The DSOFLAGS included the LDFLAGS, which causes - problems on at least HP-UX (STR #150) - - The fax printer support did not keep track of the fax - capability bit (STR #144) - - The appleLangDefault() function could leak a small - amount of memory (STR #145) - - The ppdOpen() functions now mirror all normal - attributes to the attribute list; previously only - certain unassigned attributes would be added (STR - #139) - - The ppdEmitJCL() function wrote JCL commands to stdout - instead of the passed file pointer (STR #142) - - The httpGets() function could, in certain states, - block waiting for data (STR #132) - - The cupsEmitJCL() function not outputs an empty @PJL - command after the PJL language escape to work around - bugs in certain PJL implementations (STR #131) - - The cupsEmit*() functions didn't set the orientation - value properly (STR #127) - - The cups.spec file didn't list the rc2.d init - directory or the cupstestppd file (STR #134) - - -CHANGES IN CUPS V1.1.19 - - - The GNU TLS code incorrectly used - gnutls_check_pending() instead of - gnutls_record_check_pending() (STR #128) - - The ppdEmit() functions output "PageSize Custom" - instead of "CustomPageSize True" in the DSC comments. - Also, the custom page size code did not use the - ParamCustomPageSize attributes (STR #127) - - The cupstestppd command did not list the conflicting - options (STR #123) - - The lpq command did not ensure that there was - whitespace between the fields in the job listing (STR - #117) - - The German web templates had errors (STR #119) - - The configure script didn't specify the static - libraries properly when configuring with the - --disable-shared option (STR #104) - - The cups.list file used file dependencies for package - formats other than portable, RPM, and Debian (STR #98) - - cupsLangGet() didn't use its language cache (STR #97) - - "lpq -P" would segfault instead of showing a usage - message (STR #94) - - Fixed compiler warnings in pdftops filter (STR #96) - - -CHANGES IN CUPS V1.1.19rc5 - - - Jobs with banner pages that were printed to implicit - classes would get double banner pages for each - file/banner in the job (STR #68) - - The mime.convs file was missing the filter definition - for Windows BMP (image/x-bitmap) files (STR #85) - - The scheduler allowed some READ-ONLY job attributes to - be set, which could cause the scheduler to fail on the - next restart (STR #82) - - The lp and lpr commands did not report when the - scheduler was not responding; instead, the user would - incorrectly see a "no default destination" error (STR - #70) - - cupsLangGet() could fail on OSX due to a corrupt - language preference (STR #78) - - Added more checks for HTTP request timeouts. - - The scheduler dropped the first non-alpha character - after an open brace when doing attribute substitutions - in banner pages (STR #77) - - The scheduler child might send SIGUSR1 to the parent - before the signal handler was installed; this didn't - prevent the scheduler from starting but produced an - annoying error message (STR #45) - - -CHANGES IN CUPS V1.1.19rc4 - - - The lp command did not accept "-" for printing from - the standard input as required by POSIX 1003.1 (STR - #59) - - Added the job-originating-host-name information for - the page_log file documentation in the SAM (STR #31) - - The German web interface templates did not use the - right paths for job operations (STR #54) - - The scheduler would consume all available CPU if - started with a pending job in the queue (STR #35) - - The polling daemon allocated an extra localization - buffer but did not free it, causing cups-polld to - eventually use all available memory (STR #40) - - -CHANGES IN CUPS V1.1.19rc3 - - - The scheduler could get in an infinite loop cancelling - jobs using "cancel -u user dest" (STR #48) - - The "cancel -u user" command did nothing (it should - cancel all jobs on all printers owned by the named - user - STR #48) - - The scheduler would write 0-length job control files - (STR #46) - - Updated the French man pages (translation provided by - Gilles QUERRET) - - The scheduler would delete all printers from - printers.conf if a job was active when a HUP signal - was handled (STR #47) - - The cups-polld program would leak memory if it was - unable to send browse packets to the loopback - interface (STR #40) - - The scheduler did not put the - job-originating-host-name attribute in the job - attributes group. - - The text filter did not default to wrapping text as - defined by the IPP implementation document. - - Scan backends first, PPDs second (STR #37) - - Updated the Netatalk documentation in the SAM (STR #38 - and #39) - - The test suite sent text files to a non-PS print queue, - which requires ESP Ghostscript (provided separately). - Now send the JPEG test file (STR #33) - - The test suite did not show the estimated disk space - requirements (STR #33) - - The test suite did not set the MaxLogSize directive to - 0 to prevent log file rotation (STR #33) - - The test suite still setup the old CUPS Ghostscript - symlinks (STR #33) - - The pstops filter did not report the correct number of - copies for the page_log file when printing collated - copies to a printer that doesn't support them in - hardware (STR #32) - - cupsLangGet() needs to set the CTYPE locale to "C" - (POSIX) to avoid erroneous tolower/toupper values (fix - suggested by Bjoern Jacke) - - Fixed a typo in the cups.list.in file. - - Updated all of the Western European locales to default - to ISO-8859-15 (for Euro support, suggested by Bjoern - Jacke) - - Updated the German message catalog (update provided by - Bjoern Jacke) - - -CHANGES IN CUPS V1.1.19rc2 - - - cupsLangGet() now sets the encoding field based on the - trailing charset in the locale name, and doesn't look - for a message catalog in a specific locale.charset - directory. This fixes STR #26 and is more in line - with the CUPS 1.2 implementation. - - The configure script now aborts if the "ar" command or - compilers cannot be found. - - The static cupsimage library was not built by default. - - The path for the "ln" command was hardcoded in - Makedefs.in instead of being checked at configure time - (STR #28). - - Banner pages containing unescaped { characters would - not work. - - The printer-state-time collection attribute was - encoded as an enumeration instead of an integer. - - The printer-is-accepting-jobs collection attribute was - was not added to the collection value. - - The printer-state-sequence-number collection attribute - was not added to the collection value. - - Fixed typo and const mismatch in IPP backend. - - Updated the man pages for the new configuration - directives. - - Updated the SAM for MacOS 10.2, the CUPS drivers for - windows, the available LPD backend options, and the - new configuration directives. - - The imagetops filter didn't position images properly - on the page (STR #18) - - The configure script didn't add CPPFLAGS to the - compiler options or LDFLAGS to the DSO options (STR - #13) - - The scheduler would try to write a debug log message - when starting a job that contained a NULL string. - Since not all versions of snprintf() support NULL - string pointers this caused some problems (STR #20) - - The testipp program now supports reading of IPP - message files such as those used for the job history - in /var/spool/cups. - - -CHANGES IN CUPS V1.1.19rc1 - - - Added CUPS support files for Java, Perl, and PHP - (located in the "scripting" subdirectory...) - - The scheduler now supports fast-reloads of the - cupsd.conf file when it is updated via HTTP. - - The scheduler always changed the ownership of log - files; it now only does so if they are not in the /dev - directory (i.e. don't want to change the ownership and - permissions of /dev/null...) - - Added libpaper support (patch from Jeff Licquia) - - Added a new istring() rule for MIME types files that - does a case-insensitive comparison of strings. - - The cups-lpd mini-daemon now sends jobs to the default - queue when an empty queue name (or "lp" and there is - no "lp" queue) is sent. - - The scheduler now supports fax queues identified by a - "*cupsFax: True" attribute in the PPD file. When a job - can't be sent, it is held for 5 minutes by default - while other jobs are attempted. The FaxRetryLimit and - FaxRetryInterval directives control the number of - retries and the time between retries. - - The scheduler now preserves the default options of PPD - files when modifying/upgrading an existing PPD file. - When installing a new printer, the scheduler sets the - default media size to Letter or A4 as appropriate for - your locale. - - The scheduler no longer limits the number of - BrowseAddress, BrowsePoll, BrowseRelay, Listen, Port, - SSLListen, and SSLPort directives to 10. - - The scheduler now supports print files that have been - compressed using gzip. - - The scheduler used the stdio functions to read any job - ticket information in a PostScript print job. Since - some platforms limit the number of stdio files to 256, - job ticket information was ignored when the server had - a large number of clients connected to the system. - - Filters and backends may now report the total number - of pages ("PAGE: total NNN") to the scheduler. - - The LPD backend now supports timeout and - sanitize_title options (default to 300 and yes, - respectively) and has some additional changes to - reduce the chances of multiple copies being printed - when only one copy was requested. - - Fixed a polygon drawing bug in the HP-GL/2 filter. - - Added a robots.txt file to the standard install to - prevent search engines from indexing the CUPS server. - - Added support for STATE: messages - (printer-state-reasons), printer-state-history, and - printer-state-time to the scheduler. - - When using RunAsUser, the scheduler would initially - start any previously queued (pending) jobs with - RunAsUser disabled - all backends would be running as - root. - - If a backend failed for a printer, CUPS would - incorrectly requeue the job for printing again. - - Added support for IPP collections and files. - - Added experimental support for generic CGI scripts and - programs, Java, Perl, PHP, and Python to the - scheduler. See the file "CGI.txt" for more - information. - - The CUPS API now supports HTTP cookies and the Expect: - field. - - The cancel command now correctly supports the "-u - user" option to cancel all jobs for the named user. - - The Purge-Jobs operation now supports the my-jobs - boolean attribute and a new purge-jobs boolean - attribute to control whether job history data is - purged from the scheduler; the default is false for - my-jobs and true for purge-jobs to match the original - implementation. - - The scheduler would not timeout printers when only - using SLP browsing. - - If the scheduler was unable to execute a filter, it - would try to restart the job indefinitely until the - filter could be executed. - - When writing BSD printcap files, the scheduler now - includes the rm and rp attributes, allowing the file - to be exported to LPD clients. [Patch from Dominic - Kubla] - - The scheduler optimization to reference IPP attribute - data instead of performing a full copy caused problems - when the referenced data was deleted before it was - sent. It now only references attributes that change - only when the scheduler is restarted. The change also - reduced the memory footprint of a printer object to - 2k. - - The scheduler now holds signals while logging messages - to avoid potential deadlock issues when handling - signals on Solaris 8. - - The lpadmin command now allows printer access control - by group name as well as user name. - - "lpoptions -l" got in an infinite loop if no default - printer was available. - - The scheduler now logs the job-originating-host-name - attribute in the page_log file, and uses "-" for any - empty fields (patch from Dominik Kubla). - - The pdftops filter now scales PDF pages within the - printable area of the page. - - The pstops filter didn't include the page-label and - classification boxes when printing EPS or non- - conformant PS files. - - The imagetops filter didn't always correctly position - the image on the page when printing in landscape - orientation. - - The ppdEmit() functions now support the - RequiresPageRegion attribute when sending InputSlot - and ManualFeed commands. - - The PPD loading code now supports standard options - outside of OpenUI/CloseUI as required by the PPD spec. - - The cupstestppd program has been upgraded to provide a - concise PASS/FAIL report, additional detailed - conformance testing, and support for gzip'd PPD files. - - The PPD loading code is now much more strict when - loading a PPD file, and tracks more format errors. - - The scheduler ignored child signals when gathering the - list of available devices, when it should have been - using the default signal handler. - - The cupsEncodeOptions() function could encode an - option with a NULL last string. - - The socket backend could report the wrong number of - backchannel bytes if an error occurred on the link. - - The cups-polld program now only sleeps after getting - all printers and classes. This allows for longer - intervals without excessive delays before classes show - up... - - Added a new httpWait() function to support waiting for - data for a specific number of milliseconds. - - httpGets() now times out after 1 second on - non-blocking HTTP connections. - - The scheduler no longer accepts rangeOfInteger values - that are out of order (e.g. 5-1) - - The sides attribute was incorrectly sent as a name - value; it is a keyword value. - - The IPP backend now detects if the destination queue - has gone away and reports an error. - - The scheduler and HTTP API now allocate their select() - sets to support larger numbers of clients on systems - that support it. - - The scheduler now sets the CFProcessPath environment - variable under MacOS X. - - The cupsLangDefault() function now uses the - CoreFoundation localization API under MacOS X. - - The httpSeparate() function didn't handle file URIs of - the form "file:///path" properly. - - The lpadmin command now supports a "protocol" option - for specifying the binary communications protocol to - use when printing binary PostScript data. - - The scheduler did not properly parse the SystemGroup - directive, so only the first group would be used. - - Revamped how strings are stored in the scheduler, - providing a substantial improvement in memory usage - for systems with large numbers of printers. - - The PostScript filter now supports binary PostScript - files and files beginning with the PJL language escape - sequence. - - The PPD API now provides additional information from - the PPD file. - - The USB backend didn't compile on Solaris Intel. - - The cupstestppd utility now supports the "-q" option - (quiet) for use in scripts, etc. - - Merged several weight-reducing changes into the CUPS - baseline donated by Apple. - - Added preliminary support for CDSA; patch provided by - Apple. - - Implicit classes are now created from identical - printer classes on the network. - - The lp command now supports a "-H restart" option to - restart previously printed jobs. This functionality - only works if you have enabled the PreserveJobFiles - option. - - The scheduler now supports URIs in HTTP request lines - to conform to the HTTP/1.1 specification. - - The time-at-xyz attributes were not recognized in - banner files if prefixed by a question mark, e.g. - "{?time-at-creation}". - - Added support for pre-filtering application/pictwps - files on MacOS clients before sending them to a server - via IPP. - - The scheduler now allows file:/dev/null device URIs - even if FileDevices is set to No. - - CUPS uses strerror() for hostname resolution errors, - when it should have used hstrerror(). - - The USB backend no longer tries to guess the serial - number of a device from the USB devices file; this - means that printers that don't report their serial - numbers in the device ID string will not be - individually selectable. - - The pstops filter didn't handle page ranges properly - when a page contained an embedded document. - - Added a translation of the web interface to German. - - When printing using the OutputOrder=Reverse option - with duplexing, the output order is now truly - reversed; the order of sub-pages when printing N-up is - the same. - - The pstops filter did not always output the extra - blank page when printing a document with an odd number - of pages with duplexing enabled. - - The ippAddXYZ functions no longer allow the - application to add less than 1 value. - - Fixed a URL rewrite bug in the web interface - local - access was sometimes redirected away from localhost... - - The ppdOpen() functions could get in an infinite loop - if the PPD file contained a keyword or text that was - too large for the buffer. - - Added preliminary support for GNU TLS; patch provided - by Jeff Licquia. - - Now timeout IPP attribute reads after 1 second inside - an attribute definition. - - Now timeout connections that have been shutdown (due - to errors) after 30 seconds instead of the Timeout - setting (300 seconds by default). This provides - faster recovery from DoS attacks. - - A denial-of-service attack warning message was being - written to the log files by the scheduler for every - detection. This caused a DoS of its own in some - situations. The warning message is now written no more - than once per minute. - - Fixed the CIE colorspace support code in the image and - PS RIPs. - - The job-quota-period, job-page-limit, and job-k-limit - attributes were not flagged as integers, so setting - quotas would not work. - - Added an additional response check in the scheduler to - more quickly recover from denial-of-service attacks. - - The cupstestppd file was incorrectly installed in the - /usr/sbin directory instead of /usr/bin. - - The EPM list file did not include the cupstestppd - program or man page files. - - -CHANGES IN CUPS V1.1.18 - - - Fixed a bug in the Set-Job-Attributes code in the - scheduler that would cause it to crash or continuously - write a job control file. - - SECURITY FIX: The scheduler now provides a FileDevice - directive to control whether new printers can be added - using device URIs of the form "file:/filename". The - default is to not allow printers with these device - URIs. - - The scheduler did not compute the cost of filters - properly, nor did it choose a multi-filter solution - with a lower cost than a single filter solution. - - Now install CUPS PPD file test utility (cupstestppd) - to support basic conformance testing of PPD files. - - The scheduler now logs an error message when it sees a - non-conforming PPD file. - - Upgraded pdftops filter to Xpdf 2.01 with fixes for - TrueType fonts. - - Added a MaxClientsPerHost configuration directive to - provide limited protection against Denial of Service - attacks. - - SECURITY FIX: Potential underflow/overflow bug in web - interface. - - SECURITY FIX: Race condition in certificate creation. - - SECURITY FIX: Bad URIs in browse packets could be used - to exploint the web interface underflow/overflow bug. - - SECURITY FIX: Some types of Denial of Service attacks - were not handled properly, so once the attack was over - the scheduler did not close the connections - immediately on all platforms. - - SECURITY FIXES: Added integer overflow/underflow - checks for all image formats. - - The pstops filter didn't reset the showpage operator - back to its original at the end of a job; this - prevented the concatenation of documents (used - primarily for CUPS 1.2...) - - The cupsGetPPD() function didn't always set the - cupsLastError() value when an error occurred. - - The IPP media, output-bin, and sides attributes took - precedence over the corresponding PPD options, which - caused inconsistent behavior under MacOS X with some - PPD files. - - The cupsaddsmb utility specified the wrong number of - arguments to the adddriver command when adding the - Win9x PostScript drivers. - - The web interface did not always report the correct - error message. - - The scheduler did not clear the POSIX signal action - structure when waiting for the child to send it a - SIGUSR1 signal; this could cause the signal handler - not to be called properly, preventing the parent - process from returning. - - -CHANGES IN CUPS V1.1.17 - - - The "manual_copies" option did not work when the LPD - backend had to retry a print job. - - The image filters did not convert GIF images properly. - - The RunAsUser option was incompatible with the new - daemon-mode code in 1.1.16. - - Fixed a problem with the Set-Job-Attributes and - PostScript job ticket code in the scheduler - the - "last" attribute pointer was never updated, which - could cause the scheduler to crash when applying job - ticket data. - - Fixed a problem in the scheduler that caused it to - continue processing HTTP requests on a connection - after it was shutdown. - - The scheduler now allows accounts authenticated via - PAM to not have a corresponding UNIX account, but - group membership still requires the account name to be - listed in the UNIX group file(s)... - - The scheduler used a fixed-size (16k) buffer for - encoding job options for filters; it now dynamically - allocates and expands the buffer as needed depending - on the options that are sent in a job. - - The pdftops filter didn't support all of the MacOS - characters for MacRoman encoded fonts. - - The cupsEncodeOptions() and cupsParseOptions() - functions now conform to the grammer defined by the - current draft of the PAPI specification. The main - difference is that option=yes and option=no are no - longer treated as boolean options. - - The IPP backend didn't honor the encryption settings - in /etc/cups/client.conf. - - Fixed a potential bug in the HTTP code which was - caused by servers sending the status line and - newline(s) in separate packets. - - User-defined classification strings are now printed - verbatim - previously the classification box would be - empty. - - Re-added Spanish to the list of PPD languages that - CUPS supports. - - CUPS API library user and temp file updates for - Windows. - - The image filters did not properly handle grayscale - printing of Sun Raster images. - - The scheduler never reset the NumJobs variable before - loading the job list (previously this only happened on - a full start, so the problem was never apparent...) - - The HTTP and IPP read/write code didn't handle EINTR - (interrupted system call) errors. - - When under high load, the scheduler could abort due to - the wrong errno value after a select() call. This was - caused by the child signal handler. - - Added new load tests to the test target to verify that - cupsd can handle hundreds of simultaneous jobs without - error. - - The Solaris USB backend now supports the new device - URI syntax. - - The ppdOpen*() functions now reset the numeric locale - settings while loading a PPD file. - - Fixed the libtool build rules. - - The manpage make rules didn't use $(MAKE) and - $(MFLAGS) for the language subdirectories. - - Now set the LC_TIME locale category to get the - properly localized time string. - - Fixed a problem in the scheduler that would cause the - web interface problems when adding, modifying, or - configuring a printer or class. - - The backends now ignore SIGPIPE so that failed job - filters will not stop a print queue. - - The lpstat command did not allow for destination lists - ("lpstat -v printer1,printer2") - - Fixed parsing of long filter status messages in the - scheduler. - - Added some startup performance enhancements to the - scheduler so that the printer object information is - regenerated fewer times and the MIME type database is - not filled with lots of empty filters for raw/direct - queues. - - The LPD backend now sends the job title as the print - filename. - - Added support for variable sizes in the EPSON dot - matrix printer drivers. This allows for pages as - short as 1/2" (1 row of labels) and does not do an - automatic form feed. - - French translation updates. - - The filters did not quote the page label string when - embedding it in PostScript output. - - The serial backend now enumerates serial ports under - MacOS X. - - The pdftops filter contained font rasterizer code that - wasn't being used and that depended on X11. This code - has been removed. - - -CHANGES IN CUPS V1.1.16 - - - The cancel and lprm commands now both display an error - message and return a non-zero exit status if an - attempt is made to cancel a job on a non-existent - printer. - - The lpoptions command incorrectly complained if a - request to delete a non-existent printer was made. - - If the client.conf file defines an alternate server - name, the "configure printer" action in the web - interface might not work. - - The lpstat command now supports a "-W" option so that - you can display completed jobs as well as - not-completed (pending) jobs. - - The lp and lpr commands did not return an error when - one or more files in a set of files for printing could - not be printed. - - The lp, lpadmin, and lpstat commands now consistently - return with a non-zero exit status when an error - occurs. - - The scheduler would not accept print jobs sent to a - stopped remote printer. - - The texttops filter incorrectly converted the page - numbers in the prettyprint header to double-byte - characters when printing a non-Unicode text file. This - caused an extra space to appear between each digit in - the page number. - - The scheduler did not use a case-insensitive - comparison when adding filters for a printer. - - Upgraded the pdftops filter to Xpdf 1.01. - - The scheduler no longer passes the page-border and - number-up-layout attributes to filters when printing - banner pages. - - The LPD backend now uses a 30-second timeout when - sending commands and control files, and a 30-second - timeout when retrieving responses from an LPD server. - If a timeout occurs, it retries indefinitely. This - helps to make LPD printing over VPNs work more - reliably. - - The USB backend now supports device URIs based on the - printer serial number and/or model number under Linux. - This avoids the "wrong device filename" problem when - using more than one USB printer. - - Now just shutdown the receiving end of a client - connection when sending an error that requires the - server to disconnect from the client afterwards. This - fixes a problem when doing remote administration with - encryption enabled. - - The scheduler did not send a printer-state-message - attribute if the string was empty; it now always sends - this attribute. This caused the printer message to be - displayed for other printers in the web interface. - - The LPD backend now supports a "manual_copies" option, - e.g.: "lpd://server/queue?manual_copies=no", in order - to handle copies for raw jobs to printers that don't - implement the LPD protocol properly... - - The "mirror" option was not being handled by the - PostScript or image filters. - - Updated the cupsaddsmb command to support the new CUPS - driver for Windows NT/2k/XP. - - Filter status lines longer than 1023 characters could - cause the scheduler to get into an infinite loop. - - The scheduler didn't reset the job state to pending - when modifying an active printer. - - Now limit the maximum number of recursion steps when - searching for a filter for a job, in case a user - defines a circular filter rule. - - The PostScript filter would embed an invalid - requirements comment in some cases. - - Added support for embedded job tickets in PostScript - files. - - The PostScript filter now detects EPS files and should - better handle printing EPS files. - - The cancel command now ignores a trailing destination - name when cancelling a specific job ID (Solaris - compatibility). - - The scheduler now rejects jobs with copies outside the - range of 1 to MaxCopies, inclusive. - - Added new MaxCopies directive to set the maximum - number of copies that a user can request. - - The scheduler didn't block signals while it processed - others and when it forked processes. - - The scheduler checked for new jobs to print when - stopping a job. This caused jobs to restart before a - shutdown. - - Updated the CUPS startup script to better support - different timezones and to support the RedHat/Mandrake - init script functions, if available. - - The scheduler did not properly handle backslashes in - banner files; it incorrectly assumed that "\c" should - always be replaced by "c", instead of only looking for - "\{" and replacing it by "{". - - The texttops filter didn't handle prettyprint=no. - - The text and HP-GL/2 filters didn't check for other - common duplex option names like cupsMarkOptions() did. - - "lpoptions -x printer" no longer clears the "default - printer" status of the printer. - - cupsTempFd() now stops trying to create a temporary - file after 1000 tries, and aborts on any error other - than EEXIST. This should prevent lp/lpr hangs due to - a bad or missing temporary directory. - - The lpadmin command did not send the right URI to the - scheduler when setting options on classes. This - caused a client-error-bad-request error. - - The CUPS API convenience functions would attempt to - connect to the remote server name in a - "printer@server" printer name instead of dealing with - the default (usually local) server. Aside from - causing user confusion, the remote server name might - not be resolved properly, causing further problems. - - "lp -q" would cause the "lp" command to segfault, as - the program would try to print the option letter that - caused the error using the wrong index into the - command-line; bugfix from Debian. - - Fixed a minor inconsistancy in the encoding of boolean - attributes from printer options in - cupsEncodeOptions(). - - Added a FilterNice directive which sets the priority - of job filter processes that are run by the scheduler. - - Added Solaris x86 USB printer support. - - The USB backend now reports both the ulpt and unlpt - devices under *BSD. - - The "lpstat -o" command would truncate the - "printer-jobid" string if it was longer than 21 - characters. - - The PJL-based MIME type rules now look in the first - 1024 bytes instead of just the first 512 bytes to find - the language mode. - - The image file types are now listed explicitly in the - mime.convs file so that additional image file formats - do not use the standard CUPS image filters by default. - - Updated the Software Programmers Manual to include - all of the CUPS API functions. - - ppdOpen*() no longer sorts choices for an option. - - The web interface now enforces constraints in PPD - files when configuring a printer. - - When stopping a printer, the scheduler didn't set the - printer state before stopping the current job. - - The cupsaddsmb utility now lists all data files for - Win9x and WinMe clients when installing that Windows - driver. - - Jobs submitted to a class now bounce immediately to - the next available printer rather than waiting until - that printer is available. - - Filters and backends now also get the CLASS - environment variable set when a job is printed to a - printer class instead of a normal printer. - - Added French translations of the web interface, CUPS - Overview, Software Administrators Manual, and Software - Users Manual contributed by Marian REYT-LLABRES. - - Added several "hint" messages for common configuration - problems that are stored in the error_log file. - - httpSeparate() now unquotes %xx characters in the - username:password field of a URI. - - When starting the scheduler in daemon mode, the parent - process now waits for the child to signal it is ready - to accept connections. - - Added -F option to cupsd to run cupsd in the - foreground but detach from the controlling terminal - and current directory. - - The scheduler did not reload jobs when receiving a HUP - signal; this would cause problems since the pointers - into the file type database would no longer be valid - for existing jobs. - - The scheduler did not save the network interface list - update time, thus no caching of the network data was - actually provided. - - Updated the SuSE PAM configuration file. - - The LPD backend now supports a "reserve" option and no - longer reserves a priviledged port by default. - - The cupsaddsmb command now continues past printers - that do not have a PPD file to export. - - The lpstat command didn't treat printer names as - case-insensitive. - - The lpstat command now reports the printer location - attribute with "lpstat -l -p". - - Fixed a bug in the vsnprintf() emulation function, - which was used on old versions of HP-UX, IRIX, and - Solaris. - - The number-up option was incorrectly being used when - printing banner pages. - - Added support for Greek and Slovak PPD files. - - CUPS now supports printer names containing any - printable character, e.g. "123-abc", "foo-bar", etc. - - The null filter was not supported in mime.convs due to - a bug in the filter validation code. - - Changes in the default printer and printer attributes - were not always reflected in the generated printcap - file. - - Implicit classes did not inherit the location or - description from member printers. - - The httpGetHostByName() function did not handle - hostnames that started with a number. - - Updated the filters to use the %cupsRotation comment - instead of %%Orientation to auto-rotate pages, since - the use of %%Orientation is inconsistent. - - Added the RootCertDuration directive to control how - often the root authentication certificate is updated. - - Increased the size of the IPP write buffer to 32k to - allow for larger attribute values and to provide more - efficient output of large numbers of attributes. - - The polling daemon now retries the initial connection - to the remote server; this fixes a problem when the - remote server is unavailable when the scheduler starts - up... - - The scheduler didn't validate Digest users against the - system group(s), so Digest and BasicDigest - authentication didn't work for administration - operations. - - The scheduler now passes the SHLIB_PATH environment - variable to child processes (HP-UX shared libraries) - - The scheduler now maps accesses from the loopback - interface to "localhost". - - The cups-lpd mini-daemon sent a status code byte in - response to queue state commands, but those commands - only return textual data. - - -CHANGES IN CUPS V1.1.15-1 - - - The lpc and lprm sources didn't include the CUPS - string function header, which is required on systems - that don't have their own snprintf() function. - - The French manpage Makefile tried to install the - language subdirectories when it (obviously) didn't - have to. - - -CHANGES IN CUPS V1.1.15 - - - Updated the CUPS license agreement for the new MacOS - license exception. - - The printer-info attribute now defaults to the printer - name if no value has been set. - - ppdOpen() and friends now add an "Auto" InputSlot - option if none is provided to automatically select the - correct tray. - - Updated the ppdEmit() and ppdEmitFd() functions to - (re)mark the correct PageSize or PageRegion option - depending on the selected ManualFeed or InputSlot - options. - - ppdEmitFd() didn't handle custom page sizes. - - Darwin uses instead of - . - - The jobs.cgi web interface now handles all job - operations, allowing the administrator to allow "job - administrators" or operators to manage jobs (but not - queues) on the server. - - The cupsDoFileRequest() function now checks if the - filename passed into the function is a directory, and - returns the IPP_NOT_POSSIBLE error if so. - - New SCSI printer backend. - - Cleaned up handling of locales with trailing character - set definitions. - - Fixed handling of invalid PPD attributes inside - OpenUI/CloseUI. - - Fixed a problem with SSL and the job, printer, and - admin CGIs on ports other than 443. - - The scheduler didn't handle AuthClass properly. - - Added French translation of man pages. - - Updated the text filter to support the const_cast, - dynamic_cast, and static_cast keywords in ISO C++. - - Now use strlcat() and strlcpy() (or emulation - functions) for easier string/buffer protection. - - The auto-generated printcap/printers.conf files now - have a small comment header explaining where the file - comes from... - - The PostScript filter now supports 6, 9, and 16-up - output, as well as new page-border and - number-up-layout options. - - The lpoptions command didn't set options properly when - using the default printer. - - Added ConfigFilePerm and LogFilePerm directives. - - Increased maximum size of MIME types to IPP_MAX_NAME - to allow for longer printer names. - - No longer create remote printers when loading job - history data. - - The printer-make-and-model attribute wasn't set when - the PPD file didn't contain a NickName attribute. - - Now handle PPD files with translation strings longer - than 80 bytes - they are truncated if they go over... - - The scheduler didn't handle signals until after it - loaded the configuration files the first time; this - caused problems on some installations that would - restart the scheduler as the system booted into run - level 3. - - Now throttle broadcasts like we do for polling. - - Fixed a bug in the reading of PPD files using CR's - instead of CR LF's or LF's. - - The scheduler would crash if cupsd.conf contained a - BrowseProtocols line with no protocols listed. - - The HTML job operation templates now link back to the - destination printer or class. - - The serial backend now detects USB serial devices. - - The LPD mini-daemon (cups-lpd) now passes the - job-originating-host-name attribute to the scheduler - (cupsd). - - Updated the IPP backend to reconnect after downgrading - from IPP/1.1 to 1.0, and when sending requests to HP - JetDirect interfaces that don't support HTTP - Keep-Alive like they should. - - Now pass NLSPATH and DYLD_LIBRARY_PATH environment - variables, if defined, to CGI and job processes. - - Removed the pstoraster filter (based on GNU - Ghostscript 5.50) and now provide the raster "driver" - and patch file necessary to use the current GNU - Ghostscript 7.05 release. - - Removed unnecessary fonts and updated the Courier and - Symbol fonts to the latest versions to better support - non-ISOLatin1 text. - - The text filter now always embeds the Courier and - Symbol fonts to ensure that they contain the full set - of glyphs. - - The lp and lpr commands now only override the SIGINT - handler if it is not being ignored (patch from Robert - Ambrose for some interactive software that catches - SIGINT and will gracefully cancel the print...) - - The PostScript image filter (imagetops) now supports - printing CMYK images using the CMYK colorspace. - - The image filters now support CMYK JPEG files, and - correctly handles the inverted files from Photoshop - (which seems to save RGBW data, not CMYK...) - - Added a "check" target to the top-level makefile to - conform with GNU standards (same as "test"). - - The IPP code didn't always map the POSIX locale "C" to - the proper IPP language code. - - The cupsaddsmb program was updated to use the - setdriver command instead of addprinter. - - Banner pages were not handled properly for implicit - classes. - - When tunneling to a remote system using SSH, the - printer URIs for local printers on the remote system - did not reflect the correct port number. - - The Allow, Deny, BrowseAllow, BrowseDeny, and - BrowseAddress directives now support the network - interface names "@LOCAL" and "@IF(name)" for access - control and browsing based on the current interface - addresses instead of fixed names or IP addresses. - - The texttops filter did not properly recognize the - "nowrap" (wrap=false) option. - - The InstallableOptions group name in a PPD file is now - translated separately (CUPS_MSG_OPTIONS_INSTALLED) so - that UIs can accurately detect the presence of this - group. - - The scheduler no longer keeps job history data for - remote printers on the client (just on the server.) - - The parallel and USB backends now retry if the backend - detects that the printer is not connected to the - system (rather than stopping the queue...) - - The network backends now retry if the backend detects - that the printer is not connected to the network or is - unreachable (rather than stopping the queue...) - - The cupsGetDests() function no longer lists options - and instances for printers that no longer exist. - - The scheduler now converts the document language to - the correct LANG string. - - The cupsaddsmb program now supports alternative CUPS - and SAMBA server names. - - The PostScript filter now supports the Orientation - comment and rotates the page as needed automatically. - - Revamped the makefiles slightly to use automatically - generated dependencies. - - Build fixes for OS X. - - The TIFF reading code depended on the newest version - of libtiff; now conditionally compile that portion of - the loader. - - The PPD code now decodes all JCL options in the - JCLSetup group, not just those options that start with - the prefix "JCL". - - The backends now read print data using the read() - system call to ensure that the current page is printed - while the next page is being processed. - - The pdftops filter did not support shading type 3 - (radial fill) for the "sh" operator. - - The cups-polld program now throttles the local - broadcasts of polled printers and classes so that the - local system is not overwhelmed with hundreds of - printers and classes all at once. - - Updated the serial backend to support 230,400 baud for - the Linux PPC port. - - The cupsGetJobs() function wouldn't report completed - jobs that did not have a document-format attribute - value. - - The cupsEncodeOptions() function now maintains a table - of known boolean and numeric options, and encodes all - other options as strings. - - Now add a newline before the end-of-page code in the - PostScript filter; this fixes a problem with files - that don't end with a newline. - - The image filters looked for the "orientation" option - instead of the correctly named "orientation-requested" - option. - - The cupsEncodeOptions() function now handles mixed - integers and ranges. - - New translation guide for developers to provide native - language support for CUPS. - - -CHANGES IN CUPS V1.1.14 - - - The ippRead() function did not verify that the - attribute name length or string with language value - was not larger than the read buffer. - - The scheduler set the signal handlers before loading - the configuration files the first time; this prevented - the RunAsUser directive from blocking server reloads. - - Added Swedish message catalog. - - The parallel backend now recognizes the /dev/printers - device directory under Linux 2.4.x. - - MacOS X fixes. - - The cupsaddsmb utility sent the server name after the - user information when executing the rpcclient program. - This caused problems with some versions of SAMBA - 2.2.x. - - The IPP backend did not pass the requesting user name - when checking on the print job status. This prevented - it from waiting for the job to complete when - communicating with some IPP implementations that - require it. - - -CHANGES IN CUPS V1.1.13 - - - The lpstat command did not report jobs submitted to - regular printer classes. - - The texttops filter didn't use sufficient precision - when positioning text with some values of cpi and lpi. - This could cause the alignment of text to stray. - - cupsGetDests() didn't merge the options from the - /etc/cups/lpoptions file with ~/.lpoptions - options - in ~/.lpoptions overrode them completely. - - Added support for KOI8-R and KOI8-U character sets, - and added several Russian message catalogs. - - The scheduler put the wrong timezone offset in the log - files (e.g. +0500 instead of -0500 for EST...) - - The scheduler did not ignore trailing whitespace in - *.convs files. - - The scheduler now forces all processes to exit (kill - -9) when it is stopped. This prevents parallel and - USB devices from running in the background after cupsd - goes away. - - The cupsParseOptions() function didn't skip trailing - whitespace after quoted values. - - More changes to support CUPS on OS/2. - - Added Simplified Chinese message catalog. - - Added PAM support for IRIX. - - The cupsGetPPD() function didn't remove the @server - portion of the printer name, and since it would - connect immediately to the remote server instead of - the local server, the printer would not be found. - - Classification and page labels were not rotated to - match the page orientation. - - Now set the TCP "no delay" option on network - connections to improve performance/response time. - - Improved the IRIX printing tools support with patches - from Andrea Suatoni. - - Added a new PrintcapGUI directive to specify the GUI - option panel program to use for the IRIX printing - tools support. - - The cupsGetDests() function did not check to see if a - user-defined default printer (set via lpoptions) still - existed. - - The pstops filter no longer assumes that the default - dictionary is writable when doing N-up processing. - - The pstops filter now supports printing N-up with the - page-set option. - - The imagetoraster filter now supports direct printing - of CMYK image data without conversion/correction. - - The IPP backend now reports printer state/error - conditions when possible (toner low, media empty, - etc.) - - The lpstat command now supports the (undocumented) - IRIX -l option ("-lprintername") for a compact job - listing for a printer. - - The lpstat command now includes printer date/time - information in the output (always Jan 01 00:00) to - make third-party tools happy. - - The text filter now supports non-integer cpi and lpi - values. - - The Margins field in the CUPS raster header was not - initialized by the pstoraster filter. - - Added --with-optim="flags" option to configure script. - - Updated the Italian message translations. - - Updated the cups.list file to install the correct - files. - - The pstoraster filter accessed the third element of a - 2 element array. - - The scheduler did not setup a status pipe for polling - processes, so error messages went to whatever file - descriptor 2 was pointing to when they were started. - - The httpMD5Final() function didn't put a colon between - the password and nonce strings. - - The pstops filter did not default to Binary data for - "%%BeginData:". - - The pstops filter did not stop processing when a line - containing a CTRL-D is seen. - - The scheduler no longer replaces the JobSheets values - from the printers.conf and classes.conf files with the - classification level, if set. This way the original - banner settings are preserved when classification - levels are changed or turned off. - - The serial backend didn't drain the output queue, nor - did it restore the original settings. - - Updated the default system group under MacOS X. - - If no SystemGroup was defined in cupsd.conf, the - system default group was not used. - - The cups-lpd mini-daemon now supports LPD clients that - send multiple control files. - - httpConnectEncrypt() now always uses encryption for - connections on port 443, since port 443 is reserved - for the "https" scheme. - - Group authentication via certificates did not work - from the web interface for accounts other than - "root". - - The serial port backend did not clear the OPOST - option, which could cause problems with some printers. - - The cups-lpd mini-daemon didn't lookup the client IP - address properly. - - The parallel backend now identifies the polled and - interrupt-driven devices under *BSD. - - The scheduler allowed the "always" encryption mode - inside a Location, which is not valid. - - The CUPS startup script now checks for the timezone - information under Linux. - - Now also map the sides attribute to the JCLDuplex - option (if present) in PPD files. - - Updated pdftops to Xpdf 0.93a. - - Added support for MD5 passwords under Slackware. - - Added new AuthType BasicDigest that does Basic - authentication using the MD5 password file managed by - the lppasswd command. - - The banner page attribute substitution code now - retains {name} sequences in banner files when the - named attribute is undefined. Use {?name} to - conditionally substitute an IPP attribute. - - The scheduler now ensures that the ServerRoot - directory and configuration files are owned by and - writable by the User and Group in cupsd.conf. - - The USB backend now lists all USB printer devices - regardless of whether a printer is connected or not. - This allows new USB printers to be connected without - restarting cupsd. - - Added some more minor performance tweeks to the IPP - protocol code to reduce copying and array indexing. - - The cupsaddsmb utility now uses the -c option with - smbclient and rpcclient to avoid the read length limit - for commands on the standard input. - - Added an include file to the CRD handling code in - pstoraster so that it would compile properly on 64-bit - pointer platforms... - - -CHANGES IN CUPS V1.1.12 - - - Added "Polish" to the list of known languages for PPD - files. - - Added missing directory definition to cups-config. - - The CUPS-Move-Job operation did not set the - destination type for the new destination. - - The CUPS-Add-Printer operation did not support the - allow=all or deny=none values to clear the per-user - printer ACLs. - - The SetPrinterAttrs() function did not handle invalid - PPD files that were missing the required NickName - attribute. It now looks for NickName, ModelName, and - then substitutes the string "Bad PPD File" for the - printer-make-and-model attribute. - - -CHANGES IN CUPS V1.1.11 - - - Added support for embedded TrueType fonts in PDF - files. - - Added support for PostScript functions in PDF - files. - - Added new "cupsaddsmb" utility for exporting - CUPS printer drivers to SAMBA/Windows clients. - - Added preliminary support for Darwin/MacOS X. - - The CUPS-Add-Printer operation no longer allows - arbitrary scheme names in device URIs to be used - it - now restricts the available schemes to those found in - the device list (lpinfo -m). - - The ippRead() and ipp_read_file() functions could not - handle more than IPP_MAX_VALUES (100) values in a - 1setOf attribute. These functions have been updated - to dynamically allocate more memory as needed, and the - IPP_MAX_VALUES constant now represents the allocation - increment. [this caused some versions of the - GIMP-print drivers to fail since the number of media - options exceeded 100...] - - The scheduler could crash when BrowseShortNames - was set to "No". - - The scheduler did not prevent MaxClients from being - set to 0, which could cause the scheduler to go in an - infinite loop when accepting a request. - - Made some performance optimizations in the ippRead() - functions to make IPP request/response processing - faster. - - The accept/reject/enable/disable command did not - support properly support the "-h" or default - server name. - - The scheduler did not save the quota configuration - when the job-quota-period attribute was set to 0. - - The LPDEST and PRINTER environment variables did not - support printer instances. - - The text filter now handles more types of boldface and - underline formatting. - - The cupsTempFd() function did not fail if the - temporary directory did not exist; this would cause it - to loop indefinitely instead of returning an error - (-1). - - Stopping (disabling) a printer class did not stop jobs - from printing to printers in that class. - - The cupsGetDests() function was sending the - requested-attributes attribute as a name instead of a - keyword; this caused a serious performance problem on - slower systems since more information had to be - transferred from server to client. - - The web interfaces did not always quote < and & in - things like the job title. This had the potential for - browser-based security violations (on the browser's - machine); bug report from SuSE. - - The scheduler now treats unauthenticated usernames as - case-insensitive when doing quota and allow/deny - processing. - - The lp command sent the "request ID is ..." message - to stderr instead of stdout... - - The PostScript filter (pstops) now handles EPS files, - adding a showpage command to the files as needed. - - The configure script checked for the header - file before the JPEG libraries; since the JPEG headers - can define HAVE_STDLIB_H, the configure check would - cause the JPEG check to fail on some systems. - - The scheduler now supports localized banner files, - using the subdirectory approach, e.g. the "es" - subdirectory under /usr/share/cups/banners is used for - the Spanish banner files. - - Updated the scheduler so it knows the correct - language abbreviation to use for all supported - PPD LanguageVersion values. The new code also - supports country codes as well, so "English-GB" - maps to the "en_GB" locale. - - The cups-lpd mini-daemon did not support - anonymous printing (no username specified). - While the username is REQUIRED by RFC-1179, - MacOS clients do not send the REQUIRED username - information when printing via LPD. - - Added many warning and informational messages - to cups-lpd where they were missing. - - Added Czech message file contributed by SuSE. - - The cups-lpd mini-daemon now returns a non-zero - status if an invalid destination or job ID is - provided. - - The scheduler did not honor the KeepAlive setting in - cupsd.conf. - - Increased the size of the file read/write buffers to - 32k. - - *BSD static library creation fixes. - - Use mkstemps() instead of tmpnam() in pdftops whenever - possible. - - Added httpGetHostByName() function as a wrapper around - gethostbyname() - some implementations of this - function do not support IP addresses (e.g. MacOS X.) - - Added casts to all printf's of file lengths, since - there is currently no standard way of formatting long - long values. - - The client filename field was not cleared in all - instances, resulting in old form data being submitted - to CGIs. - - The httpConnect*() functions now try all available - addresses for a host when connecting for the first - time. - - The pstoraster filter would "lose" all drawing - commands when the PageSize was set but the printer - bitmap was not reallocated. This was most noticeable - with the output from StarOffice 6 beta and would - result in a blank page being output... - - The IPP backend was sending a PAGE comment even when - printing the output from a filter (it should only send - page comments when printing files directly...) - - The pdftops filter didn't properly map glyph names of - embedded Asian TrueType fonts. - - Changed the CUPS startup script to look for a program - named "cupsd", not just any program with "cupsd" in - the name (this caused the apcupsd UPS monitoring - daemon to be stopped/restarted...) - - The CUPS-Move-Job operation did not change the - internal destination name for held jobs, so moved (but - held) jobs would still show up as queued on the - original destination. - - The cups-polld program didn't send the - requested-attributes attribute in the - CUPS-Get-Printers and CUPS-Get-Classes requests, which - made it use more CPU and bandwidth than required. - - The scheduler and CUPS API incorrectly added a - job-sheets-default attribute for remote printers. This - caused banner pages to be omitted from client system - prints. - - -CHANGES IN CUPS V1.1.10-1 - - - Minor fixes to the filter, systemv, and template - makefiles to install files properly. - - -CHANGES IN CUPS V1.1.10 - - - Added a driver for DYMO label printers. - - Added new ClassifyOverride directive to allow users - to override the classification of individual jobs. - - Added new BrowseProtocols directive to control which - browse protocols are used (currently CUPS and SLP). - - Added SLPv2 support (thanks to Matt Peterson for - contributing the initial implementation for CUPS.) - - Adding a raw printer on a remote CUPS server now - correctly redirects PPD file requests to the remote - server. - - The serial backend now limits writes to 1/10th - second worth of data to avoid buffer overflows - with some types of flow control. - - The scheduler did not properly process PUT requests, - so configuration files could not be uploaded to the - server. - - The scheduler did not strip trailing whitespace on - lines in the configuration files. - - The httpWrite() function did not transition the PUT - request to the HTTP_STATUS state to get the status - from the server. - - The scheduler did not properly handle trailing null - ("-") filters when testing a driver that sent data - to the file: pseudo-backend. - - The IPP backend now only sends a document-format of - "application/vnd.cups-raw" when printing to another - CUPS server using a local printer driver or interface - script. Previously the job's document format was - used, which was incorrect. - - The lpadmin command didn't use the ppd-name attribute - with the -m option; this prevented the use of the - "raw" model from the command-line. - - The pstoraster filter output draft (1-bit) 6-color - output in the wrong order; this resulted in yellow - being printed instead of black on Stylus Photo - printers. - - The pdftops filter did not have the Japanese and - Chinese text support compiled into it. - - The IPP and AppSocket backends did not clear the - "waiting for print job to complete" status message, - which caused some confusion... :) - - The serial backend now opens the port in "no delay" - mode to avoid DCD detection problems with some OS's. - - -CHANGES IN CUPS V1.1.9-1 - - - The configure script did not substitute the - correct user and group names. - - The configure script did not use the full path - to the install-sh script when it was used. - - The pstoraster filter did not correctly support - DuplexTumble mode for printers that used flip - duplexing. - - The cups.list.in file was missing from the - distribution. - - The New DeskJet series driver did not use the - correct OrderDependency for the Duplex option. - - Use read() instead of fread() to read piped - print files in lpr/lp. This avoids a bug in the - HP-UX 10.20 fread() function. - - Updated the pstoraster filter to use the MIPS_FIXADE - system call under IRIX to fix bus error problems on - R12000 processors (Ghostscript is not 64-bit clean...) - - Some Xerox PPD files (most notably the Phaser 790) - have illegal whitespace in the option keyword in the - OpenUI line. This caused the PageRegion option to not - be recognized properly for the Phaser 790. - - -CHANGES IN CUPS V1.1.9 - - - Revamped the configure script to use a modular - approach for the various tests. - - Added --with-openssl-* options to properly reference - the OpenSSL libraries in DSOs. - - Added --with-cups-user and --with-cups-group - options to specify the default user and group for - CUPS. - - Added AIX shared library support. - - Added AIX device discovery for the serial and - parallel ports. - - Now use install program or script to install - directories, files, and symlinks. - - Updated pstops filter to use strict handling of EPS - files embedded in a PostScript document. The %%EOF - handling in 1.1.8 caused some dvips files not to - print. - - Fixed yet another memory allocation bug in pstoraster - that would cause it to crash. This fix also ensures - that all memory allocations are done on (at least) a - 64-bit boundary. - - Fixed Digest authentication - httpGetSubField() didn't - skip the Digest keyword. - - The scheduler did not properly handle Digest - authentication with the new multiple-group support. - - The scheduler did not allow usernames that were - not in the UNIX password file to be used for Digest - authentication from passwd.md5. - - The scheduler could not scan PPD files that only used - a carriage return (i.e. MacOS PPD files); the new code - is also about 40% faster, so servers with thousands of - PPD files should start much faster now. - - The scheduler now stores the PPD file size and - modification times in the ppds.dat file, so it can now - incrementally update the PPD database from the model - directory, resulting in significantly faster startup - times. - - The lpinfo command did not return a non-zero status - code if an error occurred. - - Fixed a bug in the scheduler's UpdateJob() function. - Basically, all jobs shared the same status buffer, and - the "buffer start" pointer could point to 1 byte - before the beginning of the buffer. The new - implementation uses a separate buffer for each job and - eliminates the buffer start bug. - - The IPP backend would send N copies of a document if - the receiving device didn't support the copies - attribute, even if the upstream driver already added - the necessary commands to generate the copies. This - was most noticeable with HP printers where N * N - copies would come out instead of N. - - The PostScript filter (pstops) did not properly handle - duplex printing on inkjet printers that provide this - option. Copies would be put on the front and back - sides of the duplexed page, and the filter did not - output an even number of pages. - - The backends always caught SIGTERM after they - connected to the printer. This prevented raw jobs - from being cancelled early. - - The cupsSetDests() function now removes any printers, - instances, and options that are not defined by the - user or server. This should prevent old system-wide - options from being used in individual user accounts. - - Updated the EPSON printer driver and added PPDs for - the newer EPSON Stylus printers that only support the - "ESC i" graphics command. - - The lpadmin command didn't allow you to add remote - printers to a local class. - - The lpadmin command didn't allow you to set the - options (quotas, etc.) for a class. - - The scheduler did not load or save the - job-sheets-default attribute for classes. - - The scheduler did not automatically recreate remote - printers that were part of a class. - - It was possible for a printer class to list the same - printer more than once. - - The scheduler now makes a backup copy of classes.conf - and printers.conf before writing the new file. - - The lppasswd program incorrectly asked for a new - password when deleting an existing MD5 password - account. - - The scheduler did not match "/printers/name.ppd" - against a location of "/printers/name". - - The client code did not always handle HTTP encryption - upgrades properly. - - The client code now caches the last Digest password so - it can retry using a new resource path or nonce value, - which are included in the MD5 sum sent to the server. - This should eliminate unnecessary password prompts - when using Digest authentication. - - The lppasswd command didn't have a man page. - - Updated the PJL detection rules to allow the universal - escape to occur anywhere in the first 128 bytes of the - file. - - The cups-polld program would poll servers continuously - with no delay if there was an error contacting the - server. - - The IPP backend would send an empty job-name or - requesting-user-name attribute if the corresponding - job attribute was an empty string. While this is - allowed by the IPP specification, some HP JetDirect - implementations return a client-error-bad-request - error if an empty name attribute value is received. - The new code only sends these attributes if they are - not the empty string. - - At least some versions of the HP JetDirect firmware - do not correctly implement IPP. Added additional - checks to the IPP backend to eliminate extra, - unsupported attributes which should normally be - ignored by a compliant IPP device. - - The scheduler did not copy the complete list of - supported file types into the - document-format-supported attribute. This caused - clients to not send the local file type (such as - application/vnd.cups-raw for raw print files) and the - corresponding bad output in some cases. - - The scheduler did not fully copy attributes from a - set-job-attributes request - string attributes were - only referenced, which could cause cupsd to crash - or behave irratically. - - The lp command didn't send the right value for the - job-hold-until attribute when "-H resume" was - specified. - - The IPP backend now returns as soon as a job is - completed or reported as "pending-held". - - Added new ImplicitAnyClasses and HideImplicitMembers - directives to the cupsd.conf file to make implicit - classes more usable/transparent to the user. - - Clients can now (with the appropriate authentication) - retrieve and update the server configuration files - using HTTP GET and PUT requests. - - The web interface didn't allow you to modify the - location or description of the printer. - - The pdftops filter now uses its own temporary file - function to work with PDF files using LZW compression - (which use the uncompress program or gunzip) - - The SystemGroup directive now supports specification of - multiple groups. - - Added new Include directive to cupsd.conf, a la - Apache. - - Added new pseudo-driver/PPD called "raw" that can be - used to create/convert a raw queue. This also allows - raw queues to be created in the web interface. - - The pdftops filter didn't handle image objects that - used JPEG and Flate compression together. - - The pstops filter counted pages wrong when using the - N-up and even/odd printing options. This prevented - the page-ranges option from working properly. - - Added another fix to pstoraster for a bus error - condition caused by a lack of parenthesis in the - Ghostscript code. - - Added new "natural-scaling" option which scales the - natural size of the image (percent of natural image - size instead of percent of page size.) - - The lppasswd program is now setuid to the CUPS user - instead of root. - - The PPD functions did not allow for PPD files that - defined the page sizes and margins before the page - size options. - - The mime.types file now checks for the PJL "LANGUAGE = - Postscript" command for PostScript files. - - The scheduler did not truncate file: output files. - - The PPD file reading code did not handle options with - raw quotes (") in the human-readable names. - - The pdftops filter now remaps the space character when - (bad) PDF files contain a .notdef glyph for the space - character. - - -CHANGES IN CUPS V1.1.8 - - - Updated spec file to generate separate cups-pstoraster - package for pstoraster. - - The spec file wasn't setting LOGDIR in the install. - - The scheduler might restart a stopped printer after - stopping a print job. Thanks to Florent - Guiliani for finding this bug! - - The init script showed run level 0 for the Red Hat - chkconfig program. This is incorrect because Red Hat - doesn't use run level 0 for shutdown scripts. - - The IPP backend did not handle the - client-error-not-found error when checking the status - of the job that was sent. This caused remote queues - to stop on client machines when the server had job - history disabled. - - Added httpConnectEncrypt() function to avoid - performance penalty for setting up encrypted - connections initially. - - Use httpConnectEncrypt() in all client apps and in the - CUPS API to ensure consistent usage of encryption - throughout. - - Jobs weren't queued to remote classes (fix from - Richard Begg.) - - AIX changes from Richard Begg. - - Fixed the pstops fix for GNOME output - no longer use - the page numbers in the %%Page: comment since GNOME - puts a filename instead (!?@!#?!). There is still an - issue with N-up printing since GNOME defines its fonts - in the first page instead of the document setup section - (pages must be independent according to the DSC spec) - People with GNOME printing problems should consult bug - #54489... - - The imagetops filter produced PAGE: messages when - generating PostScript for a non-PostScript printer - (only affects page-label and Classification - options.) - - The updated pdftops filter was looking for an options - file called xpdf.conf instead of pdftops.conf. - - -CHANGES IN CUPS V1.1.7 - - - Configuration script changes, including new - "--with-docdir=/dir" option to relocate CUPS - documentation and web content according to your - favorite version of the FHS. - - Documentation updates for encryption, SLP, etc. - - New Software Test Plan and automated test script to - test CUPS prior to installation. - - All scheduler configuration files are now case - insensitive to match Apache. - - Added support for Apache ListenBackLog, Require, - Satisfy, , , and LimitRequestSize - directives. - - Added support for all Apache log levels... - - Added support for "double" HostNameLookups. - - Added new "RunAsUser" directive to support non-root - configurations on the standard (priviledged) ports. - - Added support for non-root invocation of the lpd - backend (does no reserve a priviledged port, which - might not work with some LPD servers...) - - Added new PrintcapFormat directive to control the - output format of the printcap file (BSD or Solaris - formats are supported at present.) - - The CUPS directory service routines now handle - ECONNREFUSED errors gracefully rather than shutting - all browsing off. - - ippErrorString() now returns the recommended error - messages from the IPP/1.1 Model and Semantics - document. - - Fixed a minor IPP compliance issue with responses - to requests without the attributes-charset or - attributes-natural-language attributes. - - Sun fix: need httpFlush() call for chunked IPP - requests in cupsDoFileRequest(). - - httpConnect() now looks up "localhost" by name and - by address (127.0.0.1) for users the go to the - trouble of removing the required localhost entry - in /etc/hosts or on their DNS server... - - Added support for Linux 2.4.x devfs parallel port - filenames (/dev/parallel/N). - - cupsDo[File]Request() and cupsGetPPD() no longer - block trying to reconnect to a crashed or inaccessable - server. - - Added new ppdEmitJCL() function to better handle - PJL commands from PPD files. - - A bug in UpdateJob() would cause the scheduler to - consume 100% CPU until another request was submitted. - - The cancel command did not support the "-" option to - cancel all jobs on all printers. - - The cancel and lprm commands did not support cancelling - the next/current job in the queue. - - The pdftops and pstoraster filters were using unsafe - temporary file functions; while this is not a problem - in normal configurations (the CUPS temporary directory - is restricted), they now use the cupsTempFd() function. - - The mime.types file was missing the recognition rule - for Sun Raster images. - - The admin CGI was passing a printer make string to - ippSetCGIVars() that was being replaced in that - function. - - "lpoptions -l" would resave the options... - - The EPSON drivers now send the "end packet mode" - command when printing to USB devices. - - The scheduler initialized certificates before loading - the cupsd.conf file. - - The scheduler used /dev/random to collect random data, - which could block if insufficient entropy information - had been collected by the kernel. Now use - /dev/urandom. - - Fixed a bug in the whitespace skipping code in - httpGetSubField(). - - The LPD backend now supports a new "order" option: - "lpd://server/queue?order=control,data" (default) and - "lpd://server/queue?order=data,control". - - The scheduler enforced a 30 second timeout on all - clients regardless of the Timeout directive and if a - CGI was currently running. - - cupsParseOptions() now sets boolean options to - option=true or option=false. - - The "percent complete" calculations in the LPD backend - could overflow on large files, causing the percentage - to wrap to 0 every 40MB or so. - - Fixed a memory reallocation bug in pstoraster that - could cause it to crash. - - The LPD backend now sanitizes the job title to avoid - potential problems on remote LPD servers. - - The lp command did not send the requesting-user-name - attribute when altering a job. - - The pstops filter did not handle PostScript files with - lines longer than 8191 bytes. - - The scheduler no longer uses inet_addr() to convert IP - addresses in dot format (mmm.nnn.ooo.ppp) to the - 32-bit format, since it will not work for IPv6 - addresses. - - New "Classification" directive to force labeling of - the current classification on each page. - - New "page-label" attribute to add per-page labels - ("For Official Use Only", "Draft", etc.) - - The scheduler now sets the HTTPS environment variable - for CGI programs when a client connects using - encryption. - - Fixed a recursion bug in the scheduler that could - cause cupsd to crash when a printer was removed. - - The LPDEST and PRINTER environment variables didn't - support instances. - - Dropped the "file" backend from the device list that - is reported, since it is only available for *testing* - and should never be used in a production environment. - The file: device can still be used, but it won't show - up in the list of devices from lpinfo or the web - interface. - - Added support for /dev/lpa# parallel ports under *BSD. - - Added META variables to the CGI header template to - prevent caching of the results. - - Fixed an unaligned memory buffer for the pstoraster - clist states; this caused bus errors for some - combinations of printers, drivers, and options. - - Re-added black reduction for colorful colors; this - helps to prevent dark colors from getting desaturated. - (only used when converting RGB to CMYK) - - Added two new directives - MaxJobsPerPrinter and - MaxJobsPerUser - to allow an administrator to set - the maximum number of pending jobs in a queue or - submitted by a user. - - The scheduler no longer stops a printer if it can't - create the status pipe or run the filters or backend. - This will allow heavily loaded servers to service - clients or start print jobs as the load allows. - - Fixed a bug in the Set-Job-Attributes code that could - crash the scheduler (patch from Martin Zielinski) - - cupsSetDests() did not quote option values with - embedded spaces. - - Added support for the Enable-Printer and - Disable-Printer extension operations (same as - CUPS-Accept-Jobs and CUPS-Reject-Jobs.) - - The AppSocket and IPP backends now wait for the print - job to be finished before exiting; this should prevent - the loss of print jobs with older JetDirect firmware - and make consecutive print jobs print faster. - - The BMP loading code did not handle resolution values - of 0. This is a problem with BMP image files produced - by the GIMP. - - The HTTP Upgrade code (upgrade to TLS encryption) - bypassed the authentication checks. - - The HTTP Upgrade code did not send a 426 status code - to the client and end the current request. This caused - a race condition between the client and server for the - upgrade to TLS. - - Fixed a bug in the EOF and Trailer detection code in - the pstops filter. - - The imagetoraster filter did not add the margins to - the custom page size in the raster header. - - The imagetops filter did not adjust the custom page - size to the size of the printed image. - - The imagetops filter did not include DSC comments - which are required by some printers. - - The imagetops filter did not insert newlines in - Base85 encoded output, causing files to contain - lines longer than 255 characters (violation of the - DSC). - - Added support for the DeskJet 900 series duplexer - and CRET color modes in the HP driver. - - Added support for PPD-defined margins in the HP - driver. - - Fixed the debugging output from pstoraster - the - font list was not terminated by a newline. - - Some versions of the HP-UX pam_unix authentication - module apparently do not pass the appdata_ptr argument - to the conversation function, preventing the scheduler - from authenticating users using PAM under HP-UX. A - workaround using a static variable has been added to - address this problem. - - Fixed a bug in the scheduler SortPrinters() function - that could cause printers to disappear or the - scheduler to crash when adding a printer. - - Changed the pstops filter to not do per-page filtering - if the file does not conform to at least version 3.0 - of the document structuring conventions. This seems - to "fix" printing with broken apps. - - The image filters did not handle older TIFF files that - lacked the samples-per-pixel and bits-per-pixel tags. - - Added new cupsGetJobs() and cupsFreeJobs() functions - to manage print jobs. - - cupsEncodeOptions() would encode names of 0 length and - cupsAddOption() and cupsParseOptions() would add names - of 0 length. - - The scheduler might block waiting for status messages - after starting a new print job. Thanks to Florent - Guiliani for finding this bug! - - -CHANGES IN CUPS V1.1.6-3 - - - The configure script put the JPEG library before the - TIFF library; this caused problems in some - configurations since the TIFF library also supports - JPEG compression of TIFF images. - - Updated the configure script and makefiles to handle - admin man pages with the "1m" extension (HP-UX, IRIX, - Solaris, Tru64) and in odd directories (IRIX) - - The updated cupsTempFile() function did not return - the filename when called with a filename buffer of - NULL (previously it used a static buffer.) - - FreeBSD uses /dev/unlptN, but NetBSD and OpenBSD use - /dev/ulptN. - - DeletePrinter() didn't remove the printer from any - classes it was a member of. - - DeletePrinterFromClass() didn't preserve the - implicit status of a class. - - DeletePrinterFromClasses() didn't remove printers - from implicit classes. - - StartJob() didn't send the job-sheets, job-priority, - and job-hold-until attributes to remote printers. - - LoadAllJobs() was looking for job-sheets-completed - instead of job-media-sheets-completed. This would - prevent accumulation of page data after a restart - of the scheduler. - - The pstops and imagetops filters now generate copies - using the appropriate method for a Level 1, 2, or 3 - printer since some Level 2/3 printers don't support - the /#copies variable anymore. - - The man page for cups-lpd did not mention the "-o" - option. - - The IPP backend didn't handle version-not-supported - errors and revert to IPP/1.0 (previously it only checked - for a bad-request error) - - Caldera fix: lpc now reports unimplemented commands as - unimplemented, not invalid. - - Caldera fix: lpq didn't recognize BSD lpq "-a" option. - - Caldera fix: lpr didn't recognize BSD lpr "-1", "-2", - "-3", "-4", "-q", or "-U" options. - - RedHat fixes: patches to GNU Ghostscript - - SuSE fix: temp file creation patch to GNU Ghostscript - (pstoraster). - - SuSE fix: remove cgi-bin/abort.c and cgi-bin/email.c, - which are not used. - - SuSE fix: missing NULL check in cgi_initialize_post(). - - SuSE fix: potential buffer overflows in - cgi_initialize_string(). - - SuSE fix: potential buffer overflows in - ippSetCGIVars() - - SuSE fix: more NULL checks in ppdOpen(); also make - sure that all memory is freed on error to avoid memory - leaks. - - SuSE fix: Exit from child if setgid() or setuid() - fails. - - SuSE fix: Added setgroups() calls after setgid() and - setuid() calls. - - SuSE fix: potential buffer overflows in httpEncode64() - calls. - - SuSE fix: potential buffer overflows in httpSeparate() - - SuSE fix: potential buffer overflows in ippWrite() for - bad input. - - SuSE fix: potential nul skip in ppd_decode() for - missing hex digits. - - -CHANGES IN CUPS V1.1.6-2 - - - Added changes to support NetBSD startup scripts. - - Added separate compiler options for pstoraster - (Ghostscript) to avoid compiler-induced errors - from Ghostscript's twisted code. - - The mime.types file contained syntax errors. - - Updated the *BSD USB device filenames to use - the /dev/unlptN files so that the USB device - is not reset prior to printing (causes print - corruption on many printers) - - Added new cupsTempFd() function to avoid serious - security bug in glibc fopen() function. The glibc - fopen() function unlinks a file before creating it, - which opens up possible symlink attacks. - - Now reject 0-length names in add-printer and add-class - requests. - - Fix for pstoraster when ZLIB is not available. - - cupsGetPPD() didn't reconnect when a HTTP connection - was lost. - - SuSE fix: httpConnect() didn't check that the - value from gethostbyname() was a valid IPv4 address. - - SuSE fix: httpConnect() didn't allow file descriptor 0 - to be used for a socket. - - SuSE fix: ippRead() didn't confirm that all values in - a set were numeric or string types. - - SuSE fix: lppasswd race condition fixes. - - SuSE fix: directive names could overflow buffer when - reading *.conf files. - - SuSE fix: HEAD requests for PPD files did not use the - same logic as GET requests. - - SuSE fix: possible buffer overflow when adding - /index.html to requested directory name. - - SuSE fix: possible buffer overflow when converting - IPP attributes to string options for filters. - - SuSE fix: creating file: device output with mode 0666 - instead of mode 0600. - - SuSE fix: creating job info files with mode 0640 - instead of 0600. - - SuSE fix: don't rely on snprintf() for including - system name in log filenames. - - SuSE fix: add bounds checking when copying quoted - and hex strings. - - -CHANGES IN CUPS V1.1.6-1 - - - Added configure check for getting the correct - strftime() format string; %c is not Y2k safe, - and %KC and NULL are not universally supported. - - -CHANGES IN CUPS V1.1.6 - - - Fixed another possible DoS attack in httpGets() - - Added check for "LANGUAGE = PCL" and "LANGUAGE = - POSTSCRIPT" in mime.types. - - Resolution options were not being passed into the - filter programs properly. - - The default compiler options for GCC no longer include - "-g3", which apparently is deprecated in newer - versions of GCC. - - CheckJobs() could cause cupsd to crash if a job is - cancelled in StartJob(). - - The printers.conf and classes.conf files are now - written with restricted permissions. - - The round-robin algorithm used by FindAvailablePrinter() - had problems; fixes contributed by Joel Fredrikson. - - If LoadAllJobs() is unable to determine the file type - of a print job, assume "application/vnd.cups-raw". - - The web interface now provides a job_printer_name - value for any corresponding job_printer_uri value. - - The cups-lpd mini-daemon now logs the client address - and hostname as well as all commands and errors in the - syslog file. - - The IPP backend now detects the supported file formats - and only specifies the document format if it is - supported. This makes IPP printing to network print - servers and cards more reliable without affecting the - capabilities of CUPS servers. - - The time_at_xyz attributes are now converted to human- - readable dates and times for the web interfaces. - - The HP and EPSON sample drivers now correctly catch - signals and eject the current page when a job is - cancelled. - - Fixed bug in CGI code - did not ignore control - characters (e.g. newlines) in form data. This caused - sporatic web interface problems. - - The file type logging code in the scheduler referenced - the optional document-format attribute; the new code - uses the resolved MIME type instead. - - The client.conf parsing code now removes trailing - whitespace. - - The MaxJobs directive was being treated as a boolean - instead of an integer. - - The scheduler would not timeout remote printers if - BrowseInterval was set to 0. - - The lpadmin command now supports setting of options - and user-level access control. - - Added "-E" option to all printing commands to force - encryption. - - The client code did not consume the response to the - OPTIONS request when switching to secure mode. - - The scheduler did not output a Content-Length field - when responding to an OPTIONS request. - - Added documentation on using cups-lpd with xinetd - to the man page. - - The socket backend now starts retries at 5 seconds and - increases the interval to 30 seconds. This should - provide faster printing when multiple jobs/files are - queued for a printer. - - The filters and backends no longer buffer output to - stderr. This should provide much more accurate status - reporting. - - -CHANGES IN CUPS V1.1.5-2 - - - Fixed configure check for OpenSSL to work with RSA - code. - - Added configure check for , and use this - check in backend/serial.c. - - Updated configure script handling of data, - configuration, and state directories to use datadir, - sysconfdir, and localstatedir variables. - - NetBSD uses different serial port filenames than - FreeBSD and OpenBSD. - - The pdftops filter didn't need some X-specific files. - - The scheduler makefile doesn't do a chown anymore when - installing (cupsd did this automatically on startup - anyways) - - -CHANGES IN CUPS V1.1.5-1 - - - There was a typo in the top-level Makefile - - The top-level Makefile did not install an init script - for run level 5. - - The configure script did not add the "crypto" library - when checking for the OpenSSL library. - - The OKIDATA PPD files were missing. - - The config.h.in file defined the wrong version number. - - The serial backend did not define "funky_hex" under *BSD. - - Updated the Visual C++ project files and some of the - CUPS API sources to compile under Windows again. - - -CHANGES IN CUPS V1.1.5 - - - Security updates - new default configuration does - not broadcast printer information and only allows - access from the local system. - - EXPERIMENTAL encryption support - CUPS now optionally - supports TLS/SSL encryption via the OpenSSL library. - - Documentation updates. - - Makefile/configure script updates. - - The RPM spec file didn't work out-of-the-box under - RedHat or Mandrake. - - Minor code cleanup to remove extraneous compiler - warnings. - - cupsTempFile() was using %p for the temporary - filename; this should have been %08x (just 8 digit - hex) - - Deleting a printer with active print jobs would still - crash the server. - - ippWrite() and ipp_write_file() didn't send the - correct value length for name-with-language and - text-with-language attributes. - - Updated IPP code to support copied strings (that - should not be freed); this provides slightly more - efficient IPP server performance. - - Updated PDF filter to Xpdf 0.91. - - httpGets() could go into an infinite loop if a line - longer than the input buffer size was sent by a - client. This could be used in a Denial-of-Service - attack. - - The lpstat and CUPS API functions now request only the - data required when getting the list of printer or - class information. This should improve performance - with large numbers of printers on slower machines. - - The scheduler was always enforcing the FilterLimit, - even if FilterLimit was set to 0. - - Updated the Linux USB backend to support Mandrake's - /dev/usb/usblp# filenames. - - The PRINTER and LPDEST environment variables did not - override the lpoptions default printer. - - The PPD read functions incorrectly included trailing - characters (usually whitespace) after quoted string - attributes. - - The multiple-document-handling attribute handling code - did not check for the correct value for collated - copies (separate-documents-uncollated-copies). - - The EPSON driver did not work with OKIDATA printers in - EPSON emulation mode (needed change-emulation command) - - The HP-GL/2 filter did not scale the plot properly in - scale mode 2. - - Added PPD files for 9-pin and 24-pin OKIDATA printers. - - The httpSeparate() function didn't handle passwords - that started with a number. - - ippDelete() could free the character set string - multiple times in name-with-language and - text-with-language attributes. - - The scheduler would access freed memory right after - freeing it (for debug messages); these parts of the - code have been reordered to avoid this situation - which was causing sporatic errors and crashes. - - The ppdClose() function didn't free all of the strings - in the ppd_file_t structure. - - The LoadAllJobs() function in the scheduler did not - close the spool directory. - - Changed all sprintf's that use string formats to - snprintf's, even if the destination buffer is - larger than the source string(s); this protects - against buffer overflows caused outside of CUPS... - - Changed all strcpy's to strncpy's between local and - global variables, even if the destination buffer is - larger than the source string; this protects - against buffer overflows caused outside of CUPS... - - The CUPS certificate functions didn't use the - CUPS_SERVERROOT environment variable when set. - - The directory services code was copying instead of - comparing the remote printer info, resulting in - unnecessary updates of the printer attributes for - remote printers. - - Added new mime.types rules to allow automatic raw - printing of PCL and ESC/P files; PJL headers are - parsed to differentiate between PostScript and - PCL job files. This should eliminate a lot of - the reports of SAMBA printing problems due to - the missing "-oraw" or "-l" options. - - The mimeLoadType() function didn't handle the - 3-argument contains() function. - - The LoadPPDs() function in the scheduler didn't - properly set the alloc_ppds variable or handle a PPD - database containing 0 printers. - - The scheduler FindAvailablePrinter() function didn't - use the same queuing logic as the CheckJobs() - function. This caused classes to stall if a remote - printer was always busy. - - Jobs are now assigned to printers in a class - round-robin style. This should prevent the first - server in the class from bearing the brunt of the - jobs. - - The scheduler's LoadAllJobs() function didn't always - restore remote printers for queued jobs on startup. - - The serial backend didn't support the higher baud - rates with the old termios interface. It now supports - 57600 and 115200 baud. - - The serial backend now supports different types of - flow control; previously it ignored the flow=XYZ - option in the device URI. - - The serial backend now supports DTR/DSR flow control, - which is popular on dot-matrix printers (access with - "flow=dtrdsr" in the device URI) - - Added new job-originating-host-name attribute for - jobs. The new attribute provides the hostname or - IP address of the machine that submitted the job. - - The set-job-attributes code no longer allows read-only - job attributes to be changed. - - Expanded the click area for the navigation bar in the - web interface. - - Updated the lp and cancel commands to support all of - the Solaris print options (some are simply ignored - since they do not map) - - Updated the scheduler to limit the number of file - descriptors to the maximum select() set size. This - was causing problems on Solaris systems where the - max FD count was increased beyond 1024. - - The scheduler's LoadDevices() function was getting - interrupted by the SIGCHLD signal handler; now ignore - child signals while loading devices. - - Added quota and allow/deny user support for printers - and classes. - - Removed black/CMY adjustment code from the PS and - image file RIPs; it was interfering with some CUPS - driver dithering code. - - The lpc program stopped listing the queue statuses - after the first active printer. - - The cups-lpd program used an output format that the - Solaris printing system did not understand. - - Updated the lpq program to use the Solaris format - except under Tru64 UNIX. - - Some DEC PPD files incorrectly use "Off" for the null - value in UI constraints. Added "Off" to the list of - accepted null values. - - Changed the *BSD define constants to __*BSD__ in all - of the backends. - - Added support for "lpstat printername", which is an - undocumented feature in Solaris. - - The HP-GL/2 filter now only sets the plot size if it - is set in the plot file. - - The lpmove command wasn't sending the requesting - user name, causing it to always fail. - - Updated the cupsTempFile() code to use GetTempPath() - under Windows. - - The cups-lpd mini-daemon didn't limit the number of - data files accepted, didn't use cupsTempFile(), - didn't handle control file job information in any - order, and didn't free job options after printing - a file. - - The scheduler copy_banner() function did not - explicitly set the owner and permissions of the banner - files, which could prevent the banner pages from - printing on some systems. - - The lpstat program wasn't listing remote classes. - - The scheduler did not verify that the printer-uri - attribute was specified in all requests that required - it. - - -CHANGES IN CUPS v1.1.4 - - - Makefile and configure script fixes. - - **** Changed the default Printcap setting **** to - /etc/printcap. There are just too many people asking - why application XYZ doesn't see their printers! - - The web admin interface now displays an error if it - can't get the list of printer drivers from cupsd. - - The IPP backend was putting the copies option before - the other job options were set. This caused the IPP - request to contain attribute groups in the wrong - order, which prevented remote printing. - - Added checks in scheduler to free memory used for - IPP requests and language information when closing - a client connection. - - Fixed the duplex option in the HP LaserJet driver. It - should now work with all LaserJet printers (and - compatibles) - - The add-printer web interface didn't initialize the - "old info" data pointer, which caused random crashes - on many OS's. - - Fixed many page sizes defined in the Level 1 - compatibility file "gs_statd.ps" to match reality. - - Fixed another bug in the setpagedevice "code" in - Ghostscript. It should now accept all standard - Adobe attributes on all platforms. - - Fixed pstoraster so that it reallocates memory for - color depth changes as well as size/resolution - changes. This removes an ordering constraint on - the color, page size, and resolution options in - PPD files. - - The IPP backend didn't use the job's character set - when the destination printer supported it. This - caused problems when printing text files to other - CUPS servers. - - Updated the logic used to determine when to rebuild - the PPD file database. The scheduler now checks the - dates and the number of PPD files (was just checking - the dates.) - - Updated the ippSetCGIVars() function (used by the - web interfaces) to only filter valid string values. - - The PostScript filter was scaling 2-up pages - incorrectly. This caused the edges of some pages to - be clipped. - - -CHANGES IN CUPS v1.1.3 - - - Makefile fixes. - - RPM spec file changes. - - Documentation updates. - - Enabled pstoraster debug messages for everything - (only logged when LogLevel set to "debug"...) - - Changed the Input/OutputAttributes fix in - pstoraster so that it works on all platforms. - - The HP-GL/2 filter didn't set the right green - color value in encoded polylines or text. - - Updated the "fitplot" code to handle plot sizes - specified as "PSwidth,length" and "PSlength,width". - - Updated the Linux parallel and USB backends to open - the device files prior to looking in /proc for - autoprobe info. This makes sure that loadable device - driver modules are in fact loaded... - - Added new FilterLimit directive to limit the number - of processing jobs/filters on a system. - - set-job-attributes didn't change the job-state to - held/pending when the job-hold-until attribute was - specified. - - set-job-attributes didn't save the new job attributes. - - Now change the "requesting-user-name" attribute in - requests from remote systems to "remroot" when an - unauthenticated "root" user is sent. This can be - changed using the new RemoteRoot directive in - cupsd.conf. - - The cancel-job, hold-job, release-job, and restart-job - operations didn't log the authenticated username. - - The cups-lpd mini-daemon now checks for a - document-format option before forcing raw mode with - filter mode 'l'. - - The cups-lpd mini-daemon now supports "-o" options - on the command-line (passed by inetd) to set global - defaults for all print queues. - - The pstops filter assumed that a file with a Trailer - comment would also have an EOF comment. - - Added new cupsSetPasswordCB(), cupsSetServer(), - cupsSetUser(), and ippSetPort() functions to better - support client applications (especially GUIs...) - - The CUPS-add-class and CUPS-add-printer operations - didn't reset the printer-name attribute on remote - print queues that had to be renamed when a local - printer was defined with the same name. - - The lpoptions command now supports a "-r" option to - remove options for a printer or instance. - - The lpadmin and admin.cgi programs no longer allow - class and printer names to begin with a number; this - caused the command-line utilities to become confused. - - The Linux USB backend now looks for both the parallel - and usblp driver names in the device list. - - Added a new FontPath directive to cupsd.conf, and also - a "--with-fontpath" option for the configure script to - specify alternate font paths for pstoraster. - - The CUPS-move-job operation didn't update the - job-printer-uri attribute. - - The scheduler only looked up printers and classes by - name in IPP requests, instead of using the full URI. - This caused problems with KUPS and friends with - remote printers. - - The scheduler now handles better localization of - hostnames (e.g. server is host.foo.com, remote is - host.subfoo.foo.com, localized is not host.subfoo...) - - The scheduler logging functions now use a common - log file checking/rotation function (courtesy of - Crutcher Dunnavant at Red Hat) - - The scheduler could accept more client connections - than it allocated for if more than one Port or Listen - line was present in cupsd.conf. - - Other minor scheduler performance tweeks. - - The lpq and lprm commands didn't support the default - printer set using lpoptions. - - The lpoptions command now supports a "-l" option to - list the printer-specific options and their current - settings. - - The web printer and class lists now show a link to the - default printer or class at the top of the page. - - The text filter now supports pretty printing of shell - and perl scripts as well as C/C++ source files. - - The top and bottom margins were reversed for landscape - text printing. - - The lpq and lprm commands didn't understand printer - instances. - - The scheduler only selected on the first 100 file - descriptors instead of the maximum file descriptor - limit. - - The scheduler client, listener, and mainline functions - now share code to disable and enable monitoring for - new client connections. - - The imagetoraster filter didn't support all of the - required pagedevice parameters. - - The serial backend now checks for 100 serial ports - under Linux. - - The scheduler used sscanf() to pull out the remote - printer location, description, and make/model strings, - but if any of these options was empty then sscanf() - would stop processing. - - Added "debug2" log level to provide a little less - verbose debugging information at the "debug" level. - - The scheduler would crash if you stopped a printer - that was currently printing a job. - - The scheduler incorrectly allowed jobs in the cancelled, - aborted, or completed state to be cancelled. - - The image filters did not load TIFF images properly - for bottom-to-top and right-to-left orientations. - - Added new cupsEncodeOptions() function to encode - CUPS options as IPP job attributes. - - The IPP backend, LPD mini-daemon, client commands, - and CUPS API did not properly encode multiple - option values separated by commas. - - Added new scheduler malloc logging in debug mode - (provides summary of total arena size, allocated, - and free bytes once a minute) - - The EPM-based distributions didn't install the - correct symlinks for a few man pages. - - Fixed a memory leak in the scheduler - wasn't - freeing old filters when deleting or renaming - printers. - - The scheduler now queries the primary IP address - for the name of the server and maps any incoming - requests from that address to the server name. - This fixes web admin mapping problems from - server.domain.com to localhost. - - The web printer modify interface now remembers - the previous device and driver settings (except - for serial ports.) - - The job-k-octets attribute is now stored as part of - the job attributes; this preserves the information - after a job is completed when job file history is - turned off. - - Dropped option sub-group parsing code for the moment, - since many Xerox PPD files abuse this feature in PPD - files and don't follow the hierarchy rules. - - Added new wrapper code around options so that duplex - options for some HP printers don't prevent prints. - - Added support for Digital UNIX/Tru64 UNIX/OSF/1 format - for "lpstat -v" output. - - Now show the URI for remote printers instead of - /dev/null in "lpstat -v" output. - - Creating classes and adding printers to a class with - the lpadmin command didn't work. - - The banner pages and test page should now format - correctly in both portrait and landscape orientations. - - Updated banner page substitution so that { can appear - by itself without quoting. - - -CHANGES IN CUPS v1.1.2 - - - Makefile/configure fixes - - RPM spec file and EPM list file fixes - - The cupsTempFile() function now uses a different - algorithm for generating temp files and "reserves" - them to avoid possible security exploitation. - - Now use /dev/random (if available) to seed the random - number generator for certificates. - - The /var/spool/cups and /var/spool/cups/tmp directories - were incorrectly owned by root; they are now owned by - the filter user, typically "lp". - - The scheduler now resets the permissions on the spool - and temp directories as needed to match the filter - user. - - Now expose ppdCollect() as an externally callable - function. - - The image filters now support filtering from the - standard input. - - The imagetoraster filter now collects all printer - options and job patch files and applies them to the - page header as needed. - - Added format and banner options to LPD backend. - - The send-document operation didn't start a job - immediately when last-document was true. - - The set-job-attributes operation didn't correctly - replace the current job-hold-until value. - - Removed the option wrapper code from ppdEmit() and - friends since it caused problems with Ghostscript - and many PS printers. - - Was setting TZ environment variable twice for job - filters. - - Added syslog logging in cups-lpd to aide in - debugging problems. - - The HP-UX parallel port backend did not list the - available parallel ports on some systems (printf - calling problem...) - - The lp and lpr commands overrode user options if - -d/-P were specified after -o. - - The scheduler would crash with a */* filter. - - Added support for a "default" filter for unknown file - types. The example provided in the mime.types and - mime.convs file prints unknown files as if "-oraw" was - specified for the job. This functionality is disabled - by default. - - The "compatibility" mode fix for older backends did not - work for smbspool. Added a workaround for it. - - The HP-GL/2 filter didn't perform the right pen scaling - with some files and the "fitplot" option. - - New Software Performance Specification document that - describes the memory, disk, and CPU usage of all the - CUPS software. - - -CHANGES IN CUPS v1.1.1 - - - The pstoraster Makefile still referenced one of the - old PDF filter files. - - The filter Makefile used INSTALL_DATA instead of - INSTALL_LIB to install the CUPS image library. - - The administration CGI didn't work properly with - network devices. - - The BrowseACL variable was not updated after the - cupsd.conf file was loaded. - - The lpd mini-daemon didn't support printer instances. - - Now use a default umask of 077 for child processes. - - Now put temp files in /var/spool/cups/tmp for child - processes and the root user, unless TMPDIR or TempDir - is defined otherwise. - - cupsGetPPD() no longer uses easy-to-guess filenames. - - The CUPS-Delete-Class and CUPS-Delete-Printer - operations now save classes.conf file as needed. - - The lppasswd command wouldn't add a user. - - The ppdOpen() function could cause a segfault if a - 0-length PPD file was read. - - The image filters were not handling images with - different X and Y resolutions properly. - - The imagetoraster filter defaulted to RGB output - instead of black output like pstoraster. - - The pstops filter didn't handle binary data properly. - - The pstops filter didn't handle copies properly for - PS files lacking DSC comments. - - The pstops filter now appends %%EOF to the end of - documents if they don't have it. - - The cupsGetPPD() function didn't work with remote - printers lacking the @server in the name. - - The configure script didn't work right when only - --prefix was specified. - - The ppdEmit() code now wraps all printer commands so - that buggy PostScript printers will still print a file - after receiving an option that isn't available. - - Fixed the DeskJet margin bug, and disabled 600dpi - color mode until it can be fixed. - - The cupsAddDest() function didn't sort instances - correctly in all cases. - - The time-at-xyz attributes now expand to the date and - time in banner files. - - -CHANGES IN CUPS v1.1 - - - Documentation updates. - - Configuration script updates. - - Didn't map charset and language value strings to lowercase - and _ to - as required by SLP and IPP. - - ppdLoadXYZ() didn't add the list of available fonts to the - ppd_file_t structure. - - The text filter common code was freeing the PPD file data - before it was used. - - The text filter now embeds missing fonts. - - The CGI interface now maps local access to the server to - the localhost address. - - The HP-GL/2 filter didn't use the specified (or default) - color ranges, resulting in strange colors. - - The HP-GL/2 filter didn't default to no input window, which - caused unnecessary clipping of plots. - - Integrated Xpdf's pdftops filter into CUPS, which is a - lightweight and reliable replacement for Ghostscript's - PDF support. - - Removed all PDF support from Ghostscript. - - Updated HP driver to set top margin; this seems to fix - the offset problem seen on HP DeskJet printers. - - Fixed dependencies on the ZLIB and JPEG libraries in - pstoraster. - - The lpr command wasn't using the lpoptions defined by - the user. - - The lpr command would segfault if the CUPS server was - not running. - - The top-level makefile was not installing the CUPS - initialization script. It now does so if it sees there - is an init.d directory in /sbin, /etc/rc.d, or /etc. - - "lpstat -v all" didn't work. - - pstoraster would crash on some platforms doing the - setpagedevice operator. - - The web administration interface now allows you to set - the default banner pages. - - Images can now be positioned on the page using the new - "position" option. - - The AccessLog, ErrorLog, and PageLog directives now - support "%s" to insert the server name. - - Added a new BrowseShortNames directive to allow for - short remote printer names ("printer" instead of - "printer@server") when possible. - - The scheduler could crash if given an invalid PPD file - with no PageSize attributes. - - Updated the serial, parallel, and usb backends to do - multiple writes and ignore ioctl() errors as needed; - this should fix problems with serial printing on old - serial drivers and with the UltraSPARC parallel port - driver under Solaris 2.7. - - Now propagate LD_LIBRARY_PATH to child processes from - cupsd. - - New DataDir directive for installing in alternate - locations. - - New CUPS_SERVERROOT and CUPS_DATADIR environment - variables to specify installation directories as - needed. - - Queued remote jobs recreate remote printers as needed - when the scheduler is started. - - Deleting a printer also purges all jobs on that - printer. - - Old job and control files that don't belong to a - printer are automatically deleted. - - Wasn't updating time-at-processing and - time-at-completed attributes in job. - - Didn't send required multiple-operation-time-out - attribute in response to a get-printer-attributes - request. - - cups-lpd now supports options set with lpoptions. - - The job-hold-until attribute is now provided with all - jobs. For jobs that are not currently held the value - is "no-hold". - - The scheduler was not sending "unknown" values in IPP - responses. - - The lpoptions command now accumulates options from - previous runs rather than replacing all options for a - printer. - - The IPP backend now switches to IPP/1.0 if a 1.1 - request fails. - - The lpadmin and admin.cgi programs now validate new - printer and class names. - - The access_log file now includes the number of IPP bytes - received in a POST request. - - -CHANGES IN CUPS v1.1b5 - - - Documentation updates. - - The pstoraster filter didn't compile without the JPEG library. - - The cupsd server didn't support the HTTP OPTIONS request - method. - - Dropped the "CLOSE" method supported by the cupsd server. - (not defined in HTTP specification) - - Makefile/configure script fixes. - - Missing the job-restart template. - - Added IPP test suite for testing. - - Missing IPP documentation from binary distributions. - - Fixed multiple-document handling code when last-document - not specified. - - Added more checks to IPP requests to prevent bad requests - from getting through. - - Not all of the Ghostscript error output was being sent to - stderr. - - The PostScript filter now added PJL commands to set the - job name and display string, if supported. - - The scheduler would crash if the browse socket could not - be bound. Now disables browsing if port 631 (reserved for - IPP) is being used by a misbehaving daemon. - - The USB backend now looks for the older Linux 2.2.x USB - printer device filenames as well as the newer ones. - - The IPP backend now uses the UTF-8 charset exclusively, - since apparently only CUPS handles more than US-ASCII and - UTF-8... - - Wasn't quoting ( in PostScript banners... - - Send-document requests with no document-format attribute - could cause cupsd to crash. - - Old jobs in the spool directory might cause cupsd to - crash. - - CUPS now supports all of the recommended job-hold-until - keywords as well as name values of the form "HH:MM" and - "HH:MM:SS". - - Added placeholder pointer for TLS encryption to the HTTP - connection structure. - - Fixed the "fast poll" bug reported by DISA - the - status pipe wasn't being closed for multi-file jobs. - - Revamped put_params code in pstoraster to fix bitmap - allocation bug with FrameMaker output. - - Ripped out filename, etc. code from pstoraster as it - is a potential security hole. - - Added support for RIP_CACHE environment variable in the - new pstoraster. - - Fixed USB device filenames for Linux; now support new - pre-2.4 devices (/dev/usb/lp#) and 2.2 devices - (/dev/usblp#) - - Fixed accept-jobs crash with classes. - - Didn't include dot-matrix EPSON drivers in previous - release. - - -CHANGES IN CUPS v1.1b4 - - - Documentation updates. - - Many makefile and configuration script fixes (should - now compile better under *BSD.) - - The MediaPosition attribute was being mishandled by - GhostScript, causing the RIP to fail whenever a paper - tray was selected. - - The scheduler now logs the final line of log information - from a filter, even if it doesn't end with a newline; this - primarily affects GhostScript error output. - - The scheduler was saving implicit classes, so after a few - restarts you'll end up with AnyPrinter, AnyAnyPrinter, etc. - - The JPEG autodetection didn't work with some JPEG files that - came from digital cameras (JPEG but not JFIF); the new - magic types should work with all images that the JPEG library - can handle. - - Fixed a bug in the new contains() MIME type rule that could - cause cupsd to crash. - - Switched to using strtol() in the MIME type code so that you - can use hex, octal, or decimal constants as desired in the - mime.types file. - - Banner files are now treated as templates, allowing any type - of file to be used as a banner. - - Added a 30-second timeout to backend device reports so that a - hung backend will not prevent the scheduler from starting. - - Backends are once again terminated when jobs are stopped; the - CUPS-supplied backends will stay alive until the downstream - filters have had a chance to clear out old page data. - - The charset lookup in the CUPS localization support was wrong - (iso8859-x instead of iso-8859-x) - - Changed the "cpNNNN" code page files to "windows-NNNN" to match - the IANA registrations. - - New PostScript banner pages. - - Added Windows BMP and Alias PIX image file support to the image - filter. - - The PNG reading coded didn't free all of its buffers. - - Added Digest authentication support to the client and server - code. - - Added Solaris options to System V commands. - - Now support the output-bin job template attribute. - - Now log the job-billing attribute in the page_log file, and - keep track of the total number of pages in the - job-media-sheets-completed attribute. - - The penwidth option is now in micrometers to support more - accurate width specification. - - The image filters now support interlaced and transparent PNG - files. - - Didn't handle Keep-Alive for HTTP/1.0 clients. - - The BrowsePoll support didn't handle when BrowseInterval - was set to 0 (now uses 30 seconds if BrowseInterval is 0) - - The DeskJet driver now supports 600 DPI color for printers - that support it. - - New lpinfo and lpmove commands. - - The lpq command now supports the Digital UNIX output format. - - The LPD mini-daemon now supports all required LPD operations. - - Implemented timeouts for multi-file documents. - - New cupsPrintFiles() function in the CUPS API library to - print multiple files using create-job and send-document - requests (1 job ID for multiple files) - - The lp command now sends multiple files as a single job, - matching the behavior of the System V command. - - The "cancel -a" command now purges job history files. - - -CHANGES IN CUPS v1.1b3 - - - Documentation updates. - - The startup script redirected stderr before stdout, - which caused problems with some versions of Bourne - shell and Bash. - - Fixed a bug in the scheduler's PPD language reading - code. - - Fixed a bug in the scheduler's check for the - manufacturer in the PPD. - - The pstoraster filter didn't allow some input and - output attributes to be set. - - Added banner page support. - - Added missing PAM configuration file. - - Configuration script fixes for Linux and *BSD. - - The log file code was using the wrong sign for the - timezone offset. - - The default printcap file is now empty (no printcap - file is generated). - - The scheduler did not start jobs destined for remote - printers when they became available. - - The scheduler now sends jobs to remote printers - immediately. (when sending jobs to a class, the remote - printer is only used when it becomes available) - - The scheduler now supports printing of banner pages - via the job-sheets attribute (banner files go in - /usr/share/cups/banners) - - The cupsd process now forks itself into the background - (override with -f) - - Added several *BSD enhancements. - - Added UNSUPPORTED libtool option to configuration - script to allow the use of libtool. Note that this is - UNSUPPORTED by us, but added by request of the *BSD - folks. - - The parallel, serial, and usb backends now retry the - opening of their ports. This allows multiple print - queues to be associated with a single physical port, - and will allow CUPS to support several types of - parallel port auto-switches in the near future. - - Set-Job-Attributes now supports adding, changing, and - deleting job template attributes, and no longer allows - job-printer-uri to be set (see CUPS-Move-Job) - - Added CUPS-Move-Job operation to support moving of jobs. - - The CGI template functionality now supports multiple - languages (still only have templates for English) - - The CUPS-Get-Printers and CUPS-Get-Classes operations - now support filtering as defined in the IDD. - - The Get-Jobs, CUPS-Get-Printers, and CUPS-Get-Classes - operations no longer limit themselves to 1000 jobs, - printers, or classes (believe it or not, this is - needed for some sites) - - The web interfaces now support language-specific - templates. - - The web admin interface now supports class management. - - The web admin interface now shows a list of - manufacturers before selecting the PPD/driver for a - specific printer. - - The web admin interface now supports configuration of - the default printer options in the PPD file. - - The web interface now uses printer/class - authentication for the test page instead of admin - authentication. - - Updated the RPM spec file for the current release. - - Updated language support for Windows code pages. - - 8-bit character set files can now use multiple fonts - (needed for Arabic, Greek, Hebrew, etc.) - - Added basic right-to-left text support in the text - filter. - - The POSIX locale now uses ISO-8859-1 instead of - US-ASCII. - - Fixed PDF printing problems. - - Fixed PostScript RIP page device dictionary elements - that weren't getting passed in cups_get_params(). - - Added a new "contains" rule for the magic file typing. - - The "printable" rule now accepts characters from 128 to 255 - (needed for Microsoft character sets) - - Added support for ~/.cupsrc as well as /etc/cups/client.conf - so that the default server can be configured on a per-user - basis without environment variables. - - Added LPD mini-daemon to support incoming LPD jobs. - - -CHANGES IN CUPS v1.1b2 - - - Documentation updates. - - The lp command didn't always load the user-defined - destinations, preventing it from seeing the default - printer. - - Many configure script and makefile fixes. - - The Microsoft code page files were missing from the - distribution. - - Added a workaround for the HP IPP client (which is sending - an invalid printer-uri in requests) - - Fixed the encoding of text-with-language and name-with-language - to match the IPP spec. - - Added support for unknown value tags in the IPP routines - (previously they would be ignored) - - Integrated GNU GhostScript 5.50 into the pstoraster filter. - - Client hostname resolution was broken on little-endian - machines. - - Now look at client.conf file for client's default server - and printer. - - The cupsServer() function did not close the client.conf file - if it contained a ServerName directive. - - Added BrowseAllow, BrowseDeny, BrowseOrder, BrowsePoll, and - BrowseRelay directives. - - BrowseInterval 0 disables advertising of local printers, but - still receives information on remote printers. - - New browse polling daemon (for polling servers on different - networks) - - New PPD cache file for faster startup times with large numbers - of PPD files. - - The Host: field was incorrectly required for HTTP/1.0 clients. - - New set-job-attributes operation now supported. - - The mime_load_types() and mime_load_convs() functions did not - close their input files. - - -CHANGES IN CUPS v1.1b1 - - - NEW web-based administration interface. - - NEW EPSON printer drivers. - - NEW user-defined printers and options. - - NEW persistent jobs and job history - - NEW IPP/1.1 support - - NEW template-based web interfaces. - - NEW CUPS-get-devices and CUPS-get-ppds operations. - - NEW support for create-job and send-file operations. - - NEW certificate-based authentication for local - administration. - - NEW USB backend. - - The lpr command now produces human-readable error messages. - - The lpq command now produces BSD standard format output - instead of OSF/1 output. This should resolve the SAMBA - print queue problems that have been reported. - - The IPP backend did not always detect when the "raw" option - was being used. - - The "lpstat -p" command would stop after the first active - printer. - - The "lpstat -v" command would stop before the first remote - printer. diff --git a/CHANGES-1.2.txt b/CHANGES-1.2.txt deleted file mode 100644 index 7b0b1f2..0000000 --- a/CHANGES-1.2.txt +++ /dev/null @@ -1,1261 +0,0 @@ -CHANGES-1.2.txt ---------------- - -CHANGES IN CUPS V1.2.12 - - - The PHP cups_print_file() function crashed if the options - array contained non-string option values (STR #2430) - - The image/tiff file matching rule incorrectly identified - some text files as TIFF files (STR #2431) - - The filter(7) man page incorrectly documented the - "PAGE: total #-pages" message (STR #2427) - - PCL text files were mis-identified as HP-GL/2 and - caused the HP-GL/2 filter to hang (STR #2423) - - When printing to a queue with user ACLs, the scheduler - incorrectly returned a quota error instead of a "not - allowed to print" error (STR #2409) - - cupsaddsmb could get in a loop if no printer drivers - were installed (STR #2407) - - cupsRasterReadHeader() did not byte-swap the header - properly when compiled with certain versions of GCC. - - The IPP backend did not send the document-format - attribute for filtered jobs (STR #2411) - - Some PPD files could cause a crash in ppdOpen2 (STR - #2408) - - The web admin interface incorrectly handled the "share - printers" and "show remote printers" settings (STR - #2393) - - The scheduler's log messages about AuthClass and - AuthGroupName advised using a replacement directive but - had the wrong syntax (STR #2400) - - Updated the PostScript/PJL and HP-GL/2 MIME rules to - look in the first 4k of the file, not just the first 1k - (STR #2386) - - Updated the Italian localization (STR #2382) - - -CHANGES IN CUPS V1.2.11 - - - Fixed the "relaying from" log message (STR #2376) - - Updated the launchd support on Mac OS X to better - support reconfiguration. - - "make distclean" didn't remove all generated files - (STR #2366) - - Fixed a bug in the advertisement of classes (STR - #2373) - - The IPP backend now stays running until the job is - actually printed by the remote server; previously - it would stop monitoring the job if it was held or - temporarily stopped (STR #2352) - - PDF files were not always printed using the correct - orientation (STR #2348) - - The scheduler could crash if you specified a bad file: - URI for a printer (STR #2351) - - The Renew-Subscription operation now returns the - notify-lease-duration value that was used (STR #2346) - - The IPP backend sent job options to IPP printers, - however some printers tried to override the options - embedded in the PS/PCL stream with those job options - (STR #2349) - - ppdLocalize() now also tries a country-specific - localization for when localizing to a generic locale - name. - - The cupstestppd program now allows for partial - localizations to reduce the size of universal PPD - files. - - Chinese PPD files were incorrectly tagged with the - "cn" locale (should have been "zh") - - The backends now manage the printer-state-reasons - attribute more accurately (STR #2345) - - Java, PHP, Perl, and Python scripts did not work - properly (STR #2342) - - The scheduler would take forever to start if the - maximum number of file descriptors was set to - "unlimited" (STR #2329) - - The page-ranges option was incorrectly applied to the - banner pages (STR #2336) - - Fixed some GCC compile warnings (STR #2340) - - The DBUS notification code was broken for older - versions of DBUS (STR #2327) - - The IPv6 code did not compile on HP-UX 11.23 (STR - #2331) - - PPD constraints did not work properly with custom - options. - - Regular PPD options with the name "CustomFoo" did - not work. - - The USB backend did not work on NetBSD (STR #2324) - - The printer-state-reasons attribute was incorrectly - cleared after a job completed (STR #2323) - - The scheduler did not set the printer operation policy - on startup, only on soft reload (STR #2319) - - The AP_FIRSTPAGE_InputSlot option did not clear any - ManualFeed setting that was made, which caused problems - with some PPD files (STR #2318) - - cupsDoFileRequest() and cupsDoRequest() did not abort - when getting an error in the response (STR #2315) - - The scheduler did not schedule jobs properly to remote - or nested classes (STR #2317) - - Updated the mime.types and mime.convs headers to warn - that the files are overwritten when CUPS is installed. - Local changes should go in local.types or local.convs, - respectively (STR #2310) - - The scheduler could get in an infinite loop if a - printer in an implicit class disappeared (STR #2311) - - The pstops filter did not handle %%EndFeature comments - properly (STR #2306) - - Fixed a problem with the Polish web page printer icons - (STR #2305) - - ppdLocalize() now also localizes the cupsICCProfile - attributes. - - The scheduler still had a reference to the incorrect - "notify-recipient" attribute (STR #2307) - - The "make check" and "make test" subscription tests did - not set the locale (STR #2307) - - The "make check" and "make test" subscription tests - incorrectly used the notify-recipient attribute instead - of notify-recipient-uri (STR #2307) - - cupsRasterInterpretPPD() incorrectly limited the - cupsBorderlessScalingFactor when specified in the - job options. - - -CHANGES IN CUPS V1.2.10 - - - ppdLocalize() now supports localizing for Japanese - using the "jp" locale name used by the ppdmerge - program from the CUPS DDK 1.1.0 (STR #2301) - - _cupsAdminSetServerSettings() did not support changing - of top-level directives as designed. - - The init script path check was broken. - - CUPS incorrectly used the attribute "notify-recipient" - instead of "notify-recicpient-uri" in several places - (STR #2297) - - Fixed a configure script bug on MirBSD (STR #2294) - - The pdftops filter did not limit the amount of recursion - of page sets (STR #2293) - - Custom page sizes with fractional point sizes did not - work (STR #2296) - - The lpoptions command would crash when adding or removing - options on a system with no printers (STR #2295) - - -CHANGES IN CUPS V1.2.9 - - - The scheduler did not use the default job-sheets - (banners) for implicit classes (STR #2284) - - The scheduler could crash when listing complete jobs - that had been unloaded from memory (STR #2288) - - The French localization was doubled up (STR #2287) - - Build system fixes for several platforms (STR #2260, - STR #2275) - - The scheduler's openssl certificate generation code was - broken on some platforms (STR #2282) - - The scheduler's log rotation check for devices was - broken (STR #2278) - - The LPD mini-daemon did not handle the document-format - option correctly (STR #2266) - - The pdftops filter ignored the "match" size option in the - pdftops.conf file (STR #2285) - - cupstestppd now validates UTF-8 text strings in - globalized PPD files (STR #2283) - - The outputorder=reverse option did not work with all - printers (STR #2279) - - Classes containing other classes did not always work - (STR #2255) - - Printer location and description information was lost - if the corresponding string contained the "#" character - (STR #2254) - - cupsRemoveOption() did not work properly (STR #2264) - - The USB backend did not work with some USB to parallel - cables on Mac OS X. - - The test page did not print the rulers properly on - large media sizes (STR #2252) - - The text filter could crash when pretty printing certain - types of files (STR #2158) - - -CHANGES IN CUPS V1.2.8 - - - Documentation fixes (STR #2141, STR #2157) - - The HTTP upgrade redirection used by the scheduler did - not work with Internet Explorer (STR #2235) - - Members of a class with Unicode names did not appear - correctly in the web interface (STR #2154) - - Changing the "Save debugging information" setting in - the web interface no longer affects the other server - settings (STR #1993) - - The scheduler did not choose SSL certificates correctly - on Mac OS X (STR #2225) - - The scheduler could get in an infinite loop when - printing to a remote class (STR #2228) - - The jobs web page did not have separating space after - the number of pages column (STR #2230) - - Added French localization (STR #2221) - - Updated Spanish localization (STR #2223) - - Updated Japanese localization (STR #2216) - - cupsBorderlessScalingFacter was limited to a range of - 0.9 to 1.1, but some printers need larger values (STR - #2222) - - Landscape printing of PDF files did not always work - (STR #2149) - - Fixed slow USB printing on Minolta printers (STR #2104, - STR #2219) - - The ZPL label printer driver could produce stretched - output (PR #6448) - - The IPP backend now clears the printer-state-message - when there are no outstanding errors or warnings (STR - #2126) - - The CUPS Java scripting support did not work with - recent versions of Java due to the use of Sun's private - Base64 class (STR #2152) - - The scheduler did not pass HTTP GET form variables to - custom CGI programs (STR #2173) - - The lpoptions command now displays the reason why a PPD - file cannot be found (STR #2184) - - The scheduler did not accept "none" as a browse - protocol name (STR #2200) - - The scheduler still loaded the remote printer cache, - even when browsing was disabled (STR #2198) - - The SNMP backend now shows OfficeJet printers with the - "HP" manufacturer prefix (STR #2151) - - Web interface HTML cleanup (STR #2153) - - The parallel backend consumed 100% CPU on FreeBSD due - to an apparently common parallel port driver bug (STR - #2161) - - ippReadIO() incorrectly returned IPP_IDLE when the - initial IPP message header could not be read (STR - #2179) - - cupsRasterInterpretPPD() did not support custom options - (STR #1960) - - Collated output produced by the PostScript filter could - lose some options (STR #2137) - - job-hold-until with time values for the next day would - be held for 60 days (STR #2144) - - Some types of Sun raster files did not print correctly - (STR #2107) - - Raw PBM files did not print correctly (STR #2106) - - The SNMP backend no longer uses IPP with HP printers, - as some recent firmware versions appear to not work - (STR #2055) - - cupsMarkOptions() did not handle the - multiple-document-handling option (STR #2135) - - lpstat did not show the local job ID of active printers - (STR #2125) - - The backends incorrectly used STATUS: - media-tray-empty-error messages for out-of-paper - conditions (STR #2123, STR #2124) - - cupsGetPPD2() returned the wrong error when the PPD - file did not exist (STR #2122) - - cupsDoAuthentication() did not translate the password - prompt (STR #2121) - - httpGetLength2() did not handle error messages without - content correctly (STR #2133) - - Added support for 32/64-bit libraries on HP-UX Itanium - systems (STR #2115) - - Fixed a configure script problem with the 32/64-bit - library support (STR #2114) - - The PostScript filter did not properly output document - setup commands for reversed output (STR #2111) - - The scheduler did not parse IPv6 netmasks properly (STR - #2117) - - -CHANGES IN CUPS V1.2.7 - - - Documentation updates (STR #2089) - - Added an Italian translation (STR #2105) - - The PostScript filter now rotates the bounding box - values as needed (STR #2079) - - The scheduler no longer loads the remote printer cache - when browsing is disabled (STR #2084) - - The scheduler no longer writes a new launchd - configuration file if it doesn't have to (STR #2083) - - Updated the USB and PAP backends for Mac OS X (STR - #2086) - - The scheduler now picks up on changes to IPv6 and DNS - configuration on Mac OS X (STR #2085) - - The lpstat program could still hang (STR #2098) - - Fixed an inefficiency in the SNMP IPP detection code - (STR #2100) - - The SSL negotiation code did not implement short - timeouts (STR #2091) - - -CHANGES IN CUPS V1.2.6 - - - The web interface was not localized on Mac OS X (STR - #2075) - - "lpc status" did not show the number of queued jobs for - disabled queues (STR #2069) - - The lpstat program could hang (STR #2073) - - The serial backend did not support the new USB serial - filenames on Linux (STR #2061) - - The parallel backend did not support bidirectional I/O - properly (STR #2056) - - The network backends now log the numeric address that - is being used (STR #2046) - - Fixed a compile error when using libpaper. - - Fixed a compile error when compiling on Solaris with - threading enabled (STR #2049, STR #2050) - - Missing printer-state-changed event for - printer-state-message updates (STR #2047) - - -CHANGES IN CUPS V1.2.5 - - - Documentation updates (STR #2038) - - The SNMP backend no longer uses IPP for Epson printers - (STR #2028) - - Updated the configure script for Tru64 UNIX 5.1 (STR - #2033) - - Tru64 5.1B's getaddrinfo() and getnameinfo() functions - leak file descriptors (STR #2034) - - cupsAddDest() didn't add the parent destination's - options and attributes. - - ppdConflicts() did not handle custom option - constraints. - - Raw printing of gzip'd files did not work (STR #2009) - - The scheduler no longer preserves default option - choices when the new PPD no longer provides the old - default choice (STR #1929) - - The Linux SCSI backend is now only built if the SCSI - development headers are installed. - - USB printing to Minolta printers did not work (STR - #2019) - - Windows clients could not monitor the queue status (STR - #2006) - - The scheduler didn't log the operation name in the - access_log file for Create-Job and Print-Job requests. - - The PostScript filter now separates collated copies - with any required JCL commands so that JCL-based - finishing options act on the individual copies and not - all of the copies as a single document. - - The PostScript filter now disables duplex printing when - printing a 1-page document. - - cups-lpd didn't pass the correct - job-originating-host-name value (STR #2023) - - Fixed some speling errors in the German message catalog - (STR #2012) - - cupstestppd did not catch PPD files with bad - UIConstraints values (STR #2016) - - The USB backend did not work with the current udev- - created printers if the first printer was disconnected - (STR #2017) - - Mirrored and rotated printing did not work with some - documents (STR #2004) - - 2-sided printing with banners did not work properly on - some printers (STR #2018) - - Updated the raw type rule to handle PJL within the - first 4k of a print job (STR #1969) - - Added an Estonian translation (STR #1957) - - Clarified the documentation for the cupsd.conf @LOCAL - and @IF(name) allow/deny functionality (STR #1992) - - The PostScript filters did not escape the Title and For - comments in the print job header (STR #1988) - - The scheduler would use 100% CPU if browsing was - disabled and the cupsd.conf file contained BrowsePoll - lines (STR #1994) - - The cupsDirRead() function did not work properly on - non-POSIX-compliant systems (STR #2001) - - The cupsFile functions didn't handle read/write errors - properly (STR #1996) - - The DBUS support now works with older versions of the - DBUS library. - - -CHANGES IN CUPS V1.2.4 - - - The --with-printcap configure option did not work (STR - #1984) - - The character set reported by cupsLangGet() did not - always reflect the default character set of a given - locale (STR #1983) - - Older Lexmark and Tektronix printers did not work with - IPP (STR #1980) - - Failsafe printing did not work (PR #6328) - - Some web interface redirects did not work (STR #1978) - - The web interface change settings button could - introduce a "Port 0" line in cupsd.conf if there was no - loopback connection available (STR #1979) - - The web interface change settings and edit - configuration file buttons would truncate the - cupsd.conf file (STR #1976) - - The German web interface used the wrong printer icon - images (STR #1973) - - The "All Documents" link in the on-line help was - missing a trailing slash (STR #1971) - - The Polish web interface translation used the wrong - URLs for the job history (STR #1963) - - The "reprint job" button did not work (STR #1956) - - The scheduler did not always report printer or job - events properly (STR #1955) - - The scheduler always stopped the queue on error, - regardless of the exit code, if the error policy was - set to "stop-printer" (STR #1959) - - ppdEmitJCL() included UTF-8 characters in the JCL job - name, which caused problems on some printers (STR - #1959) - - Fixed a buffering problem that cause high CPU usage - (STR #1968) - - The command-line applications did not convert - command-line strings to UTF-8 as needed (STR #1958) - - cupsDirRead() incorrectly aborted when reading a - symbolic link that pointed to a file/directory that did - not exist (STR #1953) - - The cupsInterpretRasterPPD() function did not handle - custom page sizes properly. - - -CHANGES IN CUPS V1.2.3 - - - The scheduler did not send job-state or - job-config-changed events when a job was held, - released, or changed (STR #1947) - - The scheduler now aborts if the configuration file and - directory checks fail (STR #1941) - - Fixed a problem with ippPort() not using the port - number that was set via the client.conf file or - CUPS_SERVER environment variable (STR #1945) - - HTTP headers were not buffered (STR #1899) - - Some IPP printers (HP) did not like UTF-8 job names - (STR #1837) - - The CUPS desktop icon is now localized for Polish (STR - #1920) - - Printer options were not always honored when printing - from Windows clients (STR #1839) - - The openssl command would lock up the scheduler when - generating an encryption certificate on some platforms - due to a lack of entropy for the random number - generator (STR #1876) - - The web admin page did not recognize that "Listen 631" - enabled remote access (STR #1908) - - The web admin page did not check whether changes were - made to the Basic Server Settings check boxes (STR - #1908) - - The IPP backend could generate N*N copies in certain - edge cases. - - The scheduler did not restore remote printers properly - when BrowseShortNames was enabled (STR #1893) - - Polling did not handle changes to the network - environment on Mac OS X (STR #1896) - - The "make test" subscription tests used invalid - notify-recipient-uri values (STR #1910) - - Printers could be left in an undefined state on system - sleep (STR #1905) - - The Berkeley and System V commands did not always use - the expected character set (STR #1915) - - Remote printing fixes (STR #1881) - - The cupstestppd utility did not validate translation - strings for custom options properly. - - Multi-language PPD files were not properly localized in - the web interface (STR #1913) - - The admin page's simple settings options did not check - for local domain socket or IPv6 addresses and did not - use "localhost" as the listen address. - - An empty BrowseProtocols, BrowseLocalProtocols, or - BrowseRemoteProtocols line would crash the scheduler - instead of disabling the corresponding browsing options. - - The scheduler now logs IPP operation status as debug - messages instead of info or error. - - cupsFileRewind() didn't clear the end-of-file state. - - cupstestppd didn't report the actual misspelling of the - 1284DeviceID attribute (STR #1849) - - BrowseRelay didn't work on Debian (STR #1887) - - configure --without-languages didn't work (STR #1879) - - Manually added remote printers did not work (STR #1881) - - The header was not installed. - - Updated the build files for Autoconf 2.60 (STR #1853) - - The scheduler incorrectly terminated the polling - processes after receiving a partial log line. - - The cups-lpd mini-daemon reported "No printer-state - attribute found" errors when reporting the queue status - (PR #6250, STR #1821) - - SNMP backend improvements (STR #1737, STR #1742, STR - #1790, STR #1835, STR #1880) - - The scheduler erroneously reported an error with the - CGI pipe (STR #1860) - - Fixed HP-UX compile problems (STR #1858, STR #1859) - - cupstestppd crashed with some PPD files (STR #1864) - - The and header files did not - work with C++. - - -CHANGES IN CUPS V1.2.2 - - - Documentation updates (STR #1765, STR #1780) - - CUPS didn't know about alternate character set names - for Asian text (STR #1819) - - The lpoptions -o and -r options did not work unless you - specified a printer. - - The lpoptions command incorrectly allowed users to set - printer attributes like printer-type (STR #1791) - - httpWait() did not flush the write buffer, causing "bad - request" errors when communicating with CUPS 1.1.x - servers (STR #1717) - - Polling did not sanitize the printer description, - location, or make and model strings like broadcasts - did. - - Polled printers did not show the server's default - job-sheets option value. - - The Samba password prompt was not properly localized - (STR #1814) - - Added a German translation (STR #1842) - - The scheduler now creates self-signed SSL certficates - automatically when using OpenSSL and CDSA for - encryption, just as for GNU TLS. - - The SNMP backend sporatically reported some printers as - "unknown" (STR #1774) - - The scheduler now forces BrowseTimeout to be at least - twice the BrowseInterval value and non-zero to avoid - common configuration errors. - - The scheduler incorrectly returned printer URIs of the - form "ipp://server/printers/classname" for classes (STR - #1813) - - Updated Japanese localization (STR #1805) - - The scheduler's SSL certificate/key directory was not - created on installation (STR #1788) - - Added a mailto.conf man page and help page (STR #1754) - - The parallel and USB backends no longer wait for the - printer to go on-line - this caused problems with - certain printers that don't follow with the IEEE-1284 - standard (STR #1738) - - The scheduler could crash on a reload when implicit - classes were present (STR #1828) - - The IPP backend incorrectly used the CUPS_ENCRYPTION - environment variable to determine the default - encryption mode when printing (STR #1820) - - USB printing did not work on Solaris (STR #1756) - - The scheduler sorted job priorities in the wrong order - (STR #1811) - - The scheduler did not automatically restart notifiers - that exited or crashed (STR #1793) - - IPv6 support did not work on NetBSD (STR #1834) - - The EPM packaging file did not work (STR #1804) - - The scheduler used up the CPU if BrowseRemoteProtocols - was empty (STR #1792) - - Custom page sizes did not work (STR #1787) - - The SNMP backend could crash on some systems when SNMP - logging was enabled (STR #1789) - - Browsing could produce some funny printer names when - ServerName was set to an IP address (STR #1799) - - Fixed the log message for BrowseRelay (STR #1798) - - Fixes to allow CUPS to compile on MirBSD (STR #1796) - - The scheduler incorrectly set the FINAL_CONTENT_TYPE - environment variable (STR #1795) - - The pdftops filter incorrectly embedded a "produced by" - comment, causing PDF printing not to work on some - operating systems (STR #1801) - - Sending raw jobs from a client system could cause the - client's scheduler to eventually crash (STR #1786) - - The scheduler now checks that the notifier exists prior - to accepting a new subscription request. - - The scheduler now reports the supported - notify-recipient schemes based on the contents of the - ServerBin/notifier directory. - - Event notifications did not include the - notify-sequence-number or other required attributes - (STR #1747) - - Allow/Deny addresses of the form "11.22.33.*" did not - work on Linux (STR #1769) - - cupsGetPPD() did not work if the scheduler was only - listening on a domain socket (STR #1766) - - The scheduler could crash advertising a class (STR - #1768) - - The scheduler could crash if the default printer was - deleted (STR #1776) - - Added a new default CUPS raster format (v3) which does - not compress the raster stream in order to provide the - same cupsRasterReadPixels() and cupsRasterWritePixels() - performance as CUPS 1.1.x. - - The cupsaddsmb man page listed the wrong files for the - CUPS driver. - - Some configure --with options did not work (STR #1746) - - "Allow @IF(name)" didn't work if "name" wasn't the - first network interface (STR #1758) - - The lpstat command did not use the correct character - set when reporting the date and time (STR #1751) - - The cupsaddsmb command and web interface did not update - the Windows PPD files properly, resulting in corrupt - PPD files for the Windows client to use (STR #1750) - - The cupsd.conf man page didn't describe the Listen - domain socket syntax (STR #1753) - - The scheduler no longer tries to support more than - FD_SETSIZE file descriptors. - - CDSA (encryption) support fixes for MacOS X. - - The lppasswd program needs to be setuid to root to - create and update the /etc/cups/passwd.md5 file (STR - #1735) - - 32/64-bit library installation was broken (STR #1741) - - The USB backend now reports a "no such device" error - when using the old filename-based USB URIs instead of - the "success" error. - - Increased the HTTP and IPP read timeouts to 10 seconds, - as 1 second was too short on congested networks (STR - #1719) - - The SNMP backend now uses the device description over - the printer-make-and-model attribute when the attribute - contains a generic name (STR #1728) - - Fixed another file descriptor leak when printing raw - files (STR #1736) - - Raw queues were not shared via LDAP (STR #1739) - - The pstops filter didn't always embed PageSetup - commands from the PPD file (STR #1740) - - "make install" didn't work if you disabled all of the - localizations. - - The scheduler didn't always choose the least costly - filter. - - Fixed parsing of IPv6 addresses in Allow, Deny, - BrowseAllow, BrowseDeny, and BrowseRelay directives - (STR #1713) - - Printers that were shared via LDAP did not get added to - the LDAP server properly (STR #1733) - - LDAP browsing would crash the scheduler if a required - value was missing (STR #1731) - - Special cases for the "localhost" hostname did not - work, causing printing to not work when the /etc/hosts - file did not contain a localhost entry (STR #1723) - - Updated the Spanish translation (STR #1720, STR #1770) - - Reverse-order page output was broken when N-up or - landscape orientations were used (STR #1725) - - The parallel, serial, socket, and USB backends needed - print data before they would report back-channel data, - causing problems with several new drivers (STR #1724) - - -CHANGES IN CUPS V1.2.1 - - - "lprm -h hostname" did not work (STR #1800) - - The web interface did not handle reloads properly for - MSIE (STR #1716) - - The configure script no longer adds linker rpath - options when they are unnecessary. - - The scheduler could crash printing a debug message on - Solaris (STR #1714) - - The --enable-32bit and --enable-64bit configure options - did not always work. - - The password prompt showed the domain socket address - instead of "localhost" for local authentication (STR - #1706) - - The web interface filtered the list of printers even if - the user wasn't logged in (STR #1700) - - The IPP backend did not work reliably with some Xerox - printers (STR #1704) - - Trailing banners were not added when printing a single - file (STR #1698) - - The web interface support programs crashed on Solaris - (STR #1699) - - cupstestppd incorrectly reported problems with - *1284DeviceID attributes (STR #1710) - - Browsing could get disabled after a restart (STR #1670) - - Custom page sizes were not parsed properly (STR #1709) - - The -U option wasn't supported by lpadmin (STR #1702) - - The -u option didn't work with lpadmin (STR #1703) - - The scheduler did not create non-blocking back-channel - pipes, which caused problems when the printer driver - did not read the back-channel data (STR #1705) - - The scheduler no longer uses chunking in responses to - clients - this caused problems with older versions of - CUPS like 1.1.17 (PR #6143) - - Automatic raw printing was broken (STR #1667) - - 6-up printing was broken (STR #1697) - - The pstops filter did not disable CTRL-D processing on - the printer/RIP. - - ppdOpen*() did not load custom options properly (STR - #1680) - - "Set Printer Options" in the web interface did not - update the DefaultImageableArea or - DefaultPaperDimension attributes in the PPD file (STR - #1689) - - Fixed compile errors (STR #1682, STR #1684, STR #1685, - STR #1690) - - The lpstat command displayed the wrong error message - for a missing destination (STR #1683) - - Revised and completed the Polish translation (STR - #1669) - - Stopped jobs did not show up in the list of active jobs - (STR #1676) - - The configure script did not use the GNU TLS - "libgnutls-config" script to find the proper compiler - and linker options. - - The imagetoraster filter did not correctly generate - several 1, 2, and 4-bit color modes. - - cupsRasterWritePixels() could lose track of the current - output row. - - cupsRasterReadPixels() did not automatically swap - 12/16-bit chunked pixel data. - - Moved the private _cups_raster_s structure out of the - public header. - - Updated the CUPS raster format specification to include - encoding rules and colorspace definitions. - - The Zebra PPD files had the wrong PostScript code for - the "default" option choices. - - The imagetoraster filter did not generate correct CIE - XYZ or Lab color data. - - The cups-config script did not work when invoked from a - source directory (STR #1673) - - The SNMP backend did not compile on systems that used - the getifaddrs emulation functions (STR #1668) - - -CHANGES IN CUPS V1.2.0 - - - Documentation updates (STR #1618, STR #1620, STR #1622, - STR #1637) - - Static file copy buffers reduced from 64k to 32k to - work around bogus MallocDebug library assumptions (STR - #1660) - - The scheduler did not decode the backend exit code - properly (STR #1648) - - The MacOS X USB backend did not report the 1284 device ID, - nor did it fix device IDs returned by HP printers. - - The scheduler started more slowly than 1.1.x with large - numbers of printers (STR #1653) - - cupsRasterInterpretPPD() didn't support the - cupsPreferredBitsPerColor attribute, and imagetoraster - didn't use the new API. - - The "make test" script did not create all of the necessary - subdirectories for testing (STR #1638) - - The scheduler did not prevent rotation of logs - redirected to /dev/null (STR #1651) - - "make test" did not include the SNMP backend in the - test environment (STR #1625) - - The EPM packaging files did not work (STR #1621) - - "Use Default Configuration" inserted a broken - configuration file (STR #1624) - - Redirects in the web interface did not always preserve - the encrypted status of a connection (STR #1603) - - Added the Apple "pap" backend. - - Added CUPS library to CUPS Image shared library - linkage to support Linux --as-needed linker option - (STR #1606) - - Fixed support for --enable-pie (STR #1609) - - The pdftops filter did not validate the length of the - encryption key (STR #1608) - - Updated the Polish localization. - - "Encryption Required" in the cupsd.conf file now only - requires encryption when the connection is not over the - loopback interface or domain socket. - - Printer names containing "+" were not quoted properly in - the web interface (STR #1600) - - The SNMP backend now reports the make and model in the - information string so that the auto-generated printer - name is more useful than just an IP address. - - -CHANGES IN CUPS V1.2rc3 - - - The cups-lpd program always did reverse lookups on the - client address, which could be a performance problem. - Added a "-n" option to disable lookups. - - When configured with SSL support, require encryption by - default when displaying the /admin location (STR #1592) - - The next job ID was not computed correctly if the job - cache file got out of sync with the spool directory - (STR #1582) - - The PNG image handling code used deprecated functions - from libpng (STR #1587) - - Added a Polish translation (STR #1584, STR #1586) - - More changes to the scheduler to improve battery life - on portable devices (STR #1583) - - Changed the default log level for status messages back - to "DEBUG" to be consistent with CUPS 1.1.x (STR #1579) - - The error string was not set properly when - cupsDoFileRequest() was given the name of a directory - (STR #1578) - - Fixed handling of job-hold-until (STR #1581) - - Added explicit notes to the cupsaddsmb man page - explaining that the driver filenames are case-sensitive - under UNIX and that they must be all lowercase (Windows - 2000) or all UPPERCASE (Windows 95/98/Me) to work (STR - #1568) - - The USB backend incorrectly split the manufacturer name - if it contained spaces (STR #1566) - - The scheduler would hang when listing PPD files for a - manufacturer whose name contained spaces (STR #1567) - - Added the SNMP backend for network printer discovery - (STR #1555) - - cupstestppd now fails PPD files with 1284DeviceId - instead of 1284DeviceID, and cups-driverd uses a - case-insensitive comparison when looking for it (STR - #1573) - - cupsDoFileRequest() and cupsDoRequest() now work - properly with non-blocking HTTP connections. - - Added Swedish translation (STR #1569) - - "make install" now installs the MIME files with world - read permissions (STR #1565) - - More CDSA encryption support fixes (STR #1563) - - Updated the default mime.types file to support printing - of files that do not have a locally-recognized MIME - media type to raw or System V queues. - - Updated the serial port detection code on Linux (STR - #1562) - - Added some more error checking to httpGetHostname() - (STR #1561) - - The title of some administration pages was not - localized (STR #1548) - - The edit-config.tmpl file was not generated or - installed for the Spanish or Japanese localizations - (STR #1547) - - The mimeDelete() function freed the types before the - filters, but the filters needed the type data (STR #1558) - - The scheduler didn't keep track of the status pipes - properly, leading to a bad select() for multi-file jobs - (STR #1559) - - The cupstestdsc program didn't validate the ordinal - page number value for %%Page: comments. - - -CHANGES IN CUPS V1.2rc2 - - - The scheduler was not always using the string pool, - causing random crashes. - - The lpmove and the web interface's Move Job button did - not work with stopped jobs (STR #1534) - - The PostScript filter did not handle the page-set - option properly with number-up printing (STR #1543) - - The scheduler now only warns about unsupported ACLs - once (STR #1532) - - The "fitplot" option did not work with output from - Mozilla (STR #1542) - - The imagetops filter did not work with Level 2 or 3 - printers (STR #1533) - - The scheduler now recognizes PostScript files with PJL - commands that do not include an ENTER LANGUAGE command. - - Added --with-printcap configure option. - - 64-bit SSL fixes for MacOS X. - - The scheduler didn't send some printer state change - events. - - The scheduler didn't send jobs to busy remote printers. - - Fixed some problems with the launchd support. - - Added new USB printer backend for MacOS X. - - The PostScript filter now handles files that start with - an incomplete PJL header (PR #6076) - - The web interface language selection code did not try - the generic language localization (STR #1531) - - The language cache, string pool, and transcoding caches - are now process global instead of per-thread to avoid - problems with GNOME and to allow for data sharing - between threads (STR #1530) - - Fixed a CUPS 1.1.x compatibility bug (STR #1528) - - The web interface redirection after certain printer - administration tasks was broken (STR #1516) - - Web interface authorization could get stuck (STR #1512) - - Localization updates (STR #1513, STR #1518, STR #1520) - - The pstops filter didn't work with some files (STR - #1523) - - "./configure --enable-static" didn't work (STR #1522) - - The scheduler was not using the configured default - Group (STR #1521) - - The web interface still did not show the localized time - and date for some locales and systems (STR #1509) - - httpAddrGetList() would crash on systems without - getaddrinfo(). - - Socket URIs without a trailing slash would cause the - port number to not be accepted (STR #1519) - - Local raw and System V printers were not advertised as - such for printer browsing (STR #1502) - - The RPM spec file incorrectly put duplicate copies of - the Japanese and Spanish web interface templates in the - main cups package (STR #1517) - - cupsSetDests() did not explicitly set the permissions - of the /etc/cups/lpoptions file (STR #1508) - - The lpq command crashed with the -h option (STR #1515) - - -CHANGES IN CUPS V1.2rc1 - - - Documentation updates (STR #1497, STR #1498) - - The scheduler now redirects browsers to https: URLs - when encryption is required. - - The scheduler would crash when printing with a banner - (STR #1500) - - cups-driverd did not use the LanguageEncoding attribute - in PPD files to convert the NickName to UTF-8 (STR - #1503) - - The lpadmin command could not set the - printer-error-policy attribute (STR #1504) - - The web interface did not show the time and date in the - correct format for the locale (STR #1505) - - CUPS no longer accepts print jobs if a printer does not - support the file format (STR #1501) - - Cleaned up the PostScript filter (pstops) so that it - properly supports %%IncludeFeature and page scaling - (STR #1453) - - Fixed the cupsFileRewind() and cupsFileSeek() functions - to work properly with uncompressed files. - - Added cupsFileGetLine(), cupsFileStderr(), - cupsFileStdin(), and cupsFileStdout() functions to the - CUPS library. - - Added a new cupstestdsc program to test the DSC - conformance of PostScript files. - - Added KDE/GNOME icons and a Manage Printers menu item. - - Added --enable-image and --enable-pdftops configure - options to control whether the image and PDF filters - are built and installed (default = yes for all - platforms but MacOS X) - - Fixed a minor memory leak in the PPD API. - - Fixed transcoding issues (STR #1493) - - The scheduler now enforces a minimum job cost of 100 - when doing FilterLimit checks. - - The scheduler would leak file descriptors when printing - to raw queues (STR #1491) - - The IPv6 support did not compile on Tru64 UNIX (STR - #1488) - - ppdOpen2() now converts the NickName and all UI text to - UTF-8 (STR #1475) - - The Set Allowed Users web page did not work (STR #1486) - - When the default policy was not set or set to a non- - existing policy, the scheduler did not set the default - policy name to "default" (STR #1484) - - The Zebra CPCL driver did not use the correct righthand - margin for the 4" wide label sizes. - - Fixed a problem with the parsing of fractional real - numbers in PPD files. - - Added Spanish localization files (STR #1480) - - Fixed localization of a few scheduler messages (STR - #1478) - - Fixed support for HEAD requests in the scheduler (STR - #1481) - - -CHANGES IN CUPS V1.2b2 - - - Updated the CUPS design description. - - Added --enable-32bit and --enable-64bit configure - options to allow building of separate 32/64-bit - libraries on systems that support both environments - (STR #1472) - - Various compiler warning fixes. - - Fixes for Solaris 10 builds against old GNU TLS and - LDAP libraries. - - Added a cupsArrayUserData() function to retrieve the - user data pointer for an array (useful for typing - arrays) - - The ppdEmitString() function did not compute the - required buffer size properly, leading to dropped - characters on the end of the printer commands in pstops - and imagetops (STR #1470) - - -CHANGES IN CUPS V1.2b1 - - - The serial backend now supports Equinox 8-port serial - hubs (STR #526) - - The IPP backend now supports a compression option to - compress print files as they are sent to the remote - server (STR #956) - - The CUPS browse protocol now supports passing of - default options and browse timeout values from the - server to the clients (STR #800) - - Implicit classes that timed out could cause the - scheduler to crash (STR #1439) - - Added DragonFly support in local device backends (STR - #1362) - - Added LDAP printer browsing support (STR #338) - - Added official support for printer maintenance commands - via the CUPS Command file format and hooks in the - printer-type and web interfaces (STR #932) - - The HP-GL/2 filter could get in an infinite loop trying - to convert HP-PCL files (STR #1415) - - CUPS now implements the HTTP/1.1 Expect header (STR - #1407) - - Options in PPD files are no longer automatically put in - an "Extra" group; rather, all options that are not - inside an Open/CloseGroup will be placed in the - "General" group (STR #1385) - - The scheduler now creates a job-uuid attribute that - uniquely identifies a job on a network (STR #1410) - - The init script now unsets the TMPDIR environment - variable to prevent user temporary directories from - being used by cupsd accidentally (STR #1424) - - Added support for launchd on MacOS X. - - Added support for notify_post on MacOS X. - - Added support for DBUS on Linux. - - All of the Berkeley (except for lpc) and System V - commands now support specification of user, host, and - port (STR #1028, STR #1029, STR #1087) - - The lpmove command now allows you to move all jobs for - a given queue (STR #56) - - The web interface now supports moving of a job or jobs - to another queue (STR #56) - - The web interface now provides searching, paging, and - changing of the sort/display order of classes, jobs, - and printers. - - cupsaddsmb now accepts a password on the command-line - and supports passwords with special characters (STR - #822, STR #1236) - - ppdLoad*() no longer tries to "fix" bad characters in - UI text (STR #1101) - - Printer names can now (reliably) contain Unicode - characters (STR #896) - - The lpstat command now shows the time and date of the - last printer state change instead of the hardcoded "Jan - 01 00:00" (STR #659) - - The scheduler now adds a job-actual-printer-uri - attribute to job objects when printing to a class (STR - #116) - - The scheduler now logs log file open errors to the - system log (STR #1289) - - The scheduler now sets the job-originating-user-name to - the authenticated username, if available (STR #1318) - - The scheduler now only updates the permissions of SSL - keys and certificates when they are under the - ServerRoot directory (STR #1324) - - The rastertodymo driver has been renamed to - rastertolabel (a symlink is installed so that existing - queues continue to work) and now also supports Zebra's - CPCL language. - - The lpstat command could show the wrong active job for - a printer (STR #1301) - - Fixed a potential crash problem in the scheduler when - aborting a CGI program (STR #1290) - - Added a "cancel all jobs" button to the class and - printer web interfaces (STR #1140) - - The add-printer web page now shows the - set-printer-options page after the printer has been - added (STR #690) - - The classes web page now provides links to each of the - member printers (STR #307) - - CUPS now handles HTTP request/response lines up to 32k - in length; this is mainly for better cookie support - (STR #1274) - - Added support for the Apache PassEnv and SetEnv - directives to cupsd.conf (STR #853) - - Added large file (64-bit) support (STR #541) - - Fixed a performance issue with the ippReadIO() - implementation (STR #1284) - - Fixed a performance issue with the scheduler's implicit - class implementation (STR #1283) - - The pdftops filter now adds the Title and Creator - fields from the PDF file to the PostScript document - comments section (STR #539, STR #830) - - Added a new cups_array_t and cupsArray*() functions to - the CUPS API to support sorted lists of data. - - Made the CUPS API library thread-safe (STR #1276) - - Added "media" option support for EFI EFMediaType option - (STR #902) - - Added write buffering to the HTTP code to improve - performance (STR #547) - - The scheduler now uses the attributes-natural-language - attribute to localize banner pages (STR #386) - - The scheduler now returns the address that was used to - connect to it (STR #1076) - - Fixed a problem with N-up printing and OpenOffice (STR - #576) - - Added support for the GCC position independent - executable options (STR #1209) - - Added new BrowseLocalProtocols and - BrowseRemoteProtocols directives to cupsd.conf, - allowing for different browse protocols for local and - remote printers (STR #877) - - PPD files can now contain strings up to 256k in length - (STR #1215) - - The pstops filter now supports the IncludeFeature DSC - comment (STR #1212) - - The pstops filter now disables the setpagedevice - procedure when doing N-up printing (STR #1161) - - The serial backend now supports "stop=1", "stop=2", - "parity=space", and "parity=mark" options (STR #1155) - - "make install" no longer overwrites an existing PAM - configuration file (STR #1064) - - The scheduler now closes all files on startup when run - in daemon mode (STR #1009) - - Added a new RGBW colorspace to the CUPS raster format - (STR #1071) - - The pdftops filter now sets the page size based on the - media box when not scaling the output (STR #912) - - The pdftops filter now supports masked images (STR - #281) - - The pdftops filter produced large output when rendering - PDF files containing lot of repeated images (STR #327) - - The pdftops filter now minimizes print processing of - PDF files when using the page-ranges option (STR #273) - - Updated pdftops filter to Xpdf 3.01. - - Added new cupsBackchannelRead() and - cupsBackchannelWrite() functions, as well as - backchannel support to the parallel, serial, socket, - and USB backends (STR #1252) - - The parallel and USB backends now treat a "no space - available" error as an out-of-paper condition (STR - #1225) - - The "lpc" command now supports the "status all" command - (STR #1004) - - ippReadIO() did not read collections properly (STR - #1249) - - The "make test" script now creates the test files in - "/tmp/cups-$USER" instead of "/tmp/$USER" (STR #981) - - All backends now abort on error when printing a job to - a class - this allows the next printer in the class to - print the job (STR #1084) - - The scheduler now verifies that a printer supports - Letter or A4 media sizes before setting them as the - initial default (STR #1250) - - The cupstestppd program now flags bad Resolution - options (STR #1269) - - The USB backend now retries printing when the printer - is disconnected or turned off (STR #1267) - - Added new httpGetHostname() function to CUPS API, and - use it instead of gethostname() so that the web - interface will work correctly on systems whose hostname - is not the FQDN (STR #1266) - - The scheduler now stops printers if the backend for the - queue is missing on startup (STR #1265) - - The configure script now supports "--disable-library" - to disable particular image file format support - libraries, even if they are available on the build - system (STR #1248) - - The IPP backend did not always report on the total - number of pages that were printed (STR #1251) - - The lpstat program could display garbage date and time - values for locales whose date format exceeded 31 - characters (STR #1263) - - The cupstestppd program would segfault when testing - certain broken PPD files (STR #1268) - - Dramatically reduced the overhead of implicit classes. - - Added new cupsDir*() functions to CUPS API. - - Printers can now be published individually for sharing. - - Fixed a bug in the scheduler's startup signalling code - which caused cupsd to send the SIGUSR1 signal to the - init process instead of the original parent process - (STR #1258) - - Added new on-line help CGI to web interface to provide - searchable help. - - Devices are now tracked dynamically, with each query - doing a new device scan. This eliminates a previous - startup delay caused by slow backends and allows new - printers to be seen without restarting the server, - however it limits the amount of device URI checking - that can be done (basically now the scheduler only - requires a URI with a method that is a listed backend) - - Added new printer auto-detection, server configuration, - and log file viewing to the administration web page. - - Added new "set allowed users" web interface to set the - list of allowed users for a printer or class. - - The scheduler, command-line, and web interfaces now - limit the list of printers and classes to those - accessible by a user. - - cupsMarkOptions() now handles more non-standard - duplexing options and choices (STR #915) - - cups-lpd now honors remote banner requests with the - "standard" banner whenever a printer does not have one - defined (STR #1220) - - The scheduler's denial-of-service checks did not work - properly with IPv6 addresses (STR #1134) - - The lp and lpr commands did not error out properly when - they were unable to write to a temporary file (STR - #1129) - - The pstops filter did not handle Adobe-specific - comments in Windows NT driver output (STR #1085) - - "lpstat -l -p" incorrectly reported the printer - interface (STR #936) - - The web interface now operates exclusively with the - UTF-8 encoding, and sends the appropriate character set - and header information to the web browser (STR #919, - STR #1007) - - Added a "set allowed users" interface to the web - interface so that you can set the list of allowed or - denied users/groups for a printer or class. - - Disallow the "#" character in printer names, since it - has special meaning in the shell, config files, and in - URIs (STR #917, STR #1202) - - Added a new application/x-csource MIME type, and - support for it to the texttops filter so that you can - pretty print plain text files without the C/C++ - keywords being highlighted. - - The pdftops filter did not compile with GCC 4.0 (STR - #1226) - - The texttops filter did not highlight preprocessor - directives followed by a tab properly. - - HP PJL output now uses both JOB DISPLAY and RDYMSG - commands to show the current job on the printer's - display (STR #1218) - - Local authentication certificates are now stored in - /var/run/cups/certs by default instead of - /etc/cups/certs (STR #1211) - - Backends now use "&" to separate options in device - URIs; "+" is still recognized but is deprecated (STR - #842) - - The USB backend no longer supports the usb:/dev/foo - format on systems that support device ID queries. - - Forced classification markings did not work when the - job-sheets parameters were "none,none". - - "lpstat -l -p" incorrectly showed all users as allowed, - even if the queue was restricted to certain users (STR - #801) - - The scheduler now automatically detects SSL/TLS clients - without using the SSLPort/SSLListen directives. - - The CUPS API and scheduler no longer support SSLv2- - encrypted connections. - - Updated the cupsaddsmb utility to correctly export the - CUPS driver for Windows. - - Fixed a signal-handling bug in httpRead() which - ultimately caused the server to print multiple copies - when it was busy (STR #1184) - - The cupsFile API now uses the O_APPEND option when - opening files in append mode (STR #990) - - The md5.h header and md5_* functions are now officially - private and have been renamed to avoid conflicts with - other implementations with the same name. - - The pdftops filter incorrectly embedded some Type1 - fonts (STR #1093) - - The scheduler didn't detect a closed connection in the - middle of an IPP request (STR #1153) - - The scheduler could block trying to read the job status - if there was input pending and the job was cancelled in - the same input cycle (STR #1157) - - The scheduler could crash when deleting a class due to - infinite recursion. - - Updated the Zebra ZPL label printer driver to use the - run-length encoding and support more options. - - Updated serial backend to scan for /dev/ttyC* as well - as /dev/ttyc* for Cyclades serial ports (STR #1049) - - The scheduler could hang reading the job status under - certain circumstances (STR #1068) - - The USB backend termination signal code was inverted - (STR #1046) - - Moved enable and disable commands to sbindir to be - consistent. - - Added new cupsRasterInterpretPPD() function for RIP - filters to setup the raster page header from - PostScript commands in a PPD file. - - The CUPS browsing protocol now offers a "delete" bit - to remove printers as soon as they are deleted on the - server or as soon as the server shuts down gracefully - (STR #793) - - The CUPS_SERVER and ServerName directives (client.conf - and ~/.cupsrc) may now contain names of the form - "server:port" and "/path/to/domain/socket". - - The "cancel -u user" command now works for ordinary - users (STR #751) - - Added test run support to "make test" target (STR #64) - - Added domain socket support (STR #656) - - Added BrowseLocalOptions directive to allow the - administrator to add printer URI options to the browse - URI, e.g. "encryption=required" (STR #732) - - Added BrowseRemoteOptions directive to allow the - administrator to add standard URI options to the - remote printer URI, e.g. "encryption=required" (STR - #732) - - Now put "-I.." compiler option in front of all others - to ensure that local CUPS headers are used before - installed headers (STR #437) - - New cupsLangPrintf() and cupsLangPuts() for localized - interfaces. - - Now support custom attributes and extended options in - PPD files. - - Now provide functions to save PPD files. - - New policy mechanism allows per-operation and - per-printer control over what users and groups are - allowed to do various IPP operations. - - New error policy mechanism to control how aborted - backend errors are handled by the scheduler - (abort-job, retry-job, requeue-job, stop-printer) - - Updated the printer test page with a better color - wheel and a separate grayscale ramp. - - A single backend process is now run to send all print - data for a job. - - Backends and filters can now send and receive - backchannel data over file descriptor 3. - - Updated the raster stream format to support more - user-defined attributes and to do compression of the - page data. diff --git a/CHANGES-1.3.txt b/CHANGES-1.3.txt deleted file mode 100644 index 9af534f..0000000 --- a/CHANGES-1.3.txt +++ /dev/null @@ -1,856 +0,0 @@ -CHANGES-1.3.txt ---------------- - -CHANGES IN CUPS V1.3.11 - - - The scheduler did not prevent nested classes (STR #3211) - - The scheduler did not reprint processing jobs that were moved to - another destination (STR #3222) - - The scheduler did not reset the current job file when stopping a - printer (STR #3226) - - The scheduler did not handle POSTs to custom CGIs properly (STR #3221) - - The pdftops filter did not print landscape PDF pages properly - (STR #2881) - - The scheduler did not handle partial header lines properly from CGI - programs (STR #3194) - - The web interface could hang on OpenBSD (STR #3176, STR #3196) - - The scheduler and cupsfilter utility did not handle rules starting - with a negation operator properly (STR #3160) - - The scheduler and cupsfilter utility would crash with certain MIME - .types rules (STR #3159) - - httpSetField wasn't bracketing IPv6 numeric addresses for the Host: - field (STR #3164) - - The ServerName, if specified, was not treated as a valid alias for the - local system (STR #3167) - - "make epm" did not work (STR #3166) - - "lpstat -h server" showed non-shared printers (STR #3147) - - "make check" did not work on Linux (STR #3161) - - -CHANGES IN CUPS V1.3.10 - - - Documentation fixes (STR #2994, STR #2995, STR #3008, STR #3056, - STR #3057) - - SECURITY: The scheduler now protects against DNS rebinding attacks - (STR #3118) - - SECURITY: Fixed TIFF integer overflow in image filters (STR #3031) - - The scheduler did not support the job-hold-until attribute with the - Restart-Job operation (STR #3130) - - SECURITY: The PNG image reading code did not validate the - image size properly, leading to a potential buffer overflow - (STR #2974) - - The rastertohp driver did not set the 1-sided printing mode when - needed (STR #3131) - - Now use a wrapper program instead of our fork of the Xpdf code to - support printing of PDF files. The new wrapper supports using Xpdf, - poppler, or Ghostscript to convert PDF files to PostScript (STR #3129) - - Long job names caused problems with some PJL printers (STR #3125) - - The lpq command did not work when showing all destinations (STR #3117) - - The scheduler used a codeset name of UTF8 which is not supported on - Solaris (STR #3113) - - cupsGetJobs() did not work with a NULL destination (STR #3107) - - Fixed a localization problem for option choices (incorrectly) named - "Custom" (STR #3106) - - The fallback OpenSSL random number seeding would not work (STR #3079) - - The scheduler might miss a child signal, causing high CPU usage. - - The scheduler did not enforce quotas after the job history was - unloaded (STR #3078) - - The job-k-limit, job-page-limit, and job-quota-period attributes - could not be set using the lpadmin command (STR #3077) - - httpSeparateURI() did not error out on URIs with a missing port - number after a colon. - - Fixed a Valgrind-detected initialization error when creating a - missing directory on startup. - - The scheduler did not always read all of the HTTP headers from a - CGI script/program. - - The scheduler did not always set the "air" property in Bonjour/DNS-SD - registrations. - - The scheduler incorrectly compared Mac OS X UUIDs for access - control, preventing access in certain configurations. - - The IPP backend incorrectly reset the required authentication - to Kerberos when authentication failed. - - The scheduler no longer looks up the local hostname by default; - turn on hostname lookups to restore the previous behavior. - - The scheduler did not always load MIME type rules correctly - (STR #3059) - - The test page did not format correctly on A4 paper (STR #3060) - - The web interface sometimes incorrectly redirected users to - 127.0.0.1 (STR #3022) - - cupsPrintFile*() did not send the document filename for single - file submissions (STR #3055) - - The scheduler did not update the member-names attribute when - removing the last printer from a class. - - The scheduler did not report PPD Products with parenthesis - in them properly (STR #3046) - - The wrong italic fonts were listed in the UTF-8 charset file - for the text filter. - - The backends did not return an OK status for the - CUPS_SC_CMD_GET_BIDI side-channel command (STR #3029) - - The scheduler did not purge jobs that were missing a - time-at-creation attribute, indicating a bad job control file - (STR #3030) - - The "-o job-hold-until=week-end" option did not work properly - (STR #3025) - - The Solaris USB printer device does not support select or poll - (STR #3028) - - The scheduler would crash if you exceeded the MaxSubscriptions - limit. - - The lp "-H immediate" option did not specify that the job - should not be held (STR #3013) - - The scheduler did not support the "Connection: close" - HTTP header (STR #3010) - - The mailto notifier didn't terminate messages properly - (STR #3011) - - Backends could spin trying to read back-channel data - (STR #3001) - - The HP-GL/2 filter was using the wrong default colors - (STR #2966) - - The scheduler incorrectly allowed Get-Jobs operations without a - printer-uri (STR #2996) - - The compression option was not being encoded properly - (STR #2997) - - Added a missing character map for JIS-X0213/ShiftJIS. - - The scheduler now rejects ATTR: messages with empty values. - - The scheduler could consume all CPU handling closed connections - (STR #2988) - - Fixed some configure script bugs with rc/xinetd directories - (STR #2970) - - The Epson sample driver PPDs contained errors (STR #2979) - - -CHANGES IN CUPS V1.3.9 - - - SECURITY: The HP-GL/2 filter did not range check pen numbers - (STR #2911) - - SECURITY: The SGI image file reader did not range check - 16-bit run lengths (STR #2918) - - SECURITY: The text filter did not range check cpi, lpi, or - column values (STR #2919) - - Documentation updates (STR #2904, STR #2944) - - The French web admin page was never updated (STR #2963) - - The IPP backend did not retry print jobs when the printer - reported itself as busy or unavailable (STR #2951) - - The "Set Allowed Users" web interface did not handle trailing - whitespace correctly (STR #2956) - - The PostScript filter did not work with Adobe applications - using custom page sizes (STR #2968) - - The Mac OS X USB backend did not work with some printers - that reported a bad 1284 device ID. - - The scheduler incorrectly resolved the client connection - address when HostNameLookups was set to Off (STR #2946) - - The IPP backend incorrectly stopped the local queue if - the remote server reported the "paused" state. - - The cupsGetDests() function did not catch all types of - request errors. - - The scheduler did not always log "job queued" messages - (STR #2943) - - The scheduler did not support destination filtering using - the printer-location attribute properly (STR #2945) - - The scheduler did not send the server-started, - server-restarted, or server-stopped events (STR #2927) - - The scheduler no longer enforces configuration file - permissions on symlinked files (STR #2937) - - CUPS now reinitializes the DNS resolver on failures - (STR #2920) - - The CUPS desktop menu item was broken (STR #2924) - - The PPD parser was too strict about missing keyword - values in "relaxed" mode. - - The PostScript filter incorrectly mirrored landscape - documents. - - The scheduler did not correctly update the - auth-info-required value(s) if the AuthType was Default. - - The scheduler required Kerberos authentication for - all operations on remote Kerberized printers instead - of just for the operations that needed it. - - The socket backend could wait indefinitely for back- - channel data with some devices. - - PJL panel messages were not reset correctly on older - printers (STR #2909) - - cupsfilter used the wrong default path (STR #2908) - - Fixed address matching for "BrowseAddress @IF(name)" - (STR #2910) - - Fixed compiles on AIX. - - Firefox 3 did not work with the CUPS web interface in SSL - mode (STR #2892) - - Custom options with multiple parameters were not emitted - correctly. - - Refined the cupstestppd utility. - - ppdEmit*() did not support custom JCL options (STR #2889) - - The cupstestppd utility incorrectly reported missing - "en" base translations (STR #2887) - - -CHANGES IN CUPS V1.3.8 - - - Documentation updates (STR #2785, STR #2861, STR #2862) - - The scheduler did not add the ending job sheet when the - job was released. - - The IPP backend did not relay marker-* attributes. - - The CUPS GNOME/KDE menu item was not localized for - Chinese (STR #2880) - - The CUPS GNOME/KDE menu item was not localized for - Japanese (STR #2876) - - The cupstestppd utility reported mixed line endings for - Mac OS and Windows PPD files (STR #2874) - - The pdftops filter did not print landscape orientation PDF - pages correctly on all printers (STR #2850) - - The scheduler did not handle expiring of implicit classes - or their members properly, leading to a configuration where - one of the members would have a short name (STR #2766) - - The scheduler and cupstestppd utilities did not support - cupsFilter and cupsPreFilter programs with spaces in their - names (STR #2866) - - Removed unused variables and assignments found by the - LLVM "clang" tool. - - Added NULL checks recommended by the LLVM "clang" tool. - - The scheduler would crash if you started a printer that - pointed to a backend that did not exist (STR #2865) - - The ppdLocalize functions incorrectly mapped all generic - locales to country-specific locales. - - The cups-driverd program did not support Simplified Chinese - or Traditional Chinese language version strings (STR #2851) - - Added an Indonesian translation (STR #2792) - - Fixed a timing issue in the backends that could cause data - corruption with the CUPS_SC_CMD_DRAIN_OUTPUT side-channel - command (STR #2858) - - The scheduler did not support "HostNameLookups" with all of - the boolean names (STR #2861) - - Fixed a compile problem with glibc 2.8 (STR #2860) - - The scheduler incorrectly filtered out queues with ACLs and - authentication. - - The PostScript filter did not support %%IncludeFeature lines - in the page setup section of each page (STR #2831) - - The scheduler did not generate printer-state events when the - default printer was changed (STR #2764) - - cupstestppd incorrectly reported a warning about the PPD format - version in some locales (STR #2854) - - cupsGetPPD() and friends incorrectly returned a PPD file for - a class with no printers. - - The member-uris values for local printers in a class returned - by the scheduler did not reflect the connected hostname or - port. - - The CUPS PHP extension was not thread-safe (STR #2828) - - The scheduler incorrectly added the document-format-default - attribute to the list of "common" printer attributes, which - over time would slow down the printing system (STR #2755, - STR #2836) - - The cups-deviced and cups-driverd helper programs did not set - the CFProcessPath environment variable on Mac OS X (STR #2837) - - "lpstat -p" could report the wrong job as printing (STR #2845) - - The scheduler would crash when some cupsd.conf directives - were missing values (STR #2849) - - The web interface "move jobs" operation redirected users to - the wrong URL (STR #2815) - - The Polish web interface translation contained errors - (STR #2815) - - The scheduler did not report PostScript printer PPDs with - filters as PostScript devices. - - The scheduler did not set the job document-format attribute - for jobs submitted using Create-Job and Send-Document. - - cupsFileTell() did not work for log files opened in append - mode (STR #2810) - - The scheduler did not set QUERY_STRING all of the time - for CGI scripts (STR #2781, STR #2816) - - The scheduler now returns an error for bad job-sheets - values (STR #2775) - - Authenticated remote printing did not work over domain - sockets (STR #2750) - - The scheduler incorrectly logged errors for print filters - when a job was canceled (STR #2806, #2808) - - The scheduler no longer allows multiple RSS subscriptions - with the same URI (STR #2789) - - The scheduler now supports Kerberized printing with - multiple server names (STR #2783) - - "Satisfy any" did not work in IPP policies (STR #2782) - - The CUPS imaging library would crash with very large - images - more than 16Mx16M pixels (STR #2805) - - The PNG image loading code would crash with large images - (STR #2790) - - The scheduler did not limit the total number of filters. - - The scheduler now ensures that the RSS directory has - the correct permissions. - - The RSS notifier did not quote the feed URL in the RSS - file it created (STR #2801) - - The web interface allowed the creation and cancellation - of RSS subscriptions without a username (STR #2774) - - Increased the default MaxCopies value on Mac OS X to - 9999 to match the limit imposed by the print dialog. - - The scheduler did not reject requests with an empty - Content-Length field (STR #2787) - - The scheduler did not log the current date and time and - did not escape special characters in request URIs when - logging bad requests to the access_log file (STR #2788) - - -CHANGES IN CUPS V1.3.7 - - - CVE-2008-0047: cgiCompileSearch buffer overflow (STR #2729) - - CVE-2008-1373: CUPS GIF image filter overflow (STR #2765) - - Updated the "make check" tests to do a more thorough - automated test. - - cups-driverd complained about missing directories (STR - #2777) - - cupsaddsmb would leave the Samba username and password on - disk if no Windows drivers were installed (STR #2779) - - The Linux USB backend used 100% CPU when a printer was - disconnected (STR #2769) - - The sample raster drivers did not properly handle SIGTERM - (STR #2770) - - The scheduler sent notify_post() messages too often on - Mac OS X. - - Kerberos access to the web interface did not work - (STR #2748) - - The scheduler did not support "AuthType Default" in IPP - policies (STR #2749) - - The scheduler did not support the "HideImplicitMembers" - directive as documented (STR #2760) - - "make check" didn't return a non-zero exit code on - error (STR #2758) - - The scheduler incorrectly logged AUTH_foo environment - variables in debug mode (STR #2751) - - The image filters inverted PBM files (STR #2746) - - cupsctl would crash if the scheduler was not running - (STR #2741) - - The scheduler could crash when printing using a port - monitor (STR #2742) - - The scheduler would crash if PAM was broken (STR #2734) - - The image filters did not work with some CMYK JPEG files - produced by Adobe applications (STR #2727) - - The Mac OS X USB backend did not work with printers that - did not report a make or model. - - The job-sheets option was not encoded properly (STR #2715) - - The scheduler incorrectly complained about missing LSB - PPD directories. - - -CHANGES IN CUPS V1.3.6 - - - Documentation updates (STR #2646, STR #2647, STR #2649) - - Fixed a problem with the web interface "Use Kerberos - Authentication" check box (STR #2703) - - The scheduler unconditionally overwrote the printer-state- - message with "process-name failed" when a filter or backend - failed, preventing a useful error message from being shown - to the user. - - Policies on CUPS-Move-Job didn't work as expected (STR - #2699) - - The configure script only supported D-BUS on Linux - (STR #2702) - - The scheduler did not support (STR #2701) - - The scheduler did not reset the job-hold-until attribute - after a job's hold time was reached. - - The scheduler did not support printer supply attributes - (STR #1307) - - The Kerberos credentials provided by some Windows KDCs - were still too large - now use a dynamic buffer to - support credentials up to 64k in size (STR #2695) - - Printing a test page from the web interface incorrectly - defaulted to the "guest" user (STR #2688) - - The cupsEncodeOptions2() function did not parse multiple- - value attribute values properly (STR #2690) - - The scheduler incorrectly sent printer-stopped events for - status updates from the print filters (STR #2680) - - The IPP backend could crash when handling printer errors - (STR #2667) - - Multi-file jobs did not print to remote CUPS servers - (STR #2673) - - The scheduler did not provide the Apple language ID to - job filters. - - Kerberos authentication did not work with the web - interface (STR #2606, STR #2669) - - The requesing-user-name-allowed and -denied functionality - did not work for Kerberos-authenticated usernames (STR - #2670) - - CUPS didn't compile on HP-UX 11i (STR #2679) - - cupsEncodeOptions2() did not handle option values like - "What's up, doc?" properly. - - Added lots of memory allocation checks (Fortify) - - The scheduler would crash if it was unable to add a job - file (Fortify) - - ppdOpen*() did not check all memory allocations (Coverity) - - ippReadIO() did not check all memory allocations (Coverity) - - The PostScript filter did not detect read errors (Coverity) - - The scheduler did not check for a missing job-sheets-completed - attribute when sending an event notification (Coverity) - - "Set Printer Options" might not work with raw queues (Coverity) - - cupsRasterInterpretPPD() could crash on certain PostScript - errors (Coverity) - - The USB backend did not check for back-channel support - properly on all systems (Coverity) - - Fixed memory leaks in the GIF and PNM image loading code - (Coverity) - - Removed some dead code in the CUPS API and scheduler (Coverity) - - Fixed two overflow bugs in the HP-GL/2 filter (Coverity) - - Fixed another ASN1 string parsing bug (STR #2665) - - The RSS notifier directory was not installed with the - correct permissions. - - The standard CUPS backends could use 100% CPU while waiting - for print data (STR #2664) - - Filename-based MIME rules did not work (STR #2659) - - The cups-polld program did not exit if the scheduler crashed - (STR #2640) - - The scheduler would crash if you tried to set the port-monitor - on a raw queue (STR #2639) - - The scheduler could crash if a polled remote printer was - converted to a class (STR #2656) - - The web interface and cupsctl did not correctly reflect - the "allow printing from the Internet" state (STR #2650) - - The scheduler incorrectly treated MIME types as case- - sensitive (STR #2657) - - The Java support classes did not send UTF-8 strings to - the scheduler (STR #2651) - - The CGI code did not handle interrupted POST requests - properly (STR #2652) - - The PostScript filter incorrectly handled number-up when - the number of pages was evenly divisible by the number-up - value. - - The PDF filter incorrectly filtered pages when page-ranges - and number-up were both specified (STR #2643) - - The IPP backend did not handle printing of pictwps files - to a non-Mac CUPS server properly. - - The scheduler did not detect network interface changes - on operating systems other than Mac OS X (STR #2631) - - The scheduler now logs the UNIX error message when it - is unable to create a request file such as a print job. - - Added support for --enable-pie on Mac OS X. - - -CHANGES IN CUPS V1.3.5 - - - The SNMP backend did not check for negative string - lengths (STR #2589) - - The scheduler incorrectly removed auth-info attributes, - potentially leading to a loss of all options for a job. - - The scheduler stopped sending CUPS browse packets on a - restart when using fixed addresses (STR #2618) - - Fixed PDF filter security issues (CVE-2007-4352 - CVE-2007-5392 CVE-2007-5393) - - Changing settings would always change the DefaultAuthType - and Allow lines (STR #2580) - - The scheduler would crash when submitting an undefined - format file from Samba with LogLevel debug2 (STR #2600) - - The scheduler did not use poll() when epoll() was not - supported by the running kernel (STR #2582) - - Fixed a compile problem with Heimdal Kerberos (STR #2592) - - The USB backend now retries connections to a printer - indefinitely rather than stopping the queue. - - Printers with untranslated JCL options were not exported - to Samba correctly (STR #2570) - - The USB backend did not work with some Minolta USB - printers (STR #2604) - - The strcasecmp() emulation code did not compile (STR - #2612) - - The scheduler would crash if a job was sent to an empty - class (STR #2605) - - The lpc command did not work in non-UTF-8 locales (STR - #2595) - - Subscriptions for printer-stopped events also received - other state changes (STR #2572) - - cupstestppd incorrectly reported translation errors for - the "en" locale. - - ppdOpen() did not handle custom options properly when the - Custom attribute appeared before the OpenUI for that - option. - - The scheduler could crash when deleting a printer or - listing old jobs. - - The Mac OS X USB backend did not allow for requeuing of - jobs submitted to a class. - - lpmove didn't accept a job ID by itself. - - The scheduler incorrectly removed job history information - for remote print jobs. - - The scheduler incorrectly sent the - "com.apple.printerListChanged" message for printer state - changes. - - The PostScript filter drew the page borders (when enabled) - outside the imageable area. - - The LPD and IPP backends did not default to the correct - port numbers when using alternate scheme names. - - The scheduler incorrectly deleted hardwired remote - printers on system sleep. - - The scheduler would abort if a bad browse protocol name - was listed in the cupsd.conf file. - - The online cupsd.conf help file incorrectly showed - "dns-sd" instead of "dnssd" for Bonjour sharing. - - The scheduler could crash changing the port-monitor value. - - The scheduler generated CoreFoundation errors when run as - a background process. - - When printing with number-up > 1, it was possible to get - an extra blank page. - - -CHANGES IN CUPS V1.3.4 - - - Documentation updates (STR #2560, STR #2563, STR #2569) - - CUPS now maps the "nb" locale to "no" on all platforms - (STR #2575) - - CUPS did not work with a Windows 2003 R2 KDC (STR #2568) - - ippReadIO() could read past the end of a buffer (STR - #2561) - - The scheduler would crash on shutdown if it was unable - to create a Kerberos context. - - Multiple AuthTypes in cupsd.conf did not work (STR - #2545) - - The snmp.conf file referenced the wrong man page (STR - #2564) - - The cupsaddsmb program didn't handle domain sockets - properly (STR #2556) - - The scheduler now validates device URIs when adding - printers. - - Updated httpSeparateURI() to support hostnames with - the backslash character. - - Updated the Japanese localization (STR #2546) - - The parallel backend now gets the current IEEE-1284 - device ID string on Linux (STR #2553) - - The IPP backend now checks the job status at - variable intervals (from 1 to 10 seconds) instead - of every 10 seconds for faster remote printing - (STR #2548) - - "lpr -p" and "lpr -l" did not work (STR #2544) - - Compilation failed when a previous version of CUPS - was installed and was included in the SSL include - path (STR #2538) - - The scheduler did not reject requests with charsets - other than US-ASCII or UTF-8, and the CUPS API - incorrectly passed the locale charset to the scheduler - instead of UTF-8 (STR #2537) - - cups-deviced did not filter out duplicate devices. - - The AppleTalk backend incorrectly added a scheme - listing when AppleTalk was disabled or no printers - were found. - - The PostScript filter generated N^2 copies when the - printer supported collated copies and user requested - reverse-order output. - - The scheduler did not reprint all of the files in a - job that was held. - - The scheduler did not update the printcap file after - removing stale remote queues. - - The cupsd.conf man page incorrectly referenced - "AuthType Kerberos" instead of "AuthType Negotiate". - - -CHANGES IN CUPS V1.3.3 - - - The scheduler did not use the attributes-natural-language - attribute when passing the LANG environment variable to - cups-deviced or cups-driverd. - - The scheduler did not use the printer-op-policy when - modifying classes or printers (STR #2525) - - The auth-info-required attribute was not always updated - for remote queues that required authentication. - - The German web interface localization contained errors - (STR #2523) - - The Swedish localization contained errors (STR #2522) - - -CHANGES IN CUPS V1.3.2 - - - The 1.3.1 release was incorrectly created from the - 1.4.x source tree (STR #2519) - - Added support for 32/64-bit libraries on HP-UX - (STR #2520) - - The scheduler incorrectly used portrait as the default - orientation (STR #2513) - - The scheduler no longer writes the printcap file for - every remote printer update (STR #2512) - - Remote raw printing with multiple copies did not work - (STR #2518) - - Updated the configure script to require at least autoconf - 2.60 (STR #2515) - - Some gzip'd PPD files were not read in their entirety - (STR #2510) - - -CHANGES IN CUPS V1.3.1 - - - Documentation updates. - - The USB backend on Mac OS X could hang if the driver and - printer did not match. - - Delegated Kerberos credentials were not working. - - "make distclean" incorrectly removed the edit-config.tmpl - files (STR #2508) - - Fix compile problem on HP-UX (STR #2501) - - The cupstestppd utility now tests for resolutions greater - than 99999 DPI to detect a missing "x" between the X and Y - resolutions. - - Fixed many problems in the various translations and added - a new "checkpo" utility to validate them. - - The cupstestppd utility now tests the custom page size code - for CUPS raster drivers. - - cupsLangDefault() did not attempt to return a language that - was supported by the calling application. - - If a remote printer stopped while a job was being sent, the - local queue would also get stopped and the job re-queued, - resulting in duplicate prints in some cases. - - A few Apple-specific job options needed to be omitted when - printing a banner page. - - The new peer credential support did not compile on FreeBSD - (STR #2495) - - Direct links to help files did not set the current section - so the table-of-contents was not shown. - - The configure script did not support --localedir=foo (STR #2488) - - The backends were not displaying their localized messages. - - CUPS-Authenticate-Job did not require Kerberos authentication - on queues protected by Kerberos. - - The Zebra ZPL driver did not work with Brady label printers - (STR #2487) - - Norwegian wasn't localized on Mac OS X. - - getnameinfo() returns an error on some systems when DNS is - not available, leading to numerous problems (STR #2486) - - The cupsfilter command did not work properly on Mac OS X. - - The scheduler makefile contained a typo (STR #2483) - - The TBCP and BCP port monitors did not handle the trailing - CTRL-D in some PostScript output properly. - - Fixed the localization instructions and German template for - the "Find New Printers" button (STR #2478) - - The web interface did not work with the Chinese localization - (STR #2477) - - The web interface home page did not work for languages that - were only partially localized (STR #2472) - - Updated the Spanish web interface localization (STR #2473) - - ppdLocalize() did not work for country-specific localizations. - - -CHANGES IN CUPS V1.3.0 - - - The scheduler did not handle out-of-file conditions - gracefully when accepting new connections, leading to - heavy CPU usage. - - The scheduler did not detect ServerBin misconfigurations - (STR #2470) - - "AuthType Default" did not work as expected when the - "DefaultAuthType foo" line appeared after it in the - cupsd.conf file. - - The on-line help did not describe many common printing - options (STR #1846) - - The IPP backend did not return the "auth required" status - when printing to a Kerberos-protected queue. - - The scheduler was not looking in the correct directories - for LSB PPD files (STR #2464) - - Changed references to ESP Ghostscript to GPL Ghostscript - (STR #2463) - - The PostScript filter did not cleanly terminate when - the job was canceled or stopped. - - Fixed generation of Kerberos credentials for remote - printing. Note that this requires a recent version of - MIT Kerberos with a working krb5_cc_new_unique() - function or Heimdal Kerberos. - - Added Portuguese and updated Italian message catalogs. - - -CHANGES IN CUPS V1.3rc2 - - - Added more range checking to the pdftops filter. - - The scheduler would crash if a remote IPP queue was stopped - (STR #2460) - - The scheduler did not allow "DefaultAuthType None". - - -CHANGES IN CUPS V1.3rc1 - - - Updated the German localization (STR #2443) - - cupsAdminGetServerSettings() did not handle properly. - - When lprm and cancel are run with no job ID, they now will - cancel the first stopped job if no pending or processing - jobs are left in the queue. - - The scheduler now logs successful print jobs, filter - failures, and the job file types at the default log - level (STR #2458) - - The scheduler now logs the usernames it is using for - authorization at LogLevel debug instead of debug2 (STR #2448) - - Added Intellitech Intellibar and Zebra CPCL PPDs to the list - of installed PPDs. - - Added 6" and 8" wide label sizes for the Zebra ZPL Label - Printer driver (STR #2442) - - The cupsaddsmb program and web interface now support - exporting of 64-bit Windows drivers, when available - (STR #2439) - - Moving a job that was printing did not stop the job on the - original printer (STR #2262) - - The cups-lpd mini-daemon did not work on Mac OS X server. - - Added httpGetAuthString() and httpSetAuthString() APIs to get - and set the current (cached) authorization string to use for - HTTP requests. - - Updated the default cupsd.conf policy to list the - "administrative" operations separately from the "printer - control" operations so that it is easier to define a - group of users that are "printer operators". - - The web interface now pulls the default cupsd.conf file - from cupsd.conf.default in the CUPS config directory. - - Added a help file for using Kerberos with CUPS. - - The scheduler now strips the "@KDC" portion of Kerberos - usernames since those usernames typically do not appear in - the group membership lists used by CUPS. - - cupsMarkOptions() could (incorrectly) leave multiple option - choices marked. - - Backends could (incorrectly) run as root during discovery - (STR #2454) - - Avahi is now supported for DNS-SD (Bonjour) printer sharing - (STR #2455) - - The default cupsd.conf file had typos and old operation names - (STR #2450) - - The scheduler now erases authentication cache files using the - 7-pass US DoD algorithm. - - Delegated Kerberos credentials (proxy authentication) did not - work. - - The filter makefile did not optimize the libcupsimage.2.dylib - with a sectorder file. - - The IPP backend incorrectly wrote an empty printer message - when processing the "none" state reason. - - The USB backend could deadlock on Mac OS X while performing - a side-channel command. - - The scheduler did not prevent remote queues from being - shared/published. - - The scheduler did not remove the temporary request file on - authentication errors. - - ppdLocalizeIPPReason() did not handle "scheme:" schemes or - "file" URLs. - - ppdLocalizeIPPReason() was not exported on Mac OS X. - - -CHANGES IN CUPS V1.3b1 - - - Copyright updates - CUPS is now owned by Apple Inc. - - Documentation updates (STR #1775, STR #2027, STR #2130, - STR #2131, STR #2263, STR #2356, STR #2397) - - Added new cupsfilter utility (STR #1734) - - Added new job-printer-state-message and - job-printer-state-reasons attributes to jobs (STR #2418) - - Added LDAP+SSL support (STR #1967) - - CUPS now supports authentication via peer credentials - over domain sockets (STR #2242, STR #2277) - - The CUPS sample driver PPDs are now generated by the PPD - compiler and include all of the localized languages by - default (STR #2164) - - You can now specify "AuthType Default" in the cupsd.conf - file to use the default authentication defined by the - DefaultAuthType directive. - - The SNMP backend no longer adds a default Address line - when none is specified in the snmp.conf file; this allows - the backend to be easily disabled as needed (STR #2434) - - Added a new cupsctl command for doing basic changes to - the cupsd.conf file (STR #1777) - - Added a new ppdLocalizeIPPReason() function to get the - localized text/URI for a given IPP reason keyword for a - driver. - - Removed the deskjet2.ppd driver, as it only worked with - a very small subset of HP DeskJet printers and was - confusing to users. The rastertohp driver still - supports the deskjet2.ppd options for existing queues. - - The scheduler did not add a trailing banner page if a - client did not specify the last document in a job (STR - #1711) - - The scheduler did not report Bonjour shared printers as - remote printers (STR #2384) - - Added new -R and -W options to the cupstestppd program - for greater control over the testing of PPDs. - - Added a new cupsGetServerPPD() function for getting - an available PPD from the server (STR #2334) - - Added a new cupsDoIORequest() function for reading - and writing files via IPP requests (STR #2334) - - Added a new CUPS_GET_PPD operation for getting an - available PPD file on the server (STR #2334) - - CUPS_GET_PPDS now reports multiple ppd-product values - based on the PPD ModelName and Product strings (STR - #2334, STR #2383) - - CUPS_GET_PPDS now reports the PSVersion attributes - from a PPD file in the ppd-psversion attribute - (STR #2334) - - CUPS_GET_PPDS now reports the cupsModelNumber attribute - from a PPD file in the ppd-model-number attribute (STR - #2383) - - CUPS_GET_PPDS now reports a driver type string in the - ppd-type attribute based on the cupsFax and cupsFilter - attributes in a PPD file (STR #2383) - - Added a new printer attribute called "cups-version" - which reports the version of CUPS that is running - (STR #2240) - - backendRunLoop() now aborts immediately on SIGTERM - if no data has been written yet (STR #2103) - - Due to poor IPP support from the vendors, the SNMP - backend no longer tries IPP connections; instead, - it now uses a lookup file with fallback to port 9100 - (socket://address) and 515 (lpd://address) printing - (STR #2035, STR #2354) - - The scheduler now recreates the CUPS log directory as - needed (STR #2353) - - cupsLangDefault() now maps new-style Apple locale names - to the traditional ll_CC form (STR #2357) - - Add new cupsArrayNew2() API to support hashed lookups - of array elements (STR #2358) - - ppdConflicts() optimizations (STR #2358) - - The cupstestppd program now tests for existing filters, - icons, profiles, and dialog extensions (STR #2326) - - The web interface no longer lists new printers on the - main administration page. Instead, a new "List Available - Printers" button is provided that shows a separate page - with the list of printers. - - The web interface now supports setting the banner and - policy options on raw printers and classes (STR #2238) - - The socket backend now reads any pending back-channel - data before shutting down the socket (STR #2325) - - Added a new ErrorPolicy directive in the cupsd.conf - file (STR #1871) - - Printers that use JCL options are now exported to Samba - correctly (STR #1985) - - The IPP backend now relays printer-state-message values - from the server to the client (STR #2109) - - Added support for the PWG printer-alert and - printer-alert-description attributes (STR #2088) - - Added support for LPD "stream" mode (STR #2036) - - The scheduler now reports the PostScript product string - from PPD files in CUPS-Get-PPDs responses (STR #1900) - - Raw printing with queues pointing to the file pseudo- - device and multiple files and/or banners now works (STR - #1933) - - Added new public cupsAdminGetServerSettings() and - cupsAdminSetServerSettings() APIs. - - Added new "makebuttons" script in the "tools" directory - for creating web interface buttons (STR #2231) - - Added support for DNS-SD (aka "Bonjour") printer sharing - (STR #1171) - - Job operations (cancel, hold, release, etc.) from the - web interface now return back to the original page (STR - #2239) - - The classes or printers list is now shown after a - successful deletion from the web interface (STR #1999) - - The default configuration now allows browse packets from - any address (STR #2008) - - The web interface now provides an "allow printing from the - Internet" check box (STR #1897) - - The notify-events-default and - notify-lease-duration-default attributes can now be set - (STR #1671) - - Server-side default options are now sent to clients when - the "printer-defaults" attribute group is requested (STR - #1923) - - Added support for Linux "relro" linker option (STR #1614) - - CUPS now validates the number-up option value (STR #1329) - - The on-line help now provides better search capabilities - (STR #1701) - - The web interface "Add This Printer" button now allows you - to change the printer name, description, and location - (STR #1646) - - Added support for Mac OS X authorization services - (STR #2206) - - Added support for driver-specific pre-filters (STR #2108) - - Added a new side-channel API for drivers and backends - for basic device control and information queries (STR - #1898) - - The scheduler now uses poll(), epoll(), or /dev/kqueue - instead of select() when possible (STR #1261) - - Added new cupsArrayGetIndex() and cupsArrayGetInsert() - functions to get the current index and insertion - positions of an array. - - Added a new --with-max-copies configure option (STR - #2090) - - Added new cupsRemoveDest() and cupsSetDefaultDest() - functions. - - Added support for cupsPJLCharset attribute in PPD files - which specifies the character set that is used in PJL - strings (STR #1969) - - Moved the definition of the (private) _http_s structure - to http-private.h; code that directly accesses the - http_t members will no longer compile! - - Added support for setting the document-format-default - attribute on a per-printer basis. - - Added support for IntelliBar label printers. diff --git a/CHANGES-1.4.txt b/CHANGES-1.4.txt deleted file mode 100644 index 09326b2..0000000 --- a/CHANGES-1.4.txt +++ /dev/null @@ -1,843 +0,0 @@ -CHANGES-1.4.txt ---------------- - -CHANGES IN CUPS V1.4.8 - - - The scheduler would delete job data files when restarted (STR #3880) - - The network backends could crash if a printer returned a value of 0 - for the maximum capacity for a supply (STR #3875) - - -CHANGES IN CUPS V1.4.7 - - - Documentation changes (STR #3710, STR #3720, STR #3745, STR #3750, - STR #3757, STR #3758, STR #3782, STR #3826, STR #3829, STR #3837) - - Web interface fixes (STR #3412, STR #3345, STR #3455, STR #3707, - STR #3755, STR #3769, STR #3783) - - Configure script fixes (STR #3659, STR #3691) - - Compilation fixes (STR #3718, STR #3771, STR #3774) - - The imageto* filters could crash with bad GIF files (STR #3867) - - The scheduler might leave old job data files in the spool directory - (STR #3795) - - CUPS did not work with locales using the ASCII character set - (STR #3832) - - httpAddrString() did not return a URI-style IPv6 numeric address - (STR #3814) - - Fixed an issue when reading compressed CUPS raster streams (STR #3812) - - Fixed an issue with PostScript printer auto-configuration (STR #3443) - - Fixed some compatibility issues with the libusb-based USB backend - (STR #3799) - - The network backends no longer try to collect SNMP supply and status - information for raw queues (STR #3809) - - The DBUS notifier did not report job state changes (STR #3805) - - The scheduler did not always report that the "normal" print-quality - value was supported (STR #3803) - - The gziptoany filter did not report the correct error if it was unable - to write the uncompressed document to the next filter or backend in - the chain (STR #3797) - - The Epson and Oki 9-pin drivers had a bad resolution option - (STR #3798) - - The scheduler did not always register the correct default ICC profile - on Mac OS X. - - The scheduler did not use the job owner when authorizing access for - the CUPS-Get-Document operation, preventing non-admins from accessing - their own jobs. - - CUPS did not work with some printers that incorrectly implemented the - HTTP/1.1 standard (STR #3778, STR #3791) - - The scheduler did not retry fax jobs properly. - - The scheduler now recognizes an empty cupsCommands PPD keyword as - meaning that CUPS commands are not supported for a printer (STR #3773) - - Fixed a crash bug in the scheduler when the application/octet-stream - MIME type was not defined (STR #3690) - - Polled printers were advertised more slowly than necessary (STR #3574) - - cupsResolveConflicts() did not handle resolving multiple UIConstraints - issues (STR #3705) - - The SetEnv and PassEnv directives had no effect (STR #3664) - - The libusb-based USB backend printed slowly to the LaserJet 1300 and - other printers (STR #3405) - - "lp" and "lpr" failed to print with Kerberos enabled (STR #3768) - - The cupsctl program now displays an error if you try to directly set - the Port or Listen directives (STR #3749) - - PPD files with "*JobPatchFile: bla" no longer fail to load in relaxed - conformance mode (STR #3747) - - The scheduler generated a bad notify-text string for printer state - change notifications (STR #3739) - - The scheduler incorrectly updated printers.conf when it really needed - to update classes.conf or remote.cache (STR #3726) - - Hardwired remote printers with options did not work (STR #3717) - - Accessing the CUPS web interface using a CNAME-based hostname would - sometimes fail due to redirection to the actual hostname (STR #3701) - - Subscription events had a misspelled attribute (STR #3693) - - "make check" failed if LC_MESSAGES was set (STR #3765) - - Fixed the configure script to always look for the pkg-config script - (STR #3761) - - The scheduler now only looks up interface hostnames if HostNameLookups - are enabled (STR #3737) - - Fixed a compilation problem on DragonFly BSD (STR #3738) - - The default PageLogFormat value had the username and job ID swapped - from CUPS 1.3.x (STR #3727) - - The scheduler could crash if a browsed printer times out while a job - is printing (STR #3754) - - The scheduler incorrectly mapped custom page sizes to standard sizes - (STR #3764) - - cupsfilter and pstops did not map IPP attributes to PPD options due to - a change in cupsMarkOptions (STR #3756) - - The scheduler did not always show the most recent status message from - the print filters (STR #3731) - - The PostScript filter did not apply the mirror and number-up options - properly, leading to offset and clipped output (STR #3732) - - The network backends always reported "low toner" or "out of toner" - states, even for inkjet printers (STR #3733) - - -CHANGES IN CUPS V1.4.6 - - - Fixed a "make check" issue on Solaris (STR #3729) - - Regression: The pstops filter did not support landscape printing of - PostScript files (STR #3722) - - The scheduler killed retried (fax) jobs after restarting them - (STR #3697) - - The cupsAdminSetServerSettings() function disabled sharing when - debug logging was enabled (STR #3712) - - -CHANGES IN CUPS V1.4.5 - - - Documentation fixes (STR #3542, STR #3650) - - Localization fixes (STR #3635, STR #3636, STR #3647, STR #3666) - - Security: Fixed a memory corruption bug reported in CVE-2010-2941 - (STR #3648) - - The CUPS API incorrectly mapped the HTTP_UNAUTHORIZED status to the - IPP_NOT_AUTHORIZED status code, when IPP_NOT_AUTHENTICATED would be - the correct mapping (STR #3684) - - The scheduler would restart jobs while shutting down (STR #3679) - - Fixed a PPD loader bug that could cause a crash in cupsd (STR #3680) - - Improved the mapping of non-standard PPD and PWG names (STR #3671) - - The scheduler did not initialize Kerberos in all cases (STR #3662) - - cupsAdminSetServerSettings duplicated Listen and Order lines - (STR #3645) - - Added DeviceN colorspace support to the CUPS Raster format (STR #3419) - - ppdMarkDefaults() did not clear the marked field of the previous - choices (STR #3642) - - The serial backend would not allow a raw job to be canceled - (STR #3649) - - The socket backend could go into an infinite loop with certain - printers (STR #3622) - - Setting the PRINTER or LPDEST environment variables to "name/instance" - did not work (STR #3485) - - The scheduler did not handle the JobRetryLimit setting properly - (STR #3466) - - The lpstat command always showed a remote job ID of 0 for shared - printers (STR #3627) - - Increased the write timeout for the libusb-based USB backend to 5 - minutes (STR #3595) - - The libusb-base USB backend did not check whether the printer has a - serial number (STR #3590) - - The lpadmin command did not support setting of custom option values - (STR #3631) - - The lpadmin command did not support setting of the location or - description of a class (STR #3613) - - The cupsaddsmb command did not give up after too many failed attempts - (STR #3615) - - The CUPS library no longer uses certain problematic ctype macros that - change based on the locale's character set. - - PJL value substitution of more than 9 values was broken (STR #3621) - - Custom options with missing string values caused ppdEmit* to segfault - (STR #3620) - - Fixed an issue with the Italian version of the web interface - (STR #3624) - - Fixed the Solaris SMF configuration file for cups-lpd (STR #3611) - - The scheduler did not set the notify-subscribed-event attribute when - delivering printer-added or printer-modified events (STR #3608) - - The mailto notifier could get into an infinite loop (STR #3609) - - Date/time information was not shown in banner pages. - - Relational operators were broken in #if/#elif/#else/#endif expressions - for the PPD compiler. - - Moving a job via the web interface failed without asking for - authentication (STR #3559) - - The scheduler now clears the printer-state-reasons when the driver is - changed (STR #3570) - - The web interface did not allow a user to change the driver - (STR #3537, STR #3601) - - The scheduler was not setting the PATH_INFO environment variable when - needed (STR #3600) - - The scheduler incorrectly set the CUPSD_AUTH_TYPE environment - variable instead of AUTH_TYPE (STR #3599) - - Fixed a buffer overrun in the PPD compiler (STR #3594) - - Fixed some additional IPP job template attribute mapping issues in the - scheduler. - - -CHANGES IN CUPS V1.4.4 - - - Documentation updates (STR #3453, STR #3527, STR #3528, STR #3529) - - Security: The fix for CVE-2009-3553 was incomplete (STR #3490) - - Security: The texttops filter did not check the results of allocations - (STR #3516) - - Security: The web admin interface could disclose the contents of - memory (STR #3577) - - Security: CUPS could overwrite files as root in directories owned or - writable by non-root users (STR #3510) - - The cups-config utility did not return the correct linker options on - AIX (STR #3587) - - Fixed some IPP conformance issues with the scheduler's - ippget-event-life, operations-supported, output-bin, and sides - attributes (STR #3554) - - The OpenSSL interfaces have been made thread-safe and the GNU TLS - interface is explicitly forbidden when threading is enabled - (STR #3461) - - Fixed an IPP conformance issue with the scheduler's Send-Document - implementation (STR #3514) - - Added additional validation checks for the 1284 device ID (STR #3534) - - Fixed a problem with the RPM spec file (STR #3544) - - The lpstat command did not limit the job list to the specified - printers (STR #3541) - - The cupsfilter command did not set the RIP_MAX_CACHE environment - variable (STR #3531) - - Fixed support for media-col and page size variants (STR #3394) - - The PostScript filter did not support all media selection options for - the first page (STR #3525) - - The scheduler did not always remove job control files (STR #3425) - - The scheduler could crash on restart if classes were defined - (STR #3524) - - The scheduler no longer looks up network interface hostnames by - default on Mac OS X (STR #3523) - - ippWriteIO did not write collection (member) attributes properly in - all cases (STR #3521) - - The "cupsctl --remote-any" and corresponding web interface check box - (allow printing from the Internet) did not work reliably (STR #3520) - - The lpq and lpr commands would sometimes choose different default - printers (STR #3503) - - cupsDo*Request did not flush error text, leading to multiple issues - (STR #3325, STR #3519) - - cupsDoAuthentication did not cancel password authentication after 3 - failures (STR #3518) - - Fixed several LDAP browsing bugs (STR #3392) - - The Dymo driver did not support copies (STR #3457) - - The scheduler did not update the classes.conf file when deleting a - printer belonging to a class (STR #3505) - - The lppasswd command did not use localized password prompts - (STR #3492) - - The socket backend no longer waits for back-channel data on platforms - other than Mac OS X (STR #3495) - - The scheduler didn't send events when a printer started accepting or - rejecting jobs (STR #3480) - - The web interface now includes additional CSRF protection (STR #3498) - - -CHANGES IN CUPS V1.4.3 - - - SECURITY: The scheduler could try responding on a closed client - connection, leading to a crash (STR #3200) - - SECURITY: The lppasswd program allowed the localization files to be - overridden when running in setuid mode (STR #3482) - - Localization updates (STR #3352, STR #3409, STR #3422, STR #3452, - STR #3473, STR #3502) - - Documentation updates (STR #3451, STR #3504) - - The IPP backend now sets the printer-state-message to "Ready to - print." at the end of a successful job (STR #3460) - - The PPD compiler did not correctly add the manufacturer to the output - filename when using the "-m" option (STR #3469) - - The IPP backend did not handle authentication properly for the Get- - Printer-Attributes operation (STR 3458) - - Getting SNMP values larger than 127 bytes did not work. - - IPP conformance: Get-Jobs has a default value for requested-attributes - (STR #3383) - - cupsPrintFiles() did not report all errors (STR #3449) - - cupsAddDest() could read freed memory (STR #3448) - - The DBUS notifier did not build (STR #3447) - - The scheduler would crash when an active printer was deleted. - - The snmp backend did not work with some printers (STR #3413) - - The web interface did not show the conflicting values when setting - options (STR #3440) - - Setting options in the web interface did not always work (STR #3439) - - The scheduler did not use the Get-Job-Attributes policy for a printer - (STR #3431) - - The scheduler added two job-name attributes to each job object - (STR #3428) - - CSS files would not print (STR #3442) - - The scheduler did not clean out completed jobs when PreserveJobHistory - was turned off (STR #3425) - - The web interface did not show completed jobs for a printer - (STR #3436) - - Authenticated printing did not always work when printing directly to - a remote server (STR #3435) - - The USB backend did not work on Solaris (STR #3423) - - cupstestppd didn't catch problems with JobPatchFile definitions - (STR #3421) - - The socket backend could crash if a SNMP string had a negative length. - - Fixed some termination issues with the USB backend on Mac OS X. - - The side-channel APIs did not handle interrupts properly. - - The network backends incorrectly cleared the media-empty-warning - state. - - The web interface did not allow users to successfully add serial - printers (STR #3391) - - cupsTempFd() did not work in some situations (STR #3382) - - Some C API headers were missing C++ wrapper logic. - - The PPD compiler did not localize single-language PPD options properly - (STR #3386) - - Modifying a printer from the web interface sometimes caused the wrong - driver to be selected (STR #3418) - - The scheduler did not handle out-of-memory conditions properly when - loading a job (STR #3407) - - When adding printers from the web interface, the dynamic updates of - the device list made it hard to pick a device (STR #3406) - - Fixed a typo in the web interface admin page template (STR 3403) - - The web interface did not preserve the "printer is shared" state when - modifying a printer (STR #3390) - - The PPD compiler incorrectly inserted translations of empty strings - (STR #3411) - - The scheduler did not reset the SIGPIPE handler of child processes - (STR #3399) - - cupsGetNamedDest() incorrectly returned the default printer if the - named printer did not exist (STR #3397) - - Fixed a GNU TLS error handling bug (STR #3381) - - -CHANGES IN CUPS V1.4.2 - - - SECURITY: The CUPS web interface was vulnerable to several XSS and - HTTP header/body attacks via attribute injection (STR #3367, - STR #3401) - - Fixed localization errors (STR #3359, STR #3372, STR #3380, STR #3387) - - The documentation for classes.conf and printers.conf did not provide - the correct instructions for manual changes (STR #3351) - - The scheduler did not always rebuild printer cache files when the - driver was changed (STR #3356) - - The documentation makefile failed to install localizations when using - newer versions of Bash (STR #3360) - - The configure script did not use the --with-xinetd value for the - default LPD configuration path (STR #3347) - - The configure script incorrectly required glib for DBUS support - (STR #3346) - - The cupstestppd program incorrectly reported filters with bad - permisssions as missing (STR #3363) - - The cups.desktop file used the wrong locale names (STR #3358) - - cupsSideChannelRead() did not return an error for short reads. - - The installed PAM configuration file did not use the correct options - with the pam_unix2 module (STR #3313) - - The scheduler did not preserve default options that contained special - characters (STR #3340) - - The scheduler did not remove old pre-filters when updating a printer - driver (STR #3342) - - The HP/GL-2 filter did not check for early end-of-file (STR #3319) - - The USB backend did not compile on some platforms (STR #3332) - - cupsSideChannelSNMPWalk() could go into an infinite loop with broken - SNMP implementations. - - -CHANGES IN CUPS V1.4.1 - - - Documention fixes (STR #3296) - - SNMP supply levels and states were wrong for some printers. - - The IPP backend did not update the auth-info-required value. - - The libusb-based USB backend would hang at the end of the job - (STR #3315, STR #3318) - - DNS-SD registrations for raw queues had an empty "ty" key (STR #3299) - - The JPEG and BMP MIME type rules were broken (STR #3284) - - cupsGetNamedDest returned the default printer when the named - destination did not exist (STR #3285) - - The JobKillDelay was not triggered for canceled jobs (STR #3292) - - The PPD compiler could get in an infinite loop (STR #3293) - - The configure check for dns-sd.h was broken (STR #3297) - - The "Query Printer for Default Options" page did not go away if the - query job was held (STR #3302) - - Boolean options did not show up as selected in the web interface - (STR #3303) - - The scheduler did not cache or report driver information files - correctly, leading to a variety of issues (STR #3283, STR #3297, - STR #3305) - - cupsDoIORequest() did not abort on permanent errors (STR #3311) - - Modifying a class in the web interface did not work (STR #3312) - - BrowseLocalProtocols could be cleared when changing the sharing - setting (STR #3287) - - The scheduler could return an empty supported document format - (STR #3308) - - The PPD compiler generated invalid PPD files when the locale used - something other than "." for the decimal point (STR #3300) - - The IPP backend did not handle some non-comforming IPP printer - implementations (STR #3262) - - The scheduler leaked three file descriptors to each job filter - (STR #3263) - - The scheduler now uses a default CUPS-Get-Devices timeout of 15 - seconds (STR #3307) - - -CHANGES IN CUPS V1.4.0 - - - Localization updates (STR #3223, STR #3246, STR #3248, STR #3250) - - Documentation updates (STR #3225, STR #3230, STR #3242, STR #3260) - - The --with-pdftops configure option did not accept a full path to the - filter (STR #3278) - - The banner filter did not position the back side image correctly - (STR #3277) - - The dnssd backend could crash (STR #3272) - - The 1284 device ID sometimes contained trailing garbage (STR #3266) - - The USB backend returned different URIs for some printers than in - CUPS 1.3 (STR #3259) - - The scheduler did not do local job-hold-until processing for remote - queues (STR #3258) - - The scheduler did not try all possible SSL certificates on Mac OS X. - - The scheduler did not always remove a file descriptor when using the - kqueue interface (STR #3256) - - The scheduler did not protect against bad job control files in all - cases (STR #3253) - - The scheduler did not encode "+" in model names (STR #3254) - - The web interface didn't show the default options (STR #3244) - - The IPP and LPD backends needed print data before they would do an - SNMP query. - - Fixed a GNU TLS compatibility issue (STR #3231) - - Fixed a HTML error in the add and modify printer web interface - templates (STR #3229) - - The scheduler did not minimize the number of printer state events that - were generated by filter STATE: messages, which could lead to poor - performance. - - The USB backend on Mac OS X did not cleanly cancel a job. - - The network backends now set the connecting-to-device printer-state- - reasons value when looking up the address and copying the print data - for consistency. - - The scheduler now supports the com.apple.print.recoverable-warning - reason on all platforms. - - -CHANGES IN CUPS V1.4rc1 - - - The PPD compiler documentation was missing information on localization - (STR #3212) - - The IPP backend now reconnects after every request when talking to - printers that claim IPP support but only use HTTP/1.0. - - The PPD compiler crashed when both "Resolution" and "Group foo Option - Resolution" were specified in the .drv file. - - The PPD compiler's #if/#elif/#else/#endif did not work for undefined - variables (STR #3210) - - Static libraries could not be installed by a non-root user on systems - needing a ranlib program (STR #3209) - - The scheduler incorrectly always tried to copy Kerberos credentials - for print jobs. - - Updated the Spanish localization (STR #3204) - - The scheduler crashed when getting the default paper size from - libpaper (STR #3205, STR #3206) - - The PPD compiler now defines six variables: CUPS_VERSION, - CUPS_VERSION_MAJOR, CUPS_VERSION_MINOR, CUPS_VERSION_PATCH, - PLATFORM_NAME, and PLATFORM_ARCH (STR #3203) - - Fixed a whitespace skipping bug in cupsRasterInterpretPPD. - - The scheduler did not return HTTP 403 (Forbidden) for authenticated - users that were not authorized to do IPP operations (STR #3193) - - The scheduler did not report more than 8 Product strings from a PPD - file. Some PPD files have as many as 24. - - ppdOpen*() could crash if a keyword had no value string (something - that cupstestppd looks for...) - - cupsLangDefault() did not return the correct language on Mac OS X. - - The Mac OS X USB backend did not handle aborted or stalled pipe - conditions properly, which prevented drivers from ejecting partial - pages when a job was canceled or held. - - -CHANGES IN CUPS V1.4b3 - - - Documentation fixes (STR #3044, STR #3057, STR #3153, STR #3158, - STR #3173) - - Added complete localizations for German, Japanese, Polish, and - Russian and partial localizations for Chinese, Danish, Finnish, - French, Italian, Korean, Norwegian, Portuguese, and Swedish - (STR #3096, STR #3098, STR #3109, STR #3111, STR #3141) - - Updated the configure check for -fstack-protector (STR #3198) - - The network backends now correctly convert SNMP supply descriptions to - UTF-8 encoding as needed. - - The scheduler could crash when deleting an attribute (STR #3197) - - The cups-driverd program did not detect symlink loops (STR #3185) - - The EPSON 24-pin series driver should now feed the correct amount - (STR #2624) - - The scheduler now automatically logs the last N debug messages for - failed print jobs. - - You can now modify a raw print queue (STR #3133) - - Fixed a number of ppdi issues and added a unit test to validate that - ppdc + ppdi can generate and import the same data (STR #3152) - - Moving jobs in the web interface now shows an error if you only have - one printer or class added (STR #3094) - - Since classes have never truly supported the printer-error-policy - stuff added in CUPS 1.2, update the code to reflect the current - reality and support only the retry-current-job policy for now - (STR #3171) - - Revised the password callback support (STR #2953) - - ppdEmit*() did not choose between PageSize and PageRegion properly. - - Make some fairly substantial changes to the Kerberos support code so - that CUPS can work in multi-realm environments and does not require - delegatable credentials. Shared printing still requires delegation, - however "delegation by policy" can be enabled in the KDC to make this - all work. - - "AccessLogLevel actions" did not hide client-error-not-found errors. - - AP_FIRST_InputSlot did not work with number-up. - - cupsBackChannelRead() and cupsBackChannelWrite() could fail due to a - lack of kernel buffers. - - The IPP and LPD backends did not respond to side-channel requests - while copying print data to a temporary file. - - cupsWriteRequestData() flushed the output buffer unnecessarily, - causing reduced performance in some situations. - - If a CGI process died before sending its MIME headers, the request - would hang on the client. - - The printer/class/job search feature on the web interface did not - work (STR #3132) - - The scheduler did not write the printers out for classes. - - CUPS-Get-PPDs did not work properly when filtering by language, - product, or psversion (STR #3136) - - The scheduler now kills job filters when it takes more than 30 seconds - (configurable) to cancel or hold the job. - - The cupstestppd program did not validate the capitalization of - filenames in the PPD file. - - The cupstestppd program did not validate the PageSize and PageRegion - values. - - The cups-deviced helper program could miss reporting some backend - devices (STR #3108) - - The cupsSideChannelSNMP* functions did not work. - - The scheduler could consume 100% CPU when jobs were canceled. - - Clicking on "Select Another Make/Manufacturer" in the web interface - incorrectly added the printer (STR #3095) - - The scheduler no longer uses programs with insecure file - permissions. - - httpAssembleURI*() did not escape backslashes in hostnames. - - The dnssd backend did not unquote "full names" before creating the - device URI. - - The scheduler now supports JobRetryInterval values less than 10 - seconds. - - Updated the Spanish localization (STR #3090) - - The scheduler did not redo Bonjour/DNS-SD registrations when updating - them failed. - - The "authenticated" policy incorrectly required authentication for - status operations. - - ppdOpen*() incorrectly loaded PPDs with multiple JobPatchFile - keywords. - - The network backends no longer report the SNMP "offline" or - maintenance status bits since they are inconsistently implemented and - often unreliable. - - The scheduler no longer logs child processes killed via SIGKILL as - "crashed". - - The printer link shown on the "job moved" template was bad (STR #3085) - - Updated the HTML templates to use the final HTML 4 DOCTYPE (STR #3086) - - The scheduler did not track the "paused" reason properly if a - printer had other reasons associated with it. - - cupsSendRequest() did not clear old local certificate auth data. - - The PPD compiler did not search for localization files properly - (STR #3084) - - cupsGetNamedDest() did not use the fallback default like - cupsGetDests*() (STR #3082) - - The scheduler now provides a LogTimeFormat directive to enable - microseconds in the date and time that are logged. - - The scheduler now provides a MultipleOperationTimeout directive to - control the timeout for multi-file print jobs. - - The configure script incorrectly allowed Avahi to be used for DNS-SD - printer discovery (STR #3065) - - The web interface and scheduler did not support URIs up to 1024 bytes - in length (STR #3072) - - Fixed pdftops issues with page sizes (STR #3063) - - Fixed pdftops issues with Ghostscript (STR #3062) - - The scheduler incorrectly registered default profiles for PostScript - printers with no specified colorspace. - - The scheduler incorrectly created an empty org.cups.printers.plist - file on Mac OS X. - - cupsGetPPD3() did not look for local PPDs in the right directory. - - SNMP lookups via side-channel did not work for NULL-VALUE and - and OCTET-STRING OIDs containing nul characters. - - The libusb-based USB backend did not work. - - The scheduler did not set the printer-commands attribute correctly - for some PPDs. - - The ppdi utility did not work. - - The web interface no longer uses multi-part output with old or broken - web browsers (STR #3049) - - CUPS now conforms to the draft IPP/2.0 and IPP/2.1 specification. - - Added a new cupsGetConflicts() API to get a list of conflicting - options. - - The PPD compiler didn't localize options or choices that did not - have associated translation text (STR #3045) - - Updated the Spanish localization (STR #3043) - - Fixed build problems (STR #3040, STR #3047) - - cupsResolveConflicts() did not resolve using the default option - choice in some cases due to the mirror UIConstraints that are - present in most PPD files. - - The scheduler did not honor MIME type priorities. - - The commandtops filter incorrectly used the JCLBegin code to end - its jobs. - - The default BrowseLocalProtocols value was not set properly. - - Since the commandtops filter does not actually support ReportLevels - all on its own, don't list that printer command by default for PS - printers. - - The scheduler did not give filters a chance to log errors or update - printer attributes when a job was canceled. - - The scheduler did not clear the "connecting-to-device" reason keyword - when a job finished. - - -CHANGES IN CUPS V1.4b2 - - - Documentation updates (STR #2983, STR #2998, STR #3021) - - The cupstestppd utility now validates the FileVersion and - FormatVersion values in PPD files. - - The default cupsd.conf file did not reflect the - --with-local-protocols value set at compile-time (STR #3037) - - The cupsGetPPD* APIs now create symlinks to local PPD files - rather than copying them whenever possible. - - Various performance optimizations in the string pool, dests, and - options implementations. - - The cupsGetDests* APIs now return the marker and printer-commands - attributes. - - Side-channel SNMP lookups would not work when cupsSNMPSupplies - was set to False in the PPD file. - - Localized the device descriptions for the SCSI, serial, - and network backends (STR #3014) - - Added a Spanish localization (STR #3015) - - Added support for marker-low-levels and marker-high-levels - attributes. - - The scheduler could hang writing a long log line. - - The cupsGetDevices() function now has an "include_schemes" - parameter. - - The lpinfo command now supports --include-schemes and - --exclude-schemes options. - - The CUPS-Get-PPDs operation now supports the include-schemes - and exclude-schemes attributes. - - The CUPS-Get-Devices operation now supports the include-schemes - attribute. - - The print filters now support a replacement for the fitplot - option called "fit-to-page". - - The LPD backend no longer tries to collect page accounting - information since the LPD protocol does not allow us to - prevent race conditions. - - The scheduler did not save the last marker-change-time value. - - Fixed a problem with printing to some IPP printers, including - CUPS 1.1.x. - - Fixed a redirection problem with the printer web page (STR #3012) - - Fixed a PPD compiler problem with the loading of message - catalogs (STR #2990) - - Fixed a PPD compiler problem with the loading of .strings files - (STR #2989) - - The cupsfilter utility did not set the CONTENT_TYPE environment - variable when running filters. - - The scheduler now waits to allow system sleep until the jobs - have all stopped. - - The IPP, LPD, and socket backends used different "connecting" - progress messages. - - -CHANGES IN CUPS V1.4b1 - - - Documentation updates (STR #2567) - - The PPD compiler now allows local message catalogs to - override the standard CUPS translations (STR #2642) - - The ppdmerge command did not merge custom option strings - (STR #2863) - - The scheduler now supports the Hold-New-Jobs and - Release-Held-New-Jobs operations; these are exposed via the - cupsdisable and cupsenable commands (STR #2332) - - The lpstat command is now much faster when displaying the - status of a single printer (STR #2843) - - The scheduler now caches information from PPD files to provide - significantly faster startup time with large numbers of PPDs - (STR #1293) - - CUPS-Get-Driver now provides much better driver matching based - on the IEEE-1284 device ID and make/model strings (STR #2707) - - Now support the cupsSNMPSupplies keyword to control whether - the network backends query the SNMP Printer MIB for supply - levels. - - Now support and use a new banner file format for better text - support and easier customization (STR #2490) - - The scheduler now sets the PRINTER_INFO and PRINTER_LOCATION - environment variables from the corresponding IPP attributes. - - The ippRead*() and ippWrite*() functions no longer use a - stack-based buffer (STR #2388) - - The CUPS-Add-Modify-Printer operation now allows you to set - the printer-state-reasons attribute. - - The "set printer options" page now supports auto-configuration - of printer options (STR #1440) - - The web interface now provides an advanced server settings - form. - - The web interface's "modify printer" pages now make it - easier to change just one setting (STR #1919) - - The scheduler now supports a plist PrintcapFormat. - - The scheduler now supports multiple addresses in Allow and - Deny lines, just like Apache (STR #2947) - - Added CUPS_JOBTYPE environment variable for job filters so - they know whether they are printing a banner or document - file (STR #2799) - - Added support for printer filtering by the cupsfilter - command (STR #2562) - - Added a SSLOptions directive to allow Windows clients to - talk to CUPS in FIPS mode (STR #2827) - - Renamed the accept and reject commands to cupsaccept and - cupsreject; the old names are still available (STR #2936) - - The locale/translate utility needed an update to work with - Google (STR #2882) - - The lpstat command now supports a -H option to display the - default server (STR #2833) - - The scheduler now supports a FatalErrors directive to control - which errors should cause the scheduler to exit (STR #2536) - - The scheduler now uses the php-cgi program if it is available - (STR #2923) - - The scheduler now supports a DefaultPaperSize directive - (STR #2848) - - The scheduler now passes the job-originating-host-name - value to filters in the options argument (STR #2558) - - CUPS now supports job tickets in PDF files (STR #2903) - - Added a DBUS notifier (STR #2529) - - The LPD mini-daemon now passes the document name when queuing - print jobs (STR #2482) - - The IPP backend did not relay com.apple.print.recoverable-message - values. - - The scheduler now supports a job-media-progress attribute to - track the progress of individual pages. - - The sample HP driver now supports A5 (STR #2798) - - The CUPS web interface menu item now uses the xdg-open - command, when available (STR #2724) - - The cups-lpd program now supports the -h option (STR #2794) - - The scheduler now sets the PAM_TTY parameter and the - PAM_ESTABLISH_CRED credential flag (STR #2745) - - The scheduler now logs unsuccessful requests to the error_log - file as errors (STR #2616) - - Added support for a "retry-current-job" error policy that - retries the current job immediately when the backend encounters - an error (STR #2555) - - The scheduler now returns a "forbidden" error when a user - correctly authenticates but does not have permission to - continue further (STR #2101) - - The scheduler now loads both the server and CA certificates - (if present) from the ServerCertificate file (STR #2146) - - New RSS subscriptions now create their feed files immediately - (STR #2853) - - Added support for a device-location attribute which provides - the physical location of a printer device. - - Added a cupsBackendReport() API which handles quoting of the - device data by a backend. - - Added support for custom options in the web interface - (STR #1729) - - Added support for Mozilla LDAP, reconnection to LDAP servers, - and improved LDAP performance (STR #1962) - - Added Solaris SMF support (STR #1477) - - Added optional support for using TCP wrappers to limit access - to CUPS (STR #263) - - Added ppdPageSizeLimits API. - - Added support for new cupsMediaQualifier2, cupsMediaQualifier3, - cupsMinSize, and cupsMaxSize attributes. - - Added cupsResolveConflicts and ppdInstallableConflict APIs. - - Added support for new cupsUIConstraints and cupsUIResolver - attributes for better option conflict detection and - resolution. - - Increased the maximum size of 1284 device ID strings to - 256 bytes (STR #2877) - - Added an AccessLogLevel directive to cupsd.conf to control - what is logged to the access_log file. - - The default LogLevel is now "warn" instead of "info" to reduce - the amount of logging that is done to disk by default. - - The PPD compiler did not include OID query keywords in PPD - files (STR #2871) - - The cups-driverd helper program now directly supports driver - information files. - - The USB backend now uses libusb when available (STR #1575) - - Added ppdLocalizeAttr function to get the localized version - of an attribute. - - MIME types now support a priority() attribute (STR #2719) - - The standard MIME types are now installed in - DataDir/mime (STR #2719) - - The lpoptions command now describes custom options and - the necessary parameters (STR #2660) - - The ppdmerge program did not support Simplified Chinese - or Traditional Chinese language version strings (STR #2851) - - The PPD compiler now supports localizable attributes - (STR #2738) - - The ppdpo utility now includes cupsIPPReasons values in - the message catalogs it generates (STR #2754) - - The PPD compiler now supports conditional directives - (STR #2636) - - The ppdc utility now supports a "-t" option to test PPD - files (STR #2739) - - The ppdc utility now supports a "-m" option to use the - ModelName value as the output filename. - - The ppdc utility now supports a FileName directive to - set an alternate output filename (STR #2740) - - The side-channel API now supports SNMP queries for the - standard network backends. - - Added a PageLogFormat directive to the cupsd.conf file to - control the format of lines in the page_log file. - - Filters can now send PPD: messages to stderr to set PPD - keywords like DefaultPageSize while a job is printing. - - Added a mdns backend for discovery and printing to printers - that advertise themselves via DNS-SD (Bonjour) - - The ipp, lpd, and socket backends now support DNS-SD service - name resolution. - - The scheduler now uses a single shared file descriptor for - all DNS-SD registrations (STR #2674) - - The ipp, lpd, and socket backends now support SNMP-based - page accounting and supply level monitoring (STR #1655) - - Added support for cupsPJLDisplay attribute to control what - PJL commands are used to display the job information. - - Driver information files can now be installed in - /Library/Printers/PPDs.drv on Mac OS X. - - The CUPS image library now supports reading images larger - than 2GB. - - The scheduler now delays writing config and state files to - reduce disk activity (STR #2684) - - The CUPS-Get-Devices operation now supports the - exclude-schemes and timeout attributes to control which - backends are polled and for how long. - - The cups-deviced helper application now runs backends in - parallel to get the list of devices faster. - - Added --enable-pap configure option. - - The default cupsd.conf file now includes an "authenticated" - policy which requires authentication for remote print jobs. - - Added support for Czech and Hungarian in PPD files - (STR #2735, STR #2736) - - The PPD compiler tools now support Mac OS X .strings files - for localization (STR #2737) - - ppdOpen*() now default the colorspace member to PPD_CS_N - when no DefaultColorSpace attribute is present in the PPD - file. - - The build system has been updated to support separate - installation of data, program, header, and library files. - - All support libraries are now built as shared libraries - by default. - - The scheduler now manages ICC color profiles on Mac OS X. - - The network backends (ipp, lpd, socket) now support - SNMP-based supply and page count monitoring (STR #1655) - - The lppasswd program is no longer installed setuid to - root to make the default installation more secure. - - Added a new ppdLocalizeMarkerName() function to get - the localized version of a marker-names value. - - The scheduler now provides the printer-dns-sd-name - attribute for printers shared via DNS-SD/Bonjour. - - The pdftops filter now executes the Xpdf or poppler - pdftops utility to convert PDF files (STR #1471) - - Bonjour printer registrations now advertise as local or - global based on the current access policies for the - printer. - - cupsGetDests*() and cupsSetDests*() now track the last - used printer preference on Mac OS X. - - Added a new streaming request API (STR #2261) - - Added a new cupsGetNamedDest() function to the CUPS - library for faster printing with lp and lpr (STR #2638) - - The scheduler now sets the PAM RHOST value on systems - that support it (STR #2637) - - The scheduler now sandboxes child processes when - possible. - - The Cancel-Job operation now supports a purge-job - attriibute to purge a specified job. - - ppdEmit* and ppdCollect* now use the NonUIOrderDependency - attributes for custom option selections. - - The web interface now enables/disables the printer - sharing (formerly publishing) controls based on the - server-is-sharing-printers state (STR #2233) - - The scheduler now tracks printer sharing via the - server-is-sharing-printers attribute, and manages LPD - and SMB sharing as well (STR #2233) - - The web interface now allows you to go back to the make/ - manufacturer page if there is no matching printer driver - on the model page (STR #2436) - - The printer list now shows the default media, banner, and - duplex options as well as the color and duplex capabilities - of printers (STR #1175) - - The web interface look-n-feel has been updated (STR #2492) - - The scheduler now supports a CUPS-Get-Document operation - that returns the specified print job document (STR #118) - - The cupsfilter utility now supports a "-J jobid" option - to filter the document from the specified job. - - The scheduler (cupsd) now supports a new option (-t) to - do a syntax check of the cupsd.conf file (STR #2003) - - Added new cupsGetPPD3() API to allow applications to - cache PPDs safely (STR #1473) - - Added generic PostScript and PCL printer driver PPDs. diff --git a/CHANGES-1.5.txt b/CHANGES-1.5.txt deleted file mode 100644 index 39edb42..0000000 --- a/CHANGES-1.5.txt +++ /dev/null @@ -1,312 +0,0 @@ -CHANGES-1.5.txt ---------------- - -CHANGES IN CUPS V1.5.4 - - - Documentation updates (STR #4112, STR #4130, STR #4134) - - Fixes for libusb-based USB backend (STR #4128) - - The lpq command did not show the owner or title of jobs unless passed - a username on the command-line (STR #4135) - - Localized empty strings contained the message catalog metadata - (STR #4119) - - Fixed a crash in the libusb-based USB backend (STR #4099) - - The cups-lpd mini-daemon no longer handled jobs with multiple copies - (STR #4118) - - Multiple libusb backend fixes (STR #4098, STR #4100) - - The IPP backend no longer tries to get the job status for printers - that do not implement the required operation (STR #4083) - - Sending a document in an unsupported format to an IPP printer now - automatically cancels the job (STR #4093) - - Fix some error reporting issues when printing from /dev/null and - other unusual situations (STR #4015) - - The scheduler now sets the CUPS_MAX_MESSAGE environment variable for - filters (STR #4074) - - Fixed a build issue when using older versions of autoconf (STR #4084) - - The IPP backend now treats the client-error-not-possible status code - as a job history issue, allowing IPP printing to Windows to work - (STR #4047) - - The IPP backend incorrectly included the document-format and - compression attributes in Create-Job requests (STR #4086) - - The libusb-based USB backend did not work on non-Linux platforms - (STR #4088) - - -CHANGES IN CUPS V1.5.3 - - - httpReconnect() did not reset the read/write buffers (STR #4065) - - Compiling without threading support failed (STR #4060) - - Fixed compile problem with old versions of OpenSSL (STR #4036) - - The network backends did not check SNMP supply levels regularly - (STR #4040) - - The online help always included the "help on help" text (STR #4042) - - Fixed a SSL handshake issue on OS X (STR #4045) - - The scheduler could crash if a PPD file contained an invalid paper - size (STR #4049) - - The CUPS polling daemon did not reinitialize its connection to the - remote server on errors in all cases (STR #4031) - - PostScript auto-configuration was slow and unreliable with some - printers (STR #4028) - - Missing localizations caused empty output (STR #4033) - - The cups-driverd program could temporarily "forget" a PPD file if it - was updated in place. - - The dnssd backend now prefers IPPS over IPP. - - The USB backend now uses and requires LIBUSB 1.0 or later (STR #3477) - - The LIBUSB-based USB backend now supports the back-channel (STR #2890) - - Changed how timeouts are implemented in the LPD backend (STR #4013) - - Added more supported color names for SNMP supplies (STR #3981) - - The default InputSlot setting was never used (STR #3957) - - POSIX ACLs are now set properly on certificate files (STR #3970) - - Supplies with commas in their names were not reported correctly - (STR #4020) - - The cupsGetPPD3() function created a temporary file when one was not - needed (STR #4018) - - The scheduler now ensures that job notifications contain a value for - the notify-printer-uri attribute (STR #4014) - - The lp and lpr commands did not cancel jobs queued from stdin on an - error (STR #4015) - - Fixed the IPP backend's handling of HTTP/1.0 compatibility (STR #3988) - - The IPP backend did not always setup username/password authentication - for printers (STR #3985) - - The IPP backend no longer re-queues print jobs that are too large for - the printer/server (STR #3977) - - The RPM spec file did not work (STR #4021, STR #4057) - - Encryption did not work when the server name ended with "." - (STR #4011) - - The multi-purpose tray is now mapped to the IPP "by-pass-tray" - (STR #4009) - - The correct media size was not always passed to IPP printers - (STR #4001) - - Finishing options were not passed to IPP printers (STR #3995) - - Fixed iCloud-based Back to My Mac printing (STR #3996) - - -CHANGES IN CUPS V1.5.2 - - - Reposted what should have been CUPS 1.5.1. - - -CHANGES IN CUPS V1.5.1 - - - Documentation updates (STR #3885, STR #3886, STR #3946, STR #3969) - - Localization updates (STR #3840, STR #3989, STR #3997) - - Build fixes (STR #3956, STR #3999) - - The SNMP backend did not validate the device URIs reported by printers - (STR #4004) - - cupsBackendReport() did not handle newlines in 1284 Device IDs - (STR #4005) - - USB backend fixes for libusb (STR #3965, STR #3978) - - The DBUS notifier did not validate string parameters (STR #3984) - - Group quota ACLs did not work with Kerberos (STR #3972) - - The IPP backend did not retry when a printer responded with - client-error-not-possible (STR #3963) - - PostScript PPDs with filters used the wrong command filter (STR #3973) - - The scheduler incorrectly used free() on a POSIX ACL value, which - could cause a crash (STR #3970) - - PPD files using the MacStandard encoding did not work. - - The web interface did not work on some platforms (STR #3902) - - The lpstat command would crash when then "-u" option was used by a - non-administrator (STR #3953) - - Japanese supply level reporting did not always work. - - The DBUS notifier could crash (STR #3947) - - Relaxed some of the page size checks in cupstestppd. - - The ipptool program now reports attributes that are repeated within - the same attribute group. - - Updated the PWG raster support to match the current draft - specification. - - Fixed some IPP conformance issues in the scheduler. - - Added ipptool support for repeating requests. - - Added IPP/2.2 conformance tests and greatly improved the IPP/1.1, - IPP/2.0, and IPP/2.1 conformance testing. - - IPP messages containing mixed integer/rangeOfInteger values did not - work (STR #3942) - - The ipptool program now provides additional diagnostics for badly- - formatted responses (STR #3857) - - When possible, the IPP backend now stops sending job data early on a - cancel. - - cupsSendRequest and cupsWriteRequestData did not properly read all - HTTP headers, preventing authentication and encryption upgrades from - working in all cases. - - The client.conf Server directive is no longer supported on Mac OS X - 10.7 and later. - - The IPP backend sent the wrong margins in media-col. - - The scheduler did not save or restore large Kerberos credentials for - jobs. - - The dnssd backend did not properly browse for secure IPP printers. - - httpAssembleURI* did not properly escape all special characters in the - username/password field. - - The scheduler now logs config file errors to stderr (STR #3936) - - The configure script incorrectly used bundle-based localizations on - Linux (STR #3938) - - The cups-driverd helper program did not cache .drv files properly, - sometimes leading to a crash (STR #3921) - - CUPS did not build on stock Mac OS X installations. - - Encryption was broken with OpenSSL. - - ipptool's XML output used date/time values with timezone offsets, - which are not supported by Mac OS X's NSDate class. - - Several programs did not support the cupsFilter2 keyword in PPD files. - - The IPP backend incorrectly reported spool-area-full states. - - cupsMarkOptions() did not protect against a bad PPD that was missing - one or more standard Duplex options. - - The PostScript filter did not mirror N-up output properly. - - The ipptool program did not validate UTF-8 strings in XML output. - - Fixed supply level reporting for some printers. - - The scheduler no longer automatically logs debug messages for jobs - that were held or canceled. - - The cupsSendRequest function did not flush remaining response data - from a previous request, leading to apparent chunking issues. - - The scheduler did not report the correct version in the Server: header - (STR #3903) - - The scheduler did not support 1284 device IDs reported by driver - interface programs longer than 127 characters (STR #3871) - - The image filters did not support loading images larger than the - RIPCache setting (STR #3901) - - "PAGE: total NNN" messages did not get logged properly (STR #3887) - - Updated the PWG Raster support to conform to the current draft of the - PWG Raster Format specification. - - The PWG Raster filter did not always write the correct number of - padding lines on the bottom of the page (STR #3904) - - When reporting a denial-of-service attack from the domain socket, the - address reported does not always contain the correct path (STR #3888) - - Badly formed GIF files could cause the image filters to crash - (STR #3914) - - Jobs canceled at the printer were retried by the IPP backend. - - "cupsfilter -u" deleted the input file instead of the PPD file. - - The scheduler did not compute the cost of PPD filters defined using - the cupsFilter2 keyword properly. - - The scheduler did not correctly support the maxsize() attribute for - PPD filters. - - -CHANGES IN CUPS V1.5.0 - - - Documentation updates. - - Localization update (STR #3865) - - Needed to limit TLS to v1.0 on some versions of Mac OS X. - - The snmp backend did not work with some printers. - - -CHANGES IN CUPS V1.5rc1 - - - Compile fixes (STR #3849, STR #3850) - - The scheduler didn't check for empty values for several configuration - directives (STR #3861) - - ipptool didn't generate valid XML when a test was skipped. - - Added additional error checking to the 1284 device ID code (STR #3858) - - Fixed some compatibility issues migrating from the old usblp backend - to the libusb backend (STR #3860) - - Fixed the wake-from-sleep printing behavior on Mac OS X. - - The scheduler incorrectly allowed jobs to be held from a terminating - state. - - The cups-driverd program could crash when a PPD was renamed. - - The dnssd backend took too long to discover printers on large or busy - networks with the new default timeout used by lpinfo and the web - interface. This resulted in "lost" printers. - - -CHANGES IN CUPS V1.5b2 - - - Documentation updates. - - Localization updates (STR #3845) - - Compiler warning cleanup. - - Fixed PIE support for Linux (STR #3846) - - Made httpSetTimeout API public and use it in the IPP backend to avoid - timeout errors. - - The scheduler incorrectly set the "authenticated" printer-type bit for - remote queues using authentication. - - -CHANGES IN CUPS V1.5b1 - - - The CUPS library now supports per-connection HTTP timeouts and - callbacks. - - The CUPS library now supports (limited) SSL/TLS X.509 certificate - validation and revocation (STR #1616) - - Updated the PostScript filter to support IncludeFeature in more - circumstances (STR #3417) - - The schedule did not correctly parse some IPv6 addresses and masks in - the cupsd.conf file (STR #3533) - - Fixed a case-insensitive string comparison issue for locales that do - not treat "I" and "i" as equivalent (STR #3800) - - The scheduler reported an incorrect job-printer-uri value when sharing - was not enabled (STR #3639) - - The scheduler now allows the ServerAlias directive to contain multiple - hostnames separated by spaces or commas (STR #3813) - - The scheduler now sets the process group for child processes and - manages the group (STR #2829) - - Fixed some minor issues discovered by a Coverity scan (STR #3838) - - The scheduler now more carefully creates and removes configuration, - cache, and state files (STR #3715) - - The lpadmin command now allows default option values to be deleted - (STR #2959) - - The lpadmin command now allows the cupsIPPSupplies and - cupsSNMPSupplies keywords to be set in a PPD file (STR #3825) - - Moving a held job no longer releases it (STR #3839) - - Restored support for GNU TLS and OpenSSL with threading enabled - (STR #3605) - - Fixed a confusing error message from cups-polld (STR #3806) - - Increased the default RIPCache value to 128MB (STR #3535) - - MIME errors are now routed to the error_log file (STR #2410) - - Updated PDF filter to support new Ghostscript ps2write device - (STR #3766) - - Updated PDF filter to support new Poppler option to preserve page - sizes in PDF files when the user has not selected a particular media - size (STR #3689) - - Added new PWG Raster filter for IPP Everywhere printer support. - - Added job-uuid, printer-uuid, and subscription-uuid attributes. - - Added support for the cupsSingleFile PPD keyword. - - Dropped support for the printer-state-history attribute (STR #3654) - - Added support for a new cupsIPPSupplies keyword in PPD files to allow - drivers to disable IPP supply level reporting. - - Added support for a new cupsFilter2 keyword in PPD files to allow for - the propagation of the actual MIME media type produced by a filter. - - The scheduler did not always get the correct Kerberos username when - authenticating (STR #3670) - - Added new cupsRasterOpenIO function and CUPS_RASTER_WRITE_PWG to the - CUPS imaging library to support printing to IPP Everywhere raster - printers. - - The scheduler now provides default values for the pages-per-minute and - pages-per-minute-color attributes for PPD files that lack a - Throughput keyword. - - Email notifications did not work on Mac OS X. - - The cupstestppd program now shows an error for files missing a - CloseGroup keyword (STR #3668) - - Name resolution errors no longer cause queues to stop (STR #3719, - STR #3753) - - Added a new cups-exec helper program that applies security profiles - to filters, port monitors, backends, CGI programs, and mini-daemons. - - The web interface can now be disabled using the WebInterface directive - in cupsd.conf (STR #2625) - - The scheduler now provides privacy controls for jobs and subscriptions - (STR #2969) - - Added new cupsArrayNew3 API which offers memory management of array - elements. - - Added several new color spaces to the CUPS raster format (STR #3419) - - The Validate-Job operation now uses the same policy as Print-Job by - default. - - CUPS now uses iconv to implement all of its character encoding - support (STR #3097) - - The scheduler now implements the Cancel-Jobs, Cancel-My-Jobs, and - Close-Job operations along with the job-ids operation attribute from - PWG 5100.11. - - The main CUPS header () no longer includes the PPD header - (). - - The scheduler and CUPS API now support the print-quality job template - attribute. - - The scheduler no longer supports the old Mac OS X Server quota - plugin. - - The scheduler now allows writing to /Users/Shared from print filters - on Mac OS X. - - CUPS no longer supports the old ~/.cupsrc or ~/.lpoptions files from - CUPS 1.1.x. The ~/.cups/client.conf and ~/.cups/lpoptions files that - were introduced in CUPS 1.2 must now be used. - - The ipptest tool is now a first-class user program and has several - improvements along with new documentation (STR #3484) - - The cupstestppd tool now warns about non-unique filenames and - provides a way to ignore all filename warnings. - - Dropped support for the recoverable: and recovered: message prefixes. - - The scheduler now requires that filters and backends have group write - permissions disabled. - - The PPD compiler now checks for overlapping filenames when writing - PPD files. - - The HP-GL/2 filter is no longer included with CUPS (STR #3322) - - The SCSI backend is no longer included with CUPS (STR #3500) diff --git a/CHANGES-1.6.txt b/CHANGES-1.6.txt deleted file mode 100644 index 23e1422..0000000 --- a/CHANGES-1.6.txt +++ /dev/null @@ -1,244 +0,0 @@ -CHANGES-1.6.txt ---------------- - -CHANGES IN CUPS V1.6.4 - - - Removed some duplicate size definitions for some ISO sizes that were - causing problems () - - The IPP backend did not add the "last-document" attribute - () - - Added a SyncOnClose directive to cups-files.conf to force cupsd to - call fsync before closing any configuration/state files it writes - () - - Added USB quirk rule for Lexmark E238 () - - Closed server connections were still not always detected - () - - The libusb-based USB backend now loads its list of quirks from files - in /usr/share/cups/usb instead of using a hardcoded table - () - - The scheduler did not properly register ICC color profiles with - colord () - - -CHANGES IN CUPS V1.6.3 - - - The configure script now prefers Clang over GCC. - - Fixed a compile problem on AIX (STR #4307) - - The default IPP version did not always get set before creating a new - IPP request message () - - The lp, lpq, lpr, and lpstat now display an error message advising the - use of the /version=1.1 ServerName option () - - Added documentation about the /version=1.1 option to ServerName in - client.conf () - - httpStatus(HTTP_ERROR) did not return a useful error message - () - - The lp, lpq, lpr, and lpstat commands incorrectly ignored the default - printer set in the lpoptions file () - - Fixed a URI encoding issue for hostnames containing the ` (backquote) - character () - - Added support for RFC 6874's IPv6 link local address format in URIs - () - - The USB backend could crash on libusb-based systems if USB was - disabled in the BIOS () - - Fixed a rounding error in the PWG media size mapping code - () - - Fixed several ipptool test files that used old STATUS names. - - Kerberos credentials could get truncated when printing to a shared - printer. - - Printing using "ipps" URIs was not encrypted. - - Insecure ICC profiles prevented installation of user profiles for a - printer on OS X. - - Added more USB quirks for the libusb-based backend (STR #4311, - ) - - The Russian web interface templates were broken (STR #4310) - - The scheduler no longer tries to do Kerberos authentication over the - loopback interface. - - The IPP backend could fail to pause a job for authentication - (STR #4298) - - Fixed a regression on the handling of auth keys on OS X if the - cups-files.conf was not present or did not contain a SystemAuthKey - value. - - The scheduler incorrectly did a reverse lookup of the server address - when HostNameLookups was turned off (STR #4302) - - The scheduler incorrectly computed the final content type value when - null filters were present. - - -CHANGES IN CUPS V1.6.2 - - - Documentation fixes (STR #4229, STR #4239, STR #4234, STR #4248, - STR #4259) - - Security: All file, directory, user, and group settings are now stored - in a separate cups-files.conf configuration file that cannot be set - through the CUPS web interface or APIs (STR #4223) - - Added a Czech localization (STR #4201) - - Added a French localization (STR #4247) - - Added a Russian localization (STR #4228, STR #4285) - - Updated the Catalan localization (STR #4202) - - Local certificate authentication did not guard against an empty - certification file (STR #4293) - - The scheduler did not reject device URIs with spaces. - - Added USB quirk rule for Epson Stylus Photo 750 (STR #4286) - - The IPP backend could crash if the printer disconnects early - (STR #4284) - - cupsGetPPD did not work with statically-configured CUPS shared - queues (STR #4178) - - The scheduler did not support long MIME media types (STR #4270) - - The cupsfilter command did not set the CHARSET environment variable - for the text filters (STR #4273) - - The lp command did not show errors for unknown "--foo" (STR #4261) - - Bad IPP responses could crash ipptool (STR #4262) - - Updated USB quirk rules for Canon and Xerox printers (STR #4217, - STR #4263) - - Added USB blacklisting for printers that require a custom backend - (STR #4218) - - The PPD compiler did not correctly JCL options (STR #4115, STR #4203) - - The ipptool program now supports DEFINE-MATCH and DEFINE-NO-MATCH - predicates for STATUS directives. - - Fixed a problem with local Kerberos authentication (STR #4140) - - Coverity scan: fixed some minor issues (STR #4242) - - The scheduler did not remove color profiles after deleting a printer - (STR #4232, STR #4276) - - The CUPS library did not always detect a timed out connection to the - server which could cause temporary loss of printing from applications - (STR #4187) - - The ipptool program now supports variable substitution in OPERATION - and DELAY directives (STR #4175) - - The IPP backend now stops queues when the server configuration - prevents successful job submission (STR #4125) - - The XML output of ipptool contained empty dictionaries (STR #4136) - - The scheduler did not delete job control backup files (STR #4244) - - cupsGetPPD3 could return a local PPD instead of the correct remote - PPD. - - The scheduler incorrectly advertised auth-info-required for local - queues needing local authentication (STR #4205) - - CUPS 1.6 clients using the ServerName directive in client.conf did not - work with CUPS 1.3.x or older servers (STR #4231, STR #4291) - - The SNMP backend now tries to work around broken printers that use a - newline to separate key/value pairs. - - The IPP backend did not send a cancel request to printers when a job - was canceled and the printer did not support Create-Job. - - Fixed EPM packaging files (STR #4199) - - OpenBSD build fix (STR #4195, STR #4196, STR #4197) - - The scheduler could crash when using Avahi (STR #4183, STR #4192, - STR #4200, STR #4213) - - The IPP backend could get stuck in an endless loop on certain network - errors (STR #4194) - - 32-bit builds failed on Debian (STR #4133) - - The scheduler no longer accepts or sends job description attributes. - - The IPP backend now works around some conformance issues for broken - printers (STR #4190) - - cupsBackendReport() now filters out all control characters from the - reported 1284 device IDs (STR #4124) - - The scheduler no longer allows job-name values that are not valid - network Unicode strings (STR #4072) - - The web interface did not preserve the order of classes, jobs, or - printers (STR #4170) - - The network backends now support disabling of SNMP supply level - queries via the "snmp" URI option (STR #4106) - - The IPP backend did not specify the compression used (STR #4181) - - ipptool did not support octetString values. - - The scheduler did not recognize dnssd: or ipps: URIs as Bonjour shared - queues (STR #4158) - - Applications could not get the PPD file for statically-configured - Bonjour-shared print queues (STR #4159) - - The cupsd.conf file included obsolete browsing directives (STR #4157) - - Fixed a USB backend compatibility issue on systems using libusb - (STR #4155, STR #4191) - - Some Bonjour features were not available on systems with Avahi - (STR #4156) - - CUPS now includes the port number in the Host: header for HTTP - requests. - - Fixed REPEAT-MATCH for STATUS and EXPECT - was incorrectly erroring - out. - - -CHANGES IN CUPS V1.6.1 - - - Documentation fix (STR #4149) - - RPM packaging fixes (STR #4129, #4145) - - The Japanese and English web interface headers were swapped - (STR #4148) - - -CHANGES IN CUPS V1.6.0 - - - Document changes (STR #4131) - - Added new Catalan (STR #4107) and Spanish (STR #4137) localizations. - - -CHANGES IN CUPS V1.6rc1 - - - Added a new Japanese localization (STR #4122) - - The SNMP backend no longer exits if it is unable to obtain an IPv6 - socket (STR #4109) - - The LPD backend incorrectly used "localhost" in the control file - instead of the current hostname. - - -CHANGES IN CUPS V1.6b1 - - - Documentation updates (STR #3927, STR #3980, STR #4010, STR #4068) - - The scheduler now consolidates all PPD updates from filters at the - end of the job (STR #4075) - - CUPS now supports color management using colord (STR #3808) - - CUPS now supports Bonjour using Avahi (STR #3066) - - The PreserveJobFiles and PreserveJobHistory directives now support - specification of a time interval (STR #3143) - - PPD files can now be archived in (gzip'd) tar files to further reduce - the disk space used by PPD files (STR #3772) - - The network backends now deal with printers that report their levels - in percent but do not specify a maximum capacity of 100 (STR #3551) - - The network backends now report full/almost-full waste bins in - printers along with end-of-life for cleaning pads (STR #4017) - - Added a configure option to set the permissions of the installed - cupsd (STR #3459) - - Added a new WITH-ALL-VALUES directive to ipptool EXPECT predicates - (STR #3949) - - CUPS now supports a User directive in client.conf and the CUPS_USER - environment variable for overriding the default username (STR #3114) - - Now set the PJL USERNAME variable as needed (STR #3100) - - Added support for usernames and passwords longer than 32 characters - (STR #2856) - - Added a new MaxHoldTime directive to automatically cancel jobs that - have been held indefinitely after a specific number of seconds - (STR #2291) - - The LPD backend now uses the originating host name when it is not the - local system (STR #2053) - - CUPS now prefers the suffix "dpcm" when reporting resolution in dots- - per-centimeter (STR #4006) - - The configure script and build system no longer support building of - separate 32-bit and 64-bit libraries. - - The "brightness", "columns", "fitplot", "gamma", "hue", - "natural-scaling", "penwidth", "position", "ppi", "saturation", and - "scaling" options are not longer supported (STR #4010) - - The "page-bottom", "page-left", "page-right", "page-top", - "prettyprint", and "wrap" options have been deprecated (STR #4010) - - The scheduler now reports the standard "number-of-documents" attribute - instead of the CUPS-specific "document-count" attribute in - job objects. - - Added new destination connection and enumeration functions (STR #3924) - - Added new option, localization, and job submission functions that do - not depend on PPD files (STR #3925) - - Added a new MaxJobTime directive for cupsd that specifies the maximum - amount of time allowed for a job to complete before it is canceled. - - The default password callback now supports passwords up to 127 - characters. - - The scheduler now supports a DefaultAuthType of "auto" to - automatically choose between Basic (username/password) and Negotiate - (Kerberos) authentication. - - cupsSideChannelSNMPGet/Walk now support OIDs and values up to 64k in - length. - - CUPS no longer supports automatic remote printers or implicit classes - via the CUPS, LDAP, or SLP protocols (STR #3922, STR #3923) - - The PPD APIs are now deprecated and will be removed in a future - version of CUPS (STR #3927) - - The default IPP version for requests is now 2.0 (STR #3929) - - The IPP APIs no longer expose the ipp_t or ipp_attribute_t structures - and instead provide accessor functions (STR #3928) - - The scheduler will no longer run programs with group write permission. - - The PHP module has been removed (STR #3932) - - The bannertops, commandtoescpx, commandtopclx, imagetops, - imagetoraster, pdftops, rastertoescpx, rastertopclx, and texttops - filters have been removed (STR #3930) - - The serial and parallel backends have been removed (STR 3935) diff --git a/CHANGES-1.7.txt b/CHANGES-1.7.txt deleted file mode 100644 index d3438ff..0000000 --- a/CHANGES-1.7.txt +++ /dev/null @@ -1,250 +0,0 @@ -CHANGES-1.7.txt ---------------- - -CHANGES IN CUPS V1.7.5 - - - Security: Addressed some more situations where symlinked files would - be served by the web interface (STR #4455) - - The LPD backend did not work with some versions of glibc (STR #4452) - - CGI scripts did not work (STR #4454) - - The cupsd.conf man page did not list the ErrorPolicy directive - (STR #4457) - - Updated the Brazilian Portuguese translation (STR #4456) - - -CHANGES IN CUPS V1.7.4 - - - Security: The web interface incorrectly served symlinked files and - files that were not world-readable, potentially leading to a - disclosure of information (STR #4450) - - The CUPS headers incorrectly needed libdispatch for blocks support - (STR #4397) - - CUPS did not compile when Avahi or mDNSResponder was not present - (STR #4402, STR #4424) - - The "snmp" option did not work with the network backends (STR #4422) - - The User directive in client.conf did not override the USER - environment variable (STR #4426) - - The web interface now properly shows a "Go" button for all text-based - browsers (STR #4425) - - The MaxJobTime directive now properly supports time values (STR #4434) - - The RPM spec file did not work due to the new Brazilian Portuguese - localization (STR #4436) - - Fixed an "IPP read error" issue (STR #4440) - - Fixed the --disable-libusb configure option (STR #4439) - - Fixed the debug output from the DNS-SD backend when using Avahi - (STR #4444) - - Fixed a bug in the CUPS_SC_GET_DEVICE_ID handling by the network - backends (STR #4447) - - Added USB quirk rule for Lexmark E230 (STR #4448) - - -CHANGES IN CUPS V1.7.3 - - - Added Brazilian Portuguese translation (STR #4409) - - Fixed mapping of OutputBin values such as "Tray1" - () - - Several ippGet* functions incorrectly returned -1 instead of 0 on - error. - - The cupsGetResponse function did not work properly with - CUPS_HTTP_DEFAULT () - - The IPP backend did not abort a job when the printer did not validate - the supplied options () - - Fixed an authentication race condition in cupsSendRequest (STR #4403) - - The scheduler did not add the "job-hold-until-specified" reason when - holding a job using the lp command (STR #4405) - - The configure script incorrectly added libgcrypt as a GNU TLS - dependency (STR #4399) - - cupsGetDestMediaCount did not work for CUPS_MEDIA_FLAGS DEFAULT - (STR #4414) - - Auto-typing of PWG Raster files did not work (STR #4417) - - IPP queues using hardcoded credentials would ask for credentials - (STR #4371) - - Dates in non-UTF-8 locales did not display correctly (STR #4388) - - The RPM spec file now looks for libusb-devel 1.0 or later. - - Fixed the "create-printer-subscription.test" file for IPPTOOL - (STR #4420) - - -CHANGES IN CUPS V1.7.2 - - - Security: The scheduler now blocks URLs containing embedded HTML - (STR #4356) - - Documentation fixes (STR #3259, STR #4346, STR #4355) - - Fixed the Japanese localization (STR #4385) - - Added a German localization (STR #4363) - - The cupsfilter command incorrectly read the cupsd.conf file; it now - reads the cups-files.conf file instead. - - Fixed OS X builds with Xcode 5.x () - - Fixed SSL support on Windows (STR #4358) - - Fixed documentation and naming of Create-Job/Printer-Subscriptions - operations (STR #4389) - - Phone numbers in fax jobs were not properly filtered for IPP FaxOut - () - - Updated Linux "relro" support (STR #4349) - - Fixed a memory leak in the label printer driver (STR #4393) - - cupsEnumDests did not set the "is_default" field (STR #4332) - - cupsDoIORequest could miss the server status, causing failed lpadmin - and other administrative commands (STR #4386) - - cupsEnumDests didn't always call the callback function (STR #4380) - - "lp -i job-id -H hold" did not work (STR #nnn) - - CUPS didn't compile on older platforms (STR #4338) - - Several libcups files did not have the Apple license exception - notice (STR #4361) - - Fixed a D-BUS threading issue that caused the scheduler to crash - (STR #4347) - - The scheduler now automatically reconnects to Avahi as needed - (STR #4370, STR #4373) - - The scheduler did not handle GET requests for the log files properly - (STR #3265) - - The dnssd backend did not always report all discovered printers using - Avahi (STR #4365) - - The Zebra printer driver did not properly handle negative "label top" - values (STR #4354) - - The scheduler did not always update the MakeModel value in - printers.conf after updating the driver (STR #4264) - - The LPD mini daemon did not support print jobs larger than 2GB - (STR #4351) - - Fixed a bug in the status reading code when sending a compressed data - stream to an IPP printer/server () - - The IPP backend might not include all job attributes in Validate-Job - operations () - - Fixed some clang-reported issues () - - -CHANGES IN CUPS V1.7.1 - - - Security: the lppasswd program incorrectly used settings from - ~/.cups/client.conf (STR #4319) - - Auto debug logging was broken in 1.7.0 () - - Some gzip'd PPD files could not be used () - - Cleaned up some job logging in the scheduler - () - - ATTR messages could cause string pool memory corruption in the - scheduler () - - The RPM spec file did not list the build requirements; this was on - purpose, but now we are listing the Red Hat package names - (, STR #4322) - - Printing to a raw queue could result in corrupt output due to - opportunistic compression () - - The GNU TLS support code triggered many compiler warnings due to the - use of old GNU TLS compatibility type names - () - - The "make check" test suite did not work on Linux without the - cups-filters package installed () - - Japanese PPDs using with the Shift-JIS encoding did not work - () - - "tel:" URIs incorrectly had slashes () - - The libusb-based USB backend incorrectly used write timeouts - () - - Shared printers could become inaccessible after a few days on OS X - () - - The IPP backend did not wait for a busy printer to become available - before attempting to print () - - CUPS did not support "auto-monochrome" or "process-monochrome" for the - "print-color-mode" option () - - Using "@IF(name)" in an Allow or Deny rule did not work (STR #4328) - - lpq and lpstat did not list jobs in the correct order when priorities - were specified (STR #4326) - - The D-BUS notifier did not remove its lockfile (STR #4314) - - CUPS incorrectly used the USER environment variable when the name did - not match the user ID (STR #4327) - - -CHANGES IN CUPS V1.7.0 - - - Updated the Japanese localization. - - The lpadmin command did not send the PPD name from the "-m" option - () - - Network backends now use the prtMarkerSuppliesClass property to - determine the direction of supply level values - () - - The scheduler did not remove backup PPD files when a printer was - deleted () - - The scheduler incorrectly responded to HEAD requests when the web - interface was disabled () - - The scheduler did not respond using the hostname specified by the - client () - - Fax queues did not work when shared via Bonjour - () - - Error messages from the scheduler were not localized using the - language specified in the client's IPP request - () - - Added an Italian localization () - - Fixed a couple memory leaks in ippfind that were reported by Clang. - - Fixed a compile issue on 64-bit Linux with Clang - need to use the - -pie option instead of -Wl,-pie now () - - The ippfind utility reported the wrong port numbers when compiled - against Avahi () - - httpGetFd, httpGetFile, httpPutFd, and httpPutFile did not - automatically reconnect if the server closed the connecion after the - previous response. - - Fixed a compile error in libcups () - - The scheduler incorrectly did not pass a FINAL_CONTENT_TYPE - environment variable to the filters or backend - () - - The cups-exec helper program could fail randomly on OS X due to - sandbox violations when closing excess file descriptors - () - - The scheduler incorrectly did not use the kqueue interface on OS X. - - -CHANGES IN CUPS V1.7rc1 - - - Printer xxx-default values were not reported by Get-Printer-Attributes - or lpoptions () - - Fixed deprecation warnings for many functions on OS X so they are tied - to the deployment version when building () - - Fixed a build issue on ARM-based Linux systems - unable to validate - va_list arguments. - - Added a new ippfind tool for finding IPP printers and other Bonjour - services () - - Fixed some issues with conversion of PWG media size names to - hundredths of millimeters () - - The IPP backend could crash on OS X when printing to a Kerberized - printer () - - The ipptool program now automatically extends timeouts when the - output buffer is filled () - - The ipptool program now supports the --help and --version options. - - The ipptool program did not continue past include file errors by - default () - - The ipptool program now supports FILE-ID and TEST-ID directives and - includes their values in its XML output () - - The ipptool program now supports WITH-HOSTNAME, WITH-RESOURCE, and - WITH-SCHEME expect predicates to compare the corresponding URI - components () - - -CHANGES IN CUPS V1.7b1 - - - The configure script now supports a --with-rundir option to change - the transient run-time state directory from the default to other - locations like /run/cups (STR #4306) - - The scheduler now supports PPD lookups for classes (STR #4296) - - The cupsfilter program did not set the FINAL_CONTENT_TYPE - environment variable for filters. - - Added a new "-x" option to the cancel command (STR #4103) - - Made the PWG media handling APIs public (STR #4267) - - Implemented ready media support for the cupsGetDestMediaXxx APIs - (STR #4289) - - Added new cupsFindDestDefault, cupsFindDestReady, and - cupsFindDestSupported APIs (STR #4289) - - Added new cupsGetDestMediaByIndex, cupsGetDestMediaCount, and - cupsGetDestMediaDefault APIs (STR #4289) - - Added new ippGet/SetOctetString APIs for getting and setting an - octetString value (STR #4289) - - Added new ippCreateRequestedArray API for generating a array of - attributes from the requested-attributes attribute. - - The ipptool utility now supports compression, conditional tests based - on the presence of files, and new DEFINE predicates for STATUS. - - Added new IPP APIs for checking values (STR #4167) - - Added new IPP APis for adding and setting formatted strings. - - Added new HTTP APIs to support basic server functionality via libcups. - - The dnssd backend now generates a 1284 device ID as needed (STR #3702) - - CUPS now supports compressing and decompressing streamed data - (STR #4168) - - CUPS now supports higher-level PIN printing, external accounting - systems, and "print here" printing environments (STR #4169) - - IRIX is no longer a supported operating system (STR #4092) - - The PPD compiler now supports JCL options properly (STR #4115) - - The web interface now checks whether the web browser has cookies - enabled and displays a suitable error message (STR #4141) diff --git a/CHANGES-2.0.txt b/CHANGES-2.0.txt deleted file mode 100644 index dc46f03..0000000 --- a/CHANGES-2.0.txt +++ /dev/null @@ -1,215 +0,0 @@ -CHANGES-2.0.txt ---------------- - -CHANGES IN CUPS V2.0.4 - - - Fixed a bug in cupsRasterWritePixels (STR #4650) - - Fixed redirection in the web interface (STR #4538) - - The IPP backend did not respond to side-channel requests (STR #4645) - - The scheduler did not start all pending jobs at once (STR #4646) - - The web search incorrectly searched time-at-xxx values (STR #4652) - - Fixed an RPM spec file issue (STR #4657) - - The scheduler incorrectly started jobs while canceling multiple jobs - (STR #4648) - - Fixed processing of server overrides without port numbers (STR #4675) - - Documentation changes (STR #4651, STR #4674) - - -CHANGES IN CUPS V2.0.3 - - - Security: Fixed CERT VU #810572 exploiting the dynamic linker - (STR #4609) - - Security: The scheduler could hang with malformed gzip data - (STR #4602) - - Restored missing generic printer icon file (STR #4587) - - Fixed logging of configuration errors to show up as errors (STR #4582) - - Fixed potential buffer overflows in raster code and filters - (STR #4598, STR #4599, STR #4600, STR #4601) - - Fixed a gzip processing bug (#4602) - - Fixed inside (STR #4575) - - Fixed lpadmin when both -m and -o are used (STR #4578) - - The web interface always showed support for 2-sided printing - (STR #4595) - - cupsRasterReadHeader did not fully validate the raster header - (STR #4596) - - The rastertopwg filter did not check for truncated input (STR #4597) - - The cups-lpd mini-daemon did not check for request parameters - (STR #4603) - - The scheduler could get caught in a busy loop (STR #4605) - - The sample Epson driver could crash (STR #4616) - - The IPP backend now correctly monitors jobs - () - - The ppdhtml and ppdpo utilities crashed when the -D option was used - before a driver information file (STR #4627) - - ippfind incorrectly substituted "=port" for service_port. - - The IPP/1.1 test file did not handle the initial print job - completing early (STR #4576) - - Fixed a memory leak in cupsConnectDest (STR #4634) - - PWG Raster Format output contained invalid ImageBox values - () - - Added Russian translation (STR #4577) - - Added German translation (STR #4635) - - -CHANGES IN CUPS V2.0.2 - - - Security: cupsRasterReadPixels buffer overflow with invalid page - header and compressed raster data (STR #4551) - - Command-line programs were not localized on Mac OS X - () - - The scheduler incorrectly cleared the MakeModel string in the - printers.conf file after a restart () - - CUPS did not compile with older versions of GNU TLS (STR #4527) - - CUPS did not compile without Avahi or mDNSResponder (STR #4523) - - ippLength() did not return the correct length for IPP_TAG_CONST - string values. - - The scheduler incorrectly aborted jobs after a job was restarted - () - - The cups-files.conf file contained the old ServerCertificate/Key - directives instead of ServerKeychain. - - Fixed builds when no SSL/TLS library is available, or when explicitly - disabled (STR #4531) - - Fixed an OpenBSD charset transcoding issue. - - Fixed USB printing on OpenBSD (STR #4525) - - The --without-xinetd configure option did not work (STR #4542) - - Backends needing to load OS X kernel extensions did not work - () - - Mapping of PPD keywords to IPP keywords did not work if the PPD - keyword was already an IPP keyword () - - cupsGetPPD* sent bad requests (STR #4567) - - ippserver used the wrong temporary directory on Windows (STR #4547) - - ippserver did not handle Bonjour registrations properly (STR #4548) - - The scheduler could crash during shutdown if Avahi was shutdown - first (STR #4550) - - Added a USB quirk rule for Intermec printers (STR #4553) - - The scheduler did not always log which configuration file had the - error (STR #4559) - - The ippfind and ipptool programs now correctly match hostnames with - trailing dots (STR #4563) - - The ipptool timeout option did not work (STR #4515) - - Fixed several issues with client.conf, CUPS_SERVER, and the "-h" - option of most commands (STR #4528) - - Another change for OpenBSD (STR #4526) - - Added Japanese localization (STR #4524) - - Documentation changes (STR #4569) - - -CHANGES IN CUPS V2.0.1 - - - Security: SSLv3 is now disabled by default to protect against the - POODLE attack (STR #4476) - - Printer sharing did not work when systemd was being used (STR #4497) - - cupsGetPPD* would return a symlink to the PPD in /etc/cups/ppd even if - it was not readable by the user (STR #4500) - - The web interface now protects against frame "click-jacking" attacks - (STR #4492) - - Fixed a crash in ippAttributeString () - - Fixed a crash in the scheduler on Linux/*BSD if colord was not running - (STR #4496) - - Fixed a random crash in the scheduler when not using systemd - (STR #4484) - - Added systemd support for cups-lpd (STR #4493) - - The scheduler did not honor the FatalErrors directive for mis- - configured Group and SystemGroup values (STR #4495) - - The network backends no longer report waste-receptacle conditions when - using SNMP (STR #4499) - - The IPP backend did not work with some configurations of Windows - (STR #4503) - - RPMs did not build (STR #4490) - - Added a USB quirk rule for the Brother HL-1250 (STR #4519) - - Fixed compiles on unsupported platforms (STR #4510) - - "cancel -a" did not cancel all jobs on all destinations (STR #4513) - - The web interface did not work on OpenBSD (STR #4496) - - -CHANGES IN CUPS V2.0.0 - - - The scheduler did not preserve listener sockets from launchd or - systemd after a restart () - - Added some USB quirk rules for the libusb-based USB backend - (STR #4482) - - Spanish localization update (STR #4487) - - Updated documentation for 2.0.0 release. - - -CHANGES IN CUPS V2.0rc1 - - - Documentation updates (STR #4464) - - The scheduler now monitors the AC power status on OS X, allowing for - "sleep printing" when sharing printers () - - The scheduler incorrectly called launch_activate_socket multiple times - on OS X () - - The ippserver test program now passes the IPP Everywhere self- - certification tests (STR #4101) - - Relaxed the new OS X filter sandbox slightly (STR #4471, - ) - - Dropped the old Epson Stylus Color/Photo sample drivers since they - don't work with any current printers and there are free alternatives - that produce much better output () - - Log and configuration files that are not world-readable are again - accessible via the web interface (STR #4461) - - PPD files are now created using the permissions specified by the - ConfigFilePerm directive. - - Fixed RPM build issues (STR #4459) - - Fixed the spinner image and restart page when reconfiguring the - scheduler through the web interface (STR #4475) - - -CHANGES IN CUPS V2.0b1 - - - Added a "--list-filters" option to the cupsfilter command (STR #4325) - - Added systemd support (STR #3917) - - Added support for re-sending a job as a raster file if a higher-level - format such as PDF fails () - - Added support for regular expression matching in the MIME type rules - () - - Added support for TLS certificate validation and policy enforcement - (STR #1616) - - Added support for simultaneous XML and test output from ipptool. - - Added support for PAUSE directive in ipptool test files. - - Added support for auto-typing of TIFF files by ipptool (STR #4418) - - The scheduler now returns completed jobs in the correct newest-to- - oldest order (STR #4396) - - The configure script now supports target-specific tools for pkg-config - and others (STR #4423) - - The ipptool program now supports EXPECT statements for collection - member attributes () - - The ipptool program now supports collection attributes with multiple - values () - - The sample drivers now include all of the installed localizations by - default () - - Adopted Linux man page conventions and updated all man pages - (STR #4372, STR #4329) - - The scheduler now supports the "first-index" operation attribute for - the Get-Jobs operation (STR #2913) - - Changed the default AccessLogLevel and PageLogFormat to disable the - access_log and page_log files by default () - - cupsRasterInterpretPPD now supports the Orientation header in order to - support long-edge feed raster printers () - - The scheduler now allows run-as-root backends to have group read and - execute permissions (STR #2935) - - The ippFindAttribute and ippFindNextAttribute functions now support - hierarchical searches (STR #4395) - - Dropped OpenSSL support in favor of GNU TLS. - - Dropped "dark wake" support on OS X, which was preventing portables - from going to sleep when there was a stuck job. We now use a variation - of the CUPS 1.4 sleep support to do a cleaner sleep - () - - Dropped support for AIX, HP-UX, and OSF/1 (aka Digital UNIX) - - Dropped lppasswd and support for Digest authentication in in the - scheduler (STR #4321) - - The cupsGetClasses, cupsGetPrinters, and cupsTempFile functions are no - longer supported. - - The scheduler now caches more job history data and limits the number - of completed jobs returned by Get-Jobs as needed in order to prevent a - denial-of-service on busy servers (STR #2913) - - The filter/backend sandbox on OS X now defaults to a more strict - whitelist () - - Increased the default idle exit timeout to 60 seconds on OS X - () - - Printer classes were not accessible on OS X - () - - The scheduler now uses to close the default printer - definition in printers.conf (STR #4153) - - Canceling all jobs in the web interface now just cancels the jobs - (STR #1914) diff --git a/CHANGES-2.1.txt b/CHANGES-2.1.txt deleted file mode 100644 index 7a6b548..0000000 --- a/CHANGES-2.1.txt +++ /dev/null @@ -1,150 +0,0 @@ -CHANGES-2.1.txt ---------------- - -CHANGES IN CUPS V2.1.4 - - - Fixed reporting of 1284 Device IDs (Issue #3835, PR #3836) - - Fixed printing of multiple files to raw queues (Issue #4782) - - The scheduler did not implement the Hold-New-Jobs opertion correctly - (Issue #4767) - - The ipptool program truncated values at 8k (Issue #4786) - - The ipptool program did not correctly report uriScheme values in plist - output (Issue #4785) - - The cups-lpd mini-daemon incorrectly included the document-name - attribute when creating a job. It should only be included when - sending a job (Issue #4790) - - USB quirk updates (Issue #4778, Issue #4789) - - Documentation update (Issue #4772) - - -CHANGES IN CUPS V2.1.3 - - - The default password function did not work on some platforms - (Issue #4750) - - The scheduler should not exit under memory pressure - () - - The EPL2 and ZPL sample drivers did not properly support the CutMedia - option. - - Pending subscriptions would prevent the scheduler from idle exiting - (Issue #4754) - - Fixed some issues in ipptool for skipped tests - () - - The "lp -H resume" command did not reset the "job-state-reasons" - attribute value (Issue #4752) - - cupsEncodeOptions2 incorrectly handled escaped values - () - - The scheduler did not allow access to resource files (icons, etc.) - when the web interface was disabled (Issue #4755) - - Localization fix (Issue #4756) - - -CHANGES IN CUPS V2.1.2 - - - Re-release of CUPS 2.1.1 as CUPS 2.1.2 due to error in tagging of the - 2.1.1 release (pulled content from the 2.2.x tree instead) - - -CHANGES IN CUPS V2.1.1 - - - Security hardening fixes (, - , , - , , - , , - , , - , , - , , - , , - , , - , , - ) - - The cupsGetPPD* functions did not work with IPP printers (Issue #4725) - - Some older HP LaserJet printers need a delayed close when printing - using the libusb-based USB backend (Issue #4549) - - The libusb-based USB backend did not unload the kernel usblp module - if it was preventing the backend from accessing the printer - (Issue #4707) - - Current Primera printers were incorrectly reported as Fargo printers - (Issue #4708) - - The IPP backend did not always handle jobs getting canceled at the - printer () - - Scheduler logging change (Issue #4728) - - Added USB quirk for Canon MP530 (Issue #4730) - - The scheduler did not deliver job notifications for jobs submitted to - classes (Issue #4733) - - Changing the printer-is-shared value for a remote queue did not - produce an error (Issue #4738) - - The IPP backend incorrectly included the job-password attribute in - Validate-Job requests () - - Updated localizations (Issue #4709) - - -CHANGES IN CUPS V2.1.0 - - - Fixed more scheduler crash bugs in the new logging code (Issue #4687, - Issue #4690) - - The scheduler did not use the ConfigFilePerm setting when copying PPD - files or interface scripts attached to a request (Issue #4703) - - Now support new Chinese locale IDs and their correct fallback locales - (, ) - - "make check" incorrectly reported an expectation of 18 warning - messages when 8 were expected (Issue #4684) - - The new PDF file type rule did not work (Issue #4692) - - The scheduler did not update the jobs.cache file when job files were - expired (Issue #4706) - - Fixed some configure script issues (Issue #4694, Issue #4695, Issue #4698) - - Documentation updates (Issue #4691, Issue #4693) - - -CHANGES IN CUPS V2.1rc1 - - - Added support for 3D printers (basic types only, no built-in filters) - based on PWG white paper. - - Fixed bugs in the new journald support (Issue #4655, Issue #4658, - Issue #4661) - - Fixed domain socket support on Linux (Issue #4679) - - Fixed signal handlers in the dnssd and usb backends (Issue #4671) - - in sections now applies to all operations when - used by itself (Issue #4659) - - Configure script changes for systemd support (Issue #4669) - - Updated autoconf sources to use newer form of AC_INIT (Issue #4664) - - -CHANGES IN CUPS V2.1b1 - - - Improved speed of ppdMarkDefaults for complex/large PPDs - () - - The IPP backend now stops sending print data if the printer indicates - the job has been aborted or canceled () - - The IPP backend now sends the job-pages-per-set attribute when - printing multiple copy jobs with finishings - () - - The IPP backend now updates the cupsMandatory values when the printer - configuration changes () - - No longer install banner files since third-party banner filters now - supply their own (Issue #4518) - - Added support for EXPECT-ALL directive in ipptool test files - (Issue #4469) - - Added support for WITH-VALUE-FROM predicate in ipptool test files - (Issue #4470) - - The scheduler no longer listens on the loopback interface unless the - web interface or printer sharing are enabled - () - - Added a PPD generator for IPP Everywhere printers (Issue #4258) - - Now install "default" versions of more configuration files - () - - The cupstestppd program did not handle "maxsize(nnn)" entries in - cupsFilter/cupsFilter2 values () - - The scheduler now checks the return value of rename() calls - (Issue #4589) - - The scheduler now validates ErrorPolicy values in config files - (Issue #4591) - - Long cookies caused the web interface to stop working (Issue #4619) - - Added SSLOptions values to allow Diffie-Hellman key exchange and - disable TLS/1.0 support. - - Updated the scheduler to support more IPP Everywhere attributes - (Issue #4630) - - The scheduler now supports advanced ASL and journald logging when - "syslog" output is configured (Issue #4474) - - The scheduler now supports logging to stderr when running in the - foreground (Issue #4505) - diff --git a/CHANGES.txt b/CHANGES.txt index 24270ba..ce57fe2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,183 +1,352 @@ -CHANGES - 2.2.4 - 2017-06-30 +CHANGES - 2.3.0 - 2019-08-23 ============================ -CHANGES IN CUPS V2.2.4 + +Changes in CUPS v2.3.0 ---------------------- -- The scheduler did not remove old job files (Issue #4987) -- cupsEnumDests did not return early when all printers had been discovered - (Issue #4989) -- The CUPS build system now supports cross-compilation (Issue #4897) -- Added a new CUPS Programming Manual to replace the aging API documentation. -- Added the `cupsAddIntegerOption` and `cupsGetIntegerOption` functions - (Issue #4992) -- The `cupsGetDests` and `cupsCreateJob` functions now support Bonjour printers - (Issue #4993) -- Added a USB quirk rule for Lexmark E260dn printers (Issue #4994) -- Fixed a potential buffer overflow in the `cupstestppd` utility (Issue #4996) -- IPP Everywhere improvements (Issue #4998) -- Fixed the "cancel all jobs" function in the web interface for several - languages (Issue #4999) -- Fixed issues with local queues (Issue #5003, Issue #5008, Issue #5009) -- The `lpstat` command now supports a `-e` option to enumerate local printers - (either previously added or on the network) that can be accessed - (Issue #5005) -- The `lp` and `lpr` commands now support printing to network printers that - haven't yet been added (Issue #5006) -- Fixed a typo in the mime.types file. -- Fixed a bug in the Spanish web interface template (Issue #5016) -- The `cupsEnumDests*` and `cupsGetDest*` functions now report the value of the - "printer-is-temporary" Printer Status attribute (Issue #5028) -- Added Chinese localization (Issue #5029) -- The `cupsCheckDestSupported` function did not support `NULL` values - (Issue #5031) -- Fixed some issues in the RPM spec file (Issue #5032) -- The `cupsConnectDest` function now supports the `CUPS_DEST_FLAGS_DEVICE` flag - for explicitly connecting to the device (printer) associated with the - destination. -- The `SSLOptions` directive in "client.conf" and "cupsd.conf" now supports - `DenyCBC` and `DenyTLS1.0` options (Issue #5037) +- CVE-2019-8696 and CVE-2019-8675: Fixed SNMP buffer overflows (rdar://51685251) +- Added a GPL2/LGPL2 exception to the new CUPS license terms. +- Documentation updates (Issue #5604) +- Localization updates (Issue #5637) +- Fixed a bug in the scheduler job cleanup code (Issue #5588) +- Fixed builds when there is no TLS library (Issue #5590) +- Eliminated some new GCC compiler warnings (Issue #5591) +- Removed dead code from the scheduler (Issue #5593) +- "make" failed with GZIP options (Issue #5595) +- Fixed potential excess logging from the scheduler when removing job files + (Issue #5597) +- Fixed a NULL pointer dereference bug in `httpGetSubField2` (Issue #5598) +- Added FIPS-140 workarounds for GNU TLS (Issue #5601, Issue #5622) +- The scheduler no longer provides a default value for the description + (Issue #5603) +- The scheduler now logs jobs held for authentication using the error level so + it is clear what happened (Issue #5604) +- The `lpadmin` command did not always update the PPD file for changes to the + `cupsIPPSupplies` and `cupsSNMPSupplies` keywords (Issue #5610) +- The scheduler now uses both the group's membership list as well as the + various OS-specific membership functions to determine whether a user belongs + to a named group (Issue #5613) +- Added USB quirks rule for HP LaserJet 1015 (Issue #5617) +- Fixed some PPD parser issues (Issue #5623, Issue #5624) +- The IPP parser no longer allows invalid member attributes in collections + (Issue #5630) +- The configure script now treats the "wheel" group as a potential system + group (Issue #5638) +- Fixed a USB printing issue on macOS (rdar://31433931) +- Fixed IPP buffer overflow (rdar://50035411) +- Fixed memory disclosure issue in the scheduler (rdar://51373853) +- Fixed DoS issues in the scheduler (rdar://51373929) +- Fixed an issue with unsupported "sides" values in the IPP backend + (rdar://51775322) +- The scheduler would restart continuously when idle and printers were not + shared (rdar://52561199) +- Fixed an issue with `EXPECT !name WITH-VALUE ...` tests. +- Fixed a command ordering issue in the Zebra ZPL driver. +- Fixed a memory leak in `ppdOpen`. -CHANGES IN CUPS V2.2.3 ----------------------- - -- The IPP backend could get into an infinite loop for certain errors, causing a - hung queue () -- The scheduler could pause responding to client requests in order to save state - changes to disk () -- Added support for PPD finishing keywords (Issue #4960, Issue #4961, - Issue #4962) -- The IPP backend did not send a media-col attribute for just the source or type - (Issue #4963) -- IPP Everywhere print queues did not always support all print qualities - supported by the printer (Issue #4953) -- IPP Everywhere print queues did not always support all media types supported - by the printer (Issue #4953) -- The IPP Everywhere PPD generator did not return useful error messages - (Issue #4954) -- The IPP Everywhere finishings support did not work correctly with common UI or - command-line options (Issue #4976) -- Fixed an error handling issue for the network backends (Issue #4979) -- The default cupsd.conf file did not work on systems compiled without Kerberos - support (Issue #4947) -- The "reprint job" option was not available for some canceled jobs - (Issue #4915) -- Updated the job listing in the web interface (Issue #4978) -- Fixed some localization issues on macOS () - - -CHANGES IN CUPS V2.2.2 ----------------------- - -- Fixed some issues with the Zebra ZPL printer driver (Issue #4898) -- Fixed some issues with IPP Everywhere printer support (Issue #4893, - Issue #4909, Issue #4916, Issue #4921, Issue #4923, Issue #4932, Issue #4933, - Issue #4938) -- The rastertopwg filter could crash with certain input (Issue #4942) -- Optimized connection usage in the IPP backend () -- The scheduler did not detect when an encrypted connection was closed by the - client on Linux (Issue #4901) -- The cups-lpd program did not catch all legacy usage of ISO-8859-1 - (Issue #4899) -- Fixed builds on systems without a working poll() implementation (Issue #4905) -- Added a USB quirk rule for the Kyocera Ecosys P6026cdn (Issue #4900) -- The scheduler no longer creates log files on startup - () -- The ippContainsString function now uses case-insensitive comparisons for - mimeMediaType, name, and text values in conformance with RFC 2911. -- The network backends now log the addresses that were found for a printer - () -- Let's Encrypt certificates did not work when the hostname contained uppercase - letters (Issue #4919) -- Fixed reporting of printed pages in the web interface (Issue #4924) -- Updated systemd config files (Issue #4935) -- Updated documentation (PR #4896) -- Updated localizations (PR #4894, PR #4895, PR #4904, PR #4908, Issue #4946) -- Updated packaging files (Issue #4940) - - -CHANGES IN CUPS V2.2.1 ----------------------- - -- Added "CreateSelfSignedCerts" directive for cups-files.conf to control whether - the scheduler automatically creates its own self-signed X.509 certificates for - TLS connections (Issue #4876) -- http*Connect did not handle partial failures (Issue #4870) -- Addressed some build warnings on Linux (Issue #4881) -- cupsHashData did not use the correct hashing algorithm - () -- Updated man pages (PR #4885) -- Updated localizations (PR #4877, PR #4886) - - -CHANGES IN CUPS V2.2.0 ----------------------- - -- Normalized the TLS certificate validation code and added additional error - messages to aid troubleshooting. -- The httpConnect functions did not work on Linux when cupsd was not running - (Issue #4870) -- The --no-remote-any option of cupsctl had no effect (Issue #4866) -- http*Connect did not return early when all addresses failed (Issue #4870) - - -CHANGES IN CUPS V2.2rc1 +Changes in CUPS v2.3rc1 ----------------------- -- Updated the list of supported IPP Everywhere media types. -- The IPP backend did not validate TLS credentials properly. -- The printer-state-message attribute was not cleared after a print job with no - errors (Issue #4851) -- The CUPS-Add-Modify-Class and CUPS-Add-Modify-Printer operations did not - always return an error for failed adds (Issue #4854) -- PPD files with names longer than 127 bytes did not work (Issue #4860) -- Updated localizations (Issue #4846, PR #4858) +- The `cups-config` script no longer adds extra libraries when linking against + shared libraries (Issue #5261) +- The supplied example print documents have been optimized for size + (Issue #5529) +- The `cupsctl` command now prevents setting "cups-files.conf" directives + (Issue #5530) +- The "forbidden" message in the web interface is now explained (Issue #5547) +- The footer in the web interface covered some content on small displays + (Issue #5574) +- The libusb-based USB backend now enforces read limits, improving print speed + in many cases (Issue #5583) +- The `ippeveprinter` command now looks for print commands in the "command" + subdirectory. +- The `ipptool` command now supports `$date-current` and `$date-start` variables + to insert the current and starting date and time values, as well as ISO-8601 + relative time values such as "PT30S" for 30 seconds in the future. -CHANGES IN CUPS V2.2b2 +Changes in CUPS v2.3b8 ---------------------- -- Added Upstart support (PR #4825) -- CUPS now supports Let's Encrypt certificates on Linux. +- Media size matching now uses a tolerance of 0.5mm (rdar://33822024) +- The lpadmin command would hang with a bad PPD file (rdar://41495016) +- Fixed a potential crash bug in cups-driverd (rdar://46625579) +- Fixed a performance regression with large PPDs (rdar://47040759) +- Fixed a memory reallocation bug in HTTP header value expansion + (rdar://problem/50000749) +- Timed out job submission now yields an error (Issue #5570) +- Restored minimal support for the `Emulators` keyword in PPD files to allow + old Samsung printer drivers to continue to work (Issue #5562) +- The scheduler did not encode octetString values like "job-password" correctly + for the print filters (Issue #5558) +- The `cupsCheckDestSupported` function did not check octetString values + correctly (Issue #5557) +- Added support for `UserAgentTokens` directive in "client.conf" (Issue #5555) +- Updated the systemd service file for cupsd (Issue #5551) +- The `ippValidateAttribute` function did not catch all instances of invalid + UTF-8 strings (Issue #5509) +- Fixed an issue with the self-signed certificates generated by GNU TLS + (Issue #5506) +- Fixed a potential memory leak when reading at the end of a file (Issue #5473) +- Fixed potential unaligned accesses in the string pool (Issue #5474) +- Fixed a potential memory leak when loading a PPD file (Issue #5475) +- Added a USB quirks rule for the Lexmark E120n (Issue #5478) +- Updated the USB quirks rule for Zebra label printers (Issue #5395) +- Fixed a compile error on Linux (Issue #5483) +- The lpadmin command, web interface, and scheduler all queried an IPP + Everywhere printer differently, resulting in different PPDs for the same + printer (Issue #5484) +- The web interface no longer provides access to the log files (Issue #5513) +- Non-Kerberized printing to Windows via IPP was broken (Issue #5515) +- Eliminated use of private headers and some deprecated macOS APIs (Issue #5516) +- The scheduler no longer stops a printer if an error occurs when a job is + canceled or aborted (Issue #5517) +- Added a USB quirks rule for the DYMO 450 Turbo (Issue #5521) +- Added a USB quirks rule for Xerox printers (Issue #5523) +- The scheduler's self-signed certificate did not include all of the alternate + names for the server when using GNU TLS (Issue #5525) +- Fixed compiler warnings with newer versions of GCC (Issue #5532, Issue #5533) +- Fixed some PPD caching and IPP Everywhere PPD accounting/password bugs + (Issue #5535) +- Fixed `PreserveJobHistory` bug with time values (Issue #5538) +- The scheduler no longer advertises the HTTP methods it supports (Issue #5540) +- Localization updates (Issue #5461, Issues #5471, Issue #5481, Issue #5486, + Issue #5489, Issue #5491, Issue #5492, Issue #5493, Issue #5494, Issue #5495, + Issue #5497, Issue #5499, Issue #5500, Issue #5501, Issue #5504) +- The scheduler did not always idle exit as quickly as it could. +- Added a new `ippeveprinter` command based on the old ippserver sample code. -CHANGES IN CUPS V2.2b1 +Changes in CUPS v2.3b7 ---------------------- -- All CUPS commands now support POSIX options (Issue #4813) -- The scheduler now restarts faster (Issue #4760) -- Improved performance of web interface with large numbers of jobs (Issue #3819) -- Encrypted printing can now be limited to only trusted printers and servers - () -- The scheduler now advertises PWG Raster attributes for IPP Everywhere clients - (Issue #4428) -- The scheduler now logs informational messages for jobs at LogLevel "info" - (Issue #4815) -- The scheduler now uses the getgrouplist function when available (Issue #4611) -- The IPP backend no longer enables compression by default except for certain - raster formats that generally benefit from it () -- The scheduler did not handle out-of-disk situations gracefully (Issue #4742) -- The LPD mini-daemon now detects invalid UTF-8 sequences in job, document, and - user names (Issue #4748) -- The IPP backend now continues on to the next job when the remote server/ - printer puts the job on hold () -- The scheduler did not cancel multi-document jobs immediately - () -- The scheduler did not return non-shared printers to local clients unless they - connected to the domain socket () -- The scheduler now reads the spool directory if one or more job cache entries - point to deleted jobs () -- Added support for disc media sizes () -- The httpAddrConnect and httpConnect* APIs now try connecting to multiple - addresses in parallel () -- The cupsd domain socket is no longer world-accessible on macOS - () -- Interface scripts are no longer supported for security reasons - () -- Added a new cupsHashData API and support for hashed job passwords - () -- Localization fixes (, , - Issue #4041, Issue #4796) -- Documentation changes (Issue #4624, Issue #4781) -- Packaging fixes (PR #4832) +- Fixed some build failures (Issue #5451, Issue #5463) +- Running ppdmerge with the same input and output filenames did not work as + advertised (Issue #5455) + + +Changes in CUPS v2.3b6 +---------------------- + +- Localization update (Issue #5339, Issue #5348, Issue #5362, Issue #5408, + Issue #5410) +- Documentation updates (Issue #5369, Issue #5402, Issue #5403, Issue #5404) +- CVE-2018-4300: Linux session cookies used a predictable random number seed. +- All user commands now support the `--help` option (Issue #5326) +- The `lpoptions` command now works with IPP Everywhere printers that have not + yet been added as local queues (Issue #5045) +- The lpadmin command would create a non-working printer in some error cases + (Issue #5305) +- The scheduler would crash if an empty `AccessLog` directive was specified + (Issue #5309) +- The scheduler did not idle-exit on some Linux distributions (Issue #5319) +- Fixed a regression in the changes to ippValidateAttribute (Issue #5322, + Issue #5330) +- Fixed a crash bug in the Epson dot matrix driver (Issue #5323) +- Automatic debug logging of job errors did not work with systemd (Issue #5337) +- The web interface did not list the IPP Everywhere "driver" (Issue #5338) +- The scheduler did not report all of the supported job options and values + (Issue #5340) +- The IPP Everywhere "driver" now properly supports face-up printers + (Issue #5345) +- Fixed some typos in the label printer drivers (Issue #5350) +- Setting the `Community` name to the empty string in `snmp.conf` now disables + SNMP supply level monitoring by all the standard network backends + (Issue #5354) +- Multi-file jobs could get stuck if the backend failed (Issue #5359, + Issue #5413) +- The IPP Everywhere "driver" no longer does local filtering when printing to + a shared CUPS printer (Issue #5361) +- The lpadmin command now correctly reports IPP errors when configuring an + IPP Everywhere printer (Issue #5370) +- Fixed some memory leaks discovered by Coverity (Issue #5375) +- The PPD compiler incorrectly terminated JCL options (Issue #5379) +- The cupstestppd utility did not generate errors for missing/mismatched + CloseUI/JCLCloseUI keywords (Issue #5381) +- The scheduler now reports the actual location of the log file (Issue #5398) +- Added USB quirk rules (Issue #5395, Issue #5420, Issue #5443) +- The generated PPD files for IPP Everywhere printers did not contain the + cupsManualCopies keyword (Issue #5433) +- Kerberos credentials might be truncated (Issue #5435) +- The handling of `MaxJobTime 0` did not match the documentation (Issue #5438) +- Fixed a bug adding a queue with the `-E` option (Issue #5440) +- The `cupsaddsmb` program has been removed (Issue #5449) +- The `cupstestdsc` program has been removed (Issue #5450) +- The scheduler was being backgrounded on macOS, causing applications to spin + (rdar://40436080) +- The scheduler did not validate that required initial request attributes were + in the operation group (rdar://41098178) +- Authentication in the web interface did not work on macOS (rdar://41444473) +- Fixed an issue with HTTP Digest authentication (rdar://41709086) +- The scheduler could crash when job history was purged (rdar://42198057) +- Fixed a crash bug when mapping PPD duplex options to IPP attributes + (rdar://46183976) +- Fixed a memory leak for some IPP (extension) syntaxes. +- The `cupscgi`, `cupsmime`, and `cupsppdc` support libraries are no longer + installed as shared libraries. +- The `snmp` backend is now deprecated. + + +Changes in CUPS v2.3b5 +---------------------- + +- The `ipptool` program no longer checks for duplicate attributes when running + in list or CSV mode (Issue #5278) +- The `cupsCreateJob`, `cupsPrintFile2`, and `cupsPrintFiles2` APIs did not use + the supplied HTTP connection (Issue #5288) +- Fixed another crash in the scheduler when adding an IPP Everywhere printer + (Issue #5290) +- Added a workaround for certain web browsers that do not support multiple + authentication schemes in a single response header (Issue #5289) +- Fixed policy limits containing the `All` operation (Issue #5296) +- The scheduler was always restarted after idle-exit with systemd (Issue #5297) +- Added a USB quirks rule for the HP LaserJet P1102 (Issue #5310) +- The mailto notifier did not wait for the welcome message (Issue #5312) +- Fixed a parsing bug in the pstops filter (Issue #5321) +- Documentation updates (Issue #5299, Issue #5301, Issue #5306) +- Localization updates (Issue #5317) +- The scheduler allowed environment variables to be specified in the + `cupsd.conf` file (rdar://37836779, rdar://37836995, rdar://37837252, + rdar://37837581) +- Fax queues did not support pause (p) or wait-for-dialtone (w) characters + (rdar://39212256) +- The scheduler did not validate notify-recipient-uri values properly + (rdar://40068936) +- The IPP parser allowed invalid group tags (rdar://40442124) +- Fixed a parsing bug in the new authentication code. + + +Changes in CUPS v2.3b4 +---------------------- + +- NOTICE: Printer drivers are now deprecated (Issue #5270) +- Kerberized printing to another CUPS server did not work correctly + (Issue #5233) +- Fixed printing to some IPP Everywhere printers (Issue #5238) +- Fixed installation of filters (Issue #5247) +- The scheduler now supports using temporary print queues for older IPP/1.1 + print queues like those shared by CUPS 1.3 and earlier (Issue #5241) +- Star Micronics printers need the "unidir" USB quirk rule (Issue #5251) +- Documentation fixes (Issue #5252) +- Fixed a compile issue when PAM is not available (Issue #5253) +- Label printers supported by the rastertolabel driver don't support SNMP, so + don't delay printing to test it (Issue #5256) +- The scheduler could crash while adding an IPP Everywhere printer (Issue #5258) +- The Lexmark Optra E310 printer needs the "no-reattach" USB quirk rule + (Issue #5259) +- Systemd did not restart cupsd when configuration changes were made that + required a restart (Issue #5263) +- The IPP Everywhere PPD generator did not include the `cupsJobPassword` + keyword, when supported (Issue #5265) +- Fixed an Avahi crash bug in the scheduler (Issue #5268) +- Raw print queues are now deprecated (Issue #5269) +- Fixed an RPM packaging problem (Issue #5276) +- The IPP backend did not properly detect failed PDF prints (rdar://34055474) +- TLS connections now properly timeout (rdar://34938533) +- Temp files could not be created in some sandboxed applications + (rdar://37789645) +- The ipptool `--ippserver` option did not encode out-of-band attributes + correctly. +- Added public `cupsEncodeOption` API for encoding a single option as an IPP + attribute. +- Removed support for the `-D_PPD_DEPRECATED=""` developer cheat - the PPD API + should no longer be used. +- Removed support for `-D_IPP_PRIVATE_STRUCTURES=1` developer cheat - the IPP + accessor functions should be used instead. + + +Changes in CUPS v2.3b3 +---------------------- + +- More fixes for printing to old CUPS servers (Issue #5211) +- The IPP Everywhere PPD generator did not support deep grayscale or 8-bit per + component AdobeRGB (Issue #5227) +- Additional changes for the scheduler to substitute default values for invalid + job attributes when running in "relaxed conformance" mode (Issue #5229) +- Localization changes (Issue #5232, rdar://37068158) +- The `cupsCopyDestInfo` function did not work with all print queues + (Issue #5235) + + +Changes in CUPS v2.3b2 +---------------------- + +- Localization changes (Issue #5210) +- Build fixes (Issue #5217) +- IPP Everywhere PPDs were not localized to English (Issue #5205) +- The `cupsGetDests` and `cupsEnumDests` functions no longer filter out local + print services like IPP USB devices (Issue #5206) +- The `cupsCopyDest` function now correctly copies the `is_default` value + (Issue #5208) +- Printing to old CUPS servers has been fixed (Issue #5211) +- The `ppdInstallableConflict` tested too many constraints (Issue #5213) +- All HTTP field values can now be longer than `HTTP_MAX_VALUE` bytes + (Issue #5216) +- Added a USB quirk rule for Canon MP280 series printers (Issue #5221) +- The `cupsRasterWritePixels` function did not correctly swap bytes for some + formats (Issue #5225) +- Fixed an issue with mapping finishing options (rdar://34250727) +- The `ppdLocalizeIPPReason` function incorrectly returned a localized version + of "none" (rdar://36566269) +- The scheduler did not add ".local" to the default DNS-SD host name when + needed. + + +Changes in CUPS v2.3b1 +---------------------- + +- CUPS is now provided under the Apache License, Version 2.0. +- Documentation updates (Issue #4580, Issue #5177, Issue #5192) +- The `cupsCopyDestConflicts` function now handles collection attribute + ("media-col", "finishings-col", etc.) constraints (Issue #4096) +- The `lpoptions` command incorrectly saved default options (Issue #4717) +- The `lpstat` command now reports when new jobs are being held (Issue #4761) +- The `ippfind` command now supports finding printers whose name starts with an + underscore (Issue #4833) +- The CUPS library now supports the latest HTTP Digest authentication + specification including support for SHA-256 (Issue #4862) +- The scheduler now supports the "printer-id" attribute (Issue #4868) +- No longer support backslash, question mark, or quotes in printer names + (Issue #4966) +- The scheduler no longer logs pages as they are printed, instead just logging + a total of the pages printed at job completion (Issue #4991) +- Dropped RSS subscription management from the web interface (Issue #5012) +- Bonjour printer sharing now uses the DNS-SD hostname (or ServerName value if + none is defined) when registering shared printers on the network (Issue #5071) +- The `ipptool` command now supports writing `ippserver` attributes files + (Issue #5093) +- The `lp` and `lpr` commands now provide better error messages when the default + printer cannot be found (Issue #5096) +- The `lpadmin` command now provides a better error message when an unsupported + System V interface script is used (Issue #5111) +- The scheduler did not write out dirty configuration and state files if there + were open client connections (Issue #5118) +- The `SSLOptions` directive now supports `MinTLS` and `MaxTLS` options to + control the minimum and maximum TLS versions that will be allowed, + respectively (Issue #5119) +- Dropped hard-coded CGI scripting language support (Issue #5124) +- The `cupsEnumDests` function did not include options from the lpoptions + files (Issue #5144) +- Fixed the `ippserver` sample code when threading is disabled or unavailable + (Issue #5154) +- Added label markup to checkbox and radio button controls in the web interface + templates (Issue #5161) +- Fixed group validation on OpenBSD (Issue #5166) +- Improved IPP Everywhere media support, including a new + `cupsAddDestMediaOptions` function (Issue #5167) +- IPP Everywhere PPDs now include localizations of printer-specific media types, + when available (Issue #5168) +- The cups-driverd program incorrectly stopped scanning PPDs as soon as a loop + was seen (Issue #5170) +- IPP Everywhere PPDs now support IPP job presets (Issue #5179) +- IPP Everywhere PPDs now support finishing templates (Issue #5180) +- Fixed a journald support bug in the scheduler (Issue #5181) +- Fixed PAM module detection and added support for the common PAM definitions + (Issue #5185) +- The scheduler now substitutes default values for invalid job attributes when + running in "relaxed conformance" mode (Issue #5186) +- The scheduler did not work with older versions of uClibc (Issue #5188) +- The scheduler now generates a strings file for localizing PPD options + (Issue #5194) diff --git a/CONTRIBUTING.txt b/CONTRIBUTING.txt new file mode 100644 index 0000000..2421d0d --- /dev/null +++ b/CONTRIBUTING.txt @@ -0,0 +1,15 @@ +Contributing to CUPS +==================== + +CUPS is developed by Apple Inc. and distributed as open source software under +the Apache License, Version 2.0 with exceptions to allow linking to GPL2/LGPL2 +code. Significant contributions to CUPS must be licensed to Apple using the +Apple Contributor Agreement: + + https://www.cups.org/AppleContributorAgreement_2011-03-10.pdf + +Contributions should be submitted as attachments to bug reports on the +[CUPS Github project](https://github.com/apple/cups). Changes to existing +source files should be submitted as unified diffs while new source files +should be provided as-is or in an archive. Github pull requests can also be +used to submit changes. diff --git a/CREDITS.txt b/CREDITS.txt index 7d5a8b9..8b1a15d 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -1,4 +1,4 @@ -CREDITS - 2017-05-01 +CREDITS - 2019-08-21 ==================== Few projects are completed by one person, and CUPS is no exception. We'd like diff --git a/DEVELOPING.txt b/DEVELOPING.txt new file mode 100644 index 0000000..df76323 --- /dev/null +++ b/DEVELOPING.txt @@ -0,0 +1,626 @@ +Developing for CUPS +=================== + +Please see the [Contributing to CUPS](CONTRIBUTING.md) file for information on +contributing to the CUPS project. + + +How To Contact The Developers +----------------------------- + +The CUPS mailing lists are the primary means of asking questions and informally +discussing issues and feature requests with the CUPS developers and other +experienced CUPS users and developers. The "cups" mailing list is intended for +CUPS usage questions and new software announcements while the "cups-devel" +mailing list provides a forum for CUPS developers and monitoring new bugs. + + +Interfaces +---------- + +CUPS interfaces, including the C APIs and command-line arguments, environment +variables, configuration files, and output format, are stable across patch +versions and are generally backwards-compatible with interfaces used in prior +major and minor versions. However, program interfaces such as those used by +the scheduler to run filter, port monitor, and backend processes for job +processing should only be considered stable from the point of view of a +filter, port monitor, or backend. Software that simulates the scheduler in +order to run those programs outside of CUPS must necessarily be updated when +the corresponding interface is changed in a subsequent CUPS release, otherwise +undefined behavior can occur. + +CUPS C APIs starting with an underscore (`_`) are considered to be private to +CUPS and are not subject to the normal guarantees of stability between CUPS +releases and must never be used in non-CUPS source code. Similarly, +configuration and state files written by CUPS are considered private if a +corresponding man page is not provided with the CUPS release. Never rely on +undocumented files or formats when developing software for CUPS. Always use a +published C API to access data stored in a file to avoid compatibility problems +in the future. + + +Build System +------------ + +The CUPS build system uses GNU autoconf to tailor the library to the local +operating system. Project files for the current release of Microsoft Visual +Studio are also provided for Microsoft Windows®. To improve portability, +makefiles must not make use of features unique to GNU make. See the MAKEFILE +GUIDELINES section for a description of the allowed make features and makefile +guidelines. + +Additional GNU build programs such as GNU automake and GNU libtool must not be +used. GNU automake produces non-portable makefiles which depend on GNU- +specific extensions, and GNU libtool is not portable or reliable enough for +CUPS. + + +Version Numbering +----------------- + +CUPS uses a three-part version number separated by periods to represent the +major, minor, and patch release numbers. Major release numbers indicate large +design changes or backwards-incompatible changes to the CUPS API or CUPS +Imaging API. Minor release numbers indicate new features and other smaller +changes which are backwards-compatible with previous CUPS releases. Patch +numbers indicate bug fixes to the previous feature or patch release. This +version numbering scheme is consistent with the +[Semantic Versioning](http://semver.org) specification. + +> Note: +> +> When we talk about compatibility, we are talking about binary compatibility +> for public APIs and output format compatibility for program interfaces. +> Changes to configuration file formats or the default behavior of programs +> are not generally considered incompatible as the upgrade process can +> normally address such changes gracefully. + +Production releases use the plain version numbers: + + MAJOR.MINOR.PATCH + 1.0.0 + ... + 1.1.0 + ... + 1.1.23 + ... + 2.0.0 + ... + 2.1.0 + 2.1.1 + 2.1.2 + 2.1.3 + +The first production release in a MAJOR.MINOR series (MAJOR.MINOR.0) is called +a feature release. Feature releases are the only releases that may contain new +features. Subsequent production releases in a MAJOR.MINOR series may only +contain bug fixes. + +Beta-test releases are identified by appending the letter B to the major and +minor version numbers followed by the beta release number: + + MAJOR.MINORbNUMBER + 2.2b1 + +Release candidates are identified by appending the letters RC to the major and +minor version numbers followed by the release candidate number: + + MAJOR.MINORrcNUMBER + 2.2rc1 + + +Coding Guidelines +----------------- + +Contributed source code must follow the guidelines below. While the examples +are for C and C++ source files, source code for other languages should conform +to the same guidelines as allowed by the language. + +Source code comments provide the reference portion of the CUPS Programming +Manual, which is generated using the [codedoc](https://www.msweet.org/codedoc) +software. + + +### Source Files + +All source files names must be 16 characters or less in length to ensure +compatibility with older UNIX filesystems. Source files containing functions +have an extension of ".c" for C and ".cxx" for C++ source files. All other +"include" files have an extension of ".h". Tabs are set to 8 characters or +columns. + +> Note: +> +> The ".cxx" extension is used because it is the only common C++ extension +> between Linux, macOS, UNIX, and Windows. + +The top of each source file contains a header giving the purpose or nature of +the source file and the copyright and licensing notice: + + /* + * Description of file contents. + * + * Copyright 2017 by Apple Inc. + * + * Licensed under Apache License v2.0. See the file "LICENSE" for more + * information. + */ + + +### Header Files + +All public header files must include the "versioning.h" header file, or a header +that does so. Function declarations are then "decorated" with the correct +`_CUPS_API_major_minor` macro to define its availability based on the build +environment, for example: + + extern int cupsDoThis(int foo, int bar) _CUPS_API_2_2; + +Private API header files must be named with the suffix "-private", for example +the "cups.h" header file defines all of the public CUPS APIs while the +"cups-private.h" header file defines all of the private CUPS APIs as well. +Typically a private API header file will include the corresponding public API +header file. + + +### Comments + +All source code utilizes block comments within functions to describe the +operations being performed by a group of statements; avoid putting a comment +per line unless absolutely necessary, and then consider refactoring the code +so that it is not necessary. C source files use the block comment format +("/* comment */") since many vendor C compilers still do not support C99/C++ +comments ("// comment"): + + /* + * Clear the state array before we begin... + */ + + for (i = 0; i < (sizeof(array) / sizeof(sizeof(array[0])); i ++) + array[i] = CUPS_STATE_IDLE; + + /* + * Wait for state changes on another thread... + */ + + do + { + for (i = 0; i < (sizeof(array) / sizeof(sizeof(array[0])); i ++) + if (array[i] != CUPS_STATE_IDLE) + break; + + if (i == (sizeof(array) / sizeof(array[0]))) + sleep(1); + } while (i == (sizeof(array) / sizeof(array[0]))); + + +### Indentation + +All code blocks enclosed by brackets begin with the opening brace on a new +line. The code then follows starting on a new line after the brace and is +indented 2 spaces. The closing brace is then placed on a new line following +the code at the original indentation: + + { + int i; /* Looping var */ + + /* + * Process foobar values from 0 to 999... + */ + + for (i = 0; i < 1000; i ++) + { + do_this(i); + do_that(i); + } + } + +Single-line statements following "do", "else", "for", "if", and "while" are +indented 2 spaces as well. Blocks of code in a "switch" block are indented 4 +spaces after each "case" and "default" case: + + switch (array[i]) + { + case CUPS_STATE_IDLE : + do_this(i); + do_that(i); + break; + + default : + do_nothing(i); + break; + } + + +### Spacing + +A space follows each reserved word such as `if`, `while`, etc. Spaces are not +inserted between a function name and the arguments in parenthesis. + + +### Return Values + +Parenthesis surround values returned from a function: + + return (CUPS_STATE_IDLE); + + +### Functions + +Functions with a global scope have a lowercase prefix followed by capitalized +words, e.g., `cupsDoThis`, `cupsDoThat`, `cupsDoSomethingElse`, etc. Private +global functions begin with a leading underscore, e.g., `_cupsDoThis`, +`_cupsDoThat`, etc. + +Functions with a local scope are declared static with lowercase names and +underscores between words, e.g., `do_this`, `do_that`, `do_something_else`, etc. + +Each function begins with a comment header describing what the function does, +the possible input limits (if any), the possible output values (if any), and +any special information needed: + + /* + * 'do_this()' - Compute y = this(x). + * + * Notes: none. + */ + + static float /* O - Inverse power value, 0.0 <= y <= 1.1 */ + do_this(float x) /* I - Power value (0.0 <= x <= 1.1) */ + { + ... + return (y); + } + +Return/output values are indicated using an "O" prefix, input values are +indicated using the "I" prefix, and values that are both input and output use +the "IO" prefix for the corresponding in-line comment. + +The [codedoc](https://www.msweet.org/codedoc) documentation generator also +understands the following special text in the function description comment: + + @deprecated@ - Marks the function as deprecated: not recommended + for new development and scheduled for removal. + @link name@ - Provides a hyperlink to the corresponding function + or type definition. + @since CUPS version@ - Marks the function as new in the specified version + of CUPS. + @private@ - Marks the function as private so it will not be + included in the documentation. + + +### Variables + +Variables with a global scope are capitalized, e.g., `ThisVariable`, +`ThatVariable`, `ThisStateVariable`, etc. Globals in CUPS libraries are either +part of the per-thread global values managed by the `_cupsGlobals` function +or are suitably protected for concurrent access. Global variables should be +replaced by function arguments whenever possible. + +Variables with a local scope are lowercase with underscores between words, +e.g., `this_variable`, `that_variable`, etc. Any "local global" variables +shared by functions within a source file are declared static. As for global +variables, local static variables are suitably protected for concurrent access. + +Each variable is declared on a separate line and is immediately followed by a +comment block describing the variable: + + int ThisVariable; /* The current state of this */ + static int that_variable; /* The current state of that */ + + +### Types + +All type names are lowercase with underscores between words and `_t` appended +to the end of the name, e.g., `cups_this_type_t`, `cups_that_type_t`, etc. +Type names start with a prefix, typically `cups` or the name of the program, +to avoid conflicts with system types. Private type names start with an +underscore, e.g., `_cups_this_t`, `_cups_that_t`, etc. + +Each type has a comment block immediately after the typedef: + + typedef int cups_this_type_t; /* This type is for CUPS foobar options. */ + + +### Structures + +All structure names are lowercase with underscores between words and `_s` +appended to the end of the name, e.g., `cups_this_s`, `cups_that_s`, etc. +Structure names start with a prefix, typically `cups` or the name of the +program, to avoid conflicts with system types. Private structure names start +with an underscore, e.g., `_cups_this_s`, `_cups_that_s`, etc. + +Each structure has a comment block immediately after the struct and each member +is documented similar to the variable naming policy above: + + struct cups_this_struct_s /* This structure is for CUPS foobar options. */ + { + int this_member; /* Current state for this */ + int that_member; /* Current state for that */ + }; + + +### Constants + +All constant names are uppercase with underscores between words, e.g., +`CUPS_THIS_CONSTANT`, `CUPS_THAT_CONSTANT`, etc. Constants begin with an +uppercase prefix, typically `CUPS_` or the program or type name. Private +constants start with an underscore, e.g., `_CUPS_THIS_CONSTANT`, +`_CUPS_THAT_CONSTANT`, etc. + +Typed enumerations should be used whenever possible to allow for type checking +by the compiler. + +Comment blocks immediately follow each constant: + + typedef enum cups_tray_e /* Tray enumerations */ + { + CUPS_TRAY_THIS, /* This tray */ + CUPS_TRAY_THAT /* That tray */ + } cups_tray_t; + + +## Makefile Guidelines + +The following is a guide to the makefile-based build system used by CUPS. +These standards have been developed over the years to allow CUPS to be built on +as many systems and environments as possible. + + +### General Organization + +The CUPS source code is organized functionally into a top-level makefile, +include file, and subdirectories each with their own makefile and dependencies +files. The ".in" files are template files for the autoconf software and are +used to generate a static version of the corresponding file. + + +### Makefile Documentation + +Each makefile starts with the standard CUPS header containing the description +of the file, and CUPS copyright and license notice: + + # + # Makefile for ... + # + # Copyright 2017 by Apple Inc. + # + # Licensed under Apache License v2.0. See the file "LICENSE" for more + # information. + # + + +### Portable Makefile Construction + +CUPS uses a common subset of make program syntax to ensure that the software +can be compiled "out of the box" on as many systems as possible. The following +is a list of assumptions we follow when constructing makefiles: + +- Targets; we assume that the make program supports the notion of simple + targets of the form "name:" that perform tab-indented commands that follow + the target, e.g.: + + target: + TAB target commands + +- Dependencies; we assume that the make program supports recursive dependencies + on targets, e.g.: + + target: foo bar + TAB target commands + + foo: bla + TAB foo commands + + bar: + TAB bar commands + + bla: + TAB bla commands + +- Variable Definition; we assume that the make program supports variable + definition on the command-line or in the makefile using the following form: + + name=value + +- Variable Substitution; we assume that the make program supports variable + substitution using the following forms: + + - `$(name)`; substitutes the value of "name", + - `$(name:.old=.new)`; substitutes the value of "name" with the filename + extension ".old" changed to ".new", + - `$(MAKEFLAGS)`; substitutes the command-line options passed to the + program without the leading hyphen (-), + - `$$`; substitutes a single $ character, + - `$<`; substitutes the current source file or dependency, and + - `$@`; substitutes the current target name. + +- Suffixes; we assume that the make program supports filename suffixes with + assumed dependencies, e.g.: + + .SUFFIXES: .c .o + .c.o: + TAB $(CC) $(CFLAGS) -o $@ -c $< + +- Include Files; we assume that the make program supports the include + directive, e.g.: + + include ../Makedefs + include Dependencies + +- Comments; we assume that comments begin with a # character and proceed to the + end of the current line. + +- Line Length; we assume that there is no practical limit to the length of + lines. + +- Continuation of long lines; we assume that the `\` character may be placed at + the end of a line to concatenate two or more lines in a makefile to form a + single long line. + +- Shell; we assume a POSIX-compatible shell is present on the build system. + + +### Standard Variables + +The following variables are defined in the "Makedefs" file generated by the +autoconf software: + +- `ALL_CFLAGS`; the combined C compiler options, +- `ALL_CXXFLAGS`; the combined C++ compiler options, +- `AMANDIR`; the administrative man page installation directory (section 8/1m + depending on the platform), +- `AR`; the library archiver command, +- `ARFLAGS`; options for the library archiver command, +- `AWK`; the local awk command, +- `BINDIR`; the binary installation directory, +- `BUILDROOT`; optional installation prefix (defaults to DSTROOT), +- `CC`; the C compiler command, +- `CFLAGS`; options for the C compiler command, +- `CHMOD`; the chmod command, +- `CXX`; the C++ compiler command, +- `CXXFLAGS`; options for the C++ compiler command, +- `DATADIR`; the data file installation directory, +- `DSO`; the C shared library building command, +- `DSOXX`; the C++ shared library building command, +- `DSOFLAGS`; options for the shared library building command, +- `INCLUDEDIR`; the public header file installation directory, +- `INSTALL`; the install command, +- `INSTALL_BIN`; the program installation command, +- `INSTALL_COMPDATA`; the compressed data file installation command, +- `INSTALL_CONFIG`; the configuration file installation command, +- `INSTALL_DATA`; the data file installation command, +- `INSTALL_DIR`; the directory installation command, +- `INSTALL_LIB`; the library installation command, +- `INSTALL_MAN`; the documentation installation command, +- `INSTALL_SCRIPT`; the shell script installation command, +- `LD`; the linker command, +- `LDFLAGS`; options for the linker, +- `LIBDIR`; the library installation directory, +- `LIBS`; libraries for all programs, +- `LN`; the ln command, +- `MAN1EXT`; extension for man pages in section 1, +- `MAN3EXT`; extension for man pages in section 3, +- `MAN5EXT`; extension for man pages in section 5, +- `MAN7EXT`; extension for man pages in section 7, +- `MAN8DIR`; subdirectory for man pages in section 8, +- `MAN8EXT`; extension for man pages in section 8, +- `MANDIR`; the man page installation directory, +- `OPTIM`; common compiler optimization options, +- `PRIVATEINCLUDE`; the private header file installation directory, +- `RM`; the rm command, +- `SHELL`; the sh (POSIX shell) command, +- `STRIP`; the strip command, +- `srcdir`; the source directory. + + +### Standard Targets + +The following standard targets are defined in each makefile: + +- `all`; creates all target programs, libraries, and documentation files, +- `clean`; removes all target programs libraries, documentation files, and object + files, +- `depend`; generates automatic dependencies for any C or C++ source files (also + see "DEPENDENCIES"), +- `distclean`; removes autoconf-generated files in addition to those removed by + the "clean" target, +- `install`; installs all distribution files in their corresponding locations + (also see "INSTALL/UNINSTALL SUPPORT"), +- `install-data`; installs all data files in their corresponding locations (also + see "INSTALL/UNINSTALL SUPPORT"), +- `install-exec`; installs all executable files in their corresponding locations + (also see "INSTALL/UNINSTALL SUPPORT"), +- `install-headers`; installs all include files in their corresponding locations + (also see "INSTALL/UNINSTALL SUPPORT"), +- `install-libs`; installs all library files in their corresponding locations + (also see "INSTALL/UNINSTALL SUPPORT"), and +- `uninstall`; removes all distribution files from their corresponding locations + (also see "INSTALL/UNINSTALL SUPPORT"). + + +### Object Files + +Object files (the result of compiling a C or C++ source file) have the +extension ".o". + + +### Programs + +Program files are the result of linking object files and libraries together to +form an executable file. A typical program target looks like: + + program: $(OBJS) + TAB echo Linking $@... + TAB $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) + +### Static Libraries + +Static libraries have a prefix of "lib" and the extension ".a". A typical +static library target looks like: + + libname.a: $(OBJECTS) + TAB echo Creating $@... + TAB $(RM) $@ + TAB $(AR) $(ARFLAGS) $@ $(OBJECTS) + TAB $(RANLIB) $@ + +### Shared Libraries + +Shared libraries have a prefix of "lib" and the extension ".dylib" or ".so" +depending on the operating system. A typical shared library is composed of +several targets that look like: + + libname.so: $(OBJECTS) + TAB echo $(DSOCOMMAND) libname.so.$(DSOVERSION) ... + TAB $(DSOCOMMAND) libname.so.$(DSOVERSION) $(OBJECTS) + TAB $(RM) libname.so libname.so.$(DSOMAJOR) + TAB $(LN) libname.so.$(DSOVERSION) libname.so.$(DSOMAJOR) + TAB $(LN) libname.so.$(DSOVERSION) libname.so + + libname.dylib: $(OBJECTS) + TAB echo $(DSOCOMMAND) libname.$(DSOVERSION).dylib ... + TAB $(DSOCOMMAND) libname.$(DSOVERSION).dylib \ + TAB TAB -install_name $(libdir)/libname.$(DSOMAJOR).dylib \ + TAB TAB -current_version libname.$(DSOVERSION).dylib \ + TAB TAB -compatibility_version $(DSOMAJOR).0 \ + TAB TAB $(OBJECTS) $(LIBS) + TAB $(RM) libname.dylib + TAB $(RM) libname.$(DSOMAJOR).dylib + TAB $(LN) libname.$(DSOVERSION).dylib libname.$(DSOMAJOR).dylib + TAB $(LN) libname.$(DSOVERSION).dylib libname.dylib + +### Dependencies + +Static dependencies are expressed in each makefile following the target, for +example: + + foo: bar + +Static dependencies are only used when it is not possible to automatically +generate them. Automatic dependencies are stored in a file named +"Dependencies" and included at the end of the makefile. The following "depend" +target rule is used to create the automatic dependencies: + + depend: + TAB $(CC) -MM $(ALL_CFLAGS) $(OBJS:.o=.c) >Dependencies + +We regenerate the automatic dependencies on an macOS system and express any +non-macOS dependencies statically in the makefile. + + +### Install/Uninstall Support + +All makefiles contains install and uninstall rules which install or remove the +corresponding software. These rules must use the $(BUILDROOT) variable as a +prefix to any installation directory so that CUPS can be installed in a +temporary location for packaging by programs like rpmbuild. + +The `INSTALL_BIN`, `INSTALL_COMPDATA`, `INSTALL_CONFIG`, `INSTALL_DATA`, +`INSTALL_DIR`, `INSTALL_LIB`, `INSTALL_MAN`, and `INSTALL_SCRIPT` variables +must be used when installing files so that the proper ownership and permissions +are set on the installed files. + +The `$(RANLIB)` command must be run on any static libraries after installation +since the symbol table is invalidated when the library is copied on some +platforms. diff --git a/INSTALL.txt b/INSTALL.txt index 4a2529a..d2afc4c 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -1,14 +1,28 @@ -INSTALL - CUPS v2.2.4 - 2017-06-30 +INSTALL - CUPS v2.3.0 - 2019-08-21 ================================== This file describes how to compile and install CUPS from source code. For more -information on CUPS see the file called "README.txt". A complete change log can -be found in "CHANGES.txt". +information on CUPS see the file called "README.md". A complete change log can +be found in "CHANGES.md". -> USING CUPS REQUIRES ADDITIONAL THIRD-PARTY SUPPORT SOFTWARE AND PRINTER -> DRIVERS. THESE ARE TYPICALLY INCLUDED WITH YOUR OPERATING SYSTEM -> DISTRIBUTION. APPLE DOES NOT ENDORSE OR SUPPORT THIRD-PARTY SUPPORT SOFTWARE -> FOR CUPS. +Using CUPS requires additional third-party support software and printer drivers. +These are typically included with your operating system distribution. Apple +does not endorse or support third-party support software for CUPS. + +> Note: Current versions of macOS DO NOT allow installation to /usr with the +> default System Integrity Protection (SIP) settings. In addition, we do not +> recommend replacing the CUPS supplied with macOS because: +> +> a. not all versions of CUPS are compatible with every macOS release, +> +> b. code signing prevents replacement of system libraries and access to the +> system keychain (needed for encrypted printer sharing), and +> +> c. software updates will often replace parts of your local installation, +> potentially rendering your system unusable. +> +> Apple only supports using the Clang supplied with Xcode to build CUPS on +> macOS. BEFORE YOU BEGIN @@ -52,12 +66,15 @@ main CUPS source directory. To configure CUPS for your system, type: The default installation will put the CUPS software in the "/etc", "/usr", and "/var" directories on your system, which will overwrite any existing printing -commands on your system. Use the "--prefix" option to install the CUPS software +commands on your system. Use the `--prefix` option to install the CUPS software in another location: ./configure --prefix=/some/directory -To see a complete list of configuration options, use the --help option: +> Note: Current versions of macOS DO NOT allow installation to /usr with the +> default System Integrity Protection (SIP) settings. + +To see a complete list of configuration options, use the `--help` option: ./configure --help @@ -82,26 +99,20 @@ or: LDFLAGS="-L/some/directory" \ ./configure ... -The "--enable-debug" option compiles CUPS with debugging information enabled. +The `--enable-debug` option compiles CUPS with debugging information enabled. Additional debug logging support can be enabled using the -"--enable-debug-printfs" option - these debug messages are enabled using the -CUPS_DEBUG_LOG environment variable at run-time. +`--enable-debug-printfs` option - these debug messages are enabled using the +`CUPS_DEBUG_xxx` environment variables at run-time. CUPS also includes an extensive set of unit tests that can be used to find and diagnose a variety of common problems - use the "--enable-unit-tests" configure option to run them at build time. -On macOS, use the "--with-archflags" option to build with the correct set of +On macOS, use the `--with-archflags` option to build with the correct set of architectures: ./configure --with-archflags="-arch i386 -arch x86_64" ... -> Note: Current versions of macOS DO NOT allow installation to /usr with the -> default system integrity settings. In addition, we do not recommend replacing -> the CUPS supplied with macOS because not all versions of CUPS are compatible -> with every macOS release, and because software updates will replace parts -> of your local installation potentially rendering your system unusable. - Once you have configured things, just type: make ENTER @@ -184,7 +195,7 @@ for FreeBSD, NetBSD, and OpenBSD. The target is one of the following: GETTING DEBUG LOGGING FROM CUPS ------------------------------- -When configured with the "--enable-debug-printfs" option, CUPS compiles in +When configured with the `--enable-debug-printfs` option, CUPS compiles in additional debug logging support in the scheduler, CUPS API, and CUPS Imaging API. The following environment variables are used to enable and control debug logging: @@ -195,13 +206,14 @@ logging: the logging. The default level is 1. - `CUPS_DEBUG_LOG`: Specifies a log file to use. Specify the name "-" to send the messages to stderr. Prefix a filename with "+" to append to an existing - file. + file. You can include a single "%d" in the filename to embed the current + process ID. REPORTING PROBLEMS ------------------ -If you have problems, READ THE DOCUMENTATION FIRST! If the documentation does +If you have problems, *read the documentation first*! If the documentation does not solve your problems, please post a message on the users forum at: https://www.cups.org/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index 51d42e2..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,965 +0,0 @@ - CUPS License Agreement - - Copyright 2007-2016 by Apple Inc. - 1 Infinite Loop - Cupertino, CA 95014 USA - - WWW: http://www.cups.org/ - - -INTRODUCTION - -CUPS(tm) is provided under the GNU General Public License ("GPL") -and GNU Library General Public License ("LGPL"), Version 2, with an -exception for Apple operating systems. A copy of the exception and -licenses follow this introduction. - -The GNU LGPL applies to the CUPS and CUPS Imaging libraries -located in the "cups" and "filter" subdirectories of the CUPS -source distribution and the files in the "test" subdirectory. The -GNU GPL applies to the remainder of the CUPS distribution. - -For those not familiar with the GNU GPL, the license basically -allows you to: - - - Use the CUPS software at no charge. - - Distribute verbatim copies of the software in source or - binary form. - - Sell verbatim copies of the software for a media fee, or - sell support for the software. - -What this license *does not* allow you to do is make changes or -add features to CUPS and then sell a binary distribution without -source code. You must provide source for any changes or additions -to the software, and all code must be provided under the GPL or -LGPL as appropriate. The only exceptions to this are the portions -of the CUPS software covered by the Apple operating system -license exceptions outlined later in this license agreement. - -The GNU LGPL relaxes the "link-to" restriction, allowing you to -develop applications that use the CUPS and CUPS Imaging libraries -under other licenses and/or conditions as appropriate for your -application, driver, or filter. - - -LICENSE EXCEPTIONS - -In addition, as the copyright holder of CUPS, Apple Inc. grants -the following special exception: - - 1. Apple Operating System Development License Exception; - - a. Software that is developed by any person or entity - for an Apple Operating System ("Apple OS-Developed - Software"), including but not limited to Apple and - third party printer drivers, filters, and backends - for an Apple Operating System, that is linked to the - CUPS imaging library or based on any sample filters - or backends provided with CUPS shall not be - considered to be a derivative work or collective work - based on the CUPS program and is exempt from the - mandatory source code release clauses of the GNU GPL. - You may therefore distribute linked combinations of - the CUPS imaging library with Apple OS-Developed - Software without releasing the source code of the - Apple OS-Developed Software. You may also use sample - filters and backends provided with CUPS to develop - Apple OS-Developed Software without releasing the - source code of the Apple OS-Developed Software. - - b. An Apple Operating System means any operating system - software developed and/or marketed by Apple Inc., - including but not limited to all existing releases and - versions of Apple's Darwin, iOS, macOS, macOS Server, and - tvOS products and all follow-on releases and future - versions thereof. - - c. This exception is only available for Apple - OS-Developed Software and does not apply to software - that is distributed for use on other operating - systems. - - d. All CUPS software that falls under this license - exception have the following text at the top of each - source file: - - This file is subject to the Apple OS-Developed - Software exception. - -No developer is required to provide this exception in a derived -work. - - -KERBEROS SUPPORT CODE - -The Kerberos support code ("KSC") is copyright 2006 by Jelmer -Vernooij and is provided 'as-is', without any express or implied -warranty. In no event will the author or Apple Inc. be held -liable for any damages arising from the use of the KSC. - -Sources files containing KSC have the following text at the top -of each source file: - - This file contains Kerberos support code, copyright 2006 by - Jelmer Vernooij. - -The KSC copyright and license apply only to Kerberos-related -feature code in CUPS. Such code is typically conditionally -compiled based on the present of the HAVE_GSSAPI preprocessor -definition. - -Permission is granted to anyone to use the KSC for any purpose, -including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - - 1. The origin of the KSC must not be misrepresented; you - must not claim that you wrote the original software. If - you use the KSC in a product, an acknowledgment in the - product documentation would be appreciated but is not - required. - - 2. Altered source versions must be plainly marked as such, - and must not be misrepresented as being the original - software. - - 3. This notice may not be removed or altered from any source - distribution. - - -TRADEMARKS - -CUPS and the CUPS logo (the "CUPS Marks") are trademarks of Apple -Inc. Apple grants you a non-exclusive and non-transferable right -to use the CUPS Marks in any direct port or binary distribution -incorporating CUPS software and in any promotional material -therefor. You agree that your products will meet the highest -levels of quality and integrity for similar goods, not be unlawful, -and be developed, manufactured, and distributed in compliance with -this license. You will not interfere with Apple's rights in the -CUPS Marks, and all use of the CUPS Marks shall inure to the -benefit of Apple. This license does not apply to use of the CUPS -Marks in a derivative products, which requires prior written -permission from Apple Inc. - - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. - - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - [This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if -you distribute copies of the library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, so that any problems introduced by others will not reflect on -the original authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the source code distributed need not include anything that is normally -distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/Makedefs.in b/Makedefs.in index f958c26..9ee7585 100644 --- a/Makedefs.in +++ b/Makedefs.in @@ -1,32 +1,39 @@ # # Common makefile definitions for CUPS. # -# Copyright 2007-2017 by Apple Inc. -# Copyright 1997-2007 by Easy Software Products, all rights reserved. +# Copyright © 2007-2019 by Apple Inc. +# Copyright © 1997-2007 by Easy Software Products, all rights reserved. # -# These coded instructions, statements, and computer programs are the -# property of Apple Inc. and are protected by Federal copyright -# law. Distribution and use rights are outlined in the file "LICENSE.txt" -# which should have been included with this file. If this file is -# missing or damaged, see the license at "http://www.cups.org/". +# Licensed under Apache License v2.0. See the file "LICENSE" for more +# information. # +# +# CUPS version... +# + +CUPS_VERSION = @CUPS_VERSION@ + + # # Programs... # AR = @AR@ AWK = @AWK@ -CC = @LIBTOOL@ @CC@ +CC = @LIBTOOL_CC@ @CC@ CHMOD = @CHMOD@ -CXX = @LIBTOOL@ @CXX@ +CXX = @LIBTOOL_CXX@ @CXX@ DSO = @DSO@ DSOXX = @DSOXX@ -GZIP = @GZIP@ +GZIPPROG = @GZIPPROG@ INSTALL = @INSTALL@ LD = @LD@ +LD_CC = @LD_CC@ +LD_CXX = @LD_CXX@ LIBTOOL = @LIBTOOL@ LN = @LN@ -sf +MKDIR = @MKDIR@ -p MV = @MV@ RANLIB = @RANLIB@ RM = @RM@ -f @@ -38,12 +45,12 @@ SHELL = /bin/sh # Installation programs... # -INSTALL_BIN = $(LIBTOOL) $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@ +INSTALL_BIN = @LIBTOOL_INSTALL@ $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@ INSTALL_COMPDATA = $(INSTALL) -c -m 444 @INSTALL_GZIP@ INSTALL_CONFIG = $(INSTALL) -c -m @CUPS_CONFIG_FILE_PERM@ INSTALL_DATA = $(INSTALL) -c -m 444 INSTALL_DIR = $(INSTALL) -d -INSTALL_LIB = $(LIBTOOL) $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@ +INSTALL_LIB = @LIBTOOL_INSTALL@ $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @INSTALL_STRIP@ INSTALL_MAN = $(INSTALL) -c -m 444 INSTALL_SCRIPT = $(INSTALL) -c -m @CUPS_EXE_FILE_PERM@ @@ -85,14 +92,13 @@ LOCALTARGET = @LOCALTARGET@ # LIBCUPS = @LIBCUPS@ -LIBCUPSCGI = @LIBCUPSCGI@ LIBCUPSIMAGE = @LIBCUPSIMAGE@ -LIBCUPSMIME = @LIBCUPSMIME@ -LIBCUPSPPDC = @LIBCUPSPPDC@ +LIBCUPSOBJS = @LIBCUPSOBJS@ LIBCUPSSTATIC = @LIBCUPSSTATIC@ LIBGSSAPI = @LIBGSSAPI@ +LIBHEADERS = @LIBHEADERS@ +LIBHEADERSPRIV = @LIBHEADERSPRIV@ LIBMALLOC = @LIBMALLOC@ -LIBMXML = @LIBMXML@ LIBPAPER = @LIBPAPER@ LIBUSB = @LIBUSB@ LIBWRAP = @LIBWRAP@ @@ -110,12 +116,27 @@ INSTALLSTATIC = @INSTALLSTATIC@ IPPALIASES = @IPPALIASES@ + +# +# ippeveprinter commands... +# + +IPPEVECOMMANDS = @IPPEVECOMMANDS@ + + # # Install XPC backends? # INSTALLXPC = @INSTALLXPC@ +# +# Code signing... +# + +CODE_SIGN = @CODE_SIGN@ +CODE_SIGN_IDENTITY = - + # # Program options... # @@ -126,10 +147,15 @@ INSTALLXPC = @INSTALLXPC@ # for extra debug info) # -ALL_CFLAGS = -I.. -D_CUPS_SOURCE $(CFLAGS) $(SSLFLAGS) \ - @LARGEFILE@ @PTHREAD_FLAGS@ $(ONDEMANDFLAGS) $(OPTIONS) -ALL_CXXFLAGS = -I.. -D_CUPS_SOURCE $(CXXFLAGS) $(SSLFLAGS) \ - @LARGEFILE@ @PTHREAD_FLAGS@ $(ONDEMANDFLAGS) $(OPTIONS) +ALL_CFLAGS = -I.. -D_CUPS_SOURCE $(CFLAGS) \ + $(SSLFLAGS) @LARGEFILE@ @PTHREAD_FLAGS@ \ + $(ONDEMANDFLAGS) $(OPTIONS) +ALL_CXXFLAGS = -I.. -D_CUPS_SOURCE $(CXXFLAGS) \ + $(SSLFLAGS) @LARGEFILE@ @PTHREAD_FLAGS@ \ + $(ONDEMANDFLAGS) $(OPTIONS) +ALL_DSOFLAGS = -L../cups @ARCHFLAGS@ @RELROFLAGS@ $(DSOFLAGS) $(OPTIM) +ALL_LDFLAGS = -L../cups @LDARCHFLAGS@ @RELROFLAGS@ $(LDFLAGS) \ + @PIEFLAGS@ $(OPTIM) ARCHFLAGS = @ARCHFLAGS@ ARFLAGS = @ARFLAGS@ BACKLIBS = @BACKLIBS@ @@ -141,21 +167,18 @@ CXXLIBS = @CXXLIBS@ DBUS_NOTIFIER = @DBUS_NOTIFIER@ DBUS_NOTIFIERLIBS = @DBUS_NOTIFIERLIBS@ DNSSD_BACKEND = @DNSSD_BACKEND@ -DSOFLAGS = -L../cups @DSOFLAGS@ -DSOLIBS = @DSOLIBS@ $(COMMONLIBS) +DSOFLAGS = @DSOFLAGS@ DNSSDLIBS = @DNSSDLIBS@ IPPFIND_BIN = @IPPFIND_BIN@ IPPFIND_MAN = @IPPFIND_MAN@ -LDFLAGS = -L../cgi-bin -L../cups -L../filter -L../ppdc \ - -L../scheduler @LDARCHFLAGS@ \ - @LDFLAGS@ @RELROFLAGS@ @PIEFLAGS@ $(OPTIM) -LINKCUPS = @LINKCUPS@ $(LIBGSSAPI) $(DNSSDLIBS) $(SSLLIBS) $(LIBZ) -LINKCUPSIMAGE = @LINKCUPSIMAGE@ -LIBS = $(LINKCUPS) $(COMMONLIBS) +LDFLAGS = @LDFLAGS@ +LINKCUPS = @LINKCUPS@ +LINKCUPSSTATIC = ../cups/$(LIBCUPSSTATIC) $(LIBS) +LIBS = $(LIBGSSAPI) $(DNSSDLIBS) $(SSLLIBS) $(LIBZ) $(COMMONLIBS) ONDEMANDFLAGS = @ONDEMANDFLAGS@ ONDEMANDLIBS = @ONDEMANDLIBS@ OPTIM = @OPTIM@ -OPTIONS = +OPTIONS = @WARNING_OPTIONS@ PAMLIBS = @PAMLIBS@ SERVERLIBS = @SERVERLIBS@ SSLFLAGS = @SSLFLAGS@ @@ -197,9 +220,8 @@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ top_srcdir = @top_srcdir@ -BUILDROOT = $(DSTROOT) +BUILDROOT = $(DSTROOT)$(DESTDIR) -AMANDIR = $(BUILDROOT)@AMANDIR@ BINDIR = $(BUILDROOT)@bindir@ BUNDLEDIR = @CUPS_BUNDLEDIR@ CACHEDIR = $(BUILDROOT)@CUPS_CACHEDIR@ @@ -212,23 +234,17 @@ LOCALEDIR = $(BUILDROOT)@CUPS_LOCALEDIR@ LOGDIR = $(BUILDROOT)@CUPS_LOGDIR@ MANDIR = $(BUILDROOT)@mandir@ MENUDIR = @MENUDIR@ -PMANDIR = $(BUILDROOT)@PMANDIR@ PRIVATEINCLUDE = $(BUILDROOT)@PRIVATEINCLUDE@ RCLEVELS = @RCLEVELS@ RCSTART = @RCSTART@ RCSTOP = @RCSTOP@ REQUESTS = $(BUILDROOT)@CUPS_REQUESTS@ +RESOURCEDIR = @CUPS_RESOURCEDIR@ SBINDIR = $(BUILDROOT)@sbindir@ SERVERBIN = $(BUILDROOT)@CUPS_SERVERBIN@ SERVERROOT = $(BUILDROOT)@CUPS_SERVERROOT@ STATEDIR = $(BUILDROOT)@CUPS_STATEDIR@ -MAN1EXT = @MAN1EXT@ -MAN5EXT = @MAN5EXT@ -MAN7EXT = @MAN7EXT@ -MAN8EXT = @MAN8EXT@ -MAN8DIR = @MAN8DIR@ - PAMDIR = @PAMDIR@ PAMFILE = @PAMFILE@ @@ -248,7 +264,7 @@ USBQUIRKS = @USBQUIRKS@ # .SILENT: -.SUFFIXES: .1 .1.gz .1m .1m.gz .3 .3.gz .5 .5.gz .7 .7.gz .8 .8.gz .a .c .cxx .h .man .o .gz +.SUFFIXES: .a .c .cxx .h .o .c.o: echo Compiling $<... @@ -257,13 +273,3 @@ USBQUIRKS = @USBQUIRKS@ .cxx.o: echo Compiling $<... $(CXX) $(ARCHFLAGS) $(OPTIM) $(ALL_CXXFLAGS) -c -o $@ $< - -.man.1 .man.1m .man.3 .man.5 .man.7 .man.8: - echo Linking $<... - $(RM) $@ - $(LN) $< $@ - -.man.1.gz .man.1m.gz .man.3.gz .man.5.gz .man.7.gz .man.8.gz .man.gz: - echo -n Compressing $<... - $(RM) $@ - gzip -v9 <$< >$@ diff --git a/Makefile b/Makefile index afc90ce..1554462 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,11 @@ # # Top-level Makefile for CUPS. # -# Copyright 2007-2016 by Apple Inc. -# Copyright 1997-2007 by Easy Software Products, all rights reserved. +# Copyright © 2007-2019 by Apple Inc. +# Copyright © 1997-2007 by Easy Software Products, all rights reserved. # -# These coded instructions, statements, and computer programs are the -# property of Apple Inc. and are protected by Federal copyright -# law. Distribution and use rights are outlined in the file "LICENSE.txt" -# which should have been included with this file. If this file is -# missing or damaged, see the license at "http://www.cups.org/". +# Licensed under Apache License v2.0. See the file "LICENSE" for more +# information. # include Makedefs @@ -18,7 +15,14 @@ include Makedefs # Directories to make... # -DIRS = cups test $(BUILDDIRS) +DIRS = cups $(BUILDDIRS) + + +# +# Test suite options - normally blank, override with make command... +# + +TESTOPTIONS = # @@ -98,16 +102,14 @@ distclean: clean $(RM) Makedefs config.h config.log config.status $(RM) conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf $(RM) cups-config - $(RM) data/testprint $(RM) desktop/cups.desktop $(RM) doc/index.html - $(RM) man/client.conf.man man/cups-files.conf.man man/cups-lpd.man man/cups-snmp.man man/cupsaddsmb.man man/cupsd.conf.man man/cupsd.man man/lpoptions.man $(RM) packaging/cups.list $(RM) scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist scheduler/org.cups.cups-lpdAT.service scheduler/org.cups.cupsd.path scheduler/org.cups.cupsd.service scheduler/org.cups.cupsd.socket $(RM) templates/header.tmpl -$(RM) doc/*/index.html -$(RM) templates/*/header.tmpl - -$(RM) -r autom4te*.cache clang cups/charmaps cups/locale + -$(RM) -r autom4te*.cache cups/charmaps cups/locale # @@ -121,25 +123,6 @@ depend: done -# -# Run the Clang static code analysis tool on the sources, available here: -# -# http://clang-analyzer.llvm.org -# -# At least checker-231 is required. -# -# Alternatively, use "--analyze -Xanalyzer -analyzer-output=text" for OPTIM (text -# output instead of HTML...) -# - -.PHONY: clang clang-changes -clang: - $(RM) -r clang - scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) clean all -clang-changes: - scan-build -V -k -o `pwd`/clang $(MAKE) $(MFLAGS) all - - # # Run the STACK tool on the sources, available here: # @@ -249,7 +232,7 @@ uninstall: test: all unittests echo Running CUPS test suite... - cd test; ./run-stp-tests.sh + cd test; ./run-stp-tests.sh $(TESTOPTIONS) check: all unittests @@ -262,7 +245,7 @@ debugcheck: all unittests # -# Create HTML documentation using Mini-XML's mxmldoc (http://www.msweet.org/)... +# Create HTML documentation using codedoc (http://www.msweet.org/codedoc)... # apihelp: @@ -272,32 +255,6 @@ apihelp: done -# -# Create an Xcode docset using Mini-XML's mxmldoc (http://www.msweet.org/)... -# - -docset: apihelp - echo Generating docset directory tree... - $(RM) -r org.cups.docset - mkdir -p org.cups.docset/Contents/Resources/Documentation/help - mkdir -p org.cups.docset/Contents/Resources/Documentation/images - cd man; $(MAKE) $(MFLAGS) html - cd doc; $(MAKE) $(MFLAGS) docset - cd cgi-bin; $(MAKE) $(MFLAGS) makedocset - cgi-bin/makedocset org.cups.docset \ - `svnversion . | sed -e '1,$$s/[a-zA-Z]//g'` \ - doc/help/api-*.tokens - $(RM) doc/help/api-*.tokens - echo Indexing docset... - /Applications/Xcode.app/Contents/Developer/usr/bin/docsetutil index org.cups.docset - echo Generating docset archive and feed... - $(RM) org.cups.docset.atom - /Applications/Xcode.app/Contents/Developer/usr/bin/docsetutil package --output org.cups.docset.xar \ - --atom org.cups.docset.atom \ - --download-url http://www.cups.org/org.cups.docset.xar \ - org.cups.docset - - # # Lines of code computation... # diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..bf088fd --- /dev/null +++ b/NOTICE @@ -0,0 +1,51 @@ +CUPS + +Copyright © 2007-2019 by Apple Inc. +Copyright © 1997-2007 by Easy Software Products. + +CUPS and the CUPS logo are trademarks of Apple Inc. + +The MD5 Digest code is Copyright 1999 Aladdin Enterprises. + +The Kerberos support code ("KSC") is copyright 2006 by Jelmer Vernooij and is +provided 'as-is', without any express or implied warranty. In no event will the +author or Apple Inc. be held liable for any damages arising from the use of the +KSC. + +Sources files containing KSC have the following text at the top of each source +file: + + This file contains Kerberos support code, copyright 2006 by Jelmer Vernooij. + +The KSC copyright and license apply only to Kerberos-related feature code in +CUPS. Such code is typically conditionally compiled based on the present of the +HAVE_GSSAPI preprocessor definition. + +Permission is granted to anyone to use the KSC for any purpose, including +commercial applications, and to alter it and redistribute it freely, subject to +the following restrictions: + + 1. The origin of the KSC must not be misrepresented; you must not claim that + you wrote the original software. If you use the KSC in a product, an + acknowledgment in the product documentation would be appreciated but is not + required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + +-- CUPS Exceptions to the Apache 2.0 License -- + +As an exception, if, as a result of your compiling your source code, portions +of this Software are embedded into an Object form of such source code, you +may redistribute such embedded portions in such Object form without complying +with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + +In addition, if you combine or link compiled forms of this Software with +software that is licensed under the GPLv2 ("Combined Software") and if a +court of competent jurisdiction determines that the patent provision (Section +3), the indemnity provision (Section 9) or other Section of the License +conflicts with the conditions of the GPLv2, you may retroactively and +prospectively choose to deem waived or otherwise exclude such Section(s) of +the License, but only in their entirety and only with respect to the Combined +Software. diff --git a/README.md b/README.md index 209c9bb..48948d9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ # CUPS-for-Android This project contains code derived from CUPS (see https://github.com/apple/cups) and modified for use as a dynamically-linked library within the Mopria Print Service. -CUPS-for-Android version 1.6.3 is a derivative of CUPS 1.6.3 used in Mopria Print Service 2.1.10 and earlier versions. Later versions of Mopria Print Service use a derivative of CUPS 2.2.1. +CUPS-for-Android version 1.6.3 is a derivative of CUPS 1.6.3 used in Mopria Print Service 2.1.10 and earlier versions. Latest version of Mopria Print Service use a derivative of CUPS 2.3. diff --git a/README.txt b/README.txt index 97672e9..3d3ddb9 100644 --- a/README.txt +++ b/README.txt @@ -1,13 +1,9 @@ -README - CUPS v2.2.4 - 2017-06-30 +README - CUPS v2.3.0 - 2019-08-21 ================================= -Looking for compile instructions? Read the file "INSTALL.md" instead... - - INTRODUCTION ------------ - CUPS is a standards-based, open source printing system developed by Apple Inc. for macOS® and other UNIX®-like operating systems. CUPS uses the Internet Printing Protocol ("IPP") and provides System V and Berkeley command-line @@ -22,20 +18,31 @@ included with CUPS to support many Dymo, EPSON, HP, Intellitech, OKIDATA, and Zebra printers. Many more drivers are available online and (in some cases) on the driver CD-ROM that came with your printer. -CUPS is licensed under the GNU General Public License and GNU Library General -Public License versions 2. See the file "LICENSE.txt" for more information. +CUPS is licensed under the Apache License Version 2.0. See the file +"LICENSE" for more information. READING THE DOCUMENTATION ------------------------- -Once you have installed the software you can access the documentation (and a -bunch of other stuff) online at: +Initial documentation to get you started is provided in the root directory of +the CUPS sources: - http://localhost:631/ +- `CHANGES.md`: A list of changes in the current major release of CUPS. +- `CONTRIBUTING.md`: Guidelines for contributing to the CUPS project. +- `CREDITS.md`: A list of past contributors to the CUPS project. +- `DEVELOPING.md`: Guidelines for developing code for the CUPS project. +- `INSTALL.md`: Instructions for building and installing CUPS. +- `LICENSE`: The CUPS license agreement (Apache 2.0). +- `NOTICE`: Copyright notices and exceptions to the CUPS license agreement. +- `README.md`: This file. + +Once you have installed the software you can access the documentation (and a +bunch of other stuff) online at and using the `man` +command, for example `man cups`. If you're having trouble getting that far, the documentation is located under -the "doc/help" directory. +the `doc/help` and `man` directories. Please read the documentation before asking questions. @@ -43,10 +50,8 @@ Please read the documentation before asking questions. GETTING SUPPORT AND OTHER RESOURCES ----------------------------------- -If you have problems, READ THE DOCUMENTATION FIRST! We also provide two mailing -lists which are available at: - - https://lists.cups.org/mailman/listinfo +If you have problems, *read the documentation first!* We also provide two +mailing lists which are available at . See the CUPS web site at for other resources. @@ -55,14 +60,12 @@ SETTING UP PRINTER QUEUES USING YOUR WEB BROWSER ------------------------------------------------ CUPS includes a web-based administration tool that allows you to manage -printers, classes, and jobs on your server. Open the following URL in your -browser to access the printer administration tools: - - http://localhost:631/admin/ +printers, classes, and jobs on your server. Open +in your browser to access the printer administration tools: *Do not* use the hostname for your machine - it will not work with the default CUPS configuration. To enable administration access on other addresses, check -the "Allow Remote Administration" box and click on the "Change Settings" button. +the `Allow Remote Administration` box and click on the `Change Settings button. You will be asked for the administration password (root or any other user in the sys/system/root/admin/lpadmin group on your system) when performing any @@ -72,63 +75,69 @@ administrative function. SETTING UP PRINTER QUEUES FROM THE COMMAND-LINE ----------------------------------------------- -CUPS works best with PPD (PostScript Printer Description) files. In a pinch you -can also use System V style printer interface scripts. +CUPS currently uses PPD (PostScript Printer Description) files that describe +printer capabilities and driver programs needed for each printer. The +`everywhere` PPD is used for nearly all modern networks printers sold since +about 2009. For example, the following command creates a print queue for a +printer at address 11.22.33.44: -CUPS includes several sample PPD files you can use: + lpadmin -p printername -E -v ipp://11.22.33.44/ipp/print -m everywhere - Driver PPD Name - ----------------------------- ------------------------------ - Dymo Label Printers drv:///sample.drv/dymo.ppd - Intellitech Intellibar drv:///sample.drv/intelbar.ppd - EPSON 9-pin Series drv:///sample.drv/epson9.ppd - EPSON 24-pin Series drv:///sample.drv/epson24.ppd - Generic PCL Laser Printer drv:///sample.drv/generpcl.ppd - Generic PostScript Printer drv:///sample.drv/generic.ppd - HP DeskJet Series drv:///sample.drv/deskjet.ppd - HP LaserJet Series drv:///sample.drv/laserjet.ppd - OKIDATA 9-Pin Series drv:///sample.drv/okidata9.ppd - OKIDATA 24-Pin Series drv:///sample.drv/okidat24.ppd - Zebra CPCL Label Printer drv:///sample.drv/zebracpl.ppd - Zebra EPL1 Label Printer drv:///sample.drv/zebraep1.ppd - Zebra EPL2 Label Printer drv:///sample.drv/zebraep2.ppd - Zebra ZPL Label Printer drv:///sample.drv/zebra.ppd +CUPS also includes several sample PPD files you can use for "legacy" printers: -Run the "lpinfo -m" command to list the available drivers: + Driver | PPD Name + ----------------------------- | ------------------------------ + Dymo Label Printers | drv:///sample.drv/dymo.ppd + Intellitech Intellibar | drv:///sample.drv/intelbar.ppd + EPSON 9-pin Series | drv:///sample.drv/epson9.ppd + EPSON 24-pin Series | drv:///sample.drv/epson24.ppd + Generic PCL Laser Printer | drv:///sample.drv/generpcl.ppd + Generic PostScript Printer | drv:///sample.drv/generic.ppd + HP DeskJet Series | drv:///sample.drv/deskjet.ppd + HP LaserJet Series | drv:///sample.drv/laserjet.ppd + OKIDATA 9-Pin Series | drv:///sample.drv/okidata9.ppd + OKIDATA 24-Pin Series | drv:///sample.drv/okidat24.ppd + Zebra CPCL Label Printer | drv:///sample.drv/zebracpl.ppd + Zebra EPL1 Label Printer | drv:///sample.drv/zebraep1.ppd + Zebra EPL2 Label Printer | drv:///sample.drv/zebraep2.ppd + Zebra ZPL Label Printer | drv:///sample.drv/zebra.ppd + +You can run the `lpinfo -m` command to list all of the available drivers: lpinfo -m -Run the "lpinfo -v" command to list the available printers: +Run the `lpinfo -v` command to list the available printers: lpinfo -v -Then use the correct URI to add the printer using the "lpadmin" command: +Then use the correct URI to add the printer using the `lpadmin` command: lpadmin -p printername -E -v device-uri -m ppd-name -Network printers typically use "socket" or "lpd" URIs: +Current network printers typically use `ipp` or `ipps` URIS: + + lpadmin -p printername -E -v ipp://11.22.33.44/ipp/print -m everywhere + lpadmin -p printername -E -v ipps://11.22.33.44/ipp/print -m everywhere + +Older network printers typically use `socket` or `lpd` URIs: lpadmin -p printername -E -v socket://11.22.33.44 -m ppd-name lpadmin -p printername -E -v lpd://11.22.33.44/ -m ppd-name The sample drivers provide basic printing capabilities, but generally do not -exercise the full potential of the printers or CUPS. - -CUPS also supports IPP Everywhere printers using the "everywhere" model, for -example: - - lpadmin -p printername -E -v ipp://11.22.33.44/ipp/print -m everywhere +exercise the full potential of the printers or CUPS. Other drivers provide +greater printing capabilities. PRINTING FILES -------------- -CUPS provides both the System V "lp" and Berkeley "lpr" commands for printing: +CUPS provides both the System V `lp` and Berkeley `lpr` commands for printing: lp filename lpr filename -Both the "lp" and "lpr" commands support printing options for the driver: +Both the `lp` and `lpr` commands support printing options for the driver: lp -o media=A4 -o resolution=600dpi filename lpr -o media=A4 -o resolution=600dpi filename @@ -137,7 +146,7 @@ CUPS recognizes many types of images files as well as PDF, PostScript, and text files, so you can print those files directly rather than through an application. If you have an application that generates output specifically for your printer -then you need to use the "-oraw" or "-l" options: +then you need to use the `-oraw` or `-l` options: lp -o raw filename lpr -l filename @@ -148,13 +157,14 @@ This will prevent the filters from misinterpreting your print file. LEGAL STUFF ----------- -CUPS is copyright © 2007-2017 by Apple Inc. CUPS and the CUPS logo are -trademarks of Apple Inc. +Copyright © 2007-2019 by Apple Inc. +Copyright © 1997-2007 by Easy Software Products. -The MD5 Digest code is Copyright 1999 Aladdin Enterprises. +CUPS is provided under the terms of the Apache License, Version 2.0 with +exceptions for GPL2/LGPL2 software. A copy of this license can be found in the +file `LICENSE`. Additional legal information is provided in the file `NOTICE`. -CUPS is provided under the terms of version 2 of the GNU General Public License -and GNU Library General Public License. This program is distributed in the hope -that it will be useful, but WITHOUT ANY WARRANTY; without even the implied -warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -"doc/help/license.html" or "LICENSE.txt" files for more information. +Unless required by applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for the +specific language governing permissions and limitations under the License. diff --git a/config.guess b/config.guess new file mode 100644 index 0000000..9afd676 --- /dev/null +++ b/config.guess @@ -0,0 +1,1568 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2013 Free Software Foundation, Inc. + +timestamp='2013-11-29' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches with a ChangeLog entry to config-patches@gnu.org. + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + or1k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h b/config.h index af9d7bd..7360eaf 100644 --- a/config.h +++ b/config.h @@ -1,17 +1,12 @@ /* config.h. Generated from config.h.in by configure. */ /* - * "$Id: config.h.in 10776 2012-12-17 22:17:08Z mike $" + * Configuration file for CUPS. * - * Configuration file for CUPS. + * Copyright 2007-2019 by Apple Inc. + * Copyright 1997-2007 by Easy Software Products. * - * Copyright 2007-2017 by Apple Inc. - * Copyright 1997-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "LICENSE.txt" - * which should have been included with this file. If this file is - * missing or damaged, see the license at "http://www.cups.org/". + * Licensed under Apache License v2.0. See the file "LICENSE" for more + * information. */ /* 07/22/2016 Mopria-notice: some config changes were applied directly to this generated file @@ -27,8 +22,8 @@ * Version of software... */ -#define CUPS_SVERSION "CUPS v2.2.3" -#define CUPS_MINIMAL "CUPS/2.2.3" +#define CUPS_SVERSION "CUPS v2.3" +#define CUPS_MINIMAL "CUPS/2.3" /* diff --git a/config.h.in b/config.h.in index f3b5e4c..5e93a9d 100644 --- a/config.h.in +++ b/config.h.in @@ -1,14 +1,11 @@ /* * Configuration file for CUPS. * - * Copyright 2007-2017 by Apple Inc. + * Copyright 2007-2019 by Apple Inc. * Copyright 1997-2007 by Easy Software Products. * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "LICENSE.txt" - * which should have been included with this file. If this file is - * missing or damaged, see the license at "http://www.cups.org/". + * Licensed under Apache License v2.0. See the file "LICENSE" for more + * information. */ #ifndef _CUPS_CONFIG_H_ @@ -20,6 +17,7 @@ #define CUPS_SVERSION "" #define CUPS_MINIMAL "" +#define CUPS_LITE 0 /* @@ -303,6 +301,13 @@ #undef HAVE_SSL +/* + * Do we have the gnutls_fips140_set_mode function? + */ + +#undef HAVE_GNUTLS_FIPS140_SET_MODE + + /* * Do we have the gnutls_transport_set_pull_timeout_function function? */ @@ -322,21 +327,9 @@ */ #undef HAVE_AUTHORIZATION_H -#undef HAVE_SECBASEPRIV_H #undef HAVE_SECCERTIFICATE_H -#undef HAVE_SECIDENTITYSEARCHPRIV_H #undef HAVE_SECITEM_H -#undef HAVE_SECITEMPRIV_H #undef HAVE_SECPOLICY_H -#undef HAVE_SECPOLICYPRIV_H -#undef HAVE_SECURETRANSPORTPRIV_H - - -/* - * Do we have the cssmErrorString function? - */ - -#undef HAVE_CSSMERRORSTRING /* @@ -346,20 +339,6 @@ #undef HAVE_SECGENERATESELFSIGNEDCERTIFICATE -/* - * Do we have the SecKeychainOpen function? - */ - -#undef HAVE_SECKEYCHAINOPEN - - -/* - * Do we have (a working) SSLSetEnabledCiphers function? - */ - -#undef HAVE_SSLSETENABLEDCIPHERS - - /* * Do we have libpaper? */ @@ -502,26 +481,10 @@ /* - * Various scripting languages... - */ - -#undef HAVE_JAVA -#define CUPS_JAVA "/usr/bin/java" -#undef HAVE_PERL -#define CUPS_PERL "/usr/bin/perl" -#undef HAVE_PHP -#define CUPS_PHP "/usr/bin/php" -#undef HAVE_PYTHON -#define CUPS_PYTHON "/usr/bin/python" - - -/* - * Do we have CoreFoundation public and private headers? + * Do we have CoreFoundation public headers? */ #undef HAVE_COREFOUNDATION_H -#undef HAVE_CFPRIV_H -#undef HAVE_CFBUNDLEPRIV_H /* @@ -550,7 +513,6 @@ */ #undef HAVE_MEMBERSHIP_H -#undef HAVE_MEMBERSHIPPRIV_H #undef HAVE_MBR_UID_TO_UUID @@ -703,14 +665,6 @@ */ #undef HAVE_XPC -#undef HAVE_XPC_PRIVATE_H - - -/* - * Do we have Mini-XML? - */ - -#undef HAVE_MXML_H /* diff --git a/config.sub b/config.sub new file mode 100644 index 0000000..61cb4bc --- /dev/null +++ b/config.sub @@ -0,0 +1,1793 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2013 Free Software Foundation, Inc. + +timestamp='2013-10-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches with a ChangeLog entry to config-patches@gnu.org. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2013 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 \ + | or1k | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or1k-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.sh b/configure similarity index 88% rename from config.sh rename to configure index 494b768..d3df145 100644 --- a/config.sh +++ b/configure @@ -1,6 +1,8 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69. +# Generated by GNU Autoconf 2.69 for CUPS 2.3.0. +# +# Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -264,7 +266,8 @@ fi $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: https://github.com/apple/cups/issues about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -575,14 +578,13 @@ MFLAGS= MAKEFLAGS= # Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= +PACKAGE_NAME='CUPS' +PACKAGE_TARNAME='cups' +PACKAGE_VERSION='2.3.0' +PACKAGE_STRING='CUPS 2.3.0' +PACKAGE_BUGREPORT='https://github.com/apple/cups/issues' +PACKAGE_URL='https://www.cups.org/' -ac_unique_file="cups/cups.h" # Factoring default headers for most tests. ac_includes_default="\ #include @@ -624,11 +626,6 @@ ac_subst_vars='LTLIBOBJS LIBOBJS UNINSTALL_LANGUAGES INSTALL_LANGUAGES -PYTHON -PHP -PHPCGI -PERL -JAVA CUPS_WEBIF DEFAULT_IPP_PORT CUPS_SNMP_COMMUNITY @@ -645,16 +642,30 @@ CUPS_USER CUPS_DEFAULT_SHARED CUPS_BROWSE_LOCAL_PROTOCOLS CUPS_BROWSING +CUPS_PAGE_LOG_FORMAT CUPS_ACCESS_LOG_LEVEL CUPS_LOG_LEVEL CUPS_FATAL_ERRORS CUPS_LOG_FILE_PERM CUPS_CUPSD_FILE_PERM CUPS_CONFIG_FILE_PERM +CUPS_EXE_FILE_PERM +CUPS_RESOURCEDIR CUPS_BUNDLEDIR LANGUAGES -LAUNCHDLIBS -DEFAULT_LAUNCHD_CONF +XINETD +RCSTOP +RCSTART +RCLEVELS +INITDDIR +INITDIR +SMFMANIFESTDIR +SYSTEMD_DIR +LAUNCHD_DIR +ONDEMANDLIBS +ONDEMANDFLAGS +IPPFIND_MAN +IPPFIND_BIN DNSSD_BACKEND DNSSDLIBS LARGEFILE @@ -667,9 +678,7 @@ EXPORT_SSLLIBS SSLLIBS SSLFLAGS IPPALIASES -CUPS_SERVERKEY -CUPS_SERVERCERT -LIBGCRYPTCONFIG +CUPS_SERVERKEYCHAIN LIBGNUTLSCONFIG PTHREAD_FLAGS CUPS_DEFAULT_GSSSERVICENAME @@ -677,6 +686,7 @@ KRB5CONFIG LIBGSSAPI CUPS_LISTEN_DOMAINSOCKET CUPS_DEFAULT_DOMAINSOCKET +WARNING_OPTIONS RELROFLAGS PIEFLAGS CXXLIBS @@ -685,31 +695,22 @@ ARCHFLAGS UNITTESTS OPTIM INSTALL_STRIP +LIBTOOL_INSTALL +LIBTOOL_CXX +LIBTOOL_CC LIBTOOL +LD_CXX +LD_CC EXPORT_LDFLAGS -IMGLIBS -DSOLIBS -LINKCUPSIMAGE LINKCUPS -EXTLINKCUPSIMAGE EXTLINKCUPS LIBCUPSSTATIC -LIBCUPSPPDC -LIBCUPSMIME LIBCUPSIMAGE -LIBCUPSCGI LIBCUPSBASE LIBCUPS DSOFLAGS DSOXX DSO -MAN8DIR -MAN8EXT -MAN7EXT -MAN5EXT -MAN1EXT -PMANDIR -AMANDIR CUPS_STATEDIR CUPS_SERVERROOT INSTALL_SYSV @@ -723,15 +724,12 @@ MENUDIR ICONDIR CUPS_DATADIR CUPS_CACHEDIR -XINETD -SMFMANIFESTDIR -RCSTOP -RCSTART -RCLEVELS -INITDDIR -INITDIR PRIVATEINCLUDE privateinclude +LIBHEADERSPRIV +LIBHEADERS +LIBCUPSOBJS +IPPEVECOMMANDS BUILDDIRS INSTALLXPC CUPS_SYSTEM_AUTHKEY @@ -745,24 +743,25 @@ ARFLAGS LIBZ INSTALL_GZIP LIBWRAP +USBQUIRKS LIBUSB -LIBMXML EGREP GREP LIBPAPER LIBMALLOC PKGCONFIG INSTALLSTATIC -INSTALL CUPS_HTMLVIEW XDGOPEN SED RMDIR RM MV +MKDIR LN LD -GZIP +INSTALL +GZIPPROG CHMOD AR RANLIB @@ -781,6 +780,16 @@ AWK CUPS_BUILD CUPS_REVISION CUPS_VERSION +CODE_SIGN +LOCALTARGET +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build target_alias host_alias build_alias @@ -800,7 +809,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -836,12 +844,6 @@ with_adminkey with_operkey with_components with_privateinclude -with_rcdir -with_rclevels -with_rcstart -with_rcstop -with_smfmanifestdir -with_xinetd with_lpdconfig with_smbconfig with_cachedir @@ -850,6 +852,7 @@ with_menudir with_docdir with_fontpath with_logdir +with_rundir enable_shared enable_libtool_unsupported with_optim @@ -860,6 +863,7 @@ enable_unit_tests with_archflags with_ldarchflags enable_relro +enable_sanitizer with_domainsocket enable_gssapi with_gssservicename @@ -867,9 +871,6 @@ enable_threads enable_ssl enable_cdsassl enable_gnutls -enable_openssl -with_openssl_libs -with_openssl_includes enable_pam with_pam_module enable_largefile @@ -878,14 +879,26 @@ enable_dnssd with_dnssd_libs with_dnssd_includes enable_launchd +enable_systemd +with_systemd +enable_upstart +with_smfmanifestdir +with_rcdir +with_rclevels +with_rcstart +with_rcstop +with_xinetd with_languages with_bundledir +with_bundlelang +with_exe_file_perm with_config_file_perm with_cupsd_file_perm with_log_file_perm with_fatal_errors with_log_level with_access_log_level +enable_page_logging enable_browsing with_local_protocols enable_default_shared @@ -901,10 +914,6 @@ with_snmp_address with_snmp_community with_ipp_port enable_webif -with_java -with_perl -with_php -with_python ' ac_precious_vars='build_alias host_alias @@ -956,10 +965,9 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' @@ -1209,15 +1217,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1355,7 +1354,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1468,7 +1467,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. +\`configure' configures CUPS 2.3.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1508,7 +1507,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1517,7 +1515,7 @@ Fine tuning of the installation directories: --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --docdir=DIR documentation root [DATAROOTDIR/doc/cups] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] @@ -1525,11 +1523,17 @@ Fine tuning of the installation directories: _ACEOF cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then - + case $ac_init_help in + short | recursive ) echo "Configuration of CUPS 2.3.0:";; + esac cat <<\_ACEOF Optional Features: @@ -1542,31 +1546,34 @@ Optional Features: --enable-libusb use libusb for USB printing --enable-tcp-wrappers use libwrap for TCP wrappers support --enable-acl build with POSIX ACL support - --enable-dbus build with DBUS support + --disable-dbus build without DBUS support --disable-shared do not create shared libraries - --enable-libtool-unsupported + --enable-libtool-unsupported=/path/to/libtool build with libtool (UNSUPPORTED!) --enable-debug build with debugging symbols --enable-debug-guards build with memory allocation guards --enable-debug-printfs build with CUPS_DEBUG_LOG support --enable-unit-tests build and run unit tests --enable-relro build with the GCC relro option + --enable-sanitizer build with AddressSanitizer --disable-gssapi disable GSSAPI support --disable-threads disable multi-threading support --disable-ssl disable SSL/TLS support --enable-cdsassl use CDSA for SSL/TLS support, default=first --enable-gnutls use GNU TLS for SSL/TLS support, default=second - --enable-openssl use OpenSSL for SSL/TLS support, default=third --disable-pam disable PAM support --disable-largefile omit support for large files --disable-avahi disable DNS Service Discovery support using Avahi --disable-dnssd disable DNS Service Discovery support using mDNSResponder --disable-launchd disable launchd support + --disable-systemd disable systemd support + --enable-upstart enable upstart support + --enable-page-logging enable page_log by default --disable-browsing disable Browsing by default --disable-default-shared disable DefaultShared by default --disable-raw-printing do not allow raw printing by default - --enable-webif enable the web interface by default, default=no for OS X + --enable-webif enable the web interface by default, default=no for macOS Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1578,13 +1585,9 @@ Optional Packages: --with-components set components to build: - "all" (default) builds everything - "core" builds libcups and ipptool + - "libcups" builds just libcups + - "libcupslite" builds just libcups without driver support --with-privateinclude set path for private include files, default=none - --with-rcdir set path for rc scripts - --with-rclevels set run levels for rc scripts - --with-rcstart set start number for rc scripts - --with-rcstop set stop number for rc scripts - --with-smfmanifestdir set path for Solaris SMF manifest - --with-xinetd set path for xinetd config files --with-lpdconfig set URI for LPD config file --with-smbconfig set URI for Samba config file --with-cachedir set path for cache files @@ -1593,24 +1596,32 @@ Optional Packages: --with-docdir set path for documentation --with-fontpath set font path for pstoraster --with-logdir set path for log files + --with-rundir set transient run-time state directory --with-optim set optimization flags --with-archflags set default architecture flags --with-ldarchflags set program architecture flags --with-domainsocket set unix domain socket name --with-gssservicename set default gss service name - --with-openssl-libs set directory for OpenSSL library - --with-openssl-includes set directory for OpenSSL includes - --with-pam-module specify the PAM module to use + --with-pam-module set the PAM module to use --with-dnssd-libs set directory for DNS Service Discovery library --with-dnssd-includes set directory for DNS Service Discovery includes + --with-systemd set directory for systemd service files + --with-smfmanifestdir set path for Solaris SMF manifest + --with-rcdir set path for rc scripts + --with-rclevels set run levels for rc scripts + --with-rcstart set start number for rc scripts + --with-rcstop set stop number for rc scripts + --with-xinetd set path for xinetd config files --with-languages set installed languages, default=all - --with-bundledir set OS X localization bundle directory + --with-bundledir set localization bundle directory + --with-bundlelang set localization bundle base language (English or en) + --with-exe-file-perm set default executable permissions value, default=0555 --with-config-file-perm set default ConfigFilePerm value, default=0640 --with-cupsd-file-perm set default cupsd permissions, default=0500 --with-log-file-perm set default LogFilePerm value, default=0644 --with-fatal-errors set default FatalErrors value, default=config --with-log-level set default LogLevel value, default=warn - --with-access-log-level set default AccessLogLevel value, default=actions + --with-access-log-level set default AccessLogLevel value, default=none --with-local-protocols set default BrowseLocalProtocols, default="" --with-cups-user set default user for CUPS --with-cups-group set default group for CUPS @@ -1622,10 +1633,6 @@ Optional Packages: --with-snmp-address set SNMP query address, default=auto --with-snmp-community set SNMP community, default=public --with-ipp-port set port number for IPP, default=631 - --with-java set Java interpreter for web interfaces - --with-perl set Perl interpreter for web interfaces - --with-php set PHP interpreter for web interfaces - --with-python set Python interpreter for web interfaces Some influential environment variables: CC C compiler command @@ -1642,7 +1649,8 @@ Some influential environment variables: Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. -Report bugs to the package provider. +Report bugs to . +CUPS home page: . _ACEOF ac_status=$? fi @@ -1705,7 +1713,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -configure +CUPS configure 2.3.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1990,6 +1998,10 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## --------------------------------------------------- ## +## Report this to https://github.com/apple/cups/issues ## +## --------------------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 @@ -2165,7 +2177,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by $as_me, which was +It was created by CUPS $as_me 2.3.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2515,34 +2527,175 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -uname=`uname` -uversion=`uname -r | sed -e '1,$s/^[^0-9]*\([0-9]*\)\.\([0-9]*\).*/\1\2/'` -uarch=`uname -m` +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi -case "$uname" in - GNU* | GNU/*) - uname="GNU" - ;; - IRIX*) - uname="IRIX" - ;; - Linux*) - uname="Linux" - ;; +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +host_os_name=`echo $host_os | sed -e '1,$s/[0-9.]*$//g'` +host_os_version=`echo $host_os | sed -e '1,$s/^[^0-9.]*//g' | awk -F. '{print $1 $2}'` +# Linux often does not yield an OS version we can use... +if test "x$host_os_version" = x; then + host_os_version="0" +fi + +if test "$build" = "$host"; then + # No, build local targets + LOCALTARGET="local" +else + # Yes, don't build local targets + LOCALTARGET="" +fi + + +for ac_prog in codesign true +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CODE_SIGN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CODE_SIGN in + [\\/]* | ?:[\\/]*) + ac_cv_path_CODE_SIGN="$CODE_SIGN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CODE_SIGN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CODE_SIGN=$ac_cv_path_CODE_SIGN +if test -n "$CODE_SIGN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CODE_SIGN" >&5 +$as_echo "$CODE_SIGN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CODE_SIGN" && break +done ac_config_headers="$ac_config_headers config.h" -CUPS_VERSION="1.6.3" +CUPS_VERSION="2.3.0" CUPS_REVISION="" -#if test -z "$CUPS_REVISION" -a -d .svn; then -# CUPS_REVISION="-r`svnversion . | awk -F: '{print $NF}' | sed -e '1,$s/[[a-zA-Z]]*//g'`" -#fi CUPS_BUILD="cups-$CUPS_VERSION" @@ -3778,12 +3931,12 @@ fi set dummy gzip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_GZIP+:} false; then : +if ${ac_cv_path_GZIPPROG+:} false; then : $as_echo_n "(cached) " >&6 else - case $GZIP in + case $GZIPPROG in [\\/]* | ?:[\\/]*) - ac_cv_path_GZIP="$GZIP" # Let the user override the test with a path. + ac_cv_path_GZIPPROG="$GZIPPROG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -3793,7 +3946,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_GZIP="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_GZIPPROG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -3804,16 +3957,22 @@ IFS=$as_save_IFS ;; esac fi -GZIP=$ac_cv_path_GZIP -if test -n "$GZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GZIP" >&5 -$as_echo "$GZIP" >&6; } +GZIPPROG=$ac_cv_path_GZIPPROG +if test -n "$GZIPPROG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GZIPPROG" >&5 +$as_echo "$GZIPPROG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for install-sh script" >&5 +$as_echo_n "checking for install-sh script... " >&6; } +INSTALL="`pwd`/install-sh" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $INSTALL" >&5 +$as_echo "using $INSTALL" >&6; } # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -3894,6 +4053,46 @@ $as_echo "no" >&6; } fi +# Extract the first word of "mkdir", so it can be a program name with args. +set dummy mkdir; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKDIR+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKDIR in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKDIR="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKDIR=$ac_cv_path_MKDIR +if test -n "$MKDIR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR" >&5 +$as_echo "$MKDIR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "mv", so it can be a program name with args. set dummy mv; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -4094,6 +4293,7 @@ $as_echo "no" >&6; } fi + if test "x$XDGOPEN" = x; then CUPS_HTMLVIEW="htmlview" else @@ -4101,13 +4301,6 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for install-sh script" >&5 -$as_echo_n "checking for install-sh script... " >&6; } -INSTALL="`pwd`/install-sh" - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $INSTALL" >&5 -$as_echo "using $INSTALL" >&6; } - if test "x$AR" = x; then as_fn_error $? "Unable to find required library archive command." "$LINENO" 5 fi @@ -4129,8 +4322,9 @@ fi -# Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKGCONFIG+:} false; then : @@ -4169,6 +4363,63 @@ $as_echo "no" >&6; } fi +fi +if test -z "$ac_cv_path_PKGCONFIG"; then + ac_pt_PKGCONFIG=$PKGCONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKGCONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKGCONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_PKGCONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG +if test -n "$ac_pt_PKGCONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5 +$as_echo "$ac_pt_PKGCONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKGCONFIG" = x; then + PKGCONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKGCONFIG=$ac_pt_PKGCONFIG + fi +else + PKGCONFIG="$ac_cv_path_PKGCONFIG" +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing abs" >&5 @@ -4849,13 +5100,6 @@ if test "x$ac_cv_header_bstring_h" = xyes; then : fi -ac_fn_c_check_header_mongrel "$LINENO" "usersec.h" "ac_cv_header_usersec_h" "$ac_includes_default" -if test "x$ac_cv_header_usersec_h" = xyes; then : - $as_echo "#define HAVE_USERSEC_H 1" >>confdefs.h - -fi - - ac_fn_c_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" if test "x$ac_cv_header_sys_ioctl_h" = xyes; then : $as_echo "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h @@ -4877,13 +5121,6 @@ if test "x$ac_cv_header_sys_ucred_h" = xyes; then : fi -ac_fn_c_check_header_mongrel "$LINENO" "scsi/sg.h" "ac_cv_header_scsi_sg_h" "$ac_includes_default" -if test "x$ac_cv_header_scsi_sg_h" = xyes; then : - $as_echo "#define HAVE_SCSI_SG_H 1" >>confdefs.h - -fi - - ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" if test "x$ac_cv_header_iconv_h" = xyes; then : @@ -4947,18 +5184,9 @@ if test "$ac_res" != no; then : SAVELIBS="$SAVELIBS $LIBS" fi - LIBS="$SAVELIBS" -fi - - - -LIBMXML="" -ac_fn_c_check_header_mongrel "$LINENO" "mxml.h" "ac_cv_header_mxml_h" "$ac_includes_default" -if test "x$ac_cv_header_mxml_h" = xyes; then : - SAVELIBS="$LIBS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing mmxlNewElement" >&5 -$as_echo_n "checking for library containing mmxlNewElement... " >&6; } -if ${ac_cv_search_mmxlNewElement+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing libiconv_open" >&5 +$as_echo_n "checking for library containing libiconv_open... " >&6; } +if ${ac_cv_search_libiconv_open+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -4971,16 +5199,16 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char mmxlNewElement (); +char libiconv_open (); int main () { -return mmxlNewElement (); +return libiconv_open (); ; return 0; } _ACEOF -for ac_lib in '' mxml; do +for ac_lib in '' iconv; do if test -z "$ac_lib"; then ac_res="none required" else @@ -4988,30 +5216,30 @@ for ac_lib in '' mxml; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_mmxlNewElement=$ac_res + ac_cv_search_libiconv_open=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if ${ac_cv_search_mmxlNewElement+:} false; then : + if ${ac_cv_search_libiconv_open+:} false; then : break fi done -if ${ac_cv_search_mmxlNewElement+:} false; then : +if ${ac_cv_search_libiconv_open+:} false; then : else - ac_cv_search_mmxlNewElement=no + ac_cv_search_libiconv_open=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_mmxlNewElement" >&5 -$as_echo "$ac_cv_search_mmxlNewElement" >&6; } -ac_res=$ac_cv_search_mmxlNewElement +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_libiconv_open" >&5 +$as_echo "$ac_cv_search_libiconv_open" >&6; } +ac_res=$ac_cv_search_libiconv_open if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - $as_echo "#define HAVE_MXML_H 1" >>confdefs.h + $as_echo "#define HAVE_ICONV_H 1" >>confdefs.h - LIBMXML="-lmxml" + SAVELIBS="$SAVELIBS $LIBS" fi LIBS="$SAVELIBS" @@ -5019,7 +5247,6 @@ fi - ac_fn_c_check_header_mongrel "$LINENO" "sys/mount.h" "ac_cv_header_sys_mount_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mount_h" = xyes; then : $as_echo "#define HAVE_SYS_MOUNT_H 1" >>confdefs.h @@ -5073,7 +5300,7 @@ _ACEOF fi done -if test "$uname" = "HP-UX" -a "$uversion" = "1020"; then +if test "$host_os_name" = "hp-ux" -a "$host_os_version" = "1020"; then echo Forcing snprintf emulation for HP-UX. else for ac_func in snprintf vsnprintf @@ -5139,8 +5366,8 @@ fi done -case "$uname" in - Linux | GNU) +case "$host_os_name" in + linux* | gnu*) # Do not use sigset on Linux or GNU HURD ;; *) @@ -5184,6 +5411,30 @@ fi done +for ac_func in posix_spawn +do : + ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn" +if test "x$ac_cv_func_posix_spawn" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_POSIX_SPAWN 1 +_ACEOF + +fi +done + + +for ac_func in getgrouplist +do : + ac_fn_c_check_func "$LINENO" "getgrouplist" "ac_cv_func_getgrouplist" +if test "x$ac_cv_func_getgrouplist" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETGROUPLIST 1 +_ACEOF + +fi +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tm_gmtoff member in tm structure" >&5 $as_echo_n "checking for tm_gmtoff member in tm structure... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5253,10 +5504,12 @@ fi LIBUSB="" +USBQUIRKS="" + if test "x$PKGCONFIG" != x; then - if test x$enable_libusb = xyes -o $uname != Darwin; then + if test x$enable_libusb != xno -a $host_os_name != darwin; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libusb-1.0" >&5 $as_echo_n "checking for libusb-1.0... " >&6; } if $PKGCONFIG --exists libusb-1.0; then @@ -5266,9 +5519,13 @@ $as_echo "yes" >&6; } CFLAGS="$CFLAGS `$PKGCONFIG --cflags libusb-1.0`" LIBUSB="`$PKGCONFIG --libs libusb-1.0`" + USBQUIRKS="\$(DATADIR)/usb" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } + if test x$enable_libusb = xyes; then + as_fn_error $? "libusb required for --enable-libusb." "$LINENO" 5 + fi fi fi elif test x$enable_libusb = xyes; then @@ -5376,11 +5633,53 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzgets" >&5 $as_echo "$ac_cv_lib_z_gzgets" >&6; } if test "x$ac_cv_lib_z_gzgets" = xyes; then : - $as_echo "#define HAVE_LIBZ 1" >>confdefs.h + + $as_echo "#define HAVE_LIBZ 1" >>confdefs.h LIBZ="-lz" LIBS="$LIBS -lz" - if test "x$GZIP" != z; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflateCopy in -lz" >&5 +$as_echo_n "checking for inflateCopy in -lz... " >&6; } +if ${ac_cv_lib_z_inflateCopy+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char inflateCopy (); +int +main () +{ +return inflateCopy (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_inflateCopy=yes +else + ac_cv_lib_z_inflateCopy=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflateCopy" >&5 +$as_echo "$ac_cv_lib_z_inflateCopy" >&6; } +if test "x$ac_cv_lib_z_inflateCopy" = xyes; then : + $as_echo "#define HAVE_INFLATECOPY 1" >>confdefs.h + +fi + + if test "x$GZIPPROG" != x; then INSTALL_GZIP="-z" fi fi @@ -5391,8 +5690,8 @@ fi -case $uname in - Darwin* | *BSD*) +case $host_os_name in + darwin* | *bsd*) ARFLAGS="-rcv" ;; *) @@ -5476,12 +5775,6 @@ fi fi LIBS="$SAVELIBS" -if test -d /etc/dbus-1; then - DBUSDIR="/etc/dbus-1" -else - DBUSDIR="" -fi - # Check whether --enable-dbus was given. if test "${enable_dbus+set}" = set; then : enableval=$enable_dbus; @@ -5494,10 +5787,11 @@ if test "${with_dbusdir+set}" = set; then : fi +DBUSDIR="" DBUS_NOTIFIER="" DBUS_NOTIFIERLIBS="" -if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x; then +if test "x$enable_dbus" != xno -a "x$PKGCONFIG" != x -a "x$host_os_name" != xdarwin; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DBUS" >&5 $as_echo_n "checking for DBUS... " >&6; } if $PKGCONFIG --exists dbus-1; then @@ -5515,9 +5809,18 @@ $as_echo "yes" >&6; } if test "x$ac_cv_func_dbus_message_iter_init_append" = xyes; then : $as_echo "#define HAVE_DBUS_MESSAGE_ITER_INIT_APPEND 1" >>confdefs.h +fi + + ac_fn_c_check_func "$LINENO" "dbus_threads_init" "ac_cv_func_dbus_threads_init" +if test "x$ac_cv_func_dbus_threads_init" = xyes; then : + $as_echo "#define HAVE_DBUS_THREADS_INIT 1" >>confdefs.h + fi LIBS="$SAVELIBS" + if test -d /etc/dbus-1; then + DBUSDIR="/etc/dbus-1" + fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -5533,11 +5836,11 @@ CUPS_DEFAULT_SYSTEM_AUTHKEY="" CUPS_SYSTEM_AUTHKEY="" INSTALLXPC="" -case $uname in - Darwin*) +case $host_os_name in + darwin*) BACKLIBS="$BACKLIBS -framework IOKit" SERVERLIBS="$SERVERLIBS -framework IOKit -weak_framework ApplicationServices" - LIBS="-framework SystemConfiguration -framework CoreFoundation -framework Security $LIBS" + LIBS="-framework CoreFoundation -framework Security $LIBS" ac_fn_c_check_header_mongrel "$LINENO" "ApplicationServices/ApplicationServices.h" "ac_cv_header_ApplicationServices_ApplicationServices_h" "$ac_includes_default" if test "x$ac_cv_header_ApplicationServices_ApplicationServices_h" = xyes; then : @@ -5553,29 +5856,10 @@ if test "x$ac_cv_header_CoreFoundation_CoreFoundation_h" = xyes; then : fi - ac_fn_c_check_header_mongrel "$LINENO" "CoreFoundation/CFPriv.h" "ac_cv_header_CoreFoundation_CFPriv_h" "$ac_includes_default" -if test "x$ac_cv_header_CoreFoundation_CFPriv_h" = xyes; then : - $as_echo "#define HAVE_CFPRIV_H 1" >>confdefs.h -fi - - - ac_fn_c_check_header_mongrel "$LINENO" "CoreFoundation/CFBundlePriv.h" "ac_cv_header_CoreFoundation_CFBundlePriv_h" "$ac_includes_default" -if test "x$ac_cv_header_CoreFoundation_CFBundlePriv_h" = xyes; then : - $as_echo "#define HAVE_CFBUNDLEPRIV_H 1" >>confdefs.h - -fi - - - ac_fn_c_check_header_mongrel "$LINENO" "IOKit/pwr_mgt/IOPMLibPrivate.h" "ac_cv_header_IOKit_pwr_mgt_IOPMLibPrivate_h" "$ac_includes_default" -if test "x$ac_cv_header_IOKit_pwr_mgt_IOPMLibPrivate_h" = xyes; then : - $as_echo "#define HAVE_IOKIT_PWR_MGT_IOPMLIBPRIVATE_H 1" >>confdefs.h - -fi - - - - for ac_func in SCDynamicStoreCopyComputerName + SAVELIBS="$LIBS" + LIBS="-framework SystemConfiguration $LIBS" + for ac_func in SCDynamicStoreCopyComputerName do : ac_fn_c_check_func "$LINENO" "SCDynamicStoreCopyComputerName" "ac_cv_func_SCDynamicStoreCopyComputerName" if test "x$ac_cv_func_SCDynamicStoreCopyComputerName" = xyes; then : @@ -5583,6 +5867,11 @@ if test "x$ac_cv_func_SCDynamicStoreCopyComputerName" = xyes; then : #define HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME 1 _ACEOF + $as_echo "#define HAVE_SCDYNAMICSTORECOPYCOMPUTERNAME 1" >>confdefs.h + +else + + LIBS="$SAVELIBS" fi done @@ -5594,13 +5883,6 @@ if test "x$ac_cv_header_membership_h" = xyes; then : fi - ac_fn_c_check_header_mongrel "$LINENO" "membershipPriv.h" "ac_cv_header_membershipPriv_h" "$ac_includes_default" -if test "x$ac_cv_header_membershipPriv_h" = xyes; then : - $as_echo "#define HAVE_MEMBERSHIPPRIV_H 1" >>confdefs.h - -fi - - for ac_func in mbr_uid_to_uuid do : ac_fn_c_check_func "$LINENO" "mbr_uid_to_uuid" "ac_cv_func_mbr_uid_to_uuid" @@ -5609,18 +5891,6 @@ if test "x$ac_cv_func_mbr_uid_to_uuid" = xyes; then : #define HAVE_MBR_UID_TO_UUID 1 _ACEOF -fi -done - - - for ac_func in vproc_transaction_begin -do : - ac_fn_c_check_func "$LINENO" "vproc_transaction_begin" "ac_cv_func_vproc_transaction_begin" -if test "x$ac_cv_func_vproc_transaction_begin" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_VPROC_TRANSACTION_BEGIN 1 -_ACEOF - fi done @@ -5678,33 +5948,21 @@ if test "x$ac_cv_header_Security_Authorization_h" = xyes; then : if test "x$default_adminkey" != xdefault; then CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey $default_adminkey" CUPS_DEFAULT_SYSTEM_AUTHKEY="$default_adminkey" - elif grep -q system.print.operator /etc/authorization; then + else CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.print.admin" CUPS_DEFAULT_SYSTEM_AUTHKEY="system.print.admin" - else - CUPS_SYSTEM_AUTHKEY="SystemGroupAuthKey system.preferences" - CUPS_DEFAULT_SYSTEM_AUTHKEY="system.preferences" fi if test "x$default_operkey" != xdefault; then CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY($default_operkey) @admin @lpadmin" - elif grep -q system.print.operator /etc/authorization; then - CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.operator) @admin @lpadmin" else - CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.admin) @admin @lpadmin" + CUPS_DEFAULT_PRINTOPERATOR_AUTH="@AUTHKEY(system.print.operator) @admin @lpadmin" fi fi - ac_fn_c_check_header_mongrel "$LINENO" "Security/SecBasePriv.h" "ac_cv_header_Security_SecBasePriv_h" "$ac_includes_default" -if test "x$ac_cv_header_Security_SecBasePriv_h" = xyes; then : - $as_echo "#define HAVE_SECBASEPRIV_H 1" >>confdefs.h -fi - - - - if test $uversion -ge 100; then + if test $host_os_version -ge 100; then ac_fn_c_check_header_mongrel "$LINENO" "sandbox.h" "ac_cv_header_sandbox_h" "$ac_includes_default" if test "x$ac_cv_header_sandbox_h" = xyes; then : $as_echo "#define HAVE_SANDBOX_H 1" >>confdefs.h @@ -5713,7 +5971,7 @@ fi fi - if test $uversion -ge 110 -a $uversion -lt 120; then + if test $host_os_version -ge 110 -a $host_os_version -lt 120; then # Broken public headers in 10.7.x... { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sandbox/private.h presence" >&5 $as_echo_n "checking for sandbox/private.h presence... " >&6; } @@ -5735,13 +5993,6 @@ if test "x$ac_cv_header_xpc_xpc_h" = xyes; then : fi - ac_fn_c_check_header_mongrel "$LINENO" "xpc/private.h" "ac_cv_header_xpc_private_h" "$ac_includes_default" -if test "x$ac_cv_header_xpc_private_h" = xyes; then : - $as_echo "#define HAVE_XPC_PRIVATE_H 1" >>confdefs.h - -fi - - ;; esac @@ -5766,13 +6017,44 @@ if test "${with_components+set}" = set; then : fi +cupsimagebase="cupsimage" +IPPEVECOMMANDS="ippevepcl ippeveps" +LIBCUPSOBJS="\$(COREOBJS) \$(DRIVEROBJS)" +LIBHEADERS="\$(COREHEADERS) \$(DRIVERHEADERS)" +LIBHEADERSPRIV="\$(COREHEADERSPRIV) \$(DRIVERHEADERSPRIV)" + case "$COMPONENTS" in all) - BUILDDIRS="filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates" + BUILDDIRS="tools filter backend berkeley cgi-bin monitor notifier ppdc scheduler systemv conf data desktop locale man doc examples templates" ;; core) - BUILDDIRS="data locale" + BUILDDIRS="tools examples locale" + ;; + + corelite) + $as_echo "#define CUPS_LITE 1" >>confdefs.h + + BUILDDIRS="tools examples locale" + cupsimagebase="" + LIBCUPSOBJS="\$(COREOBJS)" + LIBHEADERS="\$(COREHEADERS)" + LIBHEADERSPRIV="\$(COREHEADERSPRIV)" + ;; + + libcups) + BUILDDIRS="locale" + cupsimagebase="" + ;; + + libcupslite) + $as_echo "#define CUPS_LITE 1" >>confdefs.h + + BUILDDIRS="locale" + cupsimagebase="" + LIBCUPSOBJS="\$(COREOBJS)" + LIBHEADERS="\$(COREHEADERS)" + LIBHEADERSPRIV="\$(COREHEADERSPRIV)" ;; *) @@ -5786,6 +6068,9 @@ esac + + + if test "$prefix" = "NONE"; then prefix="/" fi @@ -5844,7 +6129,7 @@ fi if test "$localstatedir" = "\${prefix}/var"; then if test "$prefix" = "/"; then - if test "$uname" = Darwin; then + if test "$host_os_name" = darwin; then localstatedir="/private/var" else localstatedir="/var" @@ -5856,7 +6141,7 @@ fi if test "$sysconfdir" = "\${prefix}/etc"; then if test "$prefix" = "/"; then - if test "$uname" = Darwin; then + if test "$host_os_name" = darwin; then sysconfdir="/private/etc" else sysconfdir="/etc" @@ -5867,20 +6152,12 @@ if test "$sysconfdir" = "\${prefix}/etc"; then fi if test "$libdir" = "\${exec_prefix}/lib"; then - case "$uname" in - IRIX*) - libdir="$exec_prefix/lib32" - ;; - Linux*) + case "$host_os_name" in + linux*) if test -d /usr/lib64 -a ! -d /usr/lib64/fakeroot; then libdir="$exec_prefix/lib64" fi ;; - HP-UX*) - if test -d /usr/lib/hpux32; then - libdir="$exec_prefix/lib/hpux32" - fi - ;; esac fi @@ -5902,166 +6179,6 @@ fi -# Check whether --with-rcdir was given. -if test "${with_rcdir+set}" = set; then : - withval=$with_rcdir; rcdir="$withval" -else - rcdir="" -fi - - -# Check whether --with-rclevels was given. -if test "${with_rclevels+set}" = set; then : - withval=$with_rclevels; rclevels="$withval" -else - rclevels="2 3 5" -fi - - -# Check whether --with-rcstart was given. -if test "${with_rcstart+set}" = set; then : - withval=$with_rcstart; rcstart="$withval" -else - rcstart="99" -fi - - -# Check whether --with-rcstop was given. -if test "${with_rcstop+set}" = set; then : - withval=$with_rcstop; rcstop="$withval" -else - rcstop="00" -fi - - -# Check whether --with-smfmanifestdir was given. -if test "${with_smfmanifestdir+set}" = set; then : - withval=$with_smfmanifestdir; smfmanifestdir="$withval" -else - smfmanifestdir="" -fi - - -INITDIR="" -INITDDIR="" -RCLEVELS="$rclevels" -RCSTART="$rcstart" -RCSTOP="$rcstop" -SMFMANIFESTDIR="" - -if test x$rcdir = x; then - case "$uname" in - AIX*) - INITDIR="/etc/rc.d" - ;; - - Darwin*) - # Darwin and MacOS X... - if test -x /sbin/launchd; then - INITDDIR="/System/Library/LaunchDaemons" - else - INITDDIR="/System/Library/StartupItems/PrintingServices" - fi - ;; - - FreeBSD* | OpenBSD* | MirBSD* | ekkoBSD*) - # FreeBSD and OpenBSD - ;; - - HP-UX*) - INITDIR="/sbin" - RCLEVELS="2" - RCSTART="380" - RCSTOP="620" - ;; - - IRIX*) - # IRIX - INITDIR="/etc" - RCSTART="60" - RCSTOP="25" - ;; - - Linux | GNU | GNU/k*BSD*) - # Linux/HURD seems to choose an init.d directory at random... - if test -d /sbin/init.d; then - # SuSE - INITDIR="/sbin/init.d" - else - if test -d /etc/init.d; then - # Others - INITDIR="/etc" - else - # RedHat - INITDIR="/etc/rc.d" - fi - fi - RCSTART="81" - RCSTOP="36" - ;; - - NetBSD*) - # NetBSD - INITDDIR="/etc/rc.d" - ;; - - OSF1*) - INITDIR="/sbin" - ;; - - SunOS*) - # Solaris - if test "x$smfmanifestdir" != x; then - SMFMANIFESTDIR=$smfmanifestdir - else - INITDIR="/etc" - RCSTART="81" - fi - ;; - - *) - INITDIR="/etc" - ;; - - esac -elif test "x$rcdir" != xno; then - if test "x$rclevels" = x; then - INITDDIR="$rcdir" - else - INITDIR="$rcdir" - fi -fi - - - - - - - - - -# Check whether --with-xinetd was given. -if test "${with_xinetd+set}" = set; then : - withval=$with_xinetd; XINETD="$withval" -else - XINETD="" -fi - - -if test "x$XINETD" = x -a ! -x /sbin/launchd; then - for dir in /private/etc/xinetd.d /etc/xinetd.d /usr/local/etc/xinetd.d; do - if test -d $dir; then - XINETD="$dir" - break - fi - done -elif test "x$XINETD" = xno; then - XINETD="" -fi - - - - # Check whether --with-lpdconfig was given. if test "${with_lpdconfig+set}" = set; then : withval=$with_lpdconfig; LPDCONFIG="$withval" @@ -6135,7 +6252,7 @@ fi if test x$cachedir = x; then - if test "x$uname" = xDarwin; then + if test "x$host_os_name" = xdarwin; then CUPS_CACHEDIR="$localstatedir/spool/cups/cache" else CUPS_CACHEDIR="$localstatedir/cache/cups" @@ -6240,15 +6357,11 @@ _ACEOF # Locale data if test "$localedir" = "\${datarootdir}/locale"; then - case "$uname" in - Linux | GNU | *BSD* | Darwin*) + case "$host_os_name" in + linux* | gnu* | *bsd* | darwin*) CUPS_LOCALEDIR="$datarootdir/locale" ;; - OSF1* | AIX*) - CUPS_LOCALEDIR="$exec_prefix/lib/nls/msg" - ;; - *) # This is the standard System V location... CUPS_LOCALEDIR="$exec_prefix/lib/locale" @@ -6298,9 +6411,9 @@ _ACEOF # Server executables... -case "$uname" in - *BSD* | Darwin*) - # *BSD and Darwin (MacOS X) +case "$host_os_name" in + *bsd* | darwin*) + # *BSD and Darwin (macOS) INSTALL_SYSV="" CUPS_SERVERBIN="$exec_prefix/libexec/cups" ;; @@ -6327,16 +6440,24 @@ _ACEOF # Transient run-time state -case "$uname" in - Darwin*) - # Darwin (OS X) - CUPS_STATEDIR="$CUPS_SERVERROOT" - ;; - *) - # All others - CUPS_STATEDIR="$localstatedir/run/cups" - ;; -esac + +# Check whether --with-rundir was given. +if test "${with_rundir+set}" = set; then : + withval=$with_rundir; CUPS_STATEDIR="$withval" +else + + case "$host_os_name" in + darwin*) + # Darwin (macOS) + CUPS_STATEDIR="$CUPS_SERVERROOT" + ;; + *) + # All others + CUPS_STATEDIR="$localstatedir/run/cups" + ;; + esac +fi + cat >>confdefs.h <<_ACEOF #define CUPS_STATEDIR "$CUPS_STATEDIR" _ACEOF @@ -6344,7 +6465,6 @@ _ACEOF - if test "$mandir" = "\${datarootdir}/man" -a "$prefix" = "/"; then # New GNU "standards" break previous ones, so make sure we use # the right default location for the operating system... @@ -6352,78 +6472,20 @@ if test "$mandir" = "\${datarootdir}/man" -a "$prefix" = "/"; then fi if test "$mandir" = "\${prefix}/man" -a "$prefix" = "/"; then - case "$uname" in - Darwin* | Linux | GNU | *BSD* | AIX*) - # Darwin, MacOS X, Linux, GNU HURD, *BSD, and AIX + case "$host_os_name" in + darwin* | linux* | gnu* | *bsd*) + # Darwin, macOS, Linux, GNU HURD, and *BSD mandir="/usr/share/man" - AMANDIR="/usr/share/man" - PMANDIR="/usr/share/man" - ;; - IRIX) - # SGI IRIX - mandir="/usr/share/catman/u_man" - AMANDIR="/usr/share/catman/a_man" - PMANDIR="/usr/share/catman/p_man" ;; *) # All others mandir="/usr/man" - AMANDIR="/usr/man" - PMANDIR="/usr/man" ;; esac -else - AMANDIR="$mandir" - PMANDIR="$mandir" fi - -case "$uname" in - IRIX*) - # SGI IRIX - MAN1EXT=1 - MAN5EXT=5 - MAN7EXT=7 - MAN8EXT=1m - MAN8DIR=1 - ;; - SunOS* | HP-UX*) - # Solaris and HP-UX - MAN1EXT=1 - MAN5EXT=5 - MAN7EXT=7 - MAN8EXT=1m - MAN8DIR=1m - ;; - Linux* | GNU* | Darwin*) - # Linux, GNU Hurd, and OS X - MAN1EXT=1.gz - MAN5EXT=5.gz - MAN7EXT=7.gz - MAN8EXT=8.gz - MAN8DIR=8 - ;; - *) - # All others - MAN1EXT=1 - MAN5EXT=5 - MAN7EXT=7 - MAN8EXT=8 - MAN8DIR=8 - ;; -esac - - - - - - - - - - PICFLAG=1 DSOFLAGS="${DSOFLAGS:=}" @@ -6435,115 +6497,56 @@ fi cupsbase="cups" LIBCUPSBASE="lib$cupsbase" +LIBCUPSIMAGE="" LIBCUPSSTATIC="lib$cupsbase.a" if test x$enable_shared != xno; then - case "$uname" in - SunOS*) + case "$host_os_name" in + sunos*) LIBCUPS="lib$cupsbase.so.2" - LIBCUPSCGI="libcupscgi.so.1" - LIBCUPSIMAGE="libcupsimage.so.2" - LIBCUPSMIME="libcupsmime.so.1" - LIBCUPSPPDC="libcupsppdc.so.1" + if test "x$cupsimagebase" != x; then + LIBCUPSIMAGE="lib$cupsimagebase.so.2" + fi DSO="\$(CC)" DSOXX="\$(CXX)" - DSOFLAGS="$DSOFLAGS -Wl,-h\`basename \$@\` -G \$(OPTIM)" + DSOFLAGS="$DSOFLAGS -Wl,-h\`basename \$@\` -G" ;; - UNIX_S*) + linux* | gnu* | *bsd*) LIBCUPS="lib$cupsbase.so.2" - LIBCUPSCGI="libcupscgi.so.1" - LIBCUPSIMAGE="libcupsimage.so.2" - LIBCUPSMIME="libcupsmime.so.1" - LIBCUPSPPDC="libcupsppdc.so.1" + if test "x$cupsimagebase" != x; then + LIBCUPSIMAGE="lib$cupsimagebase.so.2" + fi DSO="\$(CC)" DSOXX="\$(CXX)" - DSOFLAGS="$DSOFLAGS -Wl,-h,\`basename \$@\` -G \$(OPTIM)" + DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared" ;; - HP-UX*) - case "$uarch" in - ia64) - LIBCUPS="lib$cupsbase.so.2" - LIBCUPSCGI="libcupscgi.so.1" - LIBCUPSIMAGE="libcupsimage.so.2" - LIBCUPSMIME="libcupsmime.so.1" - LIBCUPSPPDC="libcupsppdc.so.1" - DSO="\$(CC)" - DSOXX="\$(CXX)" - DSOFLAGS="$DSOFLAGS -Wl,-b,-z,+h,\`basename \$@\`" - ;; - *) - LIBCUPS="lib$cupsbase.sl.2" - LIBCUPSCGI="libcupscgi.sl.1" - LIBCUPSIMAGE="libcupsimage.sl.2" - LIBCUPSMIME="libcupsmime.sl.1" - LIBCUPSPPDC="libcupsppdc.sl.1" - DSO="\$(LD)" - DSOXX="\$(LD)" - DSOFLAGS="$DSOFLAGS -b -z +h \`basename \$@\`" - ;; - esac - ;; - IRIX) - LIBCUPS="lib$cupsbase.so.2" - LIBCUPSCGI="libcupscgi.so.1" - LIBCUPSIMAGE="libcupsimage.so.2" - LIBCUPSMIME="libcupsmime.so.1" - LIBCUPSPPDC="libcupsppdc.so.1" - DSO="\$(CC)" - DSOXX="\$(CXX)" - DSOFLAGS="$DSOFLAGS -set_version,sgi2.6,-soname,\`basename \$@\` -shared \$(OPTIM)" - ;; - OSF1* | Linux | GNU | *BSD*) - LIBCUPS="lib$cupsbase.so.2" - LIBCUPSCGI="libcupscgi.so.1" - LIBCUPSIMAGE="libcupsimage.so.2" - LIBCUPSMIME="libcupsmime.so.1" - LIBCUPSPPDC="libcupsppdc.so.1" - DSO="\$(CC)" - DSOXX="\$(CXX)" - DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared \$(OPTIM)" - ;; - Darwin*) + darwin*) LIBCUPS="lib$cupsbase.2.dylib" - LIBCUPSCGI="libcupscgi.1.dylib" - LIBCUPSIMAGE="libcupsimage.2.dylib" - LIBCUPSMIME="libcupsmime.1.dylib" - LIBCUPSPPDC="libcupsppdc.1.dylib" + if test "x$cupsimagebase" != x; then + LIBCUPSIMAGE="lib$cupsimagebase.2.dylib" + fi DSO="\$(CC)" DSOXX="\$(CXX)" - DSOFLAGS="$DSOFLAGS -dynamiclib -single_module -lc" - ;; - AIX*) - LIBCUPS="lib${cupsbase}_s.a" - LIBCUPSBASE="${cupsbase}_s" - LIBCUPSCGI="libcupscgi_s.a" - LIBCUPSIMAGE="libcupsimage_s.a" - LIBCUPSMIME="libcupsmime_s.a" - LIBCUPSPPDC="libcupsppdc_s.a" - DSO="\$(CC)" - DSOXX="\$(CXX)" - DSOFLAGS="$DSOFLAGS -Wl,-bexpall,-bM:SRE,-bnoentry,-blibpath:\$(libdir)" + DSOFLAGS="$DSOFLAGS -Wl,-no_warn_inits -dynamiclib -single_module -lc" ;; *) echo "Warning: shared libraries may not be supported. Trying -shared" echo " option with compiler." LIBCUPS="lib$cupsbase.so.2" - LIBCUPSCGI="libcupscgi.so.1" - LIBCUPSIMAGE="libcupsimage.so.2" - LIBCUPSMIME="libcupsmime.so.1" - LIBCUPSPPDC="libcupsppdc.so.1" + if test "x$cupsimagebase" != x; then + LIBCUPSIMAGE="lib$cupsimagebase.so.2" + fi DSO="\$(CC)" DSOXX="\$(CXX)" - DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared \$(OPTIM)" + DSOFLAGS="$DSOFLAGS -Wl,-soname,\`basename \$@\` -shared" ;; esac else PICFLAG=0 LIBCUPS="lib$cupsbase.a" - LIBCUPSCGI="libcupscgi.a" - LIBCUPSIMAGE="libcupsimage.a" - LIBCUPSMIME="libcupsmime.a" - LIBCUPSPPDC="libcupsppdc.a" + if test "x$cupsimagebase" != x; then + LIBCUPSIMAGE="lib$cupsimagebase.a" + fi DSO=":" DSOXX=":" fi @@ -6556,64 +6559,25 @@ fi - - - if test x$enable_shared = xno; then - LINKCUPS="../cups/lib$cupsbase.a" - LINKCUPSIMAGE="../filter/libcupsimage.a" - - EXTLINKCUPS="-lcups" - EXTLINKCUPSIMAGE="-lcupsimage" + LINKCUPS="../cups/lib$cupsbase.a \$(LIBS)" + EXTLINKCUPS="-lcups \$LIBS" else - if test $uname = AIX; then - LINKCUPS="-l${cupsbase}_s" - LINKCUPSIMAGE="-lcupsimage_s" - - EXTLINKCUPS="-lcups_s" - EXTLINKCUPSIMAGE="-lcupsimage_s" - else - LINKCUPS="-l${cupsbase}" - LINKCUPSIMAGE="-lcupsimage" - - EXTLINKCUPS="-lcups" - EXTLINKCUPSIMAGE="-lcupsimage" - fi + LINKCUPS="-L../cups -l${cupsbase}" + EXTLINKCUPS="-lcups" fi - - EXPORT_LDFLAGS="" if test "$DSO" != ":"; then - # When using DSOs the image libraries are linked to libcupsimage.so - # rather than to the executables. This makes things smaller if you - # are using any static libraries, and it also allows us to distribute - # a single DSO rather than a bunch... - DSOLIBS="\$(LIBZ)" - IMGLIBS="" - # Tell the run-time linkers where to find a DSO. Some platforms # need this option, even when the library is installed in a # standard location... - case $uname in - HP-UX*) - # HP-UX needs the path, even for /usr/lib... - case "$uarch" in - ia64) - DSOFLAGS="-Wl,+s,+b,$libdir $DSOFLAGS" - ;; - *) - DSOFLAGS="+s +b $libdir $DSOFLAGS" - ;; - esac - LDFLAGS="$LDFLAGS -Wl,+s,+b,$libdir" - EXPORT_LDFLAGS="-Wl,+s,+b,$libdir" - ;; - SunOS*) + case $host_os_name in + sunos*) # Solaris... if test $exec_prefix != /usr; then DSOFLAGS="-R$libdir $DSOFLAGS" @@ -6621,7 +6585,7 @@ if test "$DSO" != ":"; then EXPORT_LDFLAGS="-R$libdir" fi ;; - *BSD*) + *bsd*) # *BSD... if test $exec_prefix != /usr; then DSOFLAGS="-Wl,-R$libdir $DSOFLAGS" @@ -6629,8 +6593,8 @@ if test "$DSO" != ":"; then EXPORT_LDFLAGS="-Wl,-R$libdir" fi ;; - IRIX | Linux | GNU) - # IRIX, Linux, and HURD... + linux* | gnu*) + # Linux, and HURD... if test $exec_prefix != /usr; then DSOFLAGS="-Wl,-rpath,$libdir $DSOFLAGS" LDFLAGS="$LDFLAGS -Wl,-rpath,$libdir" @@ -6638,20 +6602,17 @@ if test "$DSO" != ":"; then fi ;; esac -else - DSOLIBS="" - IMGLIBS="\$(LIBZ)" fi - - - # Check whether --enable-libtool_unsupported was given. if test "${enable_libtool_unsupported+set}" = set; then : enableval=$enable_libtool_unsupported; if test x$enable_libtool_unsupported != xno; then + if test x$enable_libtool_unsupported == xyes; then + as_fn_error $? "Use --enable-libtool-unsupported=/path/to/libtool." "$LINENO" 5 + fi LIBTOOL="$enable_libtool_unsupported" enable_shared=no echo "WARNING: libtool is not supported or endorsed by Apple Inc." @@ -6662,29 +6623,58 @@ if test "${enable_libtool_unsupported+set}" = set; then : fi - - if test x$LIBTOOL != x; then + DSO="\$(LIBTOOL) --mode=link --tag=CC ${CC}" + DSOXX="\$(LIBTOOL) --mode=link --tag=CXX ${CXX}" + + LD_CC="\$(LIBTOOL) --mode=link --tag=CC ${CC}" + LD_CXX="\$(LIBTOOL) --mode=link --tag=CXX ${CXX}" + LIBCUPS="libcups.la" + LIBCUPSSTATIC="libcups.la" + LIBCUPSCGI="libcupscgi.la" LIBCUPSIMAGE="libcupsimage.la" + LIBCUPSMIME="libcupsmime.la" + LIBCUPSPPDC="libcupsppdc.la" + + LIBTOOL_CC="\$(LIBTOOL) --mode=compile --tag=CC" + LIBTOOL_CXX="\$(LIBTOOL) --mode=compile --tag=CXX" + LIBTOOL_INSTALL="\$(LIBTOOL) --mode=install" + LINKCUPS="../cups/\$(LIBCUPS)" - LINKCUPSIMAGE="../filter/\$(LIBCUPSIMAGE)" - DSO="\$(CC)" + LINKCUPSIMAGE="../cups/\$(LIBCUPSIMAGE)" + +else + LD_CC="\$(CC)" + LD_CXX="\$(CXX)" + + LIBTOOL_CC="" + LIBTOOL_CXX="" + LIBTOOL_INSTALL="" fi -INSTALL_STRIP="" -OPTIM="" + + + +INSTALL_STRIP="" + + + # Check whether --with-optim was given. if test "${with_optim+set}" = set; then : - withval=$with_optim; + withval=$with_optim; OPTIM="$withval" +else + OPTIM="" fi + + # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; @@ -6706,7 +6696,7 @@ if test "${enable_unit_tests+set}" = set; then : fi -if test x$enable_debug = xyes; then +if test x$enable_debug = xyes -a "x$OPTIM" = x; then OPTIM="-g" else INSTALL_STRIP="-s" @@ -6723,6 +6713,10 @@ if test x$enable_debug_guards = xyes; then fi if test x$enable_unit_tests = xyes; then + if test "$build" != "$host"; then + as_fn_error $? "Sorry, cannot build unit tests when cross-compiling." "$LINENO" 5 + fi + UNITTESTS="unittests" else UNITTESTS="" @@ -6749,7 +6743,7 @@ else fi if test -z "$with_ldarchflags"; then - if test "$uname" = Darwin; then + if test "$host_os_name" = darwin; then # Only create Intel programs by default LDARCHFLAGS="`echo $ARCHFLAGS | sed -e '1,$s/-arch ppc64//'`" else @@ -6768,6 +6762,12 @@ if test "${enable_relro+set}" = set; then : fi +# Check whether --enable-sanitizer was given. +if test "${enable_sanitizer+set}" = set; then : + enableval=$enable_sanitizer; +fi + + CXXLIBS="${CXXLIBS:=}" @@ -6777,27 +6777,40 @@ PIEFLAGS="" RELROFLAGS="" +WARNING_OPTIONS="" + + if test -n "$GCC"; then # Add GCC-specific compiler options... + + # Address sanitizer is a useful tool to use when developing/debugging + # code but adds about 2x overhead... + if test x$enable_sanitizer = xyes; then + # Use -fsanitize=address with debugging... + OPTIM="$OPTIM -g -fsanitize=address" + else + # Otherwise use the Fortify enhancements to catch any unbounded + # string operations... + CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" + CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=2" + fi + + # Default optimization options... if test -z "$OPTIM"; then - if test "x$with_optim" = x; then - # Default to optimize-for-size and debug - OPTIM="-Os -g" - else - OPTIM="$with_optim $OPTIM" - fi + # Default to optimize-for-size and debug + OPTIM="-Os -g" fi # Generate position-independent code as needed... - if test $PICFLAG = 1 -a $uname != AIX; then + if test $PICFLAG = 1; then OPTIM="-fPIC $OPTIM" fi # The -fstack-protector option is available with some versions of # GCC and adds "stack canaries" which detect when the return address # has been overwritten, preventing many types of exploit attacks. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -fstack-protector" >&5 -$as_echo_n "checking if GCC supports -fstack-protector... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -fstack-protector" >&5 +$as_echo_n "checking whether compiler supports -fstack-protector... " >&6; } OLDCFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fstack-protector" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6812,7 +6825,12 @@ main () } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - OPTIM="$OPTIM -fstack-protector" + if test "x$LSB_BUILD" = xy; then + # Can't use stack-protector with LSB binaries... + OPTIM="$OPTIM -fno-stack-protector" + else + OPTIM="$OPTIM -fstack-protector" + fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else @@ -6823,14 +6841,19 @@ rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$OLDCFLAGS" - # The -fPIE option is available with some versions of GCC and adds - # randomization of addresses, which avoids another class of exploits - # that depend on a fixed address for common functions. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -fPIE" >&5 -$as_echo_n "checking if GCC supports -fPIE... " >&6; } - OLDCFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -fPIE" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test "x$LSB_BUILD" != xy; then + # The -fPIE option is available with some versions of GCC and + # adds randomization of addresses, which avoids another class of + # exploits that depend on a fixed address for common functions. + # + # Not available to LSB binaries... + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -fPIE" >&5 +$as_echo_n "checking whether compiler supports -fPIE... " >&6; } + OLDCFLAGS="$CFLAGS" + case "$host_os_name" in + darwin*) + CFLAGS="$CFLAGS -fPIE -Wl,-pie" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -6842,149 +6865,70 @@ main () } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - case "$CC" in - *clang) - PIEFLAGS="-fPIE -Wl,-pie" + + PIEFLAGS="-fPIE -Wl,-pie" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; + *) - PIEFLAGS="-fPIE -pie" + CFLAGS="$CFLAGS -fPIE -pie" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + PIEFLAGS="-fPIE -pie" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$OLDCFLAGS" - - if test "x$with_optim" = x; then - # Add useful warning options for tracking down problems... - OPTIM="-Wall -Wno-format-y2k -Wunused $OPTIM" - - # Additional warning options for development testing... - if test -d .svn; then - OPTIM="-Wshadow -Werror $OPTIM" - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GCC supports -Wno-tautological-compare" >&5 -$as_echo_n "checking if GCC supports -Wno-tautological-compare... " >&6; } - OLDCFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror -Wno-tautological-compare" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - OPTIM="$OPTIM -Wno-tautological-compare" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$OLDCFLAGS" - fi + CFLAGS="$OLDCFLAGS" fi - case "$uname" in - Darwin*) - # -D_FORTIFY_SOURCE=2 adds additional object size - # checking, basically wrapping all string functions - # with buffer-limited ones. Not strictly needed for - # CUPS since we already use buffer-limited calls, but - # this will catch any additions that are broken. - CFLAGS="$CFLAGS -D_FORTIFY_SOURCE=2" - ;; + # Add useful warning options for tracking down problems... + WARNING_OPTIONS="-Wall -Wno-format-y2k -Wunused -Wno-unused-result -Wsign-conversion" - Linux*) - # The -z relro option is provided by the Linux linker command to - # make relocatable data read-only. - if test x$enable_relro = xyes; then - RELROFLAGS="-Wl,-z,relro" - fi + # Test GCC version for certain warning flags since -Werror + # doesn't trigger... + gccversion=`$CC --version | head -1 | awk '{print $NF}'` + case "$gccversion" in + 1.* | 2.* | 3.* | 4.* | 5.* | 6.* | \(clang-*) + ;; + *) + WARNING_OPTIONS="$WARNING_OPTIONS -Wno-format-truncation -Wno-format-overflow -Wno-tautological-compare" ;; esac + + # Additional warning options for development testing... + if test -d .git; then + WARNING_OPTIONS="-Werror -Wno-error=deprecated-declarations $WARNING_OPTIONS" + fi else # Add vendor-specific compiler options... - case $uname in - AIX*) - if test -z "$OPTIM"; then - if test "x$with_optim" = x; then - OPTIM="-O2 -qmaxmem=6000" - else - OPTIM="$with_optim $OPTIM" - fi - fi - ;; - HP-UX*) - if test -z "$OPTIM"; then - if test "x$with_optim" = x; then - OPTIM="+O2" - else - OPTIM="$with_optim $OPTIM" - fi - fi - - CFLAGS="-Ae $CFLAGS" - - if test $PICFLAG = 1; then - OPTIM="+z $OPTIM" - fi - ;; - IRIX) - if test -z "$OPTIM"; then - if test "x$with_optim" = x; then - OPTIM="-O2" - else - OPTIM="$with_optim $OPTIM" - fi - fi - - if test "x$with_optim" = x; then - OPTIM="-fullwarn -woff 1183,1209,1349,1506,3201 $OPTIM" - fi - ;; - OSF*) - # Tru64 UNIX aka Digital UNIX aka OSF/1 - if test -z "$OPTIM"; then - if test "x$with_optim" = x; then - OPTIM="-O" - else - OPTIM="$with_optim" - fi - fi - ;; - SunOS*) + case $host_os_name in + sunos*) # Solaris if test -z "$OPTIM"; then - if test "x$with_optim" = x; then - OPTIM="-xO2" - else - OPTIM="$with_optim $OPTIM" - fi - fi - - if test $PICFLAG = 1; then - OPTIM="-KPIC $OPTIM" - fi - ;; - UNIX_SVR*) - # UnixWare - if test -z "$OPTIM"; then - if test "x$with_optim" = x; then - OPTIM="-O" - else - OPTIM="$with_optim $OPTIM" - fi + OPTIM="-xO2" fi if test $PICFLAG = 1; then @@ -6992,50 +6936,41 @@ else fi ;; *) - # Running some other operating system; inform the user they - # should contribute the necessary options to - # cups-support@cups.org... - echo "Building CUPS with default compiler optimizations; contact" - echo "cups-bugs@cups.org with uname and compiler options needed" - echo "for your platform, or set the CFLAGS and LDFLAGS environment" - echo "variables before running configure." + # Running some other operating system; inform the user + # they should contribute the necessary options via + # Github... + echo "Building CUPS with default compiler optimizations; contact the CUPS developers on Github" + echo "(https://github.com/apple/cups/issues) with the uname and compiler options needed for" + echo "your platform, or set the CFLAGS and LDFLAGS environment variables before running" + echo "configure." ;; esac fi # Add general compiler options per platform... -case $uname in - HP-UX*) - # HP-UX 10.20 (at least) needs this definition to get the - # h_errno global... - OPTIM="$OPTIM -D_XOPEN_SOURCE_EXTENDED" - - # HP-UX 11.00 (at least) needs this definition to get the - # u_short type used by the IP headers... - OPTIM="$OPTIM -D_INCLUDE_HPUX_SOURCE" - - # HP-UX 11.23 (at least) needs this definition to get the - # IPv6 header to work... - OPTIM="$OPTIM -D_HPUX_SOURCE" - ;; - - Linux*) +case $host_os_name in + linux*) # glibc 2.8 and higher breaks peer credentials unless you # define _GNU_SOURCE... OPTIM="$OPTIM -D_GNU_SOURCE" - ;; - OSF*) - # Tru64 UNIX aka Digital UNIX aka OSF/1 need to be told - # to be POSIX-compliant... - OPTIM="$OPTIM -D_XOPEN_SOURCE=500 -D_XOPEN_SOURCE_EXTENDED -D_OSF_SOURCE" + # The -z relro option is provided by the Linux linker command to + # make relocatable data read-only. + if test x$enable_relro = xyes; then + RELROFLAGS="-Wl,-z,relro,-z,now" + fi ;; esac - -ac_fn_c_check_header_mongrel "$LINENO" "resolv.h" "ac_cv_header_resolv_h" "$ac_includes_default" +ac_fn_c_check_header_compile "$LINENO" "resolv.h" "ac_cv_header_resolv_h" " +#include +#include +#include +#include +#include +" if test "x$ac_cv_header_resolv_h" = xyes; then : $as_echo "#define HAVE_RESOLV_H 1" >>confdefs.h @@ -7501,7 +7436,7 @@ fi # Tru64 5.1b leaks file descriptors with these functions; disable until # we can come up with a test for this... -if test "$uname" != "OSF1"; then +if test "$host_os_name" != "osf1"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getaddrinfo" >&5 $as_echo_n "checking for library containing getaddrinfo... " >&6; } if ${ac_cv_search_getaddrinfo+:} false; then : @@ -7645,9 +7580,9 @@ fi if test x$enable_domainsocket != xno -a x$default_domainsocket != xno; then if test "x$default_domainsocket" = x; then - case "$uname" in - Darwin*) - # Darwin and MaxOS X do their own thing... + case "$host_os_name" in + darwin*) + # Darwin and macOS do their own thing... CUPS_DEFAULT_DOMAINSOCKET="$localstatedir/run/cupsd" ;; *) @@ -7672,22 +7607,6 @@ fi -for ac_header in AppleTalk/at_proto.h -do : - ac_fn_c_check_header_compile "$LINENO" "AppleTalk/at_proto.h" "ac_cv_header_AppleTalk_at_proto_h" "#include -" -if test "x$ac_cv_header_AppleTalk_at_proto_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_APPLETALK_AT_PROTO_H 1 -_ACEOF - $as_echo "#define HAVE_APPLETALK_AT_PROTO_H 1" >>confdefs.h - -fi - -done - - - ac_fn_c_check_func "$LINENO" "poll" "ac_cv_func_poll" if test "x$ac_cv_func_poll" = xyes; then : @@ -7709,7 +7628,6 @@ fi - # Check whether --enable-gssapi was given. if test "${enable_gssapi+set}" = set; then : enableval=$enable_gssapi; @@ -7720,8 +7638,9 @@ LIBGSSAPI="" if test x$enable_gssapi != xno; then - # Extract the first word of "krb5-config", so it can be a program name with args. -set dummy krb5-config; ac_word=$2 + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}krb5-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}krb5-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_KRB5CONFIG+:} false; then : @@ -7760,10 +7679,67 @@ $as_echo "no" >&6; } fi +fi +if test -z "$ac_cv_path_KRB5CONFIG"; then + ac_pt_KRB5CONFIG=$KRB5CONFIG + # Extract the first word of "krb5-config", so it can be a program name with args. +set dummy krb5-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_KRB5CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_KRB5CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_KRB5CONFIG="$ac_pt_KRB5CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_KRB5CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_KRB5CONFIG=$ac_cv_path_ac_pt_KRB5CONFIG +if test -n "$ac_pt_KRB5CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_KRB5CONFIG" >&5 +$as_echo "$ac_pt_KRB5CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_KRB5CONFIG" = x; then + KRB5CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + KRB5CONFIG=$ac_pt_KRB5CONFIG + fi +else + KRB5CONFIG="$ac_cv_path_KRB5CONFIG" +fi + if test "x$KRB5CONFIG" != x; then - case "$uname" in - Darwin) - # OS X weak-links to the Kerberos framework... + case "$host_os_name" in + darwin) + # macOS weak-links to the Kerberos framework... LIBGSSAPI="-weak_framework Kerberos" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSS framework" >&5 $as_echo_n "checking for GSS framework... " >&6; } @@ -7776,7 +7752,7 @@ $as_echo "yes" >&6; } $as_echo "no" >&6; } fi ;; - SunOS*) + sunos*) # Solaris has a non-standard krb5-config, don't use it! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_display_status in -lgss" >&5 $as_echo_n "checking for gss_display_status in -lgss... " >&6; } @@ -7836,8 +7812,8 @@ $as_echo "#define HAVE_GSSAPI 1" >>confdefs.h else # Check for vendor-specific implementations... - case "$uname" in - HP-UX*) + case "$host_os_name" in + hp-ux*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_display_status in -lgss" >&5 $as_echo_n "checking for gss_display_status in -lgss... " >&6; } if ${ac_cv_lib_gss_gss_display_status+:} false; then : @@ -7882,7 +7858,7 @@ $as_echo "#define HAVE_GSSAPI 1" >>confdefs.h fi ;; - SunOS*) + sunos*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gss_display_status in -lgss" >&5 $as_echo_n "checking for gss_display_status in -lgss... " >&6; } if ${ac_cv_lib_gss_gss_display_status+:} false; then : @@ -7939,53 +7915,27 @@ fi if test -d /System/Library/Frameworks/GSS.framework; then - gssdir="/System/Library/Frameworks/GSS.framework" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSS/gssapi.h presence" >&5 -$as_echo_n "checking for GSS/gssapi.h presence... " >&6; } - if test -f $gssdir/Headers/gssapi.h; then - $as_echo "#define HAVE_GSS_GSSAPI_H 1" >>confdefs.h + ac_fn_c_check_header_mongrel "$LINENO" "GSS/gssapi.h" "ac_cv_header_GSS_gssapi_h" "$ac_includes_default" +if test "x$ac_cv_header_GSS_gssapi_h" = xyes; then : + $as_echo "#define HAVE_GSS_GSSAPI_H 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSS/gssapi_generic.h presence" >&5 -$as_echo_n "checking for GSS/gssapi_generic.h presence... " >&6; } - if test -f $gssdir/Headers/gssapi_generic.h; then - $as_echo "#define HAVE_GSSAPI_GENERIC_H 1" >>confdefs.h +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "GSS/gssapi_generic.h" "ac_cv_header_GSS_gssapi_generic_h" "$ac_includes_default" +if test "x$ac_cv_header_GSS_gssapi_generic_h" = xyes; then : + $as_echo "#define HAVE_GSS_GSSAPI_GENERIC_H 1" >>confdefs.h + +fi + + + ac_fn_c_check_header_mongrel "$LINENO" "GSS/gssapi_spi.h" "ac_cv_header_GSS_gssapi_spi_h" "$ac_includes_default" +if test "x$ac_cv_header_GSS_gssapi_spi_h" = xyes; then : + $as_echo "#define HAVE_GSS_GSSAPI_SPI_H 1" >>confdefs.h + +fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSS/gssapi_spi.h presence" >&5 -$as_echo_n "checking for GSS/gssapi_spi.h presence... " >&6; } - if test -f $gssdir/PrivateHeaders/gssapi_spi.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSS/gssapi_spi.h usability" >&5 -$as_echo_n "checking for GSS/gssapi_spi.h usability... " >&6; } - if test -s $gssdir/PrivateHeaders/gssapi_spi.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - $as_echo "#define HAVE_GSS_GSSAPI_SPI_H 1" >>confdefs.h - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - if test $uversion -ge 110 -a $uversion -lt 120; then - # Broken public headers in 10.7.x... - as_fn_error $? "Run 'sudo mkdir -p $gssdir/PrivateHeaders' and 'sudo touch $gssdir/PrivateHeaders/gssapi_spi.h' to build CUPS." "$LINENO" 5 - fi - fi else ac_fn_c_check_header_mongrel "$LINENO" "gssapi.h" "ac_cv_header_gssapi_h" "$ac_includes_default" if test "x$ac_cv_header_gssapi_h" = xyes; then : @@ -8113,7 +8063,6 @@ _ACEOF - # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; @@ -8164,7 +8113,7 @@ $as_echo "$have_pthread" >&6; } # Solaris requires -D_POSIX_PTHREAD_SEMANTICS to # be POSIX-compliant... :( - if test $uname = SunOS; then + if test $host_os_name = sunos; then PTHREAD_FLAGS="$PTHREAD_FLAGS -D_POSIX_PTHREAD_SEMANTICS" fi break @@ -8176,7 +8125,6 @@ fi - # Check whether --enable-ssl was given. if test "${enable_ssl+set}" = set; then : enableval=$enable_ssl; @@ -8192,35 +8140,15 @@ if test "${enable_gnutls+set}" = set; then : enableval=$enable_gnutls; fi -# Check whether --enable-openssl was given. -if test "${enable_openssl+set}" = set; then : - enableval=$enable_openssl; -fi - - -# Check whether --with-openssl-libs was given. -if test "${with_openssl_libs+set}" = set; then : - withval=$with_openssl_libs; LDFLAGS="-L$withval $LDFLAGS" - DSOFLAGS="-L$withval $DSOFLAGS" -fi - - -# Check whether --with-openssl-includes was given. -if test "${with_openssl_includes+set}" = set; then : - withval=$with_openssl_includes; CFLAGS="-I$withval $CFLAGS" - CPPFLAGS="-I$withval $CPPFLAGS" -fi - SSLFLAGS="" SSLLIBS="" have_ssl=0 -CUPS_SERVERCERT="" -CUPS_SERVERKEY="" +CUPS_SERVERKEYCHAIN="" if test x$enable_ssl != xno; then if test $have_ssl = 0 -a "x$enable_cdsassl" != "xno"; then - if test $uname = Darwin; then + if test $host_os_name = darwin; then ac_fn_c_check_header_mongrel "$LINENO" "Security/SecureTransport.h" "ac_cv_header_Security_SecureTransport_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecureTransport_h" = xyes; then : @@ -8229,16 +8157,9 @@ if test "x$ac_cv_header_Security_SecureTransport_h" = xyes; then : $as_echo "#define HAVE_CDSASSL 1" >>confdefs.h - CUPS_SERVERCERT="/Library/Keychains/System.keychain" + CUPS_SERVERKEYCHAIN="/Library/Keychains/System.keychain" - ac_fn_c_check_header_mongrel "$LINENO" "Security/SecureTransportPriv.h" "ac_cv_header_Security_SecureTransportPriv_h" "$ac_includes_default" -if test "x$ac_cv_header_Security_SecureTransportPriv_h" = xyes; then : - $as_echo "#define HAVE_SECURETRANSPORTPRIV_H 1" >>confdefs.h - -fi - - - ac_fn_c_check_header_mongrel "$LINENO" "Security/SecCertificate.h" "ac_cv_header_Security_SecCertificate_h" "$ac_includes_default" + ac_fn_c_check_header_mongrel "$LINENO" "Security/SecCertificate.h" "ac_cv_header_Security_SecCertificate_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecCertificate_h" = xyes; then : $as_echo "#define HAVE_SECCERTIFICATE_H 1" >>confdefs.h @@ -8252,14 +8173,6 @@ if test "x$ac_cv_header_Security_SecItem_h" = xyes; then : fi - ac_fn_c_check_header_compile "$LINENO" "Security/SecItemPriv.h" "ac_cv_header_Security_SecItemPriv_h" "#include -" -if test "x$ac_cv_header_Security_SecItemPriv_h" = xyes; then : - $as_echo "#define HAVE_SECITEMPRIV_H 1" >>confdefs.h - -fi - - ac_fn_c_check_header_mongrel "$LINENO" "Security/SecPolicy.h" "ac_cv_header_Security_SecPolicy_h" "$ac_includes_default" if test "x$ac_cv_header_Security_SecPolicy_h" = xyes; then : $as_echo "#define HAVE_SECPOLICY_H 1" >>confdefs.h @@ -8267,75 +8180,16 @@ if test "x$ac_cv_header_Security_SecPolicy_h" = xyes; then : fi - ac_fn_c_check_header_mongrel "$LINENO" "Security/SecPolicyPriv.h" "ac_cv_header_Security_SecPolicyPriv_h" "$ac_includes_default" -if test "x$ac_cv_header_Security_SecPolicyPriv_h" = xyes; then : - $as_echo "#define HAVE_SECPOLICYPRIV_H 1" >>confdefs.h - fi - ac_fn_c_check_header_mongrel "$LINENO" "Security/SecBasePriv.h" "ac_cv_header_Security_SecBasePriv_h" "$ac_includes_default" -if test "x$ac_cv_header_Security_SecBasePriv_h" = xyes; then : - $as_echo "#define HAVE_SECBASEPRIV_H 1" >>confdefs.h - -fi - - - ac_fn_c_check_header_mongrel "$LINENO" "Security/SecIdentitySearchPriv.h" "ac_cv_header_Security_SecIdentitySearchPriv_h" "$ac_includes_default" -if test "x$ac_cv_header_Security_SecIdentitySearchPriv_h" = xyes; then : - $as_echo "#define HAVE_SECIDENTITYSEARCHPRIV_H 1" >>confdefs.h - -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SecCertificateCopyData" >&5 -$as_echo_n "checking for SecCertificateCopyData... " >&6; } - if test $uversion -ge 100; then - $as_echo "#define HAVE_SECCERTIFICATECOPYDATA 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SecIdentitySearchCreateWithPolicy" >&5 -$as_echo_n "checking for SecIdentitySearchCreateWithPolicy... " >&6; } - if test $uversion -ge 80; then - $as_echo "#define HAVE_SECIDENTITYSEARCHCREATEWITHPOLICY 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SecPolicyCreateSSL" >&5 -$as_echo_n "checking for SecPolicyCreateSSL... " >&6; } - if test $uversion -ge 110; then - $as_echo "#define HAVE_SECPOLICYCREATESSL 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi -fi - - - - $as_echo "#define HAVE_CSSMERRORSTRING 1" >>confdefs.h - fi fi if test $have_ssl = 0 -a "x$enable_gnutls" != "xno" -a "x$PKGCONFIG" != x; then - # Extract the first word of "libgnutls-config", so it can be a program name with args. -set dummy libgnutls-config; ac_word=$2 + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}libgnutls-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}libgnutls-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_LIBGNUTLSCONFIG+:} false; then : @@ -8374,16 +8228,19 @@ $as_echo "no" >&6; } fi - # Extract the first word of "libgcrypt-config", so it can be a program name with args. -set dummy libgcrypt-config; ac_word=$2 +fi +if test -z "$ac_cv_path_LIBGNUTLSCONFIG"; then + ac_pt_LIBGNUTLSCONFIG=$LIBGNUTLSCONFIG + # Extract the first word of "libgnutls-config", so it can be a program name with args. +set dummy libgnutls-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_LIBGCRYPTCONFIG+:} false; then : +if ${ac_cv_path_ac_pt_LIBGNUTLSCONFIG+:} false; then : $as_echo_n "(cached) " >&6 else - case $LIBGCRYPTCONFIG in + case $ac_pt_LIBGNUTLSCONFIG in [\\/]* | ?:[\\/]*) - ac_cv_path_LIBGCRYPTCONFIG="$LIBGCRYPTCONFIG" # Let the user override the test with a path. + ac_cv_path_ac_pt_LIBGNUTLSCONFIG="$ac_pt_LIBGNUTLSCONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -8393,7 +8250,7 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_LIBGCRYPTCONFIG="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_ac_pt_LIBGNUTLSCONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -8404,15 +8261,29 @@ IFS=$as_save_IFS ;; esac fi -LIBGCRYPTCONFIG=$ac_cv_path_LIBGCRYPTCONFIG -if test -n "$LIBGCRYPTCONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPTCONFIG" >&5 -$as_echo "$LIBGCRYPTCONFIG" >&6; } +ac_pt_LIBGNUTLSCONFIG=$ac_cv_path_ac_pt_LIBGNUTLSCONFIG +if test -n "$ac_pt_LIBGNUTLSCONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LIBGNUTLSCONFIG" >&5 +$as_echo "$ac_pt_LIBGNUTLSCONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi + if test "x$ac_pt_LIBGNUTLSCONFIG" = x; then + LIBGNUTLSCONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIBGNUTLSCONFIG=$ac_pt_LIBGNUTLSCONFIG + fi +else + LIBGNUTLSCONFIG="$ac_cv_path_LIBGNUTLSCONFIG" +fi if $PKGCONFIG --exists gnutls; then have_ssl=1 @@ -8433,105 +8304,30 @@ fi fi if test $have_ssl = 1; then - CUPS_SERVERCERT="ssl/server.crt" - CUPS_SERVERKEY="ssl/server.key" + CUPS_SERVERKEYCHAIN="ssl" - if $PKGCONFIG --exists gcrypt; then - SSLLIBS="$SSLLIBS `$PKGCONFIG --libs gcrypt`" - SSLFLAGS="$SSLFLAGS `$PKGCONFIG --cflags gcrypt`" - elif test "x$LIBGCRYPTCONFIG" != x; then - SSLLIBS="$SSLLIBS `$LIBGCRYPTCONFIG --libs`" - SSLFLAGS="$SSLFLAGS `$LIBGCRYPTCONFIG --cflags`" - fi - fi - fi - - if test $have_ssl = 0 -a "x$enable_openssl" != "xno"; then - ac_fn_c_check_header_mongrel "$LINENO" "openssl/ssl.h" "ac_cv_header_openssl_ssl_h" "$ac_includes_default" -if test "x$ac_cv_header_openssl_ssl_h" = xyes; then : - - SAVELIBS="$LIBS" - - - for libcrypto in \ - "-lcrypto" \ - "-lcrypto -lrsaref" \ - "-lcrypto -lRSAglue -lrsaref" - do - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_new in -lssl" >&5 -$as_echo_n "checking for SSL_new in -lssl... " >&6; } -if ${ac_cv_lib_ssl_SSL_new+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lssl $libcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char SSL_new (); -int -main () -{ -return SSL_new (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_ssl_SSL_new=yes -else - ac_cv_lib_ssl_SSL_new=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_SSL_new" >&5 -$as_echo "$ac_cv_lib_ssl_SSL_new" >&6; } -if test "x$ac_cv_lib_ssl_SSL_new" = xyes; then : - have_ssl=1 - SSLFLAGS="-DOPENSSL_DISABLE_OLD_DES_SUPPORT" - SSLLIBS="-lssl $libcrypto" - $as_echo "#define HAVE_SSL 1" >>confdefs.h - - $as_echo "#define HAVE_LIBSSL 1" >>confdefs.h + SAVELIBS="$LIBS" + LIBS="$LIBS $SSLLIBS" + ac_fn_c_check_func "$LINENO" "gnutls_fips140_set_mode" "ac_cv_func_gnutls_fips140_set_mode" +if test "x$ac_cv_func_gnutls_fips140_set_mode" = xyes; then : + $as_echo "#define HAVE_GNUTLS_FIPS140_SET_MODE 1" >>confdefs.h fi - - if test "x${SSLLIBS}" != "x"; then - break - fi - done - - if test "x${SSLLIBS}" != "x"; then - CUPS_SERVERCERT="ssl/server.crt" - CUPS_SERVERKEY="ssl/server.key" - - LIBS="$SAVELIBS $SSLLIBS" - for ac_func in SSL_set_tlsext_host_name -do : - ac_fn_c_check_func "$LINENO" "SSL_set_tlsext_host_name" "ac_cv_func_SSL_set_tlsext_host_name" -if test "x$ac_cv_func_SSL_set_tlsext_host_name" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SSL_SET_TLSEXT_HOST_NAME 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "gnutls_transport_set_pull_timeout_function" "ac_cv_func_gnutls_transport_set_pull_timeout_function" +if test "x$ac_cv_func_gnutls_transport_set_pull_timeout_function" = xyes; then : + $as_echo "#define HAVE_GNUTLS_TRANSPORT_SET_PULL_TIMEOUT_FUNCTION 1" >>confdefs.h fi -done - fi + ac_fn_c_check_func "$LINENO" "gnutls_priority_set_direct" "ac_cv_func_gnutls_priority_set_direct" +if test "x$ac_cv_func_gnutls_priority_set_direct" = xyes; then : + $as_echo "#define HAVE_GNUTLS_PRIORITY_SET_DIRECT 1" >>confdefs.h + +fi LIBS="$SAVELIBS" -fi - - + fi fi fi @@ -8542,7 +8338,7 @@ $as_echo " Using SSLLIBS=\"$SSLLIBS\"" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using SSLFLAGS=\"$SSLFLAGS\"" >&5 $as_echo " Using SSLFLAGS=\"$SSLFLAGS\"" >&6; } IPPALIASES="http https ipps" -elif test x$enable_cdsa = xyes -o x$enable_gnutls = xyes -o x$enable_openssl = xyes; then +elif test x$enable_cdsa = xyes -o x$enable_gnutls = xyes; then as_fn_error $? "Unable to enable SSL support." "$LINENO" 5 fi @@ -8551,12 +8347,10 @@ fi - EXPORT_SSLLIBS="$SSLLIBS" - # Check whether --enable-pam was given. if test "${enable_pam+set}" = set; then : enableval=$enable_pam; @@ -8569,10 +8363,6 @@ if test "${with_pam_module+set}" = set; then : fi -if test $uname = AIX; then - enable_pam=no -fi - PAMDIR="" PAMFILE="pam.std" PAMLIBS="" @@ -8789,9 +8579,9 @@ fi LIBS="$SAVELIBS" - case "$uname" in - Darwin*) - # Darwin/OS X + case "$host_os_name" in + darwin*) + # Darwin/macOS if test "x$with_pam_module" != x; then PAMFILE="pam.$with_pam_module" elif test -f /usr/lib/pam/pam_opendirectory.so.2; then @@ -8806,10 +8596,22 @@ fi # as Linux distributors move things around... if test "x$with_pam_module" != x; then PAMMOD="pam_${with_pam_module}.so" - elif test -f /lib/security/pam_unix2.so; then - PAMMOD="pam_unix2.so" - elif test -f /lib/security/pam_unix.so; then - PAMMOD="pam_unix.so" + elif test -f /etc/pam.d/common-auth; then + PAMFILE="pam.common" + else + moddir="" + for dir in /lib/security /lib64/security /lib/x86_64-linux-gnu/security /var/lib/pam; do + if test -d $dir; then + moddir=$dir + break; + fi + done + + if test -f $moddir/pam_unix2.so; then + PAMMOD="pam_unix2.so" + elif test -f $moddir/pam_unix.so; then + PAMMOD="pam_unix.so" + fi fi if test "x$PAMMOD" = xpam_unix.so; then @@ -8828,7 +8630,6 @@ fi - # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; @@ -8854,7 +8655,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -8900,7 +8701,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -8924,7 +8725,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -8969,7 +8770,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -8993,7 +8794,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -9087,7 +8888,6 @@ fi - # Check whether --enable-avahi was given. if test "${enable_avahi+set}" = set; then : enableval=$enable_avahi; @@ -9115,8 +8915,10 @@ fi DNSSDLIBS="" DNSSD_BACKEND="" +IPPFIND_BIN="" +IPPFIND_MAN="" -if test "x$PKGCONFIG" != x -a x$enable_avahi != xno; then +if test "x$PKGCONFIG" != x -a x$enable_avahi != xno -a x$host_os_name != xdarwin; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Avahi" >&5 $as_echo_n "checking for Avahi... " >&6; } if $PKGCONFIG --exists avahi-client; then @@ -9125,6 +8927,8 @@ $as_echo "yes" >&6; } CFLAGS="$CFLAGS `$PKGCONFIG --cflags avahi-client`" DNSSDLIBS="`$PKGCONFIG --libs avahi-client`" DNSSD_BACKEND="dnssd" + IPPFIND_BIN="ippfind" + IPPFIND_MAN="ippfind.1" $as_echo "#define HAVE_AVAHI 1" >>confdefs.h else @@ -9137,13 +8941,14 @@ if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then ac_fn_c_check_header_mongrel "$LINENO" "dns_sd.h" "ac_cv_header_dns_sd_h" "$ac_includes_default" if test "x$ac_cv_header_dns_sd_h" = xyes; then : - case "$uname" in - Darwin*) - # Darwin and MacOS X... + case "$host_os_name" in + darwin*) + # Darwin and macOS... $as_echo "#define HAVE_DNSSD 1" >>confdefs.h - DNSSDLIBS="-framework CoreFoundation -framework SystemConfiguration" DNSSD_BACKEND="dnssd" + IPPFIND_BIN="ippfind" + IPPFIND_MAN="ippfind.1" ;; *) # All others... @@ -9174,7 +8979,9 @@ $as_echo "yes" >&6; } DNSSDLIBS="-ldns_sd" DNSSD_BACKEND="dnssd" else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + IPPFIND_BIN="ippfind" + IPPFIND_MAN="ippfind.1" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext @@ -9193,19 +9000,26 @@ fi +ONDEMANDFLAGS="" +ONDEMANDLIBS="" + + + # Check whether --enable-launchd was given. if test "${enable_launchd+set}" = set; then : enableval=$enable_launchd; fi +LAUNCHD_DIR="" -DEFAULT_LAUNCHD_CONF="" -LAUNCHDLIBS="" if test x$enable_launchd != xno; then - ac_fn_c_check_func "$LINENO" "launch_msg" "ac_cv_func_launch_msg" -if test "x$ac_cv_func_launch_msg" = xyes; then : - $as_echo "#define HAVE_LAUNCHD 1" >>confdefs.h + ac_fn_c_check_func "$LINENO" "launch_activate_socket" "ac_cv_func_launch_activate_socket" +if test "x$ac_cv_func_launch_activate_socket" = xyes; then : + + $as_echo "#define HAVE_LAUNCHD 1" >>confdefs.h + + $as_echo "#define HAVE_ONDEMAND 1" >>confdefs.h fi @@ -9217,21 +9031,227 @@ fi - case "$uname" in - Darwin*) - # Darwin, MacOS X - DEFAULT_LAUNCHD_CONF="/System/Library/LaunchDaemons/org.cups.cupsd.plist" - # liblaunch is already part of libSystem - ;; - *) - # All others; this test will need to be updated - ;; - esac + if test "$host_os_name" = darwin; then + LAUNCHD_DIR="/System/Library/LaunchDaemons" + # liblaunch is already part of libSystem + fi +fi + +# Check whether --enable-systemd was given. +if test "${enable_systemd+set}" = set; then : + enableval=$enable_systemd; +fi + + +# Check whether --with-systemd was given. +if test "${with_systemd+set}" = set; then : + withval=$with_systemd; SYSTEMD_DIR="$withval" +else + SYSTEMD_DIR="" fi +if test x$enable_systemd != xno; then + if test "x$PKGCONFIG" = x; then + if test x$enable_systemd = xyes; then + as_fn_error $? "Need pkg-config to enable systemd support." "$LINENO" 5 + fi + else + have_systemd=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libsystemd" >&5 +$as_echo_n "checking for libsystemd... " >&6; } + if $PKGCONFIG --exists libsystemd; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + have_systemd=yes + ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd` + ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd` + elif $PKGCONFIG --exists libsystemd-daemon; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes - legacy" >&5 +$as_echo "yes - legacy" >&6; } + have_systemd=yes + ONDEMANDFLAGS=`$PKGCONFIG --cflags libsystemd-daemon` + ONDEMANDLIBS=`$PKGCONFIG --libs libsystemd-daemon` + if $PKGCONFIG --exists libsystemd-journal; then + ONDEMANDFLAGS="$ONDEMANDFLAGS `$PKGCONFIG --cflags libsystemd-journal`" + ONDEMANDLIBS="$ONDEMANDLIBS `$PKGCONFIG --libs libsystemd-journal`" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + + if test $have_systemd = yes; then + $as_echo "#define HAVE_SYSTEMD 1" >>confdefs.h + + $as_echo "#define HAVE_ONDEMAND 1" >>confdefs.h + + ac_fn_c_check_header_mongrel "$LINENO" "systemd/sd-journal.h" "ac_cv_header_systemd_sd_journal_h" "$ac_includes_default" +if test "x$ac_cv_header_systemd_sd_journal_h" = xyes; then : + $as_echo "#define HAVE_SYSTEMD_SD_JOURNAL_H 1" >>confdefs.h + +fi + + + if test "x$SYSTEMD_DIR" = x; then + SYSTEMD_DIR="`$PKGCONFIG --variable=systemdsystemunitdir systemd`" + fi + fi + fi +fi + +# Check whether --enable-upstart was given. +if test "${enable_upstart+set}" = set; then : + enableval=$enable_upstart; +fi + +if test "x$enable_upstart" = "xyes"; then + if test "x$have_systemd" = "xyes"; then + as_fn_error $? "Cannot support both systemd and upstart." "$LINENO" 5 + fi + $as_echo "#define HAVE_UPSTART 1" >>confdefs.h + + $as_echo "#define HAVE_ONDEMAND 1" >>confdefs.h + +fi + +SMFMANIFESTDIR="" + + +# Check whether --with-smfmanifestdir was given. +if test "${with_smfmanifestdir+set}" = set; then : + withval=$with_smfmanifestdir; SMFMANIFESTDIR="$withval" +fi + + + +# Check whether --with-rcdir was given. +if test "${with_rcdir+set}" = set; then : + withval=$with_rcdir; rcdir="$withval" +else + rcdir="" +fi + + +# Check whether --with-rclevels was given. +if test "${with_rclevels+set}" = set; then : + withval=$with_rclevels; rclevels="$withval" +else + rclevels="2 3 5" +fi + + +# Check whether --with-rcstart was given. +if test "${with_rcstart+set}" = set; then : + withval=$with_rcstart; rcstart="$withval" +else + rcstart="" +fi + + +# Check whether --with-rcstop was given. +if test "${with_rcstop+set}" = set; then : + withval=$with_rcstop; rcstop="$withval" +else + rcstop="" +fi + + +if test x$rcdir = x; then + if test x$LAUNCHD_DIR = x -a x$SYSTEMD_DIR = x -a x$SMFMANIFESTDIR = x; then + # Fall back on "init", the original service startup interface... + if test -d /sbin/init.d; then + # SuSE + rcdir="/sbin/init.d" + elif test -d /etc/init.d; then + # Others + rcdir="/etc" + else + # RedHat, NetBSD + rcdir="/etc/rc.d" + fi + else + rcdir="no" + fi +fi + +if test "x$rcstart" = x; then + case "$host_os_name" in + linux* | gnu*) + # Linux + rcstart="81" + ;; + + sunos*) + # Solaris + rcstart="81" + ;; + + *) + # Others + rcstart="99" + ;; + esac +fi + +if test "x$rcstop" = x; then + case "$host_os_name" in + linux* | gnu*) + # Linux + rcstop="36" + ;; + + *) + # Others + rcstop="00" + ;; + esac +fi + +INITDIR="" +INITDDIR="" +RCLEVELS="$rclevels" +RCSTART="$rcstart" +RCSTOP="$rcstop" + + + + + + +if test "x$rcdir" != xno; then + if test "x$rclevels" = x; then + INITDDIR="$rcdir" + else + INITDIR="$rcdir" + fi +fi + + +# Check whether --with-xinetd was given. +if test "${with_xinetd+set}" = set; then : + withval=$with_xinetd; xinetd="$withval" +else + xinetd="" +fi + +XINETD="" + + +if test "x$xinetd" = x; then + if test ! -x /sbin/launchd; then + for dir in /etc/xinetd.d /usr/local/etc/xinetd.d; do + if test -d $dir; then + XINETD="$dir" + break + fi + done + fi +elif test "x$xinetd" != xno; then + XINETD="$xinetd" +fi LANGUAGES="`ls -1 locale/cups_*.po 2>/dev/null | sed -e '1,$s/locale\/cups_//' -e '1,$s/\.po//' | tr '\n' ' '`" @@ -9254,7 +9274,8 @@ fi if test "${with_bundledir+set}" = set; then : withval=$with_bundledir; CUPS_BUNDLEDIR="$withval" else - if test "x$uname" = xDarwin -a $uversion -ge 100; then + + if test "x$host_os_name" = xdarwin -a $host_os_version -ge 100; then CUPS_BUNDLEDIR="/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A" LANGUAGES="" else @@ -9272,11 +9293,49 @@ _ACEOF fi +# Check whether --with-bundlelang was given. +if test "${with_bundlelang+set}" = set; then : + withval=$with_bundlelang; cups_bundlelang="$withval" +else + + if test $host_os_version -ge 190; then + cups_bundlelang="en" + else + cups_bundlelang="English" + fi +fi + + +if test "x$cups_bundlelang" != x -a "x$CUPS_BUNDLEDIR" != x; then + CUPS_RESOURCEDIR="$CUPS_BUNDLEDIR/Resources/$cups_bundlelang.lproj" +else + CUPS_RESOURCEDIR="" +fi + + + +# Check whether --with-exe_file_perm was given. +if test "${with_exe_file_perm+set}" = set; then : + withval=$with_exe_file_perm; CUPS_EXE_FILE_PERM="$withval" +else + case "$host_os_name" in + linux* | gnu*) + CUPS_EXE_FILE_PERM="755" + ;; + *) + CUPS_EXE_FILE_PERM="555" + ;; + esac +fi + + + + # Check whether --with-config_file_perm was given. if test "${with_config_file_perm+set}" = set; then : withval=$with_config_file_perm; CUPS_CONFIG_FILE_PERM="$withval" else - if test "x$uname" = xDarwin; then + if test "x$host_os_name" = xdarwin; then CUPS_CONFIG_FILE_PERM="644" else CUPS_CONFIG_FILE_PERM="640" @@ -9294,7 +9353,14 @@ _ACEOF if test "${with_cupsd_file_perm+set}" = set; then : withval=$with_cupsd_file_perm; CUPS_CUPSD_FILE_PERM="$withval" else - CUPS_CUPSD_FILE_PERM="500" + case "$host_os_name" in + linux* | gnu*) + CUPS_CUPSD_FILE_PERM="700" + ;; + *) + CUPS_CUPSD_FILE_PERM="500" + ;; + esac fi @@ -9346,7 +9412,7 @@ _ACEOF if test "${with_access_log_level+set}" = set; then : withval=$with_access_log_level; CUPS_ACCESS_LOG_LEVEL="$withval" else - CUPS_ACCESS_LOG_LEVEL="actions" + CUPS_ACCESS_LOG_LEVEL="none" fi @@ -9355,6 +9421,18 @@ cat >>confdefs.h <<_ACEOF _ACEOF +# Check whether --enable-page_logging was given. +if test "${enable_page_logging+set}" = set; then : + enableval=$enable_page_logging; +fi + +if test "x$enable_page_logging" = xyes; then + CUPS_PAGE_LOG_FORMAT="" +else + CUPS_PAGE_LOG_FORMAT="PageLogFormat" +fi + + # Check whether --enable-browsing was given. if test "${enable_browsing+set}" = set; then : enableval=$enable_browsing; @@ -9431,7 +9509,7 @@ if test "${with_cups_user+set}" = set; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for default print user" >&5 $as_echo_n "checking for default print user... " >&6; } - if test x$uname = xDarwin; then + if test x$host_os_name = xdarwin; then if test x`id -u _lp 2>/dev/null` = x; then CUPS_USER="lp"; else @@ -9474,7 +9552,7 @@ if test "${with_cups_group+set}" = set; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for default print group" >&5 $as_echo_n "checking for default print group... " >&6; } - if test x$uname = xDarwin; then + if test x$host_os_name = xdarwin; then if test x`id -g _lp 2>/dev/null` = x; then CUPS_GROUP="lp"; else @@ -9516,14 +9594,14 @@ fi if test "${with_system_groups+set}" = set; then : withval=$with_system_groups; CUPS_SYSTEM_GROUPS="$withval" else - if test x$uname = xDarwin; then + if test x$host_os_name = xdarwin; then CUPS_SYSTEM_GROUPS="admin" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for default system groups" >&5 $as_echo_n "checking for default system groups... " >&6; } if test -f /etc/group; then CUPS_SYSTEM_GROUPS="" - GROUP_LIST="lpadmin sys system root" + GROUP_LIST="lpadmin sys system root wheel" for group in $GROUP_LIST; do if test "`grep \^${group}: /etc/group`" != ""; then if test "x$CUPS_SYSTEM_GROUPS" = x; then @@ -9588,15 +9666,15 @@ fi if test x$default_printcap != xno; then if test "x$default_printcap" = "xdefault"; then - case $uname in - Darwin*) - if test $uversion -ge 90; then + case $host_os_name in + darwin*) + if test $host_os_version -ge 90; then CUPS_DEFAULT_PRINTCAP="/Library/Preferences/org.cups.printers.plist" else CUPS_DEFAULT_PRINTCAP="/etc/printcap" fi ;; - SunOS*) + sunos*) CUPS_DEFAULT_PRINTCAP="/etc/printers.conf" ;; *) @@ -9627,8 +9705,8 @@ fi if test x$default_lpdconfigfile != xno; then if test "x$default_lpdconfigfile" = "xdefault"; then - case $uname in - Darwin*) + case $host_os_name in + darwin*) CUPS_DEFAULT_LPD_CONFIG_FILE="launchd:///System/Library/LaunchDaemons/org.cups.cups-lpd.plist" ;; *) @@ -9717,7 +9795,7 @@ if test "${with_snmp_address+set}" = set; then : CUPS_SNMP_ADDRESS="Address $withval" fi else - if test "x$uname" = xDarwin; then + if test "x$host_os_name" = xdarwin; then CUPS_SNMP_ADDRESS="" else CUPS_SNMP_ADDRESS="Address @LOCAL" @@ -9767,7 +9845,7 @@ case "x$enable_webif" in CUPS_DEFAULT_WEBIF=1 ;; *) - if test $uname = Darwin; then + if test $host_os_name = darwin; then CUPS_WEBIF=No CUPS_DEFAULT_WEBIF=0 else @@ -9784,307 +9862,6 @@ _ACEOF - - -# Check whether --with-java was given. -if test "${with_java+set}" = set; then : - withval=$with_java; CUPS_JAVA="$withval" -else - CUPS_JAVA="" -fi - - -if test "x$CUPS_JAVA" = x; then - # Extract the first word of "java", so it can be a program name with args. -set dummy java; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_JAVA+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $JAVA in - [\\/]* | ?:[\\/]*) - ac_cv_path_JAVA="$JAVA" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -JAVA=$ac_cv_path_JAVA -if test -n "$JAVA"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 -$as_echo "$JAVA" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - CUPS_JAVA="$JAVA" -fi - -cat >>confdefs.h <<_ACEOF -#define CUPS_JAVA "$CUPS_JAVA" -_ACEOF - - -if test "x$CUPS_JAVA" != x; then - $as_echo "#define HAVE_JAVA 1" >>confdefs.h - -fi - - -# Check whether --with-perl was given. -if test "${with_perl+set}" = set; then : - withval=$with_perl; CUPS_PERL="$withval" -else - CUPS_PERL="" -fi - - -if test "x$CUPS_PERL" = x; then - # Extract the first word of "perl", so it can be a program name with args. -set dummy perl; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PERL+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PERL in - [\\/]* | ?:[\\/]*) - ac_cv_path_PERL="$PERL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PERL=$ac_cv_path_PERL -if test -n "$PERL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 -$as_echo "$PERL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - CUPS_PERL="$PERL" -fi - -cat >>confdefs.h <<_ACEOF -#define CUPS_PERL "$CUPS_PERL" -_ACEOF - - -if test "x$CUPS_PERL" != x; then - $as_echo "#define HAVE_PERL 1" >>confdefs.h - -fi - - -# Check whether --with-php was given. -if test "${with_php+set}" = set; then : - withval=$with_php; CUPS_PHP="$withval" -else - CUPS_PHP="" -fi - - -if test "x$CUPS_PHP" = x; then - # Extract the first word of "php-cgi", so it can be a program name with args. -set dummy php-cgi; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PHPCGI+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PHPCGI in - [\\/]* | ?:[\\/]*) - ac_cv_path_PHPCGI="$PHPCGI" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PHPCGI="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PHPCGI=$ac_cv_path_PHPCGI -if test -n "$PHPCGI"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PHPCGI" >&5 -$as_echo "$PHPCGI" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$PHPCGI" = x; then - # Extract the first word of "php", so it can be a program name with args. -set dummy php; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PHP+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PHP in - [\\/]* | ?:[\\/]*) - ac_cv_path_PHP="$PHP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PHP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PHP=$ac_cv_path_PHP -if test -n "$PHP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PHP" >&5 -$as_echo "$PHP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - CUPS_PHP="$PHP" - else - CUPS_PHP="$PHPCGI" - fi -fi - -cat >>confdefs.h <<_ACEOF -#define CUPS_PHP "$CUPS_PHP" -_ACEOF - - -if test "x$CUPS_PHP" = x; then - CUPS_PHP="no" -else - $as_echo "#define HAVE_PHP 1" >>confdefs.h - -fi - - -# Check whether --with-python was given. -if test "${with_python+set}" = set; then : - withval=$with_python; CUPS_PYTHON="$withval" -else - CUPS_PYTHON="" -fi - - -if test "x$CUPS_PYTHON" = x; then - # Extract the first word of "python", so it can be a program name with args. -set dummy python; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PYTHON in - [\\/]* | ?:[\\/]*) - ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PYTHON=$ac_cv_path_PYTHON -if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - CUPS_PYTHON="$PYTHON" -fi - -cat >>confdefs.h <<_ACEOF -#define CUPS_PYTHON "$CUPS_PYTHON" -_ACEOF - - -if test "x$CUPS_PYTHON" != x; then - $as_echo "#define HAVE_PYTHON 1" >>confdefs.h - -fi - - - INSTALL_LANGUAGES="" UNINSTALL_LANGUAGES="" LANGFILES="" @@ -10108,7 +9885,7 @@ fi -ac_config_files="$ac_config_files Makedefs conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf cups-config data/testprint desktop/cups.desktop doc/help/ref-cups-files-conf.html doc/help/ref-cupsd-conf.html doc/help/standard.html doc/index.html man/client.conf.man man/cups-deviced.man man/cups-driverd.man man/cups-files.conf.man man/cups-lpd.man man/cups-snmp.man man/cupsaddsmb.man man/cupsd.conf.man man/cupsd.man man/lpoptions.man scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist templates/header.tmpl packaging/cups.list $LANGFILES" +ac_config_files="$ac_config_files Makedefs conf/cups-files.conf conf/cupsd.conf conf/mime.convs conf/pam.std conf/snmp.conf cups-config desktop/cups.desktop doc/index.html scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist scheduler/org.cups.cups-lpdAT.service scheduler/org.cups.cupsd.path scheduler/org.cups.cupsd.service scheduler/org.cups.cupsd.socket templates/header.tmpl packaging/cups.list $LANGFILES" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -10616,7 +10393,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by $as_me, which was +This file was extended by CUPS $as_me 2.3.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -10672,13 +10449,14 @@ $config_files Configuration headers: $config_headers -Report bugs to the package provider." +Report bugs to . +CUPS home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -config.status +CUPS config.status 2.3.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -10808,26 +10586,16 @@ do "conf/pam.std") CONFIG_FILES="$CONFIG_FILES conf/pam.std" ;; "conf/snmp.conf") CONFIG_FILES="$CONFIG_FILES conf/snmp.conf" ;; "cups-config") CONFIG_FILES="$CONFIG_FILES cups-config" ;; - "data/testprint") CONFIG_FILES="$CONFIG_FILES data/testprint" ;; "desktop/cups.desktop") CONFIG_FILES="$CONFIG_FILES desktop/cups.desktop" ;; - "doc/help/ref-cups-files-conf.html") CONFIG_FILES="$CONFIG_FILES doc/help/ref-cups-files-conf.html" ;; - "doc/help/ref-cupsd-conf.html") CONFIG_FILES="$CONFIG_FILES doc/help/ref-cupsd-conf.html" ;; - "doc/help/standard.html") CONFIG_FILES="$CONFIG_FILES doc/help/standard.html" ;; "doc/index.html") CONFIG_FILES="$CONFIG_FILES doc/index.html" ;; - "man/client.conf.man") CONFIG_FILES="$CONFIG_FILES man/client.conf.man" ;; - "man/cups-deviced.man") CONFIG_FILES="$CONFIG_FILES man/cups-deviced.man" ;; - "man/cups-driverd.man") CONFIG_FILES="$CONFIG_FILES man/cups-driverd.man" ;; - "man/cups-files.conf.man") CONFIG_FILES="$CONFIG_FILES man/cups-files.conf.man" ;; - "man/cups-lpd.man") CONFIG_FILES="$CONFIG_FILES man/cups-lpd.man" ;; - "man/cups-snmp.man") CONFIG_FILES="$CONFIG_FILES man/cups-snmp.man" ;; - "man/cupsaddsmb.man") CONFIG_FILES="$CONFIG_FILES man/cupsaddsmb.man" ;; - "man/cupsd.conf.man") CONFIG_FILES="$CONFIG_FILES man/cupsd.conf.man" ;; - "man/cupsd.man") CONFIG_FILES="$CONFIG_FILES man/cupsd.man" ;; - "man/lpoptions.man") CONFIG_FILES="$CONFIG_FILES man/lpoptions.man" ;; "scheduler/cups-lpd.xinetd") CONFIG_FILES="$CONFIG_FILES scheduler/cups-lpd.xinetd" ;; "scheduler/cups.sh") CONFIG_FILES="$CONFIG_FILES scheduler/cups.sh" ;; "scheduler/cups.xml") CONFIG_FILES="$CONFIG_FILES scheduler/cups.xml" ;; "scheduler/org.cups.cups-lpd.plist") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cups-lpd.plist" ;; + "scheduler/org.cups.cups-lpdAT.service") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cups-lpdAT.service" ;; + "scheduler/org.cups.cupsd.path") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cupsd.path" ;; + "scheduler/org.cups.cupsd.service") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cupsd.service" ;; + "scheduler/org.cups.cupsd.socket") CONFIG_FILES="$CONFIG_FILES scheduler/org.cups.cupsd.socket" ;; "templates/header.tmpl") CONFIG_FILES="$CONFIG_FILES templates/header.tmpl" ;; "packaging/cups.list") CONFIG_FILES="$CONFIG_FILES packaging/cups.list" ;; "$LANGFILES") CONFIG_FILES="$CONFIG_FILES $LANGFILES" ;; @@ -11414,4 +11182,3 @@ fi chmod +x cups-config - diff --git a/configure.in b/configure.ac similarity index 60% rename from configure.in rename to configure.ac index 3951e90..7eca9e3 100644 --- a/configure.in +++ b/configure.ac @@ -1,19 +1,18 @@ dnl -dnl "$Id: configure.in 7833 2008-08-04 20:55:13Z mike $" +dnl Configuration script for CUPS. dnl -dnl Configuration script for CUPS. +dnl Copyright © 2007-2019 by Apple Inc. +dnl Copyright © 1997-2007 by Easy Software Products, all rights reserved. dnl -dnl Copyright 2007-2013 by Apple Inc. -dnl Copyright 1997-2007 by Easy Software Products, all rights reserved. -dnl -dnl These coded instructions, statements, and computer programs are the -dnl property of Apple Inc. and are protected by Federal copyright -dnl law. Distribution and use rights are outlined in the file "LICENSE.txt" -dnl which should have been included with this file. If this file is -dnl file is missing or damaged, see the license at "http://www.cups.org/". +dnl Licensed under Apache License v2.0. See the file "LICENSE" for more +dnl information. dnl -AC_INIT(cups/cups.h) +dnl We need at least autoconf 2.60... +AC_PREREQ(2.60) + +dnl Package name and version... +AC_INIT([CUPS], [2.3.0], [https://github.com/apple/cups/issues], [cups], [https://www.cups.org/]) sinclude(config-scripts/cups-opsys.m4) sinclude(config-scripts/cups-common.m4) @@ -32,9 +31,8 @@ sinclude(config-scripts/cups-ssl.m4) sinclude(config-scripts/cups-pam.m4) sinclude(config-scripts/cups-largefile.m4) sinclude(config-scripts/cups-dnssd.m4) -sinclude(config-scripts/cups-launchd.m4) +sinclude(config-scripts/cups-startup.m4) sinclude(config-scripts/cups-defaults.m4) -sinclude(config-scripts/cups-scripting.m4) INSTALL_LANGUAGES="" UNINSTALL_LANGUAGES="" @@ -66,32 +64,18 @@ AC_OUTPUT(Makedefs conf/pam.std conf/snmp.conf cups-config - data/testprint desktop/cups.desktop - doc/help/ref-cups-files-conf.html - doc/help/ref-cupsd-conf.html - doc/help/standard.html doc/index.html - man/client.conf.man - man/cups-deviced.man - man/cups-driverd.man - man/cups-files.conf.man - man/cups-lpd.man - man/cups-snmp.man - man/cupsaddsmb.man - man/cupsd.conf.man - man/cupsd.man - man/lpoptions.man scheduler/cups-lpd.xinetd scheduler/cups.sh scheduler/cups.xml scheduler/org.cups.cups-lpd.plist + scheduler/org.cups.cups-lpdAT.service + scheduler/org.cups.cupsd.path + scheduler/org.cups.cupsd.service + scheduler/org.cups.cupsd.socket templates/header.tmpl packaging/cups.list $LANGFILES) chmod +x cups-config - -dnl -dnl End of "$Id: configure.in 7833 2008-08-04 20:55:13Z mike $". -dnl diff --git a/cups-config.in b/cups-config.in index f0951d0..9dd094d 100755 --- a/cups-config.in +++ b/cups-config.in @@ -2,18 +2,15 @@ # # CUPS configuration utility. # -# Copyright 2007-2016 by Apple Inc. -# Copyright 2001-2006 by Easy Software Products, all rights reserved. +# Copyright © 2007-2019 by Apple Inc. +# Copyright © 2001-2006 by Easy Software Products, all rights reserved. # -# These coded instructions, statements, and computer programs are the -# property of Apple Inc. and are protected by Federal copyright -# law. Distribution and use rights are outlined in the file "LICENSE.txt" -# which should have been included with this file. If this file is -# file is missing or damaged, see the license at "http://www.cups.org/". +# Licensed under Apache License v2.0. See the file "LICENSE" for more +# information. # VERSION="@CUPS_VERSION@" -APIVERSION="2.2" +APIVERSION="2.3" BUILD="@CUPS_BUILD@" prefix=@prefix@ @@ -21,7 +18,6 @@ exec_prefix=@exec_prefix@ bindir=@bindir@ includedir=@includedir@ libdir=@libdir@ -imagelibdir=@libdir@ datarootdir=@datadir@ datadir=@datadir@ sysconfdir=@sysconfdir@ @@ -30,19 +26,18 @@ cups_serverbin=@CUPS_SERVERBIN@ cups_serverroot=@CUPS_SERVERROOT@ INSTALLSTATIC=@INSTALLSTATIC@ -# flags for C++ compiler: +# flags for compiler and linker... CFLAGS="" LDFLAGS="@EXPORT_LDFLAGS@" -LIBS="@LIBGSSAPI@ @EXPORT_SSLLIBS@ @LIBZ@ @LIBS@" +LIBS="@LIBGSSAPI@ @DNSSDLIBS@ @EXPORT_SSLLIBS@ @LIBZ@ @LIBS@" # Check for local invocation... selfdir=`dirname $0` if test -f "$selfdir/cups/cups.h"; then CFLAGS="-I$selfdir" - LDFLAGS="-L$selfdir/cups -L$selfdir/filter $LDFLAGS" + LDFLAGS="-L$selfdir/cups $LDFLAGS" libdir="$selfdir/cups" - imagelibdir="$selfdir/filter" else if test $includedir != /usr/include; then CFLAGS="$CFLAGS -I$includedir" @@ -76,7 +71,6 @@ fi # Parse command line options static=no -image=no while test $# -gt 0; do case $1 in @@ -96,22 +90,16 @@ while test $# -gt 0; do usage 0 ;; --image) - image=yes + # Do nothing ;; --ldflags) echo $LDFLAGS ;; --libs) if test $static = no; then - libs="@EXTLINKCUPS@ $LIBS"; - if test $image = yes; then - libs="@EXTLINKCUPSIMAGE@ $libs" - fi + libs="@EXTLINKCUPS@"; else libs="$libdir/libcups.a $LIBS"; - if test $image = yes; then - libs="$libdir/libcupsimage.a $libs" - fi fi echo $libs ;; @@ -123,7 +111,7 @@ while test $# -gt 0; do ;; --static) if test -z "$INSTALLSTATIC"; then - echo "WARNING: Static libraries not installed!" >&2 + echo "WARNING: Static libraries not installed." >&2 else static=yes fi diff --git a/cups/Dependencies b/cups/Dependencies index 11ec748..b30c769 100644 --- a/cups/Dependencies +++ b/cups/Dependencies @@ -1,316 +1,408 @@ -adminutil.o: adminutil.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h ppd.h raster.h \ - adminutil.h array.o: array.c ../cups/cups.h file.h versioning.h ipp.h http.h array.h \ - language.h pwg.h string-private.h ../config.h debug-private.h \ - array-private.h + language.h pwg.h string-private.h ../config.h ../cups/versioning.h \ + debug-internal.h debug-private.h array-private.h ../cups/array.h auth.o: auth.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +debug.o: debug.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +dest.o: dest.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +dest-job.o: dest-job.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +dest-localization.o: dest-localization.c cups-private.h string-private.h \ + ../config.h ../cups/versioning.h array-private.h ../cups/array.h \ + versioning.h ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h \ + language.h pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +dest-options.o: dest-options.c cups-private.h string-private.h \ + ../config.h ../cups/versioning.h array-private.h ../cups/array.h \ + versioning.h ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h \ + language.h pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +dir.o: dir.c string-private.h ../config.h ../cups/versioning.h \ + debug-internal.h debug-private.h dir.h versioning.h +encode.o: encode.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +file.o: file.c file-private.h cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +getputfile.o: getputfile.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +globals.o: globals.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h +hash.o: hash.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h +http.o: http.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +http-addr.o: http-addr.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +http-addrlist.o: http-addrlist.c cups-private.h string-private.h \ + ../config.h ../cups/versioning.h array-private.h ../cups/array.h \ + versioning.h ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h \ + language.h pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +http-support.o: http-support.c cups-private.h string-private.h \ + ../config.h ../cups/versioning.h array-private.h ../cups/array.h \ + versioning.h ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h \ + language.h pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +ipp.o: ipp.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +ipp-file.o: ipp-file.c ipp-private.h ../cups/cups.h file.h versioning.h \ + ipp.h http.h array.h language.h pwg.h string-private.h ../config.h \ + ../cups/versioning.h debug-internal.h debug-private.h +ipp-vars.o: ipp-vars.c ../cups/cups.h file.h versioning.h ipp.h http.h \ + array.h language.h pwg.h ipp-private.h string-private.h ../config.h \ + ../cups/versioning.h debug-internal.h debug-private.h +ipp-support.o: ipp-support.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +langprintf.o: langprintf.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +language.o: language.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +md5.o: md5.c md5-internal.h ../cups/versioning.h string-private.h \ + ../config.h +md5passwd.o: md5passwd.c ../cups/cups.h file.h versioning.h ipp.h http.h \ + array.h language.h pwg.h http-private.h ../config.h ../cups/language.h \ + ../cups/http.h ipp-private.h string-private.h ../cups/versioning.h +notify.o: notify.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +options.o: options.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +pwg-media.o: pwg-media.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +raster-error.o: raster-error.c cups-private.h string-private.h \ + ../config.h ../cups/versioning.h array-private.h ../cups/array.h \ + versioning.h ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h \ + language.h pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + raster-private.h raster.h cups.h ../cups/debug-private.h \ + ../cups/string-private.h debug-internal.h debug-private.h +raster-stream.o: raster-stream.c raster-private.h raster.h cups.h file.h \ + versioning.h ipp.h http.h array.h language.h pwg.h ../cups/cups.h \ + ../cups/debug-private.h ../cups/versioning.h ../cups/string-private.h \ + ../config.h debug-internal.h debug-private.h +raster-stubs.o: raster-stubs.c raster-private.h raster.h cups.h file.h \ + versioning.h ipp.h http.h array.h language.h pwg.h ../cups/cups.h \ + ../cups/debug-private.h ../cups/versioning.h ../cups/string-private.h \ + ../config.h +request.o: request.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +snprintf.o: snprintf.c string-private.h ../config.h ../cups/versioning.h +string.o: string.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +tempfile.o: tempfile.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +thread.o: thread.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h +tls.o: tls.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h tls-darwin.c +transcode.o: transcode.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +usersys.o: usersys.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +util.o: util.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h +adminutil.o: adminutil.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h ppd.h cups.h raster.h adminutil.h backchannel.o: backchannel.c cups.h file.h versioning.h ipp.h http.h \ array.h language.h pwg.h backend.o: backend.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h backend.h ppd.h raster.h -debug.o: debug.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -dest.o: dest.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -dest-job.o: dest-job.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -dest-localization.o: dest-localization.c cups-private.h string-private.h \ - ../config.h debug-private.h ../cups/versioning.h array-private.h \ - ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ - ../cups/language.h md5-private.h language-private.h \ - ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ - thread-private.h -dest-options.o: dest-options.c cups-private.h string-private.h \ - ../config.h debug-private.h ../cups/versioning.h array-private.h \ - ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ - ../cups/language.h md5-private.h language-private.h \ - ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ - thread-private.h -dir.o: dir.c string-private.h ../config.h debug-private.h \ - ../cups/versioning.h dir.h -encode.o: encode.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -file.o: file.c file-private.h cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + backend.h ppd.h cups.h raster.h getdevices.o: getdevices.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h adminutil.h -getifaddrs.o: getifaddrs.c http-private.h ../config.h ../cups/language.h \ - array.h versioning.h ../cups/http.h md5-private.h ipp-private.h \ - ../cups/ipp.h -getputfile.o: getputfile.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -globals.o: globals.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -hash.o: hash.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -http.o: http.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -http-addr.o: http-addr.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -http-addrlist.o: http-addrlist.c cups-private.h string-private.h \ - ../config.h debug-private.h ../cups/versioning.h array-private.h \ - ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ - ../cups/language.h md5-private.h language-private.h \ - ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ - thread-private.h -http-support.o: http-support.c cups-private.h string-private.h \ - ../config.h debug-private.h ../cups/versioning.h array-private.h \ - ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ - ../cups/language.h md5-private.h language-private.h \ - ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ - thread-private.h -ipp.o: ipp.c cups-private.h string-private.h ../config.h debug-private.h \ - ../cups/versioning.h array-private.h ../cups/array.h ipp-private.h \ - ../cups/ipp.h http.h http-private.h ../cups/language.h md5-private.h \ - language-private.h ../cups/transcode.h pwg-private.h ../cups/cups.h \ - file.h pwg.h thread-private.h -ipp-support.o: ipp-support.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -langprintf.o: langprintf.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -language.o: language.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -md5.o: md5.c md5-private.h string-private.h ../config.h -md5passwd.o: md5passwd.c http-private.h ../config.h ../cups/language.h \ - array.h versioning.h ../cups/http.h md5-private.h ipp-private.h \ - ../cups/ipp.h string-private.h -notify.o: notify.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -options.o: options.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -ppd.o: ppd.c cups-private.h string-private.h ../config.h debug-private.h \ - ../cups/versioning.h array-private.h ../cups/array.h ipp-private.h \ - ../cups/ipp.h http.h http-private.h ../cups/language.h md5-private.h \ - language-private.h ../cups/transcode.h pwg-private.h ../cups/cups.h \ - file.h pwg.h thread-private.h ppd-private.h ../cups/ppd.h raster.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h adminutil.h cups.h +getifaddrs.o: getifaddrs.c getifaddrs-internal.h ../config.h +ppd.o: ppd.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h debug-internal.h \ + debug-private.h ppd-attr.o: ppd-attr.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ - ../cups/ppd.h raster.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h debug-internal.h \ + debug-private.h ppd-cache.o: ppd-cache.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ - ../cups/ppd.h raster.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h debug-internal.h \ + debug-private.h ppd-conflicts.o: ppd-conflicts.c cups-private.h string-private.h \ - ../config.h debug-private.h ../cups/versioning.h array-private.h \ - ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ - ../cups/language.h md5-private.h language-private.h \ - ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ - thread-private.h ppd-private.h ../cups/ppd.h raster.h + ../config.h ../cups/versioning.h array-private.h ../cups/array.h \ + versioning.h ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h \ + language.h pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h debug-internal.h \ + debug-private.h ppd-custom.o: ppd-custom.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ - ../cups/ppd.h raster.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h debug-internal.h \ + debug-private.h ppd-emit.o: ppd-emit.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h ppd.h raster.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + debug-internal.h debug-private.h ppd.h cups.h raster.h ppd-localize.o: ppd-localize.c cups-private.h string-private.h \ - ../config.h debug-private.h ../cups/versioning.h array-private.h \ - ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ - ../cups/language.h md5-private.h language-private.h \ - ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ - thread-private.h ppd-private.h ../cups/ppd.h raster.h + ../config.h ../cups/versioning.h array-private.h ../cups/array.h \ + versioning.h ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h \ + language.h pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h debug-internal.h \ + debug-private.h ppd-mark.o: ppd-mark.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ - ../cups/ppd.h raster.h -ppd-page.o: ppd-page.c string-private.h ../config.h debug-private.h \ - ../cups/versioning.h ppd.h cups.h file.h ipp.h http.h array.h \ - language.h pwg.h raster.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h debug-internal.h \ + debug-private.h +ppd-page.o: ppd-page.c string-private.h ../config.h ../cups/versioning.h \ + debug-internal.h debug-private.h ppd.h cups.h file.h versioning.h \ + ipp.h http.h array.h language.h pwg.h raster.h ppd-util.o: ppd-util.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ - ../cups/ppd.h raster.h -pwg-media.o: pwg-media.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -request.o: request.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h debug-internal.h \ + debug-private.h +raster-interpret.o: raster-interpret.c ../cups/raster-private.h raster.h \ + cups.h file.h versioning.h ipp.h http.h array.h language.h pwg.h \ + ../cups/cups.h ../cups/debug-private.h ../cups/versioning.h \ + ../cups/string-private.h ../config.h ../cups/ppd-private.h \ + ../cups/ppd.h pwg-private.h debug-internal.h debug-private.h +raster-interstub.o: raster-interstub.c ../cups/ppd-private.h \ + ../cups/cups.h file.h versioning.h ipp.h http.h array.h language.h \ + pwg.h ../cups/ppd.h cups.h raster.h pwg-private.h sidechannel.o: sidechannel.c sidechannel.h versioning.h cups-private.h \ - string-private.h ../config.h debug-private.h array-private.h \ - ../cups/array.h ipp-private.h ../cups/ipp.h http.h http-private.h \ - ../cups/language.h md5-private.h language-private.h \ - ../cups/transcode.h pwg-private.h ../cups/cups.h file.h pwg.h \ - thread-private.h + string-private.h ../config.h ../cups/versioning.h array-private.h \ + ../cups/array.h ipp-private.h ../cups/cups.h file.h ipp.h http.h \ + array.h language.h pwg.h http-private.h ../cups/language.h \ + ../cups/http.h language-private.h ../cups/transcode.h pwg-private.h \ + thread-private.h debug-internal.h debug-private.h snmp.o: snmp.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h snmp-private.h -snprintf.o: snprintf.c string-private.h ../config.h -string.o: string.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -tempfile.o: tempfile.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -thread.o: thread.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -tls.o: tls.c cups-private.h string-private.h ../config.h debug-private.h \ - ../cups/versioning.h array-private.h ../cups/array.h ipp-private.h \ - ../cups/ipp.h http.h http-private.h ../cups/language.h md5-private.h \ - language-private.h ../cups/transcode.h pwg-private.h ../cups/cups.h \ - file.h pwg.h thread-private.h tls-darwin.c -transcode.o: transcode.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -usersys.o: usersys.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -util.o: util.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + snmp-private.h debug-internal.h debug-private.h +raster-interstub.o: raster-interstub.c ../cups/ppd-private.h \ + ../cups/cups.h file.h versioning.h ipp.h http.h array.h language.h \ + pwg.h ../cups/ppd.h cups.h raster.h pwg-private.h +raster-stubs.o: raster-stubs.c raster-private.h raster.h cups.h file.h \ + versioning.h ipp.h http.h array.h language.h pwg.h ../cups/cups.h \ + ../cups/debug-private.h ../cups/versioning.h ../cups/string-private.h \ + ../config.h +rasterbench.o: rasterbench.c ../config.h ../cups/raster.h cups.h file.h \ + versioning.h ipp.h http.h array.h language.h pwg.h testadmin.o: testadmin.c adminutil.h cups.h file.h versioning.h ipp.h \ - http.h array.h language.h pwg.h string-private.h ../config.h -testarray.o: testarray.c string-private.h ../config.h debug-private.h \ - ../cups/versioning.h array-private.h ../cups/array.h dir.h + http.h array.h language.h pwg.h string-private.h ../config.h \ + ../cups/versioning.h +testarray.o: testarray.c string-private.h ../config.h \ + ../cups/versioning.h debug-private.h array-private.h ../cups/array.h \ + versioning.h dir.h testcache.o: testcache.c ppd-private.h ../cups/cups.h file.h versioning.h \ - ipp.h http.h array.h language.h pwg.h ../cups/ppd.h raster.h \ + ipp.h http.h array.h language.h pwg.h ../cups/ppd.h cups.h raster.h \ pwg-private.h file-private.h cups-private.h string-private.h \ - ../config.h debug-private.h array-private.h ipp-private.h \ - http-private.h md5-private.h language-private.h ../cups/transcode.h \ - thread-private.h + ../config.h ../cups/versioning.h array-private.h ../cups/array.h \ + ipp-private.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h thread-private.h +testclient.o: testclient.c ../config.h ../cups/cups.h file.h versioning.h \ + ipp.h http.h array.h language.h pwg.h ../cups/raster.h cups.h \ + ../cups/string-private.h ../cups/versioning.h ../cups/thread-private.h testconflicts.o: testconflicts.c cups.h file.h versioning.h ipp.h http.h \ - array.h language.h pwg.h ppd.h raster.h string-private.h ../config.h + array.h language.h pwg.h ppd.h raster.h string-private.h ../config.h \ + ../cups/versioning.h testcreds.o: testcreds.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -testcups.o: testcups.c string-private.h ../config.h cups.h file.h \ - versioning.h ipp.h http.h array.h language.h pwg.h ppd.h raster.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h +testcups.o: testcups.c cups-private.h string-private.h ../config.h \ + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd.h cups.h raster.h testdest.o: testdest.c cups.h file.h versioning.h ipp.h http.h array.h \ language.h pwg.h -testfile.o: testfile.c string-private.h ../config.h debug-private.h \ - ../cups/versioning.h file.h +testfile.o: testfile.c string-private.h ../config.h ../cups/versioning.h \ + debug-private.h file.h versioning.h +testgetdests.o: testgetdests.c cups.h file.h versioning.h ipp.h http.h \ + array.h language.h pwg.h testhttp.o: testhttp.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h -testi18n.o: testi18n.c string-private.h ../config.h language-private.h \ - ../cups/transcode.h language.h array.h versioning.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h +testi18n.o: testi18n.c string-private.h ../config.h ../cups/versioning.h \ + language-private.h ../cups/transcode.h language.h array.h versioning.h testipp.o: testipp.c file.h versioning.h string-private.h ../config.h \ - ipp-private.h ../cups/ipp.h http.h array.h + ../cups/versioning.h ipp-private.h ../cups/cups.h ipp.h http.h array.h \ + language.h pwg.h testoptions.o: testoptions.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h testlang.o: testlang.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ - ../cups/ppd.h raster.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h testppd.o: testppd.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h ppd-private.h \ - ../cups/ppd.h raster.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + ppd-private.h ../cups/ppd.h cups.h raster.h raster-private.h \ + ../cups/debug-private.h ../cups/string-private.h testpwg.o: testpwg.c ppd-private.h ../cups/cups.h file.h versioning.h \ - ipp.h http.h array.h language.h pwg.h ../cups/ppd.h raster.h \ + ipp.h http.h array.h language.h pwg.h ../cups/ppd.h cups.h raster.h \ pwg-private.h file-private.h cups-private.h string-private.h \ - ../config.h debug-private.h array-private.h ipp-private.h \ - http-private.h md5-private.h language-private.h ../cups/transcode.h \ - thread-private.h + ../config.h ../cups/versioning.h array-private.h ../cups/array.h \ + ipp-private.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h thread-private.h +testraster.o: testraster.c ../cups/raster-private.h raster.h cups.h \ + file.h versioning.h ipp.h http.h array.h language.h pwg.h \ + ../cups/cups.h ../cups/debug-private.h ../cups/versioning.h \ + ../cups/string-private.h ../config.h testsnmp.o: testsnmp.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h snmp-private.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h \ + snmp-private.h tlscheck.o: tlscheck.c cups-private.h string-private.h ../config.h \ - debug-private.h ../cups/versioning.h array-private.h ../cups/array.h \ - ipp-private.h ../cups/ipp.h http.h http-private.h ../cups/language.h \ - md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ - ../cups/cups.h file.h pwg.h thread-private.h + ../cups/versioning.h array-private.h ../cups/array.h versioning.h \ + ipp-private.h ../cups/cups.h file.h ipp.h http.h array.h language.h \ + pwg.h http-private.h ../cups/language.h ../cups/http.h \ + language-private.h ../cups/transcode.h pwg-private.h thread-private.h diff --git a/cups/Makefile b/cups/Makefile index 962bee6..87d85ba 100644 --- a/cups/Makefile +++ b/cups/Makefile @@ -1,38 +1,23 @@ # -# API library Makefile for CUPS. +# Library Makefile for CUPS. # -# Copyright 2007-2016 by Apple Inc. -# Copyright 1997-2006 by Easy Software Products, all rights reserved. +# Copyright © 2007-2019 by Apple Inc. +# Copyright © 1997-2006 by Easy Software Products, all rights reserved. # -# These coded instructions, statements, and computer programs are the -# property of Apple Inc. and are protected by Federal copyright -# law. Distribution and use rights are outlined in the file "LICENSE.txt" -# which should have been included with this file. If this file is -# missing or damaged, see the license at "http://www.cups.org/". -# -# This file is subject to the Apple OS-Developed Software exception. +# Licensed under Apache License v2.0. See the file "LICENSE" for more +# information. # include ../Makedefs -# -# Options to build libcups without the use of deprecated APIs... -# - -OPTIONS = -D_CUPS_NO_DEPRECATED=1 -D_PPD_DEPRECATED="" - - # # Object files... # -LIBOBJS = \ - adminutil.o \ +COREOBJS = \ array.o \ auth.o \ - backchannel.o \ - backend.o \ debug.o \ dest.o \ dest-job.o \ @@ -41,8 +26,6 @@ LIBOBJS = \ dir.o \ encode.o \ file.o \ - getdevices.o \ - getifaddrs.o \ getputfile.o \ globals.o \ hash.o \ @@ -51,6 +34,8 @@ LIBOBJS = \ http-addrlist.o \ http-support.o \ ipp.o \ + ipp-file.o \ + ipp-vars.o \ ipp-support.o \ langprintf.o \ language.o \ @@ -58,6 +43,26 @@ LIBOBJS = \ md5passwd.o \ notify.o \ options.o \ + pwg-media.o \ + raster-error.o \ + raster-stream.o \ + raster-stubs.o \ + request.o \ + snprintf.o \ + string.o \ + tempfile.o \ + thread.o \ + tls.o \ + transcode.o \ + usersys.o \ + util.o + +DRIVEROBJS = \ + adminutil.o \ + backchannel.o \ + backend.o \ + getdevices.o \ + getifaddrs.o \ ppd.o \ ppd-attr.o \ ppd-cache.o \ @@ -68,27 +73,30 @@ LIBOBJS = \ ppd-mark.o \ ppd-page.o \ ppd-util.o \ - pwg-media.o \ - request.o \ + raster-interpret.o \ + raster-interstub.o \ sidechannel.o \ - snmp.o \ - snprintf.o \ - string.o \ - tempfile.o \ - thread.o \ - tls.o \ - transcode.o \ - usersys.o \ - util.o + snmp.o + +LIBOBJS = \ + $(LIBCUPSOBJS) + +IMAGEOBJS = \ + raster-interstub.o \ + raster-stubs.o + TESTOBJS = \ + rasterbench.o \ testadmin.o \ testarray.o \ testcache.o \ + testclient.o \ testconflicts.o \ testcreds.o \ testcups.o \ testdest.o \ testfile.o \ + testgetdests.o \ testhttp.o \ testi18n.o \ testipp.o \ @@ -96,10 +104,12 @@ TESTOBJS = \ testlang.o \ testppd.o \ testpwg.o \ + testraster.o \ testsnmp.o \ tlscheck.o OBJS = \ $(LIBOBJS) \ + $(IMAGEOBJS) \ $(TESTOBJS) @@ -107,24 +117,29 @@ OBJS = \ # Header files to install... # -HEADERS = \ - adminutil.h \ +COREHEADERS = \ array.h \ - backend.h \ cups.h \ dir.h \ file.h \ http.h \ ipp.h \ language.h \ - ppd.h \ pwg.h \ raster.h \ - sidechannel.h \ transcode.h \ versioning.h -HEADERSPRIV = \ +DRIVERHEADERS = \ + adminutil.h \ + backend.h \ + ppd.h \ + sidechannel.h + +HEADERS = \ + $(LIBHEADERS) + +COREHEADERSPRIV = \ array-private.h \ cups-private.h \ debug-private.h \ @@ -132,32 +147,41 @@ HEADERSPRIV = \ http-private.h \ ipp-private.h \ language-private.h \ - md5-private.h \ - ppd-private.h \ pwg-private.h \ raster-private.h \ - snmp-private.h \ string-private.h \ thread-private.h +DRIVERHEADERSPRIV = \ + ppd-private.h \ + snmp-private.h + +HEADERSPRIV = \ + $(LIBHEADERSPRIV) + # # Targets in this directory... # LIBTARGETS = \ + $(LIBCUPSIMAGE) \ $(LIBCUPSSTATIC) \ - $(LIBCUPS) + $(LIBCUPS) \ + libcupsimage.a UNITTARGETS = \ + rasterbench \ testadmin \ testarray \ testcache \ + testclient \ testconflicts \ testcreds \ testcups \ testdest \ testfile \ + testgetdests \ testhttp \ testi18n \ testipp \ @@ -165,6 +189,7 @@ UNITTARGETS = \ testoptions \ testppd \ testpwg \ + testraster \ testsnmp \ tlscheck @@ -200,6 +225,7 @@ unittests: $(UNITTARGETS) clean: $(RM) $(OBJS) $(TARGETS) $(UNITTARGETS) $(RM) libcups.so libcups.dylib + $(RM) libcupsimage.so libcupsimage.dylib # @@ -262,7 +288,7 @@ install-headers: # Install libraries... # -install-libs: $(INSTALLSTATIC) +install-libs: $(LIBTARGETS) $(INSTALLSTATIC) echo Installing libraries in $(LIBDIR)... $(INSTALL_DIR) -m 755 $(LIBDIR) $(INSTALL_LIB) $(LIBCUPS) $(LIBDIR) @@ -274,10 +300,25 @@ install-libs: $(INSTALLSTATIC) $(RM) $(LIBDIR)/libcups.dylib; \ $(LN) $(LIBCUPS) $(LIBDIR)/libcups.dylib; \ fi + -if test "x$(LIBCUPSIMAGE)" != x; then \ + $(INSTALL_LIB) $(LIBCUPSIMAGE) $(LIBDIR); \ + fi + -if test "x$(LIBCUPSIMAGE)" = "xlibcupsimage.so.2"; then \ + $(RM) $(LIBDIR)/`basename $(LIBCUPSIMAGE) .2`; \ + $(LN) $(LIBCUPSIMAGE) $(LIBDIR)/`basename $(LIBCUPSIMAGE) .2`; \ + fi + -if test "x$(LIBCUPSIMAGE)" = "xlibcupsimage.2.dylib"; then \ + $(RM) $(LIBDIR)/libcupsimage.dylib; \ + $(LN) $(LIBCUPSIMAGE) $(LIBDIR)/libcupsimage.dylib; \ + fi if test "x$(SYMROOT)" != "x"; then \ $(INSTALL_DIR) $(SYMROOT); \ cp $(LIBCUPS) $(SYMROOT); \ dsymutil $(SYMROOT)/$(LIBCUPS); \ + if test "x$(LIBCUPSIMAGE)" != x; then \ + cp $(LIBCUPSIMAGE) $(SYMROOT); \ + dsymutil $(SYMROOT)/$(LIBCUPSIMAGE); \ + fi; \ fi installstatic: @@ -285,6 +326,9 @@ installstatic: $(INSTALL_LIB) -m 755 $(LIBCUPSSTATIC) $(LIBDIR) $(RANLIB) $(LIBDIR)/$(LIBCUPSSTATIC) $(CHMOD) 555 $(LIBDIR)/$(LIBCUPSSTATIC) + $(INSTALL_LIB) -m 755 libcupsimage.a $(LIBDIR) + $(RANLIB) $(LIBDIR)/libcupsimage.a + $(CHMOD) 555 $(LIBDIR)/libcupsimage.a # @@ -293,15 +337,26 @@ installstatic: uninstall: $(RM) $(LIBDIR)/libcups.2.dylib - $(RM) $(LIBDIR)/$(LIBCUPSSTATIC) + $(RM) $(LIBDIR)/libcups.a $(RM) $(LIBDIR)/libcups.dylib $(RM) $(LIBDIR)/libcups.so $(RM) $(LIBDIR)/libcups.so.2 + $(RM) $(LIBDIR)/libcupsimage.2.dylib + $(RM) $(LIBDIR)/libcupsimage.a + $(RM) $(LIBDIR)/libcupsimage.dylib + $(RM) $(LIBDIR)/libcupsimage.so + $(RM) $(LIBDIR)/libcupsimage.so.2 -$(RMDIR) $(LIBDIR) for file in $(HEADERS); do \ $(RM) $(INCLUDEDIR)/cups/$$file; \ done -$(RMDIR) $(INCLUDEDIR)/cups + if test "x$(privateinclude)" != x; then \ + for file in $(HEADERSPRIV); do \ + $(RM) $(PRIVATEINCLUDE)/cups/$$file; \ + done + $(RMDIR) $(PRIVATEINCLUDE)/cups; \ + fi # @@ -310,8 +365,7 @@ uninstall: libcups.so.2: $(LIBOBJS) echo Linking $@... - $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS) $(LIBGSSAPI) \ - $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ $(LIBOBJS) $(LIBS) $(RM) `basename $@ .2` $(LN) $@ `basename $@ .2` @@ -320,21 +374,15 @@ libcups.so.2: $(LIBOBJS) # libcups.2.dylib # -libcups.2.dylib: $(LIBOBJS) $(LIBCUPSORDER) - echo Creating export list for $@... - nm -gm $(LIBOBJS) 2>/dev/null | grep "__text" | grep -v weak | \ - awk '{print $$NF}' | \ - grep -v -E -e '^(_cupsConnect|_cupsCharset|_cupsEncodingName|_cupsSetDefaults|_cupsSetHTTPError|_cupsUserDefault)$$' | \ - sort >t.exp +libcups.2.dylib: $(LIBOBJS) echo Linking $@... - $(DSO) $(ARCHFLAGS) $(DSOFLAGS) -o $@ \ + $(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ \ -install_name $(libdir)/$@ \ - -current_version 2.12.0 \ + -current_version 2.14.0 \ -compatibility_version 2.0.0 \ - -exported_symbols_list t.exp \ - $(LIBOBJS) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) \ - $(COMMONLIBS) $(LIBZ) - $(RM) libcups.dylib t.exp + $(LIBOBJS) $(LIBS) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ + $(RM) libcups.dylib $(LN) $@ libcups.dylib @@ -344,9 +392,8 @@ libcups.2.dylib: $(LIBOBJS) $(LIBCUPSORDER) libcups.la: $(LIBOBJS) echo Linking $@... - $(CC) $(ARCHFLAGS) $(DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) \ - -rpath $(LIBDIR) -version-info 2:12 $(LIBGSSAPI) $(SSLLIBS) \ - $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ $(LIBOBJS:.o=.lo) \ + -rpath $(LIBDIR) -version-info 2:14 $(LIBS) # @@ -364,27 +411,86 @@ libcups.a: $(LIBOBJS) # libcups2.def (Windows DLL exports file...) # -libcups2.def: $(LIBOBJS) Makefile +libcups2.def: $(LIBOBJS) $(IMAGEOBJS) Makefile echo Generating $@... echo "LIBRARY libcups2" >libcups2.def - echo "VERSION 2.12" >>libcups2.def + echo "VERSION 2.14" >>libcups2.def echo "EXPORTS" >>libcups2.def - (nm $(LIBOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}'; \ - echo __cups_strcpy; echo __cups_strlcat; echo __cups_strlcpy) | \ + (nm $(LIBOBJS) $(IMAGEOBJS) 2>/dev/null | grep "T _" | awk '{print $$3}'; \ + echo __cups_strcpy; echo __cups_strlcat; echo __cups_strlcpy; \ + echo __cups_snprintf; echo __cups_vsnprintf; echo __cups_gettimeofday) | \ grep -v -E \ - -e 'cups_debug|Apple|BackChannel|Backend|FileCheck|Filter|GSSService|SetNegotiate|SideChannel' \ + -e 'cups_debug|Apple|BackChannel|Backend|FileCheck|Filter|GSSService|SetNegotiate|SideChannel|SNMP' \ -e 'Block$$' | \ sed -e '1,$$s/^_//' | sort >>libcups2.def +# +# libcupsimage.so.2 +# + +libcupsimage.so.2: $(IMAGEOBJS) libcups.so.2 + echo Linking $@... + $(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ $(IMAGEOBJS) $(LINKCUPS) + $(RM) `basename $@ .2` + $(LN) $@ `basename $@ .2` + + +# +# libcupsimage.2.dylib +# + +libcupsimage.2.dylib: $(IMAGEOBJS) libcups.2.dylib + echo Linking $@... + $(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ \ + -install_name $(libdir)/$@ \ + -current_version 2.3.0 \ + -compatibility_version 2.0.0 \ + $(IMAGEOBJS) $(LINKCUPS) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ + $(RM) libcupsimage.dylib + $(LN) $@ libcupsimage.dylib + + +# +# libcupsimage.la +# + +libcupsimage.la: $(IMAGEOBJS) libcups.la + echo Linking $@... + $(DSO) $(ARCHFLAGS) $(ALL_DSOFLAGS) -o $@ $(IMAGEOBJS:.o=.lo) \ + $(LINKCUPS) -rpath $(LIBDIR) -version-info 2:3 + + +# +# libcupsimage.a +# + +libcupsimage.a: $(IMAGEOBJS) + echo Archiving $@... + $(RM) $@ + $(AR) $(ARFLAGS) $@ $(IMAGEOBJS) + $(RANLIB) $@ + + +# +# rasterbench (dependency on static CUPS library is intentional) +# + +rasterbench: rasterbench.o $(LIBCUPSSTATIC) + echo Linking $@... + $(LD_CC) $(ALL_LDFLAGS) -o $@ rasterbench.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ + + # # testadmin (dependency on static CUPS library is intentional) # testadmin: testadmin.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(LDFLAGS) -o $@ testadmin.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ALL_LDFLAGS) -o $@ testadmin.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ # @@ -393,8 +499,8 @@ testadmin: testadmin.o $(LIBCUPSSTATIC) testarray: testarray.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testarray.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testarray.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ echo Running array API tests... ./testarray @@ -405,8 +511,18 @@ testarray: testarray.o $(LIBCUPSSTATIC) testcache: testcache.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(LDFLAGS) -o $@ testcache.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ALL_LDFLAGS) -o $@ testcache.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ + + +# +# testclient (dependency on static libraries is intentional) +# + +testclient: testclient.o $(LIBCUPSSTATIC) + echo Linking $@... + $(LD_CC) $(ALL_LDFLAGS) -o $@ testclient.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ # @@ -415,8 +531,8 @@ testcache: testcache.o $(LIBCUPSSTATIC) testconflicts: testconflicts.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(LDFLAGS) -o $@ testconflicts.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ALL_LDFLAGS) -o $@ testconflicts.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ # @@ -425,8 +541,8 @@ testconflicts: testconflicts.o $(LIBCUPSSTATIC) testcreds: testcreds.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testcreds.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testcreds.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ # @@ -435,8 +551,8 @@ testcreds: testcreds.o $(LIBCUPSSTATIC) testcups: testcups.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(LDFLAGS) -o $@ testcups.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ALL_LDFLAGS) -o $@ testcups.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ # @@ -445,8 +561,8 @@ testcups: testcups.o $(LIBCUPSSTATIC) testdest: testdest.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(LDFLAGS) -o $@ testdest.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ALL_LDFLAGS) -o $@ testdest.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ # @@ -455,20 +571,30 @@ testdest: testdest.o $(LIBCUPSSTATIC) testfile: testfile.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testfile.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testfile.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ echo Running file API tests... ./testfile +# +# testgetdests (dependency on static CUPS library is intentional) +# + +testgetdests: testgetdests.o $(LIBCUPSSTATIC) + echo Linking $@... + $(LD_CC) $(ALL_LDFLAGS) -o $@ testgetdests.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ + + # # testhttp (dependency on static CUPS library is intentional) # testhttp: testhttp.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testhttp.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testhttp.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ echo Running HTTP API tests... ./testhttp @@ -479,8 +605,8 @@ testhttp: testhttp.o $(LIBCUPSSTATIC) testipp: testipp.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testipp.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testipp.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ echo Running IPP API tests... ./testipp @@ -491,8 +617,8 @@ testipp: testipp.o $(LIBCUPSSTATIC) testi18n: testi18n.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testi18n.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testi18n.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ echo Running internationalization API tests... ./testi18n @@ -503,10 +629,17 @@ testi18n: testi18n.o $(LIBCUPSSTATIC) testlang: testlang.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testlang.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testlang.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ + echo Creating locale directory structure... + $(RM) -r locale + for po in ../locale/cups_*.po; do \ + lang=`basename $$po .po | sed -e '1,$$s/^cups_//'`; \ + $(MKDIR) locale/$$lang; \ + $(LN) ../../$$po locale/$$lang; \ + done echo Running language API tests... - ./testlang + LOCALEDIR=locale ./testlang # @@ -515,8 +648,8 @@ testlang: testlang.o $(LIBCUPSSTATIC) testoptions: testoptions.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testoptions.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testoptions.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ echo Running option API tests... ./testoptions @@ -527,8 +660,8 @@ testoptions: testoptions.o $(LIBCUPSSTATIC) testppd: testppd.o $(LIBCUPSSTATIC) test.ppd test2.ppd echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testppd.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testppd.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ echo Running PPD API tests... ./testppd @@ -539,20 +672,32 @@ testppd: testppd.o $(LIBCUPSSTATIC) test.ppd test2.ppd testpwg: testpwg.o $(LIBCUPSSTATIC) test.ppd echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ testpwg.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testpwg.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ echo Running PWG API tests... ./testpwg test.ppd +# +# testraster (dependency on static CUPS library is intentional) +# + +testraster: testraster.o $(LIBCUPSSTATIC) + echo Linking $@... + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ testraster.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ + echo Running raster API tests... + ./testraster + + # # testsnmp (dependency on static CUPS library is intentional) # testsnmp: testsnmp.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(LDFLAGS) -o $@ testsnmp.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ALL_LDFLAGS) -o $@ testsnmp.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ # @@ -561,8 +706,8 @@ testsnmp: testsnmp.o $(LIBCUPSSTATIC) tlscheck: tlscheck.o $(LIBCUPSSTATIC) echo Linking $@... - $(CC) $(ARCHFLAGS) $(LDFLAGS) -o $@ tlscheck.o $(LIBCUPSSTATIC) \ - $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + $(LD_CC) $(ARCHFLAGS) $(ALL_LDFLAGS) -o $@ tlscheck.o $(LINKCUPSSTATIC) + $(CODE_SIGN) -s "$(CODE_SIGN_IDENTITY)" $@ # @@ -572,34 +717,34 @@ tlscheck: tlscheck.o $(LIBCUPSSTATIC) apihelp: echo Generating CUPS API help files... $(RM) cupspm.xml - mxmldoc --section "Programming" --body cupspm.md \ + codedoc --section "Programming" --body cupspm.md \ cupspm.xml \ auth.c cups.h dest*.c encode.c http.h http*.c ipp.h ipp*.c \ options.c tls-darwin.c usersys.c util.c \ --coverimage cupspm.png \ --epub ../doc/help/cupspm.epub - mxmldoc --section "Programming" --body cupspm.md \ + codedoc --section "Programming" --body cupspm.md \ cupspm.xml > ../doc/help/cupspm.html $(RM) cupspm.xml - mxmldoc --section "Programming" --title "Administration APIs" \ + codedoc --section "Programming" --title "Administration APIs" \ --css ../doc/cups-printable.css \ - --header api-admin.header --intro api-admin.shtml \ - api-admin.xml \ + --header api-admin.header --body api-admin.shtml \ adminutil.c adminutil.h getdevices.c >../doc/help/api-admin.html - $(RM) api-admin.xml - mxmldoc --section "Programming" --title "PPD API (DEPRECATED)" \ + codedoc --section "Programming" --title "PPD API (DEPRECATED)" \ --css ../doc/cups-printable.css \ - --header api-ppd.header --intro api-ppd.shtml \ - api-ppd.xml ppd.h ppd-*.c >../doc/help/api-ppd.html - $(RM) api-ppd.xml - mxmldoc --section "Programming" \ + --header api-ppd.header --body api-ppd.shtml \ + ppd.h ppd-*.c raster-interstub.c >../doc/help/api-ppd.html + codedoc --section "Programming" --title "Raster API" \ + --css ../doc/cups-printable.css \ + --header api-raster.header --body api-raster.shtml \ + ../cups/raster.h raster-stubs.c \ + >../doc/help/api-raster.html + codedoc --section "Programming" \ --title "Filter and Backend Programming" \ --css ../doc/cups-printable.css \ - --header api-filter.header --intro api-filter.shtml \ - api-filter.xml \ + --header api-filter.header --body api-filter.shtml \ backchannel.c backend.h backend.c sidechannel.c sidechannel.h \ >../doc/help/api-filter.html - $(RM) api-filter.xml # @@ -609,6 +754,8 @@ apihelp: sloc: echo "libcups: \c" sloccount $(LIBOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}' + echo "libcupsimage: \c" + sloccount $(IMAGEOBJS:.o=.c) 2>/dev/null | grep "Total Physical" | awk '{print $$9}' # diff --git a/cups/adminutil.c b/cups/adminutil.c index adb1f7a..7ff5bf2 100644 --- a/cups/adminutil.c +++ b/cups/adminutil.c @@ -1,16 +1,11 @@ /* * Administration utility API definitions for CUPS. * - * Copyright 2007-2016 by Apple Inc. - * Copyright 2001-2007 by Easy Software Products. + * Copyright © 2007-2018 by Apple Inc. + * Copyright © 2001-2007 by Easy Software Products. * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "LICENSE.txt" - * which should have been included with this file. If this file is - * missing or damaged, see the license at "http://www.cups.org/". - * - * This file is subject to the Apple OS-Developed Software exception. + * Licensed under Apache License v2.0. See the file "LICENSE" for more + * information. */ /* @@ -18,36 +13,25 @@ */ #include "cups-private.h" +#include "debug-internal.h" #include "ppd.h" #include "adminutil.h" #include #include -#ifdef WIN32 -#else +#ifndef _WIN32 # include # include -#endif /* WIN32 */ +#endif /* !_WIN32 */ /* * Local functions... */ -static int do_samba_command(const char *command, - const char *address, - const char *subcommand, - const char *authfile, - FILE *logfile); static http_status_t get_cupsd_conf(http_t *http, _cups_globals_t *cg, time_t last_update, char *name, size_t namelen, int *remote); static void invalidate_cupsd_cache(_cups_globals_t *cg); -static void write_option(cups_file_t *dstfp, int order, - const char *name, const char *text, - const char *attrname, - ipp_attribute_t *suppattr, - ipp_attribute_t *defattr, int defval, - int valcount); /* @@ -63,318 +47,14 @@ cupsAdminCreateWindowsPPD( char *buffer, /* I - Filename buffer */ int bufsize) /* I - Size of filename buffer */ { - const char *src; /* Source PPD filename */ - cups_file_t *srcfp, /* Source PPD file */ - *dstfp; /* Destination PPD file */ - ipp_t *request, /* IPP request */ - *response; /* IPP response */ - ipp_attribute_t *suppattr, /* IPP -supported attribute */ - *defattr; /* IPP -default attribute */ - cups_lang_t *language; /* Current language */ - char line[256], /* Line from PPD file */ - junk[256], /* Extra junk to throw away */ - *ptr, /* Pointer into line */ - uri[1024], /* Printer URI */ - option[41], /* Option */ - choice[41]; /* Choice */ - int jcloption, /* In a JCL option? */ - jclorder, /* Next JCL order dependency */ - linenum; /* Current line number */ - time_t curtime; /* Current time */ - struct tm *curdate; /* Current date */ - static const char * const pattrs[] = /* Printer attributes we want */ - { - "job-hold-until-supported", - "job-hold-until-default", - "job-sheets-supported", - "job-sheets-default", - "job-priority-supported", - "job-priority-default" - }; - - - /* - * Range check the input... - */ + (void)http; + (void)dest; + (void)bufsize; if (buffer) *buffer = '\0'; - if (!http) - http = _cupsConnect(); - - if (!http || !dest || !buffer || bufsize < 2) - return (NULL); - - /* - * Get the PPD file... - */ - - if ((src = cupsGetPPD2(http, dest)) == NULL) - return (NULL); - - /* - * Get the supported banner pages, etc. for the printer... - */ - - request = ippNewRequest(IPP_OP_GET_PRINTER_ATTRIBUTES); - - httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, - "localhost", 0, "/printers/%s", dest); - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, - "printer-uri", NULL, uri); - - ippAddStrings(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, - "requested-attributes", sizeof(pattrs) / sizeof(pattrs[0]), - NULL, pattrs); - - /* - * Do the request and get back a response... - */ - - response = cupsDoRequest(http, request, "/"); - if (!response || cupsLastError() > IPP_STATUS_OK_CONFLICTING) - { - unlink(src); - return (NULL); - } - - /* - * Open the original PPD file... - */ - - if ((srcfp = cupsFileOpen(src, "rb")) == NULL) - return (NULL); - - /* - * Create a temporary output file using the destination buffer... - */ - - if ((dstfp = cupsTempFile2(buffer, bufsize)) == NULL) - { - cupsFileClose(srcfp); - - unlink(src); - - return (NULL); - } - - /* - * Write a new header explaining that this isn't the original PPD... - */ - - cupsFilePuts(dstfp, "*PPD-Adobe: \"4.3\"\n"); - - curtime = time(NULL); - curdate = gmtime(&curtime); - - cupsFilePrintf(dstfp, "*%% Modified on %04d%02d%02d%02d%02d%02d+0000 " - "for CUPS Windows Driver\n", - curdate->tm_year + 1900, curdate->tm_mon + 1, curdate->tm_mday, - curdate->tm_hour, curdate->tm_min, curdate->tm_sec); - - /* - * Read the existing PPD file, converting all PJL commands to CUPS - * job ticket comments... - */ - - jcloption = 0; - jclorder = 0; - linenum = 0; - language = cupsLangDefault(); - - while (cupsFileGets(srcfp, line, sizeof(line))) - { - linenum ++; - - if (!strncmp(line, "*PPD-Adobe:", 11)) - { - /* - * Already wrote the PPD header... - */ - - continue; - } - else if (!strncmp(line, "*JCLBegin:", 10) || - !strncmp(line, "*JCLToPSInterpreter:", 20) || - !strncmp(line, "*JCLEnd:", 8) || - !strncmp(line, "*Protocols:", 11)) - { - /* - * Don't use existing JCL keywords; we'll create our own, below... - */ - - cupsFilePrintf(dstfp, "*%% Commented out for CUPS Windows Driver...\n" - "*%%%s\n", line + 1); - continue; - } - else if (!strncmp(line, "*JCLOpenUI", 10)) - { - jcloption = 1; - cupsFilePrintf(dstfp, "%s\n", line); - } - else if (!strncmp(line, "*JCLCloseUI", 11)) - { - jcloption = 0; - cupsFilePrintf(dstfp, "%s\n", line); - } - else if (jcloption && !strncmp(line, "*OrderDependency:", 17)) - { - for (ptr = line + 17; _cups_isspace(*ptr); ptr ++); - - ptr = strchr(ptr, ' '); - - if (ptr) - { - cupsFilePrintf(dstfp, "*OrderDependency: %d%s\n", jclorder, ptr); - jclorder ++; - } - else - cupsFilePrintf(dstfp, "%s\n", line); - } - else if (jcloption && - strncmp(line, "*End", 4) && - strncmp(line, "*Default", 8)) - { - if ((ptr = strchr(line, ':')) == NULL) - { - snprintf(line, sizeof(line), - _cupsLangString(language, _("Missing value on line %d.")), - linenum); - _cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0); - - cupsFileClose(srcfp); - cupsFileClose(dstfp); - - unlink(src); - unlink(buffer); - - *buffer = '\0'; - - return (NULL); - } - - if ((ptr = strchr(ptr, '\"')) == NULL) - { - snprintf(line, sizeof(line), - _cupsLangString(language, - _("Missing double quote on line %d.")), - linenum); - _cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0); - - cupsFileClose(srcfp); - cupsFileClose(dstfp); - - unlink(src); - unlink(buffer); - - *buffer = '\0'; - - return (NULL); - } - - if (sscanf(line, "*%40s%*[ \t]%40[^:/]", option, choice) != 2) - { - snprintf(line, sizeof(line), - _cupsLangString(language, - _("Bad option + choice on line %d.")), - linenum); - _cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, line, 0); - - cupsFileClose(srcfp); - cupsFileClose(dstfp); - - unlink(src); - unlink(buffer); - - *buffer = '\0'; - - return (NULL); - } - - if (strchr(ptr + 1, '\"') == NULL) - { - /* - * Skip remaining... - */ - - while (cupsFileGets(srcfp, junk, sizeof(junk)) != NULL) - { - linenum ++; - - if (!strncmp(junk, "*End", 4)) - break; - } - } - - snprintf(ptr + 1, sizeof(line) - (size_t)(ptr - line + 1), - "%%cupsJobTicket: %s=%s\n\"\n*End", option, choice); - - cupsFilePrintf(dstfp, "*%% Changed for CUPS Windows Driver...\n%s\n", - line); - } - else - cupsFilePrintf(dstfp, "%s\n", line); - } - - cupsFileClose(srcfp); - unlink(src); - - if (linenum == 0) - { - _cupsSetError(IPP_STATUS_ERROR_DOCUMENT_FORMAT_ERROR, _("Empty PPD file."), 1); - - cupsFileClose(dstfp); - unlink(buffer); - - *buffer = '\0'; - - return (NULL); - } - - /* - * Now add the CUPS-specific attributes and options... - */ - - cupsFilePuts(dstfp, "\n*% CUPS Job Ticket support and options...\n"); - cupsFilePuts(dstfp, "*Protocols: PJL\n"); - cupsFilePuts(dstfp, "*JCLBegin: \"%!PS-Adobe-3.0<0A>\"\n"); - cupsFilePuts(dstfp, "*JCLToPSInterpreter: \"\"\n"); - cupsFilePuts(dstfp, "*JCLEnd: \"\"\n"); - - cupsFilePuts(dstfp, "\n*OpenGroup: CUPS/CUPS Options\n\n"); - - if ((defattr = ippFindAttribute(response, "job-hold-until-default", - IPP_TAG_ZERO)) != NULL && - (suppattr = ippFindAttribute(response, "job-hold-until-supported", - IPP_TAG_ZERO)) != NULL) - write_option(dstfp, jclorder ++, "cupsJobHoldUntil", "Hold Until", - "job-hold-until", suppattr, defattr, 0, 1); - - if ((defattr = ippFindAttribute(response, "job-priority-default", - IPP_TAG_INTEGER)) != NULL && - (suppattr = ippFindAttribute(response, "job-priority-supported", - IPP_TAG_RANGE)) != NULL) - write_option(dstfp, jclorder ++, "cupsJobPriority", "Priority", - "job-priority", suppattr, defattr, 0, 1); - - if ((defattr = ippFindAttribute(response, "job-sheets-default", - IPP_TAG_ZERO)) != NULL && - (suppattr = ippFindAttribute(response, "job-sheets-supported", - IPP_TAG_ZERO)) != NULL) - { - write_option(dstfp, jclorder ++, "cupsJobSheetsStart", "Start Banner", - "job-sheets", suppattr, defattr, 0, 2); - write_option(dstfp, jclorder, "cupsJobSheetsEnd", "End Banner", - "job-sheets", suppattr, defattr, 1, 2); - } - - cupsFilePuts(dstfp, "*CloseGroup: CUPS\n"); - cupsFileClose(dstfp); - - ippDelete(response); - - return (buffer); + return (NULL); } @@ -393,435 +73,14 @@ cupsAdminExportSamba( const char *samba_password, /* I - Samba password */ FILE *logfile) /* I - Log file, if any */ { - int status; /* Status of Samba commands */ - int have_drivers; /* Have drivers? */ - char file[1024], /* File to test for */ - authfile[1024], /* Temporary authentication file */ - address[1024], /* Address for command */ - subcmd[1024], /* Sub-command */ - message[1024]; /* Error message */ - cups_file_t *fp; /* Authentication file */ - cups_lang_t *language; /* Current language */ - _cups_globals_t *cg = _cupsGlobals(); - /* Global data */ - - - /* - * Range check input... - */ - - if (!dest || !ppd || !samba_server || !samba_user || !samba_password) - { - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); - return (0); - } - - /* - * Create a temporary authentication file for Samba... - */ - - if ((fp = cupsTempFile2(authfile, sizeof(authfile))) == NULL) - { - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, NULL, 0); - return (0); - } - - cupsFilePrintf(fp, "username = %s\n", samba_user); - cupsFilePrintf(fp, "password = %s\n", samba_password); - cupsFileClose(fp); - - /* - * See which drivers are available; the new CUPS v6 and Adobe drivers - * depend on the Windows 2k PS driver, so copy that driver first: - * - * Files: - * - * ps5ui.dll - * pscript.hlp - * pscript.ntf - * pscript5.dll - */ - - have_drivers = 0; - language = cupsLangDefault(); - - snprintf(file, sizeof(file), "%s/drivers/pscript5.dll", cg->cups_datadir); - if (!access(file, 0)) - { - have_drivers |= 1; - - /* - * Windows 2k driver is installed; do the smbclient commands needed - * to copy the Win2k drivers over... - */ - - snprintf(address, sizeof(address), "//%s/print$", samba_server); - - snprintf(subcmd, sizeof(subcmd), - "mkdir W32X86;" - "put %s W32X86/%s.ppd;" - "put %s/drivers/ps5ui.dll W32X86/ps5ui.dll;" - "put %s/drivers/pscript.hlp W32X86/pscript.hlp;" - "put %s/drivers/pscript.ntf W32X86/pscript.ntf;" - "put %s/drivers/pscript5.dll W32X86/pscript5.dll", - ppd, dest, cg->cups_datadir, cg->cups_datadir, - cg->cups_datadir, cg->cups_datadir); - - if ((status = do_samba_command("smbclient", address, subcmd, - authfile, logfile)) != 0) - { - snprintf(message, sizeof(message), - _cupsLangString(language, - _("Unable to copy Windows 2000 printer " - "driver files (%d).")), status); - - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); - - if (logfile) - _cupsLangPuts(logfile, message); - - unlink(authfile); - - return (0); - } - - /* - * See if we also have the CUPS driver files; if so, use them! - */ - - snprintf(file, sizeof(file), "%s/drivers/cupsps6.dll", cg->cups_datadir); - if (!access(file, 0)) - { - /* - * Copy the CUPS driver files over... - */ - - snprintf(subcmd, sizeof(subcmd), - "put %s/drivers/cups6.ini W32X86/cups6.ini;" - "put %s/drivers/cupsps6.dll W32X86/cupsps6.dll;" - "put %s/drivers/cupsui6.dll W32X86/cupsui6.dll", - cg->cups_datadir, cg->cups_datadir, cg->cups_datadir); - - if ((status = do_samba_command("smbclient", address, subcmd, - authfile, logfile)) != 0) - { - snprintf(message, sizeof(message), - _cupsLangString(language, - _("Unable to copy CUPS printer driver " - "files (%d).")), status); - - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); - - if (logfile) - _cupsLangPuts(logfile, message); - - unlink(authfile); - - return (0); - } - - /* - * Do the rpcclient command needed for the CUPS drivers... - */ - - snprintf(subcmd, sizeof(subcmd), - "adddriver \"Windows NT x86\" \"%s:" - "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:" - "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf," - "cups6.ini,cupsps6.dll,cupsui6.dll\"", - dest, dest, dest); - } - else - { - /* - * Don't have the CUPS drivers, so just use the standard Windows - * drivers... - */ - - snprintf(subcmd, sizeof(subcmd), - "adddriver \"Windows NT x86\" \"%s:" - "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:" - "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf\"", - dest, dest, dest); - } - - if ((status = do_samba_command("rpcclient", samba_server, subcmd, - authfile, logfile)) != 0) - { - snprintf(message, sizeof(message), - _cupsLangString(language, - _("Unable to install Windows 2000 printer " - "driver files (%d).")), status); - - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); - - if (logfile) - _cupsLangPuts(logfile, message); - - unlink(authfile); - - return (0); - } - } - - /* - * See if we have the Win9x PS driver... - */ - - snprintf(file, sizeof(file), "%s/drivers/ADOBEPS4.DRV", cg->cups_datadir); - if (!access(file, 0)) - { - have_drivers |= 2; - - /* - * Do the smbclient commands needed for the Adobe Win9x drivers... - */ - - snprintf(address, sizeof(address), "//%s/print$", samba_server); - - snprintf(subcmd, sizeof(subcmd), - "mkdir WIN40;" - "put %s WIN40/%s.PPD;" - "put %s/drivers/ADFONTS.MFM WIN40/ADFONTS.MFM;" - "put %s/drivers/ADOBEPS4.DRV WIN40/ADOBEPS4.DRV;" - "put %s/drivers/ADOBEPS4.HLP WIN40/ADOBEPS4.HLP;" - "put %s/drivers/ICONLIB.DLL WIN40/ICONLIB.DLL;" - "put %s/drivers/PSMON.DLL WIN40/PSMON.DLL;", - ppd, dest, cg->cups_datadir, cg->cups_datadir, - cg->cups_datadir, cg->cups_datadir, cg->cups_datadir); - - if ((status = do_samba_command("smbclient", address, subcmd, - authfile, logfile)) != 0) - { - snprintf(message, sizeof(message), - _cupsLangString(language, - _("Unable to copy Windows 9x printer " - "driver files (%d).")), status); - - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); - - if (logfile) - _cupsLangPuts(logfile, message); - - unlink(authfile); - - return (0); - } - - /* - * Do the rpcclient commands needed for the Adobe Win9x drivers... - */ - - snprintf(subcmd, sizeof(subcmd), - "adddriver \"Windows 4.0\" \"%s:ADOBEPS4.DRV:%s.PPD:NULL:" - "ADOBEPS4.HLP:PSMON.DLL:RAW:" - "ADOBEPS4.DRV,%s.PPD,ADOBEPS4.HLP,PSMON.DLL,ADFONTS.MFM," - "ICONLIB.DLL\"", - dest, dest, dest); - - if ((status = do_samba_command("rpcclient", samba_server, subcmd, - authfile, logfile)) != 0) - { - snprintf(message, sizeof(message), - _cupsLangString(language, - _("Unable to install Windows 9x printer " - "driver files (%d).")), status); - - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); - - if (logfile) - _cupsLangPuts(logfile, message); - - unlink(authfile); - - return (0); - } - } - - /* - * See if we have the 64-bit Windows PS driver... - * - * Files: - * - * x64/ps5ui.dll - * x64/pscript.hlp - * x64/pscript.ntf - * x64/pscript5.dll - */ - - snprintf(file, sizeof(file), "%s/drivers/x64/pscript5.dll", cg->cups_datadir); - if (!access(file, 0)) - { - have_drivers |= 4; - - /* - * 64-bit Windows driver is installed; do the smbclient commands needed - * to copy the Win64 drivers over... - */ - - snprintf(address, sizeof(address), "//%s/print$", samba_server); - - snprintf(subcmd, sizeof(subcmd), - "mkdir x64;" - "put %s x64/%s.ppd;" - "put %s/drivers/x64/ps5ui.dll x64/ps5ui.dll;" - "put %s/drivers/x64/pscript.hlp x64/pscript.hlp;" - "put %s/drivers/x64/pscript.ntf x64/pscript.ntf;" - "put %s/drivers/x64/pscript5.dll x64/pscript5.dll", - ppd, dest, cg->cups_datadir, cg->cups_datadir, - cg->cups_datadir, cg->cups_datadir); - - if ((status = do_samba_command("smbclient", address, subcmd, - authfile, logfile)) != 0) - { - snprintf(message, sizeof(message), - _cupsLangString(language, - _("Unable to copy 64-bit Windows printer " - "driver files (%d).")), status); - - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); - - if (logfile) - _cupsLangPuts(logfile, message); - - unlink(authfile); - - return (0); - } - - /* - * See if we also have the CUPS driver files; if so, use them! - */ - - snprintf(file, sizeof(file), "%s/drivers/x64/cupsps6.dll", cg->cups_datadir); - if (!access(file, 0)) - { - /* - * Copy the CUPS driver files over... - */ - - snprintf(subcmd, sizeof(subcmd), - "put %s/drivers/x64/cups6.ini x64/cups6.ini;" - "put %s/drivers/x64/cupsps6.dll x64/cupsps6.dll;" - "put %s/drivers/x64/cupsui6.dll x64/cupsui6.dll", - cg->cups_datadir, cg->cups_datadir, cg->cups_datadir); - - if ((status = do_samba_command("smbclient", address, subcmd, - authfile, logfile)) != 0) - { - snprintf(message, sizeof(message), - _cupsLangString(language, - _("Unable to copy 64-bit CUPS printer driver " - "files (%d).")), status); - - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); - - if (logfile) - _cupsLangPuts(logfile, message); - - unlink(authfile); - - return (0); - } - - /* - * Do the rpcclient command needed for the CUPS drivers... - */ - - snprintf(subcmd, sizeof(subcmd), - "adddriver \"Windows x64\" \"%s:" - "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:" - "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf," - "cups6.ini,cupsps6.dll,cupsui6.dll\"", - dest, dest, dest); - } - else - { - /* - * Don't have the CUPS drivers, so just use the standard Windows - * drivers... - */ - - snprintf(subcmd, sizeof(subcmd), - "adddriver \"Windows x64\" \"%s:" - "pscript5.dll:%s.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:" - "pscript5.dll,%s.ppd,ps5ui.dll,pscript.hlp,pscript.ntf\"", - dest, dest, dest); - } - - if ((status = do_samba_command("rpcclient", samba_server, subcmd, - authfile, logfile)) != 0) - { - snprintf(message, sizeof(message), - _cupsLangString(language, - _("Unable to install Windows 2000 printer " - "driver files (%d).")), status); - - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); - - if (logfile) - _cupsLangPuts(logfile, message); - - unlink(authfile); - - return (0); - } - } - - if (logfile && !(have_drivers & 1)) - { - if (!have_drivers) - strlcpy(message, - _cupsLangString(language, - _("No Windows printer drivers are installed.")), - sizeof(message)); - else - strlcpy(message, - _cupsLangString(language, - _("Warning, no Windows 2000 printer drivers " - "are installed.")), - sizeof(message)); - - _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, message, 0); - _cupsLangPuts(logfile, message); - } - - if (have_drivers == 0) - { - _cupsSetError(IPP_STATUS_ERROR_NOT_FOUND, message, 0); - - unlink(authfile); - - return (0); - } - - /* - * Finally, associate the drivers we just added with the queue... - */ - - snprintf(subcmd, sizeof(subcmd), "setdriver %s %s", dest, dest); - - if ((status = do_samba_command("rpcclient", samba_server, subcmd, - authfile, logfile)) != 0) - { - snprintf(message, sizeof(message), - _cupsLangString(language, - _("Unable to set Windows printer driver (%d).")), - status); - - _cupsSetError(IPP_STATUS_ERROR_INTERNAL, message, 0); - - if (logfile) - _cupsLangPuts(logfile, message); - - unlink(authfile); - - return (0); - } - - unlink(authfile); - - return (1); + (void)dest; + (void)ppd; + (void)samba_server; + (void)samba_user; + (void)samba_password; + (void)logfile; + + return (0); } @@ -2076,88 +1335,6 @@ cupsAdminSetServerSettings( } -/* - * 'do_samba_command()' - Do a SAMBA command. - */ - -static int /* O - Status of command */ -do_samba_command(const char *command, /* I - Command to run */ - const char *address, /* I - Address for command */ - const char *subcmd, /* I - Sub-command */ - const char *authfile, /* I - Samba authentication file */ - FILE *logfile) /* I - Optional log file */ -{ -#ifdef WIN32 - return (1); /* Always fail on Windows... */ - -#else - int status; /* Status of command */ - int pid; /* Process ID of child */ - - - if (logfile) - _cupsLangPrintf(logfile, - _("Running command: %s %s -N -A %s -c \'%s\'"), - command, address, authfile, subcmd); - - if ((pid = fork()) == 0) - { - /* - * Child goes here, redirect stdin/out/err and execute the command... - */ - - int fd = open("/dev/null", O_RDONLY); - - if (fd > 0) - { - dup2(fd, 0); - close(fd); - } - - if (logfile) - dup2(fileno(logfile), 1); - else if ((fd = open("/dev/null", O_WRONLY)) > 1) - { - dup2(fd, 1); - close(fd); - } - - dup2(1, 2); - - execlp(command, command, address, "-N", "-A", authfile, "-c", subcmd, - (char *)0); - exit(errno); - } - else if (pid < 0) - { - status = -1; - - if (logfile) - _cupsLangPrintf(logfile, _("Unable to run \"%s\": %s"), - command, strerror(errno)); - } - else - { - /* - * Wait for the process to complete... - */ - - while (wait(&status) != pid); - } - - if (logfile) - _cupsLangPuts(logfile, ""); - - DEBUG_printf(("9do_samba_command: status=%d", status)); - - if (WIFEXITED(status)) - return (WEXITSTATUS(status)); - else - return (-WTERMSIG(status)); -#endif /* WIN32 */ -} - - /* * 'get_cupsd_conf()' - Get the current cupsd.conf file. */ @@ -2172,9 +1349,9 @@ get_cupsd_conf( int *remote) /* O - Remote file? */ { int fd; /* Temporary file descriptor */ -#ifndef WIN32 +#ifndef _WIN32 struct stat info; /* cupsd.conf file information */ -#endif /* WIN32 */ +#endif /* _WIN32 */ http_status_t status; /* Status of getting cupsd.conf */ char host[HTTP_MAX_HOST]; /* Hostname for connection */ @@ -2191,7 +1368,7 @@ get_cupsd_conf( snprintf(name, namesize, "%s/cupsd.conf", cg->cups_serverroot); *remote = 0; -#ifndef WIN32 +#ifndef _WIN32 if (!_cups_strcasecmp(host, "localhost") && !access(name, R_OK)) { /* @@ -2218,7 +1395,7 @@ get_cupsd_conf( status = HTTP_STATUS_OK; } else -#endif /* !WIN32 */ +#endif /* !_WIN32 */ { /* * Read cupsd.conf via a HTTP GET request... @@ -2273,112 +1450,3 @@ invalidate_cupsd_cache( cg->cupsd_num_settings = 0; cg->cupsd_settings = NULL; } - - -/* - * 'write_option()' - Write a CUPS option to a PPD file. - */ - -static void -write_option(cups_file_t *dstfp, /* I - PPD file */ - int order, /* I - Order dependency */ - const char *name, /* I - Option name */ - const char *text, /* I - Option text */ - const char *attrname, /* I - Attribute name */ - ipp_attribute_t *suppattr, /* I - IPP -supported attribute */ - ipp_attribute_t *defattr, /* I - IPP -default attribute */ - int defval, /* I - Default value number */ - int valcount) /* I - Number of values */ -{ - int i; /* Looping var */ - - - cupsFilePrintf(dstfp, "*JCLOpenUI *%s/%s: PickOne\n" - "*OrderDependency: %d JCLSetup *%s\n", - name, text, order, name); - - if (defattr->value_tag == IPP_TAG_INTEGER) - { - /* - * Do numeric options with a range or list... - */ - - cupsFilePrintf(dstfp, "*Default%s: %d\n", name, - defattr->values[defval].integer); - - if (suppattr->value_tag == IPP_TAG_RANGE) - { - /* - * List each number in the range... - */ - - for (i = suppattr->values[0].range.lower; - i <= suppattr->values[0].range.upper; - i ++) - { - cupsFilePrintf(dstfp, "*%s %d: \"", name, i); - - if (valcount == 1) - cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%d\n\"\n*End\n", - attrname, i); - else if (defval == 0) - cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%d\"\n", attrname, i); - else if (defval < (valcount - 1)) - cupsFilePrintf(dstfp, ",%d\"\n", i); - else - cupsFilePrintf(dstfp, ",%d\n\"\n*End\n", i); - } - } - else - { - /* - * List explicit numbers... - */ - - for (i = 0; i < suppattr->num_values; i ++) - { - cupsFilePrintf(dstfp, "*%s %d: \"", name, suppattr->values[i].integer); - - if (valcount == 1) - cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%d\n\"\n*End\n", attrname, - suppattr->values[i].integer); - else if (defval == 0) - cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%d\"\n", attrname, - suppattr->values[i].integer); - else if (defval < (valcount - 1)) - cupsFilePrintf(dstfp, ",%d\"\n", suppattr->values[i].integer); - else - cupsFilePrintf(dstfp, ",%d\n\"\n*End\n", suppattr->values[i].integer); - } - } - } - else - { - /* - * Do text options with a list... - */ - - cupsFilePrintf(dstfp, "*Default%s: %s\n", name, - defattr->values[defval].string.text); - - for (i = 0; i < suppattr->num_values; i ++) - { - cupsFilePrintf(dstfp, "*%s %s: \"", name, - suppattr->values[i].string.text); - - if (valcount == 1) - cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%s\n\"\n*End\n", attrname, - suppattr->values[i].string.text); - else if (defval == 0) - cupsFilePrintf(dstfp, "%%cupsJobTicket: %s=%s\"\n", attrname, - suppattr->values[i].string.text); - else if (defval < (valcount - 1)) - cupsFilePrintf(dstfp, ",%s\"\n", suppattr->values[i].string.text); - else - cupsFilePrintf(dstfp, ",%s\n\"\n*End\n", - suppattr->values[i].string.text); - } - } - - cupsFilePrintf(dstfp, "*JCLCloseUI: *%s\n\n", name); -} diff --git a/cups/adminutil.h b/cups/adminutil.h index 23f7978..c3c0dc3 100644 --- a/cups/adminutil.h +++ b/cups/adminutil.h @@ -4,13 +4,7 @@ * Copyright 2007-2016 by Apple Inc. * Copyright 2001-2007 by Easy Software Products. * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright - * law. Distribution and use rights are outlined in the file "LICENSE.txt" - * which should have been included with this file. If this file is - * missing or damaged, see the license at "http://www.cups.org/". - * - * This file is subject to the Apple OS-Developed Software exception. + * Licensed under Apache License v2.0. See the file "LICENSE" for more information. */ #ifndef _CUPS_ADMINUTIL_H_ @@ -83,7 +77,7 @@ extern ipp_status_t cupsGetDevices(http_t *http, int timeout, const char *include_schemes, const char *exclude_schemes, cups_device_cb_t callback, - void *user_data) _CUPS_API_1_4; + void *user_data) _CUPS_DEPRECATED; # ifdef __cplusplus diff --git a/cups/api-admin.header b/cups/api-admin.header index a3ce3b1..73625c6 100644 --- a/cups/api-admin.header +++ b/cups/api-admin.header @@ -1,13 +1,10 @@

Administrative APIs

diff --git a/cups/api-admin.shtml b/cups/api-admin.shtml index 8928e47..ab00c9b 100644 --- a/cups/api-admin.shtml +++ b/cups/api-admin.shtml @@ -1,20 +1,17 @@

Overview

The administrative APIs provide convenience functions to perform certain administrative functions with the CUPS scheduler.

-
Note: +
Note:

Administrative functions normally require administrative privileges to execute and must not be used in ordinary user applications!

diff --git a/cups/api-array.header b/cups/api-array.header deleted file mode 100644 index 557833e..0000000 --- a/cups/api-array.header +++ /dev/null @@ -1,32 +0,0 @@ - - -

Array API

- -
- - - - - - - - - - - - - - - - -
Headercups/array.h
Library-lcups
See AlsoProgramming: Introduction to CUPS Programming
diff --git a/cups/api-array.shtml b/cups/api-array.shtml deleted file mode 100644 index 374ef5b..0000000 --- a/cups/api-array.shtml +++ /dev/null @@ -1,194 +0,0 @@ - - -

Overview

- -

The CUPS array API provides a high-performance generic array container. -The contents of the array container can be sorted and the container itself is -designed for optimal speed and memory usage under a wide variety of conditions. -Sorted arrays use a binary search algorithm from the last found or inserted -element to quickly find matching elements in the array. Arrays created with the -optional hash function can often find elements with a single lookup. The -cups_array_t type is used when -referring to a CUPS array.

- -

The CUPS scheduler (cupsd) and many of the CUPS API -functions use the array API to efficiently manage large lists of -data.

- -

Managing Arrays

- -

Arrays are created using either the -cupsArrayNew, -cupsArrayNew2, or -cupsArrayNew3 functions. The -first function creates a new array with the specified callback function -and user data pointer:

- -
-#include <cups/array.h>
-
-static int compare_func(void *first, void *second, void *user_data);
-
-void *user_data;
-cups_array_t *array = cupsArrayNew(compare_func, user_data);
-
- -

The comparison function (type -cups_arrayfunc_t) is called -whenever an element is added to the array and can be NULL to -create an unsorted array. The function returns -1 if the first element should -come before the second, 0 if the first and second elements should have the same -ordering, and 1 if the first element should come after the second.

- -

The "user_data" pointer is passed to your comparison function. Pass -NULL if you do not need to associate the elements in your array -with additional information.

- -

The cupsArrayNew2 function adds -two more arguments to support hashed lookups, which can potentially provide -instantaneous ("O(1)") lookups in your array:

- -
-#include <cups/array.h>
-
-#define HASH_SIZE 512 /* Size of hash table */
-
-static int compare_func(void *first, void *second, void *user_data);
-static int hash_func(void *element, void *user_data);
-
-void *user_data;
-cups_array_t *hash_array = cupsArrayNew2(compare_func, user_data, hash_func, HASH_SIZE);
-
- -

The hash function (type -cups_ahash_func_t) should return a -number from 0 to (hash_size-1) that (hopefully) uniquely identifies the -element and is called whenever you look up an element in the array with -cupsArrayFind. The hash size is -only limited by available memory, but generally should not be larger than -16384 to realize any performance improvement.

- -

The cupsArrayNew3 function adds -copy and free callbacks to support basic memory management of elements:

- -
-#include <cups/array.h>
-
-#define HASH_SIZE 512 /* Size of hash table */
-
-static int compare_func(void *first, void *second, void *user_data);
-static void *copy_func(void *element, void *user_data);
-static void free_func(void *element, void *user_data);
-static int hash_func(void *element, void *user_data);
-
-void *user_data;
-cups_array_t *array = cupsArrayNew3(compare_func, user_data, NULL, 0, copy_func, free_func);
-
-cups_array_t *hash_array = cupsArrayNew3(compare_func, user_data, hash_func, HASH_SIZE, copy_func, free_func);
-
- -

Once you have created the array, you add elements using the -cupsArrayAdd -cupsArrayInsert functions. -The first function adds an element to the array, adding the new element -after any elements that have the same order, while the second inserts the -element before others with the same order. For unsorted arrays, -cupsArrayAdd appends the element to -the end of the array while -cupsArrayInsert inserts the -element at the beginning of the array. For example, the following code -creates a sorted array of character strings:

- -
-#include <cups/array.h>
-
-/* Use strcmp() to compare strings - it will ignore the user_data pointer */
-cups_array_t *array = cupsArrayNew((cups_array_func_t)strcmp, NULL);
-
-/* Add four strings to the array */
-cupsArrayAdd(array, "One Fish");
-cupsArrayAdd(array, "Two Fish");
-cupsArrayAdd(array, "Red Fish");
-cupsArrayAdd(array, "Blue Fish");
-
- -

Elements are removed using the -cupsArrayRemove function, for -example:

- -
-#include <cups/array.h>
-
-/* Use strcmp() to compare strings - it will ignore the user_data pointer */
-cups_array_t *array = cupsArrayNew((cups_array_func_t)strcmp, NULL);
-
-/* Add four strings to the array */
-cupsArrayAdd(array, "One Fish");
-cupsArrayAdd(array, "Two Fish");
-cupsArrayAdd(array, "Red Fish");
-cupsArrayAdd(array, "Blue Fish");
-
-/* Remove "Red Fish" */
-cupsArrayRemove(array, "Red Fish");
-
- -

Finally, you free the memory used by the array using the -cupsArrayDelete function. All -of the memory for the array and hash table (if any) is freed, however CUPS -does not free the elements unless you provide copy and free functions.

- -

Finding and Enumerating Elements

- -

CUPS provides several functions to find and enumerate elements in an -array. Each one sets or updates a "current index" into the array, such that -future lookups will start where the last one left off:

- -
-
cupsArrayFind
-
Returns the first matching element.
-
cupsArrayFirst
-
Returns the first element in the array.
-
cupsArrayIndex
-
Returns the Nth element in the array, starting at 0.
-
cupsArrayLast
-
Returns the last element in the array.
-
cupsArrayNext
-
Returns the next element in the array.
-
cupsArrayPrev
-
Returns the previous element in the array.
-
- -

Each of these functions returns NULL when there is no -corresponding element. For example, a simple for loop using the -cupsArrayFirst and -cupsArrayNext functions will -enumerate all of the strings in our previous example:

- -
-#include <cups/array.h>
-
-/* Use strcmp() to compare strings - it will ignore the user_data pointer */
-cups_array_t *array = cupsArrayNew((cups_array_func_t)strcmp, NULL);
-
-/* Add four strings to the array */
-cupsArrayAdd(array, "One Fish");
-cupsArrayAdd(array, "Two Fish");
-cupsArrayAdd(array, "Red Fish");
-cupsArrayAdd(array, "Blue Fish");
-
-/* Show all of the strings in the array */
-char *s;
-for (s = (char *)cupsArrayFirst(array); s != NULL; s = (char *)cupsArrayNext(array))
-  puts(s);
-
diff --git a/cups/api-cups.header b/cups/api-cups.header deleted file mode 100644 index 23b3794..0000000 --- a/cups/api-cups.header +++ /dev/null @@ -1,38 +0,0 @@ - - -

CUPS API

- -
- - - - - - - - - - - - - - - - -
Headercups/cups.h
Library-lcups
See AlsoProgramming: Introduction to CUPS Programming
- Programming: Array API
- Programming: File and Directory APIs
- Programming: Filter and Backend Programming
- Programming: HTTP and IPP APIs
- Programming: PPD API
- Programming: Raster API
diff --git a/cups/api-cups.shtml b/cups/api-cups.shtml deleted file mode 100644 index 918efe7..0000000 --- a/cups/api-cups.shtml +++ /dev/null @@ -1,441 +0,0 @@ - - -

Overview

- -

The CUPS API provides the convenience functions needed to support -applications, filters, printer drivers, and backends that need to interface -with the CUPS scheduler.

- -

Clients and Servers

- -

CUPS is based on the Internet Printing Protocol ("IPP"), which allows -clients (applications) to communicate with a server (the scheduler) to get a -list of printers, send print jobs, and so forth. You identify which server -you want to communicate with using a pointer to the opaque structure -http_t. All of the examples in this document use the -CUPS_HTTP_DEFAULT constant, referring to the default connection -to the scheduler. The HTTP and IPP -APIs document provides more information on server connections.

- -

Printers and Classes

- -

Printers and classes (collections of printers) are accessed through -the cups_dest_t structure which -includes the name (name), instance (instance - -a way of selecting certain saved options/settings), and the options and -attributes associated with that destination (num_options and -options). Destinations are created using the -cupsGetDests function and freed -using the cupsFreeDests function. -The cupsGetDest function finds a -specific destination for printing:

- -
-#include <cups/cups.h>
-
-cups_dest_t *dests;
-int num_dests = cupsGetDests(&dests);
-cups_dest_t *dest = cupsGetDest("name", NULL, num_dests, dests);
-
-/* do something with dest */
-
-cupsFreeDests(num_dests, dests);
-
- -

Passing NULL to -cupsGetDest for the destination name -will return the default destination. Similarly, passing a NULL -instance will return the default instance for that destination.

- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table 1: Printer Attributes
Attribute NameDescription
"auth-info-required"The type of authentication required for printing to this - destination: "none", "username,password", "domain,username,password", - or "negotiate" (Kerberos)
"printer-info"The human-readable description of the destination such as "My - Laser Printer".
"printer-is-accepting-jobs""true" if the destination is accepting new jobs, "false" if - not.
"printer-is-shared""true" if the destination is being shared with other computers, - "false" if not.
"printer-location"The human-readable location of the destination such as "Lab 4".
"printer-make-and-model"The human-readable make and model of the destination such as "HP - LaserJet 4000 Series".
"printer-state""3" if the destination is idle, "4" if the destination is printing - a job, and "5" if the destination is stopped.
"printer-state-change-time"The UNIX time when the destination entered the current state.
"printer-state-reasons"Additional comma-delimited state keywords for the destination - such as "media-tray-empty-error" and "toner-low-warning".
"printer-type"The cups_printer_t - value associated with the destination.
- -

Options

- -

Options are stored in arrays of -cups_option_t structures. Each -option has a name (name) and value (value) -associated with it. The cups_dest_t -num_options and options members contain the -default options for a particular destination, along with several informational -attributes about the destination as shown in Table 1. -The cupsGetOption function gets -the value for the named option. For example, the following code lists the -available destinations and their human-readable descriptions:

- -
-#include <cups/cups.h>
-
-cups_dest_t *dests;
-int num_dests = cupsGetDests(&dests);
-cups_dest_t *dest;
-int i;
-const char *value;
-
-for (i = num_dests, dest = dests; i > 0; i --, dest ++)
-  if (dest->instance == NULL)
-  {
-    value = cupsGetOption("printer-info", dest->num_options, dest->options);
-    printf("%s (%s)\n", dest->name, value ? value : "no description");
-  }
-
-cupsFreeDests(num_dests, dests);
-
- -

You can create your own option arrays using the -cupsAddOption function, which -adds a single named option to an array:

- -
-#include <cups/cups.h>
-
-int num_options = 0;
-cups_option_t *options = NULL;
-
-/* The returned num_options value is updated as needed */
-num_options = cupsAddOption("first", "value", num_options, &options);
-
-/* This adds a second option value */
-num_options = cupsAddOption("second", "value", num_options, &options);
-
-/* This replaces the first option we added */
-num_options = cupsAddOption("first", "new value", num_options, &options);
-
- -

Use a for loop to copy the options from a destination:

- -
-#include <cups/cups.h>
-
-int i;
-int num_options = 0;
-cups_option_t *options = NULL;
-cups_dest_t *dest;
-
-for (i = 0; i < dest->num_options; i ++)
-  num_options = cupsAddOption(dest->options[i].name, dest->options[i].value,
-                              num_options, &options);
-
- -

Use the cupsFreeOptions -function to free the options array when you are done using it:

- -
-cupsFreeOptions(num_options, options);
-
- -

Print Jobs

- -

Print jobs are identified by a locally-unique job ID number from 1 to -231-1 and have options and one or more files for printing to a -single destination. The cupsPrintFile -function creates a new job with one file. The following code prints the CUPS -test page file:

- -
-#include <cups/cups.h>
-
-cups_dest_t *dest;
-int num_options;
-cups_option_t *options;
-int job_id;
-
-/* Print a single file */
-job_id = cupsPrintFile(dest->name, "/usr/share/cups/data/testprint.ps",
-                        "Test Print", num_options, options);
-
- -

The cupsPrintFiles function -creates a job with multiple files. The files are provided in a -char * array:

- -
-#include <cups/cups.h>
-
-cups_dest_t *dest;
-int num_options;
-cups_option_t *options;
-int job_id;
-char *files[3] = { "file1.pdf", "file2.pdf", "file3.pdf" };
-
-/* Print three files */
-job_id = cupsPrintFiles(dest->name, 3, files, "Test Print", num_options, options);
-
- -

Finally, the cupsCreateJob -function creates a new job with no files in it. Files are added using the -cupsStartDocument, -cupsWriteRequestData, -and cupsFinishDocument functions. -The following example creates a job with 10 text files for printing:

- -
-#include <cups/cups.h>
-
-cups_dest_t *dest;
-int num_options;
-cups_option_t *options;
-int job_id;
-int i;
-char buffer[1024];
-
-/* Create the job */
-job_id = cupsCreateJob(CUPS_HTTP_DEFAULT, dest->name, "10 Text Files",
-                       num_options, options);
-
-/* If the job is created, add 10 files */
-if (job_id > 0)
-{
-  for (i = 1; i <= 10; i ++)
-  {
-    snprintf(buffer, sizeof(buffer), "file%d.txt", i);
-
-    cupsStartDocument(CUPS_HTTP_DEFAULT, dest->name, job_id, buffer,
-                      CUPS_FORMAT_TEXT, i == 10);
-
-    snprintf(buffer, sizeof(buffer),
-             "File %d\n"
-             "\n"
-             "One fish,\n"
-             "Two fish,\n
-             "Red fish,\n
-             "Blue fish\n", i);
-
-    /* cupsWriteRequestData can be called as many times as needed */
-    cupsWriteRequestData(CUPS_HTTP_DEFAULT, buffer, strlen(buffer));
-
-    cupsFinishDocument(CUPS_HTTP_DEFAULT, dest->name);
-  }
-}
-
- -

Once you have created a job, you can monitor its status using the -cupsGetJobs function, which returns -an array of cups_job_t structures. -Each contains the job ID (id), destination name -(dest), title (title), and other information -associated with the job. The job array is freed using the -cupsFreeJobs function. The following -example monitors a specific job ID, showing the current job state once every -5 seconds until the job is completed:

- -
-#include <cups/cups.h>
-
-cups_dest_t *dest;
-int job_id;
-int num_jobs;
-cups_job_t *jobs;
-int i;
-ipp_jstate_t job_state = IPP_JOB_PENDING;
-
-while (job_state < IPP_JOB_STOPPED)
-{
-  /* Get my jobs (1) with any state (-1) */
-  num_jobs = cupsGetJobs(&jobs, dest->name, 1, -1);
-
-  /* Loop to find my job */
-  job_state = IPP_JOB_COMPLETED;
-
-  for (i = 0; i < num_jobs; i ++)
-    if (jobs[i].id == job_id)
-    {
-      job_state = jobs[i].state;
-      break;
-    }
-
-  /* Free the job array */
-  cupsFreeJobs(num_jobs, jobs);
-
-  /* Show the current state */
-  switch (job_state)
-  {
-    case IPP_JOB_PENDING :
-        printf("Job %d is pending.\n", job_id);
-        break;
-    case IPP_JOB_HELD :
-        printf("Job %d is held.\n", job_id);
-        break;
-    case IPP_JOB_PROCESSING :
-        printf("Job %d is processing.\n", job_id);
-        break;
-    case IPP_JOB_STOPPED :
-        printf("Job %d is stopped.\n", job_id);
-        break;
-    case IPP_JOB_CANCELED :
-        printf("Job %d is canceled.\n", job_id);
-        break;
-    case IPP_JOB_ABORTED :
-        printf("Job %d is aborted.\n", job_id);
-        break;
-    case IPP_JOB_COMPLETED :
-        printf("Job %d is completed.\n", job_id);
-        break;
-  }
-
-  /* Sleep if the job is not finished */
-  if (job_state < IPP_JOB_STOPPED)
-    sleep(5);
-}
-
- -

To cancel a job, use the -cupsCancelJob function with the -job ID:

- -
-#include <cups/cups.h>
-
-cups_dest_t *dest;
-int job_id;
-
-cupsCancelJob(dest->name, job_id);
-
- -

Error Handling

- -

If any of the CUPS API printing functions returns an error, the reason for -that error can be found by calling the -cupsLastError and -cupsLastErrorString functions. -cupsLastError returns the last IPP -error code -(ipp_status_t) -that was encountered, while -cupsLastErrorString returns -a (localized) human-readable string that can be shown to the user. For example, -if any of the job creation functions returns a job ID of 0, you can use -cupsLastErrorString to show -the reason why the job could not be created:

- -
-#include <cups/cups.h>
-
-int job_id;
-
-if (job_id == 0)
-  puts(cupsLastErrorString());
-
- -

Passwords and Authentication

- -

CUPS supports authentication of any request, including submission of print -jobs. The default mechanism for getting the username and password is to use the -login user and a password from the console.

- -

To support other types of applications, in particular Graphical User -Interfaces ("GUIs"), the CUPS API provides functions to set the default -username and to register a callback function that returns a password string.

- -

The cupsSetPasswordCB -function is used to set a password callback in your program. Only one -function can be used at any time.

- -

The cupsSetUser function sets the -current username for authentication. This function can be called by your -password callback function to change the current username as needed.

- -

The following example shows a simple password callback that gets a -username and password from the user:

- -
-#include <cups/cups.h>
-
-const char *
-my_password_cb(const char *prompt)
-{
-  char	user[65];
-
-
-  puts(prompt);
-
-  /* Get a username from the user */
-  printf("Username: ");
-  if (fgets(user, sizeof(user), stdin) == NULL)
-    return (NULL);
-
-  /* Strip the newline from the string and set the user */
-  user[strlen(user) - 1] = '\0';
-
-  cupsSetUser(user);
-
-  /* Use getpass() to ask for the password... */
-  return (getpass("Password: "));
-}
-
-cupsSetPasswordCB(my_password_cb);
-
- -

Similarly, a GUI could display the prompt string in a window with input -fields for the username and password. The username should default to the -string returned by the cupsUser -function.

diff --git a/cups/api-filedir.header b/cups/api-filedir.header deleted file mode 100644 index 87744ee..0000000 --- a/cups/api-filedir.header +++ /dev/null @@ -1,34 +0,0 @@ - - -

File and Directory APIs

- -
- - - - - - - - - - - - - - - - -
Headerscups/file.h
- cups/dir.h
Library-lcups
See AlsoProgramming: Introduction to CUPS Programming
- Programming: CUPS API
diff --git a/cups/api-filedir.shtml b/cups/api-filedir.shtml deleted file mode 100644 index 8fdbee6..0000000 --- a/cups/api-filedir.shtml +++ /dev/null @@ -1,29 +0,0 @@ - - -

Overview

- -

The CUPS file and directory APIs provide portable interfaces -for manipulating files and listing files and directories. Unlike -stdio FILE streams, the cupsFile functions -allow you to open more than 256 files at any given time. They -also manage the platform-specific details of locking, large file -support, line endings (CR, LF, or CR LF), and reading and writing -files using Flate ("gzip") compression. Finally, you can also -connect, read from, and write to network connections using the -cupsFile functions.

- -

The cupsDir functions manage the platform-specific -details of directory access/listing and provide a convenient way -to get both a list of files and the information (permissions, -size, timestamp, etc.) for each of those files.

diff --git a/cups/api-filter.header b/cups/api-filter.header index f08bc71..f64ef63 100644 --- a/cups/api-filter.header +++ b/cups/api-filter.header @@ -1,13 +1,10 @@

Filter and Backend Programming

diff --git a/cups/api-filter.shtml b/cups/api-filter.shtml index bd90333..e7ab510 100644 --- a/cups/api-filter.shtml +++ b/cups/api-filter.shtml @@ -1,14 +1,11 @@

Overview

@@ -871,4 +868,7 @@ void *my_data; -
Note: The sandbox profile used in CUPS 2.0 still allows some actions that are not listed above - these privileges will be removed over time until the profile matches the list above.
+
Note: + +

The sandbox profile used in CUPS still allows some actions that are not listed above - these privileges will be removed over time until the profile matches the list above.

+
diff --git a/cups/api-httpipp.header b/cups/api-httpipp.header deleted file mode 100644 index cbede8f..0000000 --- a/cups/api-httpipp.header +++ /dev/null @@ -1,37 +0,0 @@ - - -

HTTP and IPP APIs

- -
- - - - - - - - - - - - - - - - -
Headerscups/cups.h
- cups/http.h
- cups/ipp.h
Library-lcups
See AlsoProgramming: Introduction to CUPS Programming
- Programming: CUPS API
- References: CUPS Implementation of IPP
diff --git a/cups/api-httpipp.shtml b/cups/api-httpipp.shtml deleted file mode 100644 index 33bf5ad..0000000 --- a/cups/api-httpipp.shtml +++ /dev/null @@ -1,315 +0,0 @@ - - -

Overview

- -

The CUPS HTTP and IPP APIs provide low-level access to the HTTP and IPP -protocols and CUPS scheduler. They are typically used by monitoring and -administration programs to perform specific functions not supported by the -high-level CUPS API functions.

- -

The HTTP APIs use an opaque structure called -http_t to manage connections to -a particular HTTP or IPP server. The -httpConnectEncrypt function is -used to create an instance of this structure for a particular server. -The constant CUPS_HTTP_DEFAULT can be used with all of the -cups functions to refer to the default CUPS server - the functions -create a per-thread http_t as needed.

- -

The IPP APIs use two opaque structures for requests (messages sent to the CUPS scheduler) and responses (messages sent back to your application from the scheduler). The ipp_t type holds a complete request or response and is allocated using the ippNew or ippNewRequest functions and freed using the ippDelete function.

- -

The second opaque structure is called ipp_attribute_t and holds a single IPP attribute which consists of a group tag (ippGetGroupTag), a value type tag (ippGetValueTag), the attribute name (ippGetName), and 1 or more values (ippGetCount, ippGetBoolean, ippGetCollection, ippGetDate, ippGetInteger, ippGetRange, ippGetResolution, and ippGetString). Attributes are added to an ipp_t pointer using one of the ippAdd functions. For example, use ippAddString to add the "printer-uri" and "requesting-user-name" string attributes to a request:

- -
-ipp_t *request = ippNewRequest(IPP_GET_JOBS);
-
-ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
-             NULL, "ipp://localhost/printers/");
-ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
-             NULL, cupsUser());
-
- -

Once you have created an IPP request, use the cups functions to send the request to and read the response from the server. For example, the cupsDoRequest function can be used for simple query operations that do not involve files:

- -
-#include <cups/cups.h>
-
-
-ipp_t *get_jobs(void)
-{
-  ipp_t *request = ippNewRequest(IPP_GET_JOBS);
-
-  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
-               NULL, "ipp://localhost/printers/");
-  ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
-               NULL, cupsUser());
-
-  return (cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/"));
-}
-
- -

The cupsDoRequest function frees the request and returns an IPP response or NULL pointer if the request could not be sent to the server. Once you have a response from the server, you can either use the ippFindAttribute and ippFindNextAttribute functions to find specific attributes, for example:

- -
-ipp_t *response;
-ipp_attribute_t *attr;
-
-attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM);
-
- -

You can also walk the list of attributes with a simple for loop like this:

- -
-ipp_t *response;
-ipp_attribute_t *attr;
-
-for (attr = ippFirstAttribute(response); attr != NULL; attr = ippNextAttribute(response))
-  if (ippGetName(attr) == NULL)
-    puts("--SEPARATOR--");
-  else
-    puts(ippGetName(attr));
-
- -

The for loop approach is normally used when collecting attributes for multiple objects (jobs, printers, etc.) in a response. Attributes with NULL names indicate a separator between the attributes of each object. For example, the following code will list the jobs returned from our previous get_jobs example code:

- -
-ipp_t *response = get_jobs();
-
-if (response != NULL)
-{
-  ipp_attribute_t *attr;
-  const char *attrname;
-  int job_id = 0;
-  const char *job_name = NULL;
-  const char *job_originating_user_name = NULL;
-
-  puts("Job ID  Owner             Title");
-  puts("------  ----------------  ---------------------------------");
-
-  for (attr = ippFirstAttribute(response); attr != NULL; attr = ippNextAttribute(response))
-  {
-   /* Attributes without names are separators between jobs */
-    attrname = ippGetName(attr);
-    if (attrname == NULL)
-    {
-      if (job_id > 0)
-      {
-        if (job_name == NULL)
-          job_name = "(withheld)";
-
-        if (job_originating_user_name == NULL)
-          job_originating_user_name = "(withheld)";
-
-        printf("%5d  %-16s  %s\n", job_id, job_originating_user_name, job_name);
-      }
-
-      job_id = 0;
-      job_name = NULL;
-      job_originating_user_name = NULL;
-      continue;
-    }
-    else if (!strcmp(attrname, "job-id") && ippGetValueTag(attr) == IPP_TAG_INTEGER)
-      job_id = ippGetInteger(attr, 0);
-    else if (!strcmp(attrname, "job-name") && ippGetValueTag(attr) == IPP_TAG_NAME)
-      job_name = ippGetString(attr, 0, NULL);
-    else if (!strcmp(attrname, "job-originating-user-name") &&
-             ippGetValueTag(attr) == IPP_TAG_NAME)
-      job_originating_user_name = ippGetString(attr, 0, NULL);
-  }
-
-  if (job_id > 0)
-  {
-    if (job_name == NULL)
-      job_name = "(withheld)";
-
-    if (job_originating_user_name == NULL)
-      job_originating_user_name = "(withheld)";
-
-    printf("%5d  %-16s  %s\n", job_id, job_originating_user_name, job_name);
-  }
-}
-
- -

Creating URI Strings

- -

To ensure proper encoding, the -httpAssembleURIf function must be -used to format a "printer-uri" string for all printer-based requests:

- -
-const char *name = "Foo";
-char uri[1024];
-ipp_t *request;
-
-httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, cupsServer(),
-                 ippPort(), "/printers/%s", name);
-ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
-
- -

Sending Requests with Files

- -

The cupsDoFileRequest and -cupsDoIORequest functions are -used for requests involving files. The -cupsDoFileRequest function -attaches the named file to a request and is typically used when sending a print -file or changing a printer's PPD file:

- -
-const char *filename = "/usr/share/cups/data/testprint.ps";
-const char *name = "Foo";
-char uri[1024];
-char resource[1024];
-ipp_t *request = ippNewRequest(IPP_PRINT_JOB);
-ipp_t *response;
-
-/* Use httpAssembleURIf for the printer-uri string */
-httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, cupsServer(),
-                 ippPort(), "/printers/%s", name);
-ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri);
-ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name",
-             NULL, cupsUser());
-ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name",
-             NULL, "testprint.ps");
-
-/* Use snprintf for the resource path */
-snprintf(resource, sizeof(resource), "/printers/%s", name);
-
-response = cupsDoFileRequest(CUPS_HTTP_DEFAULT, request, resource, filename);
-
- -

The cupsDoIORequest function -optionally attaches a file to the request and optionally saves a file in the -response from the server. It is used when using a pipe for the request -attachment or when using a request that returns a file, currently only -CUPS_GET_DOCUMENT and CUPS_GET_PPD. For example, -the following code will download the PPD file for the sample HP LaserJet -printer driver:

- -
-char tempfile[1024];
-int tempfd;
-ipp_t *request = ippNewRequest(CUPS_GET_PPD);
-ipp_t *response;
-
-ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
-             NULL, "laserjet.ppd");
-
-tempfd = cupsTempFd(tempfile, sizeof(tempfile));
-
-response = cupsDoIORequest(CUPS_HTTP_DEFAULT, request, "/", -1, tempfd);
-
- -

The example passes -1 for the input file descriptor to specify -that no file is to be attached to the request. The PPD file attached to the -response is written to the temporary file descriptor we created using the -cupsTempFd function.

- -

Asynchronous Request Processing

- -

The cupsSendRequest and -cupsGetResponse support -asynchronous communications with the server. Unlike the other request -functions, the IPP request is not automatically freed, so remember to -free your request with the ippDelete -function.

- -

File data is attached to the request using the -cupsWriteRequestData -function, while file data returned from the server is read using the -cupsReadResponseData -function. We can rewrite the previous CUPS_GET_PPD example -to use the asynchronous functions quite easily:

- -
-char tempfile[1024];
-int tempfd;
-ipp_t *request = ippNewRequest(CUPS_GET_PPD);
-ipp_t *response;
-
-ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
-             NULL, "laserjet.ppd");
-
-tempfd = cupsTempFd(tempfile, sizeof(tempfile));
-
-if (cupsSendRequest(CUPS_HTTP_DEFAULT, request, "/") == HTTP_CONTINUE)
-{
-  response = cupsGetResponse(CUPS_HTTP_DEFAULT, "/");
-
-  if (response != NULL)
-  {
-    ssize_t bytes;
-    char buffer[8192];
-
-    while ((bytes = cupsReadResponseData(CUPS_HTTP_DEFAULT, buffer, sizeof(buffer))) > 0)
-      write(tempfd, buffer, bytes);
-  }
-}
-
-/* Free the request! */
-ippDelete(request);
-
- -

The cupsSendRequest function -returns the initial HTTP request status, typically either -HTTP_CONTINUE or HTTP_UNAUTHORIZED. The latter status -is returned when the request requires authentication of some sort. The -cupsDoAuthentication function -must be called when your see HTTP_UNAUTHORIZED and the request -re-sent. We can add authentication support to our example code by using a -do ... while loop:

- -
-char tempfile[1024];
-int tempfd;
-ipp_t *request = ippNewRequest(CUPS_GET_PPD);
-ipp_t *response;
-http_status_t status;
-
-ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "ppd-name",
-             NULL, "laserjet.ppd");
-
-tempfd = cupsTempFd(tempfile, sizeof(tempfile));
-
-/* Loop for authentication */
-do
-{
-  status = cupsSendRequest(CUPS_HTTP_DEFAULT, request, "/");
-
-  if (status == HTTP_UNAUTHORIZED)
-  {
-    /* Try to authenticate, break out of the loop if that fails */
-    if (cupsDoAuthentication(CUPS_HTTP_DEFAULT, "POST", "/"))
-      break;
-  }
-}
-while (status != HTTP_CONTINUE && status != HTTP_UNAUTHORIZED);
-
-if (status == HTTP_CONTINUE)
-{
-  response = cupsGetResponse(CUPS_HTTP_DEFAULT, "/");
-
-  if (response != NULL)
-  {
-    ssize_t bytes;
-    char buffer[8192];
-
-    while ((bytes = cupsReadResponseData(CUPS_HTTP_DEFAULT, buffer, sizeof(buffer))) > 0)
-      write(tempfd, buffer, bytes);
-  }
-}
-
-/* Free the request! */
-ippDelete(request);
-
diff --git a/cups/api-overview.header b/cups/api-overview.header deleted file mode 100644 index b96cd07..0000000 --- a/cups/api-overview.header +++ /dev/null @@ -1,54 +0,0 @@ - - -

Introduction to CUPS Programming

- -
- - - - - - - - - - - - - - - - -
Headerscups/cups.h
- cups/adminutil.h
- cups/array.h
- cups/dir.h
- cups/file.h
- cups/http.h
- cups/ipp.h
- cups/language.h
- cups/ppd.h
- cups/pwg.h
- cups/raster.h
Libraries-lcups
See AlsoProgramming: Developing Raster Printer Drivers
- Programming: Developing PostScript Printer Drivers
- Programming: Filter and Backend Programming
- Programming: Introduction to the PPD Compiler
- Programming: Administrative APIs
- Programming: Array API
- Programming: CUPS API
- Programming: File and Directory APIs
- Programming: HTTP and IPP APIs
- Programming: PPD API (DEPRECATED)
- Programming: Raster API
- References: PPD Compiler Driver Information File Reference
- Specifications: CUPS PPD Extensions
diff --git a/cups/api-overview.shtml b/cups/api-overview.shtml deleted file mode 100644 index 9903152..0000000 --- a/cups/api-overview.shtml +++ /dev/null @@ -1,92 +0,0 @@ - - -

Overview

- -

CUPS provides two libraries that interface with the different parts of the -printing system. The "cups" library provides all of the common application and -filter functions while the "cupsimage" library provides all of the imaging -functions used in raster printer drivers. The "cups" library functions are -accessed by including the <cups/cups.h> header, while -"cupsimage" functions are found in the <cups/raster.h> -header.

- -

Compiling Programs

- -

The CUPS libraries can be used from any C, C++, or Objective C program. -The method of compiling against the libraries varies depending on the -operating system and installation of CUPS. The following sections show how -to compile a simple program (shown below) in two common environments.

- -

The following simple program lists the available printers on the system:

- -
-#include <stdio.h>
-#include <cups/cups.h>
-
-int main(void)
-{
-  int i;
-  cups_dest_t *dests, *dest;
-  int num_dests = cupsGetDests(&dests);
-
-  for (i = num_dests, dest = dests; i > 0; i --, dest ++)
-  {
-    if (dest->instance)
-      printf("%s/%s\n", dest->name, dest->instance);
-    else
-      puts(dest->name);
-  }
-
-  return (0);
-}
-
- -

Compiling with Xcode

- -

In Xcode, choose New Project... from the File menu, -then select the Standard Tool project type under Command Line -Utility. Click Next and choose a project directory. Click -Next to create the project.

- -

In the project window, double-click on the Targets group and -control-click on the simple target to show the context menu. Choose -Existing Framework... from the Add submenu. When the file -chooser sheet appears, press the / key and enter "/usr/lib". Scroll -down the file list and select the libcups.dylib file. Click the -Add button in the file chooser and attributes sheets.

- -

In the project window, double-click on the main.c source file. -Replace the template source code with the listing above and save it. Click the -Build and Go button to build the sample program and run it.

- -

Compiling with GCC

- -

From the command-line, create a file called sample.c using your -favorite editor and then run the following command to compile it with GCC and -run it:

- -
-gcc -o simple `cups-config --cflags` simple.c `cups-config --libs`
-./simple
-
- -

The cups-config command provides the compiler flags -("cups-config --cflags") and libraries ("cups-config --libs") needed for the -local system.

- -

Where to Go Next

- -

If you are developing a print filter, driver, or backend, see the -Filter and Backend Programming -guide. Raster printer driver developers should also read the -Raster API reference.

diff --git a/cups/api-ppd.header b/cups/api-ppd.header index 2f7a4cd..bc555e6 100644 --- a/cups/api-ppd.header +++ b/cups/api-ppd.header @@ -1,18 +1,18 @@

PPD API (DEPRECATED)

-
The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the CUPS API documentation. These functions will be removed in a future release of CUPS.
+
Note: + +

The PPD API was deprecated in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the CUPS Programming Manual documentation. These functions will be removed in a future release of CUPS.

+
@@ -29,7 +29,7 @@ diff --git a/cups/api-ppd.shtml b/cups/api-ppd.shtml index 50c4850..d7a43f4 100644 --- a/cups/api-ppd.shtml +++ b/cups/api-ppd.shtml @@ -1,19 +1,19 @@

Overview

-
The PPD API is deprecated starting in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the CUPS API documentation. These functions will be removed in a future release of CUPS.
+
Note: + +

The PPD API was deprecated in CUPS 1.6/macOS 10.8. Please use the new Job Ticket APIs in the CUPS Programming Manual documentation. These functions will be removed in a future release of CUPS.

+

The CUPS PPD API provides read-only access the data in PostScript Printer Description ("PPD") files which are used for all printers with a driver. With @@ -31,6 +31,7 @@ values as case-insensitive strings, so option "InputSlot" and choice "Upper" are equivalent to "inputslot" and "upper", respectively.

+

Loading a PPD File

The ppdOpenFile function "opens" a @@ -118,6 +119,7 @@ int num_options = cupsParseOptions(argv[5], 0, &options); cupsFreeOptions(num_options, options); +

Constraints

PPD files support specification of conflict conditions, called @@ -128,6 +130,7 @@ the options and choices that conflict with each other. The how many of the selected options are incompatible. Since constraints are normally specified in pairs, the returned value is typically an even number.

+

Page Sizes

Page sizes are special options which have physical dimensions and margins @@ -182,6 +185,7 @@ in points. Custom page size names can also be specified in inches ppdPageSize function will return NULL.

+

Attributes

Every PPD file is composed of one or more attributes. Most of these diff --git a/cups/api-raster.header b/cups/api-raster.header new file mode 100644 index 0000000..f5122d8 --- /dev/null +++ b/cups/api-raster.header @@ -0,0 +1,31 @@ + + +

Raster API

+ +
See Also Programming: Introduction to CUPS Programming
- Programming: CUPS API
+ Programming: CUPS Programming Manual
Specifications: CUPS PPD Extensions
+ + + + + + + + + + + + + + + + +
Headercups/raster.h
Library-lcups
See AlsoProgramming: CUPS Programming Manual
+ Programming: PPD API
+ References: CUPS PPD Specification
diff --git a/filter/api-raster.shtml b/cups/api-raster.shtml similarity index 90% rename from filter/api-raster.shtml rename to cups/api-raster.shtml index 6d458a2..44a6037 100644 --- a/filter/api-raster.shtml +++ b/cups/api-raster.shtml @@ -1,14 +1,11 @@

Overview

@@ -150,7 +147,7 @@ the memory used to read the raster file:

-

DeprecatedcupsColorProfile

+ +

DeprecatedcupsColorProfile

*cupsColorProfile Resolution/MediaType: "density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"

@@ -142,7 +146,7 @@ f(x) = density * x gamma -

macOS 10.3/CUPS 1.2cupsICCProfile

+

macOS 10.3/CUPS 1.2cupsICCProfile

*cupsICCProfile ColorModel.MediaType.Resolution/Description: "filename"

@@ -163,7 +167,7 @@ f(x) = density * x gamma *cupsICCProfile ../Default: "/Library/Printers/vendor/Profiles/foo-default.icc" -

Customizing the Profile Selection Keywords

+

Customizing the Profile Selection Keywords

The ColorModel, MediaType, and Resolution main keywords can be reassigned to different main keywords, allowing drivers to do color profile selection based on different parameters. The cupsICCQualifier1, cupsICCQualifier2, and cupsICCQualifier3 keywords define the mapping from selector to main keyword:

@@ -181,7 +185,8 @@ f(x) = density * x gamma *cupsICCQualifier3: Resolution -

macOS 10.4Custom Color Matching Support

+ +

macOS 10.4Custom Color Matching Support

*APSupportsCustomColorMatching: true
*APCustomColorMatchingName name/text: ""
@@ -196,7 +201,7 @@ f(x) = density * x gamma -

macOS 10.5APCustomColorMatchingName

+

macOS 10.5APCustomColorMatchingName

*APCustomColorMatchingName name/text: ""

@@ -210,7 +215,7 @@ f(x) = density * x gamma *fr.APCustomColorMatchingName name/La AcmeColor(tm): "" -

macOS 10.5APCustomColorMatchingProfile

+

macOS 10.5APCustomColorMatchingProfile

*APCustomColorMatchingProfile: name

@@ -232,7 +237,7 @@ f(x) = density * x gamma *APCustomColorMatchingProfile: AdobeRGB -

macOS 10.5APDefaultCustomColorMatchingProfile

+

macOS 10.5APDefaultCustomColorMatchingProfile

*APDefaultCustomColorMatchingProfile: name

@@ -246,7 +251,7 @@ f(x) = density * x gamma *APDefaultCustomColorMatchingProfile: sRGB -

macOS 10.4APSupportsCustomColorMatching

+

macOS 10.4APSupportsCustomColorMatching

*APSupportsCustomColorMatching: boolean

@@ -282,7 +287,8 @@ f(x) = density * x gamma -

CUPS 1.4/macOS 10.6cupsUIConstraints

+ +

CUPS 1.4/macOS 10.6cupsUIConstraints

*cupsUIConstraints resolver: "*Keyword1 *Keyword2 ..."
*cupsUIConstraints resolver: "*Keyword1 OptionKeyword1 *Keyword2 ..."
@@ -312,7 +318,8 @@ f(x) = density * x gamma *cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi" -

CUPS 1.4/macOS 10.6cupsUIResolver

+ +

CUPS 1.4/macOS 10.6cupsUIResolver

*cupsUIResolver resolver: "*Keyword1 OptionKeyword1 *Keyword2 OptionKeyword2 ..."

@@ -529,7 +536,8 @@ option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234"

The resulting dictionary sets the page device attributes that are sent to your raster driver in the page header.

-

Custom Page Size Code

+ +

Custom Page Size Code

There are many possible implementations of the CustomPageSize code. For CUPS raster drivers, the following code is recommended:

@@ -542,7 +550,8 @@ option value is "1234" then CUPS will output the string "@PJL SET PASSCODE=1234" *CustomPageSize True: "pop pop pop <</PageSize[5 -2 roll]/ImagingBBox null>>setpagedevice" -

Supported PostScript Operators

+ +

Supported PostScript Operators

CUPS supports the following PostScript operators in addition to the usual PostScript number, string (literal and hex-encoded), boolean, null, and name values:

@@ -601,7 +610,8 @@ PRE B { -

Supported Page Device Attributes

+ +

Supported Page Device Attributes

Table 2 shows the supported page device attributes along with PostScript code examples.

@@ -872,7 +882,8 @@ PRE B {

The CUPS media keywords allow drivers to specify alternate custom page size limits based on up to two options.

-

CUPS 1.4/macOS 10.6cupsMediaQualifier2

+ +

CUPS 1.4/macOS 10.6cupsMediaQualifier2

*cupsMediaQualifier2: MainKeyword

@@ -891,7 +902,8 @@ custom page size limits.

*cupsMinSize ..Photo: "300 300" -

CUPS 1.4/macOS 10.6cupsMediaQualifier3

+ +

CUPS 1.4/macOS 10.6cupsMediaQualifier3

*cupsMediaQualifier3: MainKeyword

@@ -910,7 +922,8 @@ custom page size limits.

*cupsMinSize ..Photo: "300 300" -

CUPS 1.4/macOS 10.6cupsMinSize

+ +

CUPS 1.4/macOS 10.6cupsMinSize

*cupsMinSize .Qualifier2.Qualifier3: "width length"
*cupsMinSize .Qualifier2.: "width length"
@@ -933,7 +946,8 @@ are used to identify options to use for matching.

*cupsMinSize ..Photo: "300 300" -

CUPS 1.4/macOS 10.6cupsMaxSize

+ +

CUPS 1.4/macOS 10.6cupsMaxSize

*cupsMaxSize .Qualifier2.Qualifier3: "width length"
*cupsMaxSize .Qualifier2.: "width length"
@@ -957,7 +971,7 @@ are used to identify options to use for matching.

-

CUPS 1.4/macOS 10.6cupsPageSizeCategory

+

CUPS 1.4/macOS 10.6cupsPageSizeCategory

*cupsPageSizeCategory name/text: "name name2 ... nameN"

@@ -974,7 +988,7 @@ are used to identify options to use for matching.

General Attributes

-

CUPS 1.3/macOS 10.5cupsBackSide

+

CUPS 1.3/macOS 10.5cupsBackSide

*cupsBackSide: keyword

@@ -1070,7 +1084,8 @@ will be ignored.

Also see the related APDuplexRequiresFlippedMargin keyword.

-

CUPS 1.4/macOS 10.6cupsCommands

+ +

CUPS 1.4/macOS 10.6cupsCommands

*cupsCommands: "name name2 ... nameN"

@@ -1086,7 +1101,7 @@ by whitespace.

-

CUPS 1.3/macOS 10.5cupsEvenDuplex

+

CUPS 1.3/macOS 10.5cupsEvenDuplex

*cupsEvenDuplex: boolean

@@ -1101,7 +1116,8 @@ printing is selected. The default value is false.

*cupsEvenDuplex: true -

cupsFax

+ +

cupsFax

*cupsFax: boolean

@@ -1113,7 +1129,8 @@ printing is selected. The default value is false.

*cupsFax: true -

cupsFilter

+ +

cupsFilter

*cupsFilter: "source/type cost program"

@@ -1135,7 +1152,8 @@ the special filter program "-" may be specified.

*cupsFilter: "application/vnd.cups-postscript 0 -" -

CUPS 1.5cupsFilter2

+ +

CUPS 1.5cupsFilter2

*cupsFilter2: "source/type destination/type cost program"

@@ -1160,7 +1178,27 @@ the special filter program "-" may be specified.

*cupsFilter2: "application/vnd.cups-postscript application/postscript 0 -" -

DeprecatedcupsFlipDuplex

+ +

CUPS 2.3cupsFinishingTemplate

+ +

*cupsFinishingTemplate name/text: ""

+ +

This option keyword specifies a finishing template (preset) that applies zero or more finishing processes to a job. Unlike cupsIPPFinishings, only one template can be selected by the user. PPD files also generally apply a constraint between this option and other finishing options like Booklet, FoldType, PunchMedia, and StapleWhen.

+ +

Examples:

+ +
+*cupsFinishingTemplate none/None: ""
+*cupsFinishingTemplate fold/Letter Fold: ""
+*cupsFinishingTemplate punch/2/3-Hole Punch: ""
+*cupsFinishingTemplate staple/Corner Staple: ""
+*cupsFinishingTemplate staple-dual/Double Staple: ""
+*cupsFinishingTemplate staple-and-fold/Corner Staple and Letter Fold: ""
+*cupsFinishingTemplate staple-and-punch/Corner Staple and 2/3-Hole Punch: ""
+
+ + +

DeprecatedcupsFlipDuplex

*cupsFlipDuplex: boolean

@@ -1195,7 +1233,8 @@ Ghostscript can use:

*cupsFlipDuplex: true -

CUPS 1.3/macOS 10.5cupsIPPFinishings

+ +

CUPS 1.3/macOS 10.5cupsIPPFinishings

*cupsIPPFinishings number/text: "*Option Choice ..."

@@ -1211,7 +1250,8 @@ values to PPD options and choices.

*cupsIPPFinishings 21/staple-bottom-left: "*StapleLocation SingleLandscape" -

CUPS 1.3/macOS 10.5cupsIPPReason

+ +

CUPS 1.3/macOS 10.5cupsIPPReason

*cupsIPPReason reason/Reason Text: "optional URIs"

@@ -1251,7 +1291,8 @@ http://www.vendor.com/help" *End -

CUPS 1.5cupsIPPSupplies

+ +

CUPS 1.5cupsIPPSupplies

*cupsIPPSupplies: boolean

@@ -1265,7 +1306,7 @@ http://www.vendor.com/help" -

CUPS 1.7/macOS 10.9cupsJobAccountId

+

CUPS 1.7/macOS 10.9cupsJobAccountId

*cupsJobAccountId: boolean

@@ -1279,7 +1320,7 @@ http://www.vendor.com/help" -

CUPS 1.7/macOS 10.9cupsJobAccountingUserId

+

CUPS 1.7/macOS 10.9cupsJobAccountingUserId

*cupsJobAccountingUserId: boolean

@@ -1293,11 +1334,24 @@ http://www.vendor.com/help" -

CUPS 1.7/macOS 10.9cupsJobPassword

+

CUPS 1.7/macOS 10.9cupsJobPassword

*cupsJobPassword: "format"

-

This keyword defines the format of the job-password IPP attribute, if supported by the printer. Currently the only supported format is "1111" indicating a 4-digit PIN code.

+

This keyword defines the format of the "job-password" IPP attribute, if supported by the printer. The following format characters are supported:

+ +
    +
  • 1: US ASCII digits.
  • +
  • A: US ASCII letters.
  • +
  • C: US ASCII letters, numbers, and punctuation.
  • +
  • .: Any US ASCII printable character (0x20 to 0x7e).
  • +
  • N: Any Unicode digit character.
  • +
  • U: Any Unicode letter character.
  • +
  • *: Any Unicode (utf-8) character.
  • +
+ +

The format characters are repeated to indicate the length of the +password string. For example, "1111" indicated a 4-digit US ASCII PIN code.

Example:

@@ -1307,7 +1361,7 @@ http://www.vendor.com/help" -

CUPS 1.2/macOS 10.5cupsLanguages

+

CUPS 1.2/macOS 10.5cupsLanguages

*cupsLanguages: "locale list"

@@ -1323,7 +1377,7 @@ list of locale names ("en", "en_US", "fr_CA", etc.)

-

CUPS 1.7/macOS 10.9cupsMandatory

+

CUPS 1.7/macOS 10.9cupsMandatory

*cupsMandatory: "attribute1 attribute2 ... attributeN"

@@ -1337,7 +1391,7 @@ list of locale names ("en", "en_US", "fr_CA", etc.)

-

cupsManualCopies

+

cupsManualCopies

*cupsManualCopies: boolean

@@ -1352,7 +1406,8 @@ hardware. The default value is false.

*cupsManualCopies: true -

CUPS 1.4/macOS 10.6cupsMarkerName

+ +

CUPS 1.4/macOS 10.6cupsMarkerName

*cupsMarkerName/Name Text: ""

@@ -1366,7 +1421,8 @@ generated by the driver to human readable text.

*cupsMarkerName cyanToner/Cyan Toner: "" -

CUPS 1.4/macOS 10.6cupsMarkerNotice

+ +

CUPS 1.4/macOS 10.6cupsMarkerNotice

*cupsMarkerNotice: "disclaimer text"

@@ -1380,7 +1436,8 @@ are approximate".

*cupsMarkerNotice: "Supply levels are approximate." -

CUPS 1.6/macOS 10.8cupsMaxCopies

+ +

CUPS 1.6/macOS 10.8cupsMaxCopies

*cupsMaxCopies: integer

@@ -1393,7 +1450,8 @@ are approximate".

*cupsMaxCopies: 99 -

cupsModelNumber

+ +

cupsModelNumber

*cupsModelNumber: number

@@ -1409,7 +1467,7 @@ the output for a specific model of printer.

-

CUPS 1.3/macOS 10.5cupsPJLCharset

+

CUPS 1.3/macOS 10.5cupsPJLCharset

*cupsPJLCharset: "ISO character set name"

@@ -1424,7 +1482,8 @@ assumed.

*cupsPJLCharset: "UTF-8" -

CUPS 1.4/macOS 10.6cupsPJLDisplay

+ +

CUPS 1.4/macOS 10.6cupsPJLDisplay

*cupsPJLDisplay: "what"

@@ -1443,7 +1502,8 @@ to use "@PJL RDYMSG DISPLAY". The default is "job".

*cupsPJLDisplay: "none" -

CUPS 1.2/macOS 10.5cupsPortMonitor

+ +

CUPS 1.2/macOS 10.5cupsPortMonitor

*cupsPortMonitor urischeme/Descriptive Text: "port monitor"

@@ -1475,7 +1535,8 @@ to disable the port monitor for the given URI scheme.

*cupsPortMonitor usb/USB Status Monitor: "epson-usb" -

CUPS 1.3/macOS 10.5cupsPreFilter

+ +

CUPS 1.3/macOS 10.5cupsPreFilter

*cupsPreFilter: "source/type cost program"

@@ -1494,7 +1555,7 @@ before the filter that accepts the given MIME type.

-

CUPS 1.5cupsPrintQuality

+

CUPS 1.5cupsPrintQuality

*cupsPrintQuality keyword/text: "code"

@@ -1518,7 +1579,8 @@ before the filter that accepts the given MIME type.

*CloseUI: *cupsPrintQuality -

CUPS 1.5cupsSingleFile

+ +

CUPS 1.5cupsSingleFile

*cupsSingleFile: Boolean

@@ -1534,7 +1596,8 @@ before the filter that accepts the given MIME type.

*cupsSingleFile: True -

CUPS 1.4/macOS 10.6cupsSNMPSupplies

+ +

CUPS 1.4/macOS 10.6cupsSNMPSupplies

*cupsSNMPSupplies: boolean

@@ -1549,7 +1612,8 @@ the standard SNMP Printer MIB OIDs for supply levels. The default value is *cupsSNMPSupplies: False -

cupsVersion

+ +

cupsVersion

*cupsVersion: major.minor

@@ -1565,7 +1629,7 @@ PPD file extensions was used. Currently it must be the string -

CUPS 1.6/macOS 10.8JCLToPDFInterpreter

+

CUPS 1.6/macOS 10.8JCLToPDFInterpreter

*JCLToPDFInterpreter: "JCL"

@@ -1581,7 +1645,7 @@ PPD file extensions was used. Currently it must be the string

macOS Attributes

-

macOS 10.3APDialogExtension

+

DeprecatedAPDialogExtension

*APDialogExtension: "/Library/Printers/vendor/filename.plugin"

@@ -1593,9 +1657,13 @@ plug-ins.

Note: -

Starting with macOS 10.5, each plug-in must be compiled "4-way fat" -(32-bit and 64-bit for both PowerPC and Intel) with garbage collection enabled -in order to be usable with all applications.

+

Since 2010, AirPrint has enabled the printing of full quality photos and +documents from the Mac without requiring driver software. Starting with macOS +10.12, system level security features prevent print dialog plug-ins from being +loaded into applications that have enabled the library validation security +feature. As of macOS 10.14 the APDialogExtension attribute used to +create macOS print drivers is deprecated. All new printer models should support +AirPrint moving forward.

@@ -1607,7 +1675,8 @@ in order to be usable with all applications.

*APDialogExtension: "/Library/Printers/vendor/options.plugin" -

macOS 10.4APDuplexRequiresFlippedMargin

+ +

macOS 10.4APDuplexRequiresFlippedMargin

*APDuplexRequiresFlippedMargin: boolean

@@ -1689,7 +1758,8 @@ and the Tumble page attribute.

Also see the related cupsBackSide keyword.

-

APHelpBook

+ +

APHelpBook

*APHelpBook: "bundle URL"

@@ -1704,7 +1774,8 @@ looking up IPP reason codes for this printer driver. The *APHelpBook: "file:///Library/Printers/vendor/Help.bundle" -

macOS 10.6APICADriver

+ +

macOS 10.6APICADriver

*APICADriver: boolean

@@ -1718,7 +1789,8 @@ Architecture (ICA) driver for scanning. The default is False.

*APScanAppBundleID: "com.apple.ImageCaptureApp" -

macOS 10.3APPrinterIconPath

+ +

macOS 10.3APPrinterIconPath

*APPrinterIconPath: "/Library/Printers/vendor/filename.icns"

@@ -1732,7 +1804,8 @@ displaying the printer. The file must be in the Apple icon format.

*APPrinterIconPath: "/Library/Printers/vendor/Icons/filename.icns" -

macOS 10.4APPrinterLowInkTool

+ +

macOS 10.4APPrinterLowInkTool

*APPrinterLowInkTool: "/Library/Printers/vendor/program"

@@ -1749,7 +1822,8 @@ Technical Note TN2144 for more information.

*APPrinterLowInkTool: "/Library/Printers/vendor/Tools/lowinktool" -

macOS 10.5APPrinterPreset

+ +

macOS 10.5APPrinterPreset

*APPrinterPreset name/text: "*Option Choice ..."

@@ -1819,7 +1893,8 @@ choice (*MainKeyword OptionKeyword) or a preset identifier and value *fr.APPrinterPreset Photo_on_Photo_Paper/Photo sur papier photographique: "" -

macOS 10.3APPrinterUtilityPath

+ +

macOS 10.3APPrinterUtilityPath

*APPrinterPrinterUtilityPath: "/Library/Printers/vendor/filename.app"

@@ -1834,7 +1909,8 @@ information.

*APPrinterPrinterUtilityPath: "/Library/Printers/vendor/Tools/utility.app" -

macOS 10.6APScannerOnly

+ +

macOS 10.6APScannerOnly

*APScannerOnly: boolean

@@ -1848,7 +1924,8 @@ capabilities. The default is False.

*APScannerOnly: True -

macOS 10.3APScanAppBundleID

+ +

macOS 10.3APScanAppBundleID

*APScanAppBundleID: "bundle ID"

@@ -1865,7 +1942,16 @@ the device.

Change History

-

Changes in CUPS 1.7

+

Changes in CUPS 2.3

+ + + + +

Changes in CUPS 1.7

    @@ -1877,7 +1963,7 @@ the device.

-

Changes in CUPS 1.6

+

Changes in CUPS 1.6

    @@ -1892,7 +1978,7 @@ the device.

-

Changes in CUPS 1.5

+

Changes in CUPS 1.5

    @@ -1901,7 +1987,7 @@ the device.

-

Changes in CUPS 1.4.5

+

Changes in CUPS 1.4.5

    @@ -1912,7 +1998,7 @@ the device.

-

Changes in CUPS 1.4

+

Changes in CUPS 1.4

    @@ -1947,7 +2033,7 @@ the device.

-

Changes in CUPS 1.3.1

+

Changes in CUPS 1.3.1

    @@ -1962,7 +2048,7 @@ the device.

-

Changes in CUPS 1.3

+

Changes in CUPS 1.3

    @@ -1981,7 +2067,8 @@ the device.

-

Changes in CUPS 1.2.8

+ +

Changes in CUPS 1.2.8

    @@ -1990,7 +2077,8 @@ the device.

-

Changes in CUPS 1.2

+ +

Changes in CUPS 1.2

    @@ -2015,7 +2103,8 @@ the device.

-

Changes in CUPS 1.1

+ +

Changes in CUPS 1.1

    diff --git a/mopria.c b/mopria.c new file mode 100644 index 0000000..0ca08db --- /dev/null +++ b/mopria.c @@ -0,0 +1,12 @@ +#include +#include + +// 08/28/2018 Mopria-notice: localeconv not present in Android. +inline struct lconv *localeconv(void) { + return NULL; +} + +// 08/28/2018 Mopria-notice: pthread_cancel not present in Android +void pthread_cancel(int thread) { + // Ignore thread cancel attempts +}