From: msweet Date: Fri, 16 May 2014 21:54:22 +0000 (+0000) Subject: Save work on destination API unit test program. X-Git-Tag: v2.2b1~631 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=104fd4ae9f4727e4b580bafef6b439af4706e97d;p=thirdparty%2Fcups.git Save work on destination API unit test program. Add cupsGetDestWithURI API. Add cupsLocalizeDestMedia API. git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/trunk@11884 a1ca3aef-8c08-0410-bb20-df032aa958be --- diff --git a/cups/Dependencies b/cups/Dependencies index ad96cd483b..54bd08c7c6 100644 --- a/cups/Dependencies +++ b/cups/Dependencies @@ -114,7 +114,7 @@ http.o: http.c cups-private.h string-private.h ../config.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 ppd-private.h ../cups/ppd.h \ - thread-private.h tls-darwin.c + 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 \ @@ -237,6 +237,11 @@ thread.o: thread.c cups-private.h string-private.h ../config.h \ md5-private.h language-private.h ../cups/transcode.h pwg-private.h \ ../cups/cups.h file.h pwg.h ppd-private.h ../cups/ppd.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 ppd-private.h ../cups/ppd.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 \ @@ -263,6 +268,8 @@ testconflicts.o: testconflicts.c cups.h file.h versioning.h ipp.h http.h \ array.h language.h pwg.h ppd.h string-private.h ../config.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 +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 testhttp.o: testhttp.c cups-private.h string-private.h ../config.h \ diff --git a/cups/Makefile b/cups/Makefile index 8af9d9d3fb..94bec6836a 100644 --- a/cups/Makefile +++ b/cups/Makefile @@ -85,6 +85,7 @@ TESTOBJS = \ testarray.o \ testconflicts.o \ testcups.o \ + testdest.o \ testfile.o \ testhttp.o \ testi18n.o \ @@ -151,6 +152,7 @@ UNITTARGETS = \ testcache \ testconflicts \ testcups \ + testdest \ testfile \ testhttp \ testi18n \ @@ -404,6 +406,16 @@ testcups: testcups.o $(LIBCUPSSTATIC) $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) +# +# testdest (dependency on static CUPS library is intentional) +# + +testdest: testdest.o $(LIBCUPSSTATIC) + echo Linking $@... + $(CC) $(LDFLAGS) -o $@ testdest.o $(LIBCUPSSTATIC) \ + $(LIBGSSAPI) $(SSLLIBS) $(DNSSDLIBS) $(COMMONLIBS) $(LIBZ) + + # # testfile (dependency on static CUPS library is intentional) # diff --git a/cups/cups.h b/cups/cups.h index 25dd43365a..f28c28d938 100644 --- a/cups/cups.h +++ b/cups/cups.h @@ -616,6 +616,8 @@ extern void cupsSetUserAgent(const char *user_agent) _CUPS_API_1_7; extern const char *cupsUserAgent(void) _CUPS_API_1_7; /* New in CUPS 2.0 */ +extern cups_dest_t *cupsGetDestWithURI(const char *name, const char *uri) _CUPS_API_2_0; +extern const char *cupsLocalizeDestMedia(http_t *http, cups_dest_t *dest, cups_dinfo_t *info, unsigned flags, cups_size_t *size) _CUPS_API_2_0; extern int cupsMakeServerCredentials(const char *path, const char *common_name, int num_alt_names, const char **alt_names, time_t expiration_date) _CUPS_API_2_0; extern int cupsSetServerCredentials(const char *path, const char *common_name, int auto_create) _CUPS_API_2_0; diff --git a/cups/dest-localization.c b/cups/dest-localization.c index 1bd8324af3..cdec441b5f 100644 --- a/cups/dest-localization.c +++ b/cups/dest-localization.c @@ -31,6 +31,161 @@ static int cups_read_strings(cups_file_t *fp, char *buffer, size_t bufsize, static char *cups_scan_strings(char *buffer); +/* + * 'cupsLocalizeDestMedia()' - Get the localized string for a destination media + * size. + * + * The returned string is stored in the destination information and will become + * invalid if the destination information is deleted. + * + * @since CUPS 2.0@ + */ + +const char * /* O - Localized string */ +cupsLocalizeDestMedia( + http_t *http, /* I - Connection to destination */ + cups_dest_t *dest, /* I - Destination */ + cups_dinfo_t *dinfo, /* I - Destination information */ + unsigned flags, /* I - Media flags */ + cups_size_t *size) /* I - Media size */ +{ + cups_lang_t *lang; /* Standard localizations */ + _cups_message_t key, /* Search key */ + *match; /* Matching entry */ + pwg_media_t *pwg; /* PWG media information */ + cups_array_t *db; /* Media database */ + _cups_media_db_t *mdb; /* Media database entry */ + char name[1024], /* Size name */ + temp[256]; /* Temporary string */ + const char *lsize, /* Localized media size */ + *lsource, /* Localized media source */ + *ltype; /* Localized media type */ + + + /* + * Range check input... + */ + + if (!http || !dest || !dinfo || !size) + { + _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); + return (NULL); + } + + /* + * See if the localization is cached... + */ + + if (!dinfo->localizations) + cups_create_localizations(http, dinfo); + + key.id = size->media; + if ((match = (_cups_message_t *)cupsArrayFind(dinfo->localizations, &key)) != NULL) + return (match->str); + + /* + * If not, get the localized size, source, and type strings... + */ + + lang = cupsLangDefault(); + pwg = pwgMediaForSize(size->width, size->length); + + if (pwg->ppd) + lsize = _cupsLangString(lang, pwg->ppd); + else + lsize = NULL; + + if (!lsize) + { + if ((size->width % 635) == 0 && (size->length % 635) == 0) + { + /* + * Use inches since the size is a multiple of 1/4 inch. + */ + + snprintf(temp, sizeof(temp), _cupsLangString(lang, _("%g x %g")), size->width / 2540.0, size->length / 2540.0); + } + else + { + /* + * Use millimeters since the size is not a multiple of 1/4 inch. + */ + + snprintf(temp, sizeof(temp), _cupsLangString(lang, _("%d x %d mm")), (size->width + 50) / 100, (size->length + 50) / 100); + } + + lsize = temp; + } + + if (flags & CUPS_MEDIA_FLAGS_READY) + db = dinfo->ready_db; + else + db = dinfo->media_db; + + DEBUG_printf(("1cupsLocalizeDestMedia: size->media=\"%s\"", size->media)); + + for (mdb = (_cups_media_db_t *)cupsArrayFirst(db); mdb; mdb = (_cups_media_db_t *)cupsArrayNext(db)) + { + if (mdb->key && !strcmp(mdb->key, size->media)) + break; + else if (mdb->size_name && !strcmp(mdb->size_name, size->media)) + break; + else if (mdb->width == size->width && mdb->length == size->length && mdb->bottom == size->bottom && mdb->left == size->left && mdb->right == size->right && mdb->top == size->top) + break; + } + + if (mdb) + { + lsource = cupsLocalizeDestValue(http, dest, dinfo, "media-source", mdb->source); + ltype = cupsLocalizeDestValue(http, dest, dinfo, "media-type", mdb->type); + } + else + { + lsource = NULL; + ltype = NULL; + } + + if (!lsource && !ltype) + { + if (size->bottom || size->left || size->right || size->top) + snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (Borderless)")), lsize); + else + strlcpy(name, lsize, sizeof(name)); + } + else if (!lsource) + { + if (size->bottom || size->left || size->right || size->top) + snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (Borderless, %s)")), lsize, ltype); + else + snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (%s)")), lsize, ltype); + } + else if (!ltype) + { + if (size->bottom || size->left || size->right || size->top) + snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (Borderless, %s)")), lsize, lsource); + else + snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (%s)")), lsize, lsource); + } + else + { + if (size->bottom || size->left || size->right || size->top) + snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (Borderless, %s, %s)")), lsize, ltype, lsource); + else + snprintf(name, sizeof(name), _cupsLangString(lang, _("%s (%s, %s)")), lsize, ltype, lsource); + } + + if ((match = (_cups_message_t *)calloc(1, sizeof(_cups_message_t))) == NULL) + return (NULL); + + match->id = strdup(size->media); + match->str = strdup(name); + + cupsArrayAdd(dinfo->localizations, match); + + return (match->str); +} + + /* * 'cupsLocalizeDestOption()' - Get the localized string for a destination * option. diff --git a/cups/dest.c b/cups/dest.c index 675bf5fb53..dc73573093 100644 --- a/cups/dest.c +++ b/cups/dest.c @@ -1302,6 +1302,100 @@ _cupsGetDestResource( } +/* + * 'cupsGetDestWithURI()' - Get a destination associated with a URI. + * + * "name" is the desired name for the printer. If @code NULL@, a name will be + * created using the URI. + * + * "uri" is the "ipp" or "ipps" URI for the printer. + * + * @since CUPS 2.0@ + */ + +cups_dest_t * /* O - Destination or @code NULL@ */ +cupsGetDestWithURI(const char *name, /* I - Desired printer name or @code NULL@ */ + const char *uri) /* I - URI for the printer */ +{ + cups_dest_t *dest; /* New destination */ + char temp[1024], /* Temporary string */ + scheme[256], /* Scheme from URI */ + userpass[256], /* Username:password from URI */ + hostname[256], /* Hostname from URI */ + resource[1024], /* Resource path from URI */ + *ptr; /* Pointer into string */ + int port; /* Port number from URI */ + + + /* + * Range check input... + */ + + if (!uri) + { + _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(EINVAL), 0); + return (NULL); + } + + if (httpSeparateURI(HTTP_URI_CODING_ALL, uri, scheme, sizeof(scheme), userpass, sizeof(userpass), hostname, sizeof(hostname), &port, resource, sizeof(resource)) < HTTP_URI_STATUS_OK || + (strncmp(uri, "ipp://", 6) && strncmp(uri, "ipps://", 7))) + { + _cupsSetError(IPP_STATUS_ERROR_INTERNAL, _("Bad printer URI."), 1); + + return (NULL); + } + + if (!name) + { + /* + * Create the name from the URI... + */ + + if (strstr(hostname, "._tcp")) + { + /* + * Use the service instance name... + */ + + if ((ptr = strchr(hostname, '.')) != NULL) + *ptr = '\0'; + + name = hostname; + } + else if (!strncmp(resource, "/classes/", 9)) + { + snprintf(temp, sizeof(temp), "%s @ %s", resource + 9, hostname); + name = temp; + } + else if (!strncmp(resource, "/printers/", 10)) + { + snprintf(temp, sizeof(temp), "%s @ %s", resource + 10, hostname); + name = temp; + } + else + { + name = hostname; + } + } + + /* + * Create the destination... + */ + + if ((dest = calloc(1, sizeof(cups_dest_t))) == NULL) + { + _cupsSetError(IPP_STATUS_ERROR_INTERNAL, strerror(errno), 0); + return (NULL); + } + + dest->name = _cupsStrAlloc(name); + dest->num_options = cupsAddOption("printer-uri-supported", uri, dest->num_options, &(dest->options)); + dest->num_options = cupsAddOption("printer-info", name, dest->num_options, &(dest->options)); + + return (dest); +} + + /* * '_cupsGetDests()' - Get destinations from a server. * diff --git a/cups/testdest.c b/cups/testdest.c new file mode 100644 index 0000000000..aefe8818e6 --- /dev/null +++ b/cups/testdest.c @@ -0,0 +1,460 @@ +/* + * "$Id$" + * + * CUPS destination API test program for CUPS. + * + * Copyright 2014 by Apple Inc. + * + * 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/". + * + * This file is subject to the Apple OS-Developed Software exception. + */ + +/* + * Include necessary headers... + */ + +#include +#include "cups.h" + + +/* + * Local functions... + */ + +static void localize(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option, const char *value); +static void print_file(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *filename, int num_options, cups_option_t *options); +static void show_conflicts(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, int num_options, cups_option_t *options); +static void show_default(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option); +static void show_media(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, unsigned flags, const char *name); +static void show_supported(http_t *http, cups_dest_t *dest, cups_dinfo_t *dinfo, const char *option, const char *value); +static void usage(const char *arg) __attribute__((noreturn)); + + +/* + * 'main()' - Main entry. + */ + +int /* O - Exit status */ +main(int argc, /* I - Number of command-line arguments */ + char *argv[]) /* I - Command-line arguments */ +{ + http_t *http; /* Connection to destination */ + cups_dest_t *dest = NULL; /* Destination */ + cups_dinfo_t *dinfo; /* Destination info */ + + + if (argc < 2) + usage(NULL); + + if (!strcmp(argv[1], "--enum")) + { + return (0); + } + else if (!strncmp(argv[1], "ipp://", 6) || !strncmp(argv[1], "ipps://", 7)) + dest = cupsGetDestWithURI(NULL, argv[1]); + else + dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, argv[1], NULL); + + if (!dest) + { + printf("testdest: Unable to get destination \"%s\": %s\n", argv[1], cupsLastErrorString()); + return (1); + } + + if ((http = cupsConnectDest(dest, CUPS_DEST_FLAGS_NONE, 30000, NULL, NULL, 0, NULL, NULL)) == NULL) + { + printf("testdest: Unable to connect to destination \"%s\": %s\n", argv[1], cupsLastErrorString()); + return (1); + } + + if ((dinfo = cupsCopyDestInfo(http, dest)) == NULL) + { + printf("testdest: Unable to get information for destination \"%s\": %s\n", argv[1], cupsLastErrorString()); + return (1); + } + + if (argc == 2 || (!strcmp(argv[2], "supported") && argc < 6)) + { + if (argc > 3) + show_supported(http, dest, dinfo, argv[3], argv[4]); + else if (argc > 2) + show_supported(http, dest, dinfo, argv[3], NULL); + else + show_supported(http, dest, dinfo, NULL, NULL); + } + else if (!strcmp(argv[2], "conflicts") && argc > 3) + { + int i, /* Looping var */ + num_options = 0;/* Number of options */ + cups_option_t *options = NULL;/* Options */ + + for (i = 3; i < argc; i ++) + num_options = cupsParseOptions(argv[i], num_options, &options); + + show_conflicts(http, dest, dinfo, num_options, options); + } + else if (!strcmp(argv[2], "default") && argc == 4) + { + show_default(http, dest, dinfo, argv[3]); + } + else if (!strcmp(argv[2], "localize") && argc > 3 && argc < 6) + { + localize(http, dest, dinfo, argv[3], argv[4]); + } + else if (!strcmp(argv[2], "media")) + { + int i; /* Looping var */ + const char *name = NULL; /* Media name, if any */ + unsigned flags = CUPS_MEDIA_FLAGS_DEFAULT; + /* Media selection flags */ + + for (i = 3; i < argc; i ++) + { + if (!strcmp(argv[i], "borderless")) + flags = CUPS_MEDIA_FLAGS_BORDERLESS; + else if (!strcmp(argv[i], "duplex")) + flags = CUPS_MEDIA_FLAGS_DUPLEX; + else if (!strcmp(argv[i], "exact")) + flags = CUPS_MEDIA_FLAGS_EXACT; + else if (!strcmp(argv[i], "ready")) + flags = CUPS_MEDIA_FLAGS_READY; + else if (name) + usage(argv[i]); + else + name = argv[i]; + } + + show_media(http, dest, dinfo, flags, name); + } + else if (!strcmp(argv[2], "print") && argc > 3) + { + int i, /* Looping var */ + num_options = 0;/* Number of options */ + cups_option_t *options = NULL;/* Options */ + + for (i = 4; i < argc; i ++) + num_options = cupsParseOptions(argv[i], num_options, &options); + + print_file(http, dest, dinfo, argv[3], num_options, options); + } + else + usage(argv[2]); + + return (0); +} + + +/* + * 'localize()' - Localize an option and value. + */ + +static void +localize(http_t *http, /* I - Connection to destination */ + cups_dest_t *dest, /* I - Destination */ + cups_dinfo_t *dinfo, /* I - Destination information */ + const char *option, /* I - Option */ + const char *value) /* I - Value, if any */ +{ + (void)http; + (void)dest; + (void)dinfo; + (void)option; + (void)value; +} + + +/* + * 'print_file()' - Print a file. + */ + +static void +print_file(http_t *http, /* I - Connection to destination */ + cups_dest_t *dest, /* I - Destination */ + cups_dinfo_t *dinfo, /* I - Destination information */ + const char *filename, /* I - File to print */ + int num_options, /* I - Number of options */ + cups_option_t *options) /* I - Options */ +{ + (void)http; + (void)dest; + (void)dinfo; + (void)filename; + (void)num_options; + (void)options; +} + + +/* + * 'show_conflicts()' - Show conflicts for selected options. + */ + +static void +show_conflicts( + http_t *http, /* I - Connection to destination */ + cups_dest_t *dest, /* I - Destination */ + cups_dinfo_t *dinfo, /* I - Destination information */ + int num_options, /* I - Number of options */ + cups_option_t *options) /* I - Options */ +{ + (void)http; + (void)dest; + (void)dinfo; + (void)num_options; + (void)options; +} + + +/* + * 'show_default()' - Show default value for option. + */ + +static void +show_default(http_t *http, /* I - Connection to destination */ + cups_dest_t *dest, /* I - Destination */ + cups_dinfo_t *dinfo, /* I - Destination information */ + const char *option) /* I - Option */ +{ + (void)http; + (void)dest; + (void)dinfo; + (void)option; +} + + +/* + * 'show_media()' - Show available media. + */ + +static void +show_media(http_t *http, /* I - Connection to destination */ + cups_dest_t *dest, /* I - Destination */ + cups_dinfo_t *dinfo, /* I - Destination information */ + unsigned flags, /* I - Media flags */ + const char *name) /* I - Size name */ +{ + int i, /* Looping var */ + count; /* Number of sizes */ + cups_size_t size; /* Media size info */ + + + if (name) + { + double dw, dl; /* Width and length from name */ + char units[32]; /* Units */ + int width, /* Width in 100ths of millimeters */ + length; /* Length in 100ths of millimeters */ + + + if (sscanf(name, "%lfx%lf%31s", &dw, &dl, units) == 3) + { + if (!strcmp(units, "in")) + { + width = (int)(dw * 2540.0); + length = (int)(dl * 2540.0); + } + else if (!strcmp(units, "mm")) + { + width = (int)(dw * 100.0); + length = (int)(dl * 100.0); + } + else + { + puts(" bad units in size"); + return; + } + + if (cupsGetDestMediaBySize(http, dest, dinfo, width, length, flags, &size)) + { + printf(" %s (%s) %dx%d B%d L%d R%d T%d\n", size.media, cupsLocalizeDestMedia(http, dest, dinfo, flags, &size), size.width, size.length, size.bottom, size.left, size.right, size.top); + } + else + { + puts(" not supported"); + } + } + else if (cupsGetDestMediaByName(http, dest, dinfo, name, flags, &size)) + { + printf(" %s (%s) %dx%d B%d L%d R%d T%d\n", size.media, cupsLocalizeDestMedia(http, dest, dinfo, flags, &size), size.width, size.length, size.bottom, size.left, size.right, size.top); + } + else + { + puts(" not supported"); + } + } + else + { + count = cupsGetDestMediaCount(http, dest, dinfo, flags); + printf("%d size%s:\n", count, count == 1 ? "" : "s"); + + for (i = 0; i < count; i ++) + { + if (cupsGetDestMediaByIndex(http, dest, dinfo, i, flags, &size)) + printf(" %s (%s) %dx%d B%d L%d R%d T%d\n", size.media, cupsLocalizeDestMedia(http, dest, dinfo, flags, &size), size.width, size.length, size.bottom, size.left, size.right, size.top); + else + puts(" error"); + } + } +} + + +/* + * 'show_supported()' - Show supported options, values, etc. + */ + +static void +show_supported(http_t *http, /* I - Connection to destination */ + cups_dest_t *dest, /* I - Destination */ + cups_dinfo_t *dinfo, /* I - Destination information */ + const char *option, /* I - Option, if any */ + const char *value) /* I - Value, if any */ +{ + ipp_attribute_t *attr; /* Attribute */ + int i, /* Looping var */ + count; /* Number of values */ + + + if (!option) + { + attr = cupsFindDestSupported(http, dest, dinfo, "job-creation-attributes"); + if (attr) + { + count = ippGetCount(attr); + for (i = 0; i < count; i ++) + show_supported(http, dest, dinfo, ippGetString(attr, i, NULL), NULL); + } + else + { + static const char * const options[] = + { /* List of standard options */ + CUPS_COPIES, + CUPS_FINISHINGS, + CUPS_MEDIA, + CUPS_NUMBER_UP, + CUPS_ORIENTATION, + CUPS_PRINT_COLOR_MODE, + CUPS_PRINT_QUALITY, + CUPS_SIDES + }; + + puts("No job-creation-attributes-supported attribute, probing instead."); + + for (i = 0; i < (int)(sizeof(options) / sizeof(options[0])); i ++) + if (cupsCheckDestSupported(http, dest, dinfo, options[i], NULL)) + show_supported(http, dest, dinfo, options[i], NULL); + } + } + else if (!value) + { + puts(option); + if ((attr = cupsFindDestSupported(http, dest, dinfo, option)) != NULL) + { + count = ippGetCount(attr); + + switch (ippGetValueTag(attr)) + { + case IPP_TAG_INTEGER : + for (i = 0; i < count; i ++) + printf(" %d\n", ippGetInteger(attr, i)); + break; + + case IPP_TAG_ENUM : + for (i = 0; i < count; i ++) + printf(" %s\n", ippEnumString(option, ippGetInteger(attr, i))); + break; + + case IPP_TAG_RANGE : + for (i = 0; i < count; i ++) + { + int upper, lower = ippGetRange(attr, i, &upper); + + printf(" %d-%d\n", lower, upper); + } + break; + + case IPP_TAG_TEXTLANG : + case IPP_TAG_NAMELANG : + case IPP_TAG_TEXT : + case IPP_TAG_NAME : + case IPP_TAG_KEYWORD : + case IPP_TAG_URI : + case IPP_TAG_URISCHEME : + case IPP_TAG_CHARSET : + case IPP_TAG_LANGUAGE : + case IPP_TAG_MIMETYPE : + for (i = 0; i < count; i ++) + printf(" %s\n", ippGetString(attr, i, NULL)); + break; + + case IPP_TAG_STRING : + for (i = 0; i < count; i ++) + { + int j, len; + unsigned char *data = ippGetOctetString(attr, i, &len); + + fputs(" ", stdout); + for (j = 0; j < len; j ++) + { + if (data[j] < ' ' || data[j] >= 0x7f) + printf("<%02X>", data[j]); + else + putchar(data[j]); + } + putchar('\n'); + } + break; + + case IPP_TAG_BOOLEAN : + break; + + default : + printf(" %s\n", ippTagString(ippGetValueTag(attr))); + break; + } + } + + } + else if (cupsCheckDestSupported(http, dest, dinfo, option, value)) + puts("YES"); + else + puts("NO"); + +} + + +/* + * 'usage()' - Show program usage. + */ + +static void +usage(const char *arg) /* I - Argument for usage message */ +{ + if (arg) + printf("testdest: Unknown option \"%s\".\n", arg); + + puts("Usage:"); + puts(" ./testdest name [operation ...]"); + puts(" ./testdest ipp://... [operation ...]"); + puts(" ./testdest ipps://... [operation ...]"); + puts(" ./testdest --enum [grayscale] [color] [duplex] [staple] [small]\n" + " [medium] [large]"); + puts(""); + puts("Operations:"); + puts(" conflicts options"); + puts(" default option"); + puts(" localize option [value]"); + puts(" media [borderless] [duplex] [exact] [ready] [name or size]"); + puts(" print filename [options]"); + puts(" supported [option [value]]"); + + exit(arg != NULL); +} + + +/* + * End of "$Id$". + */ diff --git a/test/ipptool.c b/test/ipptool.c index d171ac9c76..d8df4cb26f 100644 --- a/test/ipptool.c +++ b/test/ipptool.c @@ -4285,7 +4285,7 @@ print_csv( for (i = 0; i < num_displayed; i ++) { if (i) - putchar(','); + fputc(',', outfile); buffer[0] = '\0'; @@ -4303,30 +4303,30 @@ print_csv( if (strchr(buffer, ',') != NULL || strchr(buffer, '\"') != NULL || strchr(buffer, '\\') != NULL) { - putchar('\"'); + putc('\"', outfile); for (bufptr = buffer; *bufptr; bufptr ++) { if (*bufptr == '\\' || *bufptr == '\"') - putchar('\\'); - putchar(*bufptr); + putc('\\', outfile); + putc(*bufptr, outfile); } - putchar('\"'); + putc('\"', outfile); } else - fputs(buffer, stdout); + fputs(buffer, outfile); } - putchar('\n'); + putc('\n', outfile); } else { for (i = 0; i < num_displayed; i ++) { if (i) - putchar(','); + putc(',', outfile); - fputs(displayed[i], stdout); + fputs(displayed[i], outfile); } - putchar('\n'); + putc('\n', outfile); } free(buffer); @@ -4408,7 +4408,7 @@ print_line( for (i = 0; i < num_displayed; i ++) { if (i) - putchar(' '); + putc(' ', outfile); buffer[0] = '\0'; @@ -4423,31 +4423,31 @@ print_line( } } - printf("%*s", (int)-widths[i], buffer); + fprintf(outfile, "%*s", (int)-widths[i], buffer); } - putchar('\n'); + putc('\n', outfile); } else { for (i = 0; i < num_displayed; i ++) { if (i) - putchar(' '); + putc(' ', outfile); - printf("%*s", (int)-widths[i], displayed[i]); + fprintf(outfile, "%*s", (int)-widths[i], displayed[i]); } - putchar('\n'); + putc('\n', outfile); for (i = 0; i < num_displayed; i ++) { if (i) - putchar(' '); + putc(' ', outfile); memset(buffer, '-', widths[i]); buffer[widths[i]] = '\0'; - fputs(buffer, stdout); + fputs(buffer, outfile); } - putchar('\n'); + putc('\n', outfile); } free(buffer); diff --git a/xcode/CUPS.xcodeproj/project.pbxproj b/xcode/CUPS.xcodeproj/project.pbxproj index c198e99830..046288d4ca 100644 --- a/xcode/CUPS.xcodeproj/project.pbxproj +++ b/xcode/CUPS.xcodeproj/project.pbxproj @@ -14,7 +14,9 @@ ); dependencies = ( 726AD704135E8AA1002C930D /* PBXTargetDependency */, + 2767FC5419267469000F61D3 /* PBXTargetDependency */, 273BF6DE1333B6370022CAAB /* PBXTargetDependency */, + 2767FC5619267469000F61D3 /* PBXTargetDependency */, 278C58D6136B641D00836530 /* PBXTargetDependency */, 270CCDB2135E3CDE00007BE2 /* PBXTargetDependency */, ); @@ -193,6 +195,31 @@ 276683FD1337F7B8000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 2766840F1337FA38000D33D0 /* libcups.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 72220EAE1333047D00FCA411 /* libcups.dylib */; }; 276684111337FA7C000D33D0 /* cupsaddsmb.c in Sources */ = {isa = PBXBuildFile; fileRef = 276684101337FA7C000D33D0 /* cupsaddsmb.c */; }; + 2767FC5219266A36000F61D3 /* testdest.c in Sources */ = {isa = PBXBuildFile; fileRef = 2767FC5119266A36000F61D3 /* testdest.c */; }; + 2767FC57192674C4000F61D3 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; + 2767FC58192674E0000F61D3 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; + 2767FC5F1926750C000F61D3 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; + 2767FC601926750C000F61D3 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; + 2767FC611926750C000F61D3 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; + 2767FC621926750C000F61D3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; + 2767FC631926750C000F61D3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; + 2767FC641926750C000F61D3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; + 2767FC6519267538000F61D3 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; + 2767FC6619267538000F61D3 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; + 2767FC6719267538000F61D3 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; + 2767FC6819267538000F61D3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; + 2767FC6919267538000F61D3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; + 2767FC6A19267538000F61D3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; + 2767FC6B192685E6000F61D3 /* libcups_static.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 72A4332F155844CF002E172D /* libcups_static.a */; }; + 2767FC6C192685E6000F61D3 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC591926750C000F61D3 /* CoreFoundation.framework */; }; + 2767FC6D192685E6000F61D3 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5A1926750C000F61D3 /* libiconv.dylib */; }; + 2767FC6E192685E6000F61D3 /* libresolv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5B1926750C000F61D3 /* libresolv.dylib */; }; + 2767FC6F192685E6000F61D3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5C1926750C000F61D3 /* libz.dylib */; }; + 2767FC70192685E6000F61D3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5D1926750C000F61D3 /* Security.framework */; }; + 2767FC71192685E6000F61D3 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */; }; + 2767FC7219268F06000F61D3 /* dest-job.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E018A13543000FCAE4 /* dest-job.c */; }; + 2767FC7319268F09000F61D3 /* dest-localization.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E118A13543000FCAE4 /* dest-localization.c */; }; + 2767FC7419268F0C000F61D3 /* dest-options.c in Sources */ = {isa = PBXBuildFile; fileRef = 72CF95E218A13543000FCAE4 /* dest-options.c */; }; 278C58E3136B647200836530 /* testhttp.c in Sources */ = {isa = PBXBuildFile; fileRef = 278C58E2136B647200836530 /* testhttp.c */; }; 278C58E9136B64B000836530 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E5136B64AF00836530 /* CoreFoundation.framework */; }; 278C58EA136B64B000836530 /* Kerberos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 278C58E6136B64B000836530 /* Kerberos.framework */; }; @@ -691,6 +718,27 @@ remoteGlobalIDString = 276684031337FA1D000D33D0; remoteInfo = cupsaddsmb; }; + 2767FC4819266A0D000F61D3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 72BF96371333042100B1EAD7 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 274FF6891333B1C400317ECB; + remoteInfo = libcups_static; + }; + 2767FC5319267469000F61D3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 72BF96371333042100B1EAD7 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 276683EF1337F78E000D33D0; + remoteInfo = ipptool; + }; + 2767FC5519267469000F61D3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 72BF96371333042100B1EAD7 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2767FC4619266A0D000F61D3; + remoteInfo = testdest; + }; 278C58D5136B641D00836530 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 72BF96371333042100B1EAD7 /* Project object */; @@ -1011,6 +1059,15 @@ ); runOnlyForDeploymentPostprocessing = 1; }; + 2767FC4C19266A0D000F61D3 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; 278C58C9136B640300836530 /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -1190,6 +1247,16 @@ 276683F91337F7A9000D33D0 /* ipptool.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ipptool.c; path = ../test/ipptool.c; sourceTree = ""; }; 276684041337FA1D000D33D0 /* cupsaddsmb */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = cupsaddsmb; sourceTree = BUILT_PRODUCTS_DIR; }; 276684101337FA7C000D33D0 /* cupsaddsmb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = cupsaddsmb.c; path = ../systemv/cupsaddsmb.c; sourceTree = ""; }; + 2767FC5019266A0D000F61D3 /* testdest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testdest; sourceTree = BUILT_PRODUCTS_DIR; }; + 2767FC5119266A36000F61D3 /* testdest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testdest.c; path = ../cups/testdest.c; sourceTree = ""; }; + 2767FC591926750C000F61D3 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; + 2767FC5A1926750C000F61D3 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; }; + 2767FC5B1926750C000F61D3 /* libresolv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libresolv.dylib; path = usr/lib/libresolv.dylib; sourceTree = SDKROOT; }; + 2767FC5C1926750C000F61D3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; + 2767FC5D1926750C000F61D3 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 2767FC7519269687000F61D3 /* pwg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = pwg.h; path = ../cups/pwg.h; sourceTree = ""; }; + 2767FC76192696A0000F61D3 /* raster-private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "raster-private.h"; path = "../cups/raster-private.h"; sourceTree = ""; }; 278C58CB136B640300836530 /* testhttp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = testhttp; sourceTree = BUILT_PRODUCTS_DIR; }; 278C58E2136B647200836530 /* testhttp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = testhttp.c; path = ../cups/testhttp.c; sourceTree = ""; }; 278C58E5136B64AF00836530 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; @@ -1446,6 +1513,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 2767FC57192674C4000F61D3 /* libcups_static.a in Frameworks */, 278C58E9136B64B000836530 /* CoreFoundation.framework in Frameworks */, 278C58EA136B64B000836530 /* Kerberos.framework in Frameworks */, 278C58EB136B64B000836530 /* Security.framework in Frameworks */, @@ -1458,6 +1526,13 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 2767FC5F1926750C000F61D3 /* CoreFoundation.framework in Frameworks */, + 2767FC601926750C000F61D3 /* libiconv.dylib in Frameworks */, + 2767FC611926750C000F61D3 /* libresolv.dylib in Frameworks */, + 2767FC621926750C000F61D3 /* libz.dylib in Frameworks */, + 2767FC631926750C000F61D3 /* Security.framework in Frameworks */, + 2767FC641926750C000F61D3 /* SystemConfiguration.framework in Frameworks */, + 2767FC58192674E0000F61D3 /* libcups_static.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1596,6 +1671,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2767FC4B19266A0D000F61D3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2767FC6B192685E6000F61D3 /* libcups_static.a in Frameworks */, + 2767FC6C192685E6000F61D3 /* CoreFoundation.framework in Frameworks */, + 2767FC6D192685E6000F61D3 /* libiconv.dylib in Frameworks */, + 2767FC6E192685E6000F61D3 /* libresolv.dylib in Frameworks */, + 2767FC6F192685E6000F61D3 /* libz.dylib in Frameworks */, + 2767FC70192685E6000F61D3 /* Security.framework in Frameworks */, + 2767FC71192685E6000F61D3 /* SystemConfiguration.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 278C58C8136B640300836530 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1714,6 +1803,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 2767FC6519267538000F61D3 /* libcups_static.a in Frameworks */, + 2767FC6619267538000F61D3 /* CoreFoundation.framework in Frameworks */, + 2767FC6719267538000F61D3 /* libresolv.dylib in Frameworks */, + 2767FC6819267538000F61D3 /* libz.dylib in Frameworks */, + 2767FC6919267538000F61D3 /* Security.framework in Frameworks */, + 2767FC6A19267538000F61D3 /* SystemConfiguration.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1748,6 +1843,7 @@ 273BF6B81333B4A90022CAAB /* tests */ = { isa = PBXGroup; children = ( + 2767FC5119266A36000F61D3 /* testdest.c */, 273BF6C61333B5370022CAAB /* testcups.c */, 278C58E2136B647200836530 /* testhttp.c */, 270CCDBB135E3D3E00007BE2 /* testmime.c */, @@ -1866,6 +1962,7 @@ 278C58CB136B640300836530 /* testhttp */, 72A4332F155844CF002E172D /* libcups_static.a */, 72CF95F118A19134000FCAE4 /* ipptool copy */, + 2767FC5019266A0D000F61D3 /* testdest */, ); name = Products; sourceTree = ""; @@ -1949,6 +2046,7 @@ 72220FB413330BCE00FCA411 /* mime.h */, 72220EF7133305BB00FCA411 /* ppd.h */, 274FF6091333315100317ECB /* ppdc.h */, + 2767FC7519269687000F61D3 /* pwg.h */, 72220EFA133305BB00FCA411 /* raster.h */, 72220EFD133305BB00FCA411 /* sidechannel.h */, 72220F07133305BB00FCA411 /* transcode.h */, @@ -1973,6 +2071,7 @@ 7271883C1374AB14001A2036 /* mime-private.h */, 72220EF5133305BB00FCA411 /* ppd-private.h */, 72220EF9133305BB00FCA411 /* pwg-private.h */, + 2767FC76192696A0000F61D3 /* raster-private.h */, 72220EFE133305BB00FCA411 /* snmp-private.h */, 72220F01133305BB00FCA411 /* string-private.h */, 72220F04133305BB00FCA411 /* thread-private.h */, @@ -2054,6 +2153,12 @@ 72220FB113330B4A00FCA411 /* Frameworks */ = { isa = PBXGroup; children = ( + 2767FC591926750C000F61D3 /* CoreFoundation.framework */, + 2767FC5A1926750C000F61D3 /* libiconv.dylib */, + 2767FC5B1926750C000F61D3 /* libresolv.dylib */, + 2767FC5C1926750C000F61D3 /* libz.dylib */, + 2767FC5D1926750C000F61D3 /* Security.framework */, + 2767FC5E1926750C000F61D3 /* SystemConfiguration.framework */, 72D53A3915B492FA003F877F /* libpam.dylib */, 72D53A3315B4925B003F877F /* ApplicationServices.framework */, 72D53A2C15B4913D003F877F /* IOKit.framework */, @@ -2632,6 +2737,24 @@ productReference = 276684041337FA1D000D33D0 /* cupsaddsmb */; productType = "com.apple.product-type.tool"; }; + 2767FC4619266A0D000F61D3 /* testdest */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2767FC4D19266A0D000F61D3 /* Build configuration list for PBXNativeTarget "testdest" */; + buildPhases = ( + 2767FC4919266A0D000F61D3 /* Sources */, + 2767FC4B19266A0D000F61D3 /* Frameworks */, + 2767FC4C19266A0D000F61D3 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + 2767FC4719266A0D000F61D3 /* PBXTargetDependency */, + ); + name = testdest; + productName = testcups; + productReference = 2767FC5019266A0D000F61D3 /* testdest */; + productType = "com.apple.product-type.tool"; + }; 278C58CA136B640300836530 /* testhttp */ = { isa = PBXNativeTarget; buildConfigurationList = 278C58D3136B640300836530 /* Build configuration list for PBXNativeTarget "testhttp" */; @@ -2956,6 +3079,7 @@ 720DD6C11358FD5F0064AA82 /* snmp */, 7243792F1333FB85009631B9 /* socket */, 273BF6BC1333B5000022CAAB /* testcups */, + 2767FC4619266A0D000F61D3 /* testdest */, 278C58CA136B640300836530 /* testhttp */, 270CCDA6135E3C9E00007BE2 /* testmime */, 7243795A1333FF1D009631B9 /* usb */, @@ -3074,6 +3198,7 @@ 274FF69E1333B1C400317ECB /* http-addrlist.c in Sources */, 274FF69F1333B1C400317ECB /* http-support.c in Sources */, 274FF6A01333B1C400317ECB /* http.c in Sources */, + 2767FC7419268F0C000F61D3 /* dest-options.c in Sources */, 274FF6A11333B1C400317ECB /* ipp-support.c in Sources */, 274FF6A21333B1C400317ECB /* ipp.c in Sources */, 274FF6A31333B1C400317ECB /* langprintf.c in Sources */, @@ -3087,8 +3212,10 @@ 727AD5B819100A58009F6862 /* tls.c in Sources */, 274FF6AB1333B1C400317ECB /* page.c in Sources */, 274FF6AC1333B1C400317ECB /* ppd-cache.c in Sources */, + 2767FC7219268F06000F61D3 /* dest-job.c in Sources */, 274FF6AD1333B1C400317ECB /* ppd.c in Sources */, 274FF6AE1333B1C400317ECB /* pwg-media.c in Sources */, + 2767FC7319268F09000F61D3 /* dest-localization.c in Sources */, 274FF6AF1333B1C400317ECB /* request.c in Sources */, 274FF6B01333B1C400317ECB /* sidechannel.c in Sources */, 274FF6B11333B1C400317ECB /* snmp.c in Sources */, @@ -3166,6 +3293,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2767FC4919266A0D000F61D3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2767FC5219266A36000F61D3 /* testdest.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 278C58C7136B640300836530 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -3597,6 +3732,21 @@ target = 276684031337FA1D000D33D0 /* cupsaddsmb */; targetProxy = 276684121337FA8D000D33D0 /* PBXContainerItemProxy */; }; + 2767FC4719266A0D000F61D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 274FF6891333B1C400317ECB /* libcups_static */; + targetProxy = 2767FC4819266A0D000F61D3 /* PBXContainerItemProxy */; + }; + 2767FC5419267469000F61D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 276683EF1337F78E000D33D0 /* ipptool */; + targetProxy = 2767FC5319267469000F61D3 /* PBXContainerItemProxy */; + }; + 2767FC5619267469000F61D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 2767FC4619266A0D000F61D3 /* testdest */; + targetProxy = 2767FC5519267469000F61D3 /* PBXContainerItemProxy */; + }; 278C58D6136B641D00836530 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 278C58CA136B640300836530 /* testhttp */; @@ -4048,6 +4198,20 @@ }; name = Release; }; + 2767FC4E19266A0D000F61D3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = testdest; + }; + name = Debug; + }; + 2767FC4F19266A0D000F61D3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = testdest; + }; + name = Release; + }; 278C58D1136B640300836530 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -4540,6 +4704,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 2767FC4D19266A0D000F61D3 /* Build configuration list for PBXNativeTarget "testdest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2767FC4E19266A0D000F61D3 /* Debug */, + 2767FC4F19266A0D000F61D3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 278C58D3136B640300836530 /* Build configuration list for PBXNativeTarget "testhttp" */ = { isa = XCConfigurationList; buildConfigurations = (