From: joshua stein Subject: cups-filters: fix driverless To: ajacoutot@openbsd.org Cc: ports@openbsd.org Date: Mon, 16 Feb 2026 12:59:52 -0600 I was trying to use the driverless thing in CUPS to be able to add AirPrint printers on my network but 'driverless list' would never show any printers even with Avahi running. Turns out the driverless binary is shelling out to ippfind and passing a long string of args to act as a filter, and that filter depends on echo having an -e flag to print in a format that driverless reads back. Since we don't have -e, it was just reading back garbage. ippfind -T 0 _ipps._tcp _ipp._tcp ! --txt printer-type --and \( --txt-pdl image/pwg-raster --or --txt-pdl application/PCLm --or --txt-pdl image/urf --or --txt-pdl application/pdf \) -x echo -en '\n{service_scheme}\t{service_name}\t{service_domain}\t{txt_usb_MFG}\t{txt_usb_MDL}\t{txt_product}\t{txt_ty}\t{service_name}\t{txt_pdl}\t{txt_UUID}\t{txt_rfo}\t' \; --local -x echo -en L \; The easiest solution seemed to be to depend on gecho from coreutils but maybe there's a shorter path. diff --git print/cups-filters/Makefile print/cups-filters/Makefile index c34782cf7e5..9ec9dfb9e60 100644 --- print/cups-filters/Makefile +++ print/cups-filters/Makefile @@ -2,7 +2,7 @@ COMMENT= OpenPrinting CUPS filters V= 2.0.1 DISTNAME= cups-filters-${V} -REVISION= 0 +REVISION= 1 CATEGORIES= print @@ -32,7 +32,8 @@ LIB_DEPENDS= print/libcupsfilters \ # make it easier for users: bring in foomatic-db and allow the # regeneration of PPD files from share/foomatic/db/source/*/*.xml -RUN_DEPENDS += print/foomatic-db-engine +RUN_DEPENDS += print/foomatic-db-engine \ + sysutils/coreutils FAKE_FLAGS= pkgfontconfigdir=${PREFIX}/share/examples/cups-filters \ pkgcupsserverrootdir=${PREFIX}/share/examples/cups-filters/cups diff --git print/cups-filters/patches/patch-utils_driverless_c print/cups-filters/patches/patch-utils_driverless_c new file mode 100644 index 00000000000..e234226fbec --- /dev/null +++ print/cups-filters/patches/patch-utils_driverless_c @@ -0,0 +1,26 @@ +--- utils/driverless.c.orig Sun Feb 15 21:03:40 2026 ++++ utils/driverless.c Sun Feb 15 21:04:25 2026 +@@ -419,7 +419,11 @@ + ippfind_argv[i++] = "application/pdf"; /* PDF */ + ippfind_argv[i++] = ")"; + ippfind_argv[i++] = "-x"; ++#ifdef __OpenBSD__ ++ ippfind_argv[i++] = "gecho"; /* Output the needed data fields */ ++#else + ippfind_argv[i++] = "echo"; /* Output the needed data fields */ ++#endif + ippfind_argv[i++] = "-en"; /* separated by tab characters */ + if (mode < 0) { + if (isFax) +@@ -440,7 +444,11 @@ + if (mode < 0) { + ippfind_argv[i++] = "--local"; /* Rest only if local service */ + ippfind_argv[i++] = "-x"; ++#ifdef __OpenBSD__ ++ ippfind_argv[i++] = "gecho"; /* Output an 'L' at the end of the */ ++#else + ippfind_argv[i++] = "echo"; /* Output an 'L' at the end of the */ ++#endif + ippfind_argv[i++] = "-en"; /* line */ + ippfind_argv[i++] = "L"; + ippfind_argv[i++] = ";";