diff -ruN gd.orig/Makefile gd/Makefile --- gd.orig/Makefile Sat Jan 13 04:05:42 2007 +++ gd/Makefile Thu Feb 15 18:14:38 2007 @@ -6,14 +6,10 @@ # PORTNAME= gd -PORTVERSION= 2.0.33 -PORTREVISION?= 4 +PORTVERSION= 2.0.34 PORTEPOCH= 1 CATEGORIES+= graphics -MASTER_SITES= http://www.boutell.com/gd/http/ \ - ${MASTER_SITE_RINGSERVER} -MASTER_SITE_SUBDIR= graphics/gd -PKGNAMESUFFIX?= ${NOX11_SUFFIX}${PKGNAMESUFFIX2} +MASTER_SITES= http://www.libgd.org/releases/ MAINTAINER?= dinoex@FreeBSD.org COMMENT?= A graphics library for fast creation of images @@ -22,23 +18,45 @@ png.5:${PORTSDIR}/graphics/png \ freetype.9:${PORTSDIR}/print/freetype2 -MAKE_ENV= WRKSRC="${WRKSRC}" CC="${CC}" CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" -MAKEFILE= ${FILESDIR}/Makefile.bsd +USE_BZIP2= yes USE_LDCONFIG= yes -SCRIPTDIR= ${FILESDIR} -CPPFLAGS+= -DHAVE_FT2BUILD_H +GNU_CONFIGURE= yes + +CONFIGURE_ARGS=--program-transform-name="" + +.if !defined(SLAVEPORT) +OPTIONS= XPM "Turns on Xpm support" off \ + FONTCONFIG "Turns on Fontconfig support" on \ + ICONV "Turn on Iconv support" off +.endif .include -.if defined(WITH_XPM) && !defined(WITHOUT_X11) -USE_XPM= yes -CPPFLAGS+= -I${X11BASE}/include/X11 -I${X11BASE}/include -DHAVE_LIBXPM -LDFLAGS+= -L${X11BASE}/lib -lXpm -lX11 -LDFLAGS2= -L${PREFIX}/lib -L${LOCALBASE}/lib -L${X11BASE}/lib -FEATURES= GD_XPM GD_JPEG GD_FONTCONFIG GD_FREETYPE GD_GIF GD_PNG +.if defined(WITHOUT_X11) +CONFIGURE_ARGS+= --without-x +.else + +.if defined(WITH_XPM) +CONFIGURE_ARGS+= --with-xpm=${X11BASE} .else -LDFLAGS2= -L${PREFIX}/lib -L${LOCALBASE}/lib -FEATURES= GD_JPEG GD_FONTCONFIG GD_FREETYPE GD_GIF GD_PNG +CONFIGURE_ARGS+= --without-xpm +.endif + +.if defined(WITH_FONTCONFIG) +LIB_DEPENDS+= fontconfig.1:${PORTSDIR}/x11-fonts/fontconfig +CONFIGURE_ARGS+= --with-fontconfig=${X11BASE} +CPPFLAGS+= ${PTHREAD_CFLAGS} +LDFLAGS+= ${PTHREAD_LIBS} +.else +CONFIGURE_ARGS+= --without-fontconfig +.endif + +.endif + +.if defined(WITH_ICONV) +CONFIGURE_ARGS+= --with-libiconv-prefix={LOCALBASE} +.else +CONFIGURE_ARGS+= --without-libiconv-prefix .endif .if defined(GD_FONTS) @@ -46,33 +64,25 @@ SCRIPTS_ENV+= GD_FONTS="${GD_FONTS}" .endif -pre-everything:: +pre-patch: +.if defined(SLAVEPORT) @${ECHO_MSG} "" @${ECHO_MSG} "gd has the following tunables:" @${ECHO_MSG} "" @${ECHO_MSG} " WITH_XPM=yes Turns on Xpm support" + @${ECHO_MSG} " WITH_FONTCONFIG=yes Turns on Fontconfig support" + @${ECHO_MSG} " WITH_ICONV=yes Turns on iconv support" @${ECHO_MSG} "" +.endif -post-extract: - @${CP} ${FILESDIR}/g* ${WRKSRC} - -post-configure: - ${SED} -e 's|@libdir@|${PREFIX}/lib|' \ - -e 's|@includedir@|${PREFIX}/include|' \ - -e 's|@VERSION@|${PORTVERSION}|' \ - -e 's|@GDLIB_MAJOR@|${PORTVERSION:C/([0-9]*).*/\1/1}|' \ - -e 's|@GDLIB_MINOR@|${PORTVERSION:C/[0-9]*[.]([0-9]).*/\1/1}|' \ - -e 's|@GDLIB_REVISION@|${PORTVERSION:C/.*[.]([0-9]*)/\1/1}|' \ - -e 's|@LDFLAGS@|${LDFLAGS2}|' \ - -e 's|@LIBS@|-lgd|' \ - -e 's|@FEATURES@|${FEATURES}|' \ - ${WRKSRC}/config/gdlib-config.in \ - > ${WRKDIR}/gdlib-config +post-patch: +.if defined(GD_FONTS) + @ ${CP} ${FILESDIR}/regen-fonts.sh ${WRKDIR} + @ ${CHMOD} a+x ${WRKDIR}/regen-fonts.sh + @ ${SETENV} GD_FONTS="${GD_FONTS}" WRKSRC="${WRKSRC}" ${WRKDIR}/regen-fonts.sh +.endif post-install: - ${INSTALL_DATA} ${WRKSRC}/gdfx.h ${WRKSRC}/gdhelpers.h \ - ${PREFIX}/include/ - ${INSTALL_SCRIPT} ${WRKDIR}/gdlib-config ${PREFIX}/bin/ .if !defined(NOPORTDOCS) @${MKDIR} ${DOCSDIR} ${INSTALL_DATA} ${WRKSRC}/index.html ${DOCSDIR} diff -ruN gd.orig/distinfo gd/distinfo --- gd.orig/distinfo Sun Nov 13 02:26:36 2005 +++ gd/distinfo Fri Feb 9 17:45:56 2007 @@ -1,3 +1,3 @@ -MD5 (gd-2.0.33.tar.gz) = be0a6d326cd8567e736fbc75df0a5c45 -SHA256 (gd-2.0.33.tar.gz) = 2ba10c830e24781ec2e0594c6e49353e512e8bda782bc9a1851e70a5e8ced93e -SIZE (gd-2.0.33.tar.gz) = 587617 +MD5 (gd-2.0.34.tar.bz2) = 8c25c322f12030b1c24488efd577fec0 +SHA256 (gd-2.0.34.tar.bz2) = 66baa531a860ca3e071d47eec7c0823c534a8a4dadf4cba6d17eeb6d4159d22f +SIZE (gd-2.0.34.tar.bz2) = 1135372 diff -ruN gd.orig/files/Makefile.bsd gd/files/Makefile.bsd --- gd.orig/files/Makefile.bsd Sun Dec 18 03:30:10 2005 +++ gd/files/Makefile.bsd Wed Dec 31 17:00:00 1969 @@ -1,54 +0,0 @@ -PROGS!= ${MAKE} -V BIN_PROGRAMS -f ${WRKSRC}/makefile.sample -PROGS+= gd2togif gdcmpgif giftogd2 -PROGS+= annotate # new utility, not included in makefile.sample -TESTS= gdtest gddemo gd2time gdtestft testac fontsizetest fontwheeltest -SRCS= gd.c gd_gd.c gd_gd2.c gd_io.c gd_io_dp.c gd_io_file.c \ - gd_io_ss.c gd_jpeg.c gd_png.c gd_ss.c gd_topal.c \ - gd_wbmp.c gdcache.c gdfontg.c gdfontl.c gdfontmb.c \ - gdfonts.c gdfontt.c gdft.c gdfx.c gdhelpers.c gdhelpers.h \ - gdkanji.c gdtables.c gdxpm.c jisx0208.h \ - gd_security.c \ - wbmp.c wbmp.h -SRCS+= gd_gif_in.c gd_gif_out.c gd_biggif_out.c gd_lzw_out.c -MAKEDIR=/usr/share/mk -LIB=gd -SHLIB_MAJOR=4 -SHLIB_MINOR=0 -INCS= gd.h gd_io.h gdcache.h gdfontg.h gdfontl.h gdfontmb.h \ - gdfonts.h gdfontt.h entities.h -SHLIB_NAME!= ${MAKE} -V SHLIB_NAME LIB=${LIB} \ - SHLIB_MAJOR=${SHLIB_MAJOR} SHLIB_MINOR=${SHLIB_MINOR} -f ${MAKEDIR}/bsd.lib.mk - -CFLAGS+= -I${.CURDIR} -I${LOCALBASE}/include/freetype2/freetype \ - -I${LOCALBASE}/include/freetype2 -I${LOCALBASE}/include \ - -DHAVE_LIBPNG -DHAVE_LIBJPEG -DHAVE_LIBFREETYPE -DHAVE_LIBZ \ - ${CPPFLAGS} -LDADD= -L${LOCALBASE}/lib -lpng -lz -ljpeg -lfreetype -lm \ - ${LDFLAGS} - -# The package comes with tests, but without any sort of test-harness, -# to run them all automaticly. So building tests is disabled here. -mi -all: lib${LIB}.a ${SHLIB_NAME} ${PROGS} # ${TESTS} - -lib${LIB}.a ${SHLIB_NAME}: ${SRCS} - ${MAKE} LIB=${LIB} SRCS="${SRCS}" \ - SHLIB_MAJOR=${SHLIB_MAJOR} SHLIB_MINOR=${SHLIB_MINOR} \ - CFLAGS="${CFLAGS}" -ECFLAGS LDADD="${LDADD}" \ - -f ${MAKEDIR}/bsd.lib.mk ${.TARGET} - -${PROGS} ${TESTS}: ${SHLIB_NAME} lib${LIB}.a - ${MAKE} PROG=${.TARGET} NOMAN=1 LDADD="-L${.CURDIR} -lgd" \ - CFLAGS="${CFLAGS}" -ECFLAGS -f ${MAKEDIR}/bsd.prog.mk - -install: - mkdir -p ${PREFIX}/include - ${MAKE} LIB=${LIB} LIBDIR=${PREFIX}/lib NOPROFILE=true \ - SHLIB_MAJOR=${SHLIB_MAJOR} SHLIB_MINOR=${SHLIB_MINOR} \ - -f ${MAKEDIR}/bsd.lib.mk install - cd ${.CURDIR} && ${BSD_INSTALL_DATA} ${INCS} ${PREFIX}/include - cd ${.CURDIR} && ${BSD_INSTALL_PROGRAM} ${PROGS} ${PREFIX}/bin/ - ${BSD_INSTALL_SCRIPT} ${.CURDIR}/bdftogd ${PREFIX}/bin/ - -.if exists(${.CURDIR}/Makefile.fonts) -.include "Makefile.fonts" -.endif diff -ruN gd.orig/files/configure gd/files/configure --- gd.orig/files/configure Tue Jan 13 23:14:42 2004 +++ gd/files/configure Wed Dec 31 17:00:00 1969 @@ -1,44 +0,0 @@ -#!/bin/sh -# $FreeBSD: ports/graphics/gd/files/configure,v 1.1 2004/01/14 06:14:42 dinoex Exp $ - -# The GD_FONTS environment variable can be set to specify the gzipped -# tar-ball containing the fonts in bdf format and the bdf file names. -# -# For example: -# GD_FONTS="/usr/ports/distfiles/x-koi8u.tgz koi6x10.bdf koi8x13.bdf \ -# koi9x15.bdf koi12x24.bdf koi10x20.bdf" -# -# This can be usefull for slave ports, like ukrainian/gd, which may -# now provide alternative fonts easily. - -# TODO: . handle multiple archiving formats: tgz, tar.bz2, zip -# . allow for passing already extracted font-files - -if [ -z "$GD_FONTS" ] -then - echo "GD_FONTS can be set to specify an alternative list of .bdf files" - echo "See $0 for details..." - exit 0 -fi - -set $GD_FONTS -# -# The tarball is the first argument, the tiny, small, medium-bold, -# large, and giant fonts follow. -# - -tarball=$1 -shift -tar -xvzpf $tarball -C $WRKSRC $@ - -rm -f $WRKSRC/Makefile.fonts - -for font in Tiny Small MediumBold Large Giant -do - f=`echo $font | tr -d [[:lower:]] | tr [[:upper:]] [[:lower:]]` - rm -f $WRKSRC/gdfont$f.[ch] - printf 'gdfont%s.c gdfont%s.h: %s\ - perl ${.CURDIR}/bdftogd gdFont%s font%s < %s\n' \ - $f $f $1 $font $f $1 >> $WRKSRC/Makefile.fonts - shift -done diff -ruN gd.orig/files/gd_biggif_out.c gd/files/gd_biggif_out.c --- gd.orig/files/gd_biggif_out.c Mon Aug 18 10:15:06 2003 +++ gd/files/gd_biggif_out.c Wed Dec 31 17:00:00 1969 @@ -1,823 +0,0 @@ -#include -#include -#include -#include -#include "gd.h" - -/* -** Wrapper functions for this module. -*/ - -void gdImageBigGif(gdImagePtr im, FILE *outFile) -{ - gdIOCtx *out = gdNewFileCtx(outFile); - gdImageBigGifCtx(im, out); - out->gd_free(out); -} - -void* gdImageBigGifPtr(gdImagePtr im, int *size) -{ - void *rv; - gdIOCtx *out = gdNewDynamicCtx(2048, NULL); - gdImageBigGifCtx(im, out); - rv = gdDPExtractData(out,size); - out->gd_free(out); - return rv; -} - -/* Code drawn from ppmtogif.c, from the pbmplus package -** -** Based on GIFENCOD by David Rowley . A -** Lempel-Zim compression based on "compress". -** -** Modified by Marcel Wijkstra -** -** Copyright (C) 1989 by Jef Poskanzer. -** -** Permission to use, copy, modify, and distribute this software and its -** documentation for any purpose and without fee is hereby granted, provided -** that the above copyright notice appear in all copies and that both that -** copyright notice and this permission notice appear in supporting -** documentation. This software is provided "as is" without express or -** implied warranty. -** -** The Graphics Interchange Format(c) is the Copyright property of -** CompuServe Incorporated. GIF(sm) is a Service Mark property of -** CompuServe Incorporated. -* -* Heavily modified by Mouse, 1998-02-12. -* Remove LZW compression. -* Added miGIF run length compression. -* -*/ - -/* - * a code_int must be able to hold 2**GIFBITS values of type int, and also -1 - */ -typedef int code_int; - -static int colorstobpp(int colors); -static void BumpPixel (void); -static int GIFNextPixel (gdImagePtr im); -static void GIFEncode (gdIOCtx *fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im); -/*static void Putword (int w, gdIOCtx *fp); */ -static void GIFcompress (int, gdIOCtx *, gdImagePtr, int); -static void output (code_int code); - -/* UNUSED -* static void char_init (void); -* static void char_out (int c); -*/ - -/* Allows for reuse */ -static void init_statics(void); - -void gdImageBigGifCtx(gdImagePtr im, gdIOCtx *out) -{ - int interlace, transparent, BitsPerPixel; - - interlace = im->interlace; - transparent = im->transparent; - - BitsPerPixel = colorstobpp(im->colorsTotal); - /* Clear any old values in statics strewn through the GIF code */ - init_statics(); - /* All set, let's do it. */ - GIFEncode( - out, im->sx, im->sy, interlace, 0, transparent, BitsPerPixel, - im->red, im->green, im->blue, im); -} - -static int -colorstobpp(int colors) -{ - int bpp = 0; - - if ( colors <= 2 ) - bpp = 1; - else if ( colors <= 4 ) - bpp = 2; - else if ( colors <= 8 ) - bpp = 3; - else if ( colors <= 16 ) - bpp = 4; - else if ( colors <= 32 ) - bpp = 5; - else if ( colors <= 64 ) - bpp = 6; - else if ( colors <= 128 ) - bpp = 7; - else if ( colors <= 256 ) - bpp = 8; - return bpp; - } - -/***************************************************************************** - * - * GIFENCODE.C - GIF Image compression interface - * - * GIFEncode( FName, GHeight, GWidth, GInterlace, Background, Transparent, - * BitsPerPixel, Red, Green, Blue, gdImagePtr ) - * - *****************************************************************************/ - -#define TRUE 1 -#define FALSE 0 - -static int Width, Height; -static int curx, cury; -static long CountDown; -static int Pass = 0; -static int Interlace; - -/* - * Bump the 'curx' and 'cury' to point to the next pixel - */ -static void -BumpPixel(void) -{ - /* - * Bump the current X position - */ - ++curx; - - /* - * If we are at the end of a scan line, set curx back to the beginning - * If we are interlaced, bump the cury to the appropriate spot, - * otherwise, just increment it. - */ - if( curx == Width ) { - curx = 0; - - if( !Interlace ) - ++cury; - else { - switch( Pass ) { - - case 0: - cury += 8; - if( cury >= Height ) { - ++Pass; - cury = 4; - } - break; - - case 1: - cury += 8; - if( cury >= Height ) { - ++Pass; - cury = 2; - } - break; - - case 2: - cury += 4; - if( cury >= Height ) { - ++Pass; - cury = 1; - } - break; - - case 3: - cury += 2; - break; - } - } - } -} - -/* - * Return the next pixel from the image - */ -static int -GIFNextPixel(gdImagePtr im) -{ - int r; - - if( CountDown == 0 ) - return EOF; - - --CountDown; - - r = gdImageGetPixel(im, curx, cury); - - BumpPixel(); - - return r; -} - -/* public */ - -static void -GIFEncode(gdIOCtx *fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im) -{ - int B; - int RWidth, RHeight; - int LeftOfs, TopOfs; - int Resolution; - int ColorMapSize; - int InitCodeSize; - int i; - - Interlace = GInterlace; - - ColorMapSize = 1 << BitsPerPixel; - - RWidth = Width = GWidth; - RHeight = Height = GHeight; - LeftOfs = TopOfs = 0; - - Resolution = BitsPerPixel; - - /* - * Calculate number of bits we are expecting - */ - CountDown = (long)Width * (long)Height; - - /* - * Indicate which pass we are on (if interlace) - */ - Pass = 0; - - /* - * The initial code size - */ - if( BitsPerPixel <= 1 ) - InitCodeSize = 2; - else - InitCodeSize = BitsPerPixel; - - /* - * Set up the current x and y position - */ - curx = cury = 0; - - /* - * Write the Magic header - */ - gdPutBuf( Transparent < 0 ? "GIF87a" : "GIF89a", 6, fp ); - - /* - * Write out the screen width and height - */ - Putword( RWidth, fp ); - Putword( RHeight, fp ); - - /* - * Indicate that there is a global colour map - */ - B = 0x80; /* Yes, there is a color map */ - - /* - * OR in the resolution - */ - B |= (Resolution - 1) << 4; - - /* - * OR in the Bits per Pixel - */ - B |= (BitsPerPixel - 1); - - /* - * Write it out - */ - gdPutC( B, fp ); - - /* - * Write out the Background colour - */ - gdPutC( Background, fp ); - - /* - * Byte of 0's (future expansion) - */ - gdPutC( 0, fp ); - - /* - * Write out the Global Colour Map - */ - for( i=0; i= 0 ) { - gdPutC( '!', fp ); - gdPutC( 0xf9, fp ); - gdPutC( 4, fp ); - gdPutC( 1, fp ); - gdPutC( 0, fp ); - gdPutC( 0, fp ); - gdPutC( (unsigned char) Transparent, fp ); - gdPutC( 0, fp ); - } - - /* - * Write an Image separator - */ - gdPutC( ',', fp ); - - /* - * Write the Image header - */ - - Putword( LeftOfs, fp ); - Putword( TopOfs, fp ); - Putword( Width, fp ); - Putword( Height, fp ); - - /* - * Write out whether or not the image is interlaced - */ - if( Interlace ) - gdPutC( 0x40, fp ); - else - gdPutC( 0x00, fp ); - - /* - * Write out the initial code size - */ - gdPutC( InitCodeSize, fp ); - - /* - * Go and actually compress the data - */ - GIFcompress( InitCodeSize+1, fp, im, Background ); - - /* - * Write out a Zero-length packet (to end the series) - */ - gdPutC( 0, fp ); - - /* - * Write the GIF file terminator - */ - gdPutC( ';', fp ); -} - -/* Write out a word to the GIF file */ -/*static void */ -/*Putword(int w, gdIOCtx *fp) */ -/*{ */ -/* fputc( w & 0xff, fp ); */ -/* fputc( (w / 256) & 0xff, fp ); */ -/*} */ - -#define GIFBITS 12 - -/*----------------------------------------------------------------------- - * - * miGIF Compression - mouse and ivo's GIF-compatible compression - * - * -run length encoding compression routines- - * - * Copyright (C) 1998 Hutchison Avenue Software Corporation - * http://www.hasc.com - * info@hasc.com - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation. This software is provided "AS IS." The Hutchison Avenue - * Software Corporation disclaims all warranties, either express or implied, - * including but not limited to implied warranties of merchantability and - * fitness for a particular purpose, with respect to this code and accompanying - * documentation. - * - * The miGIF compression routines do not, strictly speaking, generate files - * conforming to the GIF spec, since the image data is not LZW-compressed - * (this is the point: in order to avoid transgression of the Unisys patent - * on the LZW algorithm.) However, miGIF generates data streams that any - * reasonably sane LZW decompresser will decompress to what we want. - * - * miGIF compression uses run length encoding. It compresses horizontal runs - * of pixels of the same color. This type of compression gives good results - * on images with many runs, for example images with lines, text and solid - * shapes on a solid-colored background. It gives little or no compression - * on images with few runs, for example digital or scanned photos. - * - * der Mouse - * mouse@rodents.montreal.qc.ca - * 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B - * - * ivo@hasc.com - * - * The Graphics Interchange Format(c) is the Copyright property of - * CompuServe Incorporated. GIF(sm) is a Service Mark property of - * CompuServe Incorporated. - * - */ - -static int rl_pixel; -static int rl_basecode; -static int rl_count; -static int rl_table_pixel; -static int rl_table_max; -static int just_cleared; -static int out_bits; -static int out_bits_init; -static int out_count; -static int out_bump; -static int out_bump_init; -static int out_clear; -static int out_clear_init; -static int max_ocodes; -static int code_clear; -static int code_eof; -static unsigned int obuf; -static int obits; -static gdIOCtx *ofile; -static unsigned char oblock[256]; -static int oblen; - -/* Used only when debugging GIF compression code */ -/* #define DEBUGGING_ENVARS */ - -#ifdef DEBUGGING_ENVARS - -static int verbose_set = 0; -static int verbose; -#define VERBOSE (verbose_set?verbose:set_verbose()) - -static int set_verbose(void) -{ - verbose = !!getenv("GIF_VERBOSE"); - verbose_set = 1; - return(verbose); -} - -#else - -#define VERBOSE 0 - -#endif - - -static const char *binformat(unsigned int v, int nbits) -{ - static char bufs[8][64]; - static int bhand = 0; - unsigned int bit; - int bno; - char *bp; - - bhand --; - if (bhand < 0) bhand = (sizeof(bufs)/sizeof(bufs[0]))-1; - bp = &bufs[bhand][0]; - for (bno=nbits-1,bit=1U<=0;bno--,bit>>=1) - { *bp++ = (v & bit) ? '1' : '0'; - if (((bno&3) == 0) && (bno != 0)) *bp++ = '.'; - } - *bp = '\0'; - return(&bufs[bhand][0]); -} - -static void write_block(void) -{ - int i; - - if (VERBOSE) - { printf("write_block %d:",oblen); - for (i=0;i= 255) write_block(); -} - -static void block_flush(void) -{ - if (VERBOSE) printf("block_flush\n"); - if (oblen > 0) write_block(); -} - -static void output(int val) -{ - if (VERBOSE) printf("output %s [%s %d %d]\n",binformat(val,out_bits),binformat(obuf,obits),obits,out_bits); - obuf |= val << obits; - obits += out_bits; - while (obits >= 8) - { block_out(obuf&0xff); - obuf >>= 8; - obits -= 8; - } - if (VERBOSE) printf("output leaving [%s %d]\n",binformat(obuf,obits),obits); -} - -static void output_flush(void) -{ - if (VERBOSE) printf("output_flush\n"); - if (obits > 0) block_out(obuf); - block_flush(); -} - -static void did_clear(void) -{ - if (VERBOSE) printf("did_clear\n"); - out_bits = out_bits_init; - out_bump = out_bump_init; - out_clear = out_clear_init; - out_count = 0; - rl_table_max = 0; - just_cleared = 1; -} - -static void output_plain(int c) -{ - if (VERBOSE) printf("output_plain %s\n",binformat(c,out_bits)); - just_cleared = 0; - output(c); - out_count ++; - if (out_count >= out_bump) - { out_bits ++; - out_bump += 1 << (out_bits - 1); - } - if (out_count >= out_clear) - { output(code_clear); - did_clear(); - } -} - -static unsigned int isqrt(unsigned int x) -{ - unsigned int r; - unsigned int v; - - if (x < 2) return(x); - for (v=x,r=1;v;v>>=2,r<<=1) ; - while (1) - { v = ((x / r) + r) / 2; - if ((v == r) || (v == r+1)) return(r); - r = v; - } -} - -static unsigned int compute_triangle_count(unsigned int count, unsigned int nrepcodes) -{ - unsigned int perrep; - unsigned int cost; - - cost = 0; - perrep = (nrepcodes * (nrepcodes+1)) / 2; - while (count >= perrep) - { cost += nrepcodes; - count -= perrep; - } - if (count > 0) - { unsigned int n; - n = isqrt(count); - while ((n*(n+1)) >= 2*count) n --; - while ((n*(n+1)) < 2*count) n ++; - cost += n; - } - return(cost); -} - -static void max_out_clear(void) -{ - out_clear = max_ocodes; -} - -static void reset_out_clear(void) -{ - out_clear = out_clear_init; - if (out_count >= out_clear) - { output(code_clear); - did_clear(); - } -} - -static void rl_flush_fromclear(int count) -{ - int n; - - if (VERBOSE) printf("rl_flush_fromclear %d\n",count); - max_out_clear(); - rl_table_pixel = rl_pixel; - n = 1; - while (count > 0) - { if (n == 1) - { rl_table_max = 1; - output_plain(rl_pixel); - count --; - } - else if (count >= n) - { rl_table_max = n; - output_plain(rl_basecode+n-2); - count -= n; - } - else if (count == 1) - { rl_table_max ++; - output_plain(rl_pixel); - count = 0; - } - else - { rl_table_max ++; - output_plain(rl_basecode+count-2); - count = 0; - } - if (out_count == 0) n = 1; else n ++; - } - reset_out_clear(); - if (VERBOSE) printf("rl_flush_fromclear leaving table_max=%d\n",rl_table_max); -} - -static void rl_flush_clearorrep(int count) -{ - int withclr; - - if (VERBOSE) printf("rl_flush_clearorrep %d\n",count); - withclr = 1 + compute_triangle_count(count,max_ocodes); - if (withclr < count) - { output(code_clear); - did_clear(); - rl_flush_fromclear(count); - } - else - { for (;count>0;count--) output_plain(rl_pixel); - } -} - -static void rl_flush_withtable(int count) -{ - int repmax; - int repleft; - int leftover; - - if (VERBOSE) printf("rl_flush_withtable %d\n",count); - repmax = count / rl_table_max; - leftover = count % rl_table_max; - repleft = (leftover ? 1 : 0); - if (out_count+repmax+repleft > max_ocodes) - { repmax = max_ocodes - out_count; - leftover = count - (repmax * rl_table_max); - repleft = 1 + compute_triangle_count(leftover,max_ocodes); - } - if (VERBOSE) printf("rl_flush_withtable repmax=%d leftover=%d repleft=%d\n",repmax,leftover,repleft); - if (1+compute_triangle_count(count,max_ocodes) < repmax+repleft) - { output(code_clear); - did_clear(); - rl_flush_fromclear(count); - return; - } - max_out_clear(); - for (;repmax>0;repmax--) output_plain(rl_basecode+rl_table_max-2); - if (leftover) - { if (just_cleared) - { rl_flush_fromclear(leftover); - } - else if (leftover == 1) - { output_plain(rl_pixel); - } - else - { output_plain(rl_basecode+leftover-2); - } - } - reset_out_clear(); -} - -static void rl_flush(void) -{ - /* UNUSED int table_reps; */ - /* UNUSED int table_extra; */ - - if (VERBOSE) printf("rl_flush [ %d %d\n",rl_count,rl_pixel); - if (rl_count == 1) - { output_plain(rl_pixel); - rl_count = 0; - if (VERBOSE) printf("rl_flush ]\n"); - return; - } - if (just_cleared) - { rl_flush_fromclear(rl_count); - } - else if ((rl_table_max < 2) || (rl_table_pixel != rl_pixel)) - { rl_flush_clearorrep(rl_count); - } - else - { rl_flush_withtable(rl_count); - } - if (VERBOSE) printf("rl_flush ]\n"); - rl_count = 0; -} - -static void GIFcompress(int init_bits, gdIOCtx *outfile, gdImagePtr im, int background) -{ - int c; - - ofile = outfile; - obuf = 0; - obits = 0; - oblen = 0; - code_clear = 1 << (init_bits - 1); - code_eof = code_clear + 1; - rl_basecode = code_eof + 1; - out_bump_init = (1 << (init_bits - 1)) - 1; - /* for images with a lot of runs, making out_clear_init larger will - give better compression. */ - out_clear_init = (init_bits <= 3) ? 9 : (out_bump_init-1); -#ifdef DEBUGGING_ENVARS - { const char *ocienv; - ocienv = getenv("GIF_OUT_CLEAR_INIT"); - if (ocienv) - { out_clear_init = atoi(ocienv); - if (VERBOSE) printf("[overriding out_clear_init to %d]\n",out_clear_init); - } - } -#endif - out_bits_init = init_bits; - max_ocodes = (1 << GIFBITS) - ((1 << (out_bits_init - 1)) + 3); - did_clear(); - output(code_clear); - rl_count = 0; - while (1) - { c = GIFNextPixel(im); - if ((rl_count > 0) && (c != rl_pixel)) rl_flush(); - if (c == EOF) break; - if (rl_pixel == c) - { rl_count ++; - } - else - { rl_pixel = c; - rl_count = 1; - } - } - output(code_eof); - output_flush(); -} - -/*----------------------------------------------------------------------- - * - * End of miGIF section - See copyright notice at start of section. - * - *----------------------------------------------------------------------- -*/ - -/****************************************************************************** - * - * GIF Specific routines - * - ******************************************************************************/ - -/* - * Number of characters so far in this 'packet' - */ -static int a_count; - -/* - * Set up the 'byte output' routine - */ - -/* UNUSED -* static void -* char_init(void) -* { -* a_count = 0; -* } -*/ - -/* - * Define the storage for the packet accumulator - */ - -/* UNUSED static char accum[ 256 ]; */ - -static void init_statics(void) { - /* Some of these are properly initialized later. What I'm doing - here is making sure code that depends on C's initialization - of statics doesn't break when the code gets called more - than once. */ - Width = 0; - Height = 0; - curx = 0; - cury = 0; - CountDown = 0; - Pass = 0; - Interlace = 0; - a_count = 0; -} - - -/* +-------------------------------------------------------------------+ */ -/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ -/* | Permission to use, copy, modify, and distribute this software | */ -/* | and its documentation for any purpose and without fee is hereby | */ -/* | granted, provided that the above copyright notice appear in all | */ -/* | copies and that both that copyright notice and this permission | */ -/* | notice appear in supporting documentation. This software is | */ -/* | provided "as is" without express or implied warranty. | */ -/* +-------------------------------------------------------------------+ */ - diff -ruN gd.orig/files/gd_lzw_out.c gd/files/gd_lzw_out.c --- gd.orig/files/gd_lzw_out.c Mon Aug 18 10:15:06 2003 +++ gd/files/gd_lzw_out.c Wed Dec 31 17:00:00 1969 @@ -1,795 +0,0 @@ -#include -#include -#include -#include -#include "gd.h" - -/* Code drawn from ppmtogif.c, from the pbmplus package -** -** Based on GIFENCOD by David Rowley . A -** Lempel-Zim compression based on "compress". -** -** Modified by Marcel Wijkstra -** -** Copyright (C) 1989 by Jef Poskanzer. -** -** Permission to use, copy, modify, and distribute this software and its -** documentation for any purpose and without fee is hereby granted, provided -** that the above copyright notice appear in all copies and that both that -** copyright notice and this permission notice appear in supporting -** documentation. This software is provided "as is" without express or -** implied warranty. -** -** The Graphics Interchange Format(c) is the Copyright property of -** CompuServe Incorporated. GIF(sm) is a Service Mark property of -** CompuServe Incorporated. -*/ - -/* - * a code_int must be able to hold 2**GIFBITS values of type int, and also -1 - */ -typedef int code_int; - -#ifdef SIGNED_COMPARE_SLOW -typedef unsigned long int count_int; -typedef unsigned short int count_short; -#else /*SIGNED_COMPARE_SLOW*/ -typedef long int count_int; -#endif /*SIGNED_COMPARE_SLOW*/ - -static int colorstobpp(int colors); -static void BumpPixel (void); -static int GIFNextPixel (gdImagePtr im); -static void GIFEncode (gdIOCtx *fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im); -/*static void Putword (int w, gdIOCtx *fp); */ -static void compress (int init_bits, gdIOCtx *outfile, gdImagePtr im); -static void output (code_int code); -static void cl_block (void); -static void cl_hash (register count_int hsize); -static void char_init (void); -static void char_out (int c); -static void flush_char (void); -/* Allows for reuse */ -static void init_statics(void); - -void gdImageLzwCtx(gdImagePtr im, gdIOCtx *out) -{ - int interlace, transparent, BitsPerPixel; - - interlace = im->interlace; - transparent = im->transparent; - - BitsPerPixel = colorstobpp(im->colorsTotal); - /* Clear any old values in statics strewn through the GIF code */ - init_statics(); - /* All set, let's do it. */ - GIFEncode( - out, im->sx, im->sy, interlace, 0, transparent, BitsPerPixel, - im->red, im->green, im->blue, im); -} - -void gdImageLzw(gdImagePtr im, FILE *outFile) -{ - gdIOCtx *out = gdNewFileCtx(outFile); - gdImageLzwCtx(im, out); - out->gd_free(out); -} - -void* gdImageLzwPtr(gdImagePtr im, int *size) -{ - void *rv; - gdIOCtx *out = gdNewDynamicCtx(2048, NULL); - gdImageLzwCtx(im, out); - rv = gdDPExtractData(out,size); - out->gd_free(out); - return rv; -} - - - -static int -colorstobpp(int colors) -{ - int bpp = 0; - - if ( colors <= 2 ) - bpp = 1; - else if ( colors <= 4 ) - bpp = 2; - else if ( colors <= 8 ) - bpp = 3; - else if ( colors <= 16 ) - bpp = 4; - else if ( colors <= 32 ) - bpp = 5; - else if ( colors <= 64 ) - bpp = 6; - else if ( colors <= 128 ) - bpp = 7; - else if ( colors <= 256 ) - bpp = 8; - return bpp; - } - -/***************************************************************************** - * - * GIFENCODE.C - GIF Image compression interface - * - * GIFEncode( FName, GHeight, GWidth, GInterlace, Background, Transparent, - * BitsPerPixel, Red, Green, Blue, gdImagePtr ) - * - *****************************************************************************/ - -#define TRUE 1 -#define FALSE 0 - -static int Width, Height; -static int curx, cury; -static long CountDown; -static int Pass = 0; -static int Interlace; - -/* - * Bump the 'curx' and 'cury' to point to the next pixel - */ -static void -BumpPixel(void) -{ - /* - * Bump the current X position - */ - ++curx; - - /* - * If we are at the end of a scan line, set curx back to the beginning - * If we are interlaced, bump the cury to the appropriate spot, - * otherwise, just increment it. - */ - if( curx == Width ) { - curx = 0; - - if( !Interlace ) - ++cury; - else { - switch( Pass ) { - - case 0: - cury += 8; - if( cury >= Height ) { - ++Pass; - cury = 4; - } - break; - - case 1: - cury += 8; - if( cury >= Height ) { - ++Pass; - cury = 2; - } - break; - - case 2: - cury += 4; - if( cury >= Height ) { - ++Pass; - cury = 1; - } - break; - - case 3: - cury += 2; - break; - } - } - } -} - -/* - * Return the next pixel from the image - */ -static int -GIFNextPixel(gdImagePtr im) -{ - int r; - - if( CountDown == 0 ) - return EOF; - - --CountDown; - - r = gdImageGetPixel(im, curx, cury); - - BumpPixel(); - - return r; -} - -/* public */ - -static void -GIFEncode(gdIOCtx *fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im) -{ - int B; - int RWidth, RHeight; - int LeftOfs, TopOfs; - int Resolution; - int ColorMapSize; - int InitCodeSize; - int i; - - Interlace = GInterlace; - - ColorMapSize = 1 << BitsPerPixel; - - RWidth = Width = GWidth; - RHeight = Height = GHeight; - LeftOfs = TopOfs = 0; - - Resolution = BitsPerPixel; - - /* - * Calculate number of bits we are expecting - */ - CountDown = (long)Width * (long)Height; - - /* - * Indicate which pass we are on (if interlace) - */ - Pass = 0; - - /* - * The initial code size - */ - if( BitsPerPixel <= 1 ) - InitCodeSize = 2; - else - InitCodeSize = BitsPerPixel; - - /* - * Set up the current x and y position - */ - curx = cury = 0; - - /* - * Write the Magic header - */ - gdPutBuf( Transparent < 0 ? "GIF87a" : "GIF89a", 6, fp ); - - /* - * Write out the screen width and height - */ - Putword( RWidth, fp ); - Putword( RHeight, fp ); - - /* - * Indicate that there is a global colour map - */ - B = 0x80; /* Yes, there is a color map */ - - /* - * OR in the resolution - */ - B |= (Resolution - 1) << 5; - - /* - * OR in the Bits per Pixel - */ - B |= (BitsPerPixel - 1); - - /* - * Write it out - */ - gdPutC( B, fp ); - - /* - * Write out the Background colour - */ - gdPutC( Background, fp ); - - /* - * Byte of 0's (future expansion) - */ - gdPutC( 0, fp ); - - /* - * Write out the Global Colour Map - */ - for( i=0; i= 0 ) { - gdPutC( '!', fp ); - gdPutC( 0xf9, fp ); - gdPutC( 4, fp ); - gdPutC( 1, fp ); - gdPutC( 0, fp ); - gdPutC( 0, fp ); - gdPutC( (unsigned char) Transparent, fp ); - gdPutC( 0, fp ); - } - - /* - * Write an Image separator - */ - gdPutC( ',', fp ); - - /* - * Write the Image header - */ - - Putword( LeftOfs, fp ); - Putword( TopOfs, fp ); - Putword( Width, fp ); - Putword( Height, fp ); - - /* - * Write out whether or not the image is interlaced - */ - if( Interlace ) - gdPutC( 0x40, fp ); - else - gdPutC( 0x00, fp ); - - /* - * Write out the initial code size - */ - gdPutC( InitCodeSize, fp ); - - /* - * Go and actually compress the data - */ - compress( InitCodeSize+1, fp, im ); - - /* - * Write out a Zero-length packet (to end the series) - */ - gdPutC( 0, fp ); - - /* - * Write the GIF file terminator - */ - gdPutC( ';', fp ); -} - -/* */ -/* * Write out a word to the GIF file */ -/* */ -/*static void */ -/*Putword(int w, FILE *fp) */ -/*{ */ -/* fputc( w & 0xff, fp ); */ -/* fputc( (w / 256) & 0xff, fp ); */ -/*} */ - - -/*************************************************************************** - * - * GIFCOMPR.C - GIF Image compression routines - * - * Lempel-Ziv compression based on 'compress'. GIF modifications by - * David Rowley (mgardi@watdcsu.waterloo.edu) - * - ***************************************************************************/ - -/* - * General DEFINEs - */ - -#define GIFBITS 12 - -#define HSIZE 5003 /* 80% occupancy */ - -#ifdef NO_UCHAR - typedef char char_type; -#else /*NO_UCHAR*/ - typedef unsigned char char_type; -#endif /*NO_UCHAR*/ - -/* - * - * GIF Image compression - modified 'compress' - * - * Based on: compress.c - File compression ala IEEE Computer, June 1984. - * - * By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas) - * Jim McKie (decvax!mcvax!jim) - * Steve Davies (decvax!vax135!petsd!peora!srd) - * Ken Turkowski (decvax!decwrl!turtlevax!ken) - * James A. Woods (decvax!ihnp4!ames!jaw) - * Joe Orost (decvax!vax135!petsd!joe) - * - */ -#include - -#define ARGVAL() (*++(*argv) || (--argc && *++argv)) - -static int n_bits; /* number of bits/code */ -static int maxbits = GIFBITS; /* user settable max # bits/code */ -static code_int maxcode; /* maximum code, given n_bits */ -static code_int maxmaxcode = (code_int)1 << GIFBITS; /* should NEVER generate this code */ -#ifdef COMPATIBLE /* But wrong! */ -# define MAXCODE(n_bits) ((code_int) 1 << (n_bits) - 1) -#else /*COMPATIBLE*/ -# define MAXCODE(n_bits) (((code_int) 1 << (n_bits)) - 1) -#endif /*COMPATIBLE*/ - -static count_int htab [HSIZE]; -static unsigned short codetab [HSIZE]; -#define HashTabOf(i) htab[i] -#define CodeTabOf(i) codetab[i] - -static code_int hsize = HSIZE; /* for dynamic table sizing */ - -/* - * To save much memory, we overlay the table used by compress() with those - * used by decompress(). The tab_prefix table is the same size and type - * as the codetab. The tab_suffix table needs 2**GIFBITS characters. We - * get this from the beginning of htab. The output stack uses the rest - * of htab, and contains characters. There is plenty of room for any - * possible stack (stack used to be 8000 characters). - */ - -#define tab_prefixof(i) CodeTabOf(i) -#define tab_suffixof(i) ((char_type*)(htab))[i] -#define de_stack ((char_type*)&tab_suffixof((code_int)1< 0 ) - goto probe; -nomatch: - output ( (code_int) ent ); - ++out_count; - ent = c; -#ifdef SIGNED_COMPARE_SLOW - if ( (unsigned) free_ent < (unsigned) maxmaxcode) { -#else /*SIGNED_COMPARE_SLOW*/ - if ( free_ent < maxmaxcode ) { /* } */ -#endif /*SIGNED_COMPARE_SLOW*/ - CodeTabOf (i) = free_ent++; /* code -> hashtable */ - HashTabOf (i) = fcode; - } else - cl_block(); - } - /* - * Put out the final code. - */ - output( (code_int)ent ); - ++out_count; - output( (code_int) EOFCode ); -} - -/***************************************************************** - * TAG( output ) - * - * Output the given code. - * Inputs: - * code: A n_bits-bit integer. If == -1, then EOF. This assumes - * that n_bits =< (long)wordsize - 1. - * Outputs: - * Outputs code to the file. - * Assumptions: - * Chars are 8 bits long. - * Algorithm: - * Maintain a GIFBITS character long buffer (so that 8 codes will - * fit in it exactly). Use the VAX insv instruction to insert each - * code in turn. When the buffer fills up empty it and start over. - */ - -static unsigned long cur_accum = 0; -static int cur_bits = 0; - -static unsigned long masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, - 0x001F, 0x003F, 0x007F, 0x00FF, - 0x01FF, 0x03FF, 0x07FF, 0x0FFF, - 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; - -static void -output(code_int code) -{ - cur_accum &= masks[ cur_bits ]; - - if( cur_bits > 0 ) - cur_accum |= ((long)code << cur_bits); - else - cur_accum = code; - - cur_bits += n_bits; - - while( cur_bits >= 8 ) { - char_out( (unsigned int)(cur_accum & 0xff) ); - cur_accum >>= 8; - cur_bits -= 8; - } - - /* - * If the next entry is going to be too big for the code size, - * then increase it, if possible. - */ - if ( free_ent > maxcode || clear_flg ) { - - if( clear_flg ) { - - maxcode = MAXCODE (n_bits = g_init_bits); - clear_flg = 0; - - } else { - - ++n_bits; - if ( n_bits == maxbits ) - maxcode = maxmaxcode; - else - maxcode = MAXCODE(n_bits); - } - } - - if( code == EOFCode ) { - /* - * At EOF, write the rest of the buffer. - */ - while( cur_bits > 0 ) { - char_out( (unsigned int)(cur_accum & 0xff) ); - cur_accum >>= 8; - cur_bits -= 8; - } - - flush_char(); - -/* fflush( g_outfile ); */ -/* */ -/* if( ferror( g_outfile ) ) */ -/* return; */ - } -} - -/* - * Clear out the hash table - */ -static void -cl_block (void) /* table clear for block compress */ -{ - - cl_hash ( (count_int) hsize ); - free_ent = ClearCode + 2; - clear_flg = 1; - - output( (code_int)ClearCode ); -} - -static void -cl_hash(register count_int hsize) /* reset code table */ - -{ - - register count_int *htab_p = htab+hsize; - - register long i; - register long m1 = -1; - - i = hsize - 16; - do { /* might use Sys V memset(3) here */ - *(htab_p-16) = m1; - *(htab_p-15) = m1; - *(htab_p-14) = m1; - *(htab_p-13) = m1; - *(htab_p-12) = m1; - *(htab_p-11) = m1; - *(htab_p-10) = m1; - *(htab_p-9) = m1; - *(htab_p-8) = m1; - *(htab_p-7) = m1; - *(htab_p-6) = m1; - *(htab_p-5) = m1; - *(htab_p-4) = m1; - *(htab_p-3) = m1; - *(htab_p-2) = m1; - *(htab_p-1) = m1; - htab_p -= 16; - } while ((i -= 16) >= 0); - - for ( i += 16; i > 0; --i ) - *--htab_p = m1; -} - -/****************************************************************************** - * - * GIF Specific routines - * - ******************************************************************************/ - -/* - * Number of characters so far in this 'packet' - */ -static int a_count; - -/* - * Set up the 'byte output' routine - */ -static void -char_init(void) -{ - a_count = 0; -} - -/* - * Define the storage for the packet accumulator - */ -static char accum[ 256 ]; - -/* - * Add a character to the end of the current packet, and if it is 254 - * characters, flush the packet to disk. - */ -static void -char_out(int c) -{ - accum[ a_count++ ] = c; - if( a_count >= 254 ) - flush_char(); -} - -/* - * Flush the packet to disk, and reset the accumulator - */ -static void -flush_char(void) -{ - if( a_count > 0 ) { - gdPutC( a_count, g_outfile ); - gdPutBuf( accum, a_count, g_outfile ); - a_count = 0; - } -} - -static void init_statics(void) { - /* Some of these are properly initialized later. What I'm doing - here is making sure code that depends on C's initialization - of statics doesn't break when the code gets called more - than once. */ - Width = 0; - Height = 0; - curx = 0; - cury = 0; - CountDown = 0; - Pass = 0; - Interlace = 0; - a_count = 0; - cur_accum = 0; - cur_bits = 0; - g_init_bits = 0; - g_outfile = 0; - ClearCode = 0; - EOFCode = 0; - free_ent = 0; - clear_flg = 0; - offset = 0; - in_count = 1; - out_count = 0; - hsize = HSIZE; - n_bits = 0; - maxbits = GIFBITS; - maxcode = 0; - maxmaxcode = (code_int)1 << GIFBITS; -} - - -/* +-------------------------------------------------------------------+ */ -/* | Copyright 1990, 1991, 1993, David Koblas. (koblas@netcom.com) | */ -/* | Permission to use, copy, modify, and distribute this software | */ -/* | and its documentation for any purpose and without fee is hereby | */ -/* | granted, provided that the above copyright notice appear in all | */ -/* | copies and that both that copyright notice and this permission | */ -/* | notice appear in supporting documentation. This software is | */ -/* | provided "as is" without express or implied warranty. | */ -/* +-------------------------------------------------------------------+ */ diff -ruN gd.orig/files/patch-Makefile.in gd/files/patch-Makefile.in --- gd.orig/files/patch-Makefile.in Wed Dec 31 17:00:00 1969 +++ gd/files/patch-Makefile.in Mon Feb 12 16:08:25 2007 @@ -0,0 +1,11 @@ +--- Makefile.in.orig Mon Feb 12 16:07:58 2007 ++++ Makefile.in Mon Feb 12 16:08:10 2007 +@@ -345,7 +345,7 @@ + include_HEADERS = gd.h gdfx.h gd_io.h gdcache.h gdfontg.h gdfontl.h gdfontmb.h gdfonts.h gdfontt.h entities.h + lib_LTLIBRARIES = libgd.la + libgd_la_SOURCES = gd.c gdfx.c gd_security.c gd_gd.c gd_gd2.c gd_io.c gd_io_dp.c gd_gif_in.c gd_gif_out.c gd_io_file.c gd_io_ss.c gd_jpeg.c gd_png.c gd_ss.c gd_topal.c gd_wbmp.c gdcache.c gdfontg.c gdfontl.c gdfontmb.c gdfonts.c gdfontt.c gdft.c gdhelpers.c gdhelpers.h gdkanji.c gdtables.c gdxpm.c jisx0208.h wbmp.c wbmp.h +-libgd_la_LDFLAGS = -version-info 2:0:0 $(XTRA_LDFLAGS) ++libgd_la_LDFLAGS = -version-info 4:0:0 $(XTRA_LDFLAGS) + libgd_la_LIBADD = $(LTLIBICONV) + LDADD = ./libgd.la $(LIBICONV) + all: config.h diff -ruN gd.orig/files/patch-bdftogd gd/files/patch-bdftogd --- gd.orig/files/patch-bdftogd Wed Dec 31 17:00:00 1969 +++ gd/files/patch-bdftogd Tue Feb 13 19:55:29 2007 @@ -0,0 +1,57 @@ +--- bdftogd.orig Fri Feb 2 18:41:00 2007 ++++ bdftogd Tue Feb 13 19:55:02 2007 +@@ -24,6 +24,9 @@ + my $filename = shift; + $filename = 'gd' . $filename unless $filename =~ /^gd/i; + ++my $gdfunc = $gdname; ++$gdfunc =~ s/(.*Font)(.*)/$1Get$2/; ++ + if (-f "$filename.c") { die "File $filename.c already exists, won't overwrite\n"; } + if (-f "$filename.h") { die "File $filename.h already exists, won't overwrite\n"; } + +@@ -177,28 +180,40 @@ + ${gdname}Data + }; + +-gdFontPtr ${gdname} = &${gdname}Rep; ++BGD_EXPORT_DATA_IMPL gdFontPtr ${gdname} = &${gdname}Rep; + +-/* This file has not been truncated. */ ++BGD_DECLARE(gdFontPtr) ++$gdfunc (void) ++{ ++ return $gdname; ++} + ++/* This file has not been truncated. */ + EOF + + + close FILEC; + + print FILEH <<"EOF"; +- + #ifndef $capdef + #define $capdef 1 + ++#ifdef __cplusplus ++extern "C" { ++#endif ++ + $info + + #include "gd.h" + +-extern gdFontPtr $gdname; ++ BGD_EXPORT_DATA_PROT gdFontPtr $gdname; ++ BGD_DECLARE(gdFontPtr) $gdfunc(void); + ++#ifdef __cplusplus ++} + #endif + ++#endif + EOF + + 1; diff -ruN gd.orig/files/patch-config-gdlib-config.in gd/files/patch-config-gdlib-config.in --- gd.orig/files/patch-config-gdlib-config.in Wed Dec 31 17:00:00 1969 +++ gd/files/patch-config-gdlib-config.in Thu Feb 15 17:57:46 2007 @@ -0,0 +1,20 @@ +--- config/gdlib-config.in.orig Thu Feb 15 17:55:45 2007 ++++ config/gdlib-config.in Thu Feb 15 17:57:06 2007 +@@ -71,7 +71,7 @@ + echo @LDFLAGS@ + ;; + --libs) +- echo @LIBS@ @LIBICONV@ ++ echo -lgd @LIBS@ @LIBICONV@ + ;; + --cflags|--includes) + echo -I@includedir@ +@@ -84,7 +84,7 @@ + echo "includedir: $includedir" + echo "cflags: -I@includedir@" + echo "ldflags: @LDFLAGS@" +- echo "libs: @LIBS@ @LIBICONV@" ++ echo "libs: -lgd @LIBS@ @LIBICONV@" + echo "libdir: $libdir" + echo "features: @FEATURES@" + ;; diff -ruN gd.orig/files/patch-configure gd/files/patch-configure --- gd.orig/files/patch-configure Wed Dec 31 17:00:00 1969 +++ gd/files/patch-configure Fri Feb 9 18:53:34 2007 @@ -0,0 +1,47 @@ +--- configure.orig Fri Feb 2 18:41:47 2007 ++++ configure Fri Feb 9 18:53:30 2007 +@@ -22817,12 +22817,12 @@ + fi + + +- if test -n "$LIBPNG12_CONFIG"; then +- libpng_CPPFLAGS=`libpng12-config --cflags` +- # should be --ldopts, but it's currently broken +- libpng_LDFLAGS=`libpng12-config --ldflags` +- libpng_LDFLAGS=`echo " $libpng_LDFLAGS" | sed 's/ -l[^ ][^ ]*//g'` +- elif test -n "$LIBPNG_CONFIG"; then ++# if test -n "$LIBPNG12_CONFIG"; then ++# libpng_CPPFLAGS=`libpng12-config --cflags` ++# # should be --ldopts, but it's currently broken ++# libpng_LDFLAGS=`libpng12-config --ldflags` ++# libpng_LDFLAGS=`echo " $libpng_LDFLAGS" | sed 's/ -l[^ ][^ ]*//g'` ++ if test -n "$LIBPNG_CONFIG"; then + libpng_CPPFLAGS=`libpng-config --cflags` + # should be --ldopts, but it's currently broken + libpng_LDFLAGS=`libpng-config --ldflags` +@@ -23178,13 +23178,13 @@ + LDFLAGS="$libpng_LDFLAGS $LDFLAGS" + + if test -n "$LIBPNG12_CONFIG"; then +- { echo "$as_me:$LINENO: checking for png_create_read_struct in -lpng12" >&5 +-echo $ECHO_N "checking for png_create_read_struct in -lpng12... $ECHO_C" >&6; } ++ { echo "$as_me:$LINENO: checking for png_create_read_struct in -lpng" >&5 ++echo $ECHO_N "checking for png_create_read_struct in -lpng... $ECHO_C" >&6; } + if test "${ac_cv_lib_png12_png_create_read_struct+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_check_lib_save_LIBS=$LIBS +-LIBS="-lpng12 $LIBS" ++LIBS="-lpng $LIBS" + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -23256,7 +23256,7 @@ + { echo "$as_me:$LINENO: result: $ac_cv_lib_png12_png_create_read_struct" >&5 + echo "${ECHO_T}$ac_cv_lib_png12_png_create_read_struct" >&6; } + if test $ac_cv_lib_png12_png_create_read_struct = yes; then +- LIBS="-lpng12 $LIBS" ++ LIBS="-lpng $LIBS" + FEATURES="GD_PNG $FEATURES" + + cat >>confdefs.h <<\_ACEOF diff -ruN gd.orig/files/patch-gd.h gd/files/patch-gd.h --- gd.orig/files/patch-gd.h Fri Nov 5 22:26:56 2004 +++ gd/files/patch-gd.h Mon Feb 12 14:17:46 2007 @@ -1,17 +1,6 @@ ---- gd.h.orig Sat Oct 30 14:54:58 2004 -+++ gd.h Fri Nov 5 20:47:19 2004 -@@ -291,6 +291,10 @@ - /* Deprecated in favor of gdImageCreateFromPngCtx */ - BGD_DECLARE(gdImagePtr) gdImageCreateFromPngSource (gdSourcePtr in); - -+#ifdef __FreeBSD__ -+BGD_DECLARE(gdImagePtr) gdImageCreateFromGifSource(gdSourcePtr in); -+#endif -+ - BGD_DECLARE(gdImagePtr) gdImageCreateFromGd (FILE * in); - BGD_DECLARE(gdImagePtr) gdImageCreateFromGdCtx (gdIOCtxPtr in); - BGD_DECLARE(gdImagePtr) gdImageCreateFromGdPtr (int size, void *data); -@@ -591,6 +595,16 @@ +--- gd.h.orig Mon Feb 12 14:16:25 2007 ++++ gd.h Mon Feb 12 14:17:29 2007 +@@ -600,6 +600,16 @@ BGD_DECLARE(void *) gdImageGifAnimAddPtr(gdImagePtr im, int *size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm); BGD_DECLARE(void *) gdImageGifAnimEndPtr(int *size); @@ -28,14 +17,3 @@ /* A custom data sink. For backwards compatibility. Use gdIOCtx instead. */ /* The sink function must return -1 on error, otherwise the number -@@ -604,6 +618,10 @@ - gdSink, *gdSinkPtr; - - BGD_DECLARE(void) gdImagePngToSink (gdImagePtr im, gdSinkPtr out); -+ -+#ifdef __FreeBSD__ -+BGD_DECLARE(void) gdImageGifToSink(gdImagePtr im, gdSinkPtr out); -+#endif - - BGD_DECLARE(void) gdImageGd (gdImagePtr im, FILE * out); - BGD_DECLARE(void) gdImageGd2 (gdImagePtr im, FILE * out, int cs, int fmt); diff -ruN gd.orig/files/patch-gd_gif_out.c gd/files/patch-gd_gif_out.c --- gd.orig/files/patch-gd_gif_out.c Wed Dec 31 17:00:00 1969 +++ gd/files/patch-gd_gif_out.c Mon Feb 12 14:32:10 2007 @@ -0,0 +1,18 @@ +--- gd_gif_out.c.orig Fri Feb 2 18:41:00 2007 ++++ gd_gif_out.c Mon Feb 12 14:31:30 2007 +@@ -143,6 +143,15 @@ + } + } + ++/* FreeBSD specific code */ ++BGD_DECLARE(void) gdImageBigGif(gdImagePtr im, FILE *out) { return gdImageGif( im, out ); } ++BGD_DECLARE(void) gdImageLzw(gdImagePtr im, FILE *out) { return gdImageGif( im, out ); } ++BGD_DECLARE(void *) gdImageBigGifPtr(gdImagePtr im, int *size) { return gdImageGifPtr(im, size); } ++BGD_DECLARE(void *) gdImageLzwPtr(gdImagePtr im, int *size) { return gdImageGifPtr(im, size); } ++BGD_DECLARE(void) gdImageBigGifCtx(gdImagePtr im, gdIOCtxPtr out) { return gdImageGifCtx(im, out); } ++BGD_DECLARE(void) gdImageLzwCtx(gdImagePtr im, gdIOCtxPtr out) { return gdImageGifCtx(im, out); } ++/* end FreeBSD specific code */ ++ + BGD_DECLARE(void *) gdImageGifAnimBeginPtr (gdImagePtr im, int *size, int GlobalCM, int Loops) + { + void *rv; diff -ruN gd.orig/files/patch-gd_png.c gd/files/patch-gd_png.c --- gd.orig/files/patch-gd_png.c Sun Nov 21 05:29:31 2004 +++ gd/files/patch-gd_png.c Fri Feb 9 17:56:30 2007 @@ -1,9 +1,9 @@ ---- gd_png.c.orig Sat Nov 20 01:30:53 2004 -+++ gd_png.c Sat Nov 20 01:30:58 2004 -@@ -188,6 +188,15 @@ +--- gd_png.c.orig Fri Feb 2 18:41:00 2007 ++++ gd_png.c Fri Feb 9 17:55:59 2007 +@@ -189,6 +189,15 @@ + png_read_info (png_ptr, info_ptr); /* read all PNG info up to image data */ - png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, - &interlace_type, NULL, NULL); + png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); + + if (overflow2(sizeof (int), width)) + { @@ -13,6 +13,6 @@ + { + return NULL; + } - if ((color_type == PNG_COLOR_TYPE_RGB) || - (color_type == PNG_COLOR_TYPE_RGB_ALPHA)) - { + if ((color_type == PNG_COLOR_TYPE_RGB) || (color_type == PNG_COLOR_TYPE_RGB_ALPHA)) { + im = gdImageCreateTrueColor ((int) width, (int) height); + } else { diff -ruN gd.orig/files/patch-gdtest.c gd/files/patch-gdtest.c --- gd.orig/files/patch-gdtest.c Mon Aug 18 10:15:06 2003 +++ gd/files/patch-gdtest.c Wed Dec 31 17:00:00 1969 @@ -1,81 +0,0 @@ ---- gdtest.c.orig Thu Apr 25 14:16:47 2002 -+++ gdtest.c Tue Nov 6 15:53:38 2001 -@@ -84,6 +84,35 @@ - gdImageDestroy (im2); - ctx->gd_free (ctx); - -+ /* */ -+ /* Send to GIF File then Ptr */ -+ /* */ -+ sprintf(of, "%s.gif", argv[1]); -+ out = fopen(of, "wb"); -+ gdImageGif(im, out); -+ fclose(out); -+ -+ in = fopen(of, "rb"); -+ if (!in) { -+ fprintf(stderr, "GIF Output file does not exist!\n"); -+ exit(1); -+ } -+ im2 = gdImageCreateFromGif(in); -+ fclose(in); -+ -+ CompareImages("GD->GIF File->GD", ref, im2); -+ -+ unlink(of); -+ gdImageDestroy(im2); -+ -+ iptr = gdImageGifPtr(im,&sz); -+ ctx = gdNewDynamicCtx(sz,iptr); -+ im2 = gdImageCreateFromGifCtx(ctx); -+ -+ CompareImages("GD->GIF ptr->GD", ref, im2); -+ -+ gdImageDestroy(im2); -+ ctx->gd_free(ctx); - - /* */ - /* Send to GD2 File then Ptr */ -@@ -200,7 +229,30 @@ - gdImageDestroy (im2); - }; - -- unlink (of); -+ /* -+ ** Test gdImageCreateFromGifSource -+ **/ -+ -+ in = fopen(of, "rb"); -+ -+ if (!in) -+ { -+ fprintf (stderr, "GD Source: ERROR - GD Source input file does not exist - Sink may have failed!\n"); -+ }; -+ -+ imgsrc.source = freadWrapper; -+ imgsrc.context = in; -+ im2 = gdImageCreateFromGifSource(&imgsrc); -+ fclose(in); -+ -+ if (im2 == NULL) { -+ printf("GD Source (GIF): ERROR Null returned by gdImageCreateFromGifSource\n"); -+ } else { -+ CompareImages("GD Source (GIF)", ref, im2); -+ gdImageDestroy(im2); -+ }; -+ -+ unlink(of); - - /* */ - /* Test Extraction */ -@@ -266,6 +318,10 @@ - - printf ("[Merged Image has %d colours]\n", im2->colorsTotal); - CompareImages ("Merged (gdtest.png, gdtest_merge.png)", im2, im3); -+ -+ out = fopen ("test/gdtest_merge_out.png", "wb"); -+ gdImagePng(im2, out); -+ close(out); - - gdImageDestroy (im2); - gdImageDestroy (im3); diff -ruN gd.orig/files/regen-fonts.sh gd/files/regen-fonts.sh --- gd.orig/files/regen-fonts.sh Wed Dec 31 17:00:00 1969 +++ gd/files/regen-fonts.sh Tue Feb 13 19:52:37 2007 @@ -0,0 +1,53 @@ +#!/bin/sh +# $FreeBSD$ + +# The GD_FONTS environment variable can be set to specify the gzipped +# tar-ball containing the fonts in bdf format and the bdf file names. +# +# For example: +# GD_FONTS="/usr/ports/distfiles/x-koi8u.tgz koi6x10.bdf koi8x13.bdf \ +# koi9x15.bdf koi12x24.bdf koi10x20.bdf" +# +# This can be usefull for slave ports, like ukrainian/gd, which may +# now provide alternative fonts easily. + +# TODO: . handle multiple archiving formats: tgz, tar.bz2, zip +# . allow for passing already extracted font-files + +if [ -z "$GD_FONTS" ] +then + echo "GD_FONTS can be set to specify an alternative list of .bdf files" + echo "See $0 for details..." + exit 0 +fi + +set $GD_FONTS +# +# The tarball is the first argument, the tiny, small, medium-bold, +# large, and giant fonts follow. +# + +tarball=$1 +shift +tar -xvzpf $tarball -C $WRKSRC $@ + +rm -f $WRKSRC/Makefile.fonts +cd $WRKSRC + +for font in Tiny Small MediumBold Large Giant +do + f=`echo $font | tr -d [[:lower:]] | tr [[:upper:]] [[:lower:]]` + rm -f $WRKSRC/gdfont$f.[ch] + printf 'gdfont%s.c gdfont%s.h: %s\ + perl ${.CURDIR}/bdftogd gdFont%s font%s < %s\n' \ + $f $f $1 $font $f $1 >> $WRKSRC/Makefile.fonts + shift +done + +for font in Tiny Small MediumBold Large Giant +do + f=`echo $font | tr -d [[:lower:]] | tr [[:upper:]] [[:lower:]]` + make -f Makefile.fonts gdfont$f.c + shift +done +return 0 diff -ruN gd.orig/pkg-descr gd/pkg-descr --- gd.orig/pkg-descr Mon Aug 18 10:15:06 2003 +++ gd/pkg-descr Tue Feb 13 20:04:11 2007 @@ -10,7 +10,4 @@ including both truecolor and palette images, resampling (smooth resizing of truecolor images) and so forth. -WWW: http://www.boutell.com/gd/ - -- Alex Dupre -sysadmin@alexdupre.com +WWW: http://libgd.org/ diff -ruN gd.orig/pkg-plist gd/pkg-plist --- gd.orig/pkg-plist Fri Oct 14 08:28:46 2005 +++ gd/pkg-plist Mon Feb 12 18:28:04 2007 @@ -21,9 +21,10 @@ include/gdfonts.h include/gdfontt.h include/gdfx.h -include/gdhelpers.h lib/libgd.a +lib/libgd.la lib/libgd.so lib/libgd.so.4 %%PORTDOCS%%%%DOCSDIR%%/index.html -%%PORTDOCS%%@dirrm %%DOCSDIR%% +%%PORTDOCS%%@dirrmtry %%DOCSDIR%% +