diff options
-rw-r--r-- | media-libs/netpbm/Manifest | 1 | ||||
-rw-r--r-- | media-libs/netpbm/files/netpbm-10.86.22-fix-ps-test.patch | 506 | ||||
-rw-r--r-- | media-libs/netpbm/netpbm-10.86.22.ebuild | 211 |
3 files changed, 718 insertions, 0 deletions
diff --git a/media-libs/netpbm/Manifest b/media-libs/netpbm/Manifest index be3d0a3dff35..ddc99b62a127 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 000000000000..e8876120a181 --- /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 <phillips@cs.ubc.ca> +- * 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 <phillips@cs.ubc.ca> ++ 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 000000000000..048c6e3162e1 --- /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 +} |