commit:     5ddd362b77fa5ba98bb4e09db554afc653558206
Author:     Viorel Munteanu <ceamac.paragon <AT> gmail <DOT> com>
AuthorDate: Thu May 27 18:15:26 2021 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon May 31 08:17:20 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5ddd362b

media-libs/netpbm: new version 10.86.22

Also backported a fix from 10.94.3 for tests failing with USE=postfix
Closes: https://bugs.gentoo.org/670362
Package-Manager: Portage-3.0.18, Repoman-3.0.2
Signed-off-by: Viorel Munteanu <ceamac.paragon <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 media-libs/netpbm/Manifest                         |   1 +
 .../netpbm/files/netpbm-10.86.22-fix-ps-test.patch | 506 +++++++++++++++++++++
 media-libs/netpbm/netpbm-10.86.22.ebuild           | 211 +++++++++
 3 files changed, 718 insertions(+)

diff --git a/media-libs/netpbm/Manifest b/media-libs/netpbm/Manifest
index be3d0a3dff3..ddc99b62a12 100644
--- a/media-libs/netpbm/Manifest
+++ b/media-libs/netpbm/Manifest
@@ -1,3 +1,4 @@
 DIST netpbm-10.70.00.tar.xz 2621612 BLAKE2B 
2b07d130de0afeb3c1df32c6d267bc6bd13d4f556988cb7784b51941d81de1ad4f3381a0788eec6309bc6c024a21eb273a5f00726f6bb9a8ecb87f547678fc77
 SHA512 
f70d6dd79ce813f9fc4935d382b50bd3cecdf02c324b0f012056e56e33f24b621e8c1b3d054c6f470d437d0d793593de95eaa9724055d59c342228398a40f0b4
 DIST netpbm-10.76.00.tar.xz 2657184 BLAKE2B 
b8d82268ba50881fab10bca00ea408afa39096f4f9c079b523d8e28ce62301797ee50f55c84f85a6d832b723da7449531e725bf60a4a89975c51382b2cbc4a94
 SHA512 
234a5616a7631a8eb70817bb88ed509ddddfce93f71739654ef78a2735245b268c391adb49b514ed883569c9fc6ea9c3eeed10aa7898c02b797fee5249b11cf3
 DIST netpbm-10.86.21.tar.xz 3768736 BLAKE2B 
19d641f3519f55d737aa6cd22f60847b2b241f71134bc7f9fa558e681cbffb1bff53f16e4d89e7a85b20b86e0bf0f4d9c341dde656ca07a7bc20adc94e811e36
 SHA512 
caa6c18039be72c47419b3ef60b64e0a04123752beb27bab178adcbb48e5311da05b422205f52c784149bb0636be1e3155e6bbf7703ec5c5775cb9981de1008e
+DIST netpbm-10.86.22.tar.xz 3696588 BLAKE2B 
eabc11b4928681f2d96c8b6da1e23284868d7ba2f610f496d1ddf5b6ceb34c991160780f79c69b2c905e5210b024a1a5868656b89e23d6b63e587ce0cd70a950
 SHA512 
5840d0e88158ac77be7dfc5430e696701a740d56c98efdaf02b3c4e92bdf10268572ef0087b3bf263937073e0fbda3183aa7ed56bfe12dba30b3a3ff382bd4ff

diff --git a/media-libs/netpbm/files/netpbm-10.86.22-fix-ps-test.patch 
b/media-libs/netpbm/files/netpbm-10.86.22-fix-ps-test.patch
new file mode 100644
index 00000000000..e8876120a18
--- /dev/null
+++ b/media-libs/netpbm/files/netpbm-10.86.22-fix-ps-test.patch
@@ -0,0 +1,506 @@
+postscript tests fail because of pbmtolps
+backport pbmtolps from netpbm-10.94.3, including tests
+see also bug #670362
+
+--- a/converter/pbm/pbmtolps.c
++++ b/converter/pbm/pbmtolps.c
+@@ -1,181 +1,253 @@
+-/*
+- * pbmtolps -- convert a Portable BitMap into Postscript.  The
+- * output Postscript uses lines instead of the image operator to
+- * generate a (device dependent) picture which will be imaged
+- * much faster.
+- *
+- * The Postscript path length is constrained to be less that 1000
+- * points so that no limits are overrun on the Apple Laserwriter
+- * and (presumably) no other printers.
+- *
+- * To do:
+- *      make sure encapsulated format is correct
+- *      repitition of black-white strips
+- *      make it more device independent (is this possible?)
+- *
+- * Author:
+- *      George Phillips <[email protected]>
+- *      Department of Computer Science
+- *      University of British Columbia
+- */
+-
+-#include <string.h>
+-#include <stdio.h>
++/*=============================================================================
++                             pbmtolps
++===============================================================================
++
++  Convert a PBM image to Postscript.  The output Postscript uses lines instead
++  of the image operator to generate a (device dependent) picture which will be
++  imaged much faster.
++
++  The Postscript path length is constrained to be at most 1000 vertices so 
that
++  no limits are overrun on the Apple Laserwriter and (presumably) no other
++  printers.  The typical limit is 1500.  See "4.4 Path Construction" and
++  "Appendix B: Implementation Limits" in: PostScript Language Reference Manual
++  https://www.adobe.com/content/dam/acom/en/devnet/actionscript/
++  articles/psrefman.pdf
++
++  To do:
++       make sure encapsulated format is correct
++       repetition of black-white strips
++       make it more device independent (is this possible?)
++
++  Author:
++       George Phillips <[email protected]>
++       Department of Computer Science
++       University of British Columbia
++=============================================================================*/
++#include <stdbool.h>
+ 
++#include "pm_c_util.h"
++#include "mallocvar.h"
+ #include "nstring.h"
++#include "shhopt.h"
+ #include "pbm.h"
+ 
+ 
+-static int prev_white = -1;
+-static int prev_black = -1;
+-static char cmd = '\0';
+-static int pointcount = 2;
+-
+-#ifdef RUN
+-static int run = 1;
+-#endif
+-
+-static char 
+-morepoints(char cmd, int howmany_pbmtolps) {
+-    pointcount += 2;
+-    if (pointcount > 1000) {
+-        pointcount = 2;
+-        cmd += 'm' - 'a';
+-    }
+-    return(cmd);
++static float        const MAX_DPI           = 5000;
++static float        const MIN_DPI           = 10;
++static unsigned int const MAX_PATH_VERTICES = 1000;
++
++
++struct CmdlineInfo {
++    /* All the information the user supplied in the command line, in a form
++       easy for the program to use.
++    */
++    const char * inputFileName;  /* File name of input file */
++    unsigned int inputFileSpec;  /* Input file name specified */
++    float        lineWidth;      /* Line width, if specified */
++    unsigned int lineWidthSpec;  /* Line width specified */
++    float        dpi;            /* Resolution in DPI, if specified */
++    unsigned int dpiSpec;        /* Resolution specified */
++};
++
++
++
++static void
++validateDpi(float const dpi) {
++
++    if (dpi > MAX_DPI || dpi < MIN_DPI)
++        pm_error("Specified DPI value out of range (%f)", dpi);
+ }
+ 
+ 
+ 
+-static void 
+-addstrip(int const white, 
+-         int const black) {
+-
+-    if (cmd) {
+-#ifdef RUN
+-        if (white == prev_white && black == prev_black)
+-            run++;
+-        else {
+-            if (run == 1)
+-#endif
+-                printf("%d %d %c ", 
+-                       prev_black, prev_white, morepoints(cmd, 2));
+-#ifdef RUN
+-            else
+-                                /* of course, we need to give a new command */
+-                printf("%d %d %d %c ",
+-                       prev_white, prev_black, run,
+-                       morepoints(cmd + 'f' - 'a', 2 * run));
+-            run = 1;
+-        }
+-#endif
++static void
++parseCommandLine(int                        argc,
++                 const char **        const argv,
++                 struct CmdlineInfo * const cmdlineP) {
++/*----------------------------------------------------------------------------
++   Parse program command line described in Unix standard form by argc
++   and argv.  Return the information in the options as *cmdlineP.
++-----------------------------------------------------------------------------*/
++    optEntry * option_def;  /* malloc'ed */
++        /* Instructions to OptParseOptions3 on how to parse our options.  */
++    optStruct3 opt;
++
++    unsigned int option_def_index;
++
++    MALLOCARRAY_NOFAIL(option_def, 100);
++
++    option_def_index = 0;   /* incremented by OPTENTRY */
++    OPTENT3(0, "linewidth", OPT_FLOAT, &cmdlineP->lineWidth,
++                            &cmdlineP->lineWidthSpec,    0);
++    OPTENT3(0, "dpi",       OPT_FLOAT,  &cmdlineP->dpi,
++                            &cmdlineP->dpiSpec,          0);
++
++    opt.opt_table = option_def;
++    opt.short_allowed = FALSE;  /* We have no short (old-fashioned) options */
++    opt.allowNegNum = FALSE;  /* We have no parms that are negative numbers */
++
++    pm_optParseOptions3(&argc, (char **)argv, opt, sizeof(opt), 0);
++        /* Uses and sets argc, argv, and some of *cmdlineP and others. */
++
++    if (cmdlineP->dpiSpec)
++        validateDpi(cmdlineP->dpi);
++    else
++        cmdlineP->dpi = 300;
++
++    if (argc-1 < 1)
++        cmdlineP->inputFileName = "-";
++    else {
++        if (argc-1 > 1)
++            pm_error("Program takes zero or one argument (filename).  You "
++                     "specified %u", argc-1);
++        else
++            cmdlineP->inputFileName = argv[1];
+     }
+ 
+-    prev_white = white;
+-    prev_black = black;
+-    cmd = 'a';
++    if (cmdlineP->inputFileName[0] == '-' &&
++        cmdlineP->inputFileName[1] == '\0')
++        cmdlineP->inputFileSpec = false;
++    else
++        cmdlineP->inputFileSpec = true;
++
++    free(option_def);
+ }
+ 
+ 
+ 
+-static void 
+-nextline(void) {
+-    /* need to check run, should have an outcommand */
+-    if (cmd)
+-        printf("%d %d %c\n", prev_black, prev_white, morepoints('c', 3));
+-    else
+-        printf("%c\n", morepoints('b', 1));
+-    cmd = '\0';
++static void
++validateLineWidth(float const scCols,
++                  float const scRows,
++                  float const lineWidth) {
++
++    if (lineWidth >= scCols || lineWidth >= scRows)
++        pm_error("Absurdly large -linewidth value (%f)", lineWidth);
+ }
+ 
+ 
+ 
+-int
+-main(int argc, char ** argv) {
+-    FILE*   fp;
+-    bit*    bits;
+-    int             row;
+-    int             col;
+-    int         rows;
+-    int             cols;
+-    int             format;
+-    int             white;
+-    int             black;
+-    const char*   name;
+-    float   dpi = 300.0;
+-    float   sc_rows;
+-    float   sc_cols;
+-    int             i;
+-    const char*   const usage = "[ -dpi n ] [ pbmfile ]";
+-
+-
+-      pbm_init(&argc, argv);
+-
+-    i = 1;
+-    if (i < argc && streq(argv[i], "-dpi")) {
+-        if (i == argc - 1)
+-            pm_usage(usage);
+-        sscanf(argv[i + 1], "%f", &dpi);
+-        i += 2;
+-    }
++static void
++doRaster(FILE *       const ifP,
++         unsigned int const cols,
++         unsigned int const rows,
++         int          const format,
++         FILE *       const ofP) {
+ 
+-    if (i < argc - 1)
+-        pm_usage(usage);
++    bit *        bitrow;
++    unsigned int row;
++    unsigned int vertexCt;
++        /* Number of vertices drawn since last stroke command */
+ 
+-    if (i == argc) {
+-        name = "noname";
+-        fp = stdin;
+-    } else {
+-        name = argv[i];
+-        fp = pm_openr(name);
+-    }
+-    pbm_readpbminit(fp, &cols, &rows, &format);
+-    bits = pbm_allocrow(cols);
++    bitrow = pbm_allocrow(cols);
++
++    for (row = 0, vertexCt = 0; row < rows; ++row) {
++        unsigned int col;
++        bool firstRun;
+ 
+-    sc_rows = (float)rows / dpi * 72.0;
+-    sc_cols = (float)cols / dpi * 72.0;
++        firstRun = true;  /* initial value */
++
++        pbm_readpbmrow(ifP, bitrow, cols, format);
++
++        /* output white-strip + black-strip sequences */
+ 
+-    puts("%!PS-Adobe-2.0 EPSF-2.0");
+-    puts("%%Creator: pbmtolps");
+-    printf("%%%%Title: %s\n", name);
+-    printf("%%%%BoundingBox: %d %d %d %d\n",
+-           (int)(305.5 - sc_cols / 2.0),
+-           (int)(395.5 - sc_rows / 2.0),
+-           (int)(306.5 + sc_cols / 2.0),
+-           (int)(396.5 + sc_rows / 2.0));
+-    puts("%%EndComments");
+-    puts("%%EndProlog");
+-    puts("gsave");
+-
+-    printf("%f %f translate\n", 306.0 - sc_cols / 2.0, 396.0 + sc_rows / 2.0);
+-    printf("72 %f div dup neg scale\n", dpi);
+-    puts("/a { 0 rmoveto 0 rlineto } def");
+-    puts("/b { 0 row 1 add dup /row exch def moveto } def");
+-    puts("/c { a b } def");
+-    puts("/m { currentpoint stroke newpath moveto a } def");
+-    puts("/n { currentpoint stroke newpath moveto b } def");
+-    puts("/o { currentpoint stroke newpath moveto c } def");
+-    puts("/row 0 def");
+-    puts("newpath 0 0 moveto");
+-
+-    for (row = 0; row < rows; row++) {
+-        pbm_readpbmrow(fp, bits, cols, format);
+-        /* output white-strip+black-strip sequences */
+         for (col = 0; col < cols; ) {
+-            for (white = 0; col < cols && bits[col] == PBM_WHITE; col++)
+-                white++;
+-            for (black = 0; col < cols && bits[col] == PBM_BLACK; col++)
+-                black++;
++            unsigned int whiteCt;
++            unsigned int blackCt;
++
++            for (whiteCt = 0; col < cols && bitrow[col] == PBM_WHITE; ++col)
++                ++whiteCt;
++            for (blackCt = 0; col < cols && bitrow[col] == PBM_BLACK; ++col)
++                ++blackCt;
++
++            if (blackCt > 0) {
++                if (vertexCt > MAX_PATH_VERTICES) {
++                    printf("m ");
++                    vertexCt = 0;
++                }
++
++                if (firstRun) {
++                    printf("%u %u moveto %u 0 rlineto\n",
++                           whiteCt, row, blackCt);
++                    firstRun = false;
++                } else
++                    printf("%u %u a\n", blackCt, whiteCt);
+ 
+-            if (black != 0)
+-                addstrip(white, black);
++                vertexCt += 2;
++            }
+         }
+-        nextline();
+     }
+-    puts("stroke grestore showpage");
+-    puts("%%Trailer");
++    pbm_freerow(bitrow);
++}
++
++
++
++static void
++pbmtolps(FILE *             const ifP,
++         FILE *             const ofP,
++         struct CmdlineInfo const cmdline) {
++
++    const char * const psName =
++        cmdline.inputFileSpec ? cmdline.inputFileName : "noname";
++
++    int          rows;
++    int          cols;
++    int          format;
++    float        scRows, scCols;
++        /* Dimensions of the printed image in points */
++
++    pbm_readpbminit(ifP, &cols, &rows, &format);
++
++    scRows = (float) rows / (cmdline.dpi / 72.0);
++    scCols = (float) cols / (cmdline.dpi / 72.0);
++
++    if (cmdline.lineWidthSpec)
++        validateLineWidth(scCols, scRows, cmdline.lineWidth);
++
++    fputs("%!PS-Adobe-2.0 EPSF-2.0\n", ofP);
++    fputs("%%Creator: pbmtolps\n", ofP);
++    fprintf(ofP, "%%%%Title: %s\n", psName);
++    fprintf(ofP, "%%%%BoundingBox: %d %d %d %d\n",
++           (int)(305.5 - scCols / 2.0),
++           (int)(395.5 - scRows / 2.0),
++           (int)(306.5 + scCols / 2.0),
++           (int)(396.5 + scRows / 2.0));
++    fputs("%%EndComments\n", ofP);
++    fputs("%%EndProlog\n", ofP);
++    fputs("gsave\n", ofP);
++
++    fprintf(ofP, "%f %f translate\n",
++            306.0 - scCols / 2.0, 396.0 + scRows / 2.0);
++    fprintf(ofP, "72 %f div dup neg scale\n", cmdline.dpi);
++
++    if (cmdline.lineWidthSpec)
++        fprintf(ofP, "%f setlinewidth\n", cmdline.lineWidth);
++
++    fputs("/a { 0 rmoveto 0 rlineto } def\n", ofP);
++    fputs("/m { currentpoint stroke newpath moveto } def\n", ofP);
++    fputs("newpath 0 0 moveto\n", ofP);
++
++    doRaster(ifP, cols, rows, format, ofP);
++
++    fputs("stroke grestore showpage\n", ofP);
++    fputs("%%Trailer\n", ofP);
++}
++
++
++
++int
++main(int argc, const char *argv[]) {
++    FILE *  ifP;
++    struct CmdlineInfo cmdline;
++
++    pm_proginit(&argc, argv);
++
++    parseCommandLine(argc, argv, &cmdline);
++
++    ifP = pm_openr(cmdline.inputFileName);
++
++    pbmtolps(ifP, stdout, cmdline);
+ 
+-    pm_close(fp);
++    pm_close(ifP);
+ 
+-    exit(0);
++    return 0;
+ }
+--- a/test/lps-roundtrip.ok
++++ b/test/lps-roundtrip.ok
+@@ -0,0 +1 @@
++match
+--- a/test/lps-roundtrip.test
++++ b/test/lps-roundtrip.test
+@@ -0,0 +1,22 @@
++#! /bin/bash
++# This script tests: pbmtolps pstopnm
++# Also requires: gs pamdepth pamscale pnmcrop pnmpsnr
++
++# The ordinary round-trip does not work because of the way ghostscript
++# renders: a line is considered wider than a single pixel and all pixels
++# it touches are set to black if the output is PBM.  To work around this,
++# we tell pstopnm to output PGM at a high resolution (=large dpi value).
++
++
++test_pgm=${tmpdir}/testgrid.pgm
++
++pamdepth 255 testgrid.pbm > ${test_pgm}
++
++pbmtolps -dpi 72 testgrid.pbm | \
++    pstopnm -dpi $((72*12)) -stdout -pgm | \
++    pnmcrop -white | pamscale -xsize=14 -ysize=16 | \
++    pnmpsnr -target=30 - ${test_pgm}
++
++# ghostscript version 8.71: pnmpsnr lumina 33.14dB
++
++rm ${test_pgm}
+--- a/test/ps-alt-roundtrip.ok
++++ b/test/ps-alt-roundtrip.ok
+@@ -1,3 +1,2 @@
+ 2425386270 41
+-2425386270 41
+ 2916080186 235
+--- a/test/ps-alt-roundtrip.test
++++ b/test/ps-alt-roundtrip.test
+@@ -1,21 +1,24 @@
+ #! /bin/bash
+-# This script tests: pbmtoepsi pbmtopsg3 pbmtolps psidtopgm pstopnm
++# This script tests: pbmtoepsi pbmtopsg3 psidtopgm pstopnm
+ # Also requires: gs pnmcrop
+ 
+ 
+ # This script is for testing alternative (or minor) utilities that
+ # read/write Postscript and encapsulated Postscript:
+-# pbmtoepsi, pbmtopsg3, pbmtolps and psidtopgm.
++# pbmtoepsi, pbmtopsg3 and psidtopgm.
+ #
+ # We keep these tests separate from those for pnmtops and pstopnm
+ # which are far more popular.
+ #
+-# pbmtopsg3 and pbmtolps produce output that require pstopnm for decoding.
++# pbmtopsg3 produces output that requires pstopnm for decoding.
++#
++# We used to test pbmtolps here, but moved it out when gs changed its
++# rendering formula.
+ #
+ # Failure message
+ ## If ps-roundtrip.test succeeds and this test fails, it is most likely
+ ## a problem with one of the alternate Postscipt utilities:
+-## pbmtoepsi, pbmtopsg3, pbmtolps or psidtopgm.
++## pbmtoepsi, pbmtopsg3, or psidtopgm.
+ ## If both tests fail it indicates a problem with pstopnm or gs.
+ 
+ # pstopnm does not use libnetpbm functions for output.
+@@ -33,18 +36,8 @@
+ rm ${testgrid1_ps}
+ 
+ 
+-# Test 2. Should print: 2425386270 41
+-testgrid2_ps=${tmpdir}/testgrid2.ps
+-
+-pbmtolps -dpi 72 testgrid.pbm \
+-     > ${testgrid2_ps} && \
+-pstopnm -xborder=0 -yborder=0 -dpi=72 -stdout \
+-    -quiet ${testgrid2_ps} -pbm | \
+-  pnmcrop | cksum
+-
+-rm ${testgrid2_ps}
+ 
+-# Test 3. Should print: 2916080186 235
++# Test 2. Should print: 2916080186 235
+ # Output is pgm maxval=1 with black and white inverted.
+ #
+ testgrid_epsi=${tmpdir}/testgrid.epsi
+--- a/test/Test-Order
++++ b/test/Test-Order
+@@ -183,5 +183,6 @@
+ 
+ fiasco-roundtrip.test
+ jpeg-roundtrip.test
++lps-roundtrip.test
+ tiffcmyk-roundtrip.test
+ yuv-roundtrip.test

diff --git a/media-libs/netpbm/netpbm-10.86.22.ebuild 
b/media-libs/netpbm/netpbm-10.86.22.ebuild
new file mode 100644
index 00000000000..048c6e3162e
--- /dev/null
+++ b/media-libs/netpbm/netpbm-10.86.22.ebuild
@@ -0,0 +1,211 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit multilib toolchain-funcs
+
+DESCRIPTION="A set of utilities for converting to/from the netpbm (and 
related) formats"
+HOMEPAGE="http://netpbm.sourceforge.net/";
+SRC_URI="https://github.com/ceamac/netpbm-make-dist/releases/download/v${PV}/${P}.tar.xz";
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 
~sparc ~x86 ~amd64-linux ~x86-linux"
+IUSE="doc jbig jpeg png postscript rle cpu_flags_x86_sse2 static-libs svga 
tiff X xml zlib"
+
+BDEPEND="
+       app-arch/xz-utils
+       sys-devel/flex
+       virtual/pkgconfig
+"
+RDEPEND="jbig? ( media-libs/jbigkit )
+       jpeg? ( virtual/jpeg:0 )
+       png? ( >=media-libs/libpng-1.4:0 )
+       postscript? ( app-text/ghostscript-gpl )
+       rle? ( media-libs/urt )
+       svga? ( media-libs/svgalib )
+       tiff? ( >=media-libs/tiff-3.5.5:0 )
+       xml? ( dev-libs/libxml2 )
+       zlib? ( sys-libs/zlib )
+       X? ( x11-libs/libX11 )"
+DEPEND="${RDEPEND}"
+
+PATCHES=(
+       "${FILESDIR}"/netpbm-10.86.21-build.patch
+       "${FILESDIR}"/netpbm-10.86.21-test.patch #450530
+       "${FILESDIR}"/netpbm-10.86.21-misc-deps.patch
+       "${FILESDIR}"/netpbm-10.86.21-format-security.patch #517524
+       "${FILESDIR}"/netpbm-10.86.22-fix-ps-test.patch #670362
+)
+
+netpbm_libtype() {
+       case ${CHOST} in
+               *-darwin*) echo dylib;;
+               *)         echo unixshared;;
+       esac
+}
+
+netpbm_libsuffix() {
+       local suffix=$(get_libname)
+       echo ${suffix//\.}
+}
+
+netpbm_ldshlib() {
+       case ${CHOST} in
+               *-darwin*) echo '$(LDFLAGS) -dynamiclib -install_name 
$(SONAME)';;
+               *)         echo '$(LDFLAGS) -shared -Wl,-soname,$(SONAME)';;
+       esac
+}
+netpbm_config() {
+       if use ${1} ; then
+               [[ ${2} != "!" ]] && echo -l${2:-$1}
+       else
+               echo NONE
+       fi
+}
+
+src_prepare() {
+       default
+
+       # make sure we use system libs
+       sed -i '/SUPPORT_SUBDIRS/s:urt::' GNUmakefile || die
+       rm -r urt converter/other/jbig/libjbig 
converter/other/jpeg2000/libjasper || die
+
+       # take care of the importinc stuff ourselves by only doing it once
+       # at the top level and having all subdirs use that one set #149843
+       sed -i \
+               -e '/^importinc:/s|^|importinc:\nmanual_|' \
+               -e '/-Iimportinc/s|-Iimp|-I"$(BUILDDIR)"/imp|g'\
+               common.mk || die
+       sed -i \
+               -e '/%.c/s: importinc$::' \
+               common.mk lib/Makefile lib/util/Makefile || die
+       sed -i \
+               -e 's:pkg-config:$(PKG_CONFIG):' \
+               GNUmakefile converter/other/Makefile other/pamx/Makefile || die
+
+       # The postscript knob is currently bound up with a fork test.
+       if ! use postscript ; then
+               sed -i \
+                       -e 's:$(DONT_HAVE_PROCESS_MGMT):Y:' \
+                       converter/other/Makefile generator/Makefile || die
+               sed -i -r \
+                       -e 's:(pbmtextps|pnmtops|pstopnm).*::' \
+                       test/all-in-place.{ok,test} || die
+               sed -i -e 's:lps-roundtrip.*::' test/Test-Order || die
+               sed -i -e '/^$/d' test/all-in-place.ok || die
+               sed -i '2iexit 80' test/ps-{alt-,flate-,}roundtrip.test || die
+       fi
+
+       # the new postscript test needs +x
+       chmod +x test/lps-roundtrip.test
+
+       # Do not test png if not built
+       if ! use png ; then
+               sed -i -r \
+                       -e 's:(pamtopng|pngtopam|pnmtopng).*::' \
+                       test/all-in-place.{ok,test} || die
+               sed -i -e '/^$/d' test/all-in-place.ok || die
+
+               sed -i -r \
+                       -e 's:(pamrgbatopng|pngtopnm).*::' \
+                       test/legacy-names.{ok,test} || die
+               sed -i -e '/^$/d' test/legacy-names.ok || die
+       fi
+}
+
+src_configure() {
+       # cannot chain the die with the heredoc, please check the comment below
+       cat config.mk.in - >> config.mk <<-EOF
+       # Misc crap
+       BUILD_FIASCO = N
+       SYMLINK = ln -sf
+
+       # These vars let src_test work by default
+       PKGDIR_DEFAULT = ${T}/netpbm
+       RESULTDIR_DEFAULT = ${T}/netpbm-test
+
+       # Toolchain options
+       CC = $(tc-getCC) -Wall
+       LD = \$(CC)
+       CC_FOR_BUILD = $(tc-getBUILD_CC)
+       LD_FOR_BUILD = \$(CC_FOR_BUILD)
+       AR = $(tc-getAR)
+       RANLIB = $(tc-getRANLIB)
+       PKG_CONFIG = $(tc-getPKG_CONFIG)
+
+       STRIPFLAG =
+       CFLAGS_SHLIB = -fPIC
+
+       LDRELOC = \$(LD) -r
+       LDSHLIB = $(netpbm_ldshlib)
+       LINKER_CAN_DO_EXPLICIT_LIBRARY = N # we can, but dont want to
+       LINKERISCOMPILER = Y
+       NETPBMLIBSUFFIX = $(netpbm_libsuffix)
+       NETPBMLIBTYPE = $(netpbm_libtype)
+       STATICLIB_TOO = $(usex static-libs Y N)
+
+       # The var is called SSE, but the code is actually SSE2.
+       WANT_SSE = $(usex cpu_flags_x86_sse2 Y N)
+
+       # Gentoo build options
+       TIFFLIB = $(netpbm_config tiff)
+       # Let tiff worry about its own dependencies #395753
+       TIFFLIB_NEEDS_JPEG = N
+       TIFFLIB_NEEDS_Z = N
+       JPEGLIB = $(netpbm_config jpeg)
+       PNGLIB = $(netpbm_config png)
+       ZLIB = $(netpbm_config zlib z)
+       LINUXSVGALIB = $(netpbm_config svga vga)
+       XML2_LIBS = $(netpbm_config xml xml2)
+       JBIGLIB = $(netpbm_config jbig)
+       JBIGHDR_DIR =
+       JASPERLIB = NONE
+       JASPERHDR_DIR =
+       URTLIB = $(netpbm_config rle)
+       URTHDR_DIR =
+       X11LIB = $(netpbm_config X X11)
+       X11HDR_DIR =
+       EOF
+       # cannot chain the die with the heredoc above as bash-3
+       # has a parser bug in that setup #282902
+       [[ $? -eq 0 ]] || die "writing config.mk failed"
+}
+
+src_compile() {
+       emake -j1 pm_config.h version.h manual_importinc #149843
+       emake
+}
+
+src_test() {
+       # The code wants to install everything first and then test the result.
+       emake install.{bin,lib,data}
+       emake check
+}
+
+src_install() {
+       # Subdir make targets like to use `mkdir` all over the place
+       # without any actual dependencies, thus the -j1.
+       emake -j1 package pkgdir="${ED}"/usr
+
+       if [[ $(get_libdir) != "lib" ]] ; then
+               mv "${ED}"/usr/lib "${ED}"/usr/$(get_libdir) || die
+       fi
+
+       # Remove cruft that we don't need, and move around stuff we want
+       rm "${ED}"/usr/{README,VERSION,{pkgconfig,config}_template,pkginfo} || 
die
+
+       dodir /usr/share
+       mv "${ED}"/usr/misc "${ED}"/usr/share/netpbm || die
+
+       doman userguide/*.[0-9]
+       dodoc README
+
+       cd doc || die
+       dodoc HISTORY Netpbm.programming USERDOC
+       docinto html
+       dodoc -r *.html
+
+       use doc && dodoc -r ../userguide/*.html
+}

Reply via email to