<pre style='margin:0'>
Ken (kencu) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/c69c5db25cd165fad363ab58ba2fc63b2fd0163a">https://github.com/macports/macports-ports/commit/c69c5db25cd165fad363ab58ba2fc63b2fd0163a</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new c69c5db25cd brlaser: new port (#12044)
</span>c69c5db25cd is described below

<span style='display:block; white-space:pre;color:#808000;'>commit c69c5db25cd165fad363ab58ba2fc63b2fd0163a
</span>Author: Evan Miller <emmiller@gmail.com>
AuthorDate: Thu Sep 2 00:43:48 2021 -0400

<span style='display:block; white-space:pre;color:#404040;'>    brlaser: new port (#12044)
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    cups printer drivers for Brother laser printers
</span>---
 print/brlaser/Portfile                             |  81 +++++++++++
 .../brlaser/files/patch-absolute-filter-path.diff  |  14 ++
 print/brlaser/files/patch-cups-1.1.diff            | 157 +++++++++++++++++++++
 print/brlaser/files/patch-no-open_memstream.diff   |  24 ++++
 print/brlaser/files/patch-no-stack-protector.diff  |  13 ++
 print/brlaser/files/patch-tumble.diff              |  53 +++++++
 6 files changed, 342 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/brlaser/Portfile b/print/brlaser/Portfile
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..ed02ff8551f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/brlaser/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,81 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortSystem      1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup       github 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup       cmake 1.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup    pdewacht brlaser 6 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision        0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+categories      print
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license         GPL-2+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+maintainers     nomaintainer
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description     Driver for Brother laser printers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    brlaser is an open-source driver for Brother-branded monochrome laser \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    printers, useful on systems where the proprietary driver is not \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    available.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+notes "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    **************************************************************************
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    brlaser has installed a collection of PostScript Printer Description (PPD)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    files to the following directory:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      ${prefix}/share/cups/model
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Each file corresponds to a particular Brother laser printer model. (In many
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    cases, choosing an incorrect PPD file will still print correctly.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    To install a printer, plug in your printer and open the Print & Fax pane
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    in System Preferences. Click the + sign to add a printer, then locate the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Use (or Print Using) button and choose Other. Navigate to the PPD file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    corresponding to your printer to install it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    For example, the PPD file for a Brother HL-L2300D can be found here:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+      ${prefix}/share/cups/model/brl2300d.ppd
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    The brlaser MacPorts package must remain installed on the system in order
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    to print to any printers added in this way.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    *************************************************************************"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums       rmd160 829cf057ed7e11abb42a79b2e6c631522539021c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                sha256 d1b180b5e15eeb3d7236abdaab665f3a3ac8fc27d192ab4ad4ad250cc0520aa3 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                size 22830
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# /usr/bin/ppdc exists on 10.6 and later
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if { ${os.platform} ne "darwin" || ${os.major} < 10 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    depends_build-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                port:cups-ppdc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles      patch-cups-1.1.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                patch-tumble.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                patch-absolute-filter-path.diff \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                patch-no-stack-protector.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+if { ${os.platform} eq "darwin" && ${os.major} < 17 } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append patch-no-open_memstream.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.cxx_standard   2011
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args-append -DCUPS_SERVER_BIN:FILEPATH=${prefix}/libexec/cups
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args-append -DCUPS_DATA_DIR:FILEPATH=${prefix}/share/cups
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+post-build {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    system -W ${workpath} "ppdc build/brlaser.drv -d build/ppd"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test.run yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+test.target check
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+destroot {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall -d ${destroot}${prefix}/libexec/cups/filter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall -m 0755 ${workpath}/build/rastertobrlaser \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ${destroot}${prefix}/libexec/cups/filter
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall -d ${destroot}${prefix}/share/cups/model
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    xinstall -m 0644 {*}[glob ${workpath}/build/ppd/*.ppd] ${destroot}${prefix}/share/cups/model
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/brlaser/files/patch-absolute-filter-path.diff b/print/brlaser/files/patch-absolute-filter-path.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..a4627bb10be
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/brlaser/files/patch-absolute-filter-path.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,14 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The default filter search path is /usr/libexec/cups/filter. MacPorts can't
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+write to this location, so specify an absolute path instead.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- brlaser.drv.in.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ brlaser.drv.in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -29,7 +29,7 @@ Manufacturer "Brother"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Version "@BRLASER_VERSION@"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Each filter provided by the driver...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-Filter application/vnd.cups-raster 33 rastertobrlaser
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++Filter application/vnd.cups-raster 33 @CUPS_SERVER_BIN@/filter/rastertobrlaser
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Supported resolutions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // The 1200dpi mode is weird: we need to send 1200x1200dpi raster
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/brlaser/files/patch-cups-1.1.diff b/print/brlaser/files/patch-cups-1.1.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..efb42c0c1c9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/brlaser/files/patch-cups-1.1.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,157 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Patch to allow compiling against CUPS 1.1 (Tiger)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+CUPS 1.2 introduced the cups_page_header2_t structure, which adds some fields
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+to the older cups_page_header_t structure. The previous field names are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+unchanged, so we can swap in one for the other in the code with macros in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+src/compat.h.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Three fields in particular (cupsInteger, cupsNumColors, and cupsPageSizeName)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+are not present in the 1.1 structure. So provide some workarounds in src/main.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+to store data and use fields that are present on 1.1.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+One hack worth noting is that because 1.1 lacks custom integer fields, the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"Toner save mode" is stored in the "compression" field with this patch. The
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+"compression" field isn't used elsewhere in the driver, so this should be safe.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+If this patch breaks, it might be easier to provide a libcups port (the cups-ppdc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+port already compiles libcups for its own use) and just compile against that.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+However, this will require verifying that filters compiled with a newer libcups
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+will properly function when speaking to an older, system-provided cupsd.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- brlaser.drv.in.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ brlaser.drv.in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -75,8 +75,8 @@ MediaType 7 "ENV-THICK/Thick envelopes"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ MediaType 8 "ENV-THIN/Thin envelopes"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Option "brlaserEconomode/Toner save mode" Boolean AnySetup 10
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  *Choice False/Off "<</cupsInteger10 0>>setpagedevice"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  Choice True/On "<</cupsInteger10 1>>setpagedevice"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  *Choice False/Off "<</cupsCompression 0>>setpagedevice"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  Choice True/On "<</cupsCompression 1>>setpagedevice"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/compat.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,29 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// This file is part of the brlaser printer driver.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// Copyright 2021 Evan Miller
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// brlaser is free software: you can redistribute it and/or modify
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// it under the terms of the GNU General Public License as published by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// the Free Software Foundation, either version 2 of the License, or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// (at your option) any later version.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// brlaser is distributed in the hope that it will be useful,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// but WITHOUT ANY WARRANTY; without even the implied warranty of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// GNU General Public License for more details.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++//
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// You should have received a copy of the GNU General Public License
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++// along with brlaser.  If not, see <http://www.gnu.org/licenses/>.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef COMPAT_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define COMPAT_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <cups/cups.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR < 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define _BRLASER_CUPS_COMPAT_OLD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define cups_page_header2_t cups_page_header_t
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#define cupsRasterReadHeader2(r, h) cupsRasterReadHeader(r, h)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/debug.cc.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/debug.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -93,6 +93,7 @@ void dump_page_header(const cups_page_header2_t &h) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   d(cupsRowCount);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   d(cupsRowFeed);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   d(cupsRowStep);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#ifndef _BRLASER_CUPS_COMPAT_OLD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   d(cupsNumColors);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   d(cupsBorderlessScalingFactor);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   d(cupsPageSize);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -103,5 +104,6 @@ void dump_page_header(const cups_page_header2_t &h) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   d(cupsMarkerType);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   d(cupsRenderingIntent);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   d(cupsPageSizeName);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #undef d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/debug.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/debug.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -18,6 +18,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifndef DEBUG_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define DEBUG_H
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include "compat.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <cups/raster.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void dump_page_header(const cups_page_header2_t &h);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/main.cc.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/main.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -90,25 +90,26 @@ page_params build_page_params(const cups_page_header2_t &header) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   static const std::array<std::string, 6> sources = {{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     "AUTO", "T1", "T2", "T3", "MP", "MANUAL"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }};
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  static const std::map<std::string, std::string> sizes = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "A4", "A4" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "A5", "A5" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "A6", "A6" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "B5", "B5" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "B6", "B6" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "EnvC5", "C5" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "EnvMonarch", "MONARCH" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "EnvPRC5", "DL" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "EnvDL", "DL" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "Executive", "EXECUTIVE" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "Legal", "LEGAL" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    { "Letter", "LETTER" }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  static const std::map<std::tuple<int, int>, std::string> sizes = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {595, 842}, "A4" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {420, 595}, "A5" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {298, 420}, "A6" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {499, 709}, "B5" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {354, 499}, "B6" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {649, 459}, "C5" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {312, 624}, "DL" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {279, 540}, "MONARCH" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {522, 756}, "EXECUTIVE" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {612, 792}, "LETTER" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      { {612, 1008}, "LEGAL" },
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   page_params p = { };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  p.papersize = "A4";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   p.num_copies = header.NumCopies;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   p.resolution = header.HWResolution[0];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  p.economode = header.cupsInteger[10];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  p.economode = header.cupsCompression;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   p.mediatype = header.MediaType;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   p.duplex = header.Duplex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -117,11 +118,9 @@ page_params build_page_params(const cups_page_header2_t &header) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     p.sourcetray = sources[0];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  auto size_it = sizes.find(header.cupsPageSizeName);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  auto size_it = sizes.find(std::make_tuple(header.PageSize[0], header.PageSize[1]));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (size_it != sizes.end())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     p.papersize = size_it->second;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    p.papersize = "A4";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return p;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -176,7 +175,7 @@ int main(int argc, char *argv[]) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     while (!interrupted && cupsRasterReadHeader2(ras, &header)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       if (header.cupsBitsPerPixel != 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           || header.cupsBitsPerColor != 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          || header.cupsNumColors != 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          || header.cupsColorSpace != 3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           || header.cupsBytesPerLine > 10000) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         fprintf(stderr, "ERROR: " PACKAGE ": Page %d: Bogus raster data.\n", job.pages() + 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         dump_page_header(header);
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/brlaser/files/patch-no-open_memstream.diff b/print/brlaser/files/patch-no-open_memstream.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..0fcd157b94f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/brlaser/files/patch-no-open_memstream.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,24 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Comment out some tests that require open_memstream (function added in 10.13)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CMakeLists.txt.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -116,16 +116,16 @@ target_link_libraries(rastertobrlaser ${CUPS_LDFLAGS})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_executable(brdecode EXCLUDE_FROM_ALL src/brdecode.cc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_executable(test_lest test/test_lest.cc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_executable(test_line test/test_line.cc src/line.cc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-add_executable(test_block test/test_block.cc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# add_executable(test_block test/test_block.cc)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ enable_testing()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_test(test_lest test_lest)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_test(test_line test_line)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-add_test(test_block test_block)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# add_test(test_block test_block)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Autotools-style "make check" command
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-add_dependencies(check test_lest test_line test_block)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++add_dependencies(check test_lest test_line) # test_block
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Installation
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/brlaser/files/patch-no-stack-protector.diff b/print/brlaser/files/patch-no-stack-protector.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..5b82e3a5462
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/brlaser/files/patch-no-stack-protector.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,13 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+The stack protector results in link errors on some older systems.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CMakeLists.txt.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -41,7 +41,7 @@ extra_cxx_compiler_flag("-Wall")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extra_cxx_compiler_flag("-Wno-missing-braces")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extra_cxx_compiler_flag("-Wdate-time")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Some security flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-extra_cxx_compiler_flag("-fstack-protector-strong")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# extra_cxx_compiler_flag("-fstack-protector-strong")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extra_cxx_compiler_flag("-Wformat")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extra_cxx_compiler_flag("-Wformat -Werror=format-security")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ extra_cxx_compiler_flag("-D_FORTIFY_SOURCE=2")
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/print/brlaser/files/patch-tumble.diff b/print/brlaser/files/patch-tumble.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..688d4ec080b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/print/brlaser/files/patch-tumble.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,53 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Upstream explanation: https://github.com/pdewacht/brlaser/pull/124
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/job.cc.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/job.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -73,14 +73,15 @@ void job::write_page_header() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           page_params_.papersize.c_str());
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   fprintf(out_, "@PJL SET PAGEPROTECT = AUTO\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   fprintf(out_, "@PJL SET ORIENTATION = PORTRAIT\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fprintf(out_, "@PJL SET DUPLEX = %s\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          page_params_.duplex ? "ON" : "OFF");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fprintf(out_, "@PJL SET BINDING = %s\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          page_params_.tumble ? "SHORTEDGE" : "LONGEDGE");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  fprintf(out_, "@PJL SET COPIES = %d\n",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          std::max(1, page_params_.num_copies));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   fprintf(out_, "@PJL ENTER LANGUAGE = PCL\n");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   fputs("\033E", out_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  fprintf(out_, "\033&l%dX", std::max(1, page_params_.num_copies));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if (page_params_.duplex) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    fputs("\033&l2S", out_);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ void job::encode_page(const page_params &page_params,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/job.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/job.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -27,6 +27,7 @@ struct page_params {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int num_copies;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int resolution;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   bool duplex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  bool tumble;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   bool economode;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   std::string sourcetray;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   std::string mediatype;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -36,6 +37,7 @@ struct page_params {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return num_copies == o.num_copies
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       && resolution == o.resolution
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       && duplex == o.duplex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      && tumble == o.tumble
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       && economode == o.economode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       && sourcetray == o.sourcetray
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       && mediatype == o.mediatype
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/main.cc.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/main.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -111,6 +111,7 @@ page_params build_page_params(const cups_page_header2_t &header) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   p.economode = header.cupsInteger[10];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   p.mediatype = header.MediaType;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   p.duplex = header.Duplex;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  p.tumble = header.Tumble;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (header.MediaPosition < sources.size())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     p.sourcetray = sources[header.MediaPosition];
</span></pre><pre style='margin:0'>

</pre>