xcftools-1.0.7/.cvsignore0000644000175000017500000000032710376724620015233 0ustar makholmmakholmMakefile autom4te.cache config.h config.hin config.log config.status config.guess config.sub aclocal.m4 configure enums.[ch] table.c nlsini.c xcfinfo xcf2pnm xcf2png xcfview xcf**.1i xcf*.1il *.1 xcf*.oi options.mi xcftools-1.0.7/ChangeLog0000644000175000017500000001023511223376130014773 0ustar makholmmakholm2009-07-03 Henning Makholm * Version 1.0.7 * Fix GPL-to-PD transition: missed copyrigh blurb in online banner. 2009-07-03 Henning Makholm * Version 1.0.6 * Change licensing from GPL-2 to PD. * Fix bug: A layer without an alpha channel bug with an active layer mask was wrongly considered to obscure all lower layers. * Fix bug: xcf2pnm would guess PBM as the output format even if the background was explicitly set to an intermediate gray, or if -T might produce grays. 2009-07-02 Henning Makholm * Version 1.0.5 * Fix various bugs if extracted part of image contains pixels with negative canvas-based coordinates. Thanks to J\"orgen Grahn for reporting these. (Debian bug #533361). * One of the fixed bugs was a buffer overrun which would allow a remote attacker to execute arbitrary if he could trick a user into converting an appropriately crafted XCF file with either the -C or the -O option. CVE-2009-2175. * Fix another bug with interpretation of -C flag, which would convert the *intersection* of the visible layers rather than their *union*, as intended. Did I ever test this stuff? * Minor manpage fixes; -C description should be less confusing now. * Apply patch from Marcus Alanen for easier RPM packaging: $(DESTDIR) honored in Makefile's install target, spec file added. 2006-05-14 Henning Makholm * Version 1.0.4 * Work around bug in certain older Gimp releases that would save the wrong length word of a Colormap property. 2006-04-17 Henning Makholm * Version 1.0.3 * Also look for color name database in other locations than /usr/lib/X11, in an attempty to be X11R7 friendly 2006-02-22 Henning Makholm * Version 1.0.2 * Don't ship aclocal.m4 in tarball; it will be re-assembled whenever needed anyway. * Add option -C to autocrop to visible layers, suggested by Anthony DeRobertis (Debian bug #353883). * Change metavariable for -Z option argument from "cmd" to "command", following suggestion by Anthony DeRobertis (Debian bug #353872). 2006-02-20 Henning Makholm * Version 1.0.1 * Make sure that -b with an unknown color actually leads to a fatal error when the X11 color name database is not found. * Version 1.0 * xcfview added * Support for translated manpages added 2006-02-13 Henning Makholm * Version 0.9.1 * Experimental l10n support added 2006-02-12 Henning Makholm * Version 0.9 * Add layer mode Color. Now all of the Gimp's layer modes are supported. :-) * Revamp the test suite inputs once again (they did not cover all combinations of colored pixels vs fully white or blacK). * Version 0.8.1 * Add layer modes Hue, Value, Saturation and tests for same. 2006-02-11 Henning Makholm * Version 0.8 * Add tests of various error diagnostics to the test suite * Revamp some of the test suite inputs such that HSV space layer modes can be tested with the same files. * Version 0.7.2 * Do not precompute the big multiplication table by default, it is quick enough to do it at run-time as needed (which lets the binaries shrink significantly). 2006-02-07 Henning Makholm * Respect -A option when generating indexed PNG (that is, create a tRNS chunk even if it's trivial); add test of -A in xcf2png to the test suite. 2006-01-29 Henning Makholm * Update FSF address in GPL blurbs * Version 0.7.1 * A few cosmetic changes done during debianization * The code now passes the testsuite on several Debian architectures (powerpc, alpha, ia64, amd64, hppa, sparc, mipsel, m68k). Unfortunately I lack the access to test on non-Debian platforms. 2006-01-28 Henning Makholm * Version 0.7 * xcf2png added * Test suite added * Various bug fixes 2006-01-24 Henning Makholm * Version 0.6 * Allow X11 color names with -b option 2006-01-22 Henning Makholm * Version 0.5 * First public release - xcfinfo - xcf2pnm xcftools-1.0.7/Makefile.in0000644000175000017500000002051411223357034015271 0ustar makholmmakholm# Makefile(.in) for xcftools # This file was written by Henning Makholm # It is hereby in the public domain. # # In jurisdictions that do not recognise grants of copyright to the # public domain: I, the author and (presumably, in those jurisdictions) # copyright holder, hereby permit anyone to distribute and use this code, # in source code or binary form, with or without modifications. This # permission is world-wide and irrevocable. # # Of course, I will not be liable for any errors or shortcomings in the # code, since I give it away without asking any compenstations. # # If you use or distribute this code, I would appreciate receiving # credit for writing it, in whichever way you find proper and customary. all: datarootdir = @datarootdir@ srcdir = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ mandir = @mandir@ datadir = @datadir@ sysconfdir = @sysconfdir@ localedir = $(datadir)/locale VERSION = @PACKAGE_VERSION@ APPNAME = @PACKAGE_TARNAME@ program_transform_name = @program_transform_name@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ @LIBICONV@ LIBS = @LIBS@ INSTALL = @INSTALL@ -D INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ RM = rm -f SED = sed PERL = @PERL@ o = @OBJEXT@ e = @EXEEXT@ # Allow using Makefile.in directly for cleaning and distmaking purposes ifneq (,$(findstring @,$o)) e = srcdir = . endif ############################################################################# FILEIO = io-unix BINARIES = xcfinfo$e xcf2pnm$e xcf2png$e xcfview COMMANDS = $(patsubst %$e,%,$(BINARIES)) MANPAGES = $(patsubst %,%.1,$(COMMANDS)) ifeq (@USE_NLS@,yes) LINGUAS = da MANLINGUAS = da endif %.$o: %.c $(CC) $(CFLAGS) -o $@ -c $< all: $(BINARIES) $(SCRIPTS) $(MANPAGES) po/stamp manpo/all xcfinfo$e: xcfinfo.$o $(FILEIO).$o enums.$o xcf-general.$o utils.$o nlsini.$o $(CC) $(LDFLAGS) $(LIBS) $^ -o $@ xcf2pnm$e: xcf2pnm.$o $(FILEIO).$o enums.$o xcf-general.$o utils.$o nlsini.$o \ pixels.$o flatten.$o flatspec.$o scaletab.$o table.$o $(CC) $(LDFLAGS) $(LIBS) $^ -o $@ xcf2png$e: xcf2png.$o $(FILEIO).$o enums.$o xcf-general.$o utils.$o nlsini.$o \ pixels.$o flatten.$o flatspec.$o scaletab.$o table.$o palette.$o $(CC) $(LDFLAGS) $(LIBS) -lpng $^ -o $@ xcfview: xcfview.in Makefile sed '1s,/usr/bin/perl,@PERL@,' < $< > $@ testscale$e: testscale.$o $(CC) $(LDFLAGS) $(LIBS) $^ -o $@ install: all for p in $(BINARIES) ; do \ case $$p in xcfview) strip= ;; *) strip=-s ;; esac ; \ $(INSTALL_PROGRAM) $$strip $$p \ $(DESTDIR)$(bindir)/`echo $$p | $(SED) $(program_transform_name)` \ || exit 1 ;\ done for m in $(MANPAGES) ; do \ $(INSTALL_DATA) $$m \ $(DESTDIR)$(mandir)/man1/`echo $$m | $(SED) $(program_transform_name)` \ || exit 1 ; \ done for lang in $(LINGUAS) ; do \ $(srcdir)/install-sh -d $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES ; \ $(INSTALL_DATA) po/$$lang.mo \ $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(APPNAME).mo \ || exit 1 ; \ done for L in $(MANLINGUAS) ; do \ $(srcdir)/install-sh -d $(DESTDIR)$(mandir)/$$L/man1 || exit 1 ; \ for P in $(patsubst %.1,%,$(MANPAGES)) ; do \ $(INSTALL_DATA) manpo/$$P.$$L.1 $(DESTDIR)$(mandir)/$$L/man1/$$P.1 \ || exit 1; done ; done ; C_GENERATED = enums.c table.c nlsini.c ENUMSOURCES = gimp/base-enums.h gimp/gimpbaseenums.h gimp/xcf-private.h enums.h: mkenumsh.pl $(ENUMSOURCES) $(PERL) $< $(ENUMSOURCES) > $@ enums.c: mkenumsc.pl enums.h $(PERL) $< enums.h > $@ table.c: mktablec.pl config.h $(PERL) $< > $@ nlsini.c: Makefile echo >$@ "#include \"xcftools.h\"" echo >>$@ "#ifndef nls_init" echo >>$@ "void nls_init(void) {" echo >>$@ " bindtextdomain(\"$(APPNAME)\",\"$(localedir)\");" echo >>$@ " textdomain(\"$(APPNAME)\"); }" echo >>$@ "#endif" %.oi: options.i mkopti.pl config.h $(PERL) mkopti.pl $* %.1: %.oi %.10 config.h mancombine.pl $(PERL) mancombine.pl $*.10 > $@ ############################################################################# # # Localization stuff POTFILES_NONC = $(patsubst %$e,%.oi,$(BINARIES)) options.i po/$(APPNAME).pot$(SUPPRESS_AUTOFOO): $(POTFILES_NONC) \ $(filter-out table.c nlsini.c, $(C_GENERATED) $(wildcard *.c)) xgettext -o $@.tmp -C -k_ -kN_ \ --foreign-user --msgid-bugs-address=henning@makholm.net \ --flag=FatalGeneric:2:c-format \ --flag=FatalUnexpected:1:c-format \ --flag=FatalBadXCF:1:c-format \ --flag=FatalUnsupportedXCF:1:c-format \ $^ if diff $@ $@.tmp | \ grep -v '^\([^<>]\|. \?"POT-Creation-Date:\)' > /dev/null; \ then mv -f $@.tmp $@ ; \ else echo OK, $@ is unchanged ; rm $@.tmp ; fi po/%.po: po/$(APPNAME).pot test -f $@ msgmerge -U $@ $< touch $@ po/%.mo: po/%.po msgfmt -c -o$@ $< po/stamp: $(patsubst %,po/%.mo,$(LINGUAS)) if ! make -q po/$(APPNAME).pot ; then \ touch po/$(APPNAME).pot ; touch po/*.po ; touch po/*.mo ; fi touch $@ # Manpage localization stuff POTFILES_MAN = options.mi $(patsubst %.1,%.10,$(MANPAGES)) \ exit.1i options.mi: manpo/optipot.pl options.i $(PERL) manpo/optipot.pl > $@ manpo/manpages.pot$(SUPPRESS_AUTOFOO): manpo/mantranslate.pl $(POTFILES_MAN) $(PERL) manpo/mantranslate.pl -x $(POTFILES_MAN) > $@.tmp if diff $@ $@.tmp | \ grep -v '^\([^<>]\|. \?"POT-Creation-Date:\)' > /dev/null; \ then mv -f $@.tmp $@ ; \ else echo OK, $@ is unchanged ; rm $@.tmp ; fi manpo/%.po: manpo/manpages.pot test -f $@ msgmerge -U $@ $< touch $@ manpo/stamp: $(patsubst %,manpo/%.po,$(MANLINGUAS)) if ! make -q manpo/manpages.pot ; then \ touch manpo/manpages.pot ; touch $^ ; fi touch $@ manpo/all: manpo/stamp $(MANPAGES) for L in $(MANLINGUAS) ; do \ for P in $(patsubst %.1,%,$(MANPAGES)) ; do \ $(PERL) manpo/mantranslate.pl manpo/$$L.po $$P.1 \ > manpo/$$P.$$L.1 || exit 1; done ; done ; touch $@ ############################################################################# # # Dependency tracking, by hand COMMON_HEADERS = xcftools.h config.h enums.h enums.$o: enums.h nlsini.$o: $(COMMON_HEADERS) table.$o: $(COMMON_HEADERS) pixels.h scaletab.$o: $(COMMON_HEADERS) pixels.h io-unix.$o: $(COMMON_HEADERS) xcf-general.$o: $(COMMON_HEADERS) utils.$o: $(COMMON_HEADERS) pixels.$o: $(COMMON_HEADERS) pixels.h palette.$o: $(COMMON_HEADERS) pixels.h flatten.h palette.h flatten.$o: $(COMMON_HEADERS) pixels.h flatten.h flatspec.$o: $(COMMON_HEADERS) pixels.h flatten.h xcfinfo.$o: $(COMMON_HEADERS) xcfinfo.oi xcf2pnm.$o: $(COMMON_HEADERS) pixels.h flatten.h xcf2pnm.oi xcf2png.$o: $(COMMON_HEADERS) pixels.h flatten.h xcf2png.oi palette.h ############################################################################# # # Standard cleaning and other metarules check: $(BINARIES) cd test && $(MAKE) check clean: $(RM) *.$o */*~ *~ .*~ xcf*.1i xcf*.1il *.1 *.oi *.mi $(RM) enums.h $(C_GENERATED) $(BINARIES) $(RM) po/*.mo */stamp manpo/all manpo/*.1 cd test && $(MAKE) clean distclean: clean $(RM) Makefile config.log config.cache config.status config.h $(RM) aclocal.m4 $(RM) -r autom4te.cache realclean: distclean $(RM) configure config.hin .SUFFIXES: .c .$o .PHONY: clean distclean realclean dist all ############################################################################# # # Tarball-making rule ifeq (,$(findstring @,$o)) dist: ajour $(patsubst %,po/%.po,$(LINGUAS)) $(MAKE) distclean noncvs > notcvsfiles || cp dist-generated notcvsfiles diff -u dist-generated notcvsfiles $(RM) notcvsfiles find . -type f -print | grep -v CVS | grep -v debian | \ sed 's!^\./!$(APPNAME)-$(VERSION)/!' | sort -o tar-manifest ln -s . $(APPNAME)-$(VERSION) GZIP=-9 tar cvzf $(APPNAME)-$(VERSION).tar.gz `cat tar-manifest` rm tar-manifest rm $(APPNAME)-$(VERSION) else dist: ajour $(MAKE) dist endif ############################################################################# # # Autofoo rules: $(srcdir)/configure$(SUPPRESS_AUTOFOO): configure.ac cd $(srcdir) && aclocal cd $(srcdir) && autoconf cd $(srcdir) && autoheader $(srcdir)/config.hin$(SUPPRESS_AUTOFOO): $(srcdir)/configure config.status: $(srcdir)/configure config.sub config.guess if [ -f config.status ] ; \ then ./config.status --recheck ; \ else ./configure ; fi Makefile$(SUPPRESS_AUTOFOO): Makefile.in config.status ./config.status $@ config.h: config.hin config.status ./config.status $@ touch $@ ajour: Makefile config.h config.sub config.guess: -test -r /usr/share/misc/$@ && cp /usr/share/misc/$@ . .PHONY: ajour dist xcftools-1.0.7/README0000644000175000017500000000536411223356672014121 0ustar makholmmakholmWhat is this? ============= Xcftools is a set of fast command-line tools for extracting information from the Gimp's native file format XCF. The tools are designed to allow efficient use of layered XCF files as sources in a build system that use 'make' and similar tools to manage automatic processing of the graphics. These tools work independently of the Gimp engine and do not require the Gimp to even be installed. xcf2pnm converts XCF files to ppm, pgm or pbm format, flattening layers if necessary. If the image contains transparency, an alpha map can be written to a separate file, or a background color can be specified on the command line. xcf2png converts XCF files to PNG format, flattening layers if necessary. Transparency information can be kept in the image, or a background color can be specified on the command line. xcfinfo lists information about layers in an XCF file. The tools can either flatten an XCF file as given, or extract specific layers named on the command line. Portability =========== The software was developed on an Intel-based PC running Debian GNU/Linux. It ought to work on other Linux variants also. I would not be surprised if it ran on other unix systems too, but porting to non-unix platforms will require some work. Most of the code attempts to be prepared for porting, but this has not been explicitly tested. Installation ============ You need GNU make, a C compiler, and perl. After the source archive is extracted, the command sequence ./configure make all make install should compile the tools and install them in /usr/local. The 'configure' script is generated by GNU autoconf, and accepts the arguments that such scripts commonly do. You can use ./configure --enable-precomputed-scaletable to precompute lookup tables for pixel composing at compile time. Normally these tables are initialized at run time if a layer that needs them is detected. Precomputing them may improve performance by a few percent, at the cost of doubling the size of each binary. License ======= Xcftools is written by Henning Makholm It is hereby in the public domain. In jurisdictions that do not recognise grants of copyright to the public domain: I, the author and (presumably, in those jurisdictions) copyright holder, hereby permit anyone to distribute and use this code, in source code or binary form, with or without modifications. This permission is world-wide and irrevocable. Of course, I will not be liable for any errors or shortcomings in the code, since I give it away without asking any compenstations. If you use or distribute this code, I would appreciate receiving credit for writing it, in whichever way you find proper and customary. xcftools-1.0.7/TRANSLATION0000644000175000017500000000217210376162531014751 0ustar makholmmakholmThe run-time messages from the program can be localized using standard GNU gettext tools in the po/ directory. There is no Makefile in po/; the processing is governed by the main Makefile in the top directory. Simply use make po/xcftools.pot to update the pot file if necessary. After creating a po file, add the language code to the definition of LINGUAS in the master Makefile.in. The manpo/ directory contains some experimental support for translating the manpages. Because much text is shared between the various manpages, the translation is done by po files, a few sentences at a time, and finished translated manpages are collected at build time. Note that the manpo/*.po files are parsed by a very ad-hoc parser in manpo/mantranslate.pl rather than by the standard gettext support programs. In particular, the "fuzzy" flag does not prevent an entry from being used. Also there is no charset handling, so the po files should be written with the same character set as should be used in the roff source of the combined man page. After writing a po file, add the language code to the definition of MANLINGUAS in the master Makefile.in. xcftools-1.0.7/config.guess0000755000175000017500000013226411223361010015537 0ustar makholmmakholm#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2009-04-27' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd | genuineintel) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xcftools-1.0.7/config.hin0000644000175000017500000000660311223360650015172 0ustar makholmmakholm/* config.hin. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define for CPUs that can read unaligned words without traps or faults */ #undef CAN_DO_UNALIGNED_WORDS /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long' function. */ #undef HAVE_GETOPT_LONG /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to use a precomputed multiplication table (adds 64 KB per binary) */ #undef PRECOMPUTED_SCALETABLE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif xcftools-1.0.7/config.rpath0000755000175000017500000003502510373733410015540 0ustar makholmmakholm#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2005 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` cc_basename=`echo "$CC" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case "$cc_basename" in xlc*) wl='-Wl,' ;; esac ;; mingw* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux*) case $cc_basename in icc* | ecc*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; sco3.2v5*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) wl='-Wl,' ;; sysv4*MP*) ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sunos4*) hardcode_direct=yes ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case "$cc_basename" in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | kfreebsd*-gnu | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10* | hpux11*) if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4.2uw2*) hardcode_direct=yes hardcode_minus_L=no ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) ;; sysv5*) hardcode_libdir_flag_spec= ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. libname_spec='lib$name' case "$host_os" in aix3*) ;; aix4* | aix5*) ;; amigaos*) ;; beos*) ;; bsdi[45]*) ;; cygwin* | mingw* | pw32*) shrext=.dll ;; darwin* | rhapsody*) shrext=.dylib ;; dgux*) ;; freebsd1*) ;; kfreebsd*-gnu) ;; freebsd*) ;; gnu*) ;; hpux9* | hpux10* | hpux11*) case "$host_cpu" in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac ;; irix5* | irix6* | nonstopux*) case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux*) ;; knetbsd*-gnu) ;; netbsd*) ;; newsos6) ;; nto-qnx*) ;; openbsd*) ;; os2*) libname_spec='$name' shrext=.dll ;; osf3* | osf4* | osf5*) ;; sco3.2v5*) ;; solaris*) ;; sunos4*) ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ;; sysv4*MP*) ;; uts4*) ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: xcftools-1.0.7/configure0000755000175000017500000077601111223376417015153 0ustar makholmmakholm#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.63 for Xcftools 1.0.7. # # Report bugs to . # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH if test "x$CONFIG_SHELL" = x; then if (eval ":") 2>/dev/null; then as_have_required=yes else as_have_required=no fi if test $as_have_required = yes && (eval ": (as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=\$LINENO as_lineno_2=\$LINENO test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } ") 2> /dev/null; then : else as_candidate_shells= as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. case $as_dir in /*) for as_base in sh bash ksh sh5; do as_candidate_shells="$as_candidate_shells $as_dir/$as_base" done;; esac done IFS=$as_save_IFS for as_shell in $as_candidate_shells $SHELL; do # Try only shells that exist, to save several forks. if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { ("$as_shell") 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : _ASEOF }; then CONFIG_SHELL=$as_shell as_have_required=yes if { "$as_shell" 2> /dev/null <<\_ASEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi : (as_func_return () { (exit $1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = "$1" ); then : else exitcode=1 echo positional parameters were not saved. fi test $exitcode = 0) || { (exit 1); exit 1; } ( as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } _ASEOF }; then break fi fi done if test "x$CONFIG_SHELL" != x; then for as_var in BASH_ENV ENV do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test $as_have_required = no; then echo This script requires a shell more modern than all the echo shells that I found on your system. Please install a echo modern shell, or manually run the script under such a echo shell if you do have one. { (exit 1); exit 1; } fi fi fi (eval "as_func_return () { (exit \$1) } as_func_success () { as_func_return 0 } as_func_failure () { as_func_return 1 } as_func_ret_success () { return 0 } as_func_ret_failure () { return 1 } exitcode=0 if as_func_success; then : else exitcode=1 echo as_func_success failed. fi if as_func_failure; then exitcode=1 echo as_func_failure succeeded. fi if as_func_ret_success; then : else exitcode=1 echo as_func_ret_success failed. fi if as_func_ret_failure; then exitcode=1 echo as_func_ret_failure succeeded. fi if ( set x; as_func_ret_success y && test x = \"\$1\" ); then : else exitcode=1 echo positional parameters were not saved. fi test \$exitcode = 0") || { echo No shell found that supports shell functions. echo Please tell bug-autoconf@gnu.org about your system, echo including any error possibly output before this message. echo This can help us improve future autoconf versions. echo Configuration will now proceed without shell functions. } as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='Xcftools' PACKAGE_TARNAME='xcftools' PACKAGE_VERSION='1.0.7' PACKAGE_STRING='Xcftools 1.0.7' PACKAGE_BUGREPORT='henning@makholm.net' ac_unique_file="xcfinfo.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" gt_needs= ac_subst_vars='LTLIBOBJS LIBOBJS PERL POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS mkdir_p MKDIR_P SET_MAKE host_os host_vendor host_cpu host build_os build_vendor build_cpu build EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_precomputed_scaletable enable_nls with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid package name: $ac_useropt" >&2 { (exit 1); exit 1; }; } ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { $as_echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { $as_echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 { (exit 1); exit 1; }; } ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac { $as_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; } done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || { $as_echo "$as_me: error: working directory cannot be determined" >&2 { (exit 1); exit 1; }; } test "X$ac_ls_di" = "X$ac_pwd_ls_di" || { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 { (exit 1); exit 1; }; } # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." { $as_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 { (exit 1); exit 1; }; } pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Xcftools 1.0.7 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/xcftools] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Xcftools 1.0.7:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-precomputed-scaletable Use precomputed multiplication table (adds 64 KB per binary) --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Xcftools configure 1.0.7 generated by GNU Autoconf 2.63 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Xcftools $as_me 1.0.7, which was generated by GNU Autoconf 2.63. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then { $as_echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { $as_echo "$as_me:$LINENO: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:$LINENO: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs " # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:$LINENO: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:$LINENO: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:$LINENO: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { $as_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 $as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { $as_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 $as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} { (exit 1); exit 1; }; } fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:$LINENO: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Check whether --enable-precomputed-scaletable was given. if test "${enable_precomputed_scaletable+set}" = set; then enableval=$enable_precomputed_scaletable; cat >>confdefs.h <<\_ACEOF #define PRECOMPUTED_SCALETABLE 1 _ACEOF fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:$LINENO: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:$LINENO: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 $as_echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } # Provide some information about the compiler. $as_echo "$as_me:$LINENO: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 { (ac_try="$ac_compiler --version >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler --version >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -v >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -v >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (ac_try="$ac_compiler -V >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compiler -V >&5") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { (ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi { $as_echo "$as_me:$LINENO: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } if test -z "$ac_file"; then $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 $as_echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; }; } fi ac_exeext=$ac_cv_exeext # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi fi fi { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } { $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } { $as_echo "$as_me:$LINENO: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest$ac_cv_exeext { $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT { $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 $as_echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_compiler_gnu=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 CFLAGS="" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_g=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_prog_cc_c89=$ac_arg else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:$LINENO: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $GCC::$CFLAGS in yes::*-Wall* ) ;; yes::*) CFLAGS="$CFLAGS -Wall" ;; esac case $GCC::$CFLAGS in *-g* | *omit-frame-pointer* ) ;; yes::*) CFLAGS="$CFLAGS -fomit-frame-pointer" ;; esac { $as_echo "$as_me:$LINENO: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if test "${ac_cv_c_inline+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_inline=$ac_kw else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:$LINENO: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then # Broken: success on invalid input. continue else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 $as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:$LINENO: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then { { $as_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 $as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} { (exit 1); exit 1; }; } fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then eval "$as_ac_Header=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } if test "${ac_cv_c_bigendian+set}" = set; then $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then # Check for potential -arch flags. It is not universal unless # there are some -arch flags. Note that *ppc* also matches # ppc64. This check is also rather less than ideal. case "${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}" in #( *-arch*ppc*|*-arch*i386*|*-arch*x86_64*) ac_cv_c_bigendian=universal;; esac else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then # It does; now see whether it defined to BIG_ENDIAN or not. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_bigendian=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then # It does; now see whether it defined to _BIG_ENDIAN or not. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_cv_c_bigendian=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_bigendian=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes; then # Try to guess by grepping values from an object file. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } extern int foo; int main () { return use_ascii (foo) == use_ebcdic (foo); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_bigendian=no else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_c_bigendian=yes fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 $as_echo "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) cat >>confdefs.h <<\_ACEOF #define WORDS_BIGENDIAN 1 _ACEOF ;; #( no) ;; #( universal) cat >>confdefs.h <<\_ACEOF #define AC_APPLE_UNIVERSAL_BUILD 1 _ACEOF ;; #( *) { { $as_echo "$as_me:$LINENO: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&5 $as_echo "$as_me: error: unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} { (exit 1); exit 1; }; } ;; esac # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || { { $as_echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5 $as_echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && { { $as_echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 $as_echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi { $as_echo "$as_me:$LINENO: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical build" >&5 $as_echo "$as_me: error: invalid value of canonical build" >&2;} { (exit 1); exit 1; }; };; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:$LINENO: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || { { $as_echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5 $as_echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;} { (exit 1); exit 1; }; } fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) { { $as_echo "$as_me:$LINENO: error: invalid value of canonical host" >&5 $as_echo "$as_me: error: invalid value of canonical host" >&2;} { (exit 1); exit 1; }; };; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac case $host_cpu in i?86 | x86_64 | powerpc) cat >>confdefs.h <<\_ACEOF #define CAN_DO_UNALIGNED_WORDS 1 _ACEOF esac for ac_header in inttypes.h netinet/in.h arpa/inet.h getopt.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------- ## ## Report this to henning@makholm.net ## ## ---------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getopt_long strcasecmp do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in stdlib.h unistd.h do as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 $as_echo_n "checking $ac_header usability... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then ac_header_compiler=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 $as_echo_n "checking $ac_header presence... " >&6; } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then ac_header_preproc=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 $as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 $as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ---------------------------------- ## ## Report this to henning@makholm.net ## ## ---------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 $as_echo_n "checking for $ac_header... " >&6; } if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi ac_res=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi as_val=`eval 'as_val=${'$as_ac_Header'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` { $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 $as_echo_n "checking for $ac_func... " >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$ac_func || defined __stub___$ac_func choke me #endif int main () { return $ac_func (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$as_ac_var=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } as_val=`eval 'as_val=${'$as_ac_var'} $as_echo "$as_val"'` if test "x$as_val" = x""yes; then cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:$LINENO: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then ac_cv_func_mmap_fixed_mapped=no else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE /* Assume that all systems that can run configure have sys/param.h. */ # ifndef HAVE_SYS_PARAM_H # define HAVE_SYS_PARAM_H 1 # endif # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; int i, pagesize; int fd; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 1; if (write (fd, data, pagesize) != pagesize) return 1; close (fd); /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 1; data2 = (char *) malloc (2 * pagesize); if (!data2) return 1; data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 1; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 1; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 1; if (read (fd, data3, pagesize) != pagesize) return 1; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 1; close (fd); return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_mmap_fixed_mapped=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_func_mmap_fixed_mapped=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_MMAP 1 _ACEOF fi rm -f conftest.mmap { $as_echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:$LINENO: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi { $as_echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:$LINENO: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac { $as_echo "$as_me:$LINENO: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.17 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGFMT+set}" = set; then $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:$LINENO: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GMSGFMT+set}" = set; then $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:$LINENO: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XGETTEXT+set}" = set; then $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:$LINENO: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGMERGE+set}" = set; then $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:$LINENO: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:$LINENO: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:$LINENO: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:$LINENO: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${acl_cv_path_LD+set}" = set; then $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:$LINENO: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && { { $as_echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 $as_echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } { $as_echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${acl_cv_prog_gnu_ld+set}" = set; then $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:$LINENO: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if test "${acl_cv_rpath+set}" = set; then $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIBICONV_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then gt_cv_func_CFPreferencesCopyAppValue=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_CFPreferencesCopyAppValue=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_CFPREFERENCESCOPYAPPVALUE 1 _ACEOF fi { $as_echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then gt_cv_func_CFLocaleCopyCurrent=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 gt_cv_func_CFLocaleCopyCurrent=no fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_CFLOCALECOPYCURRENT 1 _ACEOF fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$gt_func_gnugettext_libc=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$gt_func_gnugettext_libc=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi ac_res=`eval 'as_val=${'$gt_func_gnugettext_libc'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:$LINENO: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if test "${am_cv_func_iconv+set}" = set; then $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then am_cv_func_iconv=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then am_cv_lib_iconv=yes am_cv_func_iconv=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:$LINENO: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if test "${am_cv_func_iconv_works+set}" = set; then $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then am_cv_func_iconv_works=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) am_cv_func_iconv_works=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ICONV 1 _ACEOF fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:$LINENO: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:$LINENO: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIBINTL_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then eval "$gt_func_gnugettext_libintl=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$gt_func_gnugettext_libintl=no" fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi ac_res=`eval 'as_val=${'$gt_func_gnugettext_libintl'} $as_echo "$as_val"'` { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then cat >>confdefs.h <<\_ACEOF #define ENABLE_NLS 1 _ACEOF else USE_NLS=no fi fi { $as_echo "$as_me:$LINENO: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:$LINENO: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:$LINENO: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:$LINENO: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:$LINENO: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:$LINENO: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi cat >>confdefs.h <<\_ACEOF #define HAVE_GETTEXT 1 _ACEOF cat >>confdefs.h <<\_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi POSUB=po fi INTLLIBS="$LIBINTL" am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:$LINENO: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if test "${am_cv_func_iconv+set}" = set; then $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then am_cv_func_iconv=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then am_cv_lib_iconv=yes am_cv_func_iconv=yes else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:$LINENO: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if test "${am_cv_func_iconv_works+set}" = set; then $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF rm -f conftest$ac_exeext if { (ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then am_cv_func_iconv_works=yes else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) am_cv_func_iconv_works=no fi rm -rf conftest.dSYM rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_ICONV 1 _ACEOF fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:$LINENO: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:$LINENO: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:$LINENO: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if test "${am_cv_proto_iconv+set}" = set; then $as_echo_n "(cached) " >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" $as_echo "$ac_try_echo") >&5 (eval "$ac_compile") 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then am_cv_proto_iconv_arg1="" else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:$LINENO: result: ${ac_t:- }$am_cv_proto_iconv" >&5 $as_echo "${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PERL+set}" = set; then $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="perl" ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:$LINENO: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:$LINENO: result: no" >&5 $as_echo "no" >&6; } fi ac_config_headers="$ac_config_headers config.h:config.hin" ac_config_files="$ac_config_files Makefile:Makefile.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:$LINENO: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) $as_unset $ac_var ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # PATH needs CR # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi # Work around bugs in pre-3.0 UWIN ksh. for as_var in ENV MAIL MAILPATH do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # CDPATH. $as_unset CDPATH as_lineno_1=$LINENO as_lineno_2=$LINENO test "x$as_lineno_1" != "x$as_lineno_2" && test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line after each line using $LINENO; the second 'sed' # does the real work. The second script uses 'N' to pair each # line-number line with the line containing $LINENO, and appends # trailing '-' during substitution so that $LINENO is not a special # case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # scripts with optimization help from Paolo Bonzini. Blame Lee # E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in -n*) case `echo 'x\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. *) ECHO_C='\c';; esac;; *) ECHO_N='-n';; esac if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 # Save the log message, to keep $[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Xcftools $as_me 1.0.7, which was generated by GNU Autoconf 2.63. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTION]... [FILE]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ Xcftools config.status 1.0.7 configured by $0, generated by GNU Autoconf 2.63, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2008 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_FILES="$CONFIG_FILES '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header { $as_echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; };; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { $as_echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.hin" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile:Makefile.in" ;; *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 $as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || { $as_echo "$as_me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=' ' ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 $as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\).*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\).*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 $as_echo "$as_me: error: could not setup config files machinery" >&2;} { (exit 1); exit 1; }; } _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 $as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} { (exit 1); exit 1; }; } else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 { { $as_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 $as_echo "$as_me: error: could not setup config headers machinery" >&2;} { (exit 1); exit 1; }; } fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) { { $as_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 $as_echo "$as_me: error: invalid tag $ac_tag" >&2;} { (exit 1); exit 1; }; };; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || { { $as_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 $as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} { (exit 1); exit 1; }; };; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ac_file_inputs="$ac_file_inputs '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:$LINENO: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` { as_dir="$ac_dir" case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 $as_echo "$as_me: error: cannot create directory $as_dir" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p ' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 $as_echo "$as_me: error: could not create $ac_file" >&2;} { (exit 1); exit 1; }; } fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 $as_echo "$as_me: error: could not create -" >&2;} { (exit 1); exit 1; }; } fi ;; :C) { $as_echo "$as_me:$LINENO: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 $as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} { (exit 1); exit 1; }; } # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi xcftools-1.0.7/configure.ac0000644000175000017500000000401611223376370015515 0ustar makholmmakholmdnl Configure script for xcftools dnl dnl This file was written by Henning Makholm dnl It is hereby in the public domain. dnl dnl In jurisdictions that do not recognise grants of copyright to the dnl public domain: I, the author and (presumably, in those jurisdictions) dnl copyright holder, hereby permit anyone to distribute and use this code, dnl in source code or binary form, with or without modifications. This dnl permission is world-wide and irrevocable. dnl dnl Of course, I will not be liable for any errors or shortcomings in the dnl code, since I give it away without asking any compenstations. dnl dnl If you use or distribute this code, I would appreciate receiving dnl credit for writing it, in whichever way you find proper and customary. dnl dnl ------------------------ dnl The following line is the MASTER SOURCE for the version number AC_INIT(Xcftools,1.0.7,henning@makholm.net,xcftools) AC_CONFIG_SRCDIR(xcfinfo.c) AC_PROG_INSTALL AC_ARG_PROGRAM AC_ARG_ENABLE(precomputed-scaletable, AC_HELP_STRING([--enable-precomputed-scaletable], [Use precomputed multiplication table (adds 64 KB per binary)]), [AC_DEFINE(PRECOMPUTED_SCALETABLE,1, [Define to use a precomputed multiplication table (adds 64 KB per binary)] )]) AC_PROG_CC case $GCC::$CFLAGS in yes::*-Wall* ) ;; yes::*) CFLAGS="$CFLAGS -Wall" ;; esac case $GCC::$CFLAGS in *-g* | *omit-frame-pointer* ) ;; yes::*) CFLAGS="$CFLAGS -fomit-frame-pointer" ;; esac AC_C_INLINE AC_C_BIGENDIAN AC_CANONICAL_HOST case $host_cpu in i?86 | x86_64 | powerpc) AC_DEFINE(CAN_DO_UNALIGNED_WORDS,1, [Define for CPUs that can read unaligned words without traps or faults]) esac AC_CHECK_HEADERS(inttypes.h netinet/in.h arpa/inet.h getopt.h) AC_CHECK_FUNCS(getopt_long strcasecmp) AC_FUNC_MMAP AM_GNU_GETTEXT(external) AM_ICONV AC_PATH_PROG(PERL,perl,perl) AC_CONFIG_HEADERS(config.h:config.hin) AC_CONFIG_FILES(Makefile:Makefile.in) AC_OUTPUT xcftools-1.0.7/dist-generated0000644000175000017500000000007110377141417016047 0ustar makholmmakholmconfig.guess config.hin config.sub configure notcvsfiles xcftools-1.0.7/exit.1i0000644000175000017500000000264610375754012014442 0ustar makholmmakholm.SH EXIT STATUS The exit status of .B \*p is .TP 5 0 Success .TP 20 #ifdef XCF2FOO Problems parsing the command line, including unknown color names (or missing color name directory) for .BR \-b . #else Problems parsing the command line. #endif .TP 21 The specified XCF file does not exist or cannot be read. #ifdef XCF2FOO .TP 22 A layer named on the command line was not found, or the .B --mask option was used for a layer that has no layer mask. #ifdef XCF2PNM .TP 100 Transparent pixels were found, but neither .B \-a nor .B \-b was given. .TP 101 The .B \-a option was given yet the image has no transparency. (Use .B \-A to go on anyway). #endif .TP 102 The .B \-G option was given, yet partial transparency was found. .TP 103 #ifdef XCF2PNM .B \-g (or .BR \-m ) was given, yet colored (or gray) pixels were found. #else .B \-g was given, yet colored pixels were found. #endif #endif .TP 123 The XCF file contains presumably valid features that .B xcftools does not support. (As of this writing there is no known way of getting the Gimp to write an XCF file that will provoke this return. Please notify the author if you discover one). .TP 125 The XCF file is malformed. .TP 126 An uncompression program could not be executed, or terminated abnormally. .TP 127 Unexpected I/O error, internal errors, or other "this can't happen" situations. .P If an uncompression program returns an error exit status, this will be returned from .B \*p too. xcftools-1.0.7/flatspec.c0000644000175000017500000003051711223357034015175 0ustar makholmmakholm/* Flattening selections function for xcftools * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "xcftools.h" #include "flatten.h" #include #include void init_flatspec(struct FlattenSpec *spec) { spec->window_mode = USE_CANVAS ; spec->default_pixel = PERHAPS_ALPHA_CHANNEL ; spec->numLayers = 0 ; spec->layers = NULL ; spec->transmap_filename = NULL ; spec->output_filename = "-" ; spec->out_color_mode = COLOR_BY_CONTENTS ; spec->partial_transparency_mode = ALLOW_PARTIAL_TRANSPARENCY ; spec->process_in_memory = 0 ; spec->gimpish_indexed = 1 ; } void add_layer_request(struct FlattenSpec *spec, const char *layer) { spec->layers = realloc(spec->layers, sizeof(struct xcfLayer) * (1+spec->numLayers)); if( spec->layers == NULL ) FatalUnexpected(_("Out of memory")); spec->layers[spec->numLayers].name = layer ; spec->layers[spec->numLayers].mode = (GimpLayerModeEffects)-1 ; spec->layers[spec->numLayers].opacity = 9999 ; spec->layers[spec->numLayers].hasMask = -1 ; spec->numLayers++ ; } struct xcfLayer * lastlayerspec(struct FlattenSpec *spec,const char *option) { if( spec->numLayers == 0 ) FatalGeneric(20,_("The %s option must follow a layer name on the " "command line"),option); return spec->layers + (spec->numLayers-1) ; } static int typeHasTransparency(GimpImageType type) { switch( type ) { case GIMP_RGB_IMAGE: case GIMP_GRAY_IMAGE: case GIMP_INDEXED_IMAGE: return 0 ; case GIMP_RGBA_IMAGE: case GIMP_GRAYA_IMAGE: case GIMP_INDEXEDA_IMAGE: return 1 ; } return 1 ; } static enum out_color_mode color_by_layers(struct FlattenSpec *spec) { int colormap_is_colored = 0 ; enum out_color_mode grayish ; int i ; if( spec->default_pixel == CHECKERED_BACKGROUND ) grayish = COLOR_GRAY ; else { int degrayed = degrayPixel(spec->default_pixel); if( degrayed < 0 ) { return COLOR_RGB ; } else if( spec->gimpish_indexed && (degrayed == 0 || degrayed == 255) ) { grayish = COLOR_MONO ; } else { grayish = COLOR_GRAY ; } } for( i=0; inumLayers; i++ ) switch( spec->layers[i].type ) { case GIMP_RGB_IMAGE: case GIMP_RGBA_IMAGE: return COLOR_RGB ; case GIMP_GRAY_IMAGE: case GIMP_GRAYA_IMAGE: grayish = COLOR_GRAY ; break ; case GIMP_INDEXED_IMAGE: case GIMP_INDEXEDA_IMAGE: if( colormap_is_colored ) return COLOR_RGB ; break ; } return grayish ; } void complete_flatspec(struct FlattenSpec *spec, guesser guess_callback) { unsigned i ; int anyPartial ; /* Find the layers to convert. */ if( spec->numLayers == 0 ) { spec->layers = XCF.layers ; spec->numLayers = XCF.numLayers ; } else { for( i=0; inumLayers; i++ ) { GimpLayerModeEffects mode ; int opacity, hasMask ; unsigned j ; for( j=0; ; j++ ) { if( j == XCF.numLayers ) FatalGeneric(22,_("The image has no layer called '%s'"), spec->layers[i].name); if( strcmp(spec->layers[i].name,XCF.layers[j].name) == 0 ) break ; } mode = spec->layers[i].mode == (GimpLayerModeEffects)-1 ? XCF.layers[j].mode : spec->layers[i].mode ; opacity = spec->layers[i].opacity == 9999 ? XCF.layers[j].opacity : spec->layers[i].opacity ; hasMask = spec->layers[i].hasMask == -1 ? XCF.layers[j].hasMask : spec->layers[i].hasMask ; if( hasMask && !XCF.layers[j].hasMask && XCF.layers[j].mask.hierarchy == 0 ) FatalGeneric(22,_("Layer '%s' has no layer mask to enable"), spec->layers[i].name); spec->layers[i] = XCF.layers[j] ; spec->layers[i].mode = mode ; spec->layers[i].opacity = opacity ; spec->layers[i].hasMask = hasMask ; spec->layers[i].isVisible = 1 ; } } /* Force the mode of the lowest visible layer to be Normal or Dissolve. * That may not be logical, but the Gimp does it */ for( i=0; i < spec->numLayers; i++ ) { if( spec->layers[i].isVisible ) { if( spec->layers[i].mode != GIMP_DISSOLVE_MODE ) spec->layers[i].mode = GIMP_NORMAL_MODE ; break ; } } /* Mimic the Gimp's behavior on indexed layers */ if( XCF.type == GIMP_INDEXED && spec->gimpish_indexed ) { for( i=0; inumLayers; i++ ) if( spec->layers[i].mode != GIMP_DISSOLVE_MODE ) spec->layers[i].mode = GIMP_NORMAL_NOPARTIAL_MODE ; } else spec->gimpish_indexed = 0 ; /* compute dimensions of the window */ if( spec->window_mode == AUTOCROP ) { int first = 1 ; for( i=0; inumLayers; i++ ) if( spec->layers[i].isVisible ) { computeDimensions(&spec->layers[i].dim) ; if( first ) { spec->dim = spec->layers[i].dim ; first = 0 ; } else { if( spec->dim.c.l > spec->layers[i].dim.c.l ) spec->dim.c.l = spec->layers[i].dim.c.l ; if( spec->dim.c.r < spec->layers[i].dim.c.r ) spec->dim.c.r = spec->layers[i].dim.c.r ; if( spec->dim.c.t > spec->layers[i].dim.c.t ) spec->dim.c.t = spec->layers[i].dim.c.t ; if( spec->dim.c.b < spec->layers[i].dim.c.b ) spec->dim.c.b = spec->layers[i].dim.c.b ; } } if( first ) { spec->window_mode = USE_CANVAS ; } else { spec->dim.width = spec->dim.c.r - spec->dim.c.l ; spec->dim.height = spec->dim.c.b - spec->dim.c.t ; } } if( spec->window_mode != AUTOCROP ) { if( (spec->window_mode & MANUAL_OFFSET) == 0 ) spec->dim.c.t = spec->dim.c.l = 0 ; if( (spec->window_mode & MANUAL_CROP) == 0 ) { spec->dim.height = XCF.height ; spec->dim.width = XCF.width ; } } computeDimensions(&spec->dim); /* Turn off layers that we don't hit at all */ for( i=0; inumLayers; i++ ) if( spec->layers[i].isVisible && disjointRects(spec->dim.c,spec->layers[i].dim.c) ) spec->layers[i].isVisible = 0 ; /* See if there is a completely covering layer somewhere in the stack */ /* Also check if partial transparency is possible */ anyPartial = 0 ; for( i=spec->numLayers; i-- ; ) { if( !spec->layers[i].isVisible ) continue ; if( typeHasTransparency(spec->layers[i].type) ) { if( spec->layers[i].mode == GIMP_NORMAL_MODE ) anyPartial = 1; } else if( isSubrect(spec->dim.c,spec->layers[i].dim.c) && !spec->layers[i].hasMask && (spec->layers[i].mode == GIMP_NORMAL_MODE || spec->layers[i].mode == GIMP_NORMAL_NOPARTIAL_MODE || spec->layers[i].mode == GIMP_DISSOLVE_MODE) ) { /* This layer fills out the entire image. * Turn off anly lower layers, and note that we cannot have * transparency at all. */ while(i) spec->layers[--i].isVisible = 0 ; if( spec->default_pixel != FORCE_ALPHA_CHANNEL ) spec->default_pixel = NEWALPHA(colormap[0],255); anyPartial = 0 ; break ; } } if( spec->partial_transparency_mode == ALLOW_PARTIAL_TRANSPARENCY && (!anyPartial || ALPHA(spec->default_pixel) >= 128) ) spec->partial_transparency_mode = PARTIAL_TRANSPARENCY_IMPOSSIBLE ; /* Initialize layers and print overview if we're verbose */ for( i=spec->numLayers; i--; ) if( spec->layers[i].isVisible ) { initLayer(&spec->layers[i]) ; if( verboseFlag ) { fprintf(stderr,"%dx%d%+d%+d %s %s", spec->layers[i].dim.width, spec->layers[i].dim.height, spec->layers[i].dim.c.l - spec->dim.c.l, spec->layers[i].dim.c.t - spec->dim.c.t, _(showGimpImageType(spec->layers[i].type)), _(showGimpLayerModeEffects(spec->layers[i].mode))); if( spec->layers[i].opacity < 255 ) fprintf(stderr,"/%02d%%",spec->layers[i].opacity * 100 / 255); if( XCF.layers[i].hasMask ) fprintf(stderr,_("/mask")); fprintf(stderr," %s\n",spec->layers[i].name); } } /* Resolve color mode unless we wait until we have the entire image */ if( spec->out_color_mode == COLOR_BY_CONTENTS && !spec->process_in_memory ) { if( guess_callback ) spec->out_color_mode = guess_callback(spec,NULL); if( spec->out_color_mode == COLOR_BY_CONTENTS ) spec->out_color_mode = color_by_layers(spec) ; } } void analyse_colormode(struct FlattenSpec *spec,rgba **allPixels, guesser guess_callback) { unsigned x,y ; int status ; /* 8 - looking for any transparency * 4 - looking for partially transparent pixels * 2 - looking for pixels other than black and white * 1 - looking for colored pixels */ int known_absent = 0 ; int assume_present = 0 ; if( spec->out_color_mode == COLOR_BY_CONTENTS && guess_callback ) spec->out_color_mode = guess_callback(spec,allPixels) ; if( spec->out_color_mode == COLOR_RGB ) assume_present |= 3 ; if( spec->out_color_mode == COLOR_INDEXED ) assume_present |= 3 ; if( spec->out_color_mode == COLOR_GRAY ) assume_present |= 2 ; switch( color_by_layers(spec) ) { case COLOR_GRAY: known_absent |= 1 ; break ; case COLOR_MONO: known_absent |= 3 ; break ; default: break ; } if( spec->partial_transparency_mode == DISSOLVE_PARTIAL_TRANSPARENCY || spec->partial_transparency_mode == PARTIAL_TRANSPARENCY_IMPOSSIBLE ) known_absent |= 4 ; if( ALPHA(spec->default_pixel) >= 128 ) known_absent |= 12 ; else if( spec->default_pixel == FORCE_ALPHA_CHANNEL ) assume_present |= 8 ; status = 15 - (known_absent | assume_present) ; for( y=0; status && ydim.height; y++ ) { rgba *row = allPixels[y] ; if( (status & 3) != 0 ) { /* We're still interested in color */ for( x=0; status && xdim.width; x++ ) { if( NULLALPHA(row[x]) ) status &= ~8 ; else { rgba full = row[x] | (255 << ALPHA_SHIFT) ; if( !FULLALPHA(row[x]) ) status &= ~12 ; if( full == NEWALPHA(0,255) || full == NEWALPHA(-1,255) ) /* Black or white */ ; else if( degrayPixel(row[x]) != -1 ) status &= ~2 ; /* gray */ else status &= ~3 ; /* color */ } } } else { /* Not interested in color */ for( x=0; status && xdim.width; x++ ) { if( NULLALPHA(row[x]) ) status &= ~8 ; else if( !FULLALPHA(row[x]) ) status &= ~12 ; } } } status |= known_absent ; switch( spec->out_color_mode ) { case COLOR_INDEXED: /* The caller takes responsibility */ case COLOR_RGB: /* Everything is fine. */ break ; case COLOR_GRAY: if( (status & 1) == 0 ) FatalGeneric(103, _("Grayscale output selected, but colored pixel(s) found")); break ; case COLOR_MONO: if( (status & 2) == 0 ) FatalGeneric(103,_("Monochrome output selected, but not all pixels " "are black or white")); break ; case COLOR_BY_FILENAME: /* Should not happen ... */ case COLOR_BY_CONTENTS: if( (status & 1) == 0 ) spec->out_color_mode = COLOR_RGB ; else if( (status & 2) == 0 ) spec->out_color_mode = COLOR_GRAY ; else spec->out_color_mode = COLOR_MONO ; break ; } if( (status & 12) == 12 ) /* No transparency found */ spec->default_pixel = NEWALPHA(colormap[0],255); else if( (status & 12) == 4 ) spec->partial_transparency_mode = PARTIAL_TRANSPARENCY_IMPOSSIBLE ; } xcftools-1.0.7/flatten.c0000644000175000017500000005321411223357034015030 0ustar makholmmakholm/* Flattning functions for xcftools * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "xcftools.h" #include "flatten.h" #include "pixels.h" #include #include #include static rgba __ATTRIBUTE__((noinline,const)) composite_one(rgba bot,rgba top) { unsigned tfrac, alpha ; tfrac = ALPHA(top) ; alpha = 255 ; if( !FULLALPHA(bot) ) { alpha = 255 ^ scaletable[255-ALPHA(bot)][255-ALPHA(top)] ; /* This peculiar combination of ^ and - makes the GCC code * generator for i386 particularly happy. */ tfrac = (256*ALPHA(top) - 1) / alpha ; /* Tfrac is the fraction of the coposited pixel's covered area * that comes from the top pixel. * For mathematical accuracy we ought to scale by 255 and * subtract alpha/2, but this is faster, and never misses the * true value by more than one 1/255. This effect is completely * overshadowed by the linear interpolation in the first place. * (I.e. gamma is ignored when combining intensities). * [In any case, complete fairness is not possible: if the * bottom pixel had alpha=170 and the top has alpha=102, * each should contribute equally to the color of the * resulting alpha=204 pixel, which is not possible in general] * Subtracting one helps the topfrac never be 256, which would * be bad. * On the other hand it means that we would get tfrac=-1 if the * top pixel is completely transparent, and we get a division * by zero if _both_ pixels are fully transparent. These cases * must be handled by all callers. * More snooping in the Gimp sources reveal that it uses * floating-point for its equivalent of tfrac when the * bottom layer has an alpha channel. (alphify() macro * in paint-funcs.c). What gives? */ } return (alpha << ALPHA_SHIFT) + ((uint32_t)scaletable[ tfrac ][255&(top>>RED_SHIFT )] << RED_SHIFT ) + ((uint32_t)scaletable[ tfrac ][255&(top>>GREEN_SHIFT)] << GREEN_SHIFT ) + ((uint32_t)scaletable[ tfrac ][255&(top>>BLUE_SHIFT )] << BLUE_SHIFT ) + ((uint32_t)scaletable[255^tfrac][255&(bot>>RED_SHIFT )] << RED_SHIFT ) + ((uint32_t)scaletable[255^tfrac][255&(bot>>GREEN_SHIFT)] << GREEN_SHIFT ) + ((uint32_t)scaletable[255^tfrac][255&(bot>>BLUE_SHIFT )] << BLUE_SHIFT ) ; } /* merge_normal() takes ownership of bot. * merge_normal() will share ownership of top. * Return: may be shared. */ static struct Tile * __ATTRIBUTE__((noinline)) merge_normal(struct Tile *bot, struct Tile *top) { unsigned i ; assertTileCompatibility(bot,top); /* See if there is an easy winner */ if( (bot->summary & TILESUMMARY_ALLNULL) || (top->summary & TILESUMMARY_ALLFULL) ) { freeTile(bot); return top ; } if( top->summary & TILESUMMARY_ALLNULL ) { freeTile(top); return bot ; } /* Try hard to make top win */ for( i=0; ; i++ ) { if( i == top->count ) { freeTile(bot); return top ; } if( !(NULLALPHA(bot->pixels[i]) || FULLALPHA(top->pixels[i])) ) break ; } INIT_SCALETABLE_IF( !(top->summary & TILESUMMARY_CRISP) ); /* Otherwise bot wins, but is forever changed ... */ if( (top->summary & TILESUMMARY_ALLNULL) == 0 ) { unsigned i ; invalidateSummary(bot,0); for( i=0 ; i < top->count ; i++ ) { if( !NULLALPHA(top->pixels[i]) ) { if( FULLALPHA(top->pixels[i]) || NULLALPHA(bot->pixels[i]) ) bot->pixels[i] = top->pixels[i] ; else bot->pixels[i] = composite_one(bot->pixels[i],top->pixels[i]); } } } freeTile(top); return bot ; } #define exotic_combinator static inline unsigned __ATTRIBUTE__((const)) exotic_combinator ucombine_ADDITION(uint8_t bot,uint8_t top) { return bot+top > 255 ? 255 : bot+top ; } exotic_combinator ucombine_SUBTRACT(uint8_t bot,uint8_t top) { return top>bot ? 0 : bot-top ; } exotic_combinator ucombine_LIGHTEN_ONLY(uint8_t bot,uint8_t top) { return top > bot ? top : bot ; } exotic_combinator ucombine_DARKEN_ONLY(uint8_t bot,uint8_t top) { return top < bot ? top : bot ; } exotic_combinator ucombine_DIFFERENCE(uint8_t bot,uint8_t top) { return top > bot ? top-bot : bot-top ; } exotic_combinator ucombine_MULTIPLY(uint8_t bot,uint8_t top) { return scaletable[bot][top] ; } exotic_combinator ucombine_DIVIDE(uint8_t bot,uint8_t top) { int result = (int)bot*256 / (1+top) ; return result >= 256 ? 255 : result ; } exotic_combinator ucombine_SCREEN(uint8_t bot,uint8_t top) { /* An inverted version of "multiply" */ return 255 ^ scaletable[255-bot][255-top] ; } exotic_combinator ucombine_OVERLAY(uint8_t bot,uint8_t top) { return scaletable[bot][bot] + 2*scaletable[top][scaletable[bot][255-bot]] ; /* This strange formula is equivalent to * (1-top)*(bot^2) + top*(1-(1-top)^2) * that is, the top value is used to interpolate between * the self-multiply and the self-screen of the bottom. */ /* Note: This is exactly what the "Soft light" effect also * does, though with different code in the Gimp. */ } exotic_combinator ucombine_DODGE(uint8_t bot,uint8_t top) { return ucombine_DIVIDE(bot,255-top); } exotic_combinator ucombine_BURN(uint8_t bot,uint8_t top) { return 255 - ucombine_DIVIDE(255-bot,top); } exotic_combinator ucombine_HARDLIGHT(uint8_t bot,uint8_t top) { if( top >= 128 ) return 255 ^ scaletable[255-bot][2*(255-top)] ; else return scaletable[bot][2*top]; /* The code that implements "hardlight" in Gimp 2.2.10 has some * rounding errors, but this is undoubtedly what is meant. */ } exotic_combinator ucombine_GRAIN_EXTRACT(uint8_t bot,uint8_t top) { int temp = (int)bot - (int)top + 128 ; return temp < 0 ? 0 : temp >= 256 ? 255 : temp ; } exotic_combinator ucombine_GRAIN_MERGE(uint8_t bot,uint8_t top) { int temp = (int)bot + (int)top - 128 ; return temp < 0 ? 0 : temp >= 256 ? 255 : temp ; } struct HSV { enum { HUE_RED_GREEN_BLUE,HUE_RED_BLUE_GREEN,HUE_BLUE_RED_GREEN, HUE_BLUE_GREEN_RED,HUE_GREEN_BLUE_RED,HUE_GREEN_RED_BLUE } hue; unsigned ch1, ch2, ch3 ; }; static void RGBtoHSV(rgba rgb,struct HSV *hsv) { unsigned RED = (uint8_t)(rgb >> RED_SHIFT); unsigned GREEN = (uint8_t)(rgb >> GREEN_SHIFT); unsigned BLUE = (uint8_t)(rgb >> BLUE_SHIFT) ; #define HEXTANT(b,m,t) hsv->ch1 = b, hsv->ch2 = m, hsv->ch3 = t, \ hsv->hue = HUE_ ## b ## _ ## m ## _ ## t if( GREEN <= RED ) if( BLUE <= RED ) if( GREEN <= BLUE ) HEXTANT(GREEN,BLUE,RED); else HEXTANT(BLUE,GREEN,RED); else HEXTANT(GREEN,RED,BLUE); else if( BLUE <= RED ) HEXTANT(BLUE,RED,GREEN); else if( BLUE <= GREEN ) HEXTANT(RED,BLUE,GREEN); else HEXTANT(RED,GREEN,BLUE); #undef HEXTANT } /* merge_exotic() destructively updates bot. * merge_exotic() reads but does not free top. */ static void __ATTRIBUTE__((noinline)) merge_exotic(struct Tile *bot, const struct Tile *top, GimpLayerModeEffects mode) { unsigned i ; assertTileCompatibility(bot,top); if( (bot->summary & TILESUMMARY_ALLNULL) != 0 ) return ; if( (top->summary & TILESUMMARY_ALLNULL) != 0 ) return ; assert( bot->refcount == 1 ); /* The transparency status of bot never changes */ INIT_SCALETABLE_IF(1); for( i=0; i < top->count ; i++ ) { uint32_t RED, GREEN, BLUE ; if( NULLALPHA(bot->pixels[i]) || NULLALPHA(top->pixels[i]) ) continue ; #define UNIFORM(mode) case GIMP_ ## mode ## _MODE: \ RED = ucombine_ ## mode (bot->pixels[i]>>RED_SHIFT , \ top->pixels[i]>>RED_SHIFT ); \ GREEN = ucombine_ ## mode (bot->pixels[i]>>GREEN_SHIFT, \ top->pixels[i]>>GREEN_SHIFT); \ BLUE = ucombine_ ## mode (bot->pixels[i]>>BLUE_SHIFT , \ top->pixels[i]>>BLUE_SHIFT ); \ break ; switch( mode ) { case GIMP_NORMAL_MODE: case GIMP_DISSOLVE_MODE: FatalUnexpected("Normal and Dissolve mode can't happen here!"); UNIFORM(ADDITION); UNIFORM(SUBTRACT); UNIFORM(LIGHTEN_ONLY); UNIFORM(DARKEN_ONLY); UNIFORM(DIFFERENCE); UNIFORM(MULTIPLY); UNIFORM(DIVIDE); UNIFORM(SCREEN); case GIMP_SOFTLIGHT_MODE: /* A synonym for "overlay"! */ UNIFORM(OVERLAY); UNIFORM(DODGE); UNIFORM(BURN); UNIFORM(HARDLIGHT); UNIFORM(GRAIN_EXTRACT); UNIFORM(GRAIN_MERGE); case GIMP_HUE_MODE: case GIMP_SATURATION_MODE: case GIMP_VALUE_MODE: case GIMP_COLOR_MODE: { static struct HSV hsvTop, hsvBot ; RGBtoHSV(top->pixels[i],&hsvTop); if( mode == GIMP_HUE_MODE && hsvTop.ch1 == hsvTop.ch3 ) continue ; RGBtoHSV(bot->pixels[i],&hsvBot); if( mode == GIMP_VALUE_MODE ) { if( hsvBot.ch3 ) { hsvBot.ch1 = (hsvBot.ch1*hsvTop.ch3 + hsvBot.ch3/2) / hsvBot.ch3; hsvBot.ch2 = (hsvBot.ch2*hsvTop.ch3 + hsvBot.ch3/2) / hsvBot.ch3; hsvBot.ch3 = hsvTop.ch3 ; } else { hsvBot.ch1 = hsvBot.ch2 = hsvBot.ch3 = hsvTop.ch3 ; } } else { unsigned mfNum, mfDenom ; if( mode == GIMP_HUE_MODE || mode == GIMP_COLOR_MODE ) { mfNum = hsvTop.ch2-hsvTop.ch1 ; mfDenom = hsvTop.ch3-hsvTop.ch1 ; hsvBot.hue = hsvTop.hue ; } else { mfNum = hsvBot.ch2-hsvBot.ch1 ; mfDenom = hsvBot.ch3-hsvBot.ch1 ; } if( mode == GIMP_SATURATION_MODE ) { if( hsvTop.ch3 == 0 ) hsvBot.ch1 = hsvBot.ch3 ; /* Black has no saturation */ else hsvBot.ch1 = (hsvTop.ch1*hsvBot.ch3 + hsvTop.ch3/2) / hsvTop.ch3; } else if( mode == GIMP_COLOR_MODE ) { /* GIMP_COLOR_MODE works in HSL space instead of HSV. We must * transfer H and S, keeping the L = ch1+ch3 of the bottom pixel, * but the S we transfer works differently from the S in HSV. */ unsigned L = hsvTop.ch1 + hsvTop.ch3 ; unsigned sNum = hsvTop.ch3 - hsvTop.ch1 ; unsigned sDenom = L < 256 ? L : 510-L ; if( sDenom == 0 ) sDenom = 1 ; /* sNum will be 0 */ L = hsvBot.ch1 + hsvBot.ch3 ; if( L < 256 ) { /* Ideally we want to compute L/2 * (1-sNum/sDenom) * But shuffle this a bit so we can use integer arithmetic. * The "-1" in the rounding prevents us from ending up with * ch1 > ch3. */ hsvBot.ch1 = (L*(sDenom-sNum)+sDenom-1)/(2*sDenom); hsvBot.ch3 = L - hsvBot.ch1 ; } else { /* Here our goal is 255 - (510-L)/2 * (1-sNum/sDenom) */ hsvBot.ch3 = 255 - ((510-L)*(sDenom-sNum)+sDenom-1)/(2*sDenom); hsvBot.ch1 = L - hsvBot.ch3 ; } assert(hsvBot.ch3 <= 255); assert(hsvBot.ch3 >= hsvBot.ch1); } if( mfDenom == 0 ) hsvBot.ch2 = hsvBot.ch1 ; else hsvBot.ch2 = hsvBot.ch1 + (mfNum*(hsvBot.ch3-hsvBot.ch1) + mfDenom/2) / mfDenom ; } switch( hsvBot.hue ) { #define HEXTANT(b,m,t) case HUE_ ## b ## _ ## m ## _ ## t : \ b = hsvBot.ch1; m = hsvBot.ch2; t = hsvBot.ch3; break; HEXTANT(RED,GREEN,BLUE); HEXTANT(RED,BLUE,GREEN); HEXTANT(BLUE,RED,GREEN); HEXTANT(BLUE,GREEN,RED); HEXTANT(GREEN,BLUE,RED); HEXTANT(GREEN,RED,BLUE); #undef HEXTANT default: FatalUnexpected("Hue hextant is %d", hsvBot.hue); } break ; } default: FatalUnsupportedXCF(_("'%s' layer mode"), _(showGimpLayerModeEffects(mode))); } if( FULLALPHA(bot->pixels[i] & top->pixels[i]) ) bot->pixels[i] = (bot->pixels[i] & (255 << ALPHA_SHIFT)) + (RED << RED_SHIFT) + (GREEN << GREEN_SHIFT) + (BLUE << BLUE_SHIFT) ; else { rgba bp = bot->pixels[i] ; /* In a sane world, the alpha of the top pixel would simply be * used to interpolate linearly between the bottom pixel's base * color and the effect-computed color. * But no! What the Gimp actually does is empirically * described by the following (which borrows code from * composite_one() that makes no theoretical sense here): */ unsigned tfrac = ALPHA(top->pixels[i]) ; if( !FULLALPHA(bp) ) { unsigned pseudotop = (tfrac < ALPHA(bp) ? tfrac : ALPHA(bp)); unsigned alpha = 255 ^ scaletable[255-ALPHA(bp)][255-pseudotop] ; tfrac = (256*pseudotop - 1) / alpha ; } bot->pixels[i] = (bp & (255 << ALPHA_SHIFT)) + ((rgba)scaletable[ tfrac ][ RED ] << RED_SHIFT ) + ((rgba)scaletable[ tfrac ][ GREEN ] << GREEN_SHIFT) + ((rgba)scaletable[ tfrac ][ BLUE ] << BLUE_SHIFT ) + ((rgba)scaletable[255^tfrac][255&(bp>>RED_SHIFT )] << RED_SHIFT ) + ((rgba)scaletable[255^tfrac][255&(bp>>GREEN_SHIFT)] << GREEN_SHIFT) + ((rgba)scaletable[255^tfrac][255&(bp>>BLUE_SHIFT )] << BLUE_SHIFT ) ; } } return ; } static void dissolveTile(struct Tile *tile) { unsigned i ; summary_t summary ; assert( tile->refcount == 1 ); if( (tile->summary & TILESUMMARY_CRISP) ) return ; summary = TILESUMMARY_UPTODATE + TILESUMMARY_ALLNULL + TILESUMMARY_ALLFULL + TILESUMMARY_CRISP ; for( i = 0 ; i < tile->count ; i++ ) { if( FULLALPHA(tile->pixels[i]) ) summary &= ~TILESUMMARY_ALLNULL ; else if ( NULLALPHA(tile->pixels[i]) ) summary &= ~TILESUMMARY_ALLFULL ; else if( ALPHA(tile->pixels[i]) > rand() % 0xFF ) { tile->pixels[i] |= 255 << ALPHA_SHIFT ; summary &= ~TILESUMMARY_ALLNULL ; } else { tile->pixels[i] = 0 ; summary &= ~TILESUMMARY_ALLFULL ; } } tile->summary = summary ; } static void roundAlpha(struct Tile *tile) { unsigned i ; summary_t summary ; assert( tile->refcount == 1 ); if( (tile->summary & TILESUMMARY_CRISP) ) return ; summary = TILESUMMARY_UPTODATE + TILESUMMARY_ALLNULL + TILESUMMARY_ALLFULL + TILESUMMARY_CRISP ; for( i = 0 ; i < tile->count ; i++ ) { if( ALPHA(tile->pixels[i]) >= 128 ) { tile->pixels[i] |= 255 << ALPHA_SHIFT ; summary &= ~TILESUMMARY_ALLNULL ; } else { tile->pixels[i] = 0 ; summary &= ~TILESUMMARY_ALLFULL ; } } tile->summary = summary ; } /* flattenTopdown() shares ownership of top. * The return value may be a shared tile. */ static struct Tile * flattenTopdown(struct FlattenSpec *spec, struct Tile *top, unsigned nlayers, const struct rect *where) { struct Tile *tile; while( nlayers-- ) { if( tileSummary(top) & TILESUMMARY_ALLFULL ) return top ; if( !spec->layers[nlayers].isVisible ) continue ; tile = getLayerTile(&spec->layers[nlayers],where); if( tile->summary & TILESUMMARY_ALLNULL ) continue ; /* Simulate a tail call */ switch( spec->layers[nlayers].mode ) { case GIMP_NORMAL_NOPARTIAL_MODE: roundAlpha(tile) ; /* fall through */ if(0) { case GIMP_DISSOLVE_MODE: dissolveTile(tile); /* fall through */ } case GIMP_NORMAL_MODE: top = merge_normal(tile,top); break ; default: { struct Tile *below, *above ; unsigned i ; if( !(top->summary & TILESUMMARY_ALLNULL) ) { rgba tile_or = 0 ; invalidateSummary(tile,0); for( i=0; icount; i++ ) if( FULLALPHA(top->pixels[i]) ) tile->pixels[i] = 0 ; else tile_or |= tile->pixels[i] ; /* If the tile only has pixels that will be covered by 'top' anyway, * forget it anyway. */ if( ALPHA(tile_or) == 0 ) { freeTile(tile); break ; /* from the switch, which will continue the while */ } } /* Create a dummy top for the layers below this */ if( top->summary & TILESUMMARY_CRISP ) { above = forkTile(top); } else { summary_t summary = TILESUMMARY_ALLNULL ; above = newTile(*where); for( i=0; icount; i++ ) if( FULLALPHA(top->pixels[i]) ) { above->pixels[i] = -1 ; summary = 0 ; } else above->pixels[i] = 0 ; above->summary = TILESUMMARY_UPTODATE + TILESUMMARY_CRISP + summary; } below = flattenTopdown(spec, above, nlayers, where); if( below->refcount > 1 ) { assert( below == top ); /* This can only happen if 'below' is a copy of 'top' * THROUGH 'above', which in turn means that none of all * this is visible after all. So just free it and return 'top'. */ freeTile(below); return top ; } merge_exotic(below,tile,spec->layers[nlayers].mode); freeTile(tile); top = merge_normal(below,top); return top ; } } } return top ; } static void addBackground(struct FlattenSpec *spec, struct Tile *tile, unsigned ncols) { unsigned i ; if( tileSummary(tile) & TILESUMMARY_ALLFULL ) return ; switch( spec->partial_transparency_mode ) { case FORBID_PARTIAL_TRANSPARENCY: if( !(tileSummary(tile) & TILESUMMARY_CRISP) ) FatalGeneric(102,_("Flattened image has partially transparent pixels")); break ; case DISSOLVE_PARTIAL_TRANSPARENCY: dissolveTile(tile); break ; case ALLOW_PARTIAL_TRANSPARENCY: case PARTIAL_TRANSPARENCY_IMPOSSIBLE: break ; } if( spec->default_pixel == CHECKERED_BACKGROUND ) { INIT_SCALETABLE_IF( !(tile->summary & TILESUMMARY_CRISP ) ); for( i=0; icount; i++ ) if( !FULLALPHA(tile->pixels[i]) ) { rgba fillwith = ((i/ncols)^(i%ncols))&8 ? 0x66 : 0x99 ; fillwith = graytable[fillwith] + (255 << ALPHA_SHIFT) ; if( NULLALPHA(tile->pixels[i]) ) tile->pixels[i] = fillwith ; else tile->pixels[i] = composite_one(fillwith,tile->pixels[i]); } tile->summary = TILESUMMARY_UPTODATE + TILESUMMARY_ALLFULL + TILESUMMARY_CRISP ; return ; } if( !FULLALPHA(spec->default_pixel) ) return ; if( tileSummary(tile) & TILESUMMARY_ALLNULL ) { fillTile(tile,spec->default_pixel); } else { INIT_SCALETABLE_IF( !(tile->summary & TILESUMMARY_CRISP) ); for( i=0; icount; i++ ) if( NULLALPHA(tile->pixels[i]) ) tile->pixels[i] = spec->default_pixel ; else if( FULLALPHA(tile->pixels[i]) ) ; else tile->pixels[i] = composite_one(spec->default_pixel,tile->pixels[i]); tile->summary = TILESUMMARY_UPTODATE + TILESUMMARY_ALLFULL + TILESUMMARY_CRISP ; } } void flattenIncrementally(struct FlattenSpec *spec,lineCallback callback) { rgba *rows[TILE_HEIGHT] ; unsigned i, y, nrows, ncols ; struct rect where ; struct Tile *tile ; static struct Tile toptile ; toptile.count = TILE_HEIGHT * TILE_WIDTH ; fillTile(&toptile,0); for( where.t = spec->dim.c.t; where.t < spec->dim.c.b; where.t=where.b ) { where.b = TILE_TOP(where.t)+TILE_HEIGHT ; if( where.b > spec->dim.c.b ) where.b = spec->dim.c.b ; nrows = where.b - where.t ; for( y = 0; y < nrows ; y++ ) rows[y] = xcfmalloc(4*(spec->dim.c.r-spec->dim.c.l)); for( where.l = spec->dim.c.l; where.l < spec->dim.c.r; where.l=where.r ) { where.r = TILE_LEFT(where.l)+TILE_WIDTH ; if( where.r > spec->dim.c.r ) where.r = spec->dim.c.r ; ncols = where.r - where.l ; toptile.count = ncols * nrows ; toptile.refcount = 2 ; /* For bug checking */ assert( toptile.summary == TILESUMMARY_UPTODATE + TILESUMMARY_ALLNULL + TILESUMMARY_CRISP ); tile = flattenTopdown(spec,&toptile,spec->numLayers,&where) ; toptile.refcount-- ; /* addBackground may change destructively */ addBackground(spec,tile,ncols); for( i = 0 ; i < tile->count ; i++ ) if( NULLALPHA(tile->pixels[i]) ) tile->pixels[i] = 0 ; for( y = 0 ; y < nrows ; y++ ) memcpy(rows[y] + (where.l - spec->dim.c.l), tile->pixels + y * ncols, ncols*4); if( tile == &toptile ) { fillTile(&toptile,0); } else { freeTile(tile); } } for( y = 0 ; y < nrows ; y++ ) callback(spec->dim.width,rows[y]); } } static rgba **collectPointer ; static void collector(unsigned num,rgba *row) { *collectPointer++ = row ; } rgba ** flattenAll(struct FlattenSpec *spec) { rgba **rows = xcfmalloc(spec->dim.height * sizeof(rgba*)); if( verboseFlag ) fprintf(stderr,_("Flattening image ...")); collectPointer = rows ; flattenIncrementally(spec,collector); if( verboseFlag ) fprintf(stderr,"\n"); return rows ; } void shipoutWithCallback(struct FlattenSpec *spec, rgba **pixels, lineCallback callback) { unsigned i ; for( i = 0; i < spec->dim.height; i++ ) { callback(spec->dim.width,pixels[i]); } xcffree(pixels); } xcftools-1.0.7/flatten.h0000644000175000017500000000461511223357033015035 0ustar makholmmakholm/* Flattning functions for xcftools * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #ifndef FLATTEN_H #define FLATTEN_H #include "xcftools.h" #include "pixels.h" #define PERHAPS_ALPHA_CHANNEL (NEWALPHA(0,1)) #define FORCE_ALPHA_CHANNEL (NEWALPHA(0,2)) #define CHECKERED_BACKGROUND (NEWALPHA(0,200)) struct FlattenSpec { struct tileDimensions dim ; rgba default_pixel ; int numLayers ; struct xcfLayer *layers ; const char * transmap_filename ; const char * output_filename ; enum out_color_mode { COLOR_BY_FILENAME, COLOR_BY_CONTENTS, COLOR_INDEXED, COLOR_RGB, COLOR_GRAY, COLOR_MONO } out_color_mode ; enum { ALLOW_PARTIAL_TRANSPARENCY, DISSOLVE_PARTIAL_TRANSPARENCY, FORBID_PARTIAL_TRANSPARENCY, PARTIAL_TRANSPARENCY_IMPOSSIBLE } partial_transparency_mode ; enum { USE_CANVAS = 0, MANUAL_OFFSET = 1, MANUAL_CROP = 2, AUTOCROP = 4 } window_mode ; int process_in_memory ; int gimpish_indexed ; }; /* From flatspec.c */ void init_flatspec(struct FlattenSpec *); void add_layer_request(struct FlattenSpec *,const char *name); struct xcfLayer *lastlayerspec(struct FlattenSpec *,const char *option); typedef enum out_color_mode (*guesser) (struct FlattenSpec *,rgba **); /* Call this after processing options, and after opening the XCF file */ void complete_flatspec(struct FlattenSpec *,guesser); void analyse_colormode(struct FlattenSpec *,rgba **allPixels,guesser); /* From flatten.c */ typedef void (*lineCallback)(unsigned num,rgba *pixels); void flattenIncrementally(struct FlattenSpec *,lineCallback); rgba **flattenAll(struct FlattenSpec*); void shipoutWithCallback(struct FlattenSpec *,rgba **pixels,lineCallback); #endif /* FLATTEN_H */ xcftools-1.0.7/gimp/base-enums.h0000644000175000017500000000777510367152252016411 0ustar makholmmakholm/* The GIMP -- an image manipulation program * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __BASE_ENUMS_H__ #define __BASE_ENUMS_H__ #if 0 This file is parsed by two scripts, enumgen.pl in tools/pdbgen, and gimp-mkenums. All enums that are not marked with /*< pdb-skip >*/ are exported to libgimp and the PDB. Enums that are not marked with /*< skip >*/ are registered with the GType system. If you want the enum to be skipped by both scripts, you have to use /*< pdb-skip, skip >*/. The same syntax applies to enum values. #endif /* * these enums that are registered with the type system */ #define GIMP_TYPE_CURVE_TYPE (gimp_curve_type_get_type ()) GType gimp_curve_type_get_type (void) G_GNUC_CONST; typedef enum /*< pdb-skip >*/ { GIMP_CURVE_SMOOTH, /*< desc="Smooth" >*/ GIMP_CURVE_FREE /*< desc="Freehand" >*/ } GimpCurveType; #define GIMP_TYPE_HISTOGRAM_CHANNEL (gimp_histogram_channel_get_type ()) GType gimp_histogram_channel_get_type (void) G_GNUC_CONST; typedef enum { GIMP_HISTOGRAM_VALUE = 0, /*< desc="Value" >*/ GIMP_HISTOGRAM_RED = 1, /*< desc="Red" >*/ GIMP_HISTOGRAM_GREEN = 2, /*< desc="Green" >*/ GIMP_HISTOGRAM_BLUE = 3, /*< desc="Blue" >*/ GIMP_HISTOGRAM_ALPHA = 4, /*< desc="Alpha" >*/ GIMP_HISTOGRAM_RGB = 5 /*< desc="RGB", pdb-skip >*/ } GimpHistogramChannel; #define GIMP_TYPE_INTERPOLATION_TYPE (gimp_interpolation_type_get_type ()) GType gimp_interpolation_type_get_type (void) G_GNUC_CONST; typedef enum { GIMP_INTERPOLATION_NONE, /*< desc="None (Fastest)" >*/ GIMP_INTERPOLATION_LINEAR, /*< desc="Linear" >*/ GIMP_INTERPOLATION_CUBIC /*< desc="Cubic (Best)" >*/ } GimpInterpolationType; #define GIMP_TYPE_LAYER_MODE_EFFECTS (gimp_layer_mode_effects_get_type ()) GType gimp_layer_mode_effects_get_type (void) G_GNUC_CONST; typedef enum { GIMP_NORMAL_MODE, GIMP_DISSOLVE_MODE, GIMP_BEHIND_MODE, GIMP_MULTIPLY_MODE, GIMP_SCREEN_MODE, GIMP_OVERLAY_MODE, GIMP_DIFFERENCE_MODE, GIMP_ADDITION_MODE, GIMP_SUBTRACT_MODE, GIMP_DARKEN_ONLY_MODE, GIMP_LIGHTEN_ONLY_MODE, GIMP_HUE_MODE, GIMP_SATURATION_MODE, GIMP_COLOR_MODE, GIMP_VALUE_MODE, GIMP_DIVIDE_MODE, GIMP_DODGE_MODE, GIMP_BURN_MODE, GIMP_HARDLIGHT_MODE, GIMP_SOFTLIGHT_MODE, GIMP_GRAIN_EXTRACT_MODE, GIMP_GRAIN_MERGE_MODE, GIMP_COLOR_ERASE_MODE, GIMP_ERASE_MODE, /*< pdb-skip, skip >*/ GIMP_REPLACE_MODE, /*< pdb-skip, skip >*/ GIMP_ANTI_ERASE_MODE /*< pdb-skip, skip >*/ } GimpLayerModeEffects; #define GIMP_TYPE_TRANSFER_MODE (gimp_transfer_mode_get_type ()) GType gimp_transfer_mode_get_type (void) G_GNUC_CONST; typedef enum { GIMP_SHADOWS, /*< desc="Shadows" >*/ GIMP_MIDTONES, /*< desc="Midtones" >*/ GIMP_HIGHLIGHTS /*< desc="Highlights" >*/ } GimpTransferMode; /* * non-registered enums; register them if needed */ typedef enum /*< skip >*/ { GIMP_NORMAL_CONVOL, /* Negative numbers truncated */ GIMP_ABSOLUTE_CONVOL, /* Absolute value */ GIMP_NEGATIVE_CONVOL /* add 127 to values */ } GimpConvolutionType; typedef enum /*< skip >*/ { GIMP_ALL_HUES, GIMP_RED_HUES, GIMP_YELLOW_HUES, GIMP_GREEN_HUES, GIMP_CYAN_HUES, GIMP_BLUE_HUES, GIMP_MAGENTA_HUES } GimpHueRange; #endif /* __BASE_ENUMS_H__ */ xcftools-1.0.7/gimp/gimpbaseenums.h0000644000175000017500000001141010367152252017166 0ustar makholmmakholm/* LIBGIMP - The GIMP Library * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef __GIMP_BASE_ENUMS_H__ #define __GIMP_BASE_ENUMS_H__ G_BEGIN_DECLS /* For information look into the C source or the html documentation */ #define GIMP_TYPE_CHECK_SIZE (gimp_check_size_get_type ()) GType gimp_check_size_get_type (void) G_GNUC_CONST; typedef enum /*< pdb-skip >*/ { GIMP_CHECK_SIZE_SMALL_CHECKS = 0, /*< desc="Small" >*/ GIMP_CHECK_SIZE_MEDIUM_CHECKS = 1, /*< desc="Medium" >*/ GIMP_CHECK_SIZE_LARGE_CHECKS = 2 /*< desc="Large" >*/ } GimpCheckSize; #define GIMP_TYPE_CHECK_TYPE (gimp_check_type_get_type ()) GType gimp_check_type_get_type (void) G_GNUC_CONST; typedef enum /*< pdb-skip >*/ { GIMP_CHECK_TYPE_LIGHT_CHECKS = 0, /*< desc="Light Checks" >*/ GIMP_CHECK_TYPE_GRAY_CHECKS = 1, /*< desc="Mid-Tone Checks" >*/ GIMP_CHECK_TYPE_DARK_CHECKS = 2, /*< desc="Dark Checks" >*/ GIMP_CHECK_TYPE_WHITE_ONLY = 3, /*< desc="White Only" >*/ GIMP_CHECK_TYPE_GRAY_ONLY = 4, /*< desc="Gray Only" >*/ GIMP_CHECK_TYPE_BLACK_ONLY = 5 /*< desc="Black Only" >*/ } GimpCheckType; #define GIMP_TYPE_IMAGE_BASE_TYPE (gimp_image_base_type_get_type ()) GType gimp_image_base_type_get_type (void) G_GNUC_CONST; typedef enum { GIMP_RGB, /*< desc="RGB color" >*/ GIMP_GRAY, /*< desc="Grayscale" >*/ GIMP_INDEXED /*< desc="Indexed color" >*/ } GimpImageBaseType; #define GIMP_TYPE_IMAGE_TYPE (gimp_image_type_get_type ()) GType gimp_image_type_get_type (void) G_GNUC_CONST; typedef enum { GIMP_RGB_IMAGE, /*< desc="RGB" >*/ GIMP_RGBA_IMAGE, /*< desc="RGB-alpha" >*/ GIMP_GRAY_IMAGE, /*< desc="Grayscale" >*/ GIMP_GRAYA_IMAGE, /*< desc="Grayscale-alpha" >*/ GIMP_INDEXED_IMAGE, /*< desc="Indexed" >*/ GIMP_INDEXEDA_IMAGE /*< desc="Indexed-alpha" >*/ } GimpImageType; typedef enum /*< skip >*/ { GIMP_UNIT_PIXEL = 0, GIMP_UNIT_INCH = 1, GIMP_UNIT_MM = 2, GIMP_UNIT_POINT = 3, GIMP_UNIT_PICA = 4, GIMP_UNIT_END = 5, GIMP_UNIT_PERCENT = 65536 /*< pdb-skip >*/ } GimpUnit; #define GIMP_TYPE_PDB_ARG_TYPE (gimp_pdb_arg_type_get_type ()) GType gimp_pdb_arg_type_get_type (void) G_GNUC_CONST; typedef enum { GIMP_PDB_INT32, GIMP_PDB_INT16, GIMP_PDB_INT8, GIMP_PDB_FLOAT, GIMP_PDB_STRING, GIMP_PDB_INT32ARRAY, GIMP_PDB_INT16ARRAY, GIMP_PDB_INT8ARRAY, GIMP_PDB_FLOATARRAY, GIMP_PDB_STRINGARRAY, GIMP_PDB_COLOR, GIMP_PDB_REGION, GIMP_PDB_DISPLAY, GIMP_PDB_IMAGE, GIMP_PDB_LAYER, GIMP_PDB_CHANNEL, GIMP_PDB_DRAWABLE, GIMP_PDB_SELECTION, GIMP_PDB_BOUNDARY, GIMP_PDB_PATH, GIMP_PDB_PARASITE, GIMP_PDB_STATUS, GIMP_PDB_END } GimpPDBArgType; #define GIMP_TYPE_PDB_PROC_TYPE (gimp_pdb_proc_type_get_type ()) GType gimp_pdb_proc_type_get_type (void) G_GNUC_CONST; typedef enum { GIMP_INTERNAL, GIMP_PLUGIN, GIMP_EXTENSION, GIMP_TEMPORARY } GimpPDBProcType; #define GIMP_TYPE_PDB_STATUS_TYPE (gimp_pdb_status_type_get_type ()) GType gimp_pdb_status_type_get_type (void) G_GNUC_CONST; typedef enum { GIMP_PDB_EXECUTION_ERROR, GIMP_PDB_CALLING_ERROR, GIMP_PDB_PASS_THROUGH, GIMP_PDB_SUCCESS, GIMP_PDB_CANCEL } GimpPDBStatusType; #define GIMP_TYPE_MESSAGE_HANDLER_TYPE (gimp_message_handler_type_get_type ()) GType gimp_message_handler_type_get_type (void) G_GNUC_CONST; typedef enum { GIMP_MESSAGE_BOX, GIMP_CONSOLE, GIMP_ERROR_CONSOLE } GimpMessageHandlerType; #define GIMP_TYPE_STACK_TRACE_MODE (gimp_stack_trace_mode_get_type ()) GType gimp_stack_trace_mode_get_type (void) G_GNUC_CONST; typedef enum { GIMP_STACK_TRACE_NEVER, GIMP_STACK_TRACE_QUERY, GIMP_STACK_TRACE_ALWAYS } GimpStackTraceMode; #define GIMP_TYPE_PROGRESS_COMMAND (gimp_progress_command_get_type ()) GType gimp_progress_command_get_type (void) G_GNUC_CONST; typedef enum { GIMP_PROGRESS_COMMAND_START, GIMP_PROGRESS_COMMAND_END, GIMP_PROGRESS_COMMAND_SET_TEXT, GIMP_PROGRESS_COMMAND_SET_VALUE } GimpProgressCommand; G_END_DECLS #endif /* __GIMP_BASE_ENUMS_H__ */ xcftools-1.0.7/gimp/xcf-private.h0000644000175000017500000000536610367152252016574 0ustar makholmmakholm/* The GIMP -- an image manipulation program * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __XCF_PRIVATE_H__ #define __XCF_PRIVATE_H__ typedef enum { PROP_END = 0, PROP_COLORMAP = 1, PROP_ACTIVE_LAYER = 2, PROP_ACTIVE_CHANNEL = 3, PROP_SELECTION = 4, PROP_FLOATING_SELECTION = 5, PROP_OPACITY = 6, PROP_MODE = 7, PROP_VISIBLE = 8, PROP_LINKED = 9, PROP_PRESERVE_TRANSPARENCY = 10, PROP_APPLY_MASK = 11, PROP_EDIT_MASK = 12, PROP_SHOW_MASK = 13, PROP_SHOW_MASKED = 14, PROP_OFFSETS = 15, PROP_COLOR = 16, PROP_COMPRESSION = 17, PROP_GUIDES = 18, PROP_RESOLUTION = 19, PROP_TATTOO = 20, PROP_PARASITES = 21, PROP_UNIT = 22, PROP_PATHS = 23, PROP_USER_UNIT = 24, PROP_VECTORS = 25, PROP_TEXT_LAYER_FLAGS = 26 } PropType; typedef enum { COMPRESS_NONE = 0, COMPRESS_RLE = 1, COMPRESS_ZLIB = 2, /* unused */ COMPRESS_FRACTAL = 3 /* unused */ } XcfCompressionType; typedef enum { XCF_ORIENTATION_HORIZONTAL = 1, XCF_ORIENTATION_VERTICAL = 2 } XcfOrientationType; typedef enum { XCF_STROKETYPE_STROKE = 0, XCF_STROKETYPE_BEZIER_STROKE = 1 } XcfStrokeType; typedef struct _XcfInfo XcfInfo; struct _XcfInfo { FILE *fp; guint cp; const gchar *filename; GimpTattoo tattoo_state; GimpLayer *active_layer; GimpChannel *active_channel; GimpDrawable *floating_sel_drawable; GimpLayer *floating_sel; guint floating_sel_offset; gint swap_num; gint *ref_count; XcfCompressionType compression; gint file_version; }; #endif /* __XCF_PRIVATE_H__ */ xcftools-1.0.7/install-sh0000755000175000017500000001435010367152252015234 0ustar makholmmakholm#!/bin/sh # # install - install a program, script, or datafile # # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else : fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f "$src" ] || [ -d "$src" ] then : else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else : fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else : fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else : fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else : fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 xcftools-1.0.7/io-unix.c0000644000175000017500000001141611223357033014760 0ustar makholmmakholm/* OS-specific IO functions for xcftools * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "xcftools.h" #include #include #include #include #include #include #include #if HAVE_MMAP #include #endif static FILE *xcfstream = 0 ; void free_or_close_xcf(void) { if( xcf_file ) { if( xcfstream ) { munmap(xcf_file,xcf_length) ; fclose(xcfstream); xcf_file = 0 ; xcfstream = 0 ; } else { free(xcf_file) ; xcf_file = 0 ; } } } void read_or_mmap_xcf(const char *filename,const char *unzipper) { struct stat statbuf ; free_or_close_xcf() ; if( strcmp(filename,"-") != 0 ) { if( access(filename,R_OK) != 0 ) FatalGeneric(21,"!%s",filename); } if( !unzipper ) { const char *pc ; pc = filename + strlen(filename) ; if( pc-filename > 2 && strcmp(pc-2,"gz") == 0 ) unzipper = "zcat" ; else if ( pc-filename > 3 && strcmp(pc-3,"bz2") == 0 ) unzipper = "bzcat" ; else unzipper = "" ; } else if( strcmp(unzipper,"cat") == 0 ) unzipper = "" ; if( *unzipper ) { int pid, status, outfd ; #if HAVE_MMAP xcfstream = tmpfile() ; if( !xcfstream ) FatalUnexpected(_("!Cannot create temporary unzipped file")); outfd = fileno(xcfstream) ; #else int fh[2] ; if( pipe(fh) < 0 ) FatalUnexpected("!Cannot create pipe for %s",unzipper); xcfstream = fdopen(fh[1],"rb") ; if( !xcfstream ) FatalUnexpected("!Cannot fdopen() unzipper pipe"); outfd = fh[0] ; #endif if( (pid = fork()) == 0 ) { /* We're the child */ if( dup2(outfd,1) < 0 ) { perror("Cannot dup2 in unzip process"); exit(127) ; } fclose(xcfstream) ; execlp(unzipper,unzipper,filename,NULL) ; fprintf(stderr,_("Cannot execute ")); perror(unzipper); exit(126) ; } #if HAVE_MMAP while( wait(&status) != pid ) ; if( WIFEXITED(status) ) { status = WEXITSTATUS(status) ; if( status > 0 ) { fclose(xcfstream) ; xcfstream = 0 ; FatalGeneric(status,NULL); } } else { fclose(xcfstream) ; xcfstream = 0 ; FatalGeneric(126,_("%s terminated abnormally"),unzipper); } #else close(fh[0]) ; #endif } else if( strcmp(filename,"-") == 0 ) { xcfstream = fdopen(dup(0),"rb") ; if( !xcfstream ) FatalUnexpected("!Cannot dup stdin for input") ; } else { xcfstream = fopen(filename,"rb") ; if( !xcfstream ) FatalGeneric(21,_("!Cannot open %s"),filename); } /* OK, now we have an open stream ... */ if( fstat(fileno(xcfstream),&statbuf) == 0 && (statbuf.st_mode & S_IFMT) == S_IFREG ) { xcf_length = statbuf.st_size ; #if HAVE_MMAP xcf_file = mmap(0,xcf_length,PROT_READ,MAP_SHARED,fileno(xcfstream),0); if( xcf_file != (void*)-1 ) return ; if( errno != ENODEV ) { int saved = errno ; fclose(xcfstream) ; xcf_file = 0 ; errno = saved ; FatalUnexpected("!Could not mmap input"); } #endif xcf_file = malloc(xcf_length); if( xcf_file == 0 ) FatalUnexpected(_("Out of memory for xcf data")); if( fread(xcf_file,1,xcf_length,xcfstream) != xcf_length ) { if( feof(xcfstream) ) FatalUnexpected(_("XCF file shrunk while reading it")); else FatalUnexpected(_("!Could not read xcf data")); } fclose(xcfstream) ; xcfstream = 0 ; } else { size_t blocksize = 0x80000 ; /* 512 KB */ xcf_length = 0 ; xcf_file = 0 ; while(1) { xcf_file = realloc(xcf_file,blocksize) ; if( xcf_file == 0 ) FatalUnexpected(_("Out of memory for xcf data")); size_t actual = fread(xcf_file+xcf_length,1,blocksize-xcf_length, xcfstream) ; xcf_length += actual ; if( feof(xcfstream) ) break ; if( xcf_length < blocksize ) { FatalUnexpected(_("!Could not read xcf data")) ; } blocksize += (blocksize >> 1) & ~(size_t)0x3FFF ; /* 16 KB granularity */ } fclose(xcfstream) ; xcfstream = 0 ; } } xcftools-1.0.7/mancombine.pl0000644000175000017500000000365011223357033015672 0ustar makholmmakholm#! /usr/bin/perl # This script compiles final manpages for xcftools # # This file was written by Henning Makholm # It is hereby in the public domain. # # In jurisdictions that do not recognise grants of copyright to the # public domain: I, the author and (presumably, in those jurisdictions) # copyright holder, hereby permit anyone to distribute and use this code, # in source code or binary form, with or without modifications. This # permission is world-wide and irrevocable. # # Of course, I will not be liable for any errors or shortcomings in the # code, since I give it away without asking any compenstations. # # If you use or distribute this code, I would appreciate receiving # credit for writing it, in whichever way you find proper and customary. use strict ; use warnings ; if( @ARGV != 1 ) { print STDERR "Usage: $0 infile.10\n" ; exit 1 ; } my %defs ; sub copyfile($); sub copyfile($) { my ($fn) = @_ ; local *FILE ; open FILE, "<", $fn or die "Cannot read $fn" ; my $ignore = 0 ; while( ) { if( /^\#else/ ) { if( $ignore ) { $ignore-- ; } else { $ignore = 1 ; } } elsif( /^\#endif/ ) { $ignore-- if $ignore ; print ".\\\"---\n" unless $ignore ; } elsif( $ignore ) { if( /^\#if/ ) { $ignore++ ; } } elsif( /^\#ifdef\s+(\S+)/ ) { print ".\\\"---\n" ; $ignore = 1 unless $defs{$1} ; } elsif( /^\s*.so\s*(.*)/ ) { copyfile($1) ; } else { print ; } } } if( open CONFIG, "<", "config.h" ) { while( ) { if( /^#define\s+(\S*)/ ) { $defs{$1} = 1 ; } } close CONFIG ; } my $fn0 = $ARGV[0] ; $fn0 =~ s/\.\d*$// ; $defs{"\U$fn0"} = 1 ; $defs{"XCF2FOO"} = 1 if $fn0 =~ /^xcf2/ ; copyfile($ARGV[0]) ; xcftools-1.0.7/manpo/.cvsignore0000644000175000017500000000001710376332571016341 0ustar makholmmakholm*.1 stamp all xcftools-1.0.7/manpo/da.po0000644000175000017500000006614611223376140015274 0ustar makholmmakholm# Danish translations for Xcftools manpages # This file is put in the public domain. # Henning Makholm , 2006. # msgid "" msgstr "" "Project-Id-Version: Xcftools 1.0.5\n" "Report-Msgid-Bugs-To: henning@makholm.net\n" "POT-Creation-Date: 2009-07-03 00:55+0200\n" "PO-Revision-Date: 2009-07-03 01:15+0200\n" "Last-Translator: Henning Makholm \n" "Language-Team: None; proof-of-concept translation by upstream author\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: options.i:22 msgid "" "Print an option summery to standard output and exit with a return\n" "code of 0." msgstr "" "Udskriv en oversigt over flag og kommandolinjesyntaks,\n" "og afslut med kode 0." #: options.i:29 msgid "" "Print the version numer of B{xcftools} to standard output and\n" "exit with a return code of 0." msgstr "" "Skriv versionsnummeret for B{xcftools} til standarduddata,\n" "og afslut med kode 0." #: options.i:37 msgid "Print progress messages about the conversion to standard error." msgstr "Giv fremgangsbeskeder til standardfejl undervejs." #: options.i:43 msgid "Equivalent to B{-Z bzcat}." msgstr "Gør det samme som B{-Z bzcat}." #: options.i:45 msgid "Default if the filename ends with B{bz2}." msgstr "Vælges automatisk hvis filnavnet slutter med B{bz2}." #: options.i:52 msgid "Equivalent to B{-Z zcat}." msgstr "Gør det samme som B{-Z zcat}." #: options.i:54 msgid "Default if the filename ends with B{gz}." msgstr "Vælges automatisk hvis filnavnet slutter med B{gz}." #: options.i:61 msgid "command" msgstr "kommando" #: options.i:61 msgid "" "Specify a command that the input file is filtered through before\n" "being interpreted as an XCF file. The command is invoked as\n" "I{command filename} and must produce output to its standard\n" "output." msgstr "" "Angiv en kommando som inddatafilen skal behandles af før den kan\n" "fortolkes som XCF-fil. Kommandoen bliver startet som I{kommando\n" "filnavn}, og skal skrive sit resultat til standarduddata." #: options.i:65 msgid "" "Note that it is not possible to specify arguments as part of\n" "I{command}." msgstr "Bemærk at I{kommando} ikke kan indeholde argumenter." #: options.i:67 msgid "" "An uncompressor is selected automatically if the filename ends\n" "with B{gz} or B{bz2}; to suppress this, use B{-Z cat} (which is\n" "implemented without actually starting a B{cat}(1) process)." msgstr "" "Hvis filnavnet ender på B{gz} eller B{bz2}, vil et udpakkeprogram\n" "blive valgt automatisk; dette kan slås fra ved at angive\n" "B{-Z cat} (hvilket bliver optimeret så der ikke faktisk bliver\n" "startet end B{cat}(1)-proces)." #: options.i:84 options.i:93 msgid "filename" msgstr "filnavn" #: options.i:84 msgid "" "Write the converted picture to I{filename} instead of to standard\n" "output." msgstr "" "Skriv det konverterede billede til I{filnavn} i stedet for\n" "til standarduddata." #: options.i:93 msgid "" "Output a transparency mask for the flattened image to I{filename}\n" "as a B{pgm}(5) file, in addition to the ordinary output." msgstr "" "Skriv en gennemsigtighedsmaske til I{filnavn} som en\n" "B{pgm}(5)-fil, udover det normale uddata." #: options.i:98 msgid "" "If the flattened image is completely opaque, this will produce an\n" "error message and exit status 101; use B{-A} to suppress this." msgstr "" "Hvis det fladgjorte billede slet ikke har (helt eller delvist)\n" "gennemsigtige partier, vil der fremkomme en fejlbesked og\n" "afslutningskode 101; dette kan undertrykkes med B{-A}-flaget." #: options.i:109 msgid "color" msgstr "farve" #: options.i:109 msgid "Use this color for transparent pixels in the image." msgstr "Giv gennemsigtige partier af billedet denne farve." #: options.i:110 msgid "" "The color can be given as B{#rrggbb} or B{#rgb} hexadecimal\n" "values, or as an X11 color name (which will only work if a color\n" "name database can be found in one of a number of standard\n" "locations)." msgstr "" "Baggrundsfarven kan angives hexadecimalt som B{#rrggbb} eller\n" "B{#rgb}, eller med et X11-farvenavn (sidstnævnte virker kun\n" "hvis der kan findes en database med farvenavne i en standardplacering)." #: options.i:180 msgid "" "Invent a trivial alpha channel even if the flattened image is\n" "completely opaque." msgstr "" "Konstruér en triviel gennemsigtighedskanal selvom billedet er\n" "fuldstændig ugennemsigtigt." #: options.i:187 msgid "" "Force the output to use RGB color space even if it there are more\n" "compact alternatives." msgstr "" "Brug RGB-format for uddata selvom der er mere kompakte\n" "alternative formater." #: options.i:190 msgid "" "This will be selected automatically if the output file's name\n" "ends with B{.ppm}." msgstr "" "Dette bliver valgt automatisk hvis uddatafilens navn ender\n" "på B{.ppm}." #: options.i:199 msgid "" "Force the output to be a grayscale image even if it may be\n" "monochrome." msgstr "Repræsentér uddata som gråtoner selv hvis det er rent sort/hvidt." #: options.i:200 msgid "If any colored pixels are encountered, exit with status 103." msgstr "Stop med afslutningskode 103 hvis der mødes nogen farvede pixels." #: options.i:201 msgid "" "This will be selected automatically if the output file's name\n" "ends with B{.pgm}." msgstr "Dette bliver valgt automatisk hvis uddatafilens navn ender på B{.pgm}." #: options.i:210 msgid "Force the output to be a monochrome image." msgstr "Repræsentér uddata som et rent sort/hvidt billede." #: options.i:211 msgid "" "If any colors except black and white are encountered, exit with\n" "status 103." msgstr "" "Stop med afslutningskode 103 hvis ikke alle pixels er enten sorte\n" "eller hvide." #: options.i:213 msgid "" "This will be selected automatically if the output file's name\n" "ends with B{.pbm}." msgstr "Dette bliver valgt automatisk hvis uddatafilens navn ender på B{.pbm}." #: options.i:223 msgid "" "Suppress the automatic choice of B{-c}, B{-g}, or B{-m} based on\n" "output filename, and instead select the output format based on\n" "image contents." msgstr "" "Lad være med at bruge uddatafilnavnet til at vælge mellem\n" "B{-c}, B{-g} og B{-m}, og vælg i stedet et uddataformat på\n" "grundlag af billedets indhold." #: options.i:230 msgid "" "This is the default if the filename is not recognized, and when\n" "writing to stdout." msgstr "" "Dette er standardfremgangsmåden hvis filnavnet ikke kan genkendes,\n" "og når billedet bliver skrevet til standarduddata." #: options.i:238 msgid "Use standard RGB compositing for flattening indexed layers." msgstr "Brug fuldt RGB-farverum til at fladgøre indekserede billeder." #: options.i:239 msgid "" "Without this option, B{%s} will mimic the Gimp's current strategy\n" "of rounding each alpha value to either full transparency or full\n" "opacity, and interpret all layer modes as B{Normal}." msgstr "" "Hvis dette flag I{ikke} gives, vil B{%s} efterligne Gimps nuværende\n" "princip, hvor gennemsigtigheden af hver pixel afrundes til enten\n" "\"helt gennemsigtig\" eller \"helt ugennemsigtig\", og fortolke alle\n" "lagtilstande som B{Normal}." #: options.i:250 msgid "" "Assert that the flattened image will have no partial transparency\n" "(allowing a more compact representation of the alpha output)." msgstr "" "Påstå at der ikke er nogen delvist gennemsigtige pixels i uddata\n" "(hvilket muliggør en effektivere repræsentation af gennemsigtighed\n" "i uddata)." #: options.i:252 msgid "" "Exit with status 102 if the flattened image has any partial\n" "transparency." msgstr "" "Stop med afslutningskode 102 hvis der alligevel findes nogen\n" "delvist gennemsigtige pixels." #: options.i:254 msgid "" "If B{-b} is also given, this tests whether there there is partial\n" "transparency before applying the background color." msgstr "" "Hvis B{-b}-flaget også gives, handler denne test om om der er\n" "delvist gennemsigtige pixels I{over} den angivne baggrund." #: options.i:263 msgid "" "Do a \"dissolve\" step to eliminate partial transparency after\n" "flattening." msgstr "" "Foretag et \"opløs\"-skridt for at udrydde delvis gennemsigtighed\n" "i det fladgjorte billede." #: options.i:265 msgid "" "If B{-b} is also given, this happens before the background color\n" "is applied." msgstr "Hvis B{-b}-flaget også gives, sker dette før baggrundsfarven påføres." #: options.i:273 msgid "" "First flatten the entire image to a memory buffer before writing\n" "output. Then analyse the image to decide on the details of the\n" "output format (e.g., whether a grayscale output is sufficient)." msgstr "" "Start med at fladgøre hele billedet til RAM, og analysér så billedet\n" "før detaljerne i uddataformatet bliver besluttet (fx om gråtoner\n" "er tilstrækkeligt til at repræsentere billeder)." #: options.i:276 msgid "" "Without this option, the program flattens only a singe row of\n" "\"tiles\" (height 64) at a time." msgstr "" "Hvis dette flag ikke gives, vil programmet nøjes med at fladgøre\n" "en enkelt række \"fliser\" (af højden 64 pixels) ad gangen." #: options.i:283 msgid "wB{x}h" msgstr "bB{x}h" #: options.i:283 msgid "Crop the converted image to width I{w} and height I{h}." msgstr "Beskær det konverterede billede til bredde I{b} og højde I{b}." #: options.i:300 msgid "xB{,}y" msgstr "xB{,}y" #: options.i:300 msgid "" "Offset the converted part of the image from the top-left corner\n" "of the XCF canvas. Usually used with B{-S}." msgstr "" "Forskyd det konverterede billede fra det øverste venstre\n" "hjørne af XCF-lærredet. Bruges normalt sammen med B{-S}." #: options.i:319 msgid "" "Set the converted part of the image such that it just include the\n" "boundaries of the visible (or selected) layers." msgstr "" "Placer det konvertede område af billedet til så det netop dækker alle\n" "de synlige (eller valgte) lag." #: options.i:321 msgid "" "This may make it either smaller or larger than the canvas,\n" "depending on the position and size of the visible layers." msgstr "" "Billedet kan blive større eller mindre end lærredet, afhængigt af\n" "de synlige lags størrelse og placering." #: options.i:323 msgid "" "(Note that the I{contents} of the layers is not taken into\n" "account when autocropping)." msgstr "" "(Bemærk at tilskæringen ikke tager hensyn til\n" "I{indholdet} af lagene)." #: options.i:327 msgid "" "In the absence of options that specify otherwise, the converted\n" "image will cover the entire XCF canvas." msgstr "Normalt vil det konverterede område være det samme som XCF-lærredet." #: options.i:338 msgid "mode" msgstr "tilstand" #: options.i:338 msgid "Set the layer mode (e.g., B{Normal} or B{Multiply})." msgstr "Vælg lagtilstanden (fx B{Normal} eller B{LægTil})." #: options.i:361 options.i:375 msgid "n" msgstr "n" #: options.i:361 msgid "" "Set the opacity on a scale from 0 to 100 (as in the Gimp user\n" "interface)." msgstr "" "Vælg gennemsigtighed på en skala fra 0 (helt gennemsigtigt)\n" "til 100 (helt ugennemsigtig)." #: options.i:375 msgid "Set the opacity on a scale from 0 to 255 (as used internally)" msgstr "" "Vælg gennemsigtighed på en skala fra 0 (helt gennemsigtigt)\n" "til 255 (helt ugennemsigtig)." #: options.i:389 msgid "Enable the layer mask." msgstr "Aktivér lagmasken." #: options.i:395 msgid "Disable the layer mask." msgstr "Deaktivér lagmasken." #: options.i:405 msgid "" "Use the raw UTF-8 representation from the XCF file to compare and\n" "display layer names." msgstr "" "Brug den rå UTF-8-repræsentation fra XCF-filen til at sammenligne\n" "og vise lagnavne." #: options.i:407 msgid "" "Ordinarily, layer names will be converted to the character set of\n" "the current locale." msgstr "" "Normalt forsøger programmet at transkribere lagnavnene til det\n" "tegnsæt der angives af lokalitetsinstillingen." #: xcfinfo.10:17 xcf2pnm.10:17 xcf2png.10:17 xcfview.10:17 msgid "NAME" msgstr "NAVN" #: xcfinfo.10:18 msgid "xcfinfo \\- display information about GIMP xcf files" msgstr "xcfinfo \\- vis oplysninger om xcf-filer fra GIMP" #: xcfinfo.10:20 xcf2pnm.10:20 xcf2png.10:20 xcfview.10:20 msgid "SYNOPSIS" msgstr "OVERBLIK" #: xcfinfo.10:21 msgid "B{%s} [ I{options} ] I{filename}" msgstr "B{%s} [ I{flag} ] I{filnavn}" #: xcfinfo.10:26 xcf2pnm.10:29 xcf2png.10:29 xcfview.10:29 msgid "DESCRIPTION" msgstr "BESKRIVELSE" #: xcfinfo.10:27 msgid "" "B{xcfinfo} is a command-line tool that displays information about\n" "the contents of image files in the XCF format used by B{gimp}(1),\n" "particularly about the layers in the image." msgstr "" "B{xcfinfo} er et kommandolinjeværktøj til at vise oplysninger om\n" "indholdet af billedfiler i XCF-formatet som bruges af B{gimp}(1),\n" "især vedførende billedets lag." #: xcfinfo.10:32 xcfview.10:39 msgid "OPTIONS" msgstr "FLAG" #: xcfinfo.10:34 msgid "OUTPUT" msgstr "UDDATA" #: xcfinfo.10:35 msgid "" "Information about the image is displayed on standard output in a\n" "fixed format." msgstr "" "Oplysninger om billedet bliver udskrevet til standarduddata i et\n" "fast format." #: xcfinfo.10:36 msgid "The first line contains general information about the XCF file:" msgstr "Første linje indeholder generelle oplysninger om XCF-filen:" #: xcfinfo.10:38 xcfinfo.10:41 xcfinfo.10:44 xcfinfo.10:47 xcfinfo.10:50 msgid "\\-" msgstr "\\-" #: xcfinfo.10:39 msgid "The file format version" msgstr "Versionen af filformatet" #: xcfinfo.10:42 msgid "The canvas size" msgstr "Størrelsen af lærredet" #: xcfinfo.10:45 msgid "The image mode (color, grayscale, or indexed)" msgstr "Billedtilstanden (farver, gråtoner eller indekseret)" #: xcfinfo.10:48 msgid "The numer of layers" msgstr "Antal lag" #: xcfinfo.10:51 msgid "The internal compression algorithm" msgstr "Den interne komprimeringsalgoritme" #: xcfinfo.10:53 msgid "Following this line there is a line for each layer:" msgstr "Efter denne linje følger én linje for hvert lag:" #: xcfinfo.10:55 xcf2pnm.10:46 xcf2png.10:43 msgid "1)" msgstr "1)" #: xcfinfo.10:56 msgid "The character B{+} if the layer is visible and B{\\-} if it is not" msgstr "Tegnet B{+} hvis laget er synligt, B{\\-} ellers" #: xcfinfo.10:62 xcf2pnm.10:51 xcf2png.10:48 msgid "2)" msgstr "2)" #: xcfinfo.10:63 msgid "The size and offset of the layer" msgstr "Lagets størrelse og position" #: xcfinfo.10:65 xcf2pnm.10:58 xcf2png.10:53 msgid "3)" msgstr "3)" #: xcfinfo.10:66 msgid "" "The pixel format of the layer, including whether the layer has an\n" "alpha channel." msgstr "Lagets pixelformat, herunder om laget har en alfakanal." #: xcfinfo.10:69 xcf2pnm.10:63 xcf2png.10:58 msgid "4)" msgstr "4)" #: xcfinfo.10:70 msgid "" "The layer mode, as well as the opacity if not 100%, and B{/mask}\n" "if the layer has an active layer mask." msgstr "" "Lagtilstanden, samt ugennemsigtigheden (hvis den ikke er 100%), og\n" "B{/mask} hvis laget har en aktiv lagmaske." #: xcfinfo.10:74 xcf2pnm.10:69 xcf2png.10:64 msgid "5)" msgstr "5)" #: xcfinfo.10:75 msgid "The name of the layer." msgstr "Lagets navn." #: xcfinfo.10:77 xcf2pnm.10:133 xcf2png.10:113 xcfview.10:54 msgid "AUTHOR" msgstr "FORFATTER" #: xcfinfo.10:78 xcf2pnm.10:134 xcf2png.10:114 xcfview.10:55 msgid "B{%s} was written by Henning Makholm ." msgstr "" "B{%s} og denne manualside\n" "er skrevet af Henning Makholm ." #: xcfinfo.10:81 xcf2pnm.10:137 xcf2png.10:117 xcfview.10:61 msgid "SEE ALSO" msgstr "SE OGSÅ" #: xcfinfo.10:81 xcfview.10:61 msgid "B{xcf2pnm}(1), B{xcf2png}(1)" msgstr "B{xcf2pnm}(1), B{xcf2png}(1)" #: xcf2pnm.10:18 msgid "xcf2pnm \\- convert from GIMP xcf files to ppm/pgm/pbm format" msgstr "xcf2pnm \\- konverter xcf-filer til ppm/pgm/pbm-format" #: xcf2pnm.10:21 xcf2png.10:21 xcfview.10:21 msgid "B{%s} [ I{options} ] I{filename} [ I{layer names} ]" msgstr "B{%s} [ I{flag} ] I{filnavn} [ I{lagnavne} ]" #: xcf2pnm.10:30 msgid "" "B{xcf2pnm} is a command-line tool that converts image files in\n" "the XCF format used by B{gimp}(1) to the generic image formats\n" "B{pbm}(5), B{pgm}(5), and B{ppm}(5), flattening layers if\n" "necessary. It does not need to have the Gimp engine itself\n" "available." msgstr "" "B{xcf2pnm} er et kommandolinjeværktøj til at fladgøre og\n" "konvertere billedfiler i B{gimp}(1)s interne format XCF til de\n" "generelle billedformater B{pbm}(5), B{pgm}(5) og B{ppm}(5).\n" "Det kræver ikke at Gimp selv er installeret.\n" #: xcf2pnm.10:40 xcf2png.10:37 msgid "GENERAL OPTIONS" msgstr "ALMINDELIGE FLAG" #: xcf2pnm.10:43 xcf2png.10:40 msgid "" "Several groups of options are mutually incompatible; in each\n" "group the one given last will win:" msgstr "" "Visse grupper af flag udelukker gensidigt hinanden.\n" "I hver af de følgende grupper vil det sidst givne flag vinde:" #: xcf2pnm.10:47 xcf2png.10:44 msgid "B{-A} and B{-b}." msgstr "B{-A} og B{-b}." #: xcf2pnm.10:52 msgid "B{-c}, B{-g}, B{-m}, and B{-n}." msgstr "B{-c}, B{-g}, B{-m} og B{-n}." #: xcf2pnm.10:59 xcf2png.10:54 msgid "B{-D} and B{-G}." msgstr "B{-D} og B{-G}." #: xcf2pnm.10:64 xcf2png.10:59 msgid "B{-j}, B{-z}, and B{-Z}." msgstr "B{-j}, B{-z} og B{-Z}." #: xcf2pnm.10:70 xcf2png.10:65 msgid "B{-C} and B{-O}/B{-S}." msgstr "B{-C} og B{-O}/B{-S}." #: xcf2pnm.10:73 xcf2png.10:68 msgid "LAYER SPECIFICATIONS" msgstr "VALG AF LAG" #: xcf2pnm.10:74 xcf2png.10:69 msgid "" "If no I{layer name} is given on the command line, all of the\n" "visible layers in the XCF file are merged to produce the output\n" "image." msgstr "" "Hvis kommandolinjen ikke indeholder noget I{lagnavn}, bliver\n" "alle de synlige lag i XCF-filen fladgjort til et enkelt\n" "uddatabillede." #: xcf2pnm.10:78 xcf2png.10:73 msgid "" "It is also possible to specify the layers to merge explicitly, by\n" "giving their names as separate arguments after the input\n" "filename. In that case, the output will contain I{only} the named\n" "layers. The layers will be merged in the order they appear on the\n" "command line, with the leftmost being \"at the bottom\" \\- that is,\n" "the layer ordering in the XCF file will be ignored." msgstr "" "Man kan også vælge de lag der skal kombineres, udtrykkeligt ved\n" "at angive deres navne som selvstændige kommandolinjeargumenter\n" "efter navnet på inddatafilen. I det tilfælde vil uddata\n" "I{kun} indeholde de angivne lag. Lagene vil blive kombineret i den\n" "rækkefølge de står på kommandolinjen, med det lag der står længst\n" "til venstre, som det \"nederste\" \\- det vil sige at den indbyrdes\n" "position i XCF filen ikke betyder noget." #: xcf2pnm.10:87 xcf2png.10:82 msgid "" "The following options can be given I{after} a layer name to\n" "override the global properties of the layer:" msgstr "" "De følgende flag kan gives I{efter} et lagnavn for at tilsidesætte\n" "lagets globale egenskaber:" #: xcf2pnm.10:92 msgid "EXAMPLES" msgstr "EKSEMPLER" #: xcf2pnm.10:94 msgid "B{xcf2pnm -b white foo.xcf > foo.ppm}" msgstr "B{xcf2pnm -b white noget.xcf > noget.ppm}" #: xcf2pnm.10:96 msgid "B{xcf2pnm -a footrans.pgm -o foo.ppm foo.xcf Layer1 Layer2}" msgstr "B{xcf2pnm -a noget-gnms.pgm -o noget.pgm noget.xcf Lag1 Lag2}" #: xcf2pnm.10:98 msgid "To test whether the flattened image has any transparency, use" msgstr "" "Følgende kommando tjekker om det fladgjorte billede indeholder\n" "nogen gennemsigtighed:" #: xcf2pnm.10:100 msgid "B{xcf2pnm foo.xcf > /dev/null}" msgstr "B{xcf2pnm noget.xcf > /dev/null}" #: xcf2pnm.10:102 msgid "" "To test whether the flattened image has I{partially} transparent\n" "pixels, use" msgstr "" "For at tjekke om det fladgjorte indeholder nogen\n" "I{delvis} gennemsigtighed kan man bruge" #: xcf2pnm.10:106 msgid "B{xcf2pnm -b white -G > /dev/null}" msgstr "B{xcf2pnm -b white -G > /dev/null}" #: xcf2pnm.10:107 xcf2png.10:87 msgid "BUGS AND LIMITATIONS" msgstr "FEJL OG BEGRÆNSNINGER" #: xcf2pnm.10:109 xcf2png.10:89 msgid "" "When several partially transparent layers are merged, the pixel\n" "values are interpolated without gamma correction. (The Gimp also\n" "does it this way). Some slight rounding errors in the\n" "interpolation are inevitable; B{%s} sometimes has different\n" "rounding errors than the Gimp itself, especially when more than\n" "two layers are involved, or in case of some of the more exotic\n" "layer modes." msgstr "" "Når flere delvist gennemsigtige lag skal kombineres, bliver\n" "pixelværdierne kombineret uden gammakorrektion. (Sådan gør Gimp\n" "det også). Ved kombinationen vil der uvægerligt opstå mindre\n" "afrundingsfejl \\- nogen gange giver B{%s} andre fejl end\n" "Gimp selv, især når der er tale om mere end to lag, eller\n" "ved nogen af de mere eksotiske lagtilstande." #: xcf2pnm.10:117 xcf2png.10:97 msgid "These differences are usually not visible to the eye." msgstr "Disse forskelle er normalt ikke synlige." #: xcf2pnm.10:119 xcf2png.10:99 msgid "Floating selections are currently not handled correctly." msgstr "Flydende markeringer bliver p.t. ikke behandlet korrekt." #: xcf2pnm.10:121 xcf2png.10:101 msgid "" "There are probably other bugs lurking in corner cases. If you\n" "discover one, please notify the author." msgstr "" "Der er sikkert også andre fejl som viser sig i særlige situationer.\n" "Hvis du finder en, så vær rar at fortælle forfatteren om den." #: xcf2pnm.10:124 xcf2png.10:104 msgid "FILES" msgstr "FILER" #: xcf2pnm.10:126 xcf2png.10:106 msgid "B{/etc/X11/rgb.txt}" msgstr "B{/etc/X11/rgb.txt}" #: xcf2pnm.10:128 xcf2png.10:108 msgid "B{/usr/share/X11/rgb.txt}" msgstr "B{/usr/share/X11/rgb.txt}" #: xcf2pnm.10:130 xcf2png.10:110 msgid "B{/usr/lib/X11/rgb.txt}" msgstr "B{/usr/lib/X11/rgb.txt}" #: xcf2pnm.10:131 xcf2png.10:111 msgid "Color name database for B{-b}." msgstr "Database med farvenavne der forstås af B{-b}." #: xcf2pnm.10:137 msgid "B{xcfinfo}(1), B{xcf2png}(1)" msgstr "B{xcfinfo}(1), B{xcf2png}(1)" #: xcf2png.10:18 msgid "xcf2png \\- convert from GIMP xcf files to png format" msgstr "xcf2png \\- oversæt xcf-filer til png-format" #: xcf2png.10:30 msgid "" "B{xcf2png} is a command-line tool that converts image files in\n" "the XCF format used by B{gimp}(1) to the generic image format\n" "B{png}, flattening layers if necessary. It does not need to have\n" "the Gimp engine itself available." msgstr "" "B{xcf2png} er et kommandolinjeværktøj til at fladgøre og\n" "konvertere billedfiler i B{gimp}(1)s interne format XCF til\n" "det generelle billedformat B{png}.\n" "Det kræver ikke at Gimp selv er installeret." #: xcf2png.10:49 msgid "B{-g} and B{-c .}" msgstr "B{-g} og B{-c}." #: xcf2png.10:117 msgid "B{xcfinfo}(1), B{xcf2pnm}(1)" msgstr "B{xcfinfo}(1), B{xcf2pnm}(1)" #: xcfview.10:18 msgid "xcfview \\- display GIMP xcf files" msgstr "xcfview \\- fremvis xcf-filer fra GIMP" #: xcfview.10:30 msgid "" "B{xcfview} is a wrapper script that uses B{xcf2png}(1) or\n" "B{xcf2pnm}(1) (q.v.) to flatten an XCF image and then displays\n" "the flattened image using a PNG or PPM viewer found using the\n" "B{mailcap}(5) database." msgstr "" "B{xcfview} er et omslagsprogram som bruger B{xcf2png}(1) eller\n" "B{xcf2pnm}(1) (se disse) til at fladgøre et XCF-billede, og dernæst\n" "viser det med et PNG- eller PPM-fremviserprogram, som findes gennem\n" "B{mailcap}(5)-databasen." #: xcfview.10:40 msgid "" "Every command-line parameter to B{xcfview} will be passed through\n" "to the underlying B{xcf2png} or B{xcf2pnm} command. Because it is\n" "not certain which converter will be used, the options given\n" "should be ones that make sense for both of these:" msgstr "" "Alle kommandolinjeargumenter til B{xcfview} bliver videregivet direkte\n" "til den B{xcf2png}- eller B{xcf2pnm}-kommando som konverterer XCF-billedet.\n" "Det er ikke helt forudsigeligt hvilket konverteringsprogram der bliver\n" "brugt, så man bør holde sig til flag der forstås af begge disse programmer:" #: xcfview.10:49 exit.1i:1 msgid "EXIT STATUS" msgstr "AFSLUTNINGSKODER" #: xcfview.10:50 msgid "" "The exit status is 0 in case of success. A nonzero exit status\n" "may either be that of the \\fBxcf2I{foo} converter or that of the\n" "image viewer." msgstr "" "Afslutningskoden er 0 hvis alt gik godt. Opstår der fejl, vil\n" "afslutningskoden være forskellig fra 0; den præcise værdi kan\n" "enten komme fra konverteringsprogrammet eller fra\n" "fremviserprogrammet." #: xcfview.10:58 msgid "" "Parts of the script originate from the B{run-mailcap}(1) script\n" "by Brian White ." msgstr "" "Dele af programmet stammer fra skripte B{run-mailcap}(1) af\n" "Brian White ." #: exit.1i:2 msgid "The exit status of B{%s} is" msgstr "Her er de mulige afslutningskoder fra B{%s}:" #: exit.1i:7 msgid "Success" msgstr "Alt OK" #: exit.1i:11 msgid "" "Problems parsing the command line, including unknown color names\n" "(or missing color name directory) for B{-b}." msgstr "" "Gal kommandolinjesyntaks, herunder ukendte farvenavne i\n" "B{-B} (eller farvenavnsdatabasen mangler)." #: exit.1i:15 msgid "Problems parsing the command line." msgstr "Gal kommandolinjesyntaks." #: exit.1i:19 msgid "The specified XCF file does not exist or cannot be read." msgstr "Den angivne XCF-fil findes ikke eller kan ikke læses." #: exit.1i:23 msgid "" "A layer named on the command line was not found, or the B{--mask}\n" "option was used for a layer that has no layer mask." msgstr "" "Et lag der angives på kommandolinjen findes ikke, eller\n" "B{--mask}-flaget er anvendt på et lag der ikke har nogen lagmaske." #: exit.1i:29 msgid "" "Transparent pixels were found, but neither B{-a} nor B{-b} was\n" "given." msgstr "" "Der er fundet gennemsigtige pixels, men hverken B{-a} eller B{-b}\n" "er specificeret." #: exit.1i:36 msgid "The B{-a} option was given yet the image has no transparency." msgstr "B{-a}-flaget er givet, men billedet er fuldstændig ugennemsigtigt." #: exit.1i:39 msgid "(Use B{-A} to go on anyway)." msgstr "(Brug B{-A} for at ignorere dette)." #: exit.1i:45 msgid "The B{-G} option was given, yet partial transparency was found." msgstr "" "B{-G}-flaget er givet, men billedet indeholder delvist gennemsigtige\n" "pixels." #: exit.1i:51 msgid "" "B{-g} (or B{-m}) was given, yet colored (or gray) pixels were\n" "found." msgstr "" "B{-g}- (eller B{-m}-)flaget er givet, men billedet indeholder\n" "farvede (eller mellemgrå) pixels." #: exit.1i:56 msgid "B{-g} was given, yet colored pixels were found." msgstr "B{-g}-flaget er givet, men billedet indeholder farvede pixels." #: exit.1i:62 msgid "" "The XCF file contains presumably valid features that B{xcftools}\n" "does not support." msgstr "XCF-filen indeholder egenskaber som B{xcftools} ikke forstår." #: exit.1i:65 msgid "" "(As of this writing there is no known way of getting the Gimp to\n" "write an XCF file that will provoke this return. Please notify\n" "the author if you discover one)." msgstr "" "(Der er så vidt vides ingen måde at få Gimp til at skrive\n" "en XCF-fil som medfører denne aflutningskode. Lad venligst\n" "forfatteren vide det hvis du opdager én)." #: exit.1i:70 msgid "The XCF file is malformed." msgstr "XCF-filen er beskadiget eller ugyldig." #: exit.1i:73 msgid "" "An uncompression program could not be executed, or terminated\n" "abnormally." msgstr "" "Det lykkedes ikke at udføre udpakkeprogrammet (eller det blev dræbt\n" "undervejs)." #: exit.1i:77 msgid "" "Unexpected I/O error, internal errors, or other \"this can't\n" "happen\" situations." msgstr "Uventet I/O-fejl, interne fejl og lignede \"umulige\" situationer." #: exit.1i:79 msgid "" "If an uncompression program returns an error exit status, this\n" "will be returned from B{%s} too." msgstr "" "Hvis et udpakkeprogram stopper med en fejlkode, bliver denne\n" "kode også B{%s}s afslutningskode." xcftools-1.0.7/manpo/manpages.pot0000644000175000017500000004201411223376140016653 0ustar makholmmakholm# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Xcftools-manpages VERSION\n" "Report-Msgid-Bugs-To: henning@makholm.net\n" "POT-Creation-Date: 2009-07-03 00:55+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: options.i:22 msgid "Print an option summery to standard output and exit with a return\n" "code of 0." msgstr "" #: options.i:29 msgid "Print the version numer of B{xcftools} to standard output and\n" "exit with a return code of 0." msgstr "" #: options.i:37 msgid "Print progress messages about the conversion to standard error." msgstr "" #: options.i:43 msgid "Equivalent to B{-Z bzcat}." msgstr "" #: options.i:45 msgid "Default if the filename ends with B{bz2}." msgstr "" #: options.i:52 msgid "Equivalent to B{-Z zcat}." msgstr "" #: options.i:54 msgid "Default if the filename ends with B{gz}." msgstr "" #: options.i:61 msgid "command" msgstr "" #: options.i:61 msgid "Specify a command that the input file is filtered through before\n" "being interpreted as an XCF file. The command is invoked as\n" "I{command filename} and must produce output to its standard\n" "output." msgstr "" #: options.i:65 msgid "Note that it is not possible to specify arguments as part of\n" "I{command}." msgstr "" #: options.i:67 msgid "An uncompressor is selected automatically if the filename ends\n" "with B{gz} or B{bz2}; to suppress this, use B{-Z cat} (which is\n" "implemented without actually starting a B{cat}(1) process)." msgstr "" #: options.i:84 options.i:93 msgid "filename" msgstr "" #: options.i:84 msgid "Write the converted picture to I{filename} instead of to standard\n" "output." msgstr "" #: options.i:93 msgid "Output a transparency mask for the flattened image to I{filename}\n" "as a B{pgm}(5) file, in addition to the ordinary output." msgstr "" #: options.i:98 msgid "If the flattened image is completely opaque, this will produce an\n" "error message and exit status 101; use B{-A} to suppress this." msgstr "" #: options.i:109 msgid "color" msgstr "" #: options.i:109 msgid "Use this color for transparent pixels in the image." msgstr "" #: options.i:110 msgid "The color can be given as B{#rrggbb} or B{#rgb} hexadecimal\n" "values, or as an X11 color name (which will only work if a color\n" "name database can be found in one of a number of standard\n" "locations)." msgstr "" #: options.i:180 msgid "Invent a trivial alpha channel even if the flattened image is\n" "completely opaque." msgstr "" #: options.i:187 msgid "Force the output to use RGB color space even if it there are more\n" "compact alternatives." msgstr "" #: options.i:190 msgid "This will be selected automatically if the output file's name\n" "ends with B{.ppm}." msgstr "" #: options.i:199 msgid "Force the output to be a grayscale image even if it may be\n" "monochrome." msgstr "" #: options.i:200 msgid "If any colored pixels are encountered, exit with status 103." msgstr "" #: options.i:201 msgid "This will be selected automatically if the output file's name\n" "ends with B{.pgm}." msgstr "" #: options.i:210 msgid "Force the output to be a monochrome image." msgstr "" #: options.i:211 msgid "If any colors except black and white are encountered, exit with\n" "status 103." msgstr "" #: options.i:213 msgid "This will be selected automatically if the output file's name\n" "ends with B{.pbm}." msgstr "" #: options.i:223 msgid "Suppress the automatic choice of B{-c}, B{-g}, or B{-m} based on\n" "output filename, and instead select the output format based on\n" "image contents." msgstr "" #: options.i:230 msgid "This is the default if the filename is not recognized, and when\n" "writing to stdout." msgstr "" #: options.i:238 msgid "Use standard RGB compositing for flattening indexed layers." msgstr "" #: options.i:239 msgid "Without this option, B{%s} will mimic the Gimp's current strategy\n" "of rounding each alpha value to either full transparency or full\n" "opacity, and interpret all layer modes as B{Normal}." msgstr "" #: options.i:250 msgid "Assert that the flattened image will have no partial transparency\n" "(allowing a more compact representation of the alpha output)." msgstr "" #: options.i:252 msgid "Exit with status 102 if the flattened image has any partial\n" "transparency." msgstr "" #: options.i:254 msgid "If B{-b} is also given, this tests whether there there is partial\n" "transparency before applying the background color." msgstr "" #: options.i:263 msgid "Do a \"dissolve\" step to eliminate partial transparency after\n" "flattening." msgstr "" #: options.i:265 msgid "If B{-b} is also given, this happens before the background color\n" "is applied." msgstr "" #: options.i:273 msgid "First flatten the entire image to a memory buffer before writing\n" "output. Then analyse the image to decide on the details of the\n" "output format (e.g., whether a grayscale output is sufficient)." msgstr "" #: options.i:276 msgid "Without this option, the program flattens only a singe row of\n" "\"tiles\" (height 64) at a time." msgstr "" #: options.i:283 msgid "wB{x}h" msgstr "" #: options.i:283 msgid "Crop the converted image to width I{w} and height I{h}." msgstr "" #: options.i:300 msgid "xB{,}y" msgstr "" #: options.i:300 msgid "Offset the converted part of the image from the top-left corner\n" "of the XCF canvas. Usually used with B{-S}." msgstr "" #: options.i:319 msgid "Set the converted part of the image such that it just include the\n" "boundaries of the visible (or selected) layers." msgstr "" #: options.i:321 msgid "This may make it either smaller or larger than the canvas,\n" "depending on the position and size of the visible layers." msgstr "" #: options.i:323 msgid "(Note that the I{contents} of the layers is not taken into\n" "account when autocropping)." msgstr "" #: options.i:327 msgid "In the absence of options that specify otherwise, the converted\n" "image will cover the entire XCF canvas." msgstr "" #: options.i:338 msgid "mode" msgstr "" #: options.i:338 msgid "Set the layer mode (e.g., B{Normal} or B{Multiply})." msgstr "" #: options.i:361 options.i:375 msgid "n" msgstr "" #: options.i:361 msgid "Set the opacity on a scale from 0 to 100 (as in the Gimp user\n" "interface)." msgstr "" #: options.i:375 msgid "Set the opacity on a scale from 0 to 255 (as used internally)" msgstr "" #: options.i:389 msgid "Enable the layer mask." msgstr "" #: options.i:395 msgid "Disable the layer mask." msgstr "" #: options.i:405 msgid "Use the raw UTF-8 representation from the XCF file to compare and\n" "display layer names." msgstr "" #: options.i:407 msgid "Ordinarily, layer names will be converted to the character set of\n" "the current locale." msgstr "" #: xcfinfo.10:17 xcf2pnm.10:17 xcf2png.10:17 xcfview.10:17 msgid "NAME" msgstr "" #: xcfinfo.10:18 msgid "xcfinfo \\- display information about GIMP xcf files" msgstr "" #: xcfinfo.10:20 xcf2pnm.10:20 xcf2png.10:20 xcfview.10:20 msgid "SYNOPSIS" msgstr "" #: xcfinfo.10:21 msgid "B{%s} [ I{options} ] I{filename}" msgstr "" #: xcfinfo.10:26 xcf2pnm.10:29 xcf2png.10:29 xcfview.10:29 msgid "DESCRIPTION" msgstr "" #: xcfinfo.10:27 msgid "B{xcfinfo} is a command-line tool that displays information about\n" "the contents of image files in the XCF format used by B{gimp}(1),\n" "particularly about the layers in the image." msgstr "" #: xcfinfo.10:32 xcfview.10:39 msgid "OPTIONS" msgstr "" #: xcfinfo.10:34 msgid "OUTPUT" msgstr "" #: xcfinfo.10:35 msgid "Information about the image is displayed on standard output in a\n" "fixed format." msgstr "" #: xcfinfo.10:36 msgid "The first line contains general information about the XCF file:" msgstr "" #: xcfinfo.10:38 xcfinfo.10:41 xcfinfo.10:44 xcfinfo.10:47 xcfinfo.10:50 msgid "\\-" msgstr "" #: xcfinfo.10:39 msgid "The file format version" msgstr "" #: xcfinfo.10:42 msgid "The canvas size" msgstr "" #: xcfinfo.10:45 msgid "The image mode (color, grayscale, or indexed)" msgstr "" #: xcfinfo.10:48 msgid "The numer of layers" msgstr "" #: xcfinfo.10:51 msgid "The internal compression algorithm" msgstr "" #: xcfinfo.10:53 msgid "Following this line there is a line for each layer:" msgstr "" #: xcfinfo.10:55 xcf2pnm.10:46 xcf2png.10:43 msgid "1)" msgstr "" #: xcfinfo.10:56 msgid "The character B{+} if the layer is visible and B{\\-} if it is not" msgstr "" #: xcfinfo.10:62 xcf2pnm.10:51 xcf2png.10:48 msgid "2)" msgstr "" #: xcfinfo.10:63 msgid "The size and offset of the layer" msgstr "" #: xcfinfo.10:65 xcf2pnm.10:58 xcf2png.10:53 msgid "3)" msgstr "" #: xcfinfo.10:66 msgid "The pixel format of the layer, including whether the layer has an\n" "alpha channel." msgstr "" #: xcfinfo.10:69 xcf2pnm.10:63 xcf2png.10:58 msgid "4)" msgstr "" #: xcfinfo.10:70 msgid "The layer mode, as well as the opacity if not 100%, and B{/mask}\n" "if the layer has an active layer mask." msgstr "" #: xcfinfo.10:74 xcf2pnm.10:69 xcf2png.10:64 msgid "5)" msgstr "" #: xcfinfo.10:75 msgid "The name of the layer." msgstr "" #: xcfinfo.10:77 xcf2pnm.10:133 xcf2png.10:113 xcfview.10:54 msgid "AUTHOR" msgstr "" #: xcfinfo.10:78 xcf2pnm.10:134 xcf2png.10:114 xcfview.10:55 msgid "B{%s} was written by Henning Makholm ." msgstr "" #: xcfinfo.10:81 xcf2pnm.10:137 xcf2png.10:117 xcfview.10:61 msgid "SEE ALSO" msgstr "" #: xcfinfo.10:81 xcfview.10:61 msgid "B{xcf2pnm}(1), B{xcf2png}(1)" msgstr "" #: xcf2pnm.10:18 msgid "xcf2pnm \\- convert from GIMP xcf files to ppm/pgm/pbm format" msgstr "" #: xcf2pnm.10:21 xcf2png.10:21 xcfview.10:21 msgid "B{%s} [ I{options} ] I{filename} [ I{layer names} ]" msgstr "" #: xcf2pnm.10:30 msgid "B{xcf2pnm} is a command-line tool that converts image files in\n" "the XCF format used by B{gimp}(1) to the generic image formats\n" "B{pbm}(5), B{pgm}(5), and B{ppm}(5), flattening layers if\n" "necessary. It does not need to have the Gimp engine itself\n" "available." msgstr "" #: xcf2pnm.10:40 xcf2png.10:37 msgid "GENERAL OPTIONS" msgstr "" #: xcf2pnm.10:43 xcf2png.10:40 msgid "Several groups of options are mutually incompatible; in each\n" "group the one given last will win:" msgstr "" #: xcf2pnm.10:47 xcf2png.10:44 msgid "B{-A} and B{-b}." msgstr "" #: xcf2pnm.10:52 msgid "B{-c}, B{-g}, B{-m}, and B{-n}." msgstr "" #: xcf2pnm.10:59 xcf2png.10:54 msgid "B{-D} and B{-G}." msgstr "" #: xcf2pnm.10:64 xcf2png.10:59 msgid "B{-j}, B{-z}, and B{-Z}." msgstr "" #: xcf2pnm.10:70 xcf2png.10:65 msgid "B{-C} and B{-O}/B{-S}." msgstr "" #: xcf2pnm.10:73 xcf2png.10:68 msgid "LAYER SPECIFICATIONS" msgstr "" #: xcf2pnm.10:74 xcf2png.10:69 msgid "If no I{layer name} is given on the command line, all of the\n" "visible layers in the XCF file are merged to produce the output\n" "image." msgstr "" #: xcf2pnm.10:78 xcf2png.10:73 msgid "It is also possible to specify the layers to merge explicitly, by\n" "giving their names as separate arguments after the input\n" "filename. In that case, the output will contain I{only} the named\n" "layers. The layers will be merged in the order they appear on the\n" "command line, with the leftmost being \"at the bottom\" \\- that is,\n" "the layer ordering in the XCF file will be ignored." msgstr "" #: xcf2pnm.10:87 xcf2png.10:82 msgid "The following options can be given I{after} a layer name to\n" "override the global properties of the layer:" msgstr "" #: xcf2pnm.10:92 msgid "EXAMPLES" msgstr "" #: xcf2pnm.10:94 msgid "B{xcf2pnm -b white foo.xcf > foo.ppm}" msgstr "" #: xcf2pnm.10:96 msgid "B{xcf2pnm -a footrans.pgm -o foo.ppm foo.xcf Layer1 Layer2}" msgstr "" #: xcf2pnm.10:98 msgid "To test whether the flattened image has any transparency, use" msgstr "" #: xcf2pnm.10:100 msgid "B{xcf2pnm foo.xcf > /dev/null}" msgstr "" #: xcf2pnm.10:102 msgid "To test whether the flattened image has I{partially} transparent\n" "pixels, use" msgstr "" #: xcf2pnm.10:106 msgid "B{xcf2pnm -b white -G > /dev/null}" msgstr "" #: xcf2pnm.10:107 xcf2png.10:87 msgid "BUGS AND LIMITATIONS" msgstr "" #: xcf2pnm.10:109 xcf2png.10:89 msgid "When several partially transparent layers are merged, the pixel\n" "values are interpolated without gamma correction. (The Gimp also\n" "does it this way). Some slight rounding errors in the\n" "interpolation are inevitable; B{%s} sometimes has different\n" "rounding errors than the Gimp itself, especially when more than\n" "two layers are involved, or in case of some of the more exotic\n" "layer modes." msgstr "" #: xcf2pnm.10:117 xcf2png.10:97 msgid "These differences are usually not visible to the eye." msgstr "" #: xcf2pnm.10:119 xcf2png.10:99 msgid "Floating selections are currently not handled correctly." msgstr "" #: xcf2pnm.10:121 xcf2png.10:101 msgid "There are probably other bugs lurking in corner cases. If you\n" "discover one, please notify the author." msgstr "" #: xcf2pnm.10:124 xcf2png.10:104 msgid "FILES" msgstr "" #: xcf2pnm.10:126 xcf2png.10:106 msgid "B{/etc/X11/rgb.txt}" msgstr "" #: xcf2pnm.10:128 xcf2png.10:108 msgid "B{/usr/share/X11/rgb.txt}" msgstr "" #: xcf2pnm.10:130 xcf2png.10:110 msgid "B{/usr/lib/X11/rgb.txt}" msgstr "" #: xcf2pnm.10:131 xcf2png.10:111 msgid "Color name database for B{-b}." msgstr "" #: xcf2pnm.10:137 msgid "B{xcfinfo}(1), B{xcf2png}(1)" msgstr "" #: xcf2png.10:18 msgid "xcf2png \\- convert from GIMP xcf files to png format" msgstr "" #: xcf2png.10:30 msgid "B{xcf2png} is a command-line tool that converts image files in\n" "the XCF format used by B{gimp}(1) to the generic image format\n" "B{png}, flattening layers if necessary. It does not need to have\n" "the Gimp engine itself available." msgstr "" #: xcf2png.10:49 msgid "B{-g} and B{-c .}" msgstr "" #: xcf2png.10:117 msgid "B{xcfinfo}(1), B{xcf2pnm}(1)" msgstr "" #: xcfview.10:18 msgid "xcfview \\- display GIMP xcf files" msgstr "" #: xcfview.10:30 msgid "B{xcfview} is a wrapper script that uses B{xcf2png}(1) or\n" "B{xcf2pnm}(1) (q.v.) to flatten an XCF image and then displays\n" "the flattened image using a PNG or PPM viewer found using the\n" "B{mailcap}(5) database." msgstr "" #: xcfview.10:40 msgid "Every command-line parameter to B{xcfview} will be passed through\n" "to the underlying B{xcf2png} or B{xcf2pnm} command. Because it is\n" "not certain which converter will be used, the options given\n" "should be ones that make sense for both of these:" msgstr "" #: xcfview.10:49 exit.1i:1 msgid "EXIT STATUS" msgstr "" #: xcfview.10:50 msgid "The exit status is 0 in case of success. A nonzero exit status\n" "may either be that of the \\fBxcf2I{foo} converter or that of the\n" "image viewer." msgstr "" #: xcfview.10:58 msgid "Parts of the script originate from the B{run-mailcap}(1) script\n" "by Brian White ." msgstr "" #: exit.1i:2 msgid "The exit status of B{%s} is" msgstr "" #: exit.1i:7 msgid "Success" msgstr "" #: exit.1i:11 msgid "Problems parsing the command line, including unknown color names\n" "(or missing color name directory) for B{-b}." msgstr "" #: exit.1i:15 msgid "Problems parsing the command line." msgstr "" #: exit.1i:19 msgid "The specified XCF file does not exist or cannot be read." msgstr "" #: exit.1i:23 msgid "A layer named on the command line was not found, or the B{--mask}\n" "option was used for a layer that has no layer mask." msgstr "" #: exit.1i:29 msgid "Transparent pixels were found, but neither B{-a} nor B{-b} was\n" "given." msgstr "" #: exit.1i:36 msgid "The B{-a} option was given yet the image has no transparency." msgstr "" #: exit.1i:39 msgid "(Use B{-A} to go on anyway)." msgstr "" #: exit.1i:45 msgid "The B{-G} option was given, yet partial transparency was found." msgstr "" #: exit.1i:51 msgid "B{-g} (or B{-m}) was given, yet colored (or gray) pixels were\n" "found." msgstr "" #: exit.1i:56 msgid "B{-g} was given, yet colored pixels were found." msgstr "" #: exit.1i:62 msgid "The XCF file contains presumably valid features that B{xcftools}\n" "does not support." msgstr "" #: exit.1i:65 msgid "(As of this writing there is no known way of getting the Gimp to\n" "write an XCF file that will provoke this return. Please notify\n" "the author if you discover one)." msgstr "" #: exit.1i:70 msgid "The XCF file is malformed." msgstr "" #: exit.1i:73 msgid "An uncompression program could not be executed, or terminated\n" "abnormally." msgstr "" #: exit.1i:77 msgid "Unexpected I/O error, internal errors, or other \"this can't\n" "happen\" situations." msgstr "" #: exit.1i:79 msgid "If an uncompression program returns an error exit status, this\n" "will be returned from B{%s} too." msgstr "" xcftools-1.0.7/manpo/mantranslate.pl0000644000175000017500000001476211223357120017370 0ustar makholmmakholm#! /usr/bin/perl # This script extracts translateable strings from a manpage and/or # translates a manpage using gettext. # # This file was written by Henning Makholm # It is hereby in the public domain. # # In jurisdictions that do not recognise grants of copyright to the # public domain: I, the author and (presumably, in those jurisdictions) # copyright holder, hereby permit anyone to distribute and use this code, # in source code or binary form, with or without modifications. This # permission is world-wide and irrevocable. # # Of course, I will not be liable for any errors or shortcomings in the # code, since I give it away without asking any compenstations. # # If you use or distribute this code, I would appreciate receiving # credit for writing it, in whichever way you find proper and customary. use strict ; use warnings ; my ($gettext,$shipout) ; sub fontexpand1($$) { my ($kinds,$text) = @_ ; return "\\f$kinds$text\\fP" if 1 == length $kinds ; my $out = "" ; my $last = "R" ; while( $text ) { $kinds =~ s/^(.)(.*)/$2$1/ ; $last = $1 ; if( $text =~ s/^([^\" ]+)\s*// || $text =~ s/^"([^\"]+)"\s*// ) { $out .= "\\f$last$1" ; } else { die "Bad font-change tail '$text'" ; } } $out .= "\\fR" unless $last eq "R" ; return $out ; } sub ggettext($$$) { my ($filename,$lineno,$text) = @_ ; return $text if $text =~ /^\d*$/ ; $text =~ s/\\\".*//g ; $text =~ s/\\\*p/%s/g ; $text =~ s/([^-])\\(-[a-zA-Z])/$1$2/g ; $text =~ s/^\.([BIR]+)\s+(.*)$/ fontexpand1($1,$2) /mge ; my $fontcode = $text !~ /[{}]/ ; if( $fontcode ) { $text =~ s/\\f([BI])(([^\\]|\\[^f])*)\\f[RP]/$1\{$2\}/mg ; } my $newline = $text =~ s/\n$//s ; if( $text !~ /^[.\']/m || $text =~ /\n/ ) { $text =~ s/\s+/ /gs ; my $pre = "" ; while( length($text) > 65 ) { $text =~ s/^(.{1,65}) // or $text =~ s/^([^ ]*) // ; $pre .= "$1\n" ; } $text = "$pre$text" ; $text =~ s/\s*$// ; } $text = $gettext->($filename,$lineno,$text); $text .= "\n" if $newline ; if( $fontcode ) { $text =~ s/([BI])\{([^{}]*)\}/\\f$1$2\\fP/g ; } $text =~ s/([^-])(-[a-zA-Z])/$1\\$2/g ; $text =~ s/%s/\\*p/g ; return $text ; } sub partraverse { my ($filename,$lineno,@lines) = @_ ; return unless @lines ; my @front ; foreach my $line ( @lines ) { if( @front && $front[$#front] =~ /\.\)?\s*$/ && $line =~ /^\(?[A-Z]/ ) { $shipout->(ggettext($filename,$lineno,join "",@front)); $lineno += @front ; @front = () ; } push @front, $line ; } $shipout->(ggettext($filename,$lineno,join "",@front)); } sub traverser($) { my ($filename) = @_ ; open MAN, "<", $filename or die "Cannot open $filename" ; my $lineno = 0 ; my @saved = () ; while( ) { $lineno++ ; if( /^([^.\'\#]|.([BI]|[BRI][IRB]) )/ ) { push @saved, $_ ; next ; } if( @saved ) { partraverse($filename,$lineno-@saved,@saved); @saved = () ; } if( /^#line (\d+) \"(.*)\"/ ) { my ($newline,$newfile) = ($1,$2); $filename = $newfile ; $lineno = $newline-1 ; } elsif( /^\#/ ) { # Ok, breaking the translation block is all we need. } elsif( /^\.\\\"-+$/ ){ # Another way to request block breaking. } elsif( /^\.(\\\"|TH|so|P|IP|ds)($| )/ ) { $shipout->($_) ; } elsif( /^\.(SH) (.*)$/ ) { $shipout->(".$1 ".ggettext($filename,$lineno,$2)."\n") ; } elsif( /^\.TP/ ) { $shipout->($_) ; $_ = ; $lineno++ ; if( /^\\fB\\-/ ) { s/\\fI(.*?)\\fR/ "\\fI".ggettext($filename,$lineno,$1)."\\fR"/ge ; $shipout->($_) ; } else { partraverse($filename,$lineno,$_) ; } } else { /^.?(.?.?)/ ; die "$filename:$lineno: unsupported request .$1\n" ; } } if( @saved ) { partraverse($filename,$lineno-@saved,@saved); } close MAN ; } if( @ARGV && $ARGV[0] eq '-x' ) { shift @ARGV ; my %seenwhere = () ; my @strings = () ; $gettext = sub { my ($file,$line,$text) = @_ ; push @strings, $text unless exists $seenwhere{$text} ; push @{$seenwhere{$text}}, "$file:$line" ; }; $shipout = sub {} ; for my $filename ( @ARGV ) { traverser($filename) ; } my $date = `date "+%Y-%m-%d %H:%M%z"` ; chomp $date ; print << "EOF" ; # SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Xcftools-manpages VERSION\\n" "Report-Msgid-Bugs-To: henning\@makholm.net\\n" "POT-Creation-Date: $date\\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n" "Last-Translator: FULL NAME \\n" "Language-Team: LANGUAGE \\n" "MIME-Version: 1.0\\n" "Content-Type: text/plain; charset=CHARSET\\n" "Content-Transfer-Encoding: 8bit\\n" EOF ; for my $string ( @strings ) { print(join(" ","#:",@{$seenwhere{$string}}),"\n"); $string =~ s/([\\\"])/\\$1/g ; $string =~ s/\n$/\\n/ ; print "msgid \"" ; print(join "\\n\"\n \"",split /\n/, $string) ; print "\"\n"; print "msgstr \"\"\n\n" ; } exit 0 ; } if( @ARGV == 2 ) { my ($pofile,$manfile) = @ARGV ; open PO, "<", $pofile or die "Pofile $pofile not found" ; my %catalog ; my $msgid ; my $addto ; while( ) { # This is an extremely simple-minded parser. if( s/^\s*msgid\s+\"/\"/ ) { $msgid = "" ; $addto = \$msgid ; } elsif( s/^\s*msgstr\s+\"/\"/ ) { $catalog{$msgid} = "" ; $addto = \$catalog{$msgid} ; } if( /^\s*\"(.*)\"\s*$/ ) { $_ = $1 ; s/\\(.)/$1 eq 'n' ? "\n" : $1/ge ; $$addto .= $_ ; } } close PO ; $gettext = sub { my ($file,$line,$text) = @_ ; return $catalog{$text} if $catalog{$text} ; return $text ; }; $shipout = sub { print @_ ; }; traverser($manfile) ; exit 0 ; } print STDERR "Usage: $0 -x man-source-files\n" ; print STDERR " or: $0 pofile manfile\n" ; xcftools-1.0.7/manpo/optipot.pl0000644000175000017500000000301111223357136016365 0ustar makholmmakholm#! /usr/bin/perl # This script extracts translatable manpage fragments from # option.i # # This file was written by Henning Makholm # It is hereby in the public domain. # # In jurisdictions that do not recognise grants of copyright to the # public domain: I, the author and (presumably, in those jurisdictions) # copyright holder, hereby permit anyone to distribute and use this code, # in source code or binary form, with or without modifications. This # permission is world-wide and irrevocable. # # Of course, I will not be liable for any errors or shortcomings in the # code, since I give it away without asking any compenstations. # # If you use or distribute this code, I would appreciate receiving # credit for writing it, in whichever way you find proper and customary. use strict ; use warnings ; my $masterfile = "options.i" ; open OPTIONS, "<", $masterfile or die "Cannot open $masterfile" ; while( ) { if( /OPTION\(([^,]*),([^,]*),(.*),\s*$/ ) { my ($option,$long,$help) = ($1,$2,$3) ; if( $help =~ s/^\s*\(([^()]+)\)\s*// ) { my $arg = $1 ; $arg =~ s/"([^\"]*)"/\\fB$1\\fP/g ; print "#line $. \"$masterfile\"\n.TP\n" ; print "\\fB\\-X\\fR \\fI$arg\\fR\n" ; } $_ = ; s/^\s*\(// ; print "#line $. \"$masterfile\"\n$_" ; while( ) { last if /^\s*\)\);/ ; s/^\s*// ; s/''/'/g ; print $_ ; } } } close OPTIONS ; xcftools-1.0.7/mkenumsc.pl0000644000175000017500000000617511223357033015411 0ustar makholmmakholm#! /usr/bin/perl # This short script extracts enum definitions from files stolen # from the Gimp's sources. # # This file was written by Henning Makholm # It is hereby in the public domain. # # In jurisdictions that do not recognise grants of copyright to the # public domain: I, the author and (presumably, in those jurisdictions) # copyright holder, hereby permit anyone to distribute and use this code, # in source code or binary form, with or without modifications. This # permission is world-wide and irrevocable. # # Of course, I will not be liable for any errors or shortcomings in the # code, since I give it away without asking any compenstations. # # If you use or distribute this code, I would appreciate receiving # credit for writing it, in whichever way you find proper and customary. use strict ; use warnings ; print "/* Autogenerated from ",@ARGV," */\n" ; print "#include \"enums.h\"\n" ; print "#define N_\n" ; print "#include \n" ; while(<>) { if( /^\s*typedef\s+enum\s/ ) { my @nodesc ; my @all ; my %desc ; my $enum ; $_ = <> ; /^\{\s*$/ or die "Expected opening brace" ; while( <> ) { if( s/^\s*,?(\w+)\s*(=\s*\d+)?,?\s*// ) { my $constant = $1 ; push @all, $constant ; if( m' desc="([^"]+)"' ) { $desc{$constant} = $1 ; } else { push @nodesc, $constant ; $desc{$constant} = $constant ; } } elsif( /^\}\s*(\w+)\s*;/ ) { $enum = $1 ; last ; } else { die "Unparseable line [$_]" ; } } die "Unexpected EOF" unless defined $enum ; if( @nodesc ) { my $prefix = $nodesc[0] ; $prefix =~ s/.$// ; for( @desc{@nodesc} ) { while( substr($_,0,length $prefix) ne $prefix ) { $prefix =~ s/.$// ; } } $prefix = length $prefix ; for( @desc{@nodesc} ) { $_ = substr($_,$prefix); $_ = "\u\L$_" ; s/_(.)/\U$1/g ; s/^Rle/RLE/; } my $suffix = substr($desc{$nodesc[0]},1) ; for( @desc{@nodesc} ) { while( substr($_,-length($suffix)) ne $suffix ) { goto nosuffix if $suffix eq "" ; $suffix =~ s/^.// ; } } $suffix = length $suffix ; $_ = substr($_,0,-$suffix) for @desc{@nodesc} ; nosuffix: ; } my $gettext = "" ; if( $enum ne "PropType" ) { $gettext = "N_" ; } my $buflen = 15 + length($enum); print "const char*\nshow$enum($enum x)\n{\n" ; print " static char buf[$buflen];\n switch(x) {\n" ; for my $c (@all) { print " case $c: return $gettext(\"$desc{$c}\");\n" ; } print " default: sprintf(buf,\"($enum:%d)\",(int)x);\n" ; print " return buf;\n }\n}\n"; } } xcftools-1.0.7/mkenumsh.pl0000644000175000017500000000372611223357033015415 0ustar makholmmakholm#! /usr/bin/perl # This short script extracts enum definitions from files stolen # from the Gimp's sources. # # This file was written by Henning Makholm # It is hereby in the public domain. # # In jurisdictions that do not recognise grants of copyright to the # public domain: I, the author and (presumably, in those jurisdictions) # copyright holder, hereby permit anyone to distribute and use this code, # in source code or binary form, with or without modifications. This # permission is world-wide and irrevocable. # # Of course, I will not be liable for any errors or shortcomings in the # code, since I give it away without asking any compenstations. # # If you use or distribute this code, I would appreciate receiving # credit for writing it, in whichever way you find proper and customary. use strict ; use warnings ; my @wantenums = qw( GimpImageBaseType GimpImageType GimpLayerModeEffects PropType XcfCompressionType ); my %wantenums ; @wantenums{@wantenums} = (-1) x @wantenums ; my $last ; my @collect ; print join("\n * ","/* Extracted from",@ARGV),"\n * by $0\n */\n" ; while( <> ) { if( /^\s*typedef\s+enum\s/ ) { @collect = ($_) ; } elsif( /^\}\s+(\w+)\s*;/ && @collect ) { my $enum = $1 ; if( ++$wantenums{$enum} == 0 ) { if( $enum eq 'GimpLayerModeEffects' ) { push @collect, " ,GIMP_NORMAL_NOPARTIAL_MODE=-1\n" ; } push @collect, $_ ; print @collect ; print "const char *show$enum($enum);\n" ; print "#define ${enum}_LAST $last\n" ; } @collect = () ; } elsif( @collect ) { push @collect, $_ ; $last = $1 if /^\s*(\w+)/ ; } } for my $enum ( @wantenums ) { my $count = 1 + $wantenums{$enum} ; if( $count != 1 ) { print STDERR "$count definitions of $enum\n" ; } } xcftools-1.0.7/mkopti.pl0000644000175000017500000001244311223357032015064 0ustar makholmmakholm#! /usr/bin/perl # This script extracts option strings, longopt arrays and # manpage fragments for xcftools # # This file was written by Henning Makholm # It is hereby in the public domain. # # In jurisdictions that do not recognise grants of copyright to the # public domain: I, the author and (presumably, in those jurisdictions) # copyright holder, hereby permit anyone to distribute and use this code, # in source code or binary form, with or without modifications. This # permission is world-wide and irrevocable. # # Of course, I will not be liable for any errors or shortcomings in the # code, since I give it away without asking any compenstations. # # If you use or distribute this code, I would appreciate receiving # credit for writing it, in whichever way you find proper and customary. use strict ; use warnings ; my $mastersource = "options.i" ; my $target = shift ; my @defines = ( "\U$target", "OPTI_TARGET \"$target\"" ) ; push @defines, "\U$1foo" if $target =~ /^(xcf(2|to))/ ; push @defines, "XCF2FOO" if $target eq "xcfview" ; open INFILE, "-|", join(" ","cpp -imacros config.h", (map {(my $a = "-D$_")=~s/ /=/; $a} @defines), $mastersource) or die "Cannot preprocess options." ; open OUTFILE, ">", "$target.oi" or die "Cannot write $target.oi" ; print OUTFILE "/* Autogenerated by $0 $target */\n" ; print OUTFILE "#define $_\n" for @defines ; print OUTFILE "#define OPTIONGROUP(a,b)\n" ; my %manstrings ; my $mansection = '1i' ; my @desc ; my $optstring = "" ; print OUTFILE "#ifdef HAVE_GETOPT_LONG\n" ; print OUTFILE "static const struct option longopts[] = {\n" ; my $manref = undef ; my $parskip ; while( ) { next if /^#/ ; if( /^OPTION\(([^,]+),([^,]+),(.*),\s*/ ) { my ($short,$long,$desc) = ($1,$2,$3) ; my $hasarg = '' ; if( $desc =~ s/^\s*\(([^()]+)\)\s*// ) { $hasarg = $1 ; } my @long = split / /,$long ; my $longfordesc = $long[0] ; for my $l ( @long ) { my $long = $l ; $long =~ s/^--// or print STDERR "Long option $long should have dashes\n" ; print OUTFILE "\t{ \"$long\", ",$hasarg ? 1 : 0,", 0, $short},\n" ; } if( $short =~ s/^\s*'(.)'\s*$/-$1/ ) { unshift @long, $short ; $optstring .= $1 . ($hasarg && ':') ; } else { undef $short ; } if( @long ) { (my $descarg = $hasarg ) =~ s/\"//g ; $manref = \$manstrings{$mansection}{$long[0]} ; $long[0] =~ s/^(-[^-])/\\$1/ ; $$manref = "" ; my $next = ".TP 8\n" ; $hasarg =~ s/"([^\"]*)"/\\fB$1\\fP/g ; $hasarg = " \\fI$hasarg\\fR" if $hasarg ; for my $long ( @long ) { $$manref .= $next . "\\fB$long\\fR$hasarg" ; $next = ", " ; } $$manref .= "\n" ; $parskip = 1 ; push @desc, [$short || $long[0], $descarg, $desc, $short && $long[1] ] ; } } elsif( /^\s*\)\);/ ) { $manref = undef ; } elsif( defined $manref ) { s/^\s*// ; s/''/\'/g ; s/^\(\s*// if $parskip ; $$manref .= $_ ; $parskip = 0 ; } elsif( /^OPTIONGROUP\(([^(,)]+),([^(,)]*)\)/ ) { push @desc,$2 unless $mansection eq $1 ; $mansection = $1 ; } } print OUTFILE "{0}};\n" ; print OUTFILE "#define LONGALT(s) \" (\" s \")\"\n" ; print OUTFILE "#else\n" ; print OUTFILE "#define LONGALT(s) \"\"\n" ; print OUTFILE "#endif\n" ; close INFILE ; print OUTFILE "static void\nopt_usage(FILE *f)\n{\n" ; my %d15plus ; my $longest = 2 ; for my $desc ( @desc ) { next unless ref $desc ; my $l = length $$desc[0] ; my $x = $$desc[1] ; if( $x ) { next if exists($d15plus{$x}) && $d15plus{$x} >= $l+1 ; $d15plus{$x} = $l+1 ; } else { $longest = $l if $longest < length $l ; } } print OUTFILE " int i = $longest;\n int j;\n" ; for my $d15 ( sort keys %d15plus ) { print OUTFILE " j=strlen(_(\"$d15\"))+$d15plus{$d15}; if( j>i ) i=j;\n" ; } for my $desc ( @desc ) { unless( ref $desc ) { print OUTFILE " fprintf(f,\"%s:\\n\",_(\"$desc\"));\n" if $desc ; next ; } my ($optname,$d15,$helptext,$alternative) = @$desc ; my $d1l = length($optname) ; print OUTFILE (" fprintf(f,\" ",$optname); my $f2a = "i-$d1l,\"\"" ; if( $d15 ) { print OUTFILE " " ; $f2a = "i-".($d1l+1).",_(\"$d15\")" ; } print OUTFILE "%-*s %s" ; if( $alternative ) { print OUTFILE "\" LONGALT(\"$alternative\") \""; } print OUTFILE "\\n\",$f2a,\n _(\"$helptext\"));\n" ; } print OUTFILE "}\n" ; print OUTFILE "#undef LONGALT\n" ; print OUTFILE "#define OPTSTRING \"$optstring\"\n" ; close OUTFILE or die "Problems closing $target.oi" ; for $mansection ( keys %manstrings ) { my $hash = $manstrings{$mansection} ; open OUTFILE,">","$target.$mansection" or die "Cannot write $target.$mansection" ; print OUTFILE @$hash{sort { "\U$a" cmp "\U$b" or $b cmp $a } keys %$hash} ; close OUTFILE or die "Problems closing $target.$mansection" ; } xcftools-1.0.7/mktablec.pl0000644000175000017500000000502511223357032015341 0ustar makholmmakholm#! /usr/bin/perl # This short script creates fixed look-up tables for xcftools # # This file was written by Henning Makholm # It is hereby in the public domain. # # In jurisdictions that do not recognise grants of copyright to the # public domain: I, the author and (presumably, in those jurisdictions) # copyright holder, hereby permit anyone to distribute and use this code, # in source code or binary form, with or without modifications. This # permission is world-wide and irrevocable. # # Of course, I will not be liable for any errors or shortcomings in the # code, since I give it away without asking any compenstations. # # If you use or distribute this code, I would appreciate receiving # credit for writing it, in whichever way you find proper and customary. use strict ; use warnings ; sub shipsubarray (@) { while( @_ > 1 && $_[$#_] == 0 ) { pop @_ ; } my $last = pop @_ ; print " {" ; my $left = 75 ; for my $d ( (map{ $_ . "," } @_), "$last}," ) { if( length($d) > $left ) { print "\n " ; $left = 75 ; } print $d ; $left -= length($d) ; } print "\n" ; } my $precompute_it = 1 ; if( open CONFIGH, "<", "config.h" ) { $precompute_it = 0 ; while( ) { if( /\#\s*define\s+PRECOMPUTED_SCALETABLE/ ) { $precompute_it = 1 ; last ; } } close CONFIGH ; } print "/* Autogenerated by $0 */\n" ; print "#include \"pixels.h\"\n" ; print "#ifdef PRECOMPUTED_SCALETABLE\n" ; if( $precompute_it ) { print "const uint8_t scaletable[256][256] = {\n" ; for my $p ( 0..255 ) { shipsubarray( map { int(($p*$_+127)/255) } ( 0 .. 255 ) ); # This formula has the property that # scaletable[p][q] + scaletable[255-p][q] == q # for all uint8_t values of p and q. # This is important in order that a partially transparent # pixel does not change the color of the underlying pixel # unless the two pixels have different colors. } print "};\n" ; } else { print "#error PRECOMPUTED_SCALETABLE was not defined at generation time\n"; } print "#endif\n" ; if(0) { print "const uint8_t divtable[256][256] = {\n" ; for my $p ( 0..255 ) { shipsubarray( map { $_ >= $p ? 255 : int(0.5 + 255*$_/$p) } ( 0 .. 255 ) ); } print "};\n" ; } print "const rgba graytable[256] = {\n" ; for my $p ( 0..255 ) { print " (rgba)$p << RED_SHIFT | (rgba)$p << GREEN_SHIFT | (rgba)$p << BLUE_SHIFT,\n" ; } print "};\n" ; xcftools-1.0.7/options.i0000644000175000017500000003062711223357032015075 0ustar makholmmakholm/* Option processing for xcftools -*- C -*- * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ OPTIONGROUP(1i,General options); OPTION('h',--help,show this message, (Print an option summery to standard output and exit with a return code of 0. )); usage(stdout); exit(0); OPTION('V',--version,show version, (Print the version numer of .B xcftools to standard output and exit with a return code of 0. )); printf(OPTI_TARGET " - " PACKAGE_STRING "\n"); exit(0); OPTION('v',--verbose,show progress messages, (Print progress messages about the conversion to standard error. )); verboseFlag = 1 ; break ; OPTION('j',--bzip,input is bzip2 compressed, (Equivalent to .BR "\-Z bzcat" . Default if the filename ends with .BR bz2 . )); unzipper = "bzcat" ; break ; OPTION('z',--gzip,input is gzip compressed, (Equivalent to .BR "\-Z zcat" . Default if the filename ends with .BR gz . )); unzipper = "zcat" ; break ; OPTION('Z',--unpack,(command) use 'command' to decompress input, (Specify a command that the input file is filtered through before being interpreted as an XCF file. The command is invoked as .I command filename and must produce output to its standard output. Note that it is not possible to specify arguments as part of .IR command . An uncompressor is selected automatically if the filename ends with .B gz or .BR bz2 ; to suppress this, use .B \-Z cat (which is implemented without actually starting a .BR cat (1) process). )); unzipper = optarg ; break ; #ifdef XCF2FOO OPTION('o',--output,(filename) name output file, (Write the converted picture to .I filename instead of to standard output. )); flatspec.output_filename = optarg ; break ; #ifdef XCF2PNM OPTION('a',--alpha,(filename) write transparency map, (Output a transparency mask for the flattened image to .I filename as a .BR pgm (5) file, in addition to the ordinary output. If the flattened image is completely opaque, this will produce an error message and exit status 101; use .B \-A to suppress this. )); flatspec.transmap_filename = optarg ; break ; #endif OPTION('b',--background,(color) select background color, (Use this color for transparent pixels in the image. The color can be given as .B #rrggbb or .B #rgb hexadecimal values, or as an X11 color name (which will only work if a color name database can be found in one of a number of standard locations). )); { unsigned r,g,b ; unsigned long hex ; int met = 0 ; if( *optarg == '#' ) sscanf(optarg+1,"%lx%n",&hex,&met); if( met == 3 && strlen(optarg) == 4 ) { r = ((hex >> 8) & 0xF) * 0x11 ; g = ((hex >> 4) & 0xF) * 0x11 ; b = ((hex >> 0) & 0xF) * 0x11 ; } else if( met == 6 && strlen(optarg) == 7 ) { r = ((hex >> 16) & 0xFF) ; g = ((hex >> 8) & 0xFF) ; b = ((hex >> 0) & 0xFF) ; } else if( strcasecmp(optarg,"black") == 0 ) r = g = b = 0 ; else if( strcasecmp(optarg,"white") == 0 ) r = g = b = 255 ; else { const char *filenames[] = { "/etc/X11/rgb.txt", "/usr/lib/X11/rgb.txt", "/usr/share/X11/rgb.txt", NULL }; const char **fnp ; r = (unsigned)-1 ; int any = 0 ; for( fnp = filenames; r == (unsigned)-1 && fnp && *fnp; fnp++ ) { FILE *colortable = fopen(*fnp,"rt"); if( colortable ) { any = 1 ; int clen ; char colorbuf[80] ; do { if( !fgets(colorbuf,sizeof colorbuf,colortable) ) { r = (unsigned)-1 ; break ; } clen = strlen(colorbuf); while( clen && isspace(colorbuf[clen-1]) ) clen-- ; colorbuf[clen] = '\0' ; clen = 0 ; sscanf(colorbuf," %u %u %u %n",&r,&g,&b,&clen); } while( clen == 0 || strcasecmp(colorbuf+clen,optarg) != 0 ); fclose(colortable) ; } } if( !any ) { fprintf(stderr,_("Could not find X11 color database\n")); } } if( r == (unsigned)-1 ) FatalGeneric(20,_("Unknown background color '%s'"),optarg); flatspec.default_pixel = ((rgba)255 << ALPHA_SHIFT) + ((rgba)r << RED_SHIFT) + ((rgba)g << GREEN_SHIFT) + ((rgba)b << BLUE_SHIFT); break ; } OPTION('A',--force-alpha,force alpha channel in output, (Invent a trivial alpha channel even if the flattened image is completely opaque. )); flatspec.default_pixel = FORCE_ALPHA_CHANNEL ; break ; OPTION('c',--color --colour,select color output, (Force the output to use RGB color space even if it there are more compact alternatives. #ifdef XCF2PNM This will be selected automatically if the output file''s name ends with .BR .ppm . #endif )); flatspec.out_color_mode = COLOR_RGB ; break ; OPTION('g',--gray --grey,select grayscale output, (Force the output to be a grayscale image even if it may be monochrome. If any colored pixels are encountered, exit with status 103. This will be selected automatically if the output file''s name ends with .BR .pgm . )); flatspec.out_color_mode = COLOR_GRAY ; break ; #ifdef XCF2PNM OPTION('m',--mono,select monochrome output, (Force the output to be a monochrome image. If any colors except black and white are encountered, exit with status 103. This will be selected automatically if the output file''s name ends with .BR .pbm . )); flatspec.out_color_mode = COLOR_MONO ; break ; #endif #ifdef XCF2PNM OPTION('n',--pnm,select -c/-g/-m by image contents, (Suppress the automatic choice of .BR \-c , .BR \-g , or .BR \-m based on output filename, and instead select the output format based on image contents. This is the default if the filename is not recognized, and when writing to stdout. )); flatspec.out_color_mode = COLOR_BY_CONTENTS ; break ; #endif OPTION('T',--truecolor,treat indexed images as RGB for flattening, (Use standard RGB compositing for flattening indexed layers. Without this option, .B \*p will mimic the Gimp''s current strategy of rounding each alpha value to either full transparency or full opacity, and interpret all layer modes as .BR Normal . )); flatspec.gimpish_indexed = 0 ; break ; OPTION('G',--for-gif,disallow partial transparency, (Assert that the flattened image will have no partial transparency (allowing a more compact representation of the alpha output). Exit with status 102 if the flattened image has any partial transparency. If .B \-b is also given, this tests whether there there is partial transparency before applying the background color. )); flatspec.partial_transparency_mode = FORBID_PARTIAL_TRANSPARENCY ; break ; OPTION('D',--dissolve,dissolve partial transparency, (Do a "dissolve" step to eliminate partial transparency after flattening. If .B \-b is also given, this happens before the background color is applied. )); flatspec.partial_transparency_mode = DISSOLVE_PARTIAL_TRANSPARENCY ; break ; OPTION('f',--full-image,flatten to memory; then analyse, (First flatten the entire image to a memory buffer before writing output. Then analyse the image to decide on the details of the output format (e.g., whether a grayscale output is sufficient). Without this option, the program flattens only a singe row of "tiles" (height 64) at a time. )); flatspec.process_in_memory = 1 ; break ; OPTION('S',--size,(w"x"h) crop image while converting, (Crop the converted image to width \fIw\fP and height \fIh\fP. )); { unsigned w,h ; int n = 0 ; sscanf(optarg,"%ux%u%n",&w,&h,&n) ; if( n && n == strlen(optarg) ) { if( flatspec.window_mode == AUTOCROP ) flatspec.window_mode = USE_CANVAS ; flatspec.window_mode |= MANUAL_CROP ; flatspec.dim.width = w ; flatspec.dim.height = h ; } else FatalGeneric(20,_("-S option must have an argument of the form wxh")); break ; } OPTION('O',--offset,(x","y) translate converted part of image, (Offset the converted part of the image from the top-left corner of the XCF canvas. Usually used with .BR \-S . )); { int x,y ; int n = 0 ; sscanf(optarg,"%d,%d%n",&x,&y,&n) ; if( n && n == strlen(optarg) ) { if( flatspec.window_mode == AUTOCROP ) flatspec.window_mode = USE_CANVAS ; flatspec.window_mode |= MANUAL_OFFSET ; flatspec.dim.c.l = x ; flatspec.dim.c.t = y ; } else FatalGeneric(20,_("-O option must have an argument of the form x,y")); break ; } OPTION('C',--autocrop,autocrop to visible layer boundaries, (Set the converted part of the image such that it just include the boundaries of the visible (or selected) layers. This may make it either smaller or larger than the canvas, depending on the position and size of the visible layers. (Note that the .I contents of the layers is not taken into account when autocropping). .IP In the absence of options that specify otherwise, the converted image will cover the entire XCF canvas. )); flatspec.window_mode = AUTOCROP ; break ; #ifndef XCFVIEW OPTIONGROUP(1il,Layer-selection options); #endif OPTION(300,--mode,(mode) set layer mode, (Set the layer mode (e.g., .B Normal or .BR Multiply ). )); { GimpLayerModeEffects m ; #ifdef ENABLE_NLS for( m = 0; m < GimpLayerModeEffects_LAST; m++ ) if( strcmp(optarg,_(showGimpLayerModeEffects(m))) == 0 ) goto found_localized ; #endif for( m = 0; strcmp(optarg,showGimpLayerModeEffects(m)) != 0 ; m++ ) { if( m > GimpLayerModeEffects_LAST ) FatalGeneric(20,_("Layer mode '%s' is unknown"),optarg); } found_localized: lastlayerspec(&flatspec,"--mode")->mode = m ; break ; } OPTION(301,--percent,(n) set opacity in percent, (Set the opacity on a scale from 0 to 100 (as in the Gimp user interface). )); { unsigned pct ; int n ; sscanf(optarg,"%u%n",&pct,&n) ; if( n != strlen(optarg) || pct > 100 ) FatalGeneric(20,_("The argument to --percent is not a percentage")); lastlayerspec(&flatspec,"--percent")->opacity = pct * 255 / 100 ; break ; } OPTION(302,--opacity,(n) set opacity in 1/255 units, (Set the opacity on a scale from 0 to 255 (as used internally) )); { unsigned alpha ; int n ; sscanf(optarg,"%u%n",&alpha,&n) ; if( n != strlen(optarg) || alpha > 255 ) FatalGeneric(20,_("The argument to --opacity is not a number " "between 0 and 255")); lastlayerspec(&flatspec,"--percent")->opacity = alpha ; break ; } OPTION(303,--mask,enable layer mask, (Enable the layer mask. )); lastlayerspec(&flatspec,"--mask")->hasMask = 1 ; break ; OPTION(304,--nomask,disable layer mask, (Disable the layer mask. )); lastlayerspec(&flatspec,"--nomask")->hasMask = 0 ; break ; #endif /* XCF2FOO */ OPTIONGROUP(1i,) #if HAVE_ICONV OPTION('u',--utf8,use UTF-8 for layer names, (Use the raw UTF-8 representation from the XCF file to compare and display layer names. Ordinarily, layer names will be converted to the character set of the current locale. )); use_utf8 = 1 ; break ; #endif xcftools-1.0.7/palette.c0000644000175000017500000000551311223357032015026 0ustar makholmmakholm/* Palette-manipulation functions functions for xcftools * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "palette.h" #include #define HASH_SIZE 1711 /* If I remember correctly, this size hash will be able to handle * either of * a) the Netscape cube with intensities 0x00, 0x33, 0x66, 0x99, 0xCC, xFF * b) the EGA cube with intensities 0x00, 0x55, 0xAA, 0xFF * c) the "CGA cube" with intensites 0x00, 0x80, 0xFF * d) a full 256-step grayscale * without collisions. It will also have a minimal number of collisions * (4) on a full 16-to-a-side cube with intensities * 0x00, 0x11, 0x22, ..., 0xDD, 0xEE, 0xFF. */ unsigned paletteSize ; rgba palette[MAX_PALETTE] ; static int masterhash[HASH_SIZE]; static int bucketlinks[MAX_PALETTE]; void init_palette_hash(void) { unsigned i ; for( i=0; i= 0 ) { if( palette[*target] == color ) return *target ; target = &bucketlinks[*target] ; } #if 0 fprintf(stderr,"Palette[%u] = %08x (%u --> %d)\n",paletteSize,color, color % HASH_SIZE, *target); #endif if( paletteSize >= MAX_PALETTE ) return -1 ; *target = paletteSize ; palette[paletteSize] = color ; return paletteSize++ ; } static inline void unpalettify_row(rgba *row,unsigned ncols) { index_t *newrow = (index_t*) row ; unsigned i ; for( i=ncols; i--; ) { row[i] = palette[newrow[i]] ; } } int palettify_row(rgba *row,unsigned ncols) { index_t *newrow = (index_t*)row ; assert(sizeof(index_t) <= sizeof(rgba)); unsigned i ; for( i=0; i * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #ifndef PALETTE_H #define PALETTE_H #include "xcftools.h" #include "pixels.h" #define MAX_PALETTE 256 extern rgba palette[MAX_PALETTE] ; extern unsigned paletteSize ; typedef uint8_t index_t ; void init_palette_hash(void); /* lookup_or_intern() returns a negative number if there is no room * for the color in the palette. */ int lookup_or_intern(rgba color); /* palettify_row will convert a row of 'rgba' values into a packed row * of 'uint8_t' indces. If it succeeds without running out of colormap * entries, it returns nonzero. On the other hand if it does run out * of colormap entries it returns zero _and_ undoes the conversions * already done, so that the row is still a full row of 'rgba' values * afterwards. */ int palettify_row(rgba *row,unsigned ncols); /* palettify_rows is like palettify_rows, but works on several * rows at a time. */ int palettify_rows(rgba *rows[],unsigned ncols,unsigned nlines); #endif /* PALETTE_H */ xcftools-1.0.7/pixels.c0000644000175000017500000003445211223357031014677 0ustar makholmmakholm/* Pixel and tile functions for xcftools * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #define DEBUG #include "xcftools.h" #include "pixels.h" #include #include rgba colormap[256] ; unsigned colormapLength=0 ; int degrayPixel(rgba pixel) { if( ((pixel >> RED_SHIFT) & 255) == ((pixel >> GREEN_SHIFT) & 255) && ((pixel >> RED_SHIFT) & 255) == ((pixel >> BLUE_SHIFT) & 255) ) return (pixel >> RED_SHIFT) & 255 ; return -1 ; } /* ****************************************************************** */ typedef const struct _convertParams { int bpp ; int shift[4] ; uint32_t base_pixel ; const rgba *lookup ; } convertParams ; #define RGB_SHIFT RED_SHIFT, GREEN_SHIFT, BLUE_SHIFT #define OPAQUE (255 << ALPHA_SHIFT) static convertParams convertRGB = { 3, {RGB_SHIFT}, OPAQUE, 0 }; static convertParams convertRGBA = { 4, {RGB_SHIFT, ALPHA_SHIFT}, 0,0 }; static convertParams convertGRAY = { 1, {-1}, OPAQUE, graytable }; static convertParams convertGRAYA = { 2, {-1,ALPHA_SHIFT}, 0, graytable }; static convertParams convertINDEXED = { 1, {-1}, OPAQUE, colormap }; static convertParams convertINDEXEDA = { 2, {-1,ALPHA_SHIFT}, 0, colormap }; static convertParams convertColormap = { 3, {RGB_SHIFT}, 0, 0 }; static convertParams convertChannel = { 1, {ALPHA_SHIFT}, 0, 0 }; /* ****************************************************************** */ static inline int tileDirectoryOneLevel(struct tileDimensions *dim,uint32_t ptr) { if( ptr == 0 ) return 0 ; if( xcfL(ptr ) != dim->c.r - dim->c.l || xcfL(ptr+4) != dim->c.b - dim->c.t ) FatalBadXCF("Drawable size mismatch at %" PRIX32, ptr); return ptr += 8 ; } static void initTileDirectory(struct tileDimensions *dim,struct xcfTiles *tiles, const char *type) { uint32_t ptr ; uint32_t data ; ptr = tiles->hierarchy ; tiles->hierarchy = 0 ; if( (ptr = tileDirectoryOneLevel(dim,ptr)) == 0 ) return ; if( tiles->params == &convertChannel ) { /* A layer mask is a channel. * Skip a name and a property list. */ xcfString(ptr,&ptr); while( xcfNextprop(&ptr,&data) != PROP_END ) ; ptr = xcfOffset(ptr,4*4); if( (ptr = tileDirectoryOneLevel(dim,ptr)) == 0 ) return ; } /* The XCF format has a dummy "hierarchy" level which was * once meant to mean something, but never happened. It contains * the bpp value and a list of "level" pointers; but only the * first level actually contains data. */ data = xcfL(ptr) ; if( xcfL(ptr) != tiles->params->bpp ) FatalBadXCF("%"PRIu32" bytes per pixel for %s drawable",xcfL(ptr),type); ptr = xcfOffset(ptr+4,3*4) ; if( (ptr = tileDirectoryOneLevel(dim,ptr)) == 0 ) return ; xcfCheckspace(ptr,dim->ntiles*4+4,"Tile directory at %" PRIX32,ptr); if( xcfL(ptr + dim->ntiles*4) != 0 ) FatalBadXCF("Wrong sized tile directory at %" PRIX32,ptr); #define REUSE_RAW_DATA tiles->tileptrs = (uint32_t*)(xcf_file + ptr) #if defined(WORDS_BIGENDIAN) && defined(CAN_DO_UNALIGNED_WORDS) REUSE_RAW_DATA; #else # if defined(WORDS_BIGENDIAN) if( (ptr&3) == 0 ) REUSE_RAW_DATA; else # endif { unsigned i ; tiles->tileptrs = xcfmalloc(dim->ntiles * sizeof(uint32_t)) ; for( i = 0 ; i < dim->ntiles ; i++ ) tiles->tileptrs[i] = xcfL(ptr+i*4); } #endif } void initLayer(struct xcfLayer *layer) { if( layer->dim.ntiles == 0 || (layer->pixels.hierarchy == 0 && layer->mask.hierarchy == 0) ) return ; switch(layer->type) { #define DEF(X) case GIMP_##X##_IMAGE: layer->pixels.params = &convert##X; break DEF(RGB); DEF(RGBA); DEF(GRAY); DEF(GRAYA); DEF(INDEXED); DEF(INDEXEDA); default: FatalUnsupportedXCF(_("Layer type %s"),_(showGimpImageType(layer->type))); } initTileDirectory(&layer->dim,&layer->pixels, _(showGimpImageType(layer->type))); layer->mask.params = &convertChannel ; initTileDirectory(&layer->dim,&layer->mask,"layer mask"); } static void copyStraightPixels(rgba *dest,unsigned npixels, uint32_t ptr,convertParams *params); void initColormap(void) { uint32_t ncolors ; if( XCF.colormapptr == 0 ) { colormapLength = 0 ; return ; } ncolors = xcfL(XCF.colormapptr) ; if( ncolors > 256 ) FatalUnsupportedXCF(_("Color map has more than 256 entries")); copyStraightPixels(colormap,ncolors,XCF.colormapptr+4,&convertColormap); colormapLength = ncolors ; #ifdef xDEBUG { unsigned j ; fprintf(stderr,"Colormap decoding OK\n"); for( j = 0 ; j < ncolors ; j++ ) { if( j % 8 == 0 ) fprintf(stderr,"\n"); fprintf(stderr," %08x",colormap[j]); } fprintf(stderr,"\n"); } #endif } /* ****************************************************************** */ struct Tile * newTile(struct rect r) { unsigned npixels = (unsigned)(r.b-r.t) * (unsigned)(r.r-r.l) ; struct Tile *data = xcfmalloc(sizeof(struct Tile) - sizeof(rgba)*(TILE_HEIGHT*TILE_WIDTH - npixels)) ; data->count = npixels ; data->refcount = 1 ; data->summary = 0 ; return data ; } struct Tile * forkTile(struct Tile* tile) { if( ++tile->refcount <= 0 ) FatalUnsupportedXCF(_("Unbelievably many layers?\n" "More likely to be a bug in %s"),progname); return tile ; } void freeTile(struct Tile* tile) { if( --tile->refcount == 0 ) xcffree(tile) ; } summary_t tileSummary(struct Tile *tile) { unsigned i ; summary_t summary ; if( (tile->summary & TILESUMMARY_UPTODATE) != 0 ) return tile->summary ; summary = TILESUMMARY_ALLNULL + TILESUMMARY_ALLFULL + TILESUMMARY_CRISP ; for( i=0; summary && icount; i++ ) { if( FULLALPHA(tile->pixels[i]) ) summary &= ~TILESUMMARY_ALLNULL ; else if( NULLALPHA(tile->pixels[i]) ) summary &= ~TILESUMMARY_ALLFULL ; else summary = 0 ; } summary += TILESUMMARY_UPTODATE ; tile->summary = summary ; return summary ; } void fillTile(struct Tile *tile,rgba data) { unsigned i ; for( i = 0 ; i < tile->count ; i++ ) tile->pixels[i] = data ; if( FULLALPHA(data) ) tile->summary = TILESUMMARY_UPTODATE+TILESUMMARY_ALLFULL+TILESUMMARY_CRISP; else if (NULLALPHA(data) ) tile->summary = TILESUMMARY_UPTODATE+TILESUMMARY_ALLNULL+TILESUMMARY_CRISP; else tile->summary = TILESUMMARY_UPTODATE ; } /* ****************************************************************** */ static void copyStraightPixels(rgba *dest,unsigned npixels, uint32_t ptr,convertParams *params) { unsigned bpp = params->bpp; const rgba *lookup = params->lookup; rgba base_pixel = params->base_pixel ; uint8_t *bp = xcf_file + ptr ; xcfCheckspace(ptr,bpp*npixels, "pixel array (%u x %d bpp) at %"PRIX32,npixels,bpp,ptr); while( npixels-- ) { rgba pixel = base_pixel ; unsigned i ; for( i = 0 ; i < bpp ; i++ ) { if( params->shift[i] < 0 ) { pixel += lookup[*bp++] ; } else { pixel += *bp++ << params->shift[i] ; } } *dest++ = pixel ; } } static inline void copyRLEpixels(rgba *dest,unsigned npixels,uint32_t ptr,convertParams *params) { unsigned i,j ; rgba base_pixel = params->base_pixel ; #ifdef xDEBUG fprintf(stderr,"RLE stream at %x, want %u x %u pixels, base %x\n", ptr,params->bpp,npixels,base_pixel); #endif /* This algorithm depends on the indexed byte always being the first one */ if( params->shift[0] < -1 ) base_pixel = 0 ; for( j = npixels ; j-- ; ) dest[j] = base_pixel ; for( i = 0 ; i < params->bpp ; i++ ) { int shift = params->shift[i] ; if( shift < 0 ) shift = 0 ; for( j = 0 ; j < npixels ; ) { int countspec ; unsigned count ; xcfCheckspace(ptr,2,"RLE data stream"); countspec = (int8_t) xcf_file[ptr++] ; count = countspec >= 0 ? countspec+1 : -countspec ; if( count == 128 ) { xcfCheckspace(ptr,3,"RLE long count"); count = xcf_file[ptr++] << 8 ; count += xcf_file[ptr++] ; } if( j + count > npixels ) FatalBadXCF("Overlong RLE run at %"PRIX32" (plane %u, %u left)", ptr,i,npixels-j); if( countspec >= 0 ) { rgba data = (uint32_t) xcf_file[ptr++] << shift ; while( count-- ) dest[j++] += data ; } else { while( count-- ) dest[j++] += (uint32_t) xcf_file[ptr++] << shift ; } } if( i == 0 && params->shift[0] < 0 ) { const rgba *lookup = params->lookup ; base_pixel = params->base_pixel ; for( j = npixels ; j-- ; ) { dest[j] = lookup[dest[j]-base_pixel] + base_pixel ; } } } #ifdef xDEBUG fprintf(stderr,"RLE decoding OK at %"PRIX32"\n",ptr); /* for( j = 0 ; j < npixels ; j++ ) { if( j % 8 == 0 ) fprintf(stderr,"\n"); fprintf(stderr," %8x",dest[j]); } fprintf(stderr,"\n"); */ #endif } static inline void copyTilePixels(struct Tile *dest, uint32_t ptr,convertParams *params) { if( FULLALPHA(params->base_pixel) ) dest->summary = TILESUMMARY_UPTODATE+TILESUMMARY_ALLFULL+TILESUMMARY_CRISP; else dest->summary = 0 ; switch( XCF.compression ) { case COMPRESS_NONE: copyStraightPixels(dest->pixels,dest->count,ptr,params); break ; case COMPRESS_RLE: copyRLEpixels(dest->pixels,dest->count,ptr,params); break ; default: FatalUnsupportedXCF(_("%s compression"), _(showXcfCompressionType(XCF.compression))); } } static struct Tile * getMaskOrLayerTile(struct tileDimensions *dim, struct xcfTiles *tiles, struct rect want) { struct Tile *tile = newTile(want); assert( want.l < want.r && want.t < want.b ); if( tiles->tileptrs == 0 ) { fillTile(tile,0); return tile ; } #ifdef xDEBUG fprintf(stderr,"getMaskOrLayer: (%d-%d),(%d-%d)\n",left,right,top,bottom); #endif if( isSubrect(want,dim->c) && (want.l - dim->c.l) % TILE_WIDTH == 0 && (want.t - dim->c.t) % TILE_HEIGHT == 0 ) { int tx = TILE_NUM(want.l - dim->c.l); int ty = TILE_NUM(want.t - dim->c.t); if( want.r == TILEXn(*dim,tx+1) && want.b == TILEYn(*dim,ty+1) ) { /* The common case? An entire single tile from the layer */ copyTilePixels(tile,tiles->tileptrs[tx + ty*dim->tilesx],tiles->params); return tile ; } } /* OK, we must construct the wanted tile as a jigsaw */ { unsigned width = want.r-want.l ; rgba *pixvert = tile->pixels ; rgba *pixhoriz ; int y, ty, l0, l1 ; int x, tx, c0, c1 ; unsigned lstart, lnum ; unsigned cstart, cnum ; if( !isSubrect(want,dim->c) ) { if( want.l < dim->c.l ) pixvert += (dim->c.l - want.l), want.l = dim->c.l ; if( want.r > dim->c.r ) want.r = dim->c.r ; if( want.t < dim->c.t ) pixvert += (dim->c.t - want.t) * width, want.t = dim->c.t ; if( want.b > dim->c.b ) want.b = dim->c.b ; fillTile(tile,0); } else { tile->summary = -1 ; /* I.e. whatever the jigsaw pieces say */ } #ifdef xDEBUG fprintf(stderr,"jig0 (%d-%d),(%d-%d)\n",left,right,top,bottom); #endif for( y=want.t, ty=TILE_NUM(want.t-dim->c.t), l0=TILEYn(*dim,ty); y want.b ? want.b : l1) - y ; pixhoriz = pixvert ; for( x=want.l, tx=TILE_NUM(want.l-dim->c.l), c0=TILEXn(*dim,tx); x want.r ? want.r : c1) - x ; { static struct Tile tmptile ; unsigned dwidth = c1-c0 ; unsigned i, j ; tmptile.count = (c1-c0)*(l1-l0) ; #ifdef xDEBUG fprintf(stderr,"jig ty=%u(%u-%u-%u)(%u+%u) tx=%u(%u-%u-%u)(%u+%u)\n", ty,l0,y,l1,lstart,lnum, tx,c0,x,c1,cstart,cnum); #endif copyTilePixels(&tmptile, tiles->tileptrs[tx+ty*dim->tilesx],tiles->params); for(i=0; isummary &= tmptile.summary ; } } } } return tile ; } void applyMask(struct Tile *tile, struct Tile *mask) { unsigned i ; assertTileCompatibility(tile,mask); assert( tile->count == mask->count ); INIT_SCALETABLE_IF(1); invalidateSummary(tile,0); for( i=0; i < tile->count ;i++ ) tile->pixels[i] = NEWALPHA(tile->pixels[i], scaletable[mask->pixels[i]>>ALPHA_SHIFT] [ALPHA(tile->pixels[i])]); freeTile(mask); } struct Tile * getLayerTile(struct xcfLayer *layer,const struct rect *where) { struct Tile *data ; #ifdef xDEBUG fprintf(stderr,"getLayerTile(%s): (%d-%d),(%d-%d)\n", layer->name,where->l,where->r,where->t,where->b); #endif if( disjointRects(*where,layer->dim.c) || layer->opacity == 0 ) { data = newTile(*where); fillTile(data,0); return data ; } data = getMaskOrLayerTile(&layer->dim,&layer->pixels,*where); if( (data->summary & TILESUMMARY_ALLNULL) != 0 ) return data ; if( layer->hasMask ) { struct Tile *mask = getMaskOrLayerTile(&layer->dim,&layer->mask,*where); applyMask(data,mask); } if( layer->opacity < 255 ) { const uint8_t *ourtable ; int i ; invalidateSummary(data,~(TILESUMMARY_CRISP | TILESUMMARY_ALLFULL)); INIT_SCALETABLE_IF(1); ourtable = scaletable[layer->opacity] ; for( i=0; i < data->count; i++ ) data->pixels[i] = NEWALPHA(data->pixels[i],ourtable[ALPHA(data->pixels[i])]) ; } return data ; } xcftools-1.0.7/pixels.h0000644000175000017500000001035611223357031014701 0ustar makholmmakholm/* Pixel and tile functions for xcftools * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #ifndef PIXELS_H #define PIXELS_H #include "xcftools.h" /* MACROS FOR INTERNAL PIXEL ORDERING HERE */ /*=========================================*/ /* In principle the internal representation of pixels may change. * - this was supposed to allow an optimization where a layer could * be represented as a pointer into the mmapped xcf file, if * alignment, bpp, and endianness agreed (the point was that the * pixel representation had to agree with the endianness). * * However, it turns out that the current Gimp _always_ saves images * with RLE encoding of tiles, so such an effort would be in vain. * * Just for modularity, nevertheless try to isolate knowledge of * the RGBA-to-machine-word packing in this section of the * header file. Define new macros if necessary. * * Given that we don't have to agree with the uncompressed * RLE format, we choose to have the alpha in the _least_ * significant byte on all archs - it is tested and used more * often than the visible channels. */ typedef uint32_t rgba ; #define ALPHA_SHIFT 0 #define RED_SHIFT 8 #define GREEN_SHIFT 16 #define BLUE_SHIFT 24 #define ALPHA(rgba) ((uint8_t)(rgba)) #define FULLALPHA(rgba) ((uint8_t)(rgba) == 255) #define NULLALPHA(rgba) ((uint8_t)(rgba) == 0) #define NEWALPHA(rgb,a) (((rgba)(rgb) & 0xFFFFFF00) + (a)) #ifdef PRECOMPUTED_SCALETABLE extern const uint8_t scaletable[256][256] ; #define INIT_SCALETABLE_IF(foo) ((void)0) #else extern uint8_t scaletable[256][256] ; extern int ok_scaletable ; void mk_scaletable(void); #define INIT_SCALETABLE_IF(foo) \ (ok_scaletable || !(foo) || (mk_scaletable(),0) ) #endif extern const rgba graytable[256] ; extern rgba colormap[256] ; extern unsigned colormapLength ; void initLayer(struct xcfLayer *); void initColormap(); int degrayPixel(rgba); /* returns -1 for non-gray pixels */ /* ******************************************************* */ #define TILEXn(dim,tx) \ ((tx)==(dim).tilesx ? (dim).c.r : (dim).c.l + ((tx)*TILE_WIDTH)) #define TILEYn(dim,ty) \ ((ty)==(dim).tilesy ? (dim).c.b : (dim).c.t + ((ty)*TILE_HEIGHT)) #if __i386__ /* This is probably the only common architecture where small constants * are more efficient for byte operations. */ typedef int8_t summary_t ; typedef short int refcount_t ; #else typedef int summary_t ; typedef int refcount_t ; #endif #define TILESUMMARY_UPTODATE 8 #define TILESUMMARY_ALLNULL 4 #define TILESUMMARY_ALLFULL 2 #define TILESUMMARY_CRISP 1 /* everyting either null or full */ struct Tile { refcount_t refcount ; summary_t summary ; /* a combination of TIMESUMMARY_FOO constatns */ unsigned count ; rgba pixels[TILE_WIDTH * TILE_HEIGHT]; }; /* Actually, the Tile structures that get allocated many not have * room for that many pixels. We subtract the space for those we don't * use - which is Not Legal C, but ought to be portable. * OTOH, one can also use a static struct Tile for temporary storage. */ #define assertTileCompatibility(t1,t2) assert((t1)->count==(t2)->count) struct Tile *newTile(struct rect); struct Tile *forkTile(struct Tile*); void freeTile(struct Tile*); #define invalidateSummary(tile,mask) \ do{ assert((tile)->refcount==1); (tile)->summary &= mask; } while(0) summary_t __ATTRIBUTE__((pure)) tileSummary(struct Tile *); void fillTile(struct Tile*,rgba); /* applyMask() destructively changes tile, * applyMask() gets ownership of mask */ void applyMask(struct Tile *tile, struct Tile *mask); struct Tile *getLayerTile(struct xcfLayer *,const struct rect *); #endif /* FLATTEN_H */ xcftools-1.0.7/po/.cvsignore0000644000175000017500000000003010375206155015635 0ustar makholmmakholmxcftools.pot stamp *.mo xcftools-1.0.7/po/da.po0000644000175000017500000003171011223376236014573 0ustar makholmmakholm# Another descriptive title # This file is put in the public domain. # Fee fie foe fum. # msgid "" msgstr "" "Project-Id-Version: xcftools 0.9\n" "Report-Msgid-Bugs-To: henning@makholm.net\n" "POT-Creation-Date: 2009-07-03 13:55+0200\n" "PO-Revision-Date: 2009-07-03 14:42+0200\n" "Last-Translator: Henning Makholm \n" "Language-Team: Til test af l10n-faciliteter; ikke vedligeholdt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: xcfinfo.oi:24 xcfinfo.oi:35 xcf2pnm.oi:48 xcf2pnm.oi:64 xcf2png.oi:45 #: xcf2png.oi:61 xcfview.oi:45 xcfview.oi:61 msgid "command" msgstr "kommando" #: xcfinfo.oi:26 xcf2pnm.oi:55 xcf2png.oi:52 xcfview.oi:52 msgid "show this message" msgstr "vis denne tekst" #: xcfinfo.oi:28 xcf2pnm.oi:57 xcf2png.oi:54 xcfview.oi:54 msgid "show version" msgstr "vis versionsnummer" #: xcfinfo.oi:30 xcf2pnm.oi:59 xcf2png.oi:56 xcfview.oi:56 msgid "show progress messages" msgstr "giv fremgangsbeskeder" #: xcfinfo.oi:32 xcf2pnm.oi:61 xcf2png.oi:58 xcfview.oi:58 msgid "input is bzip2 compressed" msgstr "inddata er pakket med bzip2" #: xcfinfo.oi:34 xcf2pnm.oi:63 xcf2png.oi:60 xcfview.oi:60 msgid "input is gzip compressed" msgstr "inddata er pakket med gzip" #: xcfinfo.oi:36 xcf2pnm.oi:65 xcf2png.oi:62 xcfview.oi:62 msgid "use 'command' to decompress input" msgstr "brug »kommando« til at pakke inddata ud" #: xcfinfo.oi:38 xcf2pnm.oi:108 xcf2png.oi:99 xcfview.oi:98 msgid "use UTF-8 for layer names" msgstr "brug UTF-8 til lagnavne" #: xcf2pnm.oi:47 xcf2pnm.oi:70 xcf2png.oi:44 xcf2png.oi:65 xcfview.oi:44 #: xcfview.oi:65 xcf2png.c:147 msgid "color" msgstr "farve" #: xcf2pnm.oi:49 xcf2pnm.oi:66 xcf2pnm.oi:68 xcf2png.oi:46 xcf2png.oi:63 #: xcfview.oi:46 xcfview.oi:63 msgid "filename" msgstr "filnavn" #: xcf2pnm.oi:50 xcf2pnm.oi:97 xcf2png.oi:47 xcf2png.oi:88 xcfview.oi:47 #: xcfview.oi:87 msgid "mode" msgstr "tilstand" #: xcf2pnm.oi:51 xcf2pnm.oi:99 xcf2pnm.oi:101 xcf2png.oi:48 xcf2png.oi:90 #: xcf2png.oi:92 xcfview.oi:48 xcfview.oi:89 xcfview.oi:91 msgid "n" msgstr "n" #: xcf2pnm.oi:52 xcf2pnm.oi:90 xcf2png.oi:49 xcf2png.oi:81 xcfview.oi:49 #: xcfview.oi:81 msgid "wxh" msgstr "bxh" #: xcf2pnm.oi:53 xcf2pnm.oi:92 xcf2png.oi:50 xcf2png.oi:83 xcfview.oi:50 #: xcfview.oi:83 msgid "x,y" msgstr "x,y" #: xcf2pnm.oi:67 xcf2png.oi:64 xcfview.oi:64 msgid "name output file" msgstr "angiv navn på uddatafil" #: xcf2pnm.oi:69 msgid "write transparency map" msgstr "skriv gennemsigtighedsmaske" #: xcf2pnm.oi:71 xcf2png.oi:66 xcfview.oi:66 msgid "select background color" msgstr "vælg baggrundsfarve" #: xcf2pnm.oi:73 xcf2png.oi:68 xcfview.oi:68 msgid "force alpha channel in output" msgstr "insistér på alfakanal i uddata" #: xcf2pnm.oi:75 xcf2png.oi:70 xcfview.oi:70 msgid "select color output" msgstr "vælg uddata i farver" #: xcf2pnm.oi:77 xcf2png.oi:72 xcfview.oi:72 msgid "select grayscale output" msgstr "vælg uddata i gråtoner" #: xcf2pnm.oi:79 msgid "select monochrome output" msgstr "vælg uddata i sort/hvid" #: xcf2pnm.oi:81 msgid "select -c/-g/-m by image contents" msgstr "vælg -c, -g eller -m alt efter billedet indhold" #: xcf2pnm.oi:83 xcf2png.oi:74 xcfview.oi:74 msgid "treat indexed images as RGB for flattening" msgstr "fladgør indekserede billeder som om de var RGB" #: xcf2pnm.oi:85 xcf2png.oi:76 xcfview.oi:76 msgid "disallow partial transparency" msgstr "forbyd delvis gennemsigtighed" #: xcf2pnm.oi:87 xcf2png.oi:78 xcfview.oi:78 msgid "dissolve partial transparency" msgstr "opløs delvis gennemsigtighed" #: xcf2pnm.oi:89 xcf2png.oi:80 xcfview.oi:80 msgid "flatten to memory; then analyse" msgstr "fladgør til arbejdslager; analysér bagefter" #: xcf2pnm.oi:91 xcf2png.oi:82 xcfview.oi:82 msgid "crop image while converting" msgstr "tilskær billedet under konverteringen" #: xcf2pnm.oi:93 xcf2png.oi:84 xcfview.oi:84 msgid "translate converted part of image" msgstr "forskyd den konverterede del af billedet" #: xcf2pnm.oi:95 xcf2png.oi:86 xcfview.oi:86 msgid "autocrop to visible layer boundaries" msgstr "tilskær til netop at dække synlige lag" #: xcf2pnm.oi:96 xcf2png.oi:87 msgid "Layer-selection options" msgstr "Flag vedr. valg af lag" #: xcf2pnm.oi:98 xcf2png.oi:89 xcfview.oi:88 msgid "set layer mode" msgstr "ændr lagtilstand" #: xcf2pnm.oi:100 xcf2png.oi:91 xcfview.oi:90 msgid "set opacity in percent" msgstr "ændr dækningsgrad i procent" #: xcf2pnm.oi:102 xcf2png.oi:93 xcfview.oi:92 msgid "set opacity in 1/255 units" msgstr "ændr dækningsgrad i 255-dele" #: xcf2pnm.oi:104 xcf2png.oi:95 xcfview.oi:94 msgid "enable layer mask" msgstr "aktivér lagmaske" #: xcf2pnm.oi:106 xcf2png.oi:97 xcfview.oi:96 msgid "disable layer mask" msgstr "deaktivér lagmaske" #: options.i:167 #, c-format msgid "Could not find X11 color database\n" msgstr "Kunne ikke åbne farvenavnsdatabasen\n" #: options.i:171 #, c-format msgid "Unknown background color '%s'" msgstr "Ukendt baggrundsfarve »%s«" #: options.i:295 #, c-format msgid "-S option must have an argument of the form wxh" msgstr "-S-flaget skal have et argument på formen bxh" #: options.i:314 #, c-format msgid "-O option must have an argument of the form x,y" msgstr "-O-flaget skal have et argument på formen x,y" #: options.i:353 #, c-format msgid "Layer mode '%s' is unknown" msgstr "Lagtilstanden »%s« er ukendt" #: options.i:369 #, c-format msgid "The argument to --percent is not a percentage" msgstr "Argumentet til --percent er ikke et procenttal" #: options.i:382 #, c-format msgid "The argument to --opacity is not a number between 0 and 255" msgstr "Argumentet til --opacity er ikke et tal mellem 0 og 255" #: enums.c:10 msgid "Normal" msgstr "Normal" #: enums.c:11 msgid "Dissolve" msgstr "Opløs" #: enums.c:12 msgid "Behind" msgstr "Bagved" #: enums.c:13 msgid "Multiply" msgstr "Gang" #: enums.c:14 msgid "Screen" msgstr "Skærm" #: enums.c:15 msgid "Overlay" msgstr "LægOver" #: enums.c:16 msgid "Difference" msgstr "Forskel" #: enums.c:17 msgid "Addition" msgstr "LægTil" #: enums.c:18 msgid "Subtract" msgstr "TrækFra" #: enums.c:19 msgid "DarkenOnly" msgstr "GørKunMørkere" #: enums.c:20 msgid "LightenOnly" msgstr "GørKunLysere" #: enums.c:21 msgid "Hue" msgstr "Farvetone" #: enums.c:22 msgid "Saturation" msgstr "Mætning" #: enums.c:23 msgid "Color" msgstr "Farve" #: enums.c:24 msgid "Value" msgstr "Værdi" #: enums.c:25 msgid "Divide" msgstr "Dividér" #: enums.c:26 msgid "Dodge" msgstr "Blegning" #: enums.c:27 msgid "Burn" msgstr "Sværtning" #: enums.c:28 msgid "Hardlight" msgstr "HårdgørLys" #: enums.c:29 msgid "Softlight" msgstr "BlødgørLys" #: enums.c:30 msgid "GrainExtract" msgstr "UdtrækKorn" #: enums.c:31 msgid "GrainMerge" msgstr "ForénKorn" #: enums.c:32 msgid "ColorErase" msgstr "Farveslet" #: enums.c:33 msgid "Erase" msgstr "" #: enums.c:34 msgid "Replace" msgstr "" #: enums.c:35 msgid "AntiErase" msgstr "" #: enums.c:36 msgid "NormalNopartial" msgstr "Normal-uden-halvgennemsigtighed" #: enums.c:46 msgid "RGB color" msgstr "RGB" #: enums.c:47 enums.c:60 msgid "Grayscale" msgstr "Gråtoner" #: enums.c:48 msgid "Indexed color" msgstr "Indekseret" #: enums.c:58 msgid "RGB" msgstr "" #: enums.c:59 msgid "RGB-alpha" msgstr "RGB-alfa" #: enums.c:61 msgid "Grayscale-alpha" msgstr "Gråtoner-alfa" #: enums.c:62 msgid "Indexed" msgstr "Indekseret" #: enums.c:63 msgid "Indexed-alpha" msgstr "Indekseret-alfa" #: enums.c:109 msgid "None" msgstr "Ingen" #: enums.c:110 msgid "RLE" msgstr "" #: enums.c:111 msgid "Zlib" msgstr "" #: enums.c:112 msgid "Fractal" msgstr "" #: flatspec.c:45 utils.c:105 #, c-format msgid "Out of memory" msgstr "Ikke mere lagerplads" #: flatspec.c:57 #, c-format msgid "The %s option must follow a layer name on the command line" msgstr "%s-flaget skal komme efter navnet på et lag" #: flatspec.c:144 #, c-format msgid "The image has no layer called '%s'" msgstr "Billedet har ikke noget lag der hedder »%s«" #: flatspec.c:157 #, c-format msgid "Layer '%s' has no layer mask to enable" msgstr "Laget »%s« har ikke nogen lagmaske at tænde for" #: flatspec.c:272 xcfinfo.c:97 #, c-format msgid "/mask" msgstr "/maske" #: flatspec.c:358 xcf2png.c:233 xcf2pnm.c:158 #, c-format msgid "Grayscale output selected, but colored pixel(s) found" msgstr "Der er valgt gråtoneformat, men billedet indeholder farvede pixels" #: flatspec.c:362 xcf2pnm.c:172 #, c-format msgid "Monochrome output selected, but not all pixels are black or white" msgstr "" "Der er valgt sort/hvid-format, men billedet indeholder farver eller gråtoner" #: flatten.c:388 #, c-format msgid "'%s' layer mode" msgstr "Lagtilstanden »%s«" #: flatten.c:568 #, c-format msgid "Flattened image has partially transparent pixels" msgstr "Der er halvgennemsigtige pixels i det fladgjorde billede" #: flatten.c:674 #, c-format msgid "Flattening image ..." msgstr "Fladgør billede ..." #: io-unix.c:78 #, c-format msgid "!Cannot create temporary unzipped file" msgstr "!Kan ikke oprette udpakket fil" #: io-unix.c:97 #, c-format msgid "Cannot execute " msgstr "Kan ikke udføre " #: io-unix.c:114 #, c-format msgid "%s terminated abnormally" msgstr "%s blev dræbt" #: io-unix.c:126 #, c-format msgid "!Cannot open %s" msgstr "Kan ikke åbne %s" #: io-unix.c:146 io-unix.c:162 #, c-format msgid "Out of memory for xcf data" msgstr "Ikke nok lagerplads til xcf-data" #: io-unix.c:149 #, c-format msgid "XCF file shrunk while reading it" msgstr "XCF-filen skrumpede under læsning" #: io-unix.c:151 io-unix.c:169 #, c-format msgid "!Could not read xcf data" msgstr "!Kunne ikke læse xcf-data" #: pixels.c:134 #, c-format msgid "Layer type %s" msgstr "Lagtypen %s" #: pixels.c:152 #, c-format msgid "Color map has more than 256 entries" msgstr "Farvekortet har mere end 256 felter" #: pixels.c:187 #, c-format msgid "" "Unbelievably many layers?\n" "More likely to be a bug in %s" msgstr "" "Urealistisk mange lag?\n" "Sandsyligvis snarere en fejl i %s" #: pixels.c:340 #, c-format msgid "%s compression" msgstr "Kompressionsmetode »%s«" #: utils.c:64 msgid "Corrupted or malformed XCF file" msgstr "Beskadiget eller ugyldig XCF-fil" #: utils.c:73 msgid "Corrupted or truncated XCF file" msgstr "Beskadiget eller afkortet XCF-fil" #: utils.c:85 msgid "The image contains features not understood by this program:" msgstr "Billedet indeholder egenskaber som dette program ikke forstår:" #: utils.c:94 #, c-format msgid "Type \"%s -h\" to get an option summary.\n" msgstr "Kommandoen »%s -h« giver en oversigt over kommandolinjeflag.\n" #: utils.c:130 #, c-format msgid "!Cannot create file %s" msgstr "!Kan ikke oprette filen %s" #: utils.c:154 #, c-format msgid "!Error writing file %s" msgstr "!Fejl under skrivning til %s" #: xcf-general.c:172 #, c-format msgid "" "Warning: one or more layer names could not be\n" " translated to the local character set.\n" msgstr "" "Advarsel: et eller flere lagnavne kunne ikke transkriberes\n" " til det p.t. valgte tegnsæt.\n" #: xcf-general.c:208 #, c-format msgid "Not an XCF file at all (magic not recognized)" msgstr "Dette er slet ikke en XCF-fil (xcf-signaturen mangler)" #: xcf-general.c:212 #, c-format msgid "Warning: XCF version %d not supported (trying anyway...)\n" msgstr "" "Advarsel: Version %d af XCF-formatet er ikke understøttet\n" " (men vi prøver alligevel...)\n" #: xcf2png.c:41 xcf2pnm.c:39 #, c-format msgid "Usage: %s [options] filename.xcf[.gz] [layers]\n" msgstr "Brug: %s [flag] filnavn.xcf[gz] [lagnavne]\n" #: xcf2png.c:43 xcf2pnm.c:41 xcfinfo.c:38 #, c-format msgid "Options:\n" msgstr "Flag:\n" #: xcf2png.c:59 #, c-format msgid "Libpng error '%s'" msgstr "Fejl fra libpng: »%s«" #: xcf2png.c:78 #, c-format msgid "Couldn't initialize libpng library" msgstr "Kunne ikke starte libpng-hjælperutinerne" #: xcf2png.c:147 msgid "grayscale" msgstr "gråtoner" #: xcf2png.c:148 msgid "+palette" msgstr "+palet" #: xcf2png.c:149 msgid "+alpha" msgstr "+alfa" #: xcf2png.c:151 msgid "+transparency" msgstr "+gennemsigtighed" #: xcf2png.c:154 #, c-format msgid " (%d colors)" msgstr " (%d farver)" #: xcf2pnm.c:65 #, c-format msgid "Writing converted image as %s\n" msgstr "Skriver konverteret billede til %s\n" #: xcf2pnm.c:66 #, c-format msgid "Writing transparency map as %s\n" msgstr "Skriver gennemsigtighedsmaske til %s\n" #: xcf2pnm.c:75 #, c-format msgid " # Converted by xcf2pnm %s" msgstr " # Konverteret af xcf2pnm %s" #: xcf2pnm.c:77 #, c-format msgid " # Transparency map by xcf2pnm %s" msgstr " # Gennemsigtighedsmaske fra xcf2pnm %s" #: xcf2pnm.c:131 #, c-format msgid "Transparency found, but -a option not given" msgstr "Delvis gennemsigtige pixels kræver -a-flag" #: xcf2pnm.c:193 #, c-format msgid "The -a option was given, but the image has no transparency" msgstr "-a-flaget er givet, men billedet er fuldstændig ugennemsigtigt" #: xcfinfo.c:37 #, c-format msgid "Usage: %s [options] filename.xcf[.gz]\n" msgstr "Brug: %s [flag] filnavn.xcf[.gz]\n" #: xcfinfo.c:66 #, c-format msgid "Only one XCF file per command line, please" msgstr "Kun én XCF-fil per kommandolinje, tak!" #: xcfinfo.c:82 #, c-format msgid "Version %d, %dx%d %s, %d layers, compressed %s\n" msgstr "Version %d, %dx%d %s, %d lag, %s komprimering\n" xcftools-1.0.7/po/xcftools.pot0000644000175000017500000002365211223376140016234 0ustar makholmmakholm# SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: henning@makholm.net\n" "POT-Creation-Date: 2009-07-03 13:55+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: xcfinfo.oi:24 xcfinfo.oi:35 xcf2pnm.oi:48 xcf2pnm.oi:64 xcf2png.oi:45 #: xcf2png.oi:61 xcfview.oi:45 xcfview.oi:61 msgid "command" msgstr "" #: xcfinfo.oi:26 xcf2pnm.oi:55 xcf2png.oi:52 xcfview.oi:52 msgid "show this message" msgstr "" #: xcfinfo.oi:28 xcf2pnm.oi:57 xcf2png.oi:54 xcfview.oi:54 msgid "show version" msgstr "" #: xcfinfo.oi:30 xcf2pnm.oi:59 xcf2png.oi:56 xcfview.oi:56 msgid "show progress messages" msgstr "" #: xcfinfo.oi:32 xcf2pnm.oi:61 xcf2png.oi:58 xcfview.oi:58 msgid "input is bzip2 compressed" msgstr "" #: xcfinfo.oi:34 xcf2pnm.oi:63 xcf2png.oi:60 xcfview.oi:60 msgid "input is gzip compressed" msgstr "" #: xcfinfo.oi:36 xcf2pnm.oi:65 xcf2png.oi:62 xcfview.oi:62 msgid "use 'command' to decompress input" msgstr "" #: xcfinfo.oi:38 xcf2pnm.oi:108 xcf2png.oi:99 xcfview.oi:98 msgid "use UTF-8 for layer names" msgstr "" #: xcf2pnm.oi:47 xcf2pnm.oi:70 xcf2png.oi:44 xcf2png.oi:65 xcfview.oi:44 #: xcfview.oi:65 xcf2png.c:147 msgid "color" msgstr "" #: xcf2pnm.oi:49 xcf2pnm.oi:66 xcf2pnm.oi:68 xcf2png.oi:46 xcf2png.oi:63 #: xcfview.oi:46 xcfview.oi:63 msgid "filename" msgstr "" #: xcf2pnm.oi:50 xcf2pnm.oi:97 xcf2png.oi:47 xcf2png.oi:88 xcfview.oi:47 #: xcfview.oi:87 msgid "mode" msgstr "" #: xcf2pnm.oi:51 xcf2pnm.oi:99 xcf2pnm.oi:101 xcf2png.oi:48 xcf2png.oi:90 #: xcf2png.oi:92 xcfview.oi:48 xcfview.oi:89 xcfview.oi:91 msgid "n" msgstr "" #: xcf2pnm.oi:52 xcf2pnm.oi:90 xcf2png.oi:49 xcf2png.oi:81 xcfview.oi:49 #: xcfview.oi:81 msgid "wxh" msgstr "" #: xcf2pnm.oi:53 xcf2pnm.oi:92 xcf2png.oi:50 xcf2png.oi:83 xcfview.oi:50 #: xcfview.oi:83 msgid "x,y" msgstr "" #: xcf2pnm.oi:67 xcf2png.oi:64 xcfview.oi:64 msgid "name output file" msgstr "" #: xcf2pnm.oi:69 msgid "write transparency map" msgstr "" #: xcf2pnm.oi:71 xcf2png.oi:66 xcfview.oi:66 msgid "select background color" msgstr "" #: xcf2pnm.oi:73 xcf2png.oi:68 xcfview.oi:68 msgid "force alpha channel in output" msgstr "" #: xcf2pnm.oi:75 xcf2png.oi:70 xcfview.oi:70 msgid "select color output" msgstr "" #: xcf2pnm.oi:77 xcf2png.oi:72 xcfview.oi:72 msgid "select grayscale output" msgstr "" #: xcf2pnm.oi:79 msgid "select monochrome output" msgstr "" #: xcf2pnm.oi:81 msgid "select -c/-g/-m by image contents" msgstr "" #: xcf2pnm.oi:83 xcf2png.oi:74 xcfview.oi:74 msgid "treat indexed images as RGB for flattening" msgstr "" #: xcf2pnm.oi:85 xcf2png.oi:76 xcfview.oi:76 msgid "disallow partial transparency" msgstr "" #: xcf2pnm.oi:87 xcf2png.oi:78 xcfview.oi:78 msgid "dissolve partial transparency" msgstr "" #: xcf2pnm.oi:89 xcf2png.oi:80 xcfview.oi:80 msgid "flatten to memory; then analyse" msgstr "" #: xcf2pnm.oi:91 xcf2png.oi:82 xcfview.oi:82 msgid "crop image while converting" msgstr "" #: xcf2pnm.oi:93 xcf2png.oi:84 xcfview.oi:84 msgid "translate converted part of image" msgstr "" #: xcf2pnm.oi:95 xcf2png.oi:86 xcfview.oi:86 msgid "autocrop to visible layer boundaries" msgstr "" #: xcf2pnm.oi:96 xcf2png.oi:87 msgid "Layer-selection options" msgstr "" #: xcf2pnm.oi:98 xcf2png.oi:89 xcfview.oi:88 msgid "set layer mode" msgstr "" #: xcf2pnm.oi:100 xcf2png.oi:91 xcfview.oi:90 msgid "set opacity in percent" msgstr "" #: xcf2pnm.oi:102 xcf2png.oi:93 xcfview.oi:92 msgid "set opacity in 1/255 units" msgstr "" #: xcf2pnm.oi:104 xcf2png.oi:95 xcfview.oi:94 msgid "enable layer mask" msgstr "" #: xcf2pnm.oi:106 xcf2png.oi:97 xcfview.oi:96 msgid "disable layer mask" msgstr "" #: options.i:167 #, c-format msgid "Could not find X11 color database\n" msgstr "" #: options.i:171 #, c-format msgid "Unknown background color '%s'" msgstr "" #: options.i:295 #, c-format msgid "-S option must have an argument of the form wxh" msgstr "" #: options.i:314 #, c-format msgid "-O option must have an argument of the form x,y" msgstr "" #: options.i:353 #, c-format msgid "Layer mode '%s' is unknown" msgstr "" #: options.i:369 #, c-format msgid "The argument to --percent is not a percentage" msgstr "" #: options.i:382 #, c-format msgid "The argument to --opacity is not a number between 0 and 255" msgstr "" #: enums.c:10 msgid "Normal" msgstr "" #: enums.c:11 msgid "Dissolve" msgstr "" #: enums.c:12 msgid "Behind" msgstr "" #: enums.c:13 msgid "Multiply" msgstr "" #: enums.c:14 msgid "Screen" msgstr "" #: enums.c:15 msgid "Overlay" msgstr "" #: enums.c:16 msgid "Difference" msgstr "" #: enums.c:17 msgid "Addition" msgstr "" #: enums.c:18 msgid "Subtract" msgstr "" #: enums.c:19 msgid "DarkenOnly" msgstr "" #: enums.c:20 msgid "LightenOnly" msgstr "" #: enums.c:21 msgid "Hue" msgstr "" #: enums.c:22 msgid "Saturation" msgstr "" #: enums.c:23 msgid "Color" msgstr "" #: enums.c:24 msgid "Value" msgstr "" #: enums.c:25 msgid "Divide" msgstr "" #: enums.c:26 msgid "Dodge" msgstr "" #: enums.c:27 msgid "Burn" msgstr "" #: enums.c:28 msgid "Hardlight" msgstr "" #: enums.c:29 msgid "Softlight" msgstr "" #: enums.c:30 msgid "GrainExtract" msgstr "" #: enums.c:31 msgid "GrainMerge" msgstr "" #: enums.c:32 msgid "ColorErase" msgstr "" #: enums.c:33 msgid "Erase" msgstr "" #: enums.c:34 msgid "Replace" msgstr "" #: enums.c:35 msgid "AntiErase" msgstr "" #: enums.c:36 msgid "NormalNopartial" msgstr "" #: enums.c:46 msgid "RGB color" msgstr "" #: enums.c:47 enums.c:60 msgid "Grayscale" msgstr "" #: enums.c:48 msgid "Indexed color" msgstr "" #: enums.c:58 msgid "RGB" msgstr "" #: enums.c:59 msgid "RGB-alpha" msgstr "" #: enums.c:61 msgid "Grayscale-alpha" msgstr "" #: enums.c:62 msgid "Indexed" msgstr "" #: enums.c:63 msgid "Indexed-alpha" msgstr "" #: enums.c:109 msgid "None" msgstr "" #: enums.c:110 msgid "RLE" msgstr "" #: enums.c:111 msgid "Zlib" msgstr "" #: enums.c:112 msgid "Fractal" msgstr "" #: flatspec.c:45 utils.c:105 #, c-format msgid "Out of memory" msgstr "" #: flatspec.c:57 #, c-format msgid "The %s option must follow a layer name on the command line" msgstr "" #: flatspec.c:144 #, c-format msgid "The image has no layer called '%s'" msgstr "" #: flatspec.c:157 #, c-format msgid "Layer '%s' has no layer mask to enable" msgstr "" #: flatspec.c:272 xcfinfo.c:97 #, c-format msgid "/mask" msgstr "" #: flatspec.c:358 xcf2png.c:233 xcf2pnm.c:158 #, c-format msgid "Grayscale output selected, but colored pixel(s) found" msgstr "" #: flatspec.c:362 xcf2pnm.c:172 #, c-format msgid "Monochrome output selected, but not all pixels are black or white" msgstr "" #: flatten.c:388 #, c-format msgid "'%s' layer mode" msgstr "" #: flatten.c:568 #, c-format msgid "Flattened image has partially transparent pixels" msgstr "" #: flatten.c:674 #, c-format msgid "Flattening image ..." msgstr "" #: io-unix.c:78 #, c-format msgid "!Cannot create temporary unzipped file" msgstr "" #: io-unix.c:97 #, c-format msgid "Cannot execute " msgstr "" #: io-unix.c:114 #, c-format msgid "%s terminated abnormally" msgstr "" #: io-unix.c:126 #, c-format msgid "!Cannot open %s" msgstr "" #: io-unix.c:146 io-unix.c:162 #, c-format msgid "Out of memory for xcf data" msgstr "" #: io-unix.c:149 #, c-format msgid "XCF file shrunk while reading it" msgstr "" #: io-unix.c:151 io-unix.c:169 #, c-format msgid "!Could not read xcf data" msgstr "" #: pixels.c:134 #, c-format msgid "Layer type %s" msgstr "" #: pixels.c:152 #, c-format msgid "Color map has more than 256 entries" msgstr "" #: pixels.c:187 #, c-format msgid "" "Unbelievably many layers?\n" "More likely to be a bug in %s" msgstr "" #: pixels.c:340 #, c-format msgid "%s compression" msgstr "" #: utils.c:64 msgid "Corrupted or malformed XCF file" msgstr "" #: utils.c:73 msgid "Corrupted or truncated XCF file" msgstr "" #: utils.c:85 msgid "The image contains features not understood by this program:" msgstr "" #: utils.c:94 #, c-format msgid "Type \"%s -h\" to get an option summary.\n" msgstr "" #: utils.c:130 #, c-format msgid "!Cannot create file %s" msgstr "" #: utils.c:154 #, c-format msgid "!Error writing file %s" msgstr "" #: xcf-general.c:172 #, c-format msgid "" "Warning: one or more layer names could not be\n" " translated to the local character set.\n" msgstr "" #: xcf-general.c:208 #, c-format msgid "Not an XCF file at all (magic not recognized)" msgstr "" #: xcf-general.c:212 #, c-format msgid "Warning: XCF version %d not supported (trying anyway...)\n" msgstr "" #: xcf2png.c:41 xcf2pnm.c:39 #, c-format msgid "Usage: %s [options] filename.xcf[.gz] [layers]\n" msgstr "" #: xcf2png.c:43 xcf2pnm.c:41 xcfinfo.c:38 #, c-format msgid "Options:\n" msgstr "" #: xcf2png.c:59 #, c-format msgid "Libpng error '%s'" msgstr "" #: xcf2png.c:78 #, c-format msgid "Couldn't initialize libpng library" msgstr "" #: xcf2png.c:147 msgid "grayscale" msgstr "" #: xcf2png.c:148 msgid "+palette" msgstr "" #: xcf2png.c:149 msgid "+alpha" msgstr "" #: xcf2png.c:151 msgid "+transparency" msgstr "" #: xcf2png.c:154 #, c-format msgid " (%d colors)" msgstr "" #: xcf2pnm.c:65 #, c-format msgid "Writing converted image as %s\n" msgstr "" #: xcf2pnm.c:66 #, c-format msgid "Writing transparency map as %s\n" msgstr "" #: xcf2pnm.c:75 #, c-format msgid " # Converted by xcf2pnm %s" msgstr "" #: xcf2pnm.c:77 #, c-format msgid " # Transparency map by xcf2pnm %s" msgstr "" #: xcf2pnm.c:131 #, c-format msgid "Transparency found, but -a option not given" msgstr "" #: xcf2pnm.c:193 #, c-format msgid "The -a option was given, but the image has no transparency" msgstr "" #: xcfinfo.c:37 #, c-format msgid "Usage: %s [options] filename.xcf[.gz]\n" msgstr "" #: xcfinfo.c:66 #, c-format msgid "Only one XCF file per command line, please" msgstr "" #: xcfinfo.c:82 #, c-format msgid "Version %d, %dx%d %s, %d layers, compressed %s\n" msgstr "" xcftools-1.0.7/scaletab.c0000644000175000017500000000250011223357031015136 0ustar makholmmakholm/* Run-time scaletable computation for Xcftools * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "pixels.h" #ifndef PRECOMPUTED_SCALETABLE uint8_t scaletable[256][256] ; int ok_scaletable = 0 ; void mk_scaletable(void) { unsigned p, q, r ; if( ok_scaletable ) return ; for( p = 0 ; p < 128 ; p++ ) for( q = 0 ; q <= p ; q++ ) { r = (p*q+127)/255 ; scaletable[p][q] = scaletable[q][p] = r ; scaletable[255-p][q] = scaletable[q][255-p] = q-r ; scaletable[p][255-q] = scaletable[255-q][p] = p-r ; scaletable[255-p][255-q] = scaletable[255-q][255-p] = (255-q)-(p-r) ; } ok_scaletable = 1 ; } #endif xcftools-1.0.7/test/Makefile0000644000175000017500000000027510367152253015651 0ustar makholmmakholmcheck: ./dotest -k $(MAKE) clean test: check clean: for a in * ; do case $$a in \ README | Makefile | dotest | pngtype.pl ) ;; \ * ) [ -d $$a ] || rm $$a ;; esac ; done xcftools-1.0.7/test/README0000644000175000017500000000257510367152253015076 0ustar makholmmakholmThis regression test requires perl, bash, and some programs from netpbm: pngtopnm, pnmdepth and pgmtoppm. The expected outputs are stored as PNG files, which compress better than just gzipped PxM, but the output from xcf2png is not compared byte-to-byte with the stored files, because different libpng and zlib versions may take different, but legitimate, decisions about IDAT chunk division and compression. Instead pixel comparisions are done with cmp(1) on PxM representations, which have less possibility for variations. The test of xcftopnm assumes that the layout of the ascii header in the output from xcftopnm matches byte-for-byte what netpbm produces. There is an undocumented -@ switch that does this, but if you have a wildly different version of netpbm you may need to fiddle with the implementation of -@ and/or insert filters in the test driver routines. The test asssumes that xcftools has been compiled with an iconv() library that can expand non-ASCII characters to approximating ASCII sequenced, possibly triggered by the '//TRANSLIT' convention of glibc. If this is not the case you have to do appropriate corrections when the 'AE=AE' layer is mentioned by the test script. There are yet no tests for correct reporting of errors. Note: display(1) from imagemagick 6.0.6.2 apparently does not display PNG files with grayscale+alpha correctly - the alpha channel is ignored.xcftools-1.0.7/test/answer/Addition.png0000644000175000017500000000300610373710474017746 0ustar makholmmakholm‰PNG  IHDR@@% æ‰ÍIDAThÞíšMsã6†ŸîÆ­q¢c~K9åGíe{Ø»×b‰ÈEÊ¢LŒG3“*£ºT0ESïƒî&Àá³}¶5¹yôHl5ާV{yáååØd)‹n)ÊõŸîý Ÿ&ÿZÿ£ùJÝH7‡Òébîl…×È©ã5ÛU_x¥Ø©vþSuÿûÏÜqrþ¿5$PÄ„(¢hB›0Á-̃<Œ0 ãü•2(¦¨¢†B±¹ùë_Ýø þÇÆtRdBDÑ •ò§.Ì£Úò+­äŠêmÛ }àÐ"0‹˜.º³Ê¬ØÕO·èÛ|΂Då¢^6õnôp†8èöéÏÒº”Å`/t;ð0€K•DŠC¬z _AXùawÐWŒ ’„N¨b†%l§8Å ^ÙæP¥Wœa³¹ÀÜÂ^€T8ƒB|?DËð_â¾í2`\§â\ªÇeåœW -È6ÀPûwòØËT<`ùSËð›âŸ x!À^¯ô†ÍNp¨Ãn…P‹¦ª{ÊÑ Ã ¬nS]­w›å­³ZLÄD\ Qù*’bŠÙ%‹–«…Ø 0T†ü9múAª4¡ ›p³)^ Jbµ®æÀ  Ê`ô†3œÃyœ/еº½ÀTò²D‘[ÄU¸}¾T³ñâ¤Ì}¶Èç†ÚûéX¬7Щø‘0­¨RÂáYx†_à×ùN‘WFï8;Nž_tá„_ïOz4j}¨çÄ1/{·l×"ò‰,úÿ œî2ÄŸ€7÷~666Îw—߀»› ? ;n3t7žb¾7»n3ÜH)•î7º·î,ûÁà«n0¸B|àš¡»QÓz,¸f8|G¾ÀŠ¡»¹ð¾)ÀŠáéñ<àÂнÝû¦< `Åð  P¶^^ÖE*VÅí·v}Ú‘G·—ŽGîuÚRÑj÷ûB|oe¿åãNËÛ¬{Œ¨åyöºóöx*•ªS;Mê—1ò€#ñÎçDtDj­ð@ë<Р¾ ÀçÏ«?kq9 q"ÚM3qƒúO D_-¢'NÄi¡>§Az ÀþµPƒú€@ ÄH U} Žë±Ïn €«Ñõ ‘‰gbî Ä‘8¡Eº­²oU¼à¦ú€ŽØû…ôªràÞàÝ'²õ gb¿0K÷xàšÔ7ô„ž0'B"$e"¡VÁ݈%,•ÊeÞuib I}À€¹¾œðòÞ¢>×ðG܈M¥*½Ü…‹u“ü]šÔ7¸?ឺÏh8Ã{œÇ¸›°iU½_îG‡9nìQß0âò6 ˜Ôm^‡9\À®ÇF܈NhÚ\}åÝÓn›&õ S‰ìyãÜæQ4b6 #–дñâÝâ'Ü ã¸د¾ ¡”WÔP‡zÄ£èéÑ<üoràÎ6øá‚QhRß@yãG qà$"g¤Gd€±¼Y »—ô OãòÖ"Keîó­ÅO€ÏöÙ~@û‰ÿ!ØahIEND®B`‚xcftools-1.0.7/test/answer/Burn.png0000644000175000017500000000411010373711310017104 0ustar makholmmakholm‰PNG  IHDR@@% æ‰IDAThÞíšÉnG†¿¬ªn’âÒmY’g6`kN>ÎEïà™£ŸKï ÐM6`A²(‰âRd/•kÌ!+«“½p‘Ù”4p¢Ð(nÍÿˈŒŒ?»+"²Š·UJÅ›‚Ï||öÕâ¸óo Àg¯<8p`Á úœ`/É­¥?¹RBþ•BŸf Á£+¿Ó@_íBS׃+]—x_Â&ô¡‚JP  H7d7 š`ðgqk1íh<}O/Pª@)‚‚œÀ©0 Œ<#ÇØ1±4­1 vgpï‰kò²À;؆õÄ1ŠtÍÁˆ!˜–!ª7íi=OÏ·ê• ¤•NÃÀØ3±LÌÀh¬Á[ÂÄÿ`` zgʤ¾PˆA ÞN# ýL}(*Ä4Ê4¥Ñè>º‡ÕÓÈcpÐK eºòP K0x‹·X‹um UžÊSø¤^AR†Â(0ôŒ=c›¥P…Mð8&©öÏ¡8‹a –EÀX´£ô”•©‚ †1Œã0·Êib ñá@“©ŸgPP –àÚ s㨕§på! Á¥šãÀØ3öLCS¡+LѸë‰@<”àæ²¨€qˆÃ;œÃZ*‡q”•©—@8ÁÊ &Q½eRÑt‰Qm ýé5“&~ @ð„ŽÁS:ŠØzxÄ^Zõ6E š@hºk¢"ÃãU¨lÖg¤¯Í©ï"0ð–0æ½@½Ø8\ÀÎÕsü™©W p²\Ír_%BˆçFk1­i&ÆcF#†CNO99áääjŸ‘]}ÄZ°Ä^^}]ÇO+^Äqµ©³õqYJ0«~FzÔ}|ÌÑQTß¹•–ÑXõTèeõ1ÆÁMÍ­H ÐÍ}TßÍúч‡Q}näV½‘ dAè&g‹cŠ@œþnî£ú(ýà ªŸ1r7ÐJì§N¡—¶ IAHqúcòDõÇÇ­ôýý¨~ÞÈÝL3'ð6 ÂFj9õ,€ÖL&mÒljÿž·o£ú…FîÆÚiשgŽƒà};ý£Q«þà€wïxýºS¿ÐÈݤ¡x•—AæZÀ{´žªßßgoW¯:õËŒÜ [Ê/’{ÜÝdÁZ&NO9<äí[þøƒ/áB#w)€íäLÃÙ«{vÈ¥ŠËŠ! ÷+žÃZ²¿ÉÜÃpÈá!oÞðò%ÏŸwêÏ7r—ØLÇ®’=ù$©†w?å@Åv~ã'Pžeç( @ÓptÄÞ¿ÿγgú Ü¥6Ò\vÒg`ÂL·åN`œžQȆ‡§°_Ã`8äÍ~û§OñþòFîRkÙ2”ì¿ü“'8w%#wYÉ¢t•FÇ@†QeÍà F3=Ò±ðþðë¯<~ŒµW5r³6daõûÏÙZ_Uv/s÷š‹.3ý|à˜Û·©ëÎÈ]ê¹ÝêNO VËOÁÕYaäß/³ª¬¥ÎS+^­IR?ø +Ä…WýÐE1P ƒ’AÉ JWAAŸAºÞ©ëíºÞªëͺ¾U×u½^×kuݯë^]Wu]ÖuQת®ùd>bºÖ£×Ï{¨Uÿƒ¿þþO¡ÿ HN£{Ôl IEND®B`‚xcftools-1.0.7/test/answer/Color.png0000644000175000017500000000417410373712171017274 0ustar makholmmakholm‰PNG  IHDR@@% æ‰CIDAThÞíš[rã:†$级ÞÔ<ÌzU3{êŽm‰$.ó@ËQ®uR'êšî:. b ,ÂÆŸˆØâ¶D4 ÆoþùíèÍÑÿ|û·3œÉÎaB&0!“ÐDš  =£gj­PÝawuuµÛ]4™ªš} çZ?ëî÷ïßÿI¡ß"…ÿúôêgåÇüøñð)‰xx‘Bé«ãÉ@ 0¸Ã=Ðs J çyû z,|ÈrLr”t’íø˜Ó)§£ä“”‰w3Y…µˆî¡Ureo‚œ6N!Zp8àh€#Ðprš Ÿ2Ÿ’œRž$OToê0%ëä]¢É9¼ ÙCð€}Ùs|è@aTÂd˜2ÏY&I§éœB^ÛG7t…*Y—h)8½µé9Àè=Ág€¥)…Ñ9s2™0Í…æÌs–9¥YòÌ6STD t'56ïÉ%ç·Ênúêš(g’`تPŽmg#5¡*ÕÌ5I•T9WòЍ³G 4§n¬*Ö“s*oý×/À²ןÀ@ˆÁ!0M¨ª™[––Ro¢‚ZpwQK¦Ù9;• Ýö£ Í”áOË 0 À`Ñ2÷,]RgoÐá}7éš”³Q ´ˆþ4% rK˺ !øœ]`C™zbÍÜ“hÊ*èDJÔ!Ò=©«i7¨£G(âÔ!ðó ÀÁð!„ ˜ ¶Ä*ÉTÈ„”ÅHf‘ÕÍLæPƒëÓž°m%N@Z*1ÃJg[ Æp†êø¹°q˜$2"#qˆ…»›Á îaææâa¶ñ.té…Òù¶˜¢”Ð jP‚2C´Ã Î 'r&g v‡;Ü#"ÜÍ=Ü9Â=Ô7¸D@€ '8AJh„Nh†:® +#@Aâ E`‘ˆðˆˆ À#A²õy KÚtBcTF5Ôa(ª Êeë}ûL…¿ô<æ=€iI‰XÚ›XîûBûbït@P@—‘µ\FÚߟ³Ö3á«Ë¥ã¦¯ºb Å×þ¡±Àq5;°eä"¶è[`^1ŒÚÛGû«Ë†·¶Å¯8¬&~=Ó¶rZm@ŽÀ0u´ ‹»íé›ü\ùýb¦m9’è*pÜKx‰F}߈ͮ뀰³†ƒ0‚è 5PUÜ3î÷ ÷ wÌØUÔŠö¾þŠÇ¾ï<,Û=~®yµûßwÀí"¼Ê”÷ Ûà~ñrÝ#Ó¹Ë|ªW²ª¼×ÀÍJóóÕ»]Ù[ܽ3ͯýÎ@ °.üªôWvÛ`íúªO{’  ;àjÑàe©_¼½Òu;€›·²eíw^¼ß­¼¿À”àc™ÀÅuY¹^VÞ)ß?§Ê«²®/.OÛ\¯Î†ëœ)«´³>2þzùyêåžJÈ‹Ú}<þ2€ü*ãË2÷×Ëγ^ß¼¬›¦×FÙà ȫָ¬v‹\æþfÙø×ò¢ñ‹·FÒv#§åyæäçKöØ·À p÷ªêaÕq¿Ù†Ñ×CF@VÿbÕ^’gÔÝû¾#ûÚÌóUh@É¡ÈõPƒÙxꦡoaÞˆî‰î‰îˆn‰nŽ8ï¬(; Fœ»Ñˆöóç§»¹‡‡¿0M{d’GwîÑ#º…zt‹n¡jnªnùn‘[æ3@DŽ(mñ~Ñ.òøè›G $"yhDòÈáÝCÝ»G7Wóî®êj¦*r;„ùN䖈܇ëͽ†Å8¶%@Š` ïˆäžÅ\û{wZͺk·”n†ˆÜ¦tCDîݽ §}üÍsûxÔ \0\ÂÓÀ»[ƒ·ÖÜZhs­¡Ír¾Îù:¥›a|qÔ½›éúrŒœN›ê§iÿ`hKaÖÂrh ­Ðæ½¢7/e_Ê>çëa 3®_ôÚ˜¦¶yœá&4ô/{h -h}‡Vc·»Úí®JÙMDÃË÷DÕæ¹n ð©·Uæ§·UzÛðm•O“9Ã&4´ ºðh‰ZâVP3Ï…®ê®^íö½ô¾S+D¤jˆ™Ö:o`D6žã3”yt¡.4æÄ5ó”y¿/­Õ¬ZÌ 3z÷áë0^\ªZkÓ†‹ø€)sgê¹ Uá*2'ž“œ’´–{ÏfÉ,»çp‘á÷«‘²a”x ׇnÄ¥17æ*"¡Œ½õÙÇzÅ¿\¹P5¡þ”,”%Ü%ªIÆ¥¦¯ZšáÄ÷ülu‡ay ”sùÉʳ/»§ûõbõ7VX þþŠÈ{N¾ýx½úy†-i²nnÜsùn÷}õ3 «F7W± |[Ôç öó^êÇ +b HN½wž÷ò°Ænê +,÷·ÃáÏwéýØ¿ÃÏ}Õ_¶Œ· ? q†3üØ]}ǰàŸm´²„°º¸g溿ýzìò¿~U{ÿÁ×ÃßÿwúæE[¹¤¯¹œIEND®B`‚xcftools-1.0.7/test/answer/Difference.png0000644000175000017500000000401110373711027020235 0ustar makholmmakholm‰PNG  IHDR@@% æ‰ÐIDAThÞíšÏn万¿b‘R·ÿ¬ È)˜Èæ²Çø2³øZiÇüúÃÈy¿ó÷Íß4Ä­v8p8 ›ÌløB?Þ÷òO1Lß:âÏüóoüù/ÜÞÓÝà;4 qˆââ™:DH Lf`  “¨í¾ÀW‘ˆ%¬PŒ$D%bOì‰{b&V"Äqð/~ý+÷bwO·ÇïF çq§/`&õ3ì~É€à+|%|EЄJ!ÍaO¬“z·`¾þÍç/ú[Â’¡yÃã@ƒy1ü/=P'ëÁ{=fň‚—Éy¡Þo~åÛùŽpCØá{´Gé+<Î!PÎÅÏ 03̉ç"<"ú€$$Qž…P&î'õŽØ½ø‘ò@Þã{|‡v¸%CÃ8û%F“¾œ6š•‰>¢ =Í×–cßãÛ€ßxŒø‡Ñ¾Ÿ),œ0É]¶M}]x`ðPBB’‚ÒD+±ŸÔ{b!îÞ Ð2;R:´'wè” ONXÄŒ½!@ÁÆU~üc_  †–Q}™\Vu9ž¸#bùà3Ç×Ô_SÝK€yìŸ>50da-‰«u’n§ö]ÀŽÝ"~Nä4eçÈi7Ý4öO7[XmC„èˆò¾ ù¡IŸ'ÓÀr‘E½(ƒ.ÿLA)BQL)JUŠRÓi)h6¯ ¿|?@óÃr ¨>‰ž¥/³öÙ§c@IH«(Žä(mjmXôïÐtZ˦iT§™^Y»Œ}f=è!“+ÒcŽäIBjãÝJ‰°hß `bpŠè@˜ÖÚg³þ²zêô°‡LÝ£pt˜»P Íí{47ErZç<›p–õ\˜Ú°‡J­Aâ)þ ÕBÍn‰ûw>ÝX Ô9 y?-vB†J†àxô˜Çvc-åÔ÷Ä[âíG´yIžo0ÚZ{¶­¯G‡:´»\6é÷Äû˜+ðEð´BÈ_Ø´ÔíÇ£G;$b»Ëû0¼Àg9ì[HÖú®VŸMK]'½p蟲vüÝÃΆа¡Ç쩎¢–}õ™¢5Rh5¤êsõÙ|.!™–rMz[kOçû§Ÿ>¼;@ÌÞª³¢V´†Dö5$K¡úl!ÕcWC*!UŸ[›/K¿\¥-SzÃ&Xu¡foÙ×¢–B ©¦P»c ©,ÚtNº^©ŸMK+ÖôñÑg3±¢µh-jEKöRɾ¦S(!•cWBJÝ1wÇôbgx{}wòrj½Æ°ÁEÍĪ«EK(Z³ÏÙ·¶»”BécŠ}êãqQ–Ý_Ù×^¸Ê°àX]­Îª«Õ•¢c[4g_²ÏÙç>¦ò±;îSì›ôᵑu¯3¬è[˜4éV]iÞȾ-EsóC džqå­ÍI ¡&ÝLFŒ¢-¨ÊÒ)¤Íê‡+G±gÖ{`hi0¹b„)Ú¼‘—AµYýpý,ù%Ã[f &oÔêjÑ:¥x-š7«V†?cØíÁ'˜I5aŽ(“ÙÕÄæ Ù¬~X{š¿dX¿ìÆ—çÄLlê4Lê)UW7«6<Ž˜6„ÐÓ €bSg˜n.‘l³úaÛó”Æð€é¡ïòyÓ‹‹CéácÃk‹7ùù} RT²';v®µ±·Ç{Üñ¸ãÛ ßnÜïwü~ç>ÿÄÅÇ*‡ž_Îß.Ù§Oçï‹~¼µø?vÉGÿÀ—¿ÿßCè¿kYê³×uIEND®B`‚xcftools-1.0.7/test/answer/Divide.png0000644000175000017500000000463710373711167017432 0ustar makholmmakholm‰PNG  IHDR@@% æ‰ fIDAThÞíšÉn׆¿;Wìb“¦eÉrØ àÈ›ØÛÎ*»lä%òA^À›¼‰÷²ñÂ@VYY¶ãÀ€‡H¤D²U=°‡š²¸u‹ÕÝ$ͶØL¸pP(èæÿÝÿçœ.Á–¯²,·ñµBÿ ù‰_?y}±ïü È:ÜРÁ€ ÏQý« ¦ ëóñç)ô¿9…à¯Óîœx£ IH’Ý$‰¯àãZ¿ƒ#˜ÀC9”ËÁùCv [Ò)é”´ ZQŽË±F¡%Z $Rà7AR $Z¡5Æ`-ÎE,©%3dš\S(JI"®ïp˜ÂRÈC!–a<ÀNI׫Ï@†UX‰Q(…Ȱ€=€”(…ÑØ@ê,¹¡T”~/٠胃, …,0”Ä«/ ¤WVê;‚vN”iœÆ)ŒF§hy –p–…#H™£0šRƒBˆtÁ²ÅVô‚únA;§Óʉ2œÆ*ŒÄH”D ¤Xr@ê)”EdŽÂRJ ¡òÇ-ÐÁïÀ:CA\Ð.èä´s:–vFK)œÆLŠVh‰”ÈÆXú)´²òˆÜQZJ¡‘%7Ú…Öü–€|•¡WÐ cßÎhYZ‘Á¥ÕÐÞ‰du+…ÖXCfÉEDá(-X„F*¤Bÿxü-«_[Ó½°í´rZ-ï€SHcü.B\°Œ&3XKî(#Ja©Ñ #^ fЗøU›¥D&„>_ÚïBkÛ¨ Cn)DàiP^½ÄÈW\C÷€ËqYˆgp†HáVaDµ I(WÏ£) eȬˆiQ­1 {3Þ‡ü¢5a3\Š]`MˆM8ˆeÑ£«%än  ö¡X `Ò*¬ÁhŒÆjÌ5Ö@©) X„CD•zm0~ qƒ€]>È z)&E§˜Ú -Æ+PÕ$¾b*¥ƒ°H‡ŒÐ¦Z™&UdŠTÞ,€÷!ÃÄ TŠ^  Ú¢4ZWsC™jþ\q aQ‘kŒ"×dþ.É_鸚¡¬)jŽrÈ9Ê¢ R£4R…±¿ä$F!4Ò -…CGŠ\’«ÆÃÍ;°ÌÐ[ ‡œ#-Ò 4Ò‡ªNSéÕ¯åBBQh¤A[ IJI!(äùóvü¾TÒ[ ‡°`ª3HDÈd„ªr2±œ–¡PšÒPZJ‰*”œ?oˆèÍÁ…*Ù‚iTÏ*TØ"ÜŹHP"Ûd¯Z‘‰ ¹IL\†Ã!ƒ0‡Y3¦9›EȲ´ ;+J¶]$™íÖ…t mh] ÐTß…ì^ðå3øhÛ_ÀÇ’´»Cº ºˆ¡` ‚t!¾@R ÃÛxŸÃ'’l/0ìÀNðÁ3˜Ðbj:`Ãä‰aoõk3ø>‡lãh\c8„¯ 'ù`U„•à—ÁL–jÚЃ>˜¥ïÌáðÂxÛ3À3ø"Å{Hϰã hˆ  »p°ô…<¯á `¶m€ŒáaœâádL˜Â† hC ¯AkIý¿à;8„SÃbÛ)La§p-0Šw‘9¤0 -° ]؃7–Ôÿ†#8…L!Ý6@ó rp o½‰È@íe=xý¼åVÂ÷ð ^À†09ä·°h ô kͽ_ ¼AC8 mŽº]°÷ÏÕ?…çpÒP? ÍÁíøëgû8L–jÂ˜‡Ö>¶wán¥þŽá4¨‡Î ïãÜ€7Á¯ØDõ¶i8x1…g6Ãú¦Œ®ZaBÜÀõÕÇß þâ6ã¤(âuç®Ëps+êW¤÷ †ÝCúŸ">…¿‡Ÿ~?ê÷ÿT–‘÷¡É0®2lßP};”¸=ˆŸÓÿ’½/_Â?á¤.䄸xoïei<@šVgg•à¶0¡À:WLÿ[ö¾cÿ[Äwð=œÀ´YÈ ñÉþþo‹B{† ÕªL¸dþ¨n/³{ÄÞ!ûG"C~5hì˜î„½1oŒykÌÃ1r’„+R³‹ 9)ÕÇ÷æs1qzJ·‹µ›L×:¡õ]5žDúîžñö„Gä¤!}%3n&7—rRªGîÌfb0àÙ3¢h3€YC}´ÊF[W4`Hºg¼qÆ/Ïxÿ ufüJjvÀÅ…œRòý÷†Cñô)Ýîfóe€uŒg$S~5åÃ)úlmàÓËsË(ä´–~¸ÿü¹xòd3€´¡Û‹.ÀÒïçHïNy<Ã4¥ÏÃëFÍ7]Še†.äŒï}ö™¸,ƒ¹0±ÿsCh¹ìÃú]¼œÏ‚ˆëÄÜ¿èýëD’ôwwEýÒ_ýÞèedËl"`”k÷¸õæÀ_8öåõŠ ¥Ž|Kˆ×G\_Þ¦ÚðÚ]ûH‰SâŒ8#ÎCÄqI\^~Ke’I’'I–$i’,’dž$³$™&‰M“$:IT’øõo­&þ/]?y±íðóËßÿïSè?ÞŠ€n IEND®B`‚xcftools-1.0.7/test/answer/Dodge.png0000644000175000017500000000471410373711237017242 0ustar makholmmakholm‰PNG  IHDR@@% æ‰ “IDAThÞíšÛn׆¿}R¢$“²|Š$éUZô6}†}• ‘‡Éô&7½ÌU“ ´9ØŽmÒ¤DqûЋ™¡öð ›²4…Ä9ÿ¿þµÖ^kÍ®ùˆ1^ÇÏ !êÉïüøÝ›uçï;ÿÒQ±ëšN™NvZ1½u¡·Þì¡·|þgCT ‚o¤Y$oiÿ'@48P ÛW‘,H„Bh¤F´Ådض$«°ãÐP9ݱz;·›0‡*pà[d±Åº„“åÁƒÓžT ´ÍºH $R¡ Ê¢,:Ãô°UCÀzLDÅæ‹»À@ nƒßd{Ÿ¬uD‹@. „B¶ ˜ SbZôYÀtDƒ_ßÐo­èp¡ë0q€kP‰óHº –.¤¦Ád× ·1 J\IúÈ@A•(Š6¡×-n ºûV¤4$B"4ªa=Ö“ElÄ€h‰T[ò~µXÏ@&æ_ŠÖÔÎVµ¸kõd‚^.7ÐV©mÑí0È"¬@K”Dé×P >ìz¿€N ¯ºjäq% Ò¡-Æc#6’‘h2Wê ÜHÀµ®_uÑoã°ÌBB¡4Ú =&`ÀB&°£ôÒ¼¶+:Ä.˜Än`I#ÍžLºt!0È€ŠMþ­ d«0mPö ¨u¨¡ënW-z}5:¶ü%™ÂjŒA[”EfoŽÀR‡ªK jiìY›_`V‘醀±è U¾‰XáPû rM„Ô…¶f¡Ð ¯3¦‘XM¦±ãÐÊ¡ª7ª@}˜}„,”k‰ÿ•öP-Ð «°žÌ`<Ú¡<Ú!ýëí—pXVA¶«€éºÐe;1H’(‰  díQå‘®AT‡ØB_.Õ%pY-$%10,`#& Bã`2¼éX‰‡I,9È˫ш(…ЍˆŽ˜z#‹èˆ!"âu¨9˜öué<+ lèÚS¶ÿ_ÿˆm °«74e7æjº6(e‹ÌµužsÄ9rZ  LÑ´%½Š¾cϱïx‡Ãp1<ÞáJª‚2§8'ŸcÏ0GÁ/v&Pu³žJhø–›JŠþ qŽÌQy‚¾¤WÒ¯VÑEDl|è(¶*ª’2§ÈÉÏÉΰ‡ñR/%P¯ÐX! §oÐç ú èŽãÐsä¹¶è›8ˆ Ñ~)‚üœÅ;¸ðG¹·‰@hÏE’ãeS‰š@ÙÚ¾b¯b¿â E? Œ"¬¶Ô"0òD‡¯¨JªZ„çs²¶%°£¾*ZÛo$Z Y ÊÆüý½kÐ#Ïñ:zšJDxŽ¡Â—TeK`Aÿ»×ä³ÝH·ÌÄÃ’˜ìdY¢Klµ-ú¾~²=}©pœ8BÕDs^p¾àìœÞ^#•\ˆîÖ#Òì”ÈJúƒŠÃŠ¡cä¸é¹í¾ÛÁ­Leñ Q­ù÷+Cϱã–ç^Š>nv¡å(I8îUø’²d‘3_0]Ðëa·î Û„´pߤ-v»PYžãÐ1tœ8îzî¯ØþmG**î—ø‚¢d^0ÍÙ/Éì®|·ðí•è*“Ti¦¢_qà9n;Þñ<ðH)t’‘L¸ÈŠ%UÁ¢`–3ÎéÛ¦æÚEÖ„D‡”€­8FŽ;Žw=—è}Ò7ÇÄë.ä;–§ãœÁV_A•Û¢ë])AÏ1tÜu¼çùhý% °6[r(ù¨$/˜ä<Êé ^SØÔŽ×J48î8Þ÷|ìQë3¼õµîBË©pÛª’Kf¿ä úùUÄn ¬+N<z>qèË'/U Ž•è’OJ~-øº€½×!»ŽÄê'8>õ˜ôý'n âÔ‹–#‚SòiÉ¿ è­or;¸i~˜^¦ûö3OÏuÿäצ¿—+°t¡T„ JzŸP¼ºë©ú¥7ù.±z|Ù/lÓ!‘⨄ú×v‹iz½·’¦ÓÝî‘©îlÇt_M2B¬Û¿ŒÏ-¹ív•zm2·±¯]o)3èAö`y~ðùç‡pøê.¤“‹ÅMeÅZ‰ñ-|7mOÛ8¼}U|ñÅá·ßíÔÔÛn‘í>@‚@tª£§‚o_Â_"z½Þ®Ã út8tîèË/o|óÍðéS±ÓFfºýÀz1'’Y•É™ä±ä;Á!ü1¢VD¨Ö8,¨ ,m_£?€Cï¾újøÝw£ÇÅÙÙnµPÖ% »¥[:­hš\1‘<ü=øCDÆ$3š–ÃJ^½6?EÂðë¯G?üpü葘LÈóÝôºu:Tɉj;cE©9SŒ%‚ FdZ¤CÒÔ…tâ<5ú!Œ¾ÿþøÇO?ã1gg”ånúÛÇ*:™J$™ª²,,§†±â‰¤/0ð "Ó͵ÜB ƒ~íô0 aôïßüùçÛOžˆñ˜ÓS ªj7ƒî@<®-#r™X-|Ÿ¢ÇÜ23L4û’L à݈¨ký’ CÕš¿FãñO?ÝzôèÞÓ§b2a6c>§(ð~7‡Ýºµ½êN?묟A†PÎÈ÷˜÷˜Y&š¾ÆJÜ ˆ¥ywH¢ KПüòËÝ_½ÿüùú<§,w& 7-µiµ.ŽqCŠ ‹g{Ìzô32‘(¸]s(`Ñ1èÃŒb¼ýäÉ;Ïž=eþìŒÅ‚¢À9BØÀîG')ÉY¬ºÊào>IEND®B`‚xcftools-1.0.7/test/answer/GrainExtract.png0000644000175000017500000000373510373711351020612 0ustar makholmmakholm‰PNG  IHDR@@% 扤IDAThÞíšÁŽë¸Eï-R¢ˆwA¾g~j–ó~+›÷=d<–L²² )ÉÝ–[êî‡d‚AÛ÷ðV‹”‰|™ÙøZ’õAð¿þð\ž¾~ýº<ØÏ‡s @'p"pÞÁû6†ÀqÄ8"\ôñ ì —×Cõr½†ë¯Ç¯¿þBÿ»!tW:ðËéoÚ ¡ýq½âz½œf—!äWS‡‰öígÿ×ÚO¿cTnæ2\¡£4Ð@Ë€¶ûLÀDL@ F` <áG@TBê Ñ#Œ#c Nœ7ER¤ˆX-õÕ¼mBˆð¿É_þmÓw„™þf>Áeº)£AŒfMî"z ÀXªzBX¡#¡Â(ŒŽ:PGè Ѐ9p¼æ‰EQ¦„Vi{‹×¶ôüëÂ/#&Å0cHð .C²¹ÂŽÄ@#BŸõê@³¢b,Î@.|'ÔQ=£‡Ô€8C'jÄ-0MLy¢)-Úa6×ï?1 g 7ø—ÌgJ‹¨f…кô°0,ꉑªK€*T‡è ã€8RuÆ<ñ¦¸)òĬ(6ÊcÜ_ß¿ 9Þ†—è2\5!›H%±íÜ[Ïë9ÀÕB Àï€ ¿ ÔS=â@­9p«9À¤H‘eb‰†‰P;í@KŠ/Ì©;à\ô”¨&´ZçžkÀxn`wê¢§ŽŒ š ‰sä&æ YQ&šá]4†ïà<}†Ëìɀń;ÝÛ|X8C5 åÕQ=t€&Ä‘1Sæ ·jB`´‰¦å;¨—ºl)ÃÕ±Fšw´?‡^‚<7Uˆ½ ! ¢côŒ5S 5sVÖÊZ DÀû¨×¸¢M9êX“>nÆdÝ[h}¨Pj15SXL¦#ç‘·‘ibV¥)?êÀâƒä–R>ÕB5*¨iãÀŒ¢(ñ“X|XKAr¯B{90ȃ"IM¸ÕˆŸš/jñc-DϪ_Ø©BѨ`õD3“òV«ÐŒQ&ZüXÚa€X Ægë€c‹Ÿ'ëI%££fEÒv/‹~lxÆPû¹bÏVb©sÈÎJ (Q¨…ZP&fmsŸc_‰ã§:Ðsº6§O{¡3uîåQ/DƪG,Pc­›¥vrµÒwõBëÒÝ(¹$nS¿íF±¦²ah½…6…Õn4âóh ŸíÚΉ›-Tß°íŽ#Á:¼Û9‡µ$x‹:½õšìéBùpÀÚ‹˜ ã2¤Àg¸—à2†Ÿ1Ü0œVÿÀc†£Ú^ÕSŸî†¡ž‹.†øÜ1N«àà êô4 À`݇~çJ=f‡Ïp§ÕxÉpë U1 {"‹Ö2ÄÈiõGîNTÐ0öèrIN«?°2œÈû÷øí­öæß L¶ÓêÏ4†gÓt]j°÷±é®Ê×ã4¹ýÛÑz?«>èårzBظ\⺈Lqc@]em=&¤­;6ÚYõBÀ;ž´‡ß~»XÃþ>¤¦wR«Ÿ·mGñ<Ã[âfš«èÒ^úúVëë+õÛÒo϶>Ȱ0)¤—)m¦ Hnóí $ÃÙº<“žZó³Ó¤}„a ¶ais/ËBl]}†/ëZüXz^[·§ïÞÍð G‹ë ‘døeýíÝÐ1Ü^I/wç·'ïcØÏ¥—[›ÑWÒk#7&ŒóFº½l›¿ûyÃ~¸Ò§?¯ï|†_Zé„qƘªôGMÿÉ7WgV€þ¯Køö-”+(9£ävO 9!%¤n7¤óŒ›bYÝßÓ<ücåõŠOÎüù·ËÿöÅýþùûÿ=„þætι§©DIEND®B`‚xcftools-1.0.7/test/answer/GrainMerge.png0000644000175000017500000000356210373711425020237 0ustar makholmmakholm‰PNG  IHDR@@% æ‰9IDAThÞíšM’ä(…?¨VqžÙÎ¥fYÕ·êÍ\hv±Ã%àÍ¡Pü¦”™½¨¶–a2J™õ>žã8„ñ%靸Xç\íx~óë·èŸ>ý/ÿÊ¡BÉäL)äLI¤DN¤Dš™gÒÄ41öê?ø5:Ϊ‹ ÆÉt2…Ú&ÂD˜3V‹FÉÐc²xâÀ­¨— ÔÆ„æ€Dv$-œ jø£ˆ"À¸8ࢺèŒ`š¢F#šÂ̘¨üLÚëÀ ¡Û(ÒæGÍ¥jXf˜«Z‚M½-—ê¢cˆ:E‚1™Æ ›e³ÆL̪!4w ^<¨)~ˆþ¥£%„V*ÀÁµ9àš âÍù¨Þ\µDÍFœ4ΊI!éGÁŠ~€¡O8ÀƒÐ­3<™Ä’˜ ¯­†ˆZ¬¨ê gø¸8ÐGNF2¥Èl'Ùʰ,[и™ ‡¸S¬MÚ`ÔeG‚z1‰Nô-rÂ:•µNbÕ™ëMƒ)E¢²‘ ›ˆ³Â¬™¤ðî¬pž8¤kJb†¼èhi§}¨y©¦Ñ% õ‘!’#%*™Â¤q–%Y–YQM_qà•­#·Qïð ÜbEmËØ»M­ñ£aR™¤ILJQÁ\˜\˜]H.d…¢ðM¼Ž¨;|ý¹è7œ¶ËÙ½%¢Qóƒñ»x\"t38ÐfŒïæ€LŠ"ÊÕ90cÍx:¸ÉB¾ªo+C'BÓ}Ò’CÇ›,T¢ëùH2Iq^²Pü¦,ô~ãf¨c/-<ë:ÜRM<¬D¹(颲aYc’åo[öáTÖ~^ø¶×:bl+ñx]‰käø()F6eûÚùâJ¼o2¬µ„¯V°„ShµPج ›ZÈ™J”7zS‰*†1¬(”/ÕB‡®b´y\ïO«Ñq©FU#ÇPʦb ­z¡>þ\5zD¾„¶už®þ¬ûp¿pl)4¨M†¡µ-ÊGûÛ+=Ô º­C×{i}{ÒÂӽؼìѦ'u1ÌžàÙvä›2ó‰tÝ”Ãê¯Ç v€a7@zP6Wézð¡ú÷¯¾PnǾl:å`ú›žÝ GBHÏît«ýf>¬~À#ÃAôÐÊæ¾J/W€ýêÏw9xÃAÏ˦U€tXýý¡íb8â€bæ•ôé°úóãÎ{Ã;€íÉVŸ6s /cïh¢ d\pÒaõOV~û˜a|°Éÿ d\K;.ƒpeé»—q Wp —qógÔqk;Ú€1-;·pepŸq—ñ Ÿðó'Ç~Ñ%ú™nf˜>¯þžaþ&|Á ßê½KtõžègúD?1$†¯©¿gøv€®Ý»L—éÓµÃÌéËêo¦¯€ß´nÓúÖàÄrÚóuõ7 Ç.—ÍãÈr2µøg =œÆ®ØøøŠñå·—7 ?èð'¼Ã;|Yîtn¹÷Ð;z18Áôu†¦>¼úŽì±y0Þf¡–L—,”[Êô3]b˜^Y¼ŸáCõGlÄ5WðZÒ¨Ëtjë@ÍHó‚q©:İGý!Âr(R‹ˆ à†oÕÄâF¦{µ‚–= ;Õ ¡z¾y-(VCV7Êu™óïë°ü†a¿ú£m#_ËR×ú×"¯lî{ ÉôÈpHýÁ9ðx*ánU\Ûñ¸Û‘k›W†£ê?°MþH)pÕ«›÷—6‡\›óq±Ý VsîQõfçÏo¶”×-YdlA³¾êÁgûêâêÂâ…ÙA†cïJ˜á|¹Œo®;š @=­õí¾„Û#¯sÙeØPÕÃø¸?0F]Uz¹ÞÝ&-™h‘u„a'Àªþ~¢¾ 2–v@ÞFzo¿Ñ½®þªl7À­úC¡,_”nÓþuKVÚR¼–7âö1|p§þ¨ÀÈtÂeº‚Kôk!‘éçÖîõí`xð¨þ€1fü:G×M ˜u/<ÌôÃÄðDâG ožª?æÀ 7[²º•¬‘33Ì ýÄÉ8=Wù–áÀ+õO®/dýüù³vþøãýûO|‡÷Këz:G×Óuô}Gß3 §§!¼|7n|¿·z²‹‹ñ|¹ŒO74¿~ýóæîïñÚå7^ÿ¼üýw¡ÿzIŒ{e=IEND®B`‚xcftools-1.0.7/test/answer/Hardlight.png0000644000175000017500000000574210373711515020127 0ustar makholmmakholm‰PNG  IHDR@@% æ‰ ©IDAThÞíš[rãÈŽ†¿¼”,Y>+ð>feça^g[³ŠÙA¯ ­™ç!I‰²ËÕ®êê‰9­È@@CÆŸ¸ƒrüÅ/3û+¾Ö9×Ï¿ùë߀û¦ô?ù‚ VÑ‚ä…&ê„LÔ‰z¥\©gò™r$ým¿]è!uðÏþ¦—ô£çí··—:f/ï²P¼+°0o<8p`pºæZn†‚*#C2&衃ÂòÅàŽøáL¼X¼Xw¥&6‰œ­«Õj5T[:6ÞÞ'åÏ4ýìÛºÞ%ö Pf Mû É1ÍÂr'€áNøþdá캫ëGëG&6ÉJ¦d«LÕT1Ü|KQ]×ü#<S„ÅŒÞè–ë÷÷»ohÝw²pv7 yÒ’(ÉjqZM«™€áL=üV×ìa¬?²Ùb£4 ,žã Îî¦Ü&\gº+ÝÕš Õd5£Å´˜ ˆ95g~Ê|Ë‘ì[iÀfª¶Ä€‘ŒÁ-žãœPá‚¿:±x%^¬»º@’ÍŠY5ª:Å«ˆèÏXû}°ƒ½â¦\nwïð†·åoo ¡â®ø‘p%\‰W×ÔÑê„&4›e£âļ¨W‹fñg-ðYà>ÚÁÀí‹!C°uÔb F5 ܈ “‹£u£ÕÑú™Ì’Y†‚+æ*^ˆFgÚýiïâáÑ©n·Û2iY2æƒ}–ø.q~ÂO&'º ™Ð dsÅ|µ Õ:ÕÎè÷>|›Äjwí½Í!;ÃshËQŽâZ|»„O1Y—Ðd–”dLJr.ã‹ •(Ö)½Ùð³YèûH0ï,àWŸ¯Í’—ìÔã2>ã“…ìbF3¶|ê³…b±Z'Ö«õªƒ‘…øPnXÅ€[E­ñPZjê¡Ã\&‹Y1Ë6û}¶Pˆ…X¬«ôÂ`dÓòë| b»g¡‡j忍mÚÇ¥$wq_-XuT\1_ñ…X­i_ÅŠhU+fõWøPËnu`¾{›³jpsLGGXzŠ/ÎW‹Õœ8W B¨ˆXWMÄjUQªš@ýuà 1}«ÄëxðÌñŒ¾Õµ&Á ^ ‚S¼˜T‰bªˆ˜Ü55“¿Ö·^ÈÀ/¦hDs*Ï;Þ)N-˜sjªæ•h¨ª*ªfæT—FÎPSý¥YèŒfÇì9­~9‡³9¦ÝR?–ã o˜™3p6¿XSÀLÍÔ ûk,°*UƇ:mߦÜCëþΰö(ÿ£yàñ%«ægÝAØJhŠú„ϸ‚/øŠ¯¸Š¯xÁ7W¼áu¾ùæfj˜¢Š Z±‚f4¡ ›ÐhÀ<êQÇë¢ào_°ktEíà )>2±Ðrx(D!ÈB• D%Ø: !F5D¨©Ô‚djF&j‡Dj@ÕƒCáÕ¾ òÞ¸kª0(® ]¦+t•¾ÒUZê”Nè•ÎæÓV˜‹R”"äJ)”BN”ŽÉâ)~þŸ¯úC.ÄÿwM} ¾ ]ah§2Ta#  Ë1c€$#)IHBª¤BÊLi"BÀ»ùî= _P? &]i¿ øJ,t•¡°-l+ÛÊVØ[a«Ë16ƶ0ÂhLƨŒÂX cfˆŒð‹çˆQ„Wù èÊJ¯&y|%úÊPÙVv•§F…Îtg<ÙBáWã¢\…KåR¹.™k»ûµö†oêרk·Ñ»êºJºÀSe_yö³°Wöʳ²7öð {8ÃÉ8+gå$l+çB‰·ø}5Š'Py-?À¾ @V´â+¡¶Â®ò,*á ”ƒòb”ƒq0p„£q4Ž-T*]¹û}³qV’_¡ðš?°^ mêÝéÝÀµ]BË9KƒàwST8/òðö 3}Yi¸•äö/*.à.ãÚÀ¾¿5ß/Ãçn5âàEæÃéü]ÎðM.xÅWœÎïëÊU>0ÏÂNÙ*ƒÑÁæQ³5yÍF“Šù÷òM3fá9÷|Xƒàuéal® Nð†¼/™{ß(ÄÂNyRv“²[1s+[cP:#. "×&ePª ® ÊFæXzn‘ÝqiK²?¼È²1¼ ]jêRb[Ôv•¾ÌYr£«Œ¹–ØlþƒzEuàî’f“§Ê¾0vL‘12ÆAû €T‚ÍMKÂB£ÜO_鄾0Cf°¥NéŠ16úðQgÄ€ht†¶D qÑ~#çV¹Ô-ð9ÇàrÙ^¯Û…n¿n.—6È}Ñsν­¥0­¾/Hûì Ï…}™™±°/”B ˜ŸµoCU̵MÒb~‡ëu{>ïN§§=ŸŸN§ÝŠy‚Ý-°¹”nY«¸½uÚ‚S™CæP8d¦LÊ”ˆ4ÏE÷Ö¥‰_Y`ŽfÓééxÜÏ7úöv{»?Û ÷ €··»tš†Ç¥aÛ6º~¤qû KXÆÖAÄ0‡¹e¶S,`µ GŽG<†ã±{{ŽÇíñ¸;ŸÇÃí¼½ŽÇ—õÛ/+,›ånÛæÿ6ÚÌü²“˜G&4!™’H™1.CB3’(™”˜—Ì)qÌìÓùÌét8Ÿçóát:œÏ/ s8—Ëa)Jy9¨àðÛoßpŸh~g³Œ3M×yŽl9ü6Æ ^æqØa™š)…”‰Ÿ¡,ÂÌT3×Ì)³+MÓííSJÛœ‘N5‚û"~g+Ë , ³Ò÷…mÅe|!d|"$Z©•RçõA{›+©2U®mQwÛØU†š)mSÚ¦´Y˜mJÛiz”2ÔÚ«þ€xcSñ:hJ;™ï»Ýp[Flj0G*H¥ÈOÂTçÖ£¯÷y¨¯tR 9¥ÌçÆç<”²YK ø¯[ ðËB#® .>Ò¬zé.DL©Š ¢”ezþœÖŠHWk/ÒÕÚ=òý;ÉÅolšÒ2{Kl0>›ÏŒÄ‰îB¼ÐŸéPC¯ó&ðVï¼=>˜UT£YPªáù‹‚Ú3OŸ ßî~¢kns%^éÎôgú#=j¨}Ø_ÂŽ¸?±uÎÙý7] x¢§óôq¦C`Ó±‰l"OO=ûžýÀaøßþ­ßß¿Üý¿ý³Ë_øúûÇßÿß]è_ïG ìn1OdIEND®B`‚xcftools-1.0.7/test/answer/Hue.png0000644000175000017500000000317310373711573016742 0ustar makholmmakholm‰PNG  IHDR@@% æ‰BIDAThÞíšKrãȆ¿Ì*$%Qpø(^úJÞÌÒ§òqfíº%Š@=Ò‹BAŇÚä¸)GO‘Q‘I…ü3ÿ|áÆ—™Ýb[)Šò‹_¿<9wþqõNÏãµòòÂËËóUbö|§ÐÀϽüÏv‡‚‡‰œI™`LÆÞèÞðàlN½oðÚ³ëØ{FÇäˆJ@1OîIqE „ÄdŒ7P¬w¡#ÙˆF4¦(ä gsÆeÁ Â[fß³/ò=¢PGHF‚2ùÛG@«û;+9#”Ê!A„IxËL=SÇÔ19&=ÉhD!:¦?ÌÞ¹©2²ÁÁd¨`FLÂ$ì2±'z‚'x¢;ÊŽ,DGðL=>Þ@‘Â! B­9¹Ð+£ðžH=¹';’#)é BR’#ôøÌ˜ÎÍ ?@™=¦3€:”’dfN^é„}º*s˜b3!;’`8Cìö7#1%5³V);€Sü„ƈôˆG<¢ˆÎN˜ó) Yˆ‚&AäÆLjh@ýI…¢¨àT™®C;´ÃyœÃ)NÐ9ɺlúIìk1UòG:€ J!H1)(¾Ç÷tŽÎáSdàÉžäÑŽÐÇü‡Kn `päÒn¥æ…`‚éÌ.S¢ÒwôžÞ“<ƒCwP…bõXIö¯™…:Èsâ$Å”\D0!¹Àʳò¤sˆ¢Š?è¶ÂVäiEüšNìÁ×N¬$!ʬG!)Y‰±þÈ“æSüQ'f€5ynH›W¡eòó¶ R$QBLD!*“=1K( sïèÛYˆž4WÈú7°DÀAWk …I”• LŽ™ÓÊeÃNlØ`ðO_xðPi„I•11%2:FWζ8¡a*d[(d=Vr`ƒ=bÛkÊè{¥„ÕñÆæ1óxÍU_Ã"$ˆëV–;S˜›+çSчRä:T­¡ö1ñ¬ Rm ?Tº‘ `ùV.ðÖ¸97R½³Èâ¤GØ7Jï?ê `UWê‰"3âûf½âHùÚ8¾õtjŒŽuMà žàÆ26Ts§O$@‚ <À6`µ‡P÷|‡]•7Ø]à[c÷‘§S=’Ä&Êla ÏÕ[Z£1~®lá ¶5mJá)Fx‡ïð¾ÕõB›q Ò¼’‘ ‰H„€DdB2²Už[ÏÖóÔ¡Ê02ŽLŸ¯Ž'ÏCÏz`ø„fÍøÄXOÄ=ùÞp¯x®c­Š®ÚTÿR¨«hÔϔ 5¬«2T‹J$rÊ Ï2è3Ûje;#K­uzXýJÝ_È\V=WBŽ*P€zªÒ×v04œÚTÌ—xúÄͧvw࡯Ž\DO@8ѧf«vç ¯kª•"]  5½™Ó>¤k\¸TÂUuÞòàØ(í:ž{G¾ì–‚´ôÌ+F‰‡sliíîªõmoù ‡ ô¬ìkmË'Šоsº@bߨÝ5Ž_ÁúU×´tξ²îNR"Ö?t•œË¶¾ Èe´9¶œéÚ¬æi}®!¾Áéç—CmðH Þš;Ö7婎…¾†whâüt'Œï«ï7µòMeR­´Ï•¾¶ZßX¬ëì¥VÐ5£qßXü±ìûP +GƒŸ»SötuØMuü¡fp_}ôðp9€uݺeNw˜²Å%eë§“®wT=NÇp¨¹Z¿¯w´ÖÐUõÑÓùÍ#àÇeíBžÒw·ÿÃ)(מ°o¸¤õÑ%ÔÀóýdwwwww—5²ßþvõNg¾Gá¿Èç×ï¿ÿõ“¯U.ð¸„F4 ¾¬#nO·Çïñ;ºý+ý+Ã7†#Ûô;ã¿Ç ¼¯m§§S½ªu]ýãB?ϽÜÕ‡)Ã͉ó7"J@c30pÐ@[Ýðn¥0¼Ã9ÌcZ"|Â\à?Üí I›¨w‰z&Š7¼Çh€¯Ð$IJàÛ>9·À0ñ© £,P¢Ÿ‰úZ2îþD»A{ `˜J\ÈpçÑàB—[êl È­0èÆœ¾¥T¼Ã§1Ð̃mS×î–ßû™ç ‚ã’±î0·©_t[â9eìÃÜàmápçl…|“úÃÄ»Äsç9Àð¾|Ä9Ãa³ú»1àÿ)"@™´à¹¤$p‰ì&Ö¿›äŒ¾öªÇ#.üP}`øçé 0újVxìé â <‰sˆˆßOý}†¼ ]ë‰r«DaãòP±«ú; ×åoø‰­ˆtÿƒ7LqŠW ×÷¥Qy*Gå8zŽïï%¿J^{ýüìò?sÉÞüüøûÿîBÿ¨Ê)-PgOIEND®B`‚xcftools-1.0.7/test/answer/Multiply.png0000644000175000017500000000562410373710566020044 0ustar makholmmakholm‰PNG  IHDR@@% æ‰ [IDAThÞíšÛnã¼’…?’’qÒyžy²¹˜ÛyÏyvlKYUsAR–Î÷áfm„q­:®ª’ãþ˜Ù?ñosõÁóoþù·à~øÛÿâ?2*XA3²ô;Qfd¦Ì”+ùJ9³œÉßI-ð×…îRÿùÓÿé=ý쉑ß꘽?d¡á qþN°ƒ\·•ë‡Í`D(B²°(I™2ƒ1¼µð>Œ³qQ.ÊU™„YH…¥3%SdA,A"΂_«ô {:†°‘~Åàof4A-ˆ•E;a4FmÒ»*½aðQq¶&} ,™%“3’ÑMX‚™¸{@ t þkk8¬`Ñ›’6ÝÊÞðŠ«ær(œW X³À,Ì…TH…\n°ô ¨Ÿ Úal|²Cµ€¢än„¤ Ê xÅΚî͸À.ÆY¹WaÒ;Ê ’‘„î»ÆŸP1Ð{GÚbP ZP¡J $%¬žSuj¸À.ÆÕ¸HÒt hFì`ü5@éê×èþ.$ZW/R–U÷‚Wœ‚a†‚ \a2®ÆU¹“>Æ@ÉÈ‚$t‡¥ß°Å°z‘ÞLZ da%(ÎnÒ›¢Jld˜`‚¦.ýCʃ%l€8ü2@º>I¿Z`ͤY ŠW¨ÒëÍsªô Ì0[?ÚÏ6Ö:¢Àø›*û$½‡)Z†\¬ ¨ F1²c´ÝœB*÷a° #:b#ÌÄð›*†‡‚ ?°@ó{…ª{¥tÅ/FÉöl,ÖêÆRCkÑ ü=6it×ÕoŠué‹õÜ ;c¤áÉÕ©”Eȵ„òC ,€'ú?`‡OrÓ} YŠR”l ÆH¿{ À6J² Œ NZõ­ì­&Sß3¼Ý1©Ç°5 VPzÔa´ûiö…躱¸<pB¨h}Ø&Ÿí›,¢¨"Ú³Píì<âP‡8ĵ>îÝ~Ê…ì^ëÛû³ ­r Ãzk¿kX«õ:`½h¯¾Ww”Ê¡Ž(Àg ècÈzÅKkm}p»aSƒo•еz\”¬½;œkLÅÀb`¼ë“l»zŸ+¾r¡µ` C톕QÙ£1Úía´Ú]u.d )ƒ=Þá®ë¾†Š3ÐçüЊ¿ÇPÓN躕²SöõÁØ;ØÁžöpc£½ƒ[” ¸*}ÏQ å×è§úà9¥g-á„î9;eoŒ½±Wö¶9°ïýÀÎHF²9¾§|ëD£Õrá]~?ä i‚5 쌽rè÷íp;µ#«ü´æ.ç:¿ZÛ£TÃó>ÇÀgGº÷(שNèQ»Zà¨ívp4ŽmÎІva•²m=^ð@x¿àBÿ" ä.ˆ]Ï•kÔVõ—zÃK}†—ô^{Îqíke“—‚oœŠÀ»ÿ²©¾Ÿä¾‹^§ZÔ6 GãdœŒ8Ñî>±«“‹î6j”@1²'(ÁãçÁ?Àžðœ‡LZ™BâÖ\¹x¡x5NðÚ´Y¯µÉE+’5±:ÏP³j'!?cýD?W€m¨ÁÖ|£ ¹Ð ¼¯ðj¼Á+÷³^EZ=DZ(‹côG¨e¡pÏ[À>éÞ¾Ð}ÏB®s„Æš+{Úy1Np‚Wã¼o›©@“ÞQ\ÓýÉ18Gp·y€~á<Þ¿ ƒ•cV ¬5kÍ9/ð oðf|ƒoÜæìÖ›ãÌMúŒ®Ï”Wü&€¯ñ¸>ü:Û¹èQ{ê¾ub|›õZ£Fuæµë|iØìXàYó½3m~x›ŒU¸eþRšïßùøà|ærárázeš˜gRbYÈ™RG‚j#£1> `¨0ÔpL-Y®]–70¼Þ2`Í!› ÜÜczxˆZ>>øøpî|v׫›&¦ÉͳKÉ-‹[—³qª¨:3.Þšúø¯¤Ö}Ø*ºá UèI»uYŠ“ÀÚÚ¢ áŒdmת•ݶcjç3î|ö—‹»\üõêçÙϳKɧäsö¥¸R¼ˆ7óf|¼ ¶âÿaC ¬Ð~+jø:@Tdm%›µê$«2äEI½,ÜmhZ¾¿\8ŸÝåâÎçp½†ëÕOS˜ç’_–³Ï9ˆ¯Ìøøältîè<°>h ­sñ‚®àK0Ö¾¶èf jm¤å\ß(ꪡ.®×ªûp¹„ëu˜¦0ÏCJaY†œC)C)AuP­É!Ä'Çë3C_HX ‚iYUé]!\!d|›„Ö¾öš‡|o”µ×«¿^ýõ:LÓ0MÃ<) Ë2.ËPÊ(2ˆ ª£Ùã³CŸ,W¡MÛÌÍ•6yó_ÐŒÏÈRÜ64Ú74µ;‘KS£82dzÔúi Ó¦i˜¦Ý<)˲ËyÌy,e'2šf#ìâ“+¦™ Ø:bîº7Á¬à ¡´®ÏHÂ÷‰HíÊ•ì{w"ù¾×ÚyfžÝ<»yó<Ìó8Ïã<ïRÚ-Ë>ç]);‘êNug¶‡]|rO<3ÈmÞ§ÒïÒ„‚,øŒ-ø„&BkJŸ¯MícwâÖ MJ¤ÔrNJ!¥!¥1¥Ý<ïS:,Ë>ç}){‘½êÞlû÷?@nêðV –ÑLè èЙ:‡ }Ë´våÛî$´Ôԙ²°,®æœe©~¿[–UúC)‘ƒêAõ`v€CŒ‡'c ”æ?Z  ÉÛæ6,ØŒÌèDÀVOñ÷]ùÚTÏqç3Ëârö5c.Ëó˜sõŸCÎÇœ¥EŽfG³c<>kÒ¤¯~_·dü›·lBfìŠ`õˆ»¯u"Òz+Ïà=ƒct ”Bή×3f‹Úœ÷¥r>–ò"ryQ}1{cŒ/ÏqiÔÆ –A°ÜD'µ—GtÆ&„]êúµÎ1Ëf""†ÁÚÖuð„Ê©Dj­ ¥‘¡Fm){‘CÕ})'Õ“jkäb<=o´OÍ3” ¾r¡ 6cvÅ&ìŒb¾Í1oº_g Bðw½AÐXšˆñªƒÈ 2ªîDöª‡®û“ÈIõÕì¯ÏH ¹±d+Ø‚+hÆ%4áºóØŒ]° œÑ6þ×&ÚÇ!^ñ¡MN½oÁížÎÒ¼jP ª£Ù¨ºSݫ̎ª/ª/ª¯f¯f¯ðãë³.”¡–­ c–p3–šî9cøÀ0‡:\÷œÛZ@p×»rço»}ÃÌ™9³ƒÙ`6šíÍöf³ƒÙ œÌNf¯fßà-Æ·g](wnŸ;€—°¹Î£àŠ]á gø¾6V·aíx†ÍÛ:îGï|ùÞ =6rÜ7rð-ÆoOøï_X=½×c¼ïÚð.¼Þ}?ŽwWÿ8Fbt1úCŒCŒCŒcŒ»÷1b<Æøã)ÆSŒ¯1¾ÅømóÎÜß×.ÿ_¿vù÷åï¿.ôôç?Îk7§NIEND®B`‚xcftools-1.0.7/test/answer/Overlay.png0000644000175000017500000000405210373710732017633 0ustar makholmmakholm‰PNG  IHDR@@% æ‰ñIDAThÞíšmÓÈ…Ÿn÷8ÄŒ±À~¸êþ ¡œNuÕ~èn»8³I†ÕÚ¨eyœ·:uΩªöÄñ?ÌìŸøXç\>ñüâ_€[çÿƒ•Stí˜ €‚à¶t‘°£ ÂÄljáIâ©òLy®¼0^¯Œ?yó†·oÝ»wÝû÷áÇþãÇáÓ§‡Ÿ??º½}üåËÍׯO¾}{:ŽÏb|.ò"¥—f¯ÌþüOB?Ù#¹þ¿³?ézËÍÉëz ÛëkÌ®=ºyþüæöö”u}:€néW]áf§´/0›­‘  d¹´šÈœáNéÔ:±Nè„WÊË|2Ÿpгó †{âuÚaɇ@±9ôŒMç”xÅ%óÉuê‚Zërôb^ÊõÎÌ« çtXS—Úc½nFrˆ+ ä¬'‡NçM%g tæBÊ ¸ äs/„T®»ä<Îiˆþ„¸Û¬Û]/TPËEµê§†.Y`V%d“„¼âAéÄÂ$!!$óB§Î«Ý!!Zî]ÃÀ^ú›—XQÎDB–“€ºJ‚P¼á“u5ú…¤x Sœš?Ò²ÂÉúY3nûTË€®y`2ÀÒ™Ÿ\P– Sשy5¯Ü߇fX**Ÿ&Wij¨BVÀ$C µIB(º.YH‡UÈ:±.9Ÿœ‡c—6= ®”ÑR…Ö<*<s“JJMôC—èÔ:3§æ~vÄÊU¥ •è]ÑŒ:’¢¹ÚN-¯tFPëA-(AÕ‹zÁ ]‹s ¯îÇŽnÉ/ÂÀnaâÃ÷榢d¿P:îæ£üqÚ~òN|Z[øYg¡“‹ÒO?þýý“Ÿj?`kåÒ™# ¯åË{¡Wze†zìë J¨yó”0=+  l…°DPAS’ž@צÑ;'S/øŸ”P& }ÅP¢×€‡@Á0ÔãVØ ƒ"Š(AQÅCâb‡0¬^Ñze™þ) ùzèuñ¡!'Ãþ.å-;¡Ï$(ªìtÕ©ì ôåF¬•<¾ U ƒÎ«H('^¦èµHn’PÌ$Hixç{ žµæÛ5šg‹tÖO‘”ôÏ*j$ PYªÈ³„ò¹±yË¥ ¬n…µy¥VH“QYI¨‰§RÑúxP¶ÕÛpfà< íÙT—ŠoXZ -=0«B,£o<°¢,0œ)![²ak@ÆÐ8r/ôÙºÏ@_õ³'¡¼‚\À@:"¡eЋc5@˜ØSQMvX~ß”ÑíRBc…ôÜ[‹ºfâ;¤Z…jîgšÂÚS8¬BKoÐ ª.o÷p ž&ô @ñ€Î ü½Ö°×YëõÙ¨û.¯BzÐt÷ԯ͈¬–-ìh'>¨B¢ ÂNÙåAhʂܳØãê¬þ²kšÀäྙäò Ô¡ñXnêH…=y o&«°ýû[smûçÅ5£ƒÌÍxXë,„7LïÍoi=p9'ü“o¯÷º¢Ÿ^ ¶ß‰Ñ™„Af MŸs‘ÎTëa„ \ÁÕr rСŠäi-–5Žóš.J©ÏÖ<@³-ïªxòI@ê‘èÑ3&6žÍ®ôÔ ˆá M€ª "!Æ~ûûqÆqˆ1{‘^¤W ªaUðÇtGʨ;ZF1¢#B¢cô>}>~ì?|èß¿ïß½ o߆7oüoø«Åßô—»?ðñß¿w ý°ÛünÀ³IEND®B`‚xcftools-1.0.7/test/answer/Saturation.png0000644000175000017500000000372510373711642020352 0ustar makholmmakholm‰PNG  IHDR@@% 扜IDAThÞíšËnãȆ¿ºP”dYò¤'˜ &«,óÙòLYd9À¼ÓYç²ÌlÒ@‚L&[ݲe’uÉ¢ªÈ"E T#–1! å#Émž¿þ󟋚‚¾¼÷/ñg…Áüȯ==Îû×¢P(‰–’…Ž{©X,5Kͺ`½`³`S²-?âÞûék7}}j |¢!Ä¿½ø/íª‹Ànt½}Ë~?²NSšþæKœÇ:ŒÅLƒ5Xƒ³8‹wx<ä^xp`Á€jªª®iŒÁ¬Å¹äú~ÿrÀyœÃZCÓzoðoÁá=Þ÷1Cu `Þ_€Ç»Ä@ƒi: >gÀõˆ`r*ªEUõˆÀ¯Á€uXGîlpmÚò'!è…P`àZ!„!Ï­Á6‰ã ¸.J ÌLj þS®B‘‹ékÀYh£hJÄ!ŠjÐT:h ÄÏEìCr4ÍH¢ÕÀ „Z 4 ¡¦Rm]S)„¬IQ”4àÛLêûÞ²PÀ ¨dB×ÌBç–¦¡±˜”Fƒ‹Â%ïýXh@‚à™ªb€áU°] šË€Á‰÷W×€péþ35 @T¾n^KÖ!-"d!½w.sYHFïñT®6÷¯QuÀa}¼ù¬:©lm£÷׬©ãðAçã gß5B§"ÎôPÉÚugE‡^È[dè…<Öãˆ!Üz?Þ y‘ŠJVmÎ]³o±AÎG}·BI£"Á ¨Dí;§½¿šˆ}–ÔMûƒÑ)`È@ÿª¨§çèy–á} |2xÂ2‚ôV°† <–­dkXÁJ(@ƒÊÇØ$’]ú¥@¤ïl± 9 9*è»^Ê`K$PCÏp [n·p+(aÑ òüã»ìÒ-%R"RÆläL¥Îà·N $‰ RDוDŠ4OUp„[Ýc P6kE3£´K…”(…ê¨Ý슴ÑqOC Â.Q%ºn>ðÜd!´8eÀ¤ÜßK³Ô(…>ÙÑh)£­€à½–h™5d TÜyÉ€&Û“Q6Ë­) ´îŒ¢˜ õ^Ð_!îE4òCÆ=¢Mo2Eu·é~?¿"q+qã¢O¡¶äwq>zìÊ£Vbeo&¤¢¬¨y>uyÚ4Ùj:ÛZ#ºäܦhçÀUóX‡‹L~R.)ØÖgÞǹ6š&…w^ü@¦g[kúÕ%ÔckÁV³†Gx$HŸ-P>îJ¤ÓN ÔU|eö´¢ÙþÇÉ6ÆÒ«ÁÁ{­?€ïvvX‡QÖƒeÀBÈöÁ%ÛZ“yomL£Ö‚šB]Ùò >U…Œ$2Æd ÔÔ'ìi¹Ìõl·Îd‘#ed@)1€ˆ½»pˆvÝÀÄ,dz!TU]L š¢á$p²Œµ ï£ëRbm¬Ç€Øÿä Åp­„I_ì$ ŒŠØ ð' … ´}DnÌ`]ò¾ß´u`ÈDâ C(×À¤ˆ}&‹Ì¶>`p:¯ˆËÈøØµºÑ–™Ñ,dΧѓ>4,‹ÉkiÖ“Î`}çqô×g0Ú^;ƒ4•…š>CœÎ7`¼ñ½`>_ýBVO¤ÑÉÉ&?>ÌägÕÿÉÿ‘­²&üsYñ óR7ÐáŽf˰!¶Ó~|-ýJ 5&²Ï¢‡÷÷g¬‹Ðöšà®Ìë@Ö–vít ÏÜ•ìà6ý™&`SuÀ‚cåÖ2Î1íD–êÀ›y6eo€ÌGÇ^-ÓT ú'êØ>ñîèxXf$Œ 4ÙLsc7ý9&h¾ˆ~÷ÝY·eÖ÷g {ð[ Z …Ý[›#ŸÃψ<´Ãq‘ÏõÍøÚ4Û‚blQüržîV½“S¯Jç­Ó*…b¡X(XÂ2}7qúâv°Mt“‘ Û”VÙ»únAYvk‘^Rþz€7ëèt8u­P­Ð‚B§( M©ã£ñöÏð”Mtzöa8îÇ×gÇÏW¬Æ«ßÌðÅ­â‘kÖhÏ»ÔñÈ—šR³.X-¸)²BÖ@¶1óíIÁ:Éàp??übÃfÃÍ ›¾ÁÍoçøòî O«À~|ýjÿåŽÝØb÷»yÞ>¼,‘„ þ~x»ß2ðÕÍŸçøþð‚(AøáøÏø¾Zýe€wO—g¡ct°ÉB–‚âlº¯ÿý8•…þ:ÀÃñò:ðxð6GŽP¥nÔ§/54,’©:°o&ëÀßæøP]^‰3ïùíSì:%(ÐPÀÊÔ™ž©Äû~²ÿc€Cuy/ôöpïà_TÓÁïPåL"äL/ô蓽Ð÷ó<5—w£øÐ‘à¡"Çý™Þ„éÏv£Gÿ4Ù¾›àh.Oê­‚ßÃòÛ¤àcj>Ùœ¹ž9N~v?À׿ÍBö‡ý7“…Ì÷¦ÌŸ»|ýK¼ô ~zøûS¡ÿ]ñ‚ œ;¥ôIEND®B`‚xcftools-1.0.7/test/answer/Screen.png0000644000175000017500000000563210373710660017436 0ustar makholmmakholm‰PNG  IHDR@@% æ‰ aIDAThÞíškr;’…¿L$P$%_oav9˜mõ¢dK" Ïù XÔÃmúÚ?ºãV Udœƒ|d•ð‡¯ÖÚŸøYé å?üú' Ûÿ½û—¾®÷ާ'žž¾Þ5Zûú ýCà÷^võa–¾xb…ÿWHP CO…u.øhQæ¨Pw‹v;®_P‚#Þðð vÀ".á2šÑ‚V´!Fìg€GX!CÞA©A»åÐÀv¸ „ÝmõÝýE ŽÅ>` þ€%\B3®  i=nÒ»ë ÜÙL{ý?×õÝûY: !8–ÍËÜû„e¬â*ÚPPýI Ü^ʤQ§ê;ÇØ“¬·^÷Æb²·€#8‚'x¬»PÆ2n¢w ‚âî·ÀvÞZ`ãÓÞY 3´[¶Öaº ë^´`+¸†k(ˆàqˆý*Àƒì¶V¡î8ôáÀ²å}-s¾ºÐ´€7BÀg,ã+Vz'¨"ŠÚß#ÀÜTsÛ-Úmlðaι% ·1<>c_°†kXG/¸ŽÞƒÿ¥øCÛ‘ÙPnžó>íp»÷W3 #xBÁWŒÞ)êC<â‘ð÷,Ð/7‘é; øw ÷~/; qþãñk¸ŽLpŠ9œ¡ èò·-°}å3ÿ±àMá—9ô*¡áÁÀ·ƒ.Yø;,°ÙAv‰’wîþ¡ì•©\”™Ú·hø†Lp³AÀõ½~“öñ°©©:½ˆºÎy«M‹#T|#tôŠ×úŒ&dÎüFÛwë­(|ãT²ßò ¹þ•­€ AðsXÁy\A3Rp)€Žw:GöÙævÝiä½ A1ÅW̰Š+¸‚V\A R‘òt|‚È»¨-;i‹ÁW¼âmèW±6µP—Cêo÷yéN¿èèÝÞ ,nÆñœ]Bh¨Ñ©Iÿþ;o ¿w›²ó®[øÝ°Y ÜGÁó9¾®Ì‡žé‘©"І,›ÒþÊ|Éa ËhBdHêP‡Ù°@H,‰â)…V¯èuJì» l …‰»ïºàd@·†×µ}ï;úA ! ÿq MHÚYÀpý@–È™œ©…ši 2+ÝE`©¨ 26Þí2¸mèk£½Fm‡þ†€Ã.!;b8y|"'B¢dÚ}'`ßðw¹P' ;=5÷4m‚ ¾K!;Fš#Ni4º mâR»fë<%S{#§ -ÃE;úp— ¹éB·›^ØM9¤W/£EX2KÏ9i·èFˆÃ–pñ–€Ç­˜Çj¦¥žŒL)dS­.í~Wôô†/!TaQ2’ýÈúé:®è»"‘qP‹X¤&Z­4-¸‚|%4BciÄ»bÀdˆv7#Õ)|Ãw· „Cå(ø2ª•OøßE¼rˆÄA@.b‰–h=02’z«øJ¨,•ØHwYÀd w`ý¨]ñ §ÂKã(„“`³ZùŒ%lú}Ç=ÐG\·À$ ¨ñо·C-c_È•TÉÔÈüî3‚cl|‡Þçƒp„£ò–q3ÏtÍ3Ö}ŽÃO4¢+DºCh@¬óIHÅ®|¥t-ÔÈò+fÎñ2fßãBG/œàXyd¨4—G­íNMcËݶXш¬Ó n¢×„fjÆ2µP ¥P+¥RµQîÒB^®y3ȰÃ2 ,p„ƒðÂ#W•¦[®œ‹î3}ï;z‰°" +nEÔ„&,Q35S mj¡.‡Þô)ÿ¾ÍZËȘ,p‚£ðØx¾0‚OÒTš½`E$^Lô²i‰¸HK´YÅÆ\`ªÑö±¢þÜ…üÜ~?8Ìq‚<Â#üÅ|’ÐEΛoÇ:F·Àøp»y²k«¸~ÞhÚxzÚ}|™h»–ëÏ–ùУìúˆr{“ÆíçovvÿçgŸýú#Û?Ÿ¸…¡7­Q„^("WY¨P„Ú•vo$»1ĆR­Á0rŽŒHhZÿjíK­µ>ÔúÐÚ©Öc­‡Z—ÖB­¾V«ÕZsµj­òÓV£ì²P ²çœúB¨•ÂhÅ:Ź©1ýP ½Öö›‹¸•!¶Fk_JùRÊ—ZK9•r¬õXʡ֥”PJ¨Õ—âJÑZµù± íØ]lW ïê@Ö¾VŠ`zíÆÚTÈ]¥õZ[ãÌ÷‡ЭQëc)_JyÌù¡”‡œO¥r>”²ä¼”âs¶R,gWŠäük$œN AHB²’”,ãTÞÏ%fC!w•fq*…ˆ$jÂõ¨¥Ö‡Zs~Èù1çSJ§œ)r^R 9ûœ}J.g—’þaÅZ()^ˆB¢’tÌ~>jñól•ÞS3uÓ9³2´©5j}(åÔ÷>Ƈ”N)c<¤´¤bô)YJ–’ƨ)ñÓV#ëT£‚ÓA#9¼à…¤„NÀg“¼?még«q:é3*¡Ÿ´Fk§RŽ}ïS:ÅxŒñ¸®‡—CŒ!F‹Ñ­«‹Qc¼Ã~ž:4L°ÞƂ⫲8VÇb,™èÇa çÝé$•æf¡mrkÔ:¢6çcJýñr9¬ë²®a]ýºúuµuuë*ëz— ©\‡Ó1;ÁÜ °öV”r1Çaösr¦xj™â¾L×uN?1v‡µ)b<¬ëáréór¹„ËÅ_.v¹¸ËE/½\î# èfi~äí4Ã÷GDޏïFíNå×ÓI¦lÍ’ ¥5j]j]zÎIi‰qY×årYÎçÃù¼œÏá|öç³].î|ÖóYî‰Ñ^uˆà*¸™ì ©žyR™Ý¨Þ)ã\+ólÕW¥L‘SZ£µPJè9'¥cX×p¹„óyy} ç³}µ×W÷úªç³¾¾ÞeчêPAmÖ¬]GÄŒ\g/­w£zG¤ už­ ¥…Ü ÔÖ¨Õ—Jñ9û}Œa]ýåâûÞ¿¼ø—ÿúj//îõU^^î#àfoK‡ âÐþÐVG­U×ùمݺQé½þ‚¯ø::µ]Oq\«Õês¶œ}J£­«¿\¬ïýË‹y±çg÷ò➟õ— ˆ 6^VPE éjÇ. ~va·^Zïç4¬ŸÊ+©RÚ$Ù¦¬WŠ¥äRê³{|÷{~vÏÏöü¬ß¿ëóóuÀVV·nØ7ˆCºJ³!ÔF|vµ]»Q¡±Tò<¶N µFk®ÍyÔÚuuëÚsŽ{}Õ——±÷ß¾¹ïßõû÷»,°=YÙÙEü A Œ'¹m>1è]Ø}7ji£§ÐO†•@­C¥õZ£®«\.z>¨í{ÿý»~û&ß¾ÝGÀ횺6çkkn>P ó¤Ãxb0ú_ìÐ3z ÊF€Ö¨UºJËYR"FYW¹\ä|–µ//òüÌ÷ïòí›<=É^»Ü^±‘öÿ»‘ì½lÌ‹ãà9ãä9 ýÇSÿ¼¹û_øæîo¼þyùû¿Ý…þÒüv^]IEND®B`‚xcftools-1.0.7/test/answer/Subtract.png0000644000175000017500000000307010373710220017770 0ustar makholmmakholm‰PNG  IHDR@@% æ‰ÿIDAThÞíšKŽë¸†?>dW?.Œ‚Œ²ƒ,0“^]V-dÚƒ4|«ÊÅÇÉ€¢Š²d[ô-£ÑK- \ÿÇÿ’"­xr‘g|­R*w4òò§Pë¾ó¯æo:¸ÖzM¦@=ØqQ/`@i Ä0 ”C=Ëɇzí0Uñµö2< ˆG<Ñ”G•Éø 9pÁ`ÊZV¦Ñt¥®«gLv $O è€ò„J}üt*mPæ@*•uGV×’é)’!B@"H±¨ÿœuàƒ7Eª(«U^ë I‘˜ "‘”Æcÿ,JN;=î…¤šad>ØË'0š"‚$bBZH‰0Yqª2øYy^RÓ«èG{ñqå¡€ Bˆ%(AK%Zž ×é‡]jOª7u·Z·Ø*ùTihP¥ê׺£{€ûJݯWr» À€®tÙÊë CWí M´Ø"·{)nä‚Xa´3´ªÈ=w`ÈuÐİ€Gl5ë©j"×€SÚùéÆF†õ»[êÈVÄ fr Ç3[î?˜jÂNÆÔš²É¹°…áR}wG}»Ì73€)¢§ 2W$º€{ê¿ @æ0¦•¹p›a¦ÞÞWßBÓ²Ÿª6~ìbÆ0‹wn0¬?ŸP; +]H•Üñ^¸»›f“úv˜ï(k7¦p2¥O3ÃÅðó™ö €T2Ï šFõz«úoP‹]ÝÅþ>m^}Ý`³úöRóŘª/W¶û- G8ªõ9À|''óç«ýÍ GÚÔ? ðœ2úð€—²P°`À–Ž)uÙÊékwwn59ÛÿèPðwzóq2(:Ä£ bÀ шEi’\{ \«8dǧìéó!  ,É‚E:$÷5É"†´MºÏc?´2LwC¨㩚’…HòàG€Ô‘,É"–Ø!†xOz˜"ç ‰a;€ HBòaSÔ!žd‘Ž4:bG²c®Kuܯlghr@ÒÈÂxÜ'žØ‘µIKäÌþ l«éeëbÓ: ‚ (|¾9gH‹’ðÆŸˆx‹ËŠH?PÞùçÝÈWÏþÅ3ÞˆŠÏ´é´?R_h/Ôê'æOÔG¦Gæ¿9Þ¸G賡ƒ?¯¾ÒÃñÚípàpx¸j‹xx5 ¥‹€‡åo‡ÃáOPÅŒ”HIr¶RÒ0”qŸŸ‡”ŠYIÀ@¿Zîß Š™æ¬¥h)6 yÇœ³¢ZT³jWÿÿ.¾‚frr@‡!MSžç1ç!¥Auq@Ä@n GÈLrî&¤a(µŽ¥ )õòg».B¿tTQ•”dÕ¹µîÀÒ"IDE¾>`ÞŠ)i)V«ÕZÜÇR³bVTÓí:°îœ¥V-%µV".É·Þ}JIs¶Ö’{†K„TÓMBçy gq—ƒ CΣ٠Rº·¡µî‘à]9pî‰PH"Ed,¥¤”ßG˜áÞÕ›ˆ©Õ±”l–ºïc1‘d–ÍÆœSJf–úÉ[Ÿ@DTUU“{Ii,ÅRRUS5½õy@wQÕ”’{vsÖ”TUDzùoµ"Q3ЋÈcÎb&=`ªœÔߤ«[+ƒÆRH ³õ?Üï‰ïw€;Ààp¸Üîw€;Àÿ àrG¶~®ñB=˾Ÿd}qÄ'ÚD©3óÌT9V^¥‘ä$ÇÕ½a€C…Žð Opxzâù™ã‘y¦VÜ—/ûòÙË÷$ˆË"N'ƒpèç &|Zºú©rl¼Tr#·E½² ¯Ú à€Ö®8ÒâRæ.Úq¼8á C4pœ˜ˆ‰6_8VÊJ½:êˆ_dÝ×?é@œ²q®qß;îD[Ô÷͉Ÿh3mfž™ë¡ÔH m'õ§K¶/˜^Ehš~Ö5ÀIt88îÐïÒ+Qq˜ñ_90Í+Ö0GVê=hœºìm"ôB‹KÉ—ª÷¨4hx[^DˆJ«ÄL#f¼ÒfZ¥ÎL•TI ­hCÚr1<¨¯þë©~‰Í"Ý¡Ñê  â]zΧVæ™T™*V‘•úpÜ©ÁÌg€ö¹¯G¡Öhíz|ÉL8¾Šû˜ºT»·­é§~fhXEë¢/î´¸¨ŸÞ¸‰Û)B笷Ezß·i¨Ç «oÔÆÜЊôÒVhKZ/?Lqz¿åË&¾\×Äë¥Å‘ôoذ؈1¤¢†UR% E„a Fc Fg„QÏ+Š}ñ9C ìáápàñ‘§'rÆ ÕeñËåÏoØô€­zÀC+ª˜’„,”“úMœ6a#ŒÂ6k€þdi8ì÷l6 9“Òõi5 éjÒoŽB¢ˆbB2+€`l²í›°¶ë5][ìàa·»˜]Vy¯pà‡ç[æéÏë“e¹C,gçì”­°¶°{KFÒÕ31Š *$YôN­²SvÂ^Ø ûWö€Ÿëtõo!L0ÈAJ08£³1¶Î¶±WöÂ^ø ì¿ÕÄ—•ò³võ¯Ñå¤ 9:@c4¶²SöÊGøÞ8BWßt%‹Å)ÎÐ›ÆÆØêRûÂGáãGèúF]I‚ää3ÀIýâ@€‡o9ðzú¾÷{âßý‘·þ‚ûËßÿ÷ý nÌ]ŒçöIEND®B`‚xcftools-1.0.7/test/answer/burmid.png0000644000175000017500000000035210366755730017504 0ustar makholmmakholm‰PNG  IHDR÷Â¥l3PLTE™f3JjGƒÏiÜÏÂ{ó{óóó³j){nJ%óójƒÏÂ{óóó{rmarIDAT(‘µÐA€ @Q˨ԴîÚB”T˜výí†c~nÊÍ5!™lN![ZXW•ªmÔŽ9Ì? rLþƒZc)ä?è5IlaØÕ˜F™Jd!´'WÊcJéÄ.ßÖYOl ‘ÑØH ª¦›Bp<Éû‚ørIEND®B`‚xcftools-1.0.7/test/answer/comptest.png0000644000175000017500000000056610366755730020067 0ustar makholmmakholm‰PNG  IHDRy÷º=IDATxÚíÐ 0  6¹Ë»‚’qíxÀ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€€$é|òô¨zpIEND®B`‚xcftools-1.0.7/test/answer/comptestB.png0000644000175000017500000000126410366755730020165 0ustar makholmmakholm‰PNG  IHDRö{`í{IDATxœíÒ 0„°ûdþ5OH)¸mWno»ÅÕ¸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €k\à׸À5®p €kÜãvü#Ëñ”IEND®B`‚xcftools-1.0.7/test/answer/crisp1.png0000644000175000017500000000051310373714513017412 0ustar makholmmakholm‰PNG  IHDR³¼MEiPLTE-<KZix‡–¥ZZ´ii¥xx–‡‡‡––x--¥¥i<<´´ZKKÃÃKZZÒÒª¯Ùè…æEIEND®B`‚xcftools-1.0.7/test/answer/doodle.png0000644000175000017500000000105710366755730017473 0ustar makholmmakholm‰PNG  IHDR¡¡•ŸMõPLTEîoä~3 tRNSÿ[‘"µÖIDATH‰íÖ1rÄ P{((9Gáhøh>Šà’‰ABh7q•d&™ìó¬ýXì²ü_7Êç˜ÐÞzŽênÍ£†[Ë¡êx‹Xõ’¸Vo Zv¡T>΂&Uå㨜´¯"DP5¢ª¦zI½Z<©™5A>©'Ì{›ÔZüar¾}ŠrAA½T[࢘œÉpq\üzñ•N{­m‹Y—'U ²oÕ©j¨ùןֈ”¯í[†kìo SC/;S«j fhûî[ÙËNj˜º®ŽµHRÏziÑÛéßci1pWl‘g‹žÙ0Z|¯ØÊrûp‰`-D™t¯)/Š{­-D×Z›}mÓ`‡6ØþZVçû¿(յɯZ‡+åZ¹| á±÷¹öØö® 4ݳïºC”´ôÝ}✩qášÜÑ,ÓÌ šU½¤:UaQ“Ô•­)é¢k¤]ÁöPÀebs{¥Žö`¯Dˤ…`z’âBG ¸ìˆð¡.ÂÖucšð^ý`YûCÄ!DU ì äS¢U ¥(-(°RÑðªºjT]U­g ª:UÇ_ ô¸ _®ÖûO_þn͵¨û×Q!‰ØîSõ¹=©Ž^ßi-¾9>®¸·rÀIEND®B`‚xcftools-1.0.7/test/answer/gray.png0000644000175000017500000000327510366755730017173 0ustar makholmmakholm‰PNG  IHDR¡¡Š:€j„IDATxÚí\»j$W­*µÀ 0‚eÃYØ|EއŽÌ~†Âþ çþ ;\çN&Pj«P˜5Æ å §[ý¨{ëuç5“ìj¦N×éºïÓgê/T>oŽ_QËQ'°o<0®;ù7‚·€")F‚ )ŠÈ8ERð”`œ¢Þ?{†ÁÏ rxMáÓ dñµФ@ÀE‚@_f#˜")˜Ws„—¢eŽêc(–b ƒ¯b)”Bª€„GŒWp¢Häk<²|;–š UªÀ ω ŽQäïKåRã]D¨¡b­K¼•`- yGd=Áï XNLÎIC«À‚"b¬‚“8òÍkz‚)ž™9Þ‡K «-Èâ—äIaKÄ—`䈵V ‹ŸG’=…=A _¸12{NLY¼Îи:x(ðŒR,%VÅø™•⫃kêöÌó`2¥ˆT ‹×NRÄðŒëh2¤ˆV ‹×îRÄøñ<9Dîv¤¦ÈT ƒŽš"ÕDnüó1wÜÁ"@’ÂÞð½ðD¶RG_n˜"öZ¶zÖ—«¢Égÿa¨†ÿ{ÿaÆÙ¦í÷“xäÝzÿa oÙ9¤ý‡ <.FÒÈÿ!fìSðV׸VåÓþÃÖøáÛÙ˜ßò¾$ÿaK¼vö&ªx*þCõ6ÿ~s1(ê?lª/VÁaÿ!¿(ÿ!«;‡³ÿ°Ž?û_’ÿ°ŽnãÞï`5ÓæTÖxÝÈUUú“cõè€!T‡TÆW¯;|X©"ò ´8ÎŸéæ¾hô˜Ä—÷‹»NÙ©Ó¼Ž<òªŠetn,›ñ‚ñkþ–uïéåhÆK+Éœ"ÈD~>Ô°›#Ê$ͪ(;NQú²WÁqmäè[Ö ´*ër…†Øç‘sxùB\ÜÛ(eÒçž0~q§,ïQ?ò+õÇ)Öi•…=¶uyO®3`é+Š]`:aÃørî͸¼vŽéªvfçÌÅ_SÏËf›åHâ‹K;ï4‡`·s¤ñ\Ýé$•+È}õ ß695…sÿXI$*vqÛïIEND®B`‚xcftools-1.0.7/test/answer/huetest.png0000644000175000017500000000046410373720304017672 0ustar makholmmakholm‰PNG  IHDR (¨÷«rPLTEÿ™ÿ/™ÿÿÿDÝ DÝ` ÝDÝÝDÿÿDÝÝDÝD`ÝDÝ Dÿ™ÿ/ÿ™ÿD ÝÿÿÿÝ`Dÿ//ÿD`Ý DÝ™ÿÿÿÝDÝÝDDÿÿDDÝ`DÝÝD ÝD`ÿ//ÿÿ™Àvy}IDAT8åÑI‚@FáVTćnœÁû_ÑWÉïImüV•ÔÛT*™ÈT2 NÁ sYH¯`‰+YË[x;ì1&°Ã†%¨ªºþ=ÈæGüKpÂÄhë”Z\qÃРƔƦÏàŽžò’7:x¦—tâ|‡xV‘¼[tIEND®B`‚xcftools-1.0.7/test/answer/i255t.png0000644000175000017500000000303310366755730017071 0ustar makholmmakholm‰PNG  IHDR@@·ìPLTE3f™Ìÿ333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌÿ3ÿfÿ™ÿÌÿÿÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌffÿff™f3™ff™f™™fÌ™fÿ™fÌf3ÌffÌf™ÌfÌÌfÿÌfÿf3ÿffÿf™ÿfÌÿfÿÿf™3™f™™™Ì™ÿ™3™33™f3™™3™Ì3™ÿ3™f™3f™ff™™f™Ìf™ÿf™™™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌ™™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿ™Ì3ÌfÌ™ÌÌÌÿÌ3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌffÌ™fÌÌfÌÿfÌ™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÌÿ3ÿfÿ™ÿÌÿÿÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÿ™fÿÌfÿÿfÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿÿÿ """(((...444:::@@@FFFLLLRRRXXX^^^dddjjjpppvvv|||‚‚‚ˆˆˆŽŽŽ”””ššš   ¦¦¦¬¬¬²²²¸¸¸¾¾¾ÄÄÄÊÊÊÐÐÐÖÖÖÜÜÜâââèèèîîîØu=ÈtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS÷%ÊIDATX…Ý×Õ¶P@ÁK—tKƒtIHw£t7"tK·Ò ’J(ÝÝ Ý"J(Ý ³ø…ûvæöû ! a Gx"‘HD& Q‰ÆgD'1 u ±‰C\âŸ$$‰ùœ$$%ÉIA)IEjÒðiIGz2‘Ld& YÉFv‚ø’ä$¹ùŠ<ä%ù)@A Q˜"%b§%)EiÊP–r”çk¾¡©De‚¨BUªQÔ¤µ©C]êQŸ4¤ Bà[šðMiFsZÐ’V´¦ ßÓ–v´§At¤éBWºÑôäzÑ›>ô¥ý B`Ä`†0”aüÈO g#ÅhÆ0– Æ1ž Ld“™ÂT~fÓ™ÁLf1›_BàWæ0—yÌç7~g YÄb–°”e,gA¬d«YÃZÖ±ž ld›ÙÂV¶±!°“]üÁnö°—}ìç9ÄaŽp”c'œä§9ÃYÎqž üÉEþâó— Bà W¹Æ¿üÇunp“[Üæw¹Ç}ð ñ˜'<åžñœ¼ä¯yÃ[ÞñžO×€À‡P uà#ÆIdItp)'IEND®B`‚xcftools-1.0.7/test/answer/i255tt.png0000644000175000017500000000305010366755730017254 0ustar makholmmakholm‰PNG  IHDR@@·ìPLTE3f™Ìÿ333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌÿ3ÿfÿ™ÿÌÿÿÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌffÿff™f3™ff™f™™fÌ™fÿ™fÌf3ÌffÌf™ÌfÌÌfÿÌfÿf3ÿffÿf™ÿfÌÿfÿÿf™3™f™™™Ì™ÿ™3™33™f3™™3™Ì3™ÿ3™f™3f™ff™™f™Ìf™ÿf™™™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌ™™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿ™Ì3ÌfÌ™ÌÌÌÿÌ3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌffÌ™fÌÌfÌÿfÌ™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÌÿ3ÿfÿ™ÿÌÿÿÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÿ™fÿÌfÿÿfÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿÿÿ """(((...444:::@@@FFFLLLRRRXXX^^^dddjjjpppvvv|||‚‚‚ˆˆˆŽŽŽ”””ššš   ¦¦¦¬¬¬²²²¸¸¸¾¾¾ÄÄÄÊÊÊÐÐÐÖÖÖÜÜÜâââèèèîîî ìCJtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSˆ¼S×IDATX…Ý×Õ‚U@ÑKƒC©4ƒt—t§ tw ""ÒÝ­´RJwÇÐ ¨€¤ Hww³¾ã¬Øï; E!*шN b‹ØÄá>$.ñˆOÂÂB$L˜ˆÄ$!)ñ1ŸŒä¤ %©HMÒŒ@xx:>%=ÈH&2“…¬d#;9ÈI.rŒ@ž£)DaŠP”b§%)E0¥K—¡,å(O*ò9•¨Ì|IªRê#P£FMjQ›:Ô¥õi@Cј&4¥Í F E‹–´â+ZÓ†¯iË7´ã[ÚóøžŽ#ЩSgºÐ•nt§=éEoúЗ~ôg F`РÁ a(ÃÎFò?2ŠÑŒa,ãO0&üÄÏLd“™ÂT~áW¦1Ìd³ F`Μ¹Ìc> XÈ"³„¥,c9+XÉ*VŒ@DÄÖ²Žõl`#›ØÌ¶²íì`'»F 2r7{ØËoüÎìc?ø“ƒâ0G8J0ÇŽýÅqNð7'9Åiþá ÿòg9Çyþ' .r‰Ë\á*׸Πnr‹ÛÜá.÷¸O0<äyÂSžñœ¼ä¯yÃ[ÞáYC¼ëÂò1 hIEND®B`‚xcftools-1.0.7/test/answer/index255.png0000644000175000017500000000240410366755730017565 0ustar makholmmakholm‰PNG  IHDR@@·ìýPLTE3f™Ìÿ333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌÿ3ÿfÿ™ÿÌÿÿÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌffÿff™f3™ff™f™™fÌ™fÿ™fÌf3ÌffÌf™ÌfÌÌfÿÌfÿf3ÿffÿf™ÿfÌÿfÿÿf™3™f™™™Ì™ÿ™3™33™f3™™3™Ì3™ÿ3™f™3f™ff™™f™Ìf™ÿf™™™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌ™™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿ™Ì3ÌfÌ™ÌÌÌÿÌ3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌffÌ™fÌÌfÌÿfÌ™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÌÿ3ÿfÿ™ÿÌÿÿÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÿ™fÿÌfÿÿfÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿÿÿ """(((...444:::@@@FFFLLLRRRXXX^^^dddjjjpppvvv|||‚‚‚ˆˆˆŽŽŽ”””ššš   ¦¦¦¬¬¬²²²¸¸¸¾¾¾ÄÄÄÊÊÊÐÐÐÖÖÖÜÜÜâââèèèîîî†ÐÍ¥ÂIDATX…Ý×ãÚ€á/Û-ÛX¶µ°l¯—moy¹–mlq«­ZZÜÒ²mÛ¸º¯Î¢÷>€çÿB(B†°„#<ˆH$"…¨D#:1 @ &±ˆMâòñˆO’ˆÄ$!)ÉHN)HI*R“†´¤#=ÈH&2ó5YÈJ6‚ÈNr’‹Üä!/ùÈO RˆÂ¡(ÅB 8%(I)¾¡4e(K9¾¥<¨H%*S… ªRêÔ &µ¨MêRú4 !ßшÆ!ð=MhJ3šÓ‚–ü@+ZÓ†¶´£=èHèLºÒîô '½èMúÒþ ` A âG~b0CÊ0†3‚‘üÌ(F3†±Œ#ñL`"“ø…ÉLa*ӘΠf2‹ÙÌa.AÌc> XÈ"³„¥,c9+ø•ßXÉ*V„ÀÖ²ŽßùƒõlàOþb#›ØÌßla+ÛB`;;ø‡ìb7{ØË>þå?ös€ƒâ0AüÏŽrŒãœà$§8ÍÎrŽó\à"—Bà2W¸Ê5®sƒ›Üâ6w¸Ë=îó€‡<"Ç<á)ÏxÎ ^òŠ×¼á-ïxÏ>òùZ¿üÀ' oèz]ØZÜIEND®B`‚xcftools-1.0.7/test/answer/index256.png0000644000175000017500000000240410366755730017566 0ustar makholmmakholm‰PNG  IHDR@@·ìPLTE3f™Ìÿ333f3™3Ì3ÿ3f3fff™fÌfÿf™3™f™™™Ì™ÿ™Ì3ÌfÌ™ÌÌÌÿÌÿ3ÿfÿ™ÿÌÿÿÿ333f3™3Ì3ÿ333333f33™33Ì33ÿ33f33f3ff3™f3Ìf3ÿf3™33™3f™3™™3Ì™3ÿ™3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿ3f3fff™fÌfÿf3f33ff3f™3fÌ3fÿ3fff3fffff™ffÌffÿff™f3™ff™f™™fÌ™fÿ™fÌf3ÌffÌf™ÌfÌÌfÿÌfÿf3ÿffÿf™ÿfÌÿfÿÿf™3™f™™™Ì™ÿ™3™33™f3™™3™Ì3™ÿ3™f™3f™ff™™f™Ìf™ÿf™™™3™™f™™™™™Ì™™ÿ™™Ì™3Ì™fÌ™™Ì™ÌÌ™ÿÌ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿ™Ì3ÌfÌ™ÌÌÌÿÌ3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÌfÌ3fÌffÌ™fÌÌfÌÿfÌ™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÌÿ3ÿfÿ™ÿÌÿÿÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿ3ÿfÿ3fÿffÿ™fÿÌfÿÿfÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿ™ÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÌÿÿÿ3ÿÿfÿÿ™ÿÿÌÿÿÿÿÿ """(((...444:::@@@FFFLLLRRRXXX^^^dddjjjpppvvv|||‚‚‚ˆˆˆŽŽŽ”””ššš   ¦¦¦¬¬¬²²²¸¸¸¾¾¾ÄÄÄÊÊÊÐÐÐÖÖÖÜÜÜâââèèèîîîôôô ¸ôx¿IDATX…Ý̃ÂfÀ¿–¹l­ZÚ¶´ì‡Ü²†¬eÛµ-ײ[X¶¶ZÞ²–í{Žïà""ˆDdÞ! Q‰Ftb“XÄ&q‰G|"Þ% IDb’”d$')IEjÒ–t„¤'ï‘‘Ldæ}²•ld'ð!9ÉEAnòð“—|ä§Ÿð))DaŠP”Ï!(FqJP’R”¦ e)Gy*P‘JTæsªBP•jTç jP“ZÔ¦uù’¯øšo¨G}BÐF4¦ Mù–f4§-iEkÚЖv„´§ßñ=?ð#éDgºÐ•nt§=éEAo~¢}éG0A fCÆpF0’‚QŒf cÇx&0‘ILf S™ÆÏü¯„Lg3™Ålæ0—yÌç7°E,f K !XÆrV°’U¬f kùu¬gùƒMl&„` [ÙÆvv°“]ìf{ÙÇ~pCüIÁ_æs”cç'9Åiþá_Îp–s„œç¹Äe®p•küÇunp“[üÏmîBp—{ÜçyÄcžð”g<ç/yÅkÞ@ðG‰øjËJ‡-IEND®B`‚xcftools-1.0.7/test/answer/index4.png0000644000175000017500000000047310373714730017412 0ustar makholmmakholm‰PNG  IHDR@@·ìuPLTEðá68Ò--Ã<<´KK¥ÿwZZ–ÿpÿiii‡ÿ-bxxxÿ<[ÿKT‡‡iÿZM––ZÿiFÿx?¥¥Kÿ‡8´´<ܘ…ÿ–1ÿ¥*ÃÃ-ÿ´#ÒÒÿÃááÿÒÿáððÿðÿÿÿÿÿäFB‹IDATX…íÔ1€ …a’.\¡÷¿¦Q¢FZ¶!yÿl¿éa*Á°È57s+üT÷¯0ˆ¾‚ j7À57ÀwN€Y–Ï7FÀºD ˆf–®Â@ÜO¾Æþýv$±# wh”·`? ¼ƒøµ8;&Ù|J0Ž%UIEND®B`‚xcftools-1.0.7/test/answer/indextest.png0000644000175000017500000000070010373713751020221 0ustar makholmmakholm‰PNG  IHDR@@·ìrPLTEÿÿÿÿwÿpÿiÿ-bÿ<[ÿKTÿZMÿiFÿx?ÿ‡8ÿ–1ÿ¥*ÿ´#ÿÃÿÒÿáÿðÿÿððááÒÒÃÃ-´´<¥¥K––Z‡‡ixxxii‡ZZ–KK¥<<´--ÃÒáðCoæ &tRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ85¥×IDATX…í×¹‚@FáQdsaQAeQxÿWâoBEÌ¡‚“Ür¾bŠ;cŒYµË|ú30zú‡f˜oÖ·í¸ž¿ÝíAÅÇÓ9¹¤×,¿ÝEYÕÏWÓvw° 0,Ü,ÀØàØ8N€‹àáø8[œ€®º½²Çõt7œ€' Ä ˆpbœ€#NÀ 'àŒà\pRœ€+N@†ãÜpî8œ€' Ä ¨pjœ€'NÀ ' Á hq&5àÿç©À–LÃì!ÙçIEND®B`‚xcftools-1.0.7/test/answer/masknoalpha-b.png0000644000175000017500000000012511223345374020725 0ustar makholmmakholm‰PNG  IHDR¥ò  IDAT™c`°ÿÀ€Œå€1º8:?ÁhðŠ Õè=S*IEND®B`‚xcftools-1.0.7/test/answer/masknoalpha-g.png0000644000175000017500000000016611223344133020727 0ustar makholmmakholm‰PNG  IHDR¨âBÑsRGB®Îé0IDATÓcd€ƒÿp@¼ #Â0F¸Ñ8URÝöŠ´cda``(GqrmgÞ3ivÈIEND®B`‚xcftools-1.0.7/test/answer/masknoalpha-r.png0000644000175000017500000000020111223344033020727 0ustar makholmmakholm‰PNG  IHDRðçõžsRGB®Îé PLTEÿÿÿÿgd&IDAT×c``àZµŠ“dZµ€A JâR XÈ0 .Q(‰C È"Å!‹§IEND®B`‚xcftools-1.0.7/test/answer/masknoalpha-w.png0000644000175000017500000000012711223345412020745 0ustar makholmmakholm‰PNG  IHDR¥ò  IDAT™c`°ÿÀ€Œå€1ºøÿÿh¨ŒQÅû@'å“ÕIEND®B`‚xcftools-1.0.7/test/answer/mid.png0000644000175000017500000000043110366755730016771 0ustar makholmmakholm‰PNG  IHDR TgÇ0PLTE{óóó{{óó{ó{{{{ó{ó{ó{{{{óóó{óóóó{ªJBž¤IDAT(‘]ÊQÂP DÑEB‘P$dP€†"¡H¨…VÂcEB±R$”Ýðó’ýÈLî84ܱåNfü¡¿Ñßš‡,ËÀ20\tÏwí¹<ëïô÷ø‡ x¨‡( C  ˜ wŸ¹ç½0*…YaÁ˜ÆD"aˆD!…@<ÔÄCMðX¹÷Æ}vî‹¢°*l ;J"(‰0DÂÉ¢ØûVµ¹æEIEND®B`‚xcftools-1.0.7/test/answer/misc1.png0000644000175000017500000000420610366755730017240 0ustar makholmmakholm‰PNG  IHDR¡¡˜/„>PLTEÈ–úÈúÈúúúúú–åýåýýýýýÍú––ÿÿÿó{óóóóÍÍÍ–úÈó{Íýåó{ó{–––{Èúúåýý{åÍåÈ–ÈúÈú{ó{ýåýó{Íåý–Èúú–ÈýÍå{ó{óÍåå–ÈÈ–È–ÍåÍóó{ó{ÈÈÈ{{ó{{{{ó{È––ú–úýÍýåÍý{ååÍÈÈ–óóóó{{óóó{ó{ó{ó{{ó{óýüýòæòìÚìêÖêíÜíôêôüúüåÎåÊ™ÊÀ‡À½½ÃŒÃѨÑðâ⋽ʚšôêê{{½È••½Å½Ëœœ{{{{ŠŠÞÀÀ{{À‡‡Ô­­Ô­­{óó{ó{óó{ó{óóðŽA*jtRNSIIII¾¾¾IÿIII¾II¾¾¾ÿÿIÿI¾ÿ¾IIÿ¾ÿ¾II¾ÿÿ¾II¾ÿÿI¾I¾IIII¾¾I¾II¾ÿÿI¾ÿÿ¾üãÓÎÖèúÁR)zÞ' Vè„F7[èz%ªÿ…„I¾ÿIIIº˜ƒ IDATxœíÜ WÛ6à’ˆX\hJIHì’%”…vk×ëz]×vki»µìÂþÿ˜?I–o²Kò…süž–“è{Žd§‡XÒ¥KyòäÉ“‡Ÿ9œK‘e'> ,á,ÐXÀ´ X*¹ ‹‹–°œ å!.Rc¹¼”ð'ybM`9­^,+pAT!^3ÖjË53)11ÈGŒš†©É;J% ˆ¦]Öˆ°–°ºâ3³ªi˜XH^HÕê•P t£À䉡â*i­–°NÎÁ@â*=Ki ëÖE@\¥ÿšo–éëöU|5 hÖBѦ$\[k4\ɺó›f³¹±‘²ÐKt±°•†0hT½@ ¶’6nÃԳݱP–H†±ãö9¦´šBL4“Âgõ:Æ(@ØGC›½ ¼°®[Ó©GABjJLü³/<å“Í÷ñ„}z6bâŸpba•MHq„ì‚¢@9%Â*›2?ò ­±ᶈPr˜ б…À(HHˆÉß­ðÄï]@L*¦ZhU 刽kƒÁ¹c­Ô€‹Øµ”ÎV=qaÏ/´ˆÊ„R×J¯×õ-bŸ³TBŠ{Ýn×/$DžÐÈŠûœÅbBbÄDŽÐÈÐ$rV›ˆ %ˆÁB³Y¶ p¨#!$þpçÎ]œY6­øÍ[÷îÝ«#Þ‰!}¸ÉY“*±z[”è\½}ÿÁÃG"××a•~Û+Ô´5 ¡Ñ!|òôÙó/~…èxøë%j a¡h'ÚÂûO¯ß¼¥ ôÛÈOlH‰¶ðÁ3rä×ßè6òe…D[øð99òî½Kè&J ň¦½ GN>¸…Î`rB!¢)l’ê_’#?y„HP„Øj5©ð÷?^ÓÏ_„krB«¥µÑÄÄÓSôêÍŸïN>~þ ù…«vJ £7@xjú̼ýûý‡O_GH‰ üG^ÍX(ÎÎ|*âüëüöƒ¥Ç_‹’ÂÈÄÂtÊÙòÑ/¢)üZ”F½\¦dßQžÐ³±ØT ŒFÄÛÔ•¸ÛÓx„Õ T!ŒDÄBm&au¥¨Jåd`­Æ'ú€eÂhDØwò‰¤+ª€QŒS²½¨Æ1^uøèWÔ g'Ö–— qq1HÈ€ »0бFŒxKYž°g0–Ë奥ùùy¯:‡7ñ²¥³ªƒfCšÄùós ºú°è&Èñg6–aÛåósúdºctéŒø ±gEš@ú´¢µ¥u Í·ËØ¶1XÉžP©X»– ÿ‡3ßç6x™?H#($iÛÉ4.Oó‘7I¬Ê¹­IEND®B`‚xcftools-1.0.7/test/answer/modeA.png0000644000175000017500000000063210373710333017234 0ustar makholmmakholm‰PNG  IHDR@@·ì¢PLTEÿÿÿÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿpÿiÿ-bÿ<[ÿKTÿZMÿiFÿx?ÿ‡8ÿ–1ÿ¥*ÿ´#ÿÃÿÒÿáÿðÿÿððááÒÒÃÃ-´´<¥¥K––Z‡‡ixxxii‡ZZ–KK¥<<´--ÃÒáð¢¢p^6tRNSÿÿ-uóýµ]?ŒÀzÀöïü?0ùAG¬UþØIEND®B`‚xcftools-1.0.7/test/answer/modeB.png0000644000175000017500000000075710373712234017247 0ustar makholmmakholm‰PNG  IHDR@@·ì¢PLTEÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿwÿpÿiÿ-bÿ<[ÿKTÿZMÿiFÿx?ÿÿÿÿ‡8ÿ–1ÿ¥*ÿ´#ÿÃÿÒÿáÿðÿÿððááÒÒÃÃ-´´<¥¥K––Z‡‡ixxxii‡ZZ–KK¥<<´--ÃÒáð¥öÑš6tRNSÿ-¥ºã¤!Mi†©SêÒ%5)TWµÈ;©ù'RWœ5gM(г.ÅYá «*ÜjW,õskÌ­9¶Î¾uµ­x²êR‘üÖò–S,'[þ›å ,We¹R)«—²#)»”²s)§!儤œš”“¤Öt©5qj­µV†Z«E©RÕ;â «üä.iß©^𕟩Yð±v“{s`vœ‚Ê?µ£àKa+}ýIEND®B`‚xcftools-1.0.7/test/answer/odoodle.png0000644000175000017500000000201411223232347017627 0ustar makholmmakholm‰PNG  IHDR¡¡Ò?7% PLTEîoÿÿÿ´ñU¼tRNSÿÿDPÖ!¯IDATX…í˜1²Ü †Ùqãž9ÁŸÂ“2• ãÂ7ˆO±GH‘í·ñÌ>N™5 Äó›W&Tköé—1ó¿ýoÿxs©}ZwÍ ›Û`ç΢˜lÛ·˜œàƒMó”lMÚ¹³“ZJºñ4©›wu;)èS¤f¾;MÖ‚ô8qR‹Ó—HÅQ›ÿËQP-dC‹LžÚ ƒ÷þ½% H[ƒì¢cÞ?㼺øKøgððô=: “ךËêï-I&˜Žã6ßptîý-[üÞX÷`;Œ[½N^=¶à^žj o(S×wõ )^šã\¼FöOCH·í ‰‡ ½Ì+ÆÉÓñv½Ðë“‘Û]$û}~‘ë.’Dyttñyõ†‘®ÉÊxpt•Ⱦî<È¥~´A$ŸY»?PÖË¢ 䯭£™ÈŸÜQ&(’?89°ž@Ž\w=’¼Ÿ$³ÅÞÌ.Èú.=‘Ì—žH&à<)¬„DÖsœ'*ÙÓÞëÎ7ë”"ª¨|Ûy®I»ÞyH$ èk¯¼óT%‘Ö­BRƒT†È—ÈMHj J¤äÔ$¸ýH0òFz€œ[dÈæ)£Gáy gÈX ì@ŽDh áÅ[JÎ:é(YÌw0°GÏn)dŽ“Íäí“dts¹gr&ä1îzCn"2«w’–^ÈK&§\zÉdäTŠ´Iù§x’4Ù<$m"ñƒL:tEêÌH"/È(‚9‘…™r¤ä¡¸É ^CWH0DŽ@‚£3ü2™_m‰“ɹdñˆÔŸ 'Næ½G$DZBŽ ’}Œ@æ]J ™Äæçš$»VŸ¾“·BŽŸ!Kzbn&Ï`l!‹£3'gƒ#¨›¤÷*îð¦m2ȬɲKvPzÂ_ÓÑÈVGjºAÔ¤ ™<Ê{^O'pïc&;b<0“(gud䦞ÁañØÓ$HZå•q™Ü•CS®Ö@ü¢’7ø%‰Ç¯G¯¥RG7…¤µEô[qe“"º>Dª>¤sCuÆI"Iz“yáÜPŸ1’&¡Rf%y$…:Úaå¦Ó,®äü}fè˜N|Tλ!ttÿ^å#|ÐIÉí.á=wÓÉ-Ç š×î/ŽS95¾+䡾V®/óܸH¾‚Oî’Æ?ð”ѸLöišèåÞ ÏÅm¼ÑÉ+LäÖ<½Lš!¡kž]»féâÍÖæÁvãvßnµHæCÂôëbëhûà¶ú í/ÓwüFJŒõUIEND®B`‚xcftools-1.0.7/test/answer/tiletest.png0000644000175000017500000002053610366755730020065 0ustar makholmmakholm‰PNG  IHDR¡¡ 3Há IDATxÚíp”չǿ»ïf%Š@½%6Üè ŠÅn³t-3à\»±Õ3©ƒ§mz›±þ¢P'ílµƒ3N/Í•$¶Ù¹½Ž02†¤¡Ù5îÓ´” ’5’\¹`ôe_öþqvß=ï¯óþÞ öžáe³ïû>ïùœç9ÏyÎ9Ïq¥Ói8Y\.—£÷ÿ;”ߨH®t:ír¹œ®)çü¿üšp“¦ätkµ]èï§³ü…2ô#ÜÓ¹š€% ÿÊÂ,‘ßiáÝÓ¹š-˜še»R0ç§g¡Ÿâ¾²ª‰]AW®üŽJªI\éò;ñ Z5MO•Ð2ê|J~žï•}·FøR©ÏóÂ7£­X[1ÂÿO_\¿¸§§'óçþ ɽ*8“Õ¨VŒjéåeï2ÊxF*˜2ôKþÏq :…a™OÌJtE˜ûúúü~¿üoÍÑfúûh4útýÓTÅ(Ô›&iÉ‹»Ø!ÿ«]1àx2.ùcAÅ›{½^EÀrÒ¦Aæ3ßÛK©«¨$“aÑè÷¨û?–|C~\ã­1‡ÙcÉ Àr´lÀÙ²€×Û¢¦Þ\CƒEЦ1“nBóZ¾·Wf•st)f{Іš.mhàã|4cRj¼5†0Ëß×¥§ ÈoÔ+ÒMð ­hUQPNL©u‹Ü~¾Ë—-"4Y¸„}m°³0ÏÇ“Œ'̤|0øiÌ&Xì®Ïùê€ ZRÔgK)Ž«SÆœLÊ54XägE›Õ.ìÍúJt¹;¹™¶ºµµ"¿´”]'môêêD•Ó××§®-,iu1&F¨qRêëëéßÄb1ñE¬—™œl *z™·¼/Ë×ÀUZ„gE›u'ãö¢@VweMÛf iMÌ&Ó]ˆPï4`]c€%¤×¡ÀÀúçåfC³!rvýx„I¨&eß̲`Î`f =˜ýÌGô—v&e=·SèÃZˆWIP)ÃlT;m±ídD›PËöV“h³3MZŽY“±Ûà@F£„®½€KÑã1>Aܰ¸§÷Ù4ÎÑse‹"`Z$9`ò:¦«B±…Ú–ô’ŠÆèCíor%î®D×*`Q›å2H´™,QesΔ•qóˆ¸'Þ¬8÷ÖùÒfÇÃ!èÕ㼦ë+œŒÛ¥Áæ´Y³4j lÖæÜв¿Ÿî@ÙMVcúŽNÖ_ƒºÊcÁåÂc9™ U”Ø Ì‚‚…Ãa-(Flu8vÂÉb¿ÿάŮ¡ü/öZyò$ÊʬmÁV ±`³²×h »¥¥åÅ_ìéé‘ ”ÙêBn¥"*jR]¥¸8óáèQ'Œ6ñ@5*"_F[­x¦¡‰nµ±ïøéÓŒ¾Ù€6÷@<'€ºŠÅnc)ã¤ê›µ²5­’¸¡ã|øÖ¬*ÍÙêžO&³‰KÜfR©fë«ËZì–• mõõ×ãÌغÏ\¼hÚhkެ …¹yC”7P Æ’»\a€ÜrKæÃ¹sæúfCçé€YuêIío#<¿9Ù õ€{>s>€·ÆËUr†ÃB£6»Ó—¾ïŽ'Ä”½Ö[kD­™’L*-ùS¬y…¨Æ2+F±7$¤’@,†“Lˆ¥Í£U~ç:@ Ð`E§ÇÇåÓlÀzVg 0墲Rb~hݬ+Í>UKâ6Ó5e¦0§%4ëpwDbu úÕÝ‘/æ32††LÖ‡¹ð€„–_ý%À¬/d­ÙÁ«c.à¶6E!åÂë·µ]Ù˜u‡¬¡cs ȸ>®°€ÓØáê|…Åœ­MÇ‹ߪ§§GX0­4ØjœëË Ív&åͧë£Ñ(),`¿ßF½-5–K¯/怖¯U[Í YëÜPÉ5Tr~ÿÇÑh´Îç+`®Îg³çî˜wÌÙzŒ˜×PS!kvÙ¿iÿê«û7mJmßžÚ¾½P&Úï÷ þ£x ¿_[Ôãv“˜,U‘RæÍI´1Ã#£€©e‹e>¤RÙyó£F'['5z%ÕöQÚÖ&ÔM¯8 ¥¦¥?è÷%˜+ºTc™½#™Íµáxv]f"FIëTx¶”zOz‘iÆT6èM#‘+ûö4öâbLM™ëƒsÕ’ÝsL–«îß¿_í—Sž§$€M»¥b ®óe«¥¦ÀãÇOœ8aÆVû˜›ŒJÛ,8JÌ·´uY& :-a1“iv«W¯^½zµÇã‘JRÛKRÛìÓ±L}Nb„ìÎK¨©²ÓÚ,Wb“z …•ô¦÷ŠsmÞ‹FžZ¿—CK«µØ„Ø ø¦›nb¼Ž†ÏEîBîH?ÃimþߺrÀæ‹8dmo.˜½²-;Sž§Ôº¤¤¤¤Ä `C†Ö˜Ïåƒ/C¦6·±´y²•¡Í{ѸÝšâé¢E­¤WܨosÕGÝ&r°ør2'C^¼wÊóiÇ4Zò9«ÓÆÓJ,ÌÞ  a«…’@"“õž‹m»Ñ†jÞ–š~qójh05»˜]Iïzæ™ôÖ­† *aþˆ|˜ ¼ô±Ì&Œÿ8ýŠš¡’(ñÔÔSv®¬¬d'V†" æ›7ßóä=г˜¹:iIBFÀl0€ÛoÇáît:øÂ}øãëŒvkŽL—ÜñÓiÒ±Ü^›ô©)üKÕ+¯|!¿Viµ>X°À˜Y/c’ „h³ð¥½.»Y? J B0›fÜø’?ò‚‘Îøñ΀Q¨òÂ÷Js¾<øÓr˜kÒU*ÍÆl°IÆf:ËŽC˜9ŽÃºˆ`¢!KíÃ5˜IíC r¤yKð£—Ææ¸jb DZ7 yœ:ujÞ¼y2ÒmYÒÛå¤iÀ÷V0£6´³É-^¼X’eG‚ÙbxD´wv]„’S)º*Õ‡E oE÷µ‘H$¸c'®u7~?ìò¨Gz•“ ÆÃ™-Û>?þÔ©¬xU¯X¿þ›äÛ·§Ä>Zfp5˜¤s°y[¼FeI'+•¬šÆÙ${Ò—©Àɰh ˬüjkeÆeÛ2=_hÒ°¦E!ƒf 8a$՞ēŠD"Á`°ûÂìÙÕÕøóŸmŒ¯ˆk&—OQÀFÿ6¯NMÊuFJ¤/¬¾q:EC€Õ0³‹“eêÂ,Àf`öùêнWòe0$˜+u§Ì”ûÉ‘Hö­[ñÜspÝu™­ªöcVÈ‹JHG£Qÿ¯^°sç$?hnþI4}õÕܪÈ®‡öf+Ä`cŒ•’Þ*cV#i\Ǫ›,f1]æJN‘S¸»[,¿zÈÚ&ÌÌÝ:¾þmÛîTSBú™¡ ~¿æþ™TOOç¸6X‘2c5Õa`V„ÍÀ\SӂĆ :Sr»\‘`0(ñ“¥òãÆ…xœ)ʤ}ýß‚”ïÿ6ÅS_‰Åbuuu¿ùáeNü¾|//\©{X¡ÍX3Ô'!]ªQ3á„fý‰{3=. °$d]¸üúŠ®ƒ ¿-Þ¾â³<††"F€Jöº÷JrÓ;¹qÖ+¿Á•ô6Iđȉˆ ’½¤Iq\ØBªÉ `S+é’_2ÐSõÙõ ÷˜”`0É6þîî\iȯ•à§€˜»»‰¸„Ç.ÌR=¾R“÷ƒ‘H„6kÚòe>ŒMk$gtÛ¬ÍÂSrgñ])€³%G.j\lp·Dž1ùmÇœó«~{éJêBoÎ¥hdaI4Š{îɳülX: :¦ ím˜É5}Î$‘]ÒÍpRôÊï÷ƒä‚4².ÈùÇŒ6mB$Ó±‰;ËÁâW JÞvºÉo´Éå'oªf®¦Þ·zþ±ÓÍ\XṺä7žà§àæMxes}³=çç °f F[~Ë»%\T±1¥³ò­¸`æÏ?vz¸E¿•ža’†üfüH¡¸Á× `ªlópþ±QÀÚò[Hð#Qe'3$·> réŸtbXi{Z?`µS«”å±6-a<Œ6`ú=‹–]öƒ”sëÑfÚj9g±E²ôË?>ž[S~¶ØVæ*Ü&«)¿Ž´QÕQ–ßÚ´„• ±ÅwÑéfÈù¢³sVÚb)Èo<Áü†öžÛhZµ uÌÍG$”m`>X¿üee™Å\fCÖù9/lß¾}§OŸ;|øðèè(€ûî»ïÙgŸ%ÕbT‰¡'–™7Ìr+mËֹߘ gÚe¢ÇÇÇ=:44tøðáÉÉIÑh´ººúäÉ“©TŠçùs*>qq1½íQ-.¤æÖy kC¾Âv=4òx‚òÑüæÌ™sñâÅsê¶ÃæÁuy-žiRM+mïã2ò‹O6ÄV>Ÿ~ú©¦ò™æW\\|îܹ9s攕•‘“Ôî»ï>I‹‡8t~°+íÐÉÕ®={Ò6™•ôŠÊ'ðc+ŸéR\\ÔÖÖ¦ÞNñqQú×ñȇòòï¿ÿö’%‘Õ«W€‰•òû—×pÓ°•ÑKa‹Ç ] àÁÁÁÔ.Qþü7ïÝŒO@3>thײeßþã,P `,Î;HZ%dmtwa>1+>N¿n[·ßÝ>°q@°Jñù|[*þzhWêÐ.µ³LÈgOQ YÛ³¿9_¼Íäç²8µ+ÕÑÑ …è?ñC|{Ó L(Ügbbø6>º#º\H0/ÛHKr@xhyMÍ•$;*×Êþfê,V‚rÅR‘X`­k-¯t­ <ß·O"*=v×Þc#`~(#k{Ó µ[mÙòn׳) =1ćB!áòC»RYÌ$¶óܹٖÈÃŽýÍÇ÷©«œX_\|†ŽPâ»÷>ázBHÞ漏]¨À:½$/¼!™µaÁ‘.bbÛ¡f§;Bÿúþ041·ÀÁ¦¦&41nè[Mø†—¾õê«B+Iaó›žË$¿çãc\M¹mŒ©i ëÝêñ}û¢žžK 3äîFcXíòH㺯D¿'üW[‚@EÖPÓñmóÎþݘ,ð&vÚ€¨`†n¶lbÑ5k €HèèÈ<1<<|ë­·bó›™v'à @ ³Nd†.N[ËI/èV  1Çå'¨4®KÈN/JkÛ$W§à`z[¼@फ़ï ßC)gå(.Þskh°}€¡®ÜUUUGŠŸþ›ÚuHê€a"n£ V\L¾VrÒÓÆ³§§'(Rœˆñ‰ŸhÞøU[k)ãÉ?ú{¢Öòã:”γiìD^²z‰]€`E{UUÕ‘ÎßUUUqËÌ‚6PtÞ¬¸¦~˜&®©Ùœô|ïH…ød¼ã=Çúî ù§vïº{‰'5É: ·µM~_4õ·ûë?¬âë9v,8~ü¸ q.‰KK~l°Çã‘´yxx˜š µ™l‹*»\®´Ï'¼¤9Àò/“á¸ßï–4º2À’ŒÛÒgÆ1úxÃp<,AÝÓÓCÎ’œjËP¹Mh°Àr –msó®mŽ,ä¤ïííí—øM޹à÷ûù«¼^Ì\ ]Š˜sF{dÄ’Ó€Éù8Ø(àóçÏ ŸC!¯0Àf¼éT´HkZB³Ð˜À|,‘9ʼ´Í.Ì´B+bä"fÀ»í²×É€þÃ+î|€|Þµk—sá@J,ÁLGLmà êXZ6f3zìàînY—,±ßh¯ªªêìì´ ³CáåúðfeÀùÂ,9ÿX~\ŽcM´¡²9¬££Ã ¶/'ý:0—:ØŠY4$3¢Íª1>> ýî-°àð ¬`üõ 0kË»Hôv<ôo²k¥wþëþýD€Ë–e5åœ!Uþ«Ù£ri[g¢W±Xl’I “ìC¿Û˜Dùèú–š • òˆ<ÿ ËV×ÖÖÊ5Ø"àܪ²!Ôõ36`$¦ (³AƒI±œ“ž  ”ÉÉ^L°ØŠ€õÇd>8£Ó‚ÛXéZå;ML„B¡ŽŽÓ¶†=9é¥ó…Y³(lò€ÊùÇ©·ßbŠÆö&æ@ûŠ¥ À¤,_ðmâ¼µ£I§­Öv²Lå¤ïáÑp6KH;ÅI¶áeÞ|Ìe´¹:ßÌý›„€ ×P q¤Zòún½w –¸o¡P¨¶¶Ö~/ÚðJú &E¦FjXf0¢ÍUvkV?4a;àó;–’_ízMðÐD&.888hÛþ`K9郊Jœ7ÌÂPMˆª²·%¸ ¨Á¾^YihfÛþ`³9éÃñ¤€¹PÚ\’Ú. ±±+Jëüã{ïu°Öú&ý>…mÃ1ª­ÓÍhk¬¡Ï3àhZºcGÆÉ=¸ÅhņýÁÖBÖ±_(Ì%ÛKȇ «_ajç/(+¬“esá<H› #UÙªUÿýЮ;þÁ jVXò—¢Y³¾zç“×–_[4£hÇ;™¶²âèÊÞ›[Àð,ópJc'3ï­û8dºõôŽð¤?Îê±®X•*A‰§žšâ|º#ùûÝ7\ÍîûTMÜÏJ¥ÞÄ›Cü„I[Ñ€L å‹túx:= L¦=)¤þ5xYèKõ<ª†ùOþ @×á®wÆßa00P6lÀž=@&'=ÛQÏ}®XëZù×Bù(ÎqÌ`ÂxðƒA›~ÍŸ9N¤‘ÅXq·0ÓJ €óq6îžá¾ÚÅÎmì’œ.üW`<Áóíh·óì VoÛöÕ;î ÿN§ôTÃ,a,ˆÊ_£tuáá‡àškðÙg:ó#|2žÀË·eãPnÎ]rCÉÌÙ3ÝEîÔÅÔ…³¦NM±ñ³'-È•©’ÌxÉ3õùPÇùþª»Óµèj·K-‹"©"ÑÙ¸ÂQd2Š,ŽíìŠ9ØDëñÜ›ofüvË»"»½½]¡Uf·ȶšü E¼’^¹ùëîéÀ\w㪿ñâ7ùý#¾óhãoW>¾òÚEÿi`IYˆ…zBnµš‡ 8ÎFÌŠ£::±§ôÎííD‰;::jkk5ÖKš9-a(K­Áe+ÊÖÿr}Õ†ªY×Ïâ¼ÜÜš»rËkŸ¾dþ|Ó€é"(1€©ÐÃjÃbíx5©©ÁÁÁŽŽz–Þ:æKçÏŸ>vLþÇË©Ô䨤¢*¸ÿþûÉ:aLÏÈJƒ4½tÞBò—6jª ä†’U[V]Óõô¼ÅÅ+x ïãM–[i­ê£2gjØÑÔD¦oߨ"æógϾ÷ÆçÄ«šùK—^h}÷³‡U0‡B¡¹sçz–™9Þ„EZ=d­óøÌ6ñþÌÙ3Ë¿V.7øŸ]¼ø+ùªwƒ€ÅCòÖ=›2±ØŸÿæ²f,H{]f(Z{ë­¤º-b¾4ИøsW×'ÃÃÉsç.óü¹Ó§ÇÞ~ûPgçÅÏ>Ù×Kc®ªªZûðÚŒ²M˜Ô6UÒ\ÖE—­¤×´Õœ“à.r_uÍUr¿Á]T4cöl‹€%&€KŒDsõ* ed0W51<ív¦§ýEßýGîé>ûþû×–—͘qþìÙÓÇŽ:zô¡²X×øÏFöõV~=³¼á—©_JÜìñ‰ñòòrÓ¤¥¾·,'½þéVX嚺˜:;zv^Õ<‰{Ï_¼xæÄ »Ó?nîH^Íh®*ã2àÀó¨e‘CÙ)šöáaUU/00<¨®ÒX2Ýt(V+ ï¹ü£GFS#•ÄØòî–×/¾`™g™-Q=éêjµ£rcno·ss§rÔè½± K6\œšò ½N§?ï7ì,XéæŽdW°†­^¹r¥šNWUU OÊW41Ú¢@:‚ªªªÙ³gØ—q4O[Æwu¹H½ŒŽªýFþýh"óc_OÚ¿£xCÅ©ã==ç>ù„O&Óétê‹/Ξ8q¨«ëèk¯™ð¢Õ—œQý³°cçÀrU¦ð¬R JgXduÐ× ¯’Ç´ÇC[ýéo+³Ñ˜œ--çÊ ½«,]Š#G\é4Þ}7½t©ž+FzGij³¶ é²ê6%óçßùÈ#å_ûڌٳϜ8ñÞo,w¤-0nîH¨ñzÀ‰¾>Fˆå:Ò»²Ø˜¦áŒõ®Ò‰Yø½âÔx¨aŽkæ]\=ò#¤ídüÜs Ë+ð×sÏ鉑ð™uÛú¶ðûý >¡ÆÔ d–f¦R"/Úãyо÷åË¿0þü%K~ ¥¥%\ºt‰ã8I 3Œ477«3Î4ÕHӘ忑c&ŒÈ1ÛÉXeúqÃ~„l }rÏ“UæùL3¸téÛëĬFúàÁv†®K0/ç¼õÐr‹ÜsôGféï;GÚårU¬­ ûBÄ“‹ÝÌ'윥« 0a j~Ìc+˜%¤ÉçÏ?‡5s‘½v9—É=r2”[#®†Ù¹PâÊ,Ìkîˆx~ýó=ßUHÅUÙÀˆW}U—ËUæZ%E²’5¹û`íƒÌ%$F‘®f£>—G6 ˜±F¤ÓóÌ™ûå—Hè €}œog¨.çÒꬳ6];ú1è|9‰¤ÓÁ<Óa^#òƒôõ]–ÿòÂ… ò/#ˆD£Ñ¿unY:b5Þš@  °f%»uÖŽÚjHC÷Š;‰•Ö9iN~vá«ø ´IDAT¨Î¥¡¯ï²0Ïó.\P þ³\/>×5·«;e0;TàÉÛ×Cóѳ@—qX»Ó…㿯¯¯'ÖÛëõÊÿ:ŠÑÝÞàŽÅnùÊ-~þ›€2ƒ"`] f…‘½Z=ÚE×bŒBS —+ å*>MŽJTCh‘H$ Òb[”Y! ¥™ »jÇ® C$òI 4N«£[hù%= jÉÆê¢ï#ª;ÛÛ~æw…G46ºÔº`GÁ©›Z<ɸÀöºÊa…“‡Àæa~W²­MÑÿ*,l™âFcA~ç*šOlœ´bíLÒ 1ØòÛ‹ÙñCŠœn@Zs‹Š`•ßP 3:7jBžÿŽê‰JÌǸIEND®B`‚xcftools-1.0.7/test/dotest0000755000175000017500000005031211223357156015437 0ustar makholmmakholm#! /bin/bash # Regression test for Xcftools # # This file was written by Henning Makholm # It is hereby in the public domain. # # In jurisdictions that do not recognise grants of copyright to the # public domain: I, the author and (presumably, in those jurisdictions) # copyright holder, hereby permit anyone to distribute and use this code, # in source code or binary form, with or without modifications. This # permission is world-wide and irrevocable. # # Of course, I will not be liable for any errors or shortcomings in the # code, since I give it away without asking any compenstations. # # If you use or distribute this code, I would appreciate receiving # credit for writing it, in whichever way you find proper and customary. export LC_CTYPE=C export LC_MESSAGES=C : ${XCFTOOLS_PREFIX=../} totaltests=0 failedtests=0 lastfailed=0 keepgoing=0 if [ x"$1" = x"-k" ] then keepgoing=1 fi failed() { if (( lastfailed != totaltests )) then echo FAILED (( lastfailed = totaltests )) (( failedtests++ )) fi (( keepgoing )) || exit 1 } testrun() { if [ x$1 = x--exit ] then want=$2 ; shift ; shift ; else want=0 ; fi (( totaltests++ )) if [ x$2 = x--pipe ] then pgm="$1" pipe="$3" ; shift ; shift ; shift ; echo "===>" $pipe "|" $pgm "$@" $pipe | $pgm "$@" > stdout.txt 2> stderr.txt else echo "===>" "$@" "$@" > stdout.txt 2> stderr.txt fi got=$? if [ $want = $got ] then diff -u expected.stdout stdout.txt || failed diff -u expected.stderr stderr.txt || failed else echo ===STDOUT=== cat stdout.txt echo ===STDERR=== cat stderr.txt echo ===EXIT STATUS=== echo $got failed fi } errtest() { expect=$1 shift program=${XCFTOOLS_PREFIX}$1 shift [ -f expected:stderr ] && \ (sed "1s!^!$program: !" expected:stderr > expected.stderr) testrun --exit $expect $program "$@" } testinfo() { testrun ${XCFTOOLS_PREFIX}xcfinfo "$@" } testpnm() { oanswer='' aanswer='' ofilter=cat afilter=cat oext=pnm while true do arg="`echo $1 | cut -c 3-`" case $arg in -pgm) arg="pnmdepth 255" ;; -ppm) arg="pgmtoppm 1,1,1" ;; esac case $1 in o:*) oanswer="$arg" ;; a:*) aanswer="$arg" ;; O:*) ofilter="$arg" ;; A:*) afilter="$arg" ;; x:*) oext="$arg" ;; *) break ;; esac shift done rm -f o.* a.* [ "$oanswer" ] && pngtopnm answer/$oanswer.png | $ofilter > o.want [ "$aanswer" ] && pngtopnm -alpha answer/$aanswer.png | $afilter > a.want aopt= if [ -n "$aanswer" ] ; then aopt="-aa.pnm" fi source="$1" shift testrun ${XCFTOOLS_PREFIX}xcf2pnm \ -@ -oo.$oext $aopt source/$source.xcf.gz "$@" [ -z "$oanswer" ] || cmp o.want o.$oext || failed [ -z "$aanswer" ] || cmp a.want a.pnm || failed } testpng() { ofilter=cat afilter=cat oargs="" aargs="" while true do arg="`echo $1 | cut -c 3-`" case $arg in -pgm) arg="pnmdepth 255" ;; -ppm) arg="pgmtoppm 1,1,1" ;; esac case $1 in O:*) ofilter="$arg" ;; A:*) afilter="$arg" ;; b:*) oargs="-background $arg -mix" ;; B:*) aargs="-background $arg -mix" ;; *) answer="$1" ; shift ; break ;; esac shift done rm -f o.* a.* [ -s pngtype.want ] || perl pngtype.pl < answer/$answer.png > pngtype.want pngtopnm $aargs answer/$answer.png | $ofilter > o.want pngtopnm -alpha answer/$answer.png | $afilter > a.want source="$1" shift testrun ${XCFTOOLS_PREFIX}xcf2png -oo.png source/$source.xcf.gz "$@" perl pngtype.pl < o.png > pngtype diff -u pngtype.want pngtype || failed pngtopnm $oargs o.png > o.pnm cmp o.want o.pnm || failed if [ "$afilter" != : ] ; then pngtopnm -alpha o.png > a.pnm cmp a.want a.pnm || failed fi rm pngtype.want } rm -f pngtype.want S=source cp /dev/null expected.stdout ############################################################################# # # Test for discovery of error conditions. # echo > expected:stderr \ "The --mode option must follow a layer name on the command line" errtest 20 xcf2pnm $S/modetest.xcf.gz --mode Addition A B echo > expected:stderr \ "The --percent option must follow a layer name on the command line" errtest 20 xcf2png $S/tiletest.xcf.gz --percent 33 Mid echo > expected:stderr \ "The image has no layer called 'MID'" errtest 22 xcf2pnm $S/tiletest.xcf.gz -z Background MID -o foo.pnm # This also tests reading from stdin echo > expected:stderr \ "Layer 'Vert' has no layer mask to enable" errtest 22 xcf2pnm --pipe "zcat $S/tiletest.xcf.gz" \ - Background Vert --mask Horiz --nomask echo > expected:stderr \ "Grayscale output selected, but colored pixel(s) found" errtest 103 xcf2pnm -o o.pgm $S/tiletest.xcf.gz Background errtest 103 xcf2png -o o.png -g $S/tiletest.xcf.gz Background rm -rf o.pgm o.png errtest 103 xcf2pnm -o o.pgm $S/tiletest.xcf.gz Background -f if [ -f o.pgm ] ; then echo o.pgm exists ; failed ; fi errtest 103 xcf2png -o o.png -g $S/tiletest.xcf.gz Background -f if [ -f o.png ] ; then echo o.png exists ; failed ; fi echo > expected:stderr \ "Monochrome output selected, but not all pixels are black or white" errtest 103 xcf2pnm -o o.pbm $S/tiletest.xcf.gz Background errtest 103 xcf2pnm -o o.pbm $S/tiletest.xcf.gz Background \ 'Straight loop' 'Long and low' rm -rf o.pbm errtest 103 xcf2pnm -o o.pbm $S/tiletest.xcf.gz Background -f if [ -f o.pbm ] ; then echo o.pbm exists ; failed ; fi errtest 103 xcf2pnm -o o.pbm $S/tiletest.xcf.gz Background -f \ 'Straight loop' 'Long and low' if [ -f o.pbm ] ; then echo o.pbm exists ; failed ; fi cat > expected:stderr < expected:stderr \ "Flattened image has partially transparent pixels" errtest 102 xcf2pnm $S/modetest.xcf.gz -G cat > expected:stderr < expected.stderr < expected:stderr \ "Transparency found, but -a option not given" errtest 100 xcf2pnm $S/modetest.xcf.gz -o o.pnm echo > expected:stderr \ "The -a option was given, but the image has no transparency" errtest 101 xcf2pnm $S/modetest.xcf.gz -b white -a a.pgm errtest 101 xcf2pnm $S/tiletest.xcf.gz -a a.pgm echo > expected:stderr \ "Only one XCF file per command line, please" errtest 20 xcfinfo $S/tiletest.xcf.gz Background 'Long and low' rm expected:stderr ( for a in /etc/X11/rgb.txt /usr/share/X11/rgb.txt /usr/lib/X11/rgb.txt /-/ ; do [ -f $a ] && break ; [ $a = /-/ ] && echo "Could not find X11 color database" ; done ) > expected.stderr echo "${XCFTOOLS_PREFIX}xcf2pnm: Unknown background color 'Plaid'" \ >> expected.stderr errtest 20 xcf2pnm $S/tiletest.xcf.gz -b Plaid echo > expected:stderr \ "-S option must have an argument of the form wxh" errtest 20 xcf2pnm $S/tiletest.xcf.gz -S 10x errtest 20 xcf2pnm $S/tiletest.xcf.gz -S 10x20x30 echo > expected:stderr \ "-O option must have an argument of the form x,y" errtest 20 xcf2pnm $S/tiletest.xcf.gz -S 10x10 -O 2x4 echo > expected:stderr \ "Layer mode 'GammaShift' is unknown" errtest 20 xcf2png $S/modetest.xcf.gz B A --mode GammaShift echo > expected:stderr \ "The argument to --percent is not a percentage" errtest 20 xcf2pnm $S/tiletest.xcf.gz Background Mid --percent -3 errtest 20 xcf2pnm $S/tiletest.xcf.gz Background Mid --percent 20.2 errtest 20 xcf2pnm $S/tiletest.xcf.gz Background Mid --percent 101 echo > expected:stderr \ "The argument to --opacity is not a number between 0 and 255" errtest 20 xcf2pnm $S/tiletest.xcf.gz Background Mid --opacity -3 errtest 20 xcf2pnm $S/tiletest.xcf.gz Background Mid --opacity 220.2 errtest 20 xcf2pnm $S/tiletest.xcf.gz Background Mid --opacity 256 ####################################################### # # Error tests for io-unix.c # # XXX: if another I/O module is added later, these tests should # be conditionally enabled # cat < enoent.c #include #include int main(int argc,char **argv) { errno = ENOENT; if( argv[1][0] == '!' ) { errno = EACCES; argv++; } perror(argv[1]); return 0; } EOF cp /dev/null expected.stderr testrun cc enoent.c ./a.out $S/nonexist.xcf 2> expected:stderr errtest 21 xcfinfo $S/nonexist.xcf rm expected:stderr ./a.out "Cannot execute source/nonexist.xcf" 2> expected.stderr errtest 126 xcf2png -Z $S/nonexist.xcf $S/tiletest.xcf.gz cp /dev/null expected.stderr command false errtest $? xcf2png -Z false $S/tiletest.xcf.gz ./a.out ! "Cannot execute answer/modeA.png" 2> expected.stderr errtest 126 xcf2pnm -Z answer/modeA.png $S/comptest.xcf.gz rm -f expected:stderr ############################################################################# # # Use all of the example XCF inputs as checks of xcfinfo # cp /dev/null expected.stderr cat < expected.stdout Version 0, 256x256 Grayscale, 2 layers, compressed RLE + 256x256+0+0 Grayscale-alpha Normal Partially transparent + 256x256+0+0 Grayscale Normal Background EOF testinfo $S/comptest.xcf.gz cat < expected.stdout Version 0, 64x64 RGB color, 4 layers, compressed RLE - 10x10+27+27 RGB-alpha Normal AE=AE + 64x64+0+0 RGB-alpha Subtract B + 64x64+0+0 RGB-alpha Addition A - 64x64+0+0 RGB Normal Background EOF testinfo $S/modetest.xcf.gz cat < expected.stdout Version 1, 64x64 Indexed color, 3 layers, compressed RLE + 64x64+0+0 Indexed-alpha Subtract/mask B + 64x64+0+0 Indexed-alpha Addition/mask A - 64x64+0+0 Indexed Normal Background EOF testinfo $S/indextest.xcf.gz testinfo $S/badindexed0.xcf.gz cat < expected.stdout Version 0, 161x161 RGB color, 10 layers, compressed RLE + 122x13+19+74 RGB-alpha Normal Long and low + 13x122+74+19 RGB-alpha Difference Tall and narrow + 118x118+38+47 RGB-alpha Normal/65% Displaced loop - 144x141+4+18 RGB-alpha Normal Doodle + 161x161+0+0 RGB-alpha Normal Straight loop + 50x50+100+105 RGB-alpha Normal/mask Crossed + 50x50+8+8 RGB-alpha Normal Mid + 50x50+8+102 RGB-alpha Normal/83%/mask Horiz + 50x50+101+7 RGB-alpha Normal Vert + 161x161+0+0 RGB Normal Background EOF testinfo $S/tiletest.xcf.gz cat < expected.stdout Version 1, 64x64 Indexed color, 1 layers, compressed RLE + 64x64+0+0 Indexed Normal Background EOF testinfo $S/i256.xcf.gz testinfo $S/i255.xcf.gz cat < expected.stdout Version 0, 32x40 RGB color, 2 layers, compressed RLE + 32x40+0+0 RGB-alpha Hue Hue + 32x40+0+0 RGB Normal Background EOF testinfo $S/huetest.xcf.gz cp /dev/null expected.stdout ############################################################################# ############################################################################# ############################################################################# # # comptest.xcf.gz tests primarily that the scaling tables used during # flattening are internally consistent, such that two pixels of the # same color always composite to that color no matter what the # alpha of the upper one is. testpnm o:comptest comptest testpnm o:comptest comptest Background ############################################################################# # # modetest.xcf.gz is the primary test of the various compositing modes. # testpnm o:Subtract a:modeA modetest testpnm o:Addition a:modeB modetest B A -f for mode in Multiply Screen Overlay Difference DarkenOnly \ LightenOnly Divide Dodge Burn GrainExtract GrainMerge \ Hardlight Hue Saturation Value Color do testpnm o:$mode a:modeA modetest A B --mode $mode done testpnm o:Overlay a:modeA modetest AE=AE A --mode Normal B --mode Softlight # huetest.xcf.gz is an auxiliary test that makes sure that all of the # six hue hexants have matching implementations in RGB->HSV and HSV->RGB testpnm o:huetest huetest ############################################################################# # # tiletest.xcf.gz tests various ways a layer can interact with the # tile boundaries, as well as layer selection, masks, global opacity. # testpnm o:tiletest tiletest testpnm o:tiletest tiletest-128 -O-128,-128 -S 161x161 testpnm o:tiletest tiletest-61 -O-61,-61 testpnm o:gray tiletest-128 Background 'Straight loop' 'Long and low' -C -f testpnm o:gray tiletest-61 Background 'Straight loop' 'Long and low' -C -f ############################################################################# # # Test output format selection for xcf2pnm with and without -f # testpnm o:mono O:-ppm tiletest Background 'Straight loop' testpnm o:mono O:-ppm tiletest Background 'Straight loop' -c testpnm o:mono O:-pgm tiletest Background 'Straight loop' -g testpnm o:mono tiletest Background 'Straight loop' -m testpnm x:ppm o:mono O:-ppm tiletest Background 'Straight loop' testpnm x:pgm o:mono O:-pgm tiletest Background 'Straight loop' testpnm x:pbm o:mono tiletest Background 'Straight loop' testpnm x:pbm o:mono O:-ppm tiletest Background 'Straight loop' -c testpnm o:gray O:-ppm tiletest Background 'Straight loop' 'Long and low' testpnm o:gray tiletest Background 'Straight loop' 'Long and low' -g testpnm o:mono tiletest Background 'Straight loop' -f testpnm o:mono O:-ppm tiletest Background 'Straight loop' -f -c testpnm o:gray tiletest Background 'Straight loop' 'Long and low' -f # Test -A flag testpnm o:mid tiletest -O17,17 -S32x32 Mid testpnm o:mid a:mid A:-pgm tiletest -O17,17 -S32x32 Mid testpnm o:mid tiletest -O17,17 -S32x32 Mid -f testpnm o:mid a:mid tiletest -O17,17 -S32x32 -A testpnm o:mid a:mid A:-pgm tiletest -O17,17 -S32x32 Mid testpnm o:mid a:mid tiletest -O17,17 -S32x32 -Af testpnm o:mid a:mid tiletest -O17,17 -S32x32 Mid -Af ############################################################################# # # Test indexed images # testpnm o:indextest a:indextest indextest testpnm o:indextest a:indextest badindexed0 testpnm o:Subtract a:modeA indextest -T testpnm o:index4 indextest Background testpnm o:index256 i256 ############################################################################# # # Various tests of xcf2pnm # testpnm o:burmid tiletest Mid -S 27x25 -O 5,5 -b '#963' # Regression test for bugs fixed in 1.0.6 testpnm o:masknoalpha-r masknoalpha -b "#FF0000" testpnm o:masknoalpha-g masknoalpha -b "#888888" testpnm o:masknoalpha-b masknoalpha -b "#000000" testpnm o:masknoalpha-w masknoalpha -b "#FFFFFF" ############################################################################# ############################################################################# # # Tests of xcf2png # # # Basic functionality # testpng tiletest tiletest cat < pngtype.want 64x64x8 color+alpha z0 f0 i0 EOF testpng modeA modetest A ############################################################################# # # Output color-format selection # cat < common 161x161x8 color z0 f0 i0 EOF cp common pngtype.want testpng O:-ppm mono tiletest Background 'Straight loop' cp common pngtype.want testpng O:-ppm mono tiletest Background 'Straight loop' -c cp common pngtype.want testpng O:-ppm mono tiletest Background 'Straight loop' -f -c cp common pngtype.want testpng O:-ppm gray tiletest Background 'Straight loop' 'Long and low' cat < common 161x161x8 gray z0 f0 i0 EOF cp common pngtype.want testpng O:-pgm mono tiletest Background 'Straight loop' -g cp common pngtype.want testpng gray tiletest Background 'Straight loop' 'Long and low' -g cat < pngtype.want 161x161x1 gray z0 f0 i0 EOF testpng mono tiletest Background 'Straight loop' -f cat < pngtype.want 161x161x8 color+index z0 f0 i0 PLTE(60) FF FF FF 00 00 00 B6 B6 B6 A1 A1 A1 81 81 81 51 51 51 2E 2E 2E 80 80 80 E2 E2 E2 41 41 41 30 30 30 12 12 12 0E 0E 0E 0B 0B 0B 13 13 13 2D 2D 2D 7F 7F 7F 40 40 40 50 50 50 6A 6A 6A EOF testpng gray tiletest Background 'Straight loop' 'Long and low' -f ############################################################################# # # Try all combinations of alpha and color modes # # gray testpng gray tiletest Background 'Straight loop' 'Long and low' -g testpng comptest comptest # RGB: The tiletest runs above test this # gray+alpha testpng comptestB comptest 'Partially transparent' -f # RGB+artificial alpha cat < pngtype.want 161x161x8 color+alpha z0 f0 i0 EOF testpng A:-pgm tiletest tiletest -A # RGS+artificial alpha, compressed cat < pngtype.want 161x161x8 color z0 f0 i0 tRNS(6) 00 06 00 06 00 06 EOF testpng tiletest tiletest -A -f # RGB+alpha cat < pngtype.want 16x20x8 color+alpha z0 f0 i0 EOF testpng A:-pgm b:0,0,0 crisp1 modetest -S16x20 -O48,46 -c # gray, one transparent color testpng crisp2 comptest -S25x250 -O235,0 -f -g # RGB, one transparent color cat < pngtype.want 16x20x8 color z0 f0 i0 tRNS(6) 00 01 00 01 00 01 EOF testpng "b:0,0,0" crisp1 modetest -S16x20 -O48,46 -c -f # index, no transparency: palette selection tests test this # index, one transparent color testpng crisp1 modetest -S16x20 -O48,46 -f # index, various transparent colors testpng modeA modetest A -f ############################################################################# # # Special tests for palette selection # # monochrome testpng mono tiletest Background 'Straight loop' -f # monochrome with black and white first met in the opposite order. testpng mono1 tiletest Background -S65x64 -O63,64 -f # 1 color plus transparency testpng doodle tiletest Doodle -f # 2 colors cat < pngtype.want 161x161x1 color+index z0 f0 i0 PLTE(6) FF 00 00 EE 6F 00 EOF testpng A:: B:1,0,0 doodle tiletest Doodle -b '#f00' -f # 2 colors plus transparency testpng odoodle tiletest Doodle 'Straight loop' -f -S5x5 -C # 3 colors cat < pngtype.want 161x161x2 color+index z0 f0 i0 PLTE(9) 00 00 FF EE 6F 00 FF FF FF EOF testpng A:: B:0,0,1 odoodle tiletest Doodle 'Straight loop' -fb '#00F' -O0,0 -C # 4 colors cat < pngtype.want 64x64x2 color+index z0 f0 i0 PLTE(12) DC 98 85 FF 00 77 10 36 38 FF B4 23 EOF testpng index4 indextest Background -f # 4 colors, artificial transparency cat < pngtype.want 64x64x2 color+index z0 f0 i0 PLTE(12) DC 98 85 FF 00 77 10 36 38 FF B4 23 tRNS(4) FF FF FF FF EOF testpng index4 indextest Background -f -A # 16 colors, no transparency testpng mid tiletest -O17,17 -S32x32 -f # 17 colors, including a background testpng burmid tiletest Mid -O5,5 -S27x25 -b '#963' -f # 38 colors, original colormap testpng index4 indextest Background # 255 colors, original colormap testpng index255 i255 # 255 colors plus transparency testpng i255t i255 -O0,2 testpng i255t i255 -O0,2 -f testpng i255tt i255 -O2,0 -f perl pngtype.pl < answer/index256.png > pngtype.want testpng A:"tr '\377' '\0'" B:"#F4F4F4" i255t i255 -O0,2 -b "#F4F4F4" # 255 colors, background already in palette perl pngtype.pl < answer/index255.png > pngtype.want testpng A:"tr '\3' '\0'" B:"#66CC33" i255tt i255 -O2,0 -b "#6c3" # 256 colors, original colormap testpng index256 i256 # 256 colors, no room for transparency cat < pngtype.want 64x64x8 color+alpha z0 f0 i0 EOF testpng A:-pgm index256 i256 -A ############################################################################# # # Various tests for regression of bugs that slipped through the # systematic testing. # # Exotic modes with an opaque layer testpnm o:misc1 a:misc1 tiletest Mid Crossed \ Background --mode LightenOnly 'Straight loop' -f ############################################################################# # # Report the final status echo ======================================================= if (( failedtests )) then echo $failedtests of $totaltests tests FAILED echo ======================================================= exit 1 else echo All $totaltests tests PASSED echo ======================================================= exit 0 fi # Endxcftools-1.0.7/test/pngtype.pl0000644000175000017500000000254610367152253016237 0ustar makholmmakholmuse warnings ; use strict ; binmode(STDIN); my $a ; read STDIN,$a,8 ; if( $a ne "\x89PNG\x0d\x0a\x1a\x0a" ) { die "Malformed PNG header\n" ; } sub bv($) { ord(substr($a,$_[0],1)) ; } sub wv($) { my $a = shift ; return (bv($a) << 24) + (bv($a+1) << 16) + (bv($a+2)<<8) + bv($a+3); } my %all ; while( !eof STDIN ) { read STDIN,$a,4 ; my $len = wv(0); read STDIN,$a,$len+8 ; my $type = substr($a,0,4) ; next if $type eq 'IDAT' ; last if $type eq 'IEND' ; if( $type eq 'IHDR' && $len == 13 ) { print wv(4),"x",wv(8),"x",bv(12),"\n" ; my $cmode = bv(13) ; print $cmode & 3 ? "color" : "gray" ; print "+index" if $cmode & 1 ; print "+alpha" if $cmode & 4 ; print "\nz",bv(14)," f",bv(15)," i",bv(16),"\n" ; next ; } my $aref = ($all{$type} ||= []) ; push @$aref, "$type($len)" ; { my $w = 16 ; $w = 24 if $type eq 'PLTE' ; $w = 8 if $type eq 'tRNS' ; for my $i ( 0 .. $len - 1 ) { push @$aref, sprintf("%s%02X", $i%$w ? " " : "\n ", bv($i+4) ) ; push @$aref, " " if $type eq 'PLTE' && $i%3 == 2 && ($i+1)%$w != 0 && $i != $len-1 ; } push @$aref, "\n" ; } } for my $k ( sort keys %all ) { print @{$all{$k}} ; } xcftools-1.0.7/test/source/badindexed0.xcf.gz0000644000175000017500000000166710431511614020777 0ustar makholmmakholm‹Œ“fDbadindexed0.xcfí˜;lIÇÇkïÃÎc—É‚í,‰ãKîXKp`ɼ‚t'dŽÊW ÇÙ8{`;²Xh\D'KW]eQÑ™ˆêN¦¢B®¡°D\Pgø³Á»yH9):QìH¿o¿ï?³³3³;£É…MÕÌ­«–—éº<à'ð ž,wƒ?_ŽF;šÖN¥Zét“’Ç™LƒÊ›4jFj«¦iÒÔï4}¯^7hæN£‘¡Æ/Ô¼Öl¦iýr«•úðìOÚHÐæí¶F[sN”¶ÃÝ®L;S´;ÚëÚ)%2ÆÁZ1¤•¿ a MS`‰Ùy¼‹–+ z±J¬æ‡n–õlU_SÕ õÞ†®þzëÎ] YUxv«ðüöß«öåF!›×µ|ÙX³Jx¤…JõÉC]5ŠU½\ÑsU£T¬,Öó¹ÒÃRY]ègZ9¿šU—Ï/÷Ó!FÂ2Qtõ¢‰ýƒ+jV6³9£˜W{5Ãùä0§åÓ¶ŠFÏmè¬Õfi}½¢WU{郮]³($î)!<ëé×6çÞ\cn…ykPØàK¶ò[6K›=dÓ Ûì›F¶êÚK¢“lóÈÖTï4\1ç—à=çl±7Ån®ÆwHüÊî¥FÞ’¤ÄŸ 0F€ ‚`L‚)Žpñä)>ž< ΀˜gÁ,ˆy0Ta0 B`ŒQ0 ü@àpÀSólÇkÁþXìõ…¸¢²•ǪQ›?Èú–øz­äûËöÈ}Ï=î{ÉnjäЦIÂSô ŻѤR 2À&¨ƒh‚hƒè‚^Í¿MYmûgá býûþïÙ(ÚúÅ?ó/Päçläß8û†ÇnfÈlÎ]¥«t•®ÒUºJWé*]å‰)Ãßöc3vÑ7Nr=<Ø-Êï»hù“s§(ÙÝÞ&)ÿ Ž~&rTK¥3†Yo4[íN·GcnÀ ¸7ྟÀà¯ÍÙÏ-Ø0´’Í=È—K[ŵ£VrŒƒ b;¸ Ç<¸°/EÜ º¿ïËQ¨âô…¶û‡:Â+E.)’W¯¨¤˜"yäsJÀË÷sÜGvÉSôJ漈_.¡(Ë!åQsIñázA D.*Rä’"Djä_ëyQ÷…#€Aªq·•¯™4í%xcftools-1.0.7/test/source/comptest.xcf.gz0000644000175000017500000000337410366755730020503 0ustar makholmmakholm‹|ÐØCcomptest.xcfíÜwtTEÇñÙ$ÞCoKO€@¡—o½÷^S6ËBHÂf ݆XÁŠ]¬Ø¨`Ã6l¨ˆ ;*ö¼Ë»y]ÿ47çð›sžg°þg×ÿzŽ¥æïæXgQ‡‚~¯z¡þïvl®×çÉ-*ªtú¼¹ÅÖcx]Å>ÿhHàòÚoÿˆÿ ½‰È@íoQAutPTÇÕñ{Uµð ±ª7ú÷pȰãžÜz¶—õ©ö[qðرÍÖS–1-·“Õ˘ۙ”mŒk‡1‹³f—1F³i·1[dzs1{§s`Ÿ1‡gûï„ÁA¡„Q‹Ú„A$QDC,qÄ“@"I$“BêRú4 !hLšÒ 'ÍiAKZÑš6´%•4ÚÑž¤Ó‘NdIgºEWºÑô¤½éC_úÁêë“„„†ÕªŸ˜”œR§n½ú 6jܤi3gó-[µnÓ65­]ûé;edvî’Õµ[÷={õîÓ·òòòòòòòòòòòòòòò5ß×€%ˆìþ9ëXÏ\ÈE\Ì%\Ê.ãr®àJ®âj®áZ6r×s7r7³‰[¸•Û¸;¸“»¸›{ØÌ½ÜÇý<Àƒla+ñ0°í<Êc: B^^^^^^^^^^^^^þ¤ð5` Âî½(òòòòòòòòòòòòòòòÕp„ýKvïE‘——————————————¯†³ ì_‚°{/м¼¼¼¼¼¼¼¼¼¼¼¼¼|5œñ8Oð$;xЧy†gÙÉ.žãy^àE^b7/ó ¯ò¯³‡7x“·ØËÛìãÞå=Þçöó!ñ1Ÿð)Ÿñ9ø‚/ùŠƒ|Í7|Ëw|ÏüÈOüÌ/üÊ!ó¿órDgAÈËËËËËËËËËËËËËŸ¾,AؽE^^^^^^^^^^^^^^¾΂° Âî½(òòòòòòòòòòòòòòòÕp„ýKvïE‘——————————————ÿï½1fu ü-;Vs„X“›¿Àí-)/.ðwÕ¶"Ì ?Ôþk#µ¿EÕÑAuLPTÇîUÕƒÆRuÈÿGÑ{L‡Õ·Í8R"¬H9fÌcõŬ5ŽX+ÇZ9ÎÊqVŽ·r¼•¬œ`åD+'Z9ÉÊIVN¶ròZÿ08!”0jQ›p"ˆ$Šhbˆ%ŽxH$‰dR¨C]êQŸ4¤iBSšá¤9-hI+ZÓ†¶¤’F;ÚÓt:Ò‰ 2éL²èJ7ºÓƒžô¢7}èK?Ðü6ÏŸMrÀ@1˜! eÃÁHF1š1Œeã™ÀD&1™)LeÓ™ÁLf1›9Ì%—<ò)ÀE!næáa> (b!Å”PÊ"¼”ᣜÅ,¡‚J–²Œå¬`%«4¿ÍóÛ|j¯æ·y~›Wê5¿½óÿÛ¿IÍ¥ÇÕ xcftools-1.0.7/test/source/huetest.xcf.gz0000644000175000017500000000117310373720727020315 0ustar makholmmakholm‹ÍTAŽÓ0µ›Éx2aTBaŠÄÆbÕY¦W"  Œ›F´É(MEgÕ `ÃÞ[ŽÀ%¸AŽÁ–ðí8mÒ¦…L$KÏÿù9ßþù??ž?½¦ wDGþ„!ÐCÙ°ÃÔ]|AHÆCÀ€žN<8ªï†Ó) bñp<}±aÌ®è'?ÓcF_¾~óN잪#pv~_ÿˆûòq:ôXß‹ü+åz³øf¨Ä,š17öÃ`vvÜyn8 #Ú“¦y—Czþì\Ž 2Pä \/+\›nẘ]]?ðè ?Ä›*QiýyàǼ;f"êE8ÍXL‹ÞÛR¦”]ÑzàŸéo B^f‘áƒWsYúCU’TT»PCq1Ž Ü,ð{~RàmuV>ˆÚ3 _‘¾Þn}݈ö[ßÊZë»<Ø&œ$µf§ÎLl‚HÚÈòv½Ù©3/ñã„ðîN´¹ŒÃ!·²m§ ·ìÜ-rê´ëÌI÷÷ßÚÂ[ïäËìýå¼Ä?R =©áÊ?Póbè~ô¢pÈŸSKÉÿ²ÑP¡ÑZëmý×F£iÖƒ²vøT,–è32¡ˆ$:·Ø6â`Wq^ŵD·uïYc›¤¸±‚œbdîŒÑAŒ‰ÖXѹ¾gM£šóm®A›++*,m"“Næ±²–-ã)1Í6!û»VàÑ7T8Ø<ŸÀÿ»"¾³ì‹Ë¾¼Fйsem2»S²] UµTƒŸôåÊÊX¹‘ÝXä0[luwå*»·±’Häß EõLiÅܹ²*˜Ý&+RâЇ\[YQÑßP¤ÖÚ” xcftools-1.0.7/test/source/i255.xcf.gz0000644000175000017500000000227310366755730017326 0ustar makholmmakholm‹µ•wT\EÆ'ù…„Ä“`C]1*QAp°aÃD±aÃl(f³$‚D±aÆQ±{²{³ûRÀ~ìÏqÇä 9˜C8”ØG‡sGrGSÌ1qÇ¥„ù”RF9†0 ˆPÁB±˜JªâŽWs5ÔRÇê9ž–r'ÒÈIœÌ)qÇOå4š838“³8›fÎá\Îã|. … ãŽ/ã".æZ¹”˸œ+ðhãJ®âj®áÚ¸ãí\ÇõÜÀÜD7s ·r·ÓÉÜÉ]qÇïæº¸—û¸ŸxnâaáQ£‡ÇãŽ?Á“<ÅÓôò ÏòÏó}¼ˆå%^數ãý¼Êk¼Î¼Éoñ6ïð.ï1Èû|À‡qÇ?âc†ø„OùŒÏù‚a¾ä+¾æ¾e„ïâŽÏüÈOüÌ/üÊoüÎüÉ_üÍ?ü+ÿžqÆÿÚH¼:g xcftools-1.0.7/test/source/i256.xcf.gz0000644000175000017500000000227710366755730017333 0ustar makholmmakholm‹µ”wTEÆ'ùCHbˆI°¡>1*QAp°aèذaè(æå‘ņ FEãbÆ 6lØ°á¨Ø°aÆ ö²ÞÙ¼_Ê¿ïž3ggæ»å»ßÝÝpdau¨¡Ô„ê³²²•X^t•5F)‚‡RZ)£”§”UÊÎZ+£•§•ÕÊ`m”1Ê3ÊåÞÚSÆSž§¬§ü X[e¬ò¬²VùA.í+ã+ÏWÖW~Z»L*¾ºJbFkOk«µ–³1Ú3Úí<6žö/ëÙª¾£>7ª{êÖž®~ùÕ£Ç,²šð šð<ùÿMûr£ÍëZ¾lìX5<ÒJ¥zt «F±ª—+z®j”Š•ÕÀÊn>W:(•Õ•~¦•óÛYuíãµ~ºÀHXÆ*ªn_P5qVxÞ`UÍÊa6gójâ¤e8.rZ>íYѨ¢ó¹=õÚ,íîVôªj¯}Þ5ð8«’aâ¾'„g#ý‹Íy²ÖX€ÛdÁš6ù’m‚ü–ÍRÀfØ4£6{̦‘­¶N’hÅ$Û:²uÕ; WÌù&x?röØ›b…OãïIüþàR#¿“¤Ä_0Æ€ ‚`LƒŽpñä >žœó ÀM°b`,DAÌ‚˜`Œ?xàðÔ<ÇñZ°?'c!nª…leÿªS5nóÙØÜö·×J¾mwÜ÷Ò9â¾×¬P#¿‚6Mžbd(ž&5i0A4@´@t@ôjþcÊZ#gVáC2˜qrÕG¼®Õ(ÚÆÅ? ó¯På)q¬Fþslø?Xa,ÆÃ™þ ŒŒÉÁÉé™só‘…›‹±å%5ž MMŒúE÷qž¸è*]¥«t•®ÒUºJWé*¯M>=-œ;E?¼ÎSôèð´(¿%ŽS´ü·ó¤(ÿ38Þ&) Gß9ª¥Òì7š­v§Û£17àÜ€pN`øÕælßôþ0²™ÍíçË¥gÅËvBþûÇ!Ã,]åÇ…}+â†áзέ‡mG¡ŠÓ:f…šð³"HwIŠ+‚WTRL‘¼ò%%àåû9Ê‘÷Šä‡)z¥s Þ@Ä&—P•åòh‡yGñẮ"й«‘ùͺßÚ^¿¨¡¤÷µò/xK†%xcftools-1.0.7/test/source/masknoalpha.xcf.gz0000644000175000017500000000063011223274473021124 0ustar makholmmakholm‹­QÍNÂ@žþ Dñ÷¼8Ô´G¯r $˜žÀR¶e#mI[N$Æ0>„OâÁçðEêlݦ[á€ÑI¾î×ofvg÷óY0' ×#–eƉ€ŠP Á³,Ãï!W¹|Œ¨_½pˆ±ƒ8œ×âÒǵåãA¦ SÉ£^L”NÈ#K§¤?¸¾á™v^Êǧ¦³‰¨V “¤Ë%I4c“n£ãùn4‹bÒÉ3öDZ.¬<6[.¶Ž7´Ú? × o]$sÇe¡Oìbg—›D¡™÷!K Ý)Mxäy M‰Ü½.}+ÕV(CyО%¡p-·`ÈBš€ð „)<ìK悃ð¹àM©fOâ-©æ@ìUÄ®”+&QË´">¥Iq?õ©:½úÊ ÅøWHg6ó—!“Ümû,û’ÞFhÕjå µaõvÚmõvÚœÿŒ •Õ+xlTÔð­qô¢˜þÅ6lãñ[ÛjeZ?—r¼-Õ/«š>€|¨í qa™ _ÕÒ8yxcftools-1.0.7/test/source/mkbase.i0000644000175000017500000000265310366755730017137 0ustar makholmmakholm/* -*- C -*- * This program is written by Henning Makholm, and is in the * public domain. */ #include #include #include static void error(png_structp png_ptr, png_const_charp errormsg) { fprintf(stderr,"PNG error: %s\n",errormsg); exit(1); } int main(void) { png_structp libpng = NULL ; png_infop libpng2 = NULL ; unsigned char row[TEST_IMAGE_WIDTH*4] ; unsigned x,y ; int r,g,b,a ; libpng = png_create_write_struct(PNG_LIBPNG_VER_STRING, png_voidp_NULL, error, png_error_ptr_NULL); if( !libpng ) error(libpng,"Couldn't initialize libpng library"); libpng2 = png_create_info_struct(libpng); if( !libpng2 ) error(libpng,"Couldn't create PNG info structure"); png_init_io(libpng,stdout); png_set_IHDR(libpng,libpng2,TEST_IMAGE_WIDTH,TEST_IMAGE_HEIGHT, 8, PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); png_write_info(libpng,libpng2); for( y=0; y= 61 ) { *a = 0 ; return ; } if( y < 3 || y >= 61 || x < 6 || x >= 58 ) { *a = 255 ; *r=*g=*b= 255*(x>=32) ; return ; } x -= 6 ; if( x <= 17 ) { *a = x*15 ; *r = 255 ; *g = 0 ; *b = 17*7 ; return ; } *a = 255 ; x -= 17 ; if( x <= 17 ) { *r = 255 ; *g = x*15 ; *b = (17-x)*7 ; return ; } x -= 17 ; if( x <= 17 ) { *r = (17-x)*15 ; *g = (17-x)*15 ; *b = (x-1)*15 ; return ; } *r=255 ; *g=*b=0 ; } #include "mkbase.i" xcftools-1.0.7/test/source/mktile0.pl0000644000175000017500000000060610366755730017421 0ustar makholmmakholm$L = 64 ; print "P3 $L $L 255\n" ; for $y ( 0 .. $L-1 ) { for $x ( 0 .. $L-1 ) { $m = int($y / 4)*16 + int($x/4) ; if( $m < 216 ) { print( 51 * ($m % 6), " ", 51 * (int($m/6) % 6), " ", 51 * (int($m/36)), "\n" ); } else { $m = ($m-216) * 6 + 10 ; print( "$m $m $m\n" ); } } } xcftools-1.0.7/test/source/mktile1.c0000644000175000017500000000143610366755730017233 0ustar makholmmakholm/* This program is written by Henning Makholm, and is in the * public domain. */ #define TEST_IMAGE_WIDTH 50 #define TEST_IMAGE_HEIGHT 50 #include #include void makepixel(int x,int y,int *r,int *g,int *b,int *a) { double yy = 2*(double)y/(TEST_IMAGE_HEIGHT-1) - 1 ; double xx = 2*(double)x/(TEST_IMAGE_WIDTH-1) - 1 ; double rad = sqrt(xx*xx+yy*yy) ; unsigned t = x + abs((y - TEST_IMAGE_HEIGHT/2)) ; t = t / 10 + ((600 + y - TEST_IMAGE_HEIGHT/2) / 10)*77 ; if( rad < 0.9 ) *a = 255 ; else if( rad < 1 ) *a = 190 ; else if( rad < 1.2 ) *a = 73 ; else *a = 0 ; t *= 3847822 ; t ^= 29938132 ; t %= 2093847 ; *r = 120 * ((t >> 3) % 3) + 3 ; *g = 120 * ((t >> 7) % 3) + 3 ; *b = 120 * ((t >> 10) % 3) + 3 ; } #include "mkbase.i" xcftools-1.0.7/test/source/modetest.xcf.gz0000644000175000017500000000143010373707720020452 0ustar makholmmakholm‹íšÏOAÇßNí¶¡‹ lÄ&@²Jo4ŒiHLä§vÙ.éÛ%]N=äêÅÆ›'þû˜¬7o½èAœ¼Ò?@]ß´Ót·?LH€3Ó|ÚÙ÷¾ïõ½Ý¦ÍÔ ™¼bii%M÷uÀñ˜ÃÆ("Iøt ®¾`àCn!!dyˆ ˜JÕr™Œž5™ˆN¬ô¤©ï*%jî)[{ºòôÙæsæà)¤f éÅÅSŒ4ä4“4tÕ(Ð]!gŠæá¾®Ð¬©ŠºfÒ\¶8šIZn?WPf/jÁH%•ùóÑcã“Y Mõu »',Ô*æ“ÍJ¬•‡½ŒÜ¦d©‰Åk{:«ÚÊ¥ÓEÝTÜÑݦ¦Å í!ý _ä(@4ær„8ìLËö›¥•uf•ùÅqØuçs6\óëºì·]ó!×<ÌsÝå\¾Öý$· #:*D?ùèµ›h͇í›—ÕDVixD¯Ž¤>Á;jVGAð®>|¯ø¤U%ú}G^›ï;xäüg©ùT†Ïwü×2Ysâu¿?CjˆT‘¤‚#B‘m$,"*2‰„(K¯Oþ'€@ 000`&ˆ[H3w…¿W•¿w×R_¿ŠºØ™-ù/‡<ï%…ì [È&²,7ú[ÀbÈ2Dqd °ú8a^³Ê{Hðž(ïñŸç‰õX†OPû2² 4³u®¬•ë^Q׊h»e»{EÉ_½6ù;˜‚{N„CóúYÍ®žTŽ-ºXT'Ãà„C8„C8„ã¦8ZŸØ˜rÜŸàcpžTÛÔ:®œTíÚYÝé/tB'tB'tB'tB÷¿êú}O"0Z:ÍÓÔÎÖæÆòBln:2>Œ?¥»r„R(…R(…R(…R(…òÒ”îïfijãFœóî€ûÂ!Â!ÂqsîÿH€÷/Rƒ«Ií¥QÈdwûmŠÃmŠƒkSœ´ÝÑo›â>´ýôÚ¢¿ØAy¾#ï‘£¿÷;$·&xcftools-1.0.7/test/source/tiletest-128.xcf.gz0000644000175000017500000002544511223225546021003 0ustar makholmmakholm‹ì\}lUv¿ófÞ÷‡í÷ûùÙÏIìØ$þ ±ƒ,‚µ-¬v+T)•1!k”„-0-•ôƒ¶´Ýnéî?HKÕnµ+J«Jí5 ý§°Ëò±bµTh+•e›®`¶0ÖbÇ·¿sî½oæ½ØIh *ÔO:sÎÜ™¹÷ÜsÏ=ç7sâY¸ûžþûæïè¿cáèa߀&úµ, ‡(uíŸA„_;ȵ€:´L÷mÛÞzÝŽ.Ü=wäðè‘ã · uÝJ Ÿ8yÿÑÃý ÇN>~âðüÉ÷؉‘ÌðGæÝ£îñþaf£ÇÜ6×?16Á¿5„I-ŒàÑÛÖxt²ùÆózô¾÷ÌÍ/;Ò?izFãýk5ê¶Ñ{-œ„òó_"Ó"§¤”_½9¹f!êû•&Eq=v&ùnc{ìÚ®¦†š}MHÖI±\}ðÉEkñìKï¼»$Å 8[=Ä-+/½³$s²«©¥Kæë-óC¹²ôöKÏXÏ,=U;4[ ·WäòÒ»|uù©.fÅêc²ÜÔXÓÇYÕÇvñÁc²ážIQ‹½W§Iq†‡yå•îmÔ'!W—Dg“Ú%jÌ6ÝÙ%ãÕWjÒ¹Q™„èjR¸$òM÷ô‰³úÖ¬›ÉÞ´£˜…~@;Cë/Ï=ÊÞtlîøñÞ¡^ §Š8T"âPÙСœo6éŠëÎsèâÏÛ×ÐÅ ‡’D+ÉÇ yL®V1Ðò’”³Äß•òñ·¥|øKR>Iü)×âOIùñš”r |µ*-™FïéóFøŸö|HÊw×áãÖÿ“e!ÇlCIä|ÂgóI_K×ÿU)_‰ð•‡––j:ÐÛûKš(¼´\·p➣só‡)ã¹÷D#Ô7>‚õ ÐSbí”IâéÏ6©ŠëéytùkíiL-ó(Tø*†¾Ÿ#Ukä$ø.Q”Ã"9%÷ˆ„œM3ÅåÂaš‰ðaË}šftÛ>?Sxh¤}-ùÊ¿RXš¯ÝFò5Î×k»4ªå2$m¶Ál1>L‚ƒ¹ÔÈí™¶˜¼ÔxÍnj_KŽrë"mÖ:çëµ]œ¢–0ÖQVm´Xs[ôÜÈj#n_@Ž’iwàNÓ5ÓåqPž—Ð<ïÌÀs‹ìéµìíBS}Ö»µµvG,ÑÜ=7òäÚ&™lÍÏ—'"dÚ' ÿ8Sxm\·Eøæ¸ s#Ú º sÜ9ƒïâþðÛ¯‰~ôöô¨ŽCÉë\÷võÎÓ—×[bƒBÙ)П®ÊÒa(+t4©Šë…Ýx-Ùo¼V¸ ˜Á«4…7?ÜWÆd*§…èéÝ úW5Û¿B$ü½"éO‰4Ó‘ñw‹œÁŸ¦qÑâ‰V¦QÑæ#^”Fqï¸~~7ú)¿–¼S”ü¢â÷‹>¿Gl÷»Ä ß!F|hãBڸЄ ڸЄ Ú¸è‰ Ú¸Ð„ Ú¸í¢mðœzÚ ÿ”ËÚ¸ÐÆ…6.´q¡ m\ ý‚¡‘„F÷i&hçÍ1ÑfAoLÐN×Ê8]\Œ žSÏC#ôŸ’¬\µ"¡‘„Fx¥”ÐHvûÛ`±>±VòËb‡ß «m—ùíbÔoc~«˜ð bÒÏ‹Ëý,Ó”ŸfšöSâ ?Á4ãÇ……g¶ùx§è_õE·¨b€P·?$º@P™iXtø#b Óe¢Ý߉%$R‹ÜÆDbœ…g#Èô×LÝ.LáÂX²!¦pa ¦pa ¦pa ¦pa 7Ë4妙¦]˜ÂM0͸0žÙæÂè£|Õ%S`€P· S€* 2Lá L0… 30)kc"ï4žJ^»dúk&òÓn sH˜þ2$a sH˜CÂæ0‡„9ð2~¹Ì2M MK˜C&˜f$Ìg¶¥[è£|U’90@¨[  ¨ÌsH˜‚ æ@¬-1)÷nc¢­a¶ m™ Ó_3Õ¬¿%gÎóÅü¢\¶?ó±Éй¤˜«(æB1øe”7ó±YCz`å$)'Å$”ƒ—DÉ‘™•h̢؅È6ê·ˆqD¶ Žj±ÑlÚOнˆd3LŽØçÛb?S Ñ1…ìe!Âå˜÷#2fýUáWö(dù„Ñ*.ôrÔ«øƒåTt#:?QÄk××)vàþNPɬÌÑr»èõÌ* .„ç2ÆéÒ¡ZɃLÝP¬ã÷²bðÖâz ¼µÊäá-­Áð":.ÀƒJ(/âˆÕm¸'Žr¸'îÏ4¬…à7êÂZ~ø`-¼iÖB°›a‚µ\XŠ ÖÂõœ kÁ!‰÷#xfÝUáV)ª¹°– k¹½+î B‰ÎO·Ûõu –¸¿TF²-s@…µ\X }"éî@WÑ\ɃL°¢üVŒMŠa ÁZ˜¡ªbÙhìÆlmÖw\X íq„ó6ÜG9Üwgšˆ"',†ø8*a1ÄÇ Ž°bâ´„Åg˜`1 k1Áb¸ž“°v ñ~Ä׬\²ŠàIwHÂb“½;+rc¥Š‘DçÊ›íú:ÅÓÜß * ”9æÂbC߃;è‡ÀUÀWò ,†D°c÷#)ôᙪ܊Ø=È}ubœ6ÄÐbe'œN:ãáÊËGàpäÕƒpÄ­À[á˜pÒ^1À<¼,†±“)a7`{µÃ+;°ß:à¥ÄËØÌ3 ¶H܃lìYGïßörûšöw¦€ýN{¾Mìä-[æm´ƒ@‰^`GÚ¶R:¡p‹_‹ýª¨Ù·4"4.¨ÜÓa·Ãt\LT…ëõÁ¥ó‘ b:pu"0òÿv¸M6D܈x¤“9¦ƒSÁ¦*cU°©*àû°±ÔÃt€4öðÄtà–ã¼)1ÞSeöóí|Jô|Ò¾" Ñ …[\=vQKCJã#ÊO0%ö L kÛªbû°æ ÉG0%ø¢˜9h;<µÛ'^†w2Ç”àÙx}^^×WÀ÷ÁóÕÀ”€öðÁ”°[Æy×`JìôevÄí|Jô½’ãX ‡k‘5ûÍõöTSvŽeoC&£Bà¬Å…Ù>šÝã𦠼+ /ËÉ 䢿9çF‰r²!“§ !òðp&‡Gsv«ÁêgáyxQ\ø éµ9“F‰2­!“} !%×b‹x1@Ï0U ET •,Hõ÷aÆô&Gt–¸Š-cÕ„ t¸Á¥—+"Üà^ÅsÁ aeçYΜ”EMF¥ìJY×8OPÎ0ùƒr åzÖDÅõˆVÙ¬8­>EÖšøcZ‹œ^Z$Z,4“ÍrÚ€dL2jM¼L—hÒ9m²Y¿A7è—_ªonÓòšèe¼ð…“ÇçŽ|ñäy_&?ŠÚÉCDë¼Î§Â×ùê[Mšâz/Æ}ôzãµÞI!ú®¢ÿŸ…x\ˆÁ¿ýƒ#8߉k»ès€¨å®&—1ÍGÇó!2ÿ©ë$³ÙnQ²“•±H ^ìû@Ð ( ÅEo,qx˜-/Gß1lŽàçà,Wð4õÅ®{v³÷õ{O|R/Zª¸;$ ­qÍ–ÅOÌs£ÿç¿Ø´ß¦7-°iM £UB¦ŒˆFŒµä(·.Òf­s¾^Û¥SU?_½@[ôÜÈ=h#^Ø´À¦6- F6´v«î»J½>³ÙùÚל…ÅÍ3\´sè•1¦¡ª‚®q eÓÚ4Ô-iè[ÖP¸°xð¸&^ß얺ͣÃíÝ=Mrw„L{7Æ«05^£S³Þù×~ŸÓD¿aMôÛ­‰¾3¤~á¸{âÄáÛ?ì7 ùFaE¾QXë|£ø1è?×ùF‘ ¿QŒ="ÄžŸGtÄõ±Çõû:éòÒAÚ³ƒ óXÐÍÜ z˜¯žì 'HÛ)ϲ«àI/Æ<áÙÌãžÃÜñâÌm/Á<æ%™[^Šùªg“Ðn£O»d™·9æ­AžyKP`^Z˜çƒVæ¹ y6(2Ï%ÝOÕ£®ƒ –§xÌ‹3·=‡¹ƒYc–Ę%ñ¤ž¥=*‚ÒèM -Z‘bA\KvàhÉ l-Ń˜–¥¥dÀ3&1¨¦¡ DÖ¬€Y6cv޶]ÆÑ±1eúoe£){¤C‘ùj`“Ðk—‚¢—űÍËáØêåqlñ 8¼ó^+Ž9¯ ǬWÄ1ƒÇKÁn,Äå2,ÐN,Ö. 9ŠÁÇ Æ8š€nÞ nm’8nÁÜKvæ]²;1ç´´qìÂ\KÐÞ±›æX´{0·} žK t@^Pl¢‚çõ$²ƒD]Žɺl©º c˜“ ŒBnª<ÔÈä¥F&O52y«‘ÉcL^kdò\#“÷Y­§9 ¼”ÇÓ/¥Y˜ZˆZÂxZÂhZÂXZÂHZÂ8Z‚3+±Èã”øÂFðtÀ®toÕ¢)'R’ GR’gRR¥¤œJII8–’ÔLjƒz4»U‹–g¤˜×¢%Û+hÉñR¢o¶Edfó‹™ÙœHÍ–S³‘œM,¦eb19›‚ì,¶HrB$ — ƒC¶;¥ 9ÆrË–ˆÏÆ«2¶Ÿ]³Núp’OkžßއùfÅéþàv[‹#ÒZŒá|çV[‹;Ѿq¼±ÿ˜×nÒÇiÒ7¡ç‘jš_FÏ»ne+b©XÄ‚NIJ‰ˆÅS‘•ÈèÕÉéÕjÁÊ¥¢ 1¯“aÿÝs'îºÔŒXˆ´ã}\ØÉ-&·©Û“ïÔ—ÛÔïðGuÇ—¬¼ùýïýà´‘gÎ>÷ùöÄÈ?’;äÊÊs;DL¬do9-‡ä¹7?Îuœ"ùûí$'n ù{ ’­½$ÿ`„äÔ­WN?¥§­Áo¡¯3?º¥#a¥c|púÔ {oý–¬ÙyÙœ_Zø_Aq Ðà÷ˆÖñÐzÓ)ĶFh0ýœþ:q/îqD¸ÇáG„{Û+zC:ù¦4çô«DJÀJ¢¬$JÂJ¢4¬$JÄJ¢T¬$JƶJïE’«žNÆUO¥âª§qÕSi¸ê©$\õT ®z*W=~«^Q'ßL ¢S–y ñV@ â-€Ä € Äó€$Äs€(ij¶ê§=ŠeR6…Åc#o±.AÜfÝÇf]aGÖ–L2·ªˆÃšž% =œJÒb1æN#é  ±òüœ©°Å¥ä\“›±PB5cXZ  ,3Œ×I(Æë ãm!ôâµÓƒ Œ#Ž!Ž"}îBÚ܉tyÒäÒãn¯DæÅÆÅ¦Å†ÅfÅFÅ&Åſı7 lŠ6;` »R; †£R.º±µÔBg©•–€¥6[gN‚T:òRZÊPªe)Ké—¥¥d–ò”¦Y*ÍYj¡U`©•Ö…¥6O!ÚÔË<_J|&GR’¼›¥ù;KqÚ,9´'X²i—°ä¤%à&-ݛьòc%+_V²òg%+ŸV²òk%+ßV²òo%+Wrf-܆Aucš6P]Æ u9noBƒO 4H#n$,(„‰íÀýI÷À£Ií¿ÿÖb§åï?ïµÓ_@Ê~ÿ£阕@&_ö¿¶ËF÷Cryù»ó¤ÌA¹|fq/L ¶Ë•Ÿ>\‚Ž[åòÒÓа_ž]þÎü éºO.ÿì/&$è^Ü÷H”ªÊs¯í‡¾Ýrůe¢Ï¥òŸÃ>}¥ËËVå7þ]vȳ«ÿö[ý5$>óì2–Ͻ~(…ÛW:þ©ì”+?ÿfΖ7}û NϽøœµªþn^ñOµÒUçú§—èÙ¥§¯sèÙÖS>õ½üÃ{,úÊñìò™oß§«Å? ¨ç¥¯vѳqÕóÊ<ìrñ~î™l#µbCOp×l<œ:úcî‹Ì‚ž÷¿†I­üäÞ]k{„Uö¿\e¥&Ÿø?ùìõ ôtÖÚ2ÿîúÌßs×ö^hû—¿»›žNÞù²Kž{û7é¤÷¯ÿKVä¹×wè,§þÓû²[ž{9CØË–«òY†¹fëå;Ób¥úe_ö7C¯Äîñ…¢îöÚ‡_—ò]†À×OÖ_æï‚ñ»f@ˆ~¿|]3Õè§×\O'&é`@F CŠ~Hh@a†€@bŠ,ÁÎõ‹´:ú(d ‘J:(e UZC-¼Ru(f ™jº(g ]RC½”Á~Fи0‹!€ Ae4CðÒd¤F«3@·=ã*¼«°¯ÆÁˆ`b€ŠF.C cÐd4¸Q@G€RÀH$˜ðdÐc3”"HEЊ A-‚\½°Ìs ÇRš)˜¦ ›‚o Ê)X×ÍOã=f¤f/„‹M Ê7JNCBŽ&êhdvãéЮj°A3D±DcD±G“D±JÄ#ß Üñu â¢+…ø)ÄT!Î ±W)„–Ñxm£xR†83Äž! 1jˆ[C,âÛó¦£#ã.‡:„Õ!ÔÞ^Ÿà•å4¸‘Ы%Lk7,5&݃æŸK궃e†^q!?xïïÿðá¯=O_dÞþƒ=y»ësOÓ™÷ï¢o*‰«ž§¯-o\E_[Z\’_Γl_Ý,Gî‰>½#ÒïH}´Zl¹Äo9|üä¥ZâbŸdÄ:¨à-Ðﮃ Ì9~7îm4]»ñ³m7ÞJ'ªF êªvÐÍuDx~ÁRߎ뇰 –&ÂrEXÂËa©#é™òGÊ«×Dzt¬b!U/ ˜‚Š)°˜‚‹)À˜‚LRhRºbc²E¦^à1S2!S 2#S@ÊèBPºgÐyB—žL)Ê”¦L©Ê”®L)Ë”¶t­KC,U«è²˜)“™²™³F®ޏ„<Ûk’rÕÔOT1EVT‘E\TñEbTQ&ÅšÛ(¡: â q¨˜CE*îP‘gØë*i]þQ¥ UR%"U.R¥#UFR%¥ ——JuT5[uÊ”¥L™*ü~~Ó¿ó·Õ¿ý›‚€)¤#eƒ°”–Â’CX†Ka¹¢Í3%ŒH]ƒûA—<6‚«BŒ®Ì˜Â)á„e°Ô–Â’PX&ŠÔŽ ” Ñ {oX~Š–¥¢åªh+ZÞŠ–½¢å0ý­Qã£óÖ9¬ºY ¸hen|âQùÓNh×ÎÍßuä¸{ï± +Q¬—/ôæ?lÀïæƒZ0jyÜFèίzdBÿÐ ´Oí=„ÐÎ÷™3{ɺä#ÿGþ4òéÿ²‡kb~‘Þ¥ÙöU>e¡4Їý`ØúWñHNðßÐY`ºÄØÏ?û„Ÿ;ÄÁ‹ÛÂ!0$ÙÏ|0¤ØÏ•`H³ŸF0ðW¯C–ý4€!Ç~.Ù¨ •ìgòì§ Uìg6ªÅ+g¡0eȃa´Ž’øÜÙpÊ$æBEÔÁõ¹`¸ ªzž¸Ñ>—‰761 þ.ÎÂZþŽ1Ž;Îø¦:¸Î4fÁý̆{¬C ÔE­YI5P{ʇ£TAÍס®¯Z­ Y­uKEÙä ‚Ó&‹ò’¯Tš:Ï¡ðÇõ'Ïž£ /ïôJQAßœa(«¶„ â$­ÃÓ•dBÓþ/þô8:}FT©+FÇÆ'¤ÝÐäÂ@ bÏ"ŶŠ.Š ÜD;Òsd`LxñP¥Ø0éÅ Ÿþôè}²WY.G9zh•¾ð—PÀ›Ozf¼;‡=3ÚÝ‘’êî(ÖÍgà‘1*†1tœŒ»À[khbˆqç´gF¸{¦d…79ë€]Æ69A`;çãÂ,ƒÚ¹„€v&ÓÌN1Wär _J\0J«ÌHÆ…âªk­žûšBaÕµvÏ-@³çf˜ÕssÈ蹯A1zîS'«çþ1ßÏê¹)Ñs3Ôî¹ùÞVÏÍ1­çæe­çæåpϽX‹õ«õ8_Á/çp¥üb‚_ÆU`ø+¢:O™9 Œ)Ñ’âÌÕà”†æ¯¯ 4z¸dá§ \r`­k…8Š#¾PŽü¿aäWûÿÝT@-­mí«×¬]·~㦎ήn_ºåüÿZºlùŠ•M¨ÙòèéEý¢úRþ……‹/Ꭸ@}™ûÐÀàÞ}C¢"ãþÿ4Î_ ¼Ø=Õø_÷#ff jFFr}÷Äœí|n§inJ°y2_[Çœ9ë$È·–„sdÅI¨î¬y§Â⪱x[AY¸T V17œŽ(&¡²R3“ÑO5RN©ŠªcÐüª¨Èáub<ëw4féAÜm•&ùˆÁbŠñ…¤-+ú¼(Iý ­Ê,¢ãáNDÝM!>b©¥¯yuû4a‘}(v‘y¤ò±P Ž?ÍFP‘d˜fã)zí,l+Qe9lÍb9l½K5lG¬°5ÂÖCcx Ì'ãÄ- ˜ <¡h=ÅþÐi|Zñší}†œ©Û"ý³ø¬‚$çj´ˆuÎWkÑê\¨Úß™¬*Gi9JÿŸEé+J;Ÿ±:×gžÝjt®ÏnÝÚ¥w®[»ž3:×çжmÝV纭ûù¬Îõù¶Û+Þîõ˜ëöž_2;×_Ú±Cu®xG©÷e­s †ÙÿäÙ´gNZ.¢Ló¹ÐŒ6ô®àcâ"Å)¬ñ@r£Æ/ îÕ( [š«ýé~fMú¢É\D%…š4rÄ ¹è¥÷õ“¹§5“" oZª@½}ýUƒùËj1ež_êíÓ8Ä[ç{(ª¼øų:»(»{z5våDÍq4nœK5~©»G£š¾»(ê‚W^üpÔÑÜøV©«[c_µØ‰œjds°ùpÕYÔŠ ¼ÈP_ý§ý©Î.©€”?M!} ɧOÄýbG§>£ê€œ (¡Ná,çЍCõ|e ùA™MÐ'/ŠiQ’3 à<Ž.6Î/N7.j‡>G /XͰñj§¯O$ý)ŠøúÒbŠ_—Qc T=Sµ¤x­4^rF‡£ªŸ’k‹% ªÞªR¶-cšßb`œr’1¬ãà•‡çhÜ2â9’à•·Â@Å씨Î8Õ É™Ž*mNˆgD΀—œ‚àœW“aÇP¥´®hpKYpã5t¹@sàÆk³‡hxñÖøÍÂKèЫN\q…@TJ+E1/gRBtª4$n…©€N2R?’ÍFJÉ«.ØÔ=§6÷£i©S=º.x¤>žºÚ‘•H©#ið’:Gæ«–’"‡¨~QJY¨Ò©od‘ê3¥¸‘Å*õ‘ÊF–¨¾SÊ^ªÒ'©Vd™êC¥¢‘宿À·ð •¤I1Ã+pRFš8H# RÆp3)c¸¥dÉnõLÃmž%cí¨Ý’±Õ–Œ­YcÊØÚµºŒáusAÄðúybOá¸q£%a›6YÖaJX§)a¸Ë3% w—, Ã=*¡–†{UR- ÷9à å‹ô«äZjpÁAjŒiÍ'ÚP¬f袅ÅR†.Yd(R¯Èp¤Xáƒ)pR…«ÔW IƒƒT)2ª¤Dá±,8H"ãYpêD&TÖ'¥‰œVã©KäL8HQÂg+ÁAJ9W)="çóÂ,ň\ȃ9vb2DŠÕšá‚·ÊNÄØC%×F%bG&bÂäE'bÔxÝ ‰X‰˜Â‰Ì'‰ F"óÒ†F5‡4 7{?‰HÃ`ÖÛHÃ5Ò0˜C7Ò°4Ò°Ÿþ¬%" ƒizC·ZBºUj¹>" k¹þçI, x* ‘„ÝÐú­êÕêYêÅ–%LõºÑR¯o2Õë¦6C½Ú”z•Ún6S°›o±ôë–_XúÕnêW»•‚µßj¥`·Þf§`·ÝJÁn_NÁðê‚WßqgDvÇwE$`w­ '`xMHÉJkîŽH¿î¾çÞˆôëž{׆Ó/¼6¤h¥µ÷E$_÷Ýÿ@DòuÿëÂÉ^R¶âºŠH½|èáˆÔëáõëé^ï=‘z=òhDêõè† vê…7xíÔkãcë©×c?¡¥^ø o“–zE-ó~ÏwP­®mõÀ%iT‘š’ …šv*«‡vTêLI©±~BÀU‚Sù±ÐïØBïÿýc¡JÀ ÖOUà7‚A­›ªPÿ»X5-Gh9BËê•#ö.G(¥¡åý+"4íÙ#âX®‘&ýâÂE‹éí˶iöˆ9½Á`¡”ÚM å/YJ£­ÝÑÝøsé)¤Ž KÂE‰.]¶\ÜvàHtÙò~,u¥(°¸|ÅJMJbâj£Ð”qÅÊ&ß×W]“½G 髯I†L¤¸²É\‚-ÙeTÐä'A«¿ÐœÀäD+­Ú™9yË–Ù-è"‡Z´™,ù¿€rÖùKˆœ‰e¹h+Šr^VÛa$c{fPÍáoåÜ« Â|*A‡%9ÿ,V5‘ócO£‚äÐûÀ„{ì™ÅfÙxA_îuùR¸‰Qf5šõeßt2ÕTBÊ5î”fü+ˆP!‘™-Q>«·*åRzqÅŒ¨R!¹ÂÏÃ)‰Æ *!Ëc4¡CÌIX%ÎÚ@FHCZ0'”˜œå)ãÒ´5hqó9Éœ&b$›ÓŒä3¦|9µiSºH]ÊV(R’2Ò°µ‰4†DŒÌW2.e /Ad¡*I™"‹,ˆz-ÆP’”$K,ˆ~iÉR(²Ì3¼Ü³i…-P+-jj²ª`ËQsH ZZBÕÚj@ì]á6ܦVr¤>‘v ">^7„HÎ’©òZ5F#l]\‰^Ÿ0o´Ê›ÔêRp¶Ž0Ô©–¥¤êà®0Ô­*NÈPOO¤ õöFËP__X†<Ôû*Th``ŒV¡½*´ÏT!2ä™’C†-T”“„[ÝmDu±RjÈhÂcª$UF¾'n@!}!§ã!èŒ!.YŸMêõ8—Ò¤†œOi:C.d‘!“MaŠ¿~å=az¥ï7ZÂÔ÷›ßî4¦ßîÜi&L;û_ %Lý¯¾¶+”0½¶kWD´kàõˆ„iàõ7"¦7vï'Lx·7‘0 ¾‘0½ùÖžˆ„é­=!”VÝž½o‡¦½o¿c'Lø[ަßywŸ•0½»ÏÒŸßÙzôž¥G¿²ôhè}[}Þßo#û÷‡ôhÿ¡„éƒá#¦á„&|ÀÔ Òìt飃fºtðc#]úø•áC¦6•}‘}r8<üiD^ôé‘0ˆØuä³Húl$Z£Fþ•*üáhDªtôè "u4Z¤ŽFˆÔ­T食[©ÒèçǬTéócvª„…d óŽG¤JÇŽE¤J 'EÇǾˆ@Ǿ8‘*14œ*}qâ„*á–táÞ—f¢tâËq3Qb€J”¾ÿJK”ØÌLÑG|ùƒ=ùV4ó•Á#t˜ë¥j”OÛÑ4Q_ý£x,/<[™ WøÅ}CÃ|Ÿ ÖQƒÿ ÿJ;—ì@1wNQ Ivåø=ßáTÒÂ<ú7åó·•ùWÑòlÞöEÀjh¹Š’*.¾óÃ?Kþãï)J¼ÆÌ«wG0ÊŠ/¦8Ø×<0ÊûÓü}f9åÄWQ?Í?DÄïø{üìÓü½ff œfi5ª“G«U/3Ï–§­ ¾‘T+¯®F¾Ç\Åÿ¹=Å9Æ>µTɯRVhuP=Auæƒ*„ 0U QÑv—S#¥ƒVã3&ÕtC>LËîJVZ<`@]Pa.#BÁBªlüÒ OMïI±TD’Yƒ>N6eR‡ä&oH­k’Æ©ÃÁU Âzy[°xä(àŠç7’Æ”Éù¼‘¢ Y49â.Œ›ôpÅLf8‹]“ÎG1ÂYJ 6¸Ëx +*¸ËKœžÎ²Ò ‘ é;K‚⓿ܬ+ ÞìuØJ²¹ã©§CJòÔÓ[l%Á[¼Î’lé|æÙ’<óìÖ’t=g+I×s¿ÚR’_mÛR’mÝχ”¤ûù¶o) Åz^ )IÏ‹/í)ÉK;vôJ²£÷å_ÛJò2M,ûL%Á¯LÑ„ÒTš`îÔ9„w–úC$zõ;J¢û^­Ñf–lE Lµìgëœ ž`ªÕIS)ªQ)Ið€$ÜLŽo òž+euWÕ&¯³¥Z§É,stRÌÕÉ`Là<ñ‹ ÝçÈÞ!hôR| Ãå§Îñëø³ìdØ sôbª)ƒl_æHË Ojßåоë“Uëè_õàMÁ2¨´ƒxêû"ˆÍ‰OÒ.¡àÃ"qÿëF„äÇIfûúä—Id˜ì¶ÕGNšÔGN„/ou V"øhJ!üÑñ”½Æ¹ ÿOa?ÞÚ ÿ­Ì¿0ÿð2OçaóAŠ~î 6ÿ£¸ç®¤UÓ„›*w.¶à2À·X¿øÕkŽÉâÍò;Mñ"ioI>¹­¼Ÿ§¿¸U>:\lC¨Ím›ã'Û4éÁ~º=Gÿ\“$—­N›D¨ZSUnöo‘ñ¯ Ùÿê¤!;tÐpò$zM—ùh×®]vN0˜Ëή×ߨ­É>1Ím\v¨i÷à›oé²C‡@lgfß³g¯’ã†{¦ö¾ý—|lê8Bt°ÈÎÛ½»ïwï½÷{&;tHxìÛÙ’î0ôþþý 3Ù¡cÔ£Ò5$;ÂëÃ>:øñ¡CŸþôÈ‘Ïÿì„ݾUvrb¥ åø* _K °…µ6µf— rÆsµ1±fg=P눅=ëé~:~䟄ҟ¢¥#Fþ^³þøì4b/>«gúcìåh4ßWôs¤Q_Ïtý‹¬GñY‘M X¡œ}kOsrîaŠwEÚ9ä:Ü•÷bqíæbßðY÷Æê“I¬ÍЬ7T¯Ö1¨ä&ƒQ0¸yòãSjôÏPý%F/ú…?ë•>5õ¢Vp­Ç·+µsyÚ›³Úƒ¡jw–0ˆz˜#`~ saä+h@æüjÉõŠH’ÁroóÍXø•Z±µY›-Žñ=e½ýHnÈh4Á%šåë4!ó=“%dü6¨Iw!‰æ‡»ÈÕ*' ['X,_шA/q Y’²Ú›,UmÃÊxYÆfÄòK‰\q•ª0ùÕT…-Uášn«ŠÀlUÔPŠž²UEa *€ªB/ó”A|²tÊä >9}*RUØñ'fTaIUøµE¨ ÇmUÁ'½S¶ªð±8têÒáBh¥ücÿÍ—èVïìõo®xcftools-1.0.7/test/source/tiletest-61.xcf.gz0000644000175000017500000002544711223225713020715 0ustar makholmmakholm‹ì\}lUv¿ófÞ÷‡í÷ûùÙÏIìØ$þ ‰ƒ,‚µ-¬v+T)•1!kä„-0-ZiÛÒvÕÒÝ–ªÚ•º”V•Ú?j@üѲ,ËÇ ´Th+•n›®`¶0ÖâÛß9÷Þ7ó^lZƒ õ“Μ3wfî=÷ÜsÏùÍœ8'çï¾§ÿ¾¹;úï˜?uBà÷„&úµ, ‡(uíA„_;ȵ€:´L÷íÛ ÞzÝŽÎß={òÄèÉ…ùÛ…ºn¥†Ïœ½ÿÔ‰þùÓgO,œ91wvÞ=}f$3|ÇÉ9÷”»Ð?Ìltáäm³ýcü[G˜Ô½mG'›o¼X Gï;sÏìÜüé“ý“¦g4Þ¿^£n½÷ôüY(?÷å¤õ}îwœ9q¶?úôÅMª¥ñQþ¬'…°WaÞo ‘¿Kˆê!F,ÄlzuMˆc,ÄMߌ<ð(¯íÿyšÎž¾½ÿ”û«t1¡CÒ‚E&­eúe"íÙH{."ç#2-rJJùºnOF®GÈ…úÅ~©IQ\݃I¾ÛØ{mWSC;&$ë¬X®Î<øEkñÂKï¼»$Å ¸P9Î-+/½³$s²«©¥Kæë-óC¹²ôöKO[O/=Y;>S ·WäòÒ»|uùÉ.fÅÚc²ÜÔXÓÇÕÇnñÁc²ážIQ‹½W§Iqž‡yå•îmÔ'!×–Dg“Ú%jÌ6ÝÙ%ãÕWjÒ¹Q™„èjR¸$òM÷ô‰ úÖ¬›ÉÞGµ£˜…~@;Cë/Ξ:ÅÞtzvaácv(jÓNe*q¨lèPηštÅuçYtñGíÎkè⻇’D+ÉÇ0ZL®U1Ðò’”3Äß•ò8ñ·¥|øKR~‡øÓR.®ÇŸ”ò%â5)ß!>#åøZUZ2ÞÓð?íù¸”ï®7Â'­ÿ§ËBŽÙ†’Èù”ÏæÓ¾—®ÿ«R¾á+--Õt(8ª·÷W4Qxi¹nþÌ=§fçNPÆsï‰F¨?ßê…èôŸ ÷Äú)/’ÄÓŸoR×ÓsèòWÛÓ˜ZæQ¨ðu }?GªÖ:ÉIÄ}¢(‡ErJ y4Å—W‡i:§…-kšÖm‡aü#Lá5¢#‘öõä+#üJai¾~ÉG×9ߨíÒ¨–È´Ùc°Å8øl0 R<rä~P#·#dÚbòrPã5»©}=9Ê­MÚ¬ Î7jÛœ¢–0ÖQVm´Xs[ôÜÈÖFÜþ9J¦ÝG8M×L[”ÇA x^Bó¼3Ï-²§×²· MõYï×ÖÚ±Ds[ôÜÈ“Ò6Édk~±<!Ó>ýÇ™Âkãºm,ÂÇ0Ç}˜Ñ^Ðe˜ãÌq|÷‡ßMô£·§GuJ^纷«w®˜¾¼Ø[ÊþôÚ¡,†²BG“ª¸^Ø×’] ñÆk…Û€¼Jñæ‡ûʘLåœ=ý ;Aÿ¬æoûWˆ„H$ýƒ"Ít@düý"Çgð'Di\´øc¢•iT´ù‡›Ò(î×ÏïG¿Eʯ%ï%¨øý¢Ïï»ý.1èwˆÚ¸ÐÆ…6.4a‚6.4a‚6.zb‚6.4a‚6.FÛ”  žSÏCôŸrYÚ¸ÐÆ…6.´q¡K¡ŸB04’Ðá>Íà¼9&Ú,è ÁéZ™ §‹Íá9õ<4Bÿ)ÉÁU+Ih„WªA d·¿ ë;aµ!¿,öø°Úq™ß.Fý61æ·Š ¿ &ý¼¸ÜÏ2ôÓLS~J\á'˜¦ý¸°ðÌ.ßïýàk¾èU Ðêö‡D¨*3 ‹Dì`ºL´û{±„Dj‘Û˜ÈAŒ³ãl™þš©Û…)\˜K6äÂ.LáÂ.LáÂ.LáÂ.Láf™ºi¦)¦pLÓ.Lgv¹0úè_sÉ Ôí  ¨ÌS¸0Lá LÊÃÚ˜È;§’×n™þš‰ü´[Â怿 I˜CÂæ0‡„9$Ì!a¼Œ_.³L‰¦$Ì!LÓæÀ3»€Ò-ôѾ&É Ô-aPTf‚9$LÁs Ö–˜”{·1ÑÖ0Û„¶ÌV鯙jÖ_‘3çáÙŠb~Q.Û@ŽŸùD‰ÆdÅ\RÌUs¡ü2JŽ›ùD‰Æ¬!=°r’”“ŠbÊÁK¢äÈÌ'J4fQìCdõ[Ä8"ÛGµŒ8€h6å'Å!D²i&Gömq„)†è˜Bö²árÌû³þšð«{2‡ü Âhz9êUüAŽr*º]œÎ(âµëë ;p'¨ŒdVæh¹[ôúHfPÂsãtéP­äA¦n(Öƒñ{Y1xkq½ÞÚeòð–V„àxàA% ”qÄê6ÜG9Ü÷§›ÖBðua-¿ |°Þ” k!ØM3ÁZ.,ÅkázÎ…µàÄû<³îšp«ˆŒU‡\XË…µÜ^Œw¡ €D§[ Šíú:ËÜß *#Ù–9 ÂZ.¬…¾‘t÷ Š«h®äA&X Q~'Æ&Ű…`-ÌÐU±l4vc¶¶ k;.¬…ö8ÂyƒÓMD‘C|•°âãÇFX 1qJÂbˆ‡ÓL°˜„µ˜`1\ÏIX »„x?âkV® YEð¤À;$a1 ‹É^Ž9ȱRÅH¢‹áÅÍv}âiîï•Êsa1 ‹¡ïA€‚=ôCà*à+y C"؉±û‘úðLUîDìä¾:1Nbh±²N§ñpåå#p8òêA8âN`‚pÌ8i¯`ÈF^ÃØI €”°°½Úá•ØoðRâeì¿NæP [$ nƒÇA6ö¬£÷o{9}Mû;SÀ~§=ß&öò–-ó6ÚÁ D/°#m[)P¸Å¯Å~YÔlá[Tnˆé°Ûa:.¦ªÂõúàRŒùÈ1¸º˜ù;ܦ¢nD¼Œ ÒÉÓÁÆ©`S•±‰*ØTðÃØXjƒa:@xb:pËqÞ”˜ï©2ûùn >%z>i_Ðè„Â-®ž»¨¥!¥ñå'˜û¦„µíU±Î}Xóä#˜|QL‰´žÚí€Ç/Ã;™cJðì ¼¾ /¯Àë+à‡áùj`J@ x‡`JØ-ã¼k0%vú2;ân >%z^Éñ ,õȚýÖF{ª);G‰²·!“Ñ !pÖbÇÃlÍîqxSÞ•…—åáDrтߜs£D9ÙÉÓ†yx8“ã9;ŽÕÎ`õ³ð‚<<„¨@.|†ôÚœI£D™Öɾ†’k±E¼ g˜*…"*ÐJ¤‰ú‡1cz“#: K\Å–±jÂ:ÜàÒËnp¯â¹à†°²ó gNÊ¢&£Rv¥,‹kœ'(g˜üA¹„r =k¢âFD«lVœVŸ"kMü>­EN/ --šÉf9m@2&µ&^¦K4霶Yƒ¬‚ß ôË/Õ7wiÙKée¼ð¥³ ³ó'¿|ö¢/“G1î9¢ ^çSáë|õÇMšâz/Æ}ôFãµÞI!ú®¢ÿ„x\ˆÁ?ý­#8ß‹kûès€¨å®&—1ÍGÇò!2ÿ™ë$³ÙnQ²“•±H ^ìû@Ð ( ÅEo,qx˜-/Gß1lÅCà«p–+ø šúbW‹=³Ýûƽ'þR/Zª¸;$ ­sÍ–ÅOÍs£ÿç¿Ø¼ß¦·-°mm £UB¦ŒˆFŒõä(·6i³68ߨíÒ©ªŸ¯~H[ôÜÈ=ÒF¼°mm l[@ŒliíVÝw•z!|z»óõ;¯9 ‹›§¹hçÐ+cLCU]ãʦ5´-h¨[Òз¬¡p`ñ0àqM¼±Ý-u›G‡=Ú»{šäî™önŒWaj¼F;¦f½óÿ®?ü¾ ‰~Úè·_}gHýÜ‚{æÌ‰Û?ê7 ùFaE¾QXë}£ííÛàE2üF1öU!ü,¢#®=Þ¨÷Ø_ÒI——ÒžT˜Ç‚næVÐÃ|-ð´`=AÚNy–]Oz1æ Ïf÷æŽgn{ æ1/ÉÜòRÌ×<›„v}ÚŠ˼-È1o òÌ[‚óBÐÂ<´2Ïm̳A‘y&(é~ªu$X°<Åc^œ¹í9ÌÌ’x³$žÀ,‰'õ,í!P”F¿hJhÑ Œ âZ²GKN`k)Ä´”,-%ž1‰©@5 %²f̲é³»p´í2ŽŽ){Ô+óMÙ#ŠÌ×›„^»½,Žm^ÇV/c‹WÀ±àµà˜÷ZqÌym8f½"Ž<^ öc!F°(—aöb±öaÈQ >5Æ¡Ðtó¦qk{Äqæ^²;0ï’݉9— ¥cæZ‚öŽÝ4Ǣ݃¹õ\¥ò‚bì8¯'‘$êr,HÖe+HÕeÜd`rSå¡F&/52yª‘É[LkdòZ#“發×Èj=ÍIà¥<ž|)ÍÆÔFÔÆÓFÓÆÒFÒÆÑœY‰E§Ä¶‚§öp¥{«­ÀH18‘’l8’’8“’âp(%%àTJJ±”¤†`RÔ£yØ­Z´<#ż-Ù^AKŽ—}3-"3“_ÌÌäDj¦´˜šÉˆäLb1-‹É™dg±E:"¹²½Ø)mÈ1–»X¶D|&¶X•±ÅøÌš˜qpÒ‡“ øxZóø.p<¼8È7+N÷ï·ëÜZ‘Öb ç#8·êÜZÜ‹ö­ãýÇô¸v“>N“¾ =TÓü2zÞu#(‹XKÅ"t"–MD,žŠ¬DF¯NN¯V V.Mˆy ûïž=s×¥fÄB¤ïãÂnLnù0¹¼­1ùüJcb;ø[üQÝñå+oýàû¯Ÿ“#òü…g¿ØžyàGr\Yyvˆ‰•ì-çä\}ë‹`µã’ÐNrâ’¿Ÿ Ù:Dòë#$§n…¼rî,=m ~}ÿÑ- +5ø›ãƒsÜpèÖoËš—MðÀù…ùÿ4›A)å D@ƒxh½©?âh[#4˜ú»F Ný8ˆ÷8"Üãˆp#½í½!|SšsúU"%`%Q V%a%QV%b%Q*V%c[¥÷¢NÉUO'㪧RqÕS‰¸ê©4\õT®z*W=•€«žN¿U¯¨“o&PÑ)˼ ‚x+ ñ@â@ây@â9@âY[õÓÅ2)›ÇBŽâ±‘·X— n³nc³®°#ëK&™[HUÄaMÏ’„N%i±ó §‘tÐ…XyqÎTØâRr®ÉÍX¨ ¡Ž1,-ЖHÆë$ãu‚ñvzñÚéA‚„ Æ‘NÇFG‘>÷!mîEº¼ iréq¿W"óâãâÓâÃâ³â£â“âƒâsâØ6E›°…])ƒ ÃQ)ÝØZj!ƒ³ÔJKÀR›­3§NA*y)-e(Õ²”¥ôËRŽR2KyJÓ,Èæ,µÐ*°ÔJëÂR›§‡‚‹@mjˆ­áEž¯F%¾@“#)IÞÍR‚ü¥8í–Ú,Ù´KXrÒp“–ŒîÍhFù±’•/+Yù³’•O+Yùµ’•o+Yù·’•+9³nàº1M¨.cк··¡Ág¤‘·ÂÄvôþƤ{ôÑÆ¤v”ßk±sòƒ÷Ÿ¿÷Ú©/!e¿ÿ橎tÌJ “/ûߨg£û!¹¼ü½¹Ræ \>¿x&»åÊO.AÇryé©£ hØ//,¿0·ÃBºî“Ë?ý“I º÷}µ JUåêkG o·\ñk¤èÕÔ1þsا®´qyÙªüÚ¿Êyaí_~£ß¢†ÄçžYFÃòêÇS¸}¥ãáŸÈN¹ò³oõàl9qÓsçqºúâçpvÁª>øCºyŤ•®:×?µDÏ.=uC϶>âSßË?|°Ç¢¡¯|Ï.Ÿî¦8]-þ^@=/}½‹ž«žWÞäa—‹÷sÏd‹©z‚»f‹àáÔ©ã¾È,èùÈk˜Ôʿߛ£km_e•ý¯UY©É'~ÊO>s}=]°v̽À]ŸÿëqîÚ>­qÿò÷öÓÓÉ;ÿCvÉÕ·Nzÿâ¿dE®¾±@g9uìïß—Ýrõå ýa/[®Êgæz˜­—ïL‹•ê×|Ùß ½7º óDÝíµ¾6ý.£×ÈàËü]0~× qÃo7‚¯k6úé5×Ó‰IúP QÂ"…P€a‡ €b‹F0E†3Eý"m Ž> hd ’NJh•ÖPK#¯TŠhf šnÊh—ÔP/e°Ÿ4.LEÀb CPÍ|†€4Y©äªÄ ÐmƸ ï*ì«q°"˜ ¢‘ËÃ4 nÐQ G †0R I&<ôØÃ ¥R´"ˆEP‹ A/,ó,ñ”†f ¦)È¦à›‚r Öu3ÄÓx©Ù a3¢ TâFÉiHÈÑDMà‘Ìn!ÚU 6ˆb†(–ˆbŒ(öˆb’(V‰€˜bä;;^¢ŽB\b¥?…˜*ÄY!öª2…Ð2¯m@Êg†Ø3Ä£!F qkˆeC|bÞtTbdÂåB‡°:„ÚÛÀë3¼²œ·zµ„i톥Ƥ{ÌüsIÝv¬ÌÐ+.äïýÍï>üçé‹ÌÛ¿s ow}á)ú"óÞã]ôM%qÕóôµåÍ«èkK‹KòËy’í«›åÈ=ѧ÷Dú©V‹-7Âø-'Î^ª%6û$#ÖC a ƒïn€ Ì9~7j4]»ñóm7ÞJ'ªF êªvÐÍuDx~ÁRߎ뇰 –&ÂrEXÂËa©#é™òGÊ«×Dzt¬b!U/ ˜‚Š)°˜‚‹)À˜‚LRhRºbc²E¦^à1S2!S 2#S@ÊèBPºgÐyB—žL)Ê”¦L©Ê”®L)Ë”¶t­KC,U«è²˜)“™²™³N®ޏ„<Ûk’rÕÔOT1EVT‘E\TñEbTQ&ÅšÛ(¡: â q¨˜CE*îP‘gØë*i]þQ¥ UR%"U.R¥#UFR%¥ ——JuT5[uÊ”¥L™*ü~~Ó¿ó·Õ¿ý›‚€)¤#eƒ°”–Â’CX†Ka¹¢Í3%ŒH]ƒûA—<¶‚«BŒ®Ì˜Â)á„e°Ô–Â’PX&ŠÔŽ ” Ñ {oX~Š–¥¢åªh+ZÞŠ–½¢å0ý­Q㣋Ö9¬ºY ¸hen|êQAô¤Ë^;;w×É÷ÞÓ[V¢X7nòæ?lÀïæcZ0jyÜ<÷ßí][pUUš^kí}®9'9¹ÓvÆIYÌ cQ]ŒEuS3<ðÀUÃCª=hº;¶)vTTTTTTl¢D‰M”(±M7Q¢DAMÛ#""¦é#ð@Õð@ÕÐUT ­!眽gÝö¿.{§í‡®š–9Vå¸×÷ÿû¶Ö÷ë_kí½Aèkèß ¦í?·"tÝ¿#tÓÇÝùB¬B¨ó?zö©}Úù>sf/Y—|äÿÈ/ Ÿþ!{¸&æé]ú˜m_åSJ#ýq؆­ä?ü ¦KŒýü³OøÙ¸C¼¸-!C’ýÌCŠý\ †4ûiUñ 0dØO#²ìçr0ð—ÀPÅ~æ!Ç~êÁPÍ~fƒ¡F¼rjS†fÁAëà(0ÌË §L‚a.TD=\Ÿ †Ë ªç‰›ís™xc£àïrá,¬ àOàsá¸óà\q0Ìkª‡ëLƒaÜÏl¸ÇJ0ÔB]Ô™•T µ§ 98J5Ô|=*áúª ÕÀÑZ·T”MÞ(¨Q¸0U”—|… Òôy¥€?®?uö}y§WŠ úæ CYµ%§hž¦ ¨¼¸ ë4:E1àÿâ&Ñé3¢J]é4>1yJÚM1,"ö,RPl«è¢è¡±ñÀM´#=ÇÆ„UŠR^¬ðYàF(@Êr9Êú…a Ð**|9à/¡€5žðÌxwyf´»c%+ÔÝq ¬›ÏÁŸ T cè$™t·4ÖN¡S§ŒwN{f„»gJVx“³Øel“s1á¶s>.Ì2¨ Ihg* Áì³å@.ò¥Èy3q¾´ÊŒdœ/®ºÖ깯ÉçW]k÷Ü4{n†Y=7‡ŒžûD£çþ1u²zîóý¬ž›b=7Cíž›ïmõÜÓzn^Özn^÷Ü‹µX¿ZóEpür~WÊ/f!øe\†¿"ªs”™³À˜-)Î\Nihþjðª€F¯— üTƒK¬Õ`­GqÄWÊ‘ÿ7Œüÿ¿›ó¨µ­½cõšµëÖoÜÔÙÕÝãK·¬ÿ_K—-_±²µX½}h`PT_Ê¿°pÑâ%Üåé¡/0s?Ú;<"*2îÿOÓü‹ÝS­ÿõbf– VÈHnhä>‚˜³ý¯‘Ïí4ÍM 6Oåêꙓ g½™ˤãld†ûˆÊ•&2mž‘_D.ó•Ó Î{‘ÙxR_`Vq²ËE L3Ëyz–ûxÃÅíÀ€AÉSÜ¿xÎY$äðC‰SÂ/2@êRÐNeC Â0 }xý,gÅÀÀƒ~‘0]-`®‹%ö#)-ß/KJYRþö’‚û<Ô—í+)‰õ{¨?×_Dýýj$Jh€îæxhÀ¨gLbQm¥A4̈ˊ¹âð”¶C±¡´àb|¯ªVJ0ópl8¡Ý_|˜ñnÄI‰úᇋ0ªŽâQ~ ìî(¡û0âÜ=P²‚Ü5G ŸŒyf€ãq¯à^9À/éoûºñ¦öö›oùEGÇ­·Ý¾zõZÎÐzýÏohk³î¼k ºûÈ~ú³ÖÀå ÔºæntïÚµ÷Ý9CËO¤“ÌîEÔúÀºu9n™æ.ZÎÀÌ=¼r†k¯ka‡1sê°þ‘G7ˆœa•p1sfÞ°ñ1ž3p3g ¦ÇŸx‚G 5š95lz’ç ×™9æ'¹y³3P¨ó)+gè|êi+gxzËß“¤äü*.) Âa­#Ÿ»Ì…­z¹Ò ³áŒ¨¥Šu°å@p©b l¹˜ª˜ƒ­µ*VÂV\ÐÔ(f`‹×f…YLÃVR°×(&g2XÅ4œ2Q¬€›IG3PMŬhˆ8ÕG+Çôz¯„3áàskI8GFì„êΘG p*,®‹w°”KuÀ`SpÃéˆb*+5S1ùýT#Åᔪ¨8Í¯ŠŠ.P'Ƴ~GcV‘ÄÝV `Š| ¦_HÚ²¢Ï‹’ÔßÐªÌ :>îDÔÝ4â#–QúšW·¯!AéЇby‘G* Uâø6‚¢ˆ$C§èµ³°­BUå°5‹å°õ.Õ°³Âv|Ü[Mà l0s’Lz·4`NáSŠÖÓláƧ¯ÙÞgÈ™Z±-BÐ?‹ÏJ h@r®V‹Xç|­Î…š ý©êr”–£ôÿY”n±¢´ë«s}æÙ­FçúìÖ­Ýz纵û9£s}mÛÖcu®ÛzžÁê\Ÿa»Ý¹âí^¯Ù¹nï}ñ%³s}ñ¥;TçŠw”ú^Ö:×`˜ýO~‘M{få¡å"JÏ…VhCïJ>&.RœÂ$7jýâàÐ^²¥¹±Æ/ 0kîÔMæ"*)Ô¤‘#ÍE/½`P˜ÔÈ=­™ixÓRêë¨Ì_&P‹)óüR_¿Æ!~Øz¿ØKQåůcŽ@ÕÙå@¹ØÓÛ§±++jŽ£1pã\ªõK=½Õäð½ØMQ¼râ‡£ŽæÆ·JÝ=ûjÄN $àT+›ƒÍ‡«Î¢N\àE†úúè?íOwu3Hͤü…ôI€$;œ> ÷‹]úD@Œ¨[r* „º„³œ (¢N 4ð•-äe6@ž¼(¦DIÎ$€ó\8º<Ú\8¿8Ý\¸@¨ú¼`5KÀÆ«]¾>Qô§)âëK‹)~\jE1PõL5’â´ÒxÉŽª~J®-–(¨z«*Ù¶ŒiN|‹qpÊJưVŒƒWFž£ p«ÈÈ‘¯´¸*f§D¥pÆ©^HÎôpTisBÔ8#rxÉ)Îy%±1v UJëŠç±”7^C— 4 n¼6yˆV‚oÑ\)¼„]!°*áħID•ô¸RsrF %D§ZAâVš è$3!õ#™L¤ô‘œê‚MÝsê*à~4Í#õªG×4T€§®v¤QåRêHS¼¤Î‘ùª¥¤Èáª_”GªtDêY¤úL)nd±J}¤²‘%ªï”²†—ªôIªY¦úP©hd¹«9ð-¼B%iRÌðJ¤”‘fRÇHƒƒ”1Ü‚ÁAÊn-Y2†Û•TKÃý8Hù"*¹–ÚE]pš„‡bZó‰6«ºha±”¡KI€ƒÔ+2š)Vø@ ¤TáC*õ•BEÆÒà UŠŒ+)Qx"R Èd¤:‘S*ë“ÒDN«q€Ô%r¦¤(á³Uà %‰œ«‘ó9a–bD.ä@‰ˆ;1"ÅMƒpÞ[e'bì¡’k£±<‡#1aò¢1j¼n†D ,áD LáD æ“D P#ƒyiC£ZB…[¼ŸD¤a0ëm¤a€iÌ¡iXiØOÖ‘†Á4½¡[­!Ý*µ^‘„µ^ÿóˆ$ –<•„ ÈHÂnhûVõjó,õb˦zÝh©×7™êuS»¡^íJ½Jí7›)ØÍ·XúuË/,ýê0õ«ÃJÁ:nµR°[o³S°Ûn¥`·¯§`xuHÁŠ«ï¸3"»ãλ"°»Ö„0¼&¤d¥5wG¤_wßsoDúuϽkÃé^R´ÒÚû"’¯ûî "ùºÿuáä ¯ )[q݃E¤^>ôpDêõðúõáÔ ¯÷‰H½y4"õztÃ;õ¼vêµñ±ÇõÔë±ÇŸÐR/ü„·IK½¢–y¿ç;¨N×¶`’4*áHÍÉ…BM;•ˆ5@;*õ ¦¤ÔX?!`ŒªÀ©üXèwl¡÷ÿþ±P%`Pë§*ð›À ÖMU¨ÿ]¬š–#´¡åõÊ {—#ŽRŽÐr„þšö‹ìq,×H“~qá¢Åôöå[=bNo0X(¥vHùÅÅK–ÒÃhkwt7þ\zJ©#Ã’p‘D¢K—-·Bã8]¶|…‹D]ä„A) ,._±R“’˜¸Ú(4å_\±²Ù÷õU×dFï‘Búêk’!y)®l6—`Kvå5ùIÐêÏ·'°9ÑJ«vfDNÞ²ev ºÈ¡VmæK~D Ä/ \£uþ"g¢DY.ÚŠ¢œ—Õv˜©°Î=3¨æð·€rî‡U†a>• Ã’œ«šÈÆù± (oÁ9ô>0¡Ç{f±E@6ž×—{]¾nb”YÍù}Ù7L7çr;¥ÿòâTHTÌ€–(ŸÕ[•r)½¸bFT©\áçá‹Dã•á1šÐ¡ ÌIX%ÎØ@…†´`N6(19ËQÆ¥ikÐ2âæ!s’YMÄH&«)ÉU˜òåÔ¥Mé"õ)[¡HCHÊHcÂÖ&Ò12_ɸ”%¼ ‘…ª$eŠ,² êµCIR’,± zø¥%K¡È2ÏðrϤ¶@­´ª¹Ù¨¼-G-!jm T[›±w…Ûq»ZÉ‘úD:,ˆøxuÜ"9K¦ÊkÕT°uq%Jx} ¼Ñ*oR«KÁÙ:ÃP—Z–’ªƒ»ÃPª8!C½½‘2Ô×-CýýaòÐHh¨P¡ÁÁTh(Z…öF¨Ð°©BdÄ3%‡ŒZ> ('5² ºÛ˜êb¥Ôñ„'TIªŒ|OÜ€N…ô…œŽ‡ 3†¸d||6©Ôã\J“r>¥é ¹Pˆ ™ªÐ¦øëW^ѦWú£%Lý¿ùíN3aúíÎf´sàÕPÂ4ðêk»B Ók»vE$L»_H˜_#"azc÷îp„w{C ÓЛ Ó›oí‰H˜ÞÚBiÕíÙûv(aÚûö;v„߱å¨ðλÃVÂôî°¥?¿³õè=K~?béÑÈû¶ú¼¿ÏFöí éѾB Ó£F$L£î'Lx¿©A¥ýÙéÒGÌtéÀÇFºôñA+9ÂMm*ü$"/úäPxèÓˆ¼èÓÃa¶5êðg‘õÙX´Fý!*UûшTéÈ‘DêH´H‰©?Z©ÒÇ?·R¥ñÏZ©ÒçGíT  É>ê‹H•Ž›ˆH•(NŠŽM|N|q<"Ubh8Uúâøq;UÂÇ-éÂǽ/ÍDéø—“f¢Ä•(}9ù•–(±™™¢øò{ò­*hæ+ƒGè0×7J?Ô$Ÿ¶£i"¢¾0úGñX^³œr⫨Ö/ðñ;þ?{¿×ÌŒÓ,í£FõòhuêeæÙò´uÁ7’êäÕÕÊ÷˜«ù?·ç¢8ÇØ§–ªøUÊ ­ ª§2¨Î\P…°¦j!*Úîrj£tÐj|Ƥ†nȇiÙ]ÉJ‹ ¨*ÌedC(XH•ÿCºá©é=I"–jƒH2cÐÇɤLê\Âä ©sMÒ8õ8¸JAÒ o#` \ñü&Ò”2™"Ÿ7R4! ’&GÜ…q“î¢˜É g±k²ÂYâ(F8K‰ÁwaEwyÉà³ÂÓY@Vz!4gIP|ò—›u%Á›½N[I6w>õtHIžzz‹­$x‹×R’-]Ï<R’gžÝR’îçl%é~îWÛBJò«mÛBJ²­çù’ô<ÿÂöí!%¡Xï‹!%é}ñ¥!%yiÇŽ>CIvô½ük[I^¦‰e¿©$ø•išPšJBÌ:‡ðÎÒ@ˆD¯~GIôÃ`ß«5ÚÌ’­”©‘Ýàl3ÁLu:iªD5*% „›Éò`¡@Þs•¬îÊ ZÒät¶Ôè4™¥³cŽNй:Œ©óœ'>b´ûÙ;^ëO‰/a¸üÔY~– {a®’^Lµ eðàËiyáIí»Úw=b²jý«¼ àã X•öaO}_±9ñ)ÚÅ#|X$îÝ„ü8ÉlÿÂÀ ü2 ‚ “ݶúÈI³úȉðå­ÄJMɇ?š"ž²×8Wéÿ)ìÇ[; á¿•ùæ^æéü#l>HÑÏ]Áæ÷Ü•´jšqsðÎåOÂæ|ð-–ç/~µÄZâ@²x‹üNS¼•HZÅ[‚Onïçé/n“ÛjwÛçøÉvMz°ŸîÈÒ?×$Ée«Ó&ª×T—›ý[dgò+Cv&¿:aÈ4œ8^Óe‡C>ÚµkP—ã æ²³kðõ7vk²ƒ¸Ë5ízó-]vèˆí ²Ãì{öìU²sLxÀðoÏôÞ·ßᲃNCˆ–Ùy¡w‡÷Þ{¿g²C‡„G²-Ùá#ïïÛ÷Á(“:F="]C²#¼>Ü¿ÿ£<øÉ¡Oþ,ðÉNØí[e'+VÊP‰¯¢ðµ´à[XkSkæq¹ gìØ$Žã88!¥@ðn «ÝŠVEJL’5„ J˜–‡ ­Ä¶´]méî?HKÕíJ…ÒªRûG hÿ)ÝeùX±Z*´•J·V0[k±ãÛß9÷Þ7ó^lZƒ õ“Μ3wfî=÷ÜsÏùÍœ8Ççî¾gè¾ÙcCÇæNø=©‰~ Ë¡J_÷GBá×rA%P·–é¾ `[À;Ž£Ûñ¹»?:~üÔÜB]·Ò£§ÏÜâèÐÜÉ3GO>:{fÎ;yz,;zìø¬wÂ;54ÊlüÔñÛ íܱ“+“Zã·¯ðèdû ôè}§ï92;wòøÐ¤é÷¯Ô¨ÛÆï=9wÊÏ~é(i}ŸwìØé£g†âO_ܤZZÑÏzZçÌûM! w Qß/ÄøO„˜‚M¯iqèO„¸ù›±´½ ¿èAÓ#'ï:áý]LêÅ´`±…Éh™~ÙX{.֞Ʌ˜\Ò}‘|”Š]3Žô³µMQ\·ïÁ$ßim·AÛ5ÔÐp®È:#ë3>5oÍŸéíw¤çë3‡¹e饷d^ö¶µôÊBó¡E~¨&—ÞzéYëÙ…§‡gê¢åöš\\x‡¯.>ÝÀÅœX~\VÛ«¢hú8¯úØ"Þ\¶Ü3)ö»Mšçx˜W^iàÞV}’ryAô´©]¡Æ\Û½2¤1^}õ¡6[•IŠÞ6…+¢ÐvÏ 8ߪoú…ì}@;ŠYè´3tüò‘'Ø›N9uê£w¨Ïj§2•Œ9T.r(÷[mºâºû<ºøãÖv÷5tñÏ1‡’DKËÇ1š-—ëhqAÊâïHy˜ø[R>Hü%)Ÿ"þ¬”ó+ñ§¥|‰xCÊ·‰ÏH¹¾\—–Ì ÷ÌE#üO{>,å;+ðqëÿɲk¶¡$r?á³ù¤¯Æåëÿª”¯ÄøÒC  èíýeM^J×Ͼçđ٣”ñ¼{âê/>‚5š+§¼XÏ|®MU\ÏÌ¢Ë_omÏ`jÙÇ Â×1ôý©:š$'À·‹²YÈi¹[$åÐSB^%\¦éŸŽÜ§iZ·íƒñ÷3E׈öÇÚW’¯Žñ«…¥ùÊm$Xá|µ¶Ë£Fá!CÒaì€-&Àw“ Å Wîµr'F¦Í–W‚Z¯9mí+Éqn]¢ÍZå|µ¶KSÜÆ:ʪ­ko‹ŸùƒÚˆ; ÇÉ´»ð·íši‹ó( ÏKjž†wfá¹eöôFî¡©9ë]ÚZ»b–ho‹ŸyòÚ&™Í/–wÆÈ´ï„þLѵ ݶ#Æw`ŽÛ17¢m +0Ç­˜ã(øvî¿ýšèGoOé8”ºÞóîPï\¶¾¼ØkÊè¼¼J(ËD¡¬ØÝ¦*®wáµd3h¢õZñv`F¯Ê¼ùá¾*&S;+DÿèNп¨ù;ÁU"ì©`È0íÙ`—È3Á‚¢È4!JÁÑÁ4.:„ÃKÒ8îÐÏïB¿{D:h¤î•`«¨Cb0è[‚^1t‹±ÚxÐÆƒ64a‚64a‚6zb‚64a‚6F»$A<§ž‡6è?í±6´ñ mQÇý ¾`Dô‚j *Ó¨èÆÄ¦+DW° KH¤¹“‰Ä8 9ÎZé¯ú<˜Âƒ)°d#LáÁLáÁLáÁLáÁ^Ži—ašò` /É4íÁxf³S !ðeLúA}LªªL0…30ÁÌÀ¤<¬“‰¼Óx*yíZé¯ÈOû$Ì!aøËˆ„9$Ì!a sH˜CÂæÀËø•2Ç´HhJÂ2É4-a<³(ÝBCàË’ÌúA}æÕ@U&˜CÂL0bm…I¹w'm ³Mhˬ™þÚ©aý59sž­Èòˆr¹rƒìÇJ4&+æ‘bž"ÛƒbðË8¹^öc%³ôÀÊIRN*²%”ƒ—Äɕٕh̲؎È6”Ä"ÛNŽjY±Ñl*H‰½ˆdÓL®Ø8b?“è˜Fö²áò̇sÁ²ê{2G‚Âh8êÕ‚aŽr*º]œÎ(âuéë »q¨ŠdVåh¹E ‘Ìj ^„ç*ÆéÕ¡ZÉÃL}P¬ã°bðÖ<âz ÞZ‚2xKBp¼ŒŽ‹ð  *ˆbu'îI ƒ<îIÓmk!ø{°‚ßN|°Þ”k!ØM3ÁZ,ÅkázÞƒµà怱Æ_½Þzm`RˆÁ„úG!6>!ÄðŸƒþNˆ1œoõíô9@4òע‡æ£ã‡ùYøÔu’Ý€l7Š(9)€ªxÉîUðb?*‚†AÐ(!xcIÀÃy%ú¶±÷‚_€³\Å_ÐÔ»†ýÜzï«÷žü¤´ÔqwD.„ n¯pÍ‘åOÌsãÿç¿Ø´ß¦×-°nu ”ãUB¦¬ˆGŒ•ä8·.Ñf­r¾ZÛåS]?_ÿ€¶ø¹‘û? xqÝëX·€[ÓÚ­ºï z!|v½ó•;o¸ ‹›§¹hçÒ+£­¡ª‚® e3Ú5Ô­hè[ÕPx°xð¸!^_ï–º- Ã~íÝýmr_ŒL{Æ«1µ^£Ó°Þþ×~Ÿ×D¿QMôÛ¥‰¾3¤á”wúôÑ;>ì7 ûFažQX«|£ æVùF‘оQìxTˆÝ?éˆë;žhÕ{Ç_ÑI¯Ÿ 3¾Ö˜Ûas+ìg¾úZpÂþ0ã¤}Ë©ƒ§|›yÒw˜'|—¹ë'˜;~’¹í§˜[~šù²ïÐå O§æ˜w†yæay),2/†%æ…°ƒy>ìdž Ë̳aE÷S÷©ë0É‚å+nû æŽï2w1Kâ Ì’x³$žÒ³tF@ePý¢)©E+4’&´ä„®–ÜÐÑR"´µ” --¥Bž1‰éP5„²f Ìrèh;½8:NG×Á”}꿃¹MSöI‡2óåÐ!aÀ©„e?‡c§ŸÇ±Ã/àXò‹8ýŽ¿Ǽ߉cÎ/ã˜Åã•pb ‹rhk;†Çà; ÆÚ ÝüiÜÚ¦pÜ€¹WœnÌ»âô`ÎhéàØ‹¹V ½…cͱìôcnû@ý—A™¼ ÜFE'ÁëIä„ɦl‡©¦l…é¦ c˜“,ŒBnª<ÔÈä¥F&O52y«‘ÉcL^kdò\#“÷Y­§9 ý´ÏÓ/eX˜ZˆZÂxZÂhZÂXZÂHZÂ8Z‚3+±ÌãTøÂZðLÈ®tïТɆ)É#)É…3))‡RRN¥¤KIj&µA}š‡Ó¡EË7’í—´äøE-¹~Z ΔDv¦0ŸÉ‹ôLe>=“©™ä|F&çS3iÈî|Iº“" ¹²3ß#È6˽,["1cÏ×¥=Ÿ˜Y3.Nq’ßžÑ< ¾ÏóÍŠÓý[Á&·æÇ¤5oã| çV“[óÛоv¼µ[ë´éã¶é›ÔóH·Í/«çÝ4‚²ˆ³”³ ³l2fñtl%²zuòzµJX¹t$øºœï2DÇV_æï‚ñ»v£7~¥|]»§ÕO¯½NLÒ7 À€F)üԀ 8 1€ÄX4‚)3œ)ëiu ô1PÈ@#• t2PÊ@«Œ†Zy¥›PÌ@3Õ t3PÎ@»”†ziƒýŒ qa:#ÊhFà3¤©&H!W%fnû5ÆUxWa_ƒ51ÀÄ\FÆ Éjp£€Ž= )0¤€‘I 0áɰße(EŠ A,‚Z¹za™0Kkh¦`š‚l ¾)(§`]C<÷˜‘š.E4:CÜ8¹- 9ž¨ã <–Ù#db@»ªÁqÌÇqŒÇqLÇ*1SŽ}2pÇO61P„‹"¬á§SE8+Â^M@¦ZVãµµâ1HáÌ{Fx4¨n°l„o#Ì›‰KŒŒ#¸AèVGP{x}j€WŽÓàZB¯R”Ön\hMº‡Ì?—Ôm‡ª ½B¾ÿîßþþÃßx¾È¼õ{» Nï矡/2ï>ÑKßT’_ ¯-o¤¯-%ä— $;״˱{âOoõ;Ö­a/¶Ã‚Ä­GO¹\K\꓌XÕˆ`%T`Îñ»io«¹èÚMŸkm»é6:Q5U/Pµƒ>®# Âó –úvܬ8Deˆ¨4•+¢FTÖˆJ)ß”?Ò~³&Ò¯c éfÅTLÅ\LÆdRº@“Ö§Ü’-²Í)ø˜)™‘)™RV‚2M8ƒÎ“ºôdJQ¦4eJU¦teJY¦´¥k]b©*XM—ÅL™Ì”ÍÜr%pÄeäÙ“”ë¦~¢Š)ª°¢Š,ªà¢Š/ª£Š2i.ÐÜN •Ðo¨ˆCÅ*êPq‡Š<£~?TÉèò*©²*©r‘*©2’*)e¹¼Ti¢¨Ù¡ËP¦,eÊTÑ÷ûè›~ô¿³ùíßL± +D¥„¨¼•¢2DTšˆÊ¾)aÄêä°Øºä±\bteÆn¬X '*ëD¥ž¨ü•„¢2Q¬vd L„^Ø{£òS¼,/WÅËXñòV¼ì/‡éo]„Ô°ÎQÕÍj©ÀÅ+së¨à âÿ#]îº#³w?åÝ{rÍJ«åCó[)ÚÑå[iÁ¨ äqˬOý h¶õÚ-_ⶃÿÝÞÕWUëµÖÞçûœää˜Ò\oÆ¡½\‡ép¦eæòƒüà?2íAÓ6¶6***** *–(Qb‰%Ö´D‰5µ#""¦4BÄü`æòƒ™Kg˜¹TCrÎÞw}íw}ìÚ¹•{œÉq¯ç}÷×ZÏû¬w­µ÷¡?BèŽ/zx5Bÿ‰Ðó´Oí=„Ю÷˜3{ɺä#ÿGþ4òéÿ±‡kb~‘Þ¥ÙöÕ>e¡4Їý`ØúwñHNðßÐYhºÄØÏ÷}ÂÏÆâàÅm á’ìgRìç*0¤ÙO#ø«ŠW‚!Ë~Àc?óÁÀ_6ªC%û™†<û©Cû™ †jñÊY`¨Lò`˜­…£dÁ0.w6œ2 †¹Pup}.®€ªž'nF´ÏâMŒ‚¿ùÂYXëÁŸÀ1æÂqçÁ¹â`˜×T×™Ã,¸ŸÙp`¨º¨5+©jOòp”*¨ù:0TÀõUB«Õƒ!«µn©(›¼APcúâdQ^ò•‚JS8”þ¸þä¹óôå^%*èë³ eÕ–Dœ¤ux†‚¢ò€Sè4Å4‚ÿ›?=ΜUêJ§±ñ‰ÓÒîhr”aA ±g‘‚b[EEŽn¢é920&¼x¨Rl„‚ôb…ÏBz˜ô>Ù«,óQΟ¢­¢rÀ—þ2 ø3àÉAÏŒwç°gF»;Z²BÝÃÀº,üq2î@Å0†N xKcí4:}ÚˆqçŒgF¸{¶d…79ç€]Æ69A`;âÂ,ƒÚ¹˜„€v&ÓÌN1Wär _N\0J«ÍHÆ…âêk­žû'…Âêkíž[€fÏÍ0«çæÑsÿQÄè¹L¬žûÇ|?«ç¦XDÏÍP»çæ{[=7Ç´ž›—µž›—Ã=÷-Ö¯Ñã|1\¿œÀ•ò‹Y~Wƒáïˆêeå Omýg’”¼_É%¥^8Ì£uäs—¹°U'w‚CZa6œ‘µT±¶.U¬†-Só°ƒ VÅ ØŠ šÅ,lñÚ̘Å4l%{br&ƒULÃ)SÅ ÜL:¢˜…jÊDs¢!âT­Óë½΄ƒÏ­%áY±Cª;kÀ©°¸j,ÞÁVP.ÕƒULÁ §#ŠI¨¬ÔLÅäßôS‡Sª¢jà4¿**r¸@ÏúYE:@w[%€I>bð˜b|!iËŠ>/JRM«2‹èøD¸QwSˆXªEé+^ݾ†MX¤CŠ]âE©|,TˆãO³E$¦ÙxŠ^; ÛJTY[³X[ïr ÛQ+lÇÆŒ°õÐ8Ç3'È„qKæ4>­h=ÅþÐ|Fñší}–œ­Û"ýsøœ‚$çk´ˆu.TkÑê\¬Úß™¬*Gi9JÿŸEéV+J;Ÿ¶:×§ŸÙft®ÏlÛÖ¥w®Ûºž5:×gÑöíÝV纽û¹ç­Îõ¹çwØ+Þáõ˜ëŽž^4;×^ܹSu®xg©÷%­s †Ùßó‹lÚ3'-Q¦ù\hFzWð1q‘âÖx ¹Qã÷i-ÍÕþt?³¦áN]Ñd.¢’BM9bÐ\ôÒûú„IÜÓšI‘†7-U Þ¾~ªÁüµ˜2Ï/õöi⇭ó‹=U^ü:æT]”‹Ý=½»r¢æ87Î¥¿ÔÝ£QMß‹]uÁ+/~8êhn|«ÔÕ­±¯ZìÄ@N5²9Ø|¸ê,jÅ^b¨¯þÓþTgƒÔ @ÊŸ¦> d‡Ó§â~±£SŸˆQu @N”P§p–sEÔ!z¾²…ü Ì&èÀ“Å´€(É™pž G—G› ç§› HµCŸ#¬f ØxµÓ×' ’þE|}i1Å/ƒK¨1ªž©ZR¼ƒV/9£ÃQÕOɵÅUoU)Û–‚1͉o10N9ÉÖŠqðÊŠÃs4nqŒIðJ‹[a bvJT gœê…äLG•6'D3"gÀKNApÎ+‰É°c¨RZW48¥,¸ñš/иñÚlà!Z^¼5þEDs…ð:t¥À*…WœF!•Òã*QÌË”*M‰[a* “̆Ôd³‘ÒGòª 6uÏ©ÍÀýhšGêT® ©Ï€§®v¤AåRêHc¼¤Î‘ª¥¤Èá…ª_”G©tDêY¬úL)nd‰J}¤²‘¥ªï”²†—©ôIªY®úP©hd…«9ð-¼R%iRÌð*¤”‘&RÇHƒƒ”1ÜŒÁAÊn)Y2†[=SÆp›gÉX;j·dl%ckך2¶n.cxý\1¼ažØS8nÚdIØæÍ–„u˜ÖiJîòL ÃÝ%KÂpJ¨¥„á^•TKÃ}8Hù"ý*¹–ÚE\pš„cZó‰6«ºha±”¡KN€ƒÔ+2’)Vø` ¤TáÃ*õ•BEFÓà UŠŒ))Qx< R ÈD¤:‘Ó*ë“ÒDΨq€Ô%r¶¤(ás•à %‰œ¯‘ ya–bD.æA‰ˆ;1"ÅjMƒpÁ[m'bì¡’k£±‡#1aò¢1j¼n†D ,áD LáD æ“D P#ƒyiC£šC…›½ŸF¤a0ëm¤a€iÌ¡iXiØÏ~Þ‘†Á4½¡[-!Ý*µ\‘„µ\ÿ‹ˆ$ –<•„ ÈHÂ~ÙúêÕêYêÅ–%LõºÁR¯n4ÕëÆ6C½Ú”z•Ún2S°›n¶ôëæ_YúÕnêW»•‚µßb¥`·Üj§`·ÞJÁn[NÁðš‚×Ü~GDvûwF$`w® '`xmHÉJkïŠH¿îºûžˆôëî{Ö…Ó/¼.¤h¥u÷F$_÷ÞwDòußýëÃÉ^R¶âúŒH½xð¡ˆÔë¡ ©Þà=‘z=üHDêõÈÆvê…7z›ìÔkÓ£é©×£=®¥^øqo³–zE-ó~ÇwP­®mõÀ%iT‘š’ …šv*«‡vTêLI©±~BÀU‚Sù±ÐoÙBïÿýc¡JÀ ÖOUà7‚A­›ªPÿ§X5-Gh9BËê•#ö.G(¥¡åý;"4íÙ#âX®‘&ýâ¢ÅKèí˶iöˆ9½Á`¡”ÚM å—,]F£­ÝÑÝøsé)¤Ž KÂE‰.[¾BÜvàHtùŠ•~,u¥(°¸bå*MJbâj£Ð”iåª&ß×W]“½G 髯I†L¤¸ªÉ\‚-ÙeTÐä'A«¿ÐœÀäD+­Ú™9yË–Ù-è‡Z´™,ù¿€rÖù[ˆœ‰e¹h+Šr^VÛa$c{fPÍáoåÜ« Â|*A‡%9ÿ*V5‘ócO£‚äÐûÀ„{ì™ÅfÙxA_îuùR¸‰Qf5šõeßt2ÕTBÊ5î”fü+ˆP!‘™-Q>«·*åRzq匨R!¹ÂÏÃ)‰Æ *!Ëc4¡CÌIX%ÎÚ@FHCZ0'”˜œå)ãÒ´5hqó9Éœ&b$›ÓŒä3¦|9µiSºH]ÊV(R’2Ò°µ‰4†DŒ,P2.e / Ad‘*I™"‹-ˆz-ÁP’”$K-ˆ~YÉR(²Ü3¼Â³i¥-P«,jj²ª`ËQsH ZZBÕÚj@ì]á6ܦVr¤>‘v ">^7„HÎ’©ò:5F#l}\‰Þ0o²Ê›ÕêRp¶Ž0Ô©–¥¤êà®0Ô­*NÈPOO¤ õöFËP__X†<Ôû*Th``ŒV¡}*4dªöLÉ!#€*ÊI ‡-ˆî6ªºX)5d,áqU’*#ß7 Ó!}!gâ!è¬!.YŸKêõ8ŸÒ¤†\Hi:C.f‘!“MaŠ¿}ùe=az¹ïwZÂÔ÷»ßï2¦ßïÚe&L»ú_ %Lý¯¼º;”0½º{wD´{ൈ„iàµ×#¦×÷ì 'Lx7‘0 ¾‘0½ñæÞˆ„éͽ!”VÝÞ}o…¦}o½m'Løm[ަß~gÈJ˜Þ²ôç¶½kéч-=~ÏVŸ÷öÛÈþý!=Úÿ~(az䃈„iäƒá„ 05¨tàC;]úð ™.üÈH—>:d%Gø©M¥CGäEŽ‘}r$ â#¶Fù4R£>Ö¨Ñ?E¥J£:‘*=:ƒH©£"õg+UúóØgVª4öÙ1+Uúì˜*ác!™ÂǼã©Ò±ãã©ÃIÑññÏ#ÐñÏOD¤J §JŸŸ8a§Jø„%]ø„÷…™(øbÂL” ¥/&¾Ô%63Sô_þ`O¾UÍ|UðæúFé‡åÓv4M@DÔFÿ*Ë‹ÏV&èÆ•~qhx„ïÄ:jð¿æ_Éaç’(¦ãÎ)Š!É®Ÿ@ ç;<*€JZ˜Gÿ¦|þ¶2¿ó*ZžÍÛ¾X -WQRÅÅw~øágÉü=åO‰×˜yõÎáFYñå 3ÁûšFyš¿Ï,§œøj#ªñ§ù‡ˆø‡Ÿ}š¿×ÌŒÓ,í£FuòhµêeæÙò´µÁ7’jåÕÕÈ÷˜«ø?·ç¢8ÇØ§–*ùUÊ ­ª§"¨Î|P…°¦*!*Úîrj£tÐj|ƤšnȇiÙ]ÉJ‹ ¨ *ÌedC(XH•ÿCºá©é=I"–jƒH2kÐÇɦLê|Âä ©uMÒ8u8¸JAR/o#` \ñüFÒ˜2™"Ÿ7R4! “&GÜEq“îâ˜É g‰k²ÂYê(F8ˈÁw9aEwEÉà³ÒÓY@Vy!4}kIP|â×[t%Á[¼[I¶t<ùTHIž|j«­$x«×R’­O?R’§ŸÙR’®gm%ézö7ÛCJò›íÛCJ²½û¹’t?÷üŽ!%¡XÏ !%éyáÅ!%yqçÎ^CIvö¾ô[[I^¢‰eŸ©$øå)šPšJBÌ]:‡ð®RˆD¯|KIôÃ`ßk4ÚÌ’­”©–Ýàl3ÁLµ:i*E5*% „›Éñ`¡@Þs¥¬îŠ ZÒäu¶Të4™¥³cŽNй:Œ©óœ'>b´ûÙ;^ãOŠ/a¸üÔ9~• {a®‚^L• eðàËiyáIí»Úw=b²jý«¼ àã X•öaO}_±9ñIÚÅ#|X$îÕˆü8Élÿbÿ€ü2 ‚ “ݶúÈI“úȉðå­ÄJM)„?š"ž²×8Wáÿ%ìÇ[; á”ùæ^îéü#l>HÑÏ]Éæ÷ÜU´jšpS%ðÎåOœBø+ð¿šcÍq Y¼Y~§)ÞB$­â- Á'·•÷óô·ÊG‡‹mµ¹msüd›&=ØO·çèŸk’äŠ5i“Uk«ÊÍþ ²3ñ¥!;_ž4d‡NžD¯ê²Ã!íÞ= ËÎ sÙÙ=ðÚë{4ÙÁ'¦¹Ë5í|ãM]vèˆí ²Ãì{÷îS²s\xÀðoïÔ¾·Þ沃MGˆ–Ùy ¡w†þðî»d²C‡„ÇŽ±-ÙáÃïíßÿþ“:F=*]C²#¼>8pàÃ:ôñáOŽù4ðÉNØíe''VÊP‰¯¢ðµ´à[XkSkæq¹ g¥Fÿ Õ_b¹ñ¢_ø³^éSS/j×z|»R;—§½9«=ªVpg ƒ¨‡9æ·0ÖØÙH¾‚dί–ìQ¯ˆ$é,gðÆ1ß ‰…_ ¡[›µÙâïÐSÖÛo€4à†ŒFÜX¢Y¾N²À3YBÊoƒš$q‘h~¸‹]­rj°u‚%ò%ô—’¥)«½É2Õ6¬Œ—glF¬¸œÁW© “_MUXÑR®é¶ªÌV@ U¡è)[UªH *ô2OtÁ'K§L¾à“Ó§"U…ÿôŒª"¬3© ¿¶Uḭ*ø¤wÊV~#‡N]>B­’ì¿òý/¼x}öo®xcftools-1.0.7/test/source/truncated.xcf0000644000175000017500000000070710373376143020207 0ustar makholmmakholmgimp xcf v345@@BB/ gimp-commentCreated with The GIMPS gimp-commentCreated with The GIMPgimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) xcftools-1.0.7/utils.c0000644000175000017500000000737611223376244014547 0ustar makholmmakholm/* Generic support functions for Xcftools * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "xcftools.h" #include #include #include #include const char *progname = "$0" ; int verboseFlag = 0 ; static void __ATTRIBUTE__((noreturn)) vFatalGeneric(int status,const char *format,va_list args) { if( format ) { if( *format == '!' ) { vfprintf(stderr,format+1,args); fprintf(stderr,": %s\n",strerror(errno)); } else { vfprintf(stderr,format,args); fputc('\n',stderr); } } exit(status); } void FatalGeneric(int status,const char* format,...) { va_list v; va_start(v,format); if( format ) fprintf(stderr,"%s: ",progname); vFatalGeneric(status,format,v); } void FatalUnexpected(const char* format,...) { va_list v; va_start(v,format); fprintf(stderr,"%s: ",progname); vFatalGeneric(127,format,v) ; } void FatalBadXCF(const char* format,...) { va_list v; va_start(v,format); fprintf(stderr,"%s: %s:\n ",progname,_("Corrupted or malformed XCF file")); vFatalGeneric(125,format,v) ; } void xcfCheckspace(uint32_t addr,int spaceafter,const char *format,...) { if( xcf_length < spaceafter || addr > xcf_length - spaceafter ) { va_list v; va_start(v,format); fprintf(stderr,"%s: %s\n ",progname,_("Corrupted or truncated XCF file")); fprintf(stderr,"(0x%" PRIXPTR " bytes): ",(uintptr_t)xcf_length); vFatalGeneric(125,format,v) ; } } void FatalUnsupportedXCF(const char* format,...) { va_list v; va_start(v,format); fprintf(stderr,"%s: %s\n ",progname, _("The image contains features not understood by this program:")); vFatalGeneric(123,format,v) ; } void gpl_blurb(void) { fprintf(stderr,PACKAGE_STRING "\n"); fprintf(stderr, _("Type \"%s -h\" to get an option summary.\n"),progname); exit(1) ; } /* ******************************************************* */ void * xcfmalloc(size_t size) { void *ptr = malloc(size); if( !ptr ) FatalUnexpected(_("Out of memory")); return ptr ; } void xcffree(void *block) { if( xcf_file && (uint8_t*)block >= xcf_file && (uint8_t*)block < xcf_file + xcf_length ) ; else free(block); } /* ******************************************************* */ FILE * openout(const char *name) { FILE *newfile ; if( strcmp(name,"-") == 0 ) return stdout ; newfile = fopen(name,"wb") ; if( newfile == NULL ) FatalUnexpected(_("!Cannot create file %s"),name); return newfile ; } void closeout(FILE *f,const char *name) { if( f == NULL ) return ; if( fflush(f) == 0 ) { errno = 0 ; if( !ferror(f) ) { if( fclose(f) == 0 ) return ; } else if( errno == 0 ) { /* Attempt to coax a valid errno out of the standard library, * following an idea by Bruno Haible * http://lists.gnu.org/archive/html/bug-gnulib/2003-09/msg00157.html */ if( fputc('\0', f) != EOF && fflush(f) == 0 ) errno = EIO ; /* Argh, everything succeds. Just call it an I/O error */ } } FatalUnexpected(_("!Error writing file %s"),name); } xcftools-1.0.7/xcf-general.c0000644000175000017500000002041511223357031015560 0ustar makholmmakholm/* Generic functions for reading XCF files * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "xcftools.h" #include #include #ifdef HAVE_ICONV # include #elif !defined(ICONV_CONST) # define ICONV_CONST const #endif uint8_t *xcf_file = 0 ; size_t xcf_length ; int use_utf8 = 0 ; uint32_t xcfOffset(uint32_t addr,int spaceafter) { uint32_t apparent ; xcfCheckspace(addr,4,"(xcfOffset)"); apparent = xcfL(addr); xcfCheckspace(apparent,spaceafter, "Too large offset (%" PRIX32 ") at position %" PRIX32, apparent,addr); return apparent ; } int xcfNextprop(uint32_t *master,uint32_t *body) { uint32_t ptr, length, total, minlength ; PropType type ; ptr = *master ; xcfCheckspace(ptr,8,"(property header)"); type = xcfL(ptr); length = xcfL(ptr+4); *body = ptr+8 ; switch(type) { case PROP_COLORMAP: { uint32_t ncolors ; xcfCheckspace(ptr+8,4,"(colormap length)"); ncolors = xcfL(ptr+8) ; if( ncolors > 256 ) FatalBadXCF("Colormap has %" PRIu32 " entries",ncolors); /* Surprise! Some older verion of the Gimp computed the wrong length * word, and the _reader_ always just reads three bytes per color * and ignores the length tag! Duplicate this so we too can read * the buggy XCF files. */ length = minlength = 4+3*ncolors; break; } case PROP_COMPRESSION: minlength = 1; break; case PROP_OPACITY: minlength = 4; break; case PROP_APPLY_MASK: minlength = 4; break; case PROP_OFFSETS: minlength = 8; break; case PROP_MODE: minlength = 4; break; default: minlength = 0; break; } if( length < minlength ) FatalBadXCF("Short %s property at %" PRIX32 " (%" PRIu32 "<%" PRIu32 ")", showPropType(type),ptr,length,minlength); *master = ptr+8+length ; total = 8 + length + (type != PROP_END ? 8 : 0) ; if( total < length ) /* Check overwrap */ FatalBadXCF("Overlong property at %" PRIX32, ptr); xcfCheckspace(ptr,total,"Overlong property at %" PRIX32,ptr) ; return type ; } const char* xcfString(uint32_t ptr,uint32_t *after) { uint32_t length ; unsigned i ; ICONV_CONST char *utf8master ; xcfCheckspace(ptr,4,"(string length)"); length = xcfL(ptr) ; ptr += 4 ; xcfCheckspace(ptr,length,"(string)"); utf8master = (ICONV_CONST char*)(xcf_file+ptr) ; if( after ) *after = ptr + length ; if( length == 0 || utf8master[length-1] != 0 ) FatalBadXCF("String at %" PRIX32 " not zero-terminated",ptr-4); length-- ; if( use_utf8 ) return utf8master ; /* We assume that the local character set includes ASCII... * Check if conversion is needed at all */ for( i=0 ; ; i++ ) { if( i == length ) return utf8master ; /* Only ASCII after all */ if( utf8master[i] == 0 ) FatalBadXCF("String at %" PRIX32 " has embedded zeroes",ptr-4); if( (int8_t) utf8master[i] < 0 ) break ; } #ifdef HAVE_ICONV { size_t targetsize = length+1 ; int sloppy_translation = 0 ; iconv_t cd = iconv_open("//TRANSLIT","UTF-8"); if( cd == (iconv_t) -1 ) { cd = iconv_open("","UTF-8"); sloppy_translation = 1 ; } if( cd == (iconv_t) -1 ) iconv_close(cd) ; /* Give up; perhaps iconv doesn't know UTF-8 */ else while(1) { char *buffer = xcfmalloc(targetsize) ; ICONV_CONST char *inbuf = utf8master ; char *outbuf = buffer ; size_t incount = length ; size_t outcount = targetsize ; while(1) { /* Loop for systems without //ICONV support */ size_t result = iconv(cd,&inbuf,&incount,&outbuf,&outcount) ; if( result == (size_t)-1 && errno == EILSEQ && sloppy_translation && outcount > 0 ) { *outbuf++ = '?' ; outcount-- ; while( (int8_t)*inbuf < 0 ) inbuf++, incount-- ; continue ; } if( result != (size_t)-1 ) { if( outcount == 0 ) errno = E2BIG ; else { *outbuf = 0 ; iconv_close(cd) ; return buffer ; } } break ; } if( errno == EILSEQ || errno == EINVAL ) FatalBadXCF("Bad UTF-8 encoding '%s' at %" PRIXPTR, inbuf,(uintptr_t)((inbuf-utf8master)+ptr)); if( errno == E2BIG ) { targetsize += 1+incount ; xcffree(buffer) ; continue ; } FatalUnexpected("!iconv on layer name at %"PRIX32,ptr); } } #endif { static int warned = 0 ; if( !warned ) { fprintf(stderr,_("Warning: one or more layer names could not be\n" " translated to the local character set.\n")); warned = 1 ; } } return utf8master ; } /* ****************************************************************** */ void computeDimensions(struct tileDimensions *d) { d->c.r = d->c.l + d->width ; d->c.b = d->c.t + d->height ; d->tilesx = (d->width+TILE_WIDTH-1)/TILE_WIDTH ; d->tilesy = (d->height+TILE_HEIGHT-1)/TILE_HEIGHT ; d->ntiles = d->tilesx * d->tilesy ; } struct xcfImage XCF ; void getBasicXcfInfo(void) { uint32_t ptr, data, layerfile ; PropType type ; int i ; xcfCheckspace(0,14+7*4,"(very short)"); if( strcmp((char*)xcf_file,"gimp xcf file") == 0 ) XCF.version = 0 ; else if( xcf_file[13] == 0 && sscanf((char*)xcf_file,"gimp xcf v%d",&XCF.version) == 1 ) ; else FatalBadXCF(_("Not an XCF file at all (magic not recognized)")); if( XCF.version < 0 || XCF.version > 2 ) { fprintf(stderr, _("Warning: XCF version %d not supported (trying anyway...)\n"), XCF.version); } XCF.compression = COMPRESS_NONE ; XCF.colormapptr = 0 ; ptr = 14 ; XCF.width = xcfL(ptr); ptr += 4 ; XCF.height = xcfL(ptr); ptr += 4 ; XCF.type = xcfL(ptr); ptr += 4 ; while( (type = xcfNextprop(&ptr,&data)) != PROP_END ) { switch(type) { case PROP_COLORMAP: XCF.colormapptr = data ; break ; case PROP_COMPRESSION: XCF.compression = xcf_file[data] ; break ; default: /* Ignore unknown properties */ break ; } } layerfile = ptr ; for( XCF.numLayers = 0 ; xcfOffset(ptr,8*4) ; XCF.numLayers++, ptr+=4 ) ; XCF.layers = xcfmalloc(XCF.numLayers * sizeof(struct xcfLayer)) ; for( i = 0 ; i < XCF.numLayers ; i++ ) { struct xcfLayer *L = XCF.layers + i ; ptr = xcfL(layerfile+4*(XCF.numLayers-1-i)) ; L->mode = GIMP_NORMAL_MODE ; L->opacity = 255 ; L->isVisible = 1 ; L->hasMask = 0 ; L->dim.width = xcfL(ptr); ptr+=4 ; L->dim.height = xcfL(ptr); ptr+=4 ; L->type = xcfL(ptr); ptr+=4 ; L->name = xcfString(ptr,&ptr); L->propptr = ptr ; while( (type = xcfNextprop(&ptr,&data)) != PROP_END ) { switch(type) { case PROP_OPACITY: L->opacity = xcfL(data); if( L->opacity > 255 ) L->opacity = 255 ; break ; case PROP_VISIBLE: L->isVisible = xcfL(data) != 0 ; break ; case PROP_APPLY_MASK: L->hasMask = xcfL(data) != 0 ; break ; case PROP_OFFSETS: L->dim.c.l = (int32_t)(xcfL(data )) ; L->dim.c.t = (int32_t)(xcfL(data+4)) ; break ; case PROP_MODE: L->mode = xcfL(data); break ; default: /* Ignore unknown properties */ break ; } } xcfCheckspace(ptr,8,"(end of layer %s)",L->name); L->pixels.tileptrs = 0 ; L->pixels.hierarchy = xcfOffset(ptr ,4*4); L->mask.tileptrs = 0 ; L->mask.hierarchy = xcfOffset(ptr+4,4*4); computeDimensions(&L->dim); } } xcftools-1.0.7/xcf2png.100000644000175000017500000000573611223357030014742 0ustar makholmmakholm.\" Manual page for xcf2png .\" This file was written by Henning Makholm .\" It is hereby in the public domain. .\" .\" In jurisdictions that do not recognise grants of copyright to the .\" public domain: I, the author and (presumably, in those jurisdictions) .\" copyright holder, hereby permit anyone to distribute and use this code, .\" in source code or binary form, with or without modifications. This .\" permission is world-wide and irrevocable. .\" .\" Of course, I will not be liable for any errors or shortcomings in the .\" code, since I give it away without asking any compenstations. .\" .\" If you use or distribute this code, I would appreciate receiving .\" credit for writing it, in whichever way you find proper and customary. .TH xcf2png 1 2006-02-12 "Xcftools" "" .SH NAME xcf2png \- convert from GIMP xcf files to png format .ds p xcf2png .SH SYNOPSIS .B \*p [ .I options ] .I filename [ .I layer names ] .SH DESCRIPTION .B xcf2png is a command-line tool that converts image files in the XCF format used by .BR gimp (1) to the generic image format .BR png , flattening layers if necessary. It does not need to have the Gimp engine itself available. .SH GENERAL OPTIONS .so xcf2png.1i .P Several groups of options are mutually incompatible; in each group the one given last will win: .TP 4 1) .B \-A and .BR \-b . .TP 2) .B \-g and .B \-c . .TP 3) .B \-D and .BR \-G . .TP 4) .BR \-j , .BR \-z , and .BR \-Z . .TP 5) .B \-C and .BR \-O / \-S . .SH LAYER SPECIFICATIONS If no .I layer name is given on the command line, all of the visible layers in the XCF file are merged to produce the output image. It is also possible to specify the layers to merge explicitly, by giving their names as separate arguments after the input filename. In that case, the output will contain .I only the named layers. The layers will be merged in the order they appear on the command line, with the leftmost being "at the bottom" \- that is, the layer ordering in the XCF file will be ignored. .P The following options can be given .I after a layer name to override the global properties of the layer: .so xcf2png.1il .so exit.1i .SH BUGS AND LIMITATIONS .P When several partially transparent layers are merged, the pixel values are interpolated without gamma correction. (The Gimp also does it this way). Some slight rounding errors in the interpolation are inevitable; .B \*p sometimes has different rounding errors than the Gimp itself, especially when more than two layers are involved, or in case of some of the more exotic layer modes. These differences are usually not visible to the eye. .P Floating selections are currently not handled correctly. .P There are probably other bugs lurking in corner cases. If you discover one, please notify the author. .SH FILES .TP 8 .B /etc/X11/rgb.txt .TP 8 .B /usr/share/X11/rgb.txt .TP 8 .B /usr/lib/X11/rgb.txt Color name database for .BR \-b . .SH AUTHOR .B \*p was written by Henning Makholm . .P .SH SEE ALSO .BR xcfinfo (1), .BR xcf2pnm (1) xcftools-1.0.7/xcf2png.c0000644000175000017500000002741011223357030014735 0ustar makholmmakholm/* Convert xcf files to png * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "xcftools.h" #include "flatten.h" #include "palette.h" #include #include #include #include #include #if HAVE_GETOPT_H #include #else #include #endif #ifndef HAVE_GETOPT_LONG #define getopt_long(argc,argv,optstring,l1,l2) getopt(argc,argv,optstring) #endif #include "xcf2png.oi" static void usage(FILE *where) { fprintf(where,_("Usage: %s [options] filename.xcf[.gz] [layers]\n"), progname) ; fprintf(where,_("Options:\n")); opt_usage(where); if( where == stderr ) { exit(1); } } static struct FlattenSpec flatspec ; static FILE *outfile = NULL ; static png_structp libpng = NULL ; static png_infop libpng2 = NULL ; static void my_error_callback(png_structp png_ptr, png_const_charp errormsg) { FatalUnexpected(_("Libpng error '%s'"),errormsg); } static void init_output(void) { int bit_depth ; int color_type ; int invert_mono = 0 ; png_colorp pngpalette = NULL ; png_bytep ptrans = NULL ; outfile = openout(flatspec.output_filename); libpng = png_create_write_struct(PNG_LIBPNG_VER_STRING, png_voidp_NULL, my_error_callback, png_error_ptr_NULL); if( !libpng ) FatalUnexpected(_("Couldn't initialize libpng library")); libpng2 = png_create_info_struct(libpng); if( !libpng2 ) FatalUnexpected("Couldn't create PNG info structure"); png_init_io(libpng,outfile); bit_depth = 8; switch( flatspec.out_color_mode ) { case COLOR_GRAY: if( flatspec.default_pixel == PERHAPS_ALPHA_CHANNEL || flatspec.default_pixel == FORCE_ALPHA_CHANNEL ) color_type = PNG_COLOR_TYPE_GRAY_ALPHA ; else color_type = PNG_COLOR_TYPE_GRAY ; break ; case COLOR_RGB: if( flatspec.default_pixel == PERHAPS_ALPHA_CHANNEL || flatspec.default_pixel == FORCE_ALPHA_CHANNEL ) color_type = PNG_COLOR_TYPE_RGB_ALPHA ; else color_type = PNG_COLOR_TYPE_RGB ; break ; case COLOR_INDEXED: if( paletteSize == 2 && palette[0] == NEWALPHA(0,255) && palette[1] == NEWALPHA(-1,255) ) { color_type = PNG_COLOR_TYPE_GRAY ; bit_depth = 1 ; } else if( paletteSize == 2 && palette[0] == NEWALPHA(-1,255) && palette[1] == NEWALPHA(0,255) ) { color_type = PNG_COLOR_TYPE_GRAY ; bit_depth = 1 ; invert_mono = 1 ; } else { unsigned i ; int need_trans = flatspec.default_pixel == FORCE_ALPHA_CHANNEL ; color_type = PNG_COLOR_TYPE_PALETTE ; pngpalette = xcfmalloc(paletteSize*sizeof(png_color)) ; ptrans = xcfmalloc(paletteSize); for(i = 0; i> RED_SHIFT); pngpalette[i].green = 255 & (palette[i] >> GREEN_SHIFT); pngpalette[i].blue = 255 & (palette[i] >> BLUE_SHIFT); if( (ptrans[i] = ALPHA(palette[i])) != 255 ) need_trans = 1 ; } if( !need_trans ) { xcffree(ptrans); ptrans = NULL ; } if( paletteSize <= 2 ) bit_depth = 1 ; else if( paletteSize <= 4 ) bit_depth = 2 ; else if( paletteSize <= 16 ) bit_depth = 4 ; else bit_depth = 8; } break ; default: FatalUnexpected("This can't happen (unknown out_color_mode)"); } if( verboseFlag ) { fprintf(stderr,"Writing PNG: %s%s%s%s, %d bits", color_type & PNG_COLOR_MASK_COLOR ? _("color") : _("grayscale"), color_type & PNG_COLOR_MASK_PALETTE ? _("+palette") : "", color_type & PNG_COLOR_MASK_ALPHA ? _("+alpha") : "", ptrans || NULLALPHA(flatspec.default_pixel) ? _("+transparency") : "", bit_depth); if( pngpalette ) fprintf(stderr,_(" (%d colors)"),paletteSize); fprintf(stderr,"\n"); } png_set_IHDR(libpng,libpng2,flatspec.dim.width,flatspec.dim.height, bit_depth, color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); if( invert_mono ) png_set_invert_mono(libpng); if( pngpalette ) png_set_PLTE(libpng,libpng2,pngpalette,paletteSize); if( ptrans ) png_set_tRNS(libpng,libpng2,ptrans,paletteSize,NULL); else if ( !pngpalette && NULLALPHA(flatspec.default_pixel) ) { static png_color_16 trans ; trans.gray = trans.red = 255 & (flatspec.default_pixel >> RED_SHIFT) ; trans.green = 255 & (flatspec.default_pixel >> GREEN_SHIFT) ; trans.blue = 255 & (flatspec.default_pixel >> BLUE_SHIFT) ; png_set_tRNS(libpng,libpng2,NULL,0,&trans); } /* png_set_text here */ png_write_info(libpng,libpng2); if( bit_depth < 8 ) png_set_packing(libpng); switch( color_type ) { case PNG_COLOR_TYPE_RGB: case PNG_COLOR_TYPE_RGBA: #if (BLUE_SHIFT < RED_SHIFT) == !defined(WORDS_BIGENDIAN) png_set_bgr(libpng); #endif if( color_type == PNG_COLOR_TYPE_RGB ) #if (ALPHA_SHIFT < RED_SHIFT) == !defined(WORDS_BIGENDIAN) png_set_filler(libpng,0,PNG_FILLER_BEFORE); else png_set_swap_alpha(libpng); #else png_set_filler(libpng,0,PNG_FILLER_AFTER); #endif break ; case PNG_COLOR_TYPE_GRAY: png_set_filler(libpng,0,PNG_FILLER_AFTER); break ; case PNG_COLOR_TYPE_GRAY_ALPHA: case PNG_COLOR_TYPE_PALETTE: break ; default: FatalUnexpected("This can't happen (unexpected png color_type)"); } } static void raw_callback(unsigned num, rgba *pixels) { if( libpng == NULL ) { init_output() ; } png_write_row(libpng,(png_bytep)pixels); xcffree(pixels); } static void graying_callback(unsigned num, rgba *pixels) { png_bytep fillptr = (uint8_t *)pixels ; unsigned i ; for( i = 0 ; i < num ; i++ ) { rgba pixel = pixels[i] ; int g = degrayPixel(pixel) ; if( g == -1 ) FatalGeneric(103, _("Grayscale output selected, but colored pixel(s) found")); *fillptr++ = g ; *fillptr++ = ALPHA(pixel) ; } raw_callback(num,pixels); } static void optimistic_palette_callback(unsigned num,rgba *pixels) { unsigned prev_size = paletteSize ; if( !palettify_row(pixels,num) || paletteSize != prev_size ) FatalUnexpected("Oops! Somehow the precomputed palette does not suffice " "after all..."); raw_callback(num,pixels); } static enum out_color_mode guessIndexed(struct FlattenSpec *spec,rgba *allPixels[]) { if( allPixels == NULL ) { if (spec->gimpish_indexed && colormapLength ) { unsigned i ; init_palette_hash(); for( i=0; idefault_pixel) ? spec->default_pixel : 0 ) >= 0 ) return COLOR_INDEXED ; } } else { init_palette_hash() ; if( palettify_rows(allPixels,spec->dim.width,spec->dim.height) ) { /* Might grayscale sometimes be preferred? No, that is what * -g is for! */ return COLOR_INDEXED ; } } return COLOR_BY_CONTENTS ; } static lineCallback selectCallback(void) { switch( flatspec.out_color_mode ) { default: case COLOR_RGB: return &raw_callback ; case COLOR_GRAY: return &graying_callback ; case COLOR_INDEXED: if( flatspec.process_in_memory ) return &raw_callback ; else return &optimistic_palette_callback ; } } /* findUnusedColor() will prefer to find a gray pixel */ static rgba findUnusedColor(rgba *pixels[],unsigned width,unsigned height) { size_t freqtab[256] ; unsigned x,y ; unsigned i,j ; rgba sofar ; for( i=0; i<256; i++ ) freqtab[i] = 0 ; for( y=0; y> RED_SHIFT)] ++ ; j = 0 ; for( i=0; i<256; i++ ) { if( freqtab[i] == 0 ) { return ((rgba)i << RED_SHIFT) + ((rgba)i << GREEN_SHIFT) + ((rgba)i << BLUE_SHIFT) + ((rgba)255 << ALPHA_SHIFT) ; } if( freqtab[i] < freqtab[j] ) { j = i ; } } sofar = ((rgba)255<> GREEN_SHIFT)] ++ ; j = 0 ; for( i=0; i<256; i++ ) { if( freqtab[i] == 0 ) { return sofar + ((rgba)i << GREEN_SHIFT); } if( freqtab[i] < freqtab[j] ) { j = i ; } } sofar += (rgba)j << GREEN_SHIFT ; for( i=0; i<256; i++ ) freqtab[i] = 0 ; for( y=0; y> BLUE_SHIFT)] ++ ; for( i=0; i<256; i++ ) { if( freqtab[i] == 0 ) { return sofar + ((rgba)i << BLUE_SHIFT); } } return 0 ; } int main(int argc,char **argv) { int option ; const char *unzipper = NULL ; const char *infile = NULL ; setlocale(LC_ALL,""); progname = argv[0] ; nls_init(); if( argc <= 1 ) gpl_blurb() ; init_flatspec(&flatspec) ; while( (option=getopt_long(argc,argv,"-"OPTSTRING,longopts,NULL)) >= 0 ) switch(option) { #define OPTION(char,long,desc,man) case char: #include "options.i" case 1: if( infile ) add_layer_request(&flatspec,optarg); else infile = optarg ; break ; case '?': usage(stderr); default: FatalUnexpected("Getopt(_long) unexpectedly returned '%c'",option); } if( infile == NULL ) { usage(stderr); } read_or_mmap_xcf(infile,unzipper); getBasicXcfInfo() ; initColormap(); complete_flatspec(&flatspec,guessIndexed); if( flatspec.process_in_memory ) { rgba **allPixels = flattenAll(&flatspec); analyse_colormode(&flatspec,allPixels,guessIndexed); /* See if we can do alpha compaction. */ if( flatspec.partial_transparency_mode != ALLOW_PARTIAL_TRANSPARENCY && !FULLALPHA(flatspec.default_pixel) && flatspec.out_color_mode != COLOR_INDEXED ) { rgba unused = findUnusedColor(allPixels, flatspec.dim.width, flatspec.dim.height); if( unused && (flatspec.out_color_mode == COLOR_RGB || degrayPixel(unused) >= 0) ) { unsigned x,y ; unused = NEWALPHA(unused,0) ; for( y=0; y .\" It is hereby in the public domain. .\" .\" In jurisdictions that do not recognise grants of copyright to the .\" public domain: I, the author and (presumably, in those jurisdictions) .\" copyright holder, hereby permit anyone to distribute and use this code, .\" in source code or binary form, with or without modifications. This .\" permission is world-wide and irrevocable. .\" .\" Of course, I will not be liable for any errors or shortcomings in the .\" code, since I give it away without asking any compenstations. .\" .\" If you use or distribute this code, I would appreciate receiving .\" credit for writing it, in whichever way you find proper and customary. .TH xcf2pnm 1 2006-02-12 "Xcftools" "" .SH NAME xcf2pnm \- convert from GIMP xcf files to ppm/pgm/pbm format .ds p xcf2pnm .SH SYNOPSIS .B \*p [ .I options ] .I filename [ .I layer names ] .SH DESCRIPTION .B xcf2pnm is a command-line tool that converts image files in the XCF format used by .BR gimp (1) to the generic image formats .BR pbm (5), .BR pgm (5), and .BR ppm (5), flattening layers if necessary. It does not need to have the Gimp engine itself available. .SH GENERAL OPTIONS .so xcf2pnm.1i .P Several groups of options are mutually incompatible; in each group the one given last will win: .TP 4 1) .B \-A and .BR \-b . .TP 2) .BR \-c , .BR \-g , .BR \-m , and .BR \-n . .TP 3) .B \-D and .BR \-G . .TP 4) .BR \-j , .BR \-z , and .BR \-Z . .TP 5) .B \-C and .BR \-O / \-S . .SH LAYER SPECIFICATIONS If no .I layer name is given on the command line, all of the visible layers in the XCF file are merged to produce the output image. It is also possible to specify the layers to merge explicitly, by giving their names as separate arguments after the input filename. In that case, the output will contain .I only the named layers. The layers will be merged in the order they appear on the command line, with the leftmost being "at the bottom" \- that is, the layer ordering in the XCF file will be ignored. .P The following options can be given .I after a layer name to override the global properties of the layer: .so xcf2pnm.1il .so exit.1i .SH EXAMPLES .IP .B xcf2pnm -b white foo.xcf > foo.ppm .IP .B xcf2pnm -a footrans.pgm -o foo.ppm foo.xcf Layer1 Layer2 .P To test whether the flattened image has any transparency, use .IP .B xcf2pnm foo.xcf > /dev/null .P To test whether the flattened image has .I partially transparent pixels, use .IP .B xcf2pnm -b white -G > /dev/null .SH BUGS AND LIMITATIONS .P When several partially transparent layers are merged, the pixel values are interpolated without gamma correction. (The Gimp also does it this way). Some slight rounding errors in the interpolation are inevitable; .B \*p sometimes has different rounding errors than the Gimp itself, especially when more than two layers are involved, or in case of some of the more exotic layer modes. These differences are usually not visible to the eye. .P Floating selections are currently not handled correctly. .P There are probably other bugs lurking in corner cases. If you discover one, please notify the author. .SH FILES .TP 8 .B /etc/X11/rgb.txt .TP 8 .B /usr/share/X11/rgb.txt .TP 8 .B /usr/lib/X11/rgb.txt Color name database for .BR \-b . .SH AUTHOR .B \*p was written by Henning Makholm . .P .SH SEE ALSO .BR xcfinfo (1), .BR xcf2png (1) xcftools-1.0.7/xcf2pnm.c0000644000175000017500000001720311223357030014742 0ustar makholmmakholm/* Convert xcf files to ppm * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "xcftools.h" #include "flatten.h" #include #include #include #include #if HAVE_GETOPT_H #include #else #include #endif #ifndef HAVE_GETOPT_LONG #define getopt_long(argc,argv,optstring,l1,l2) getopt(argc,argv,optstring) #endif #include "xcf2pnm.oi" static void usage(FILE *where) { fprintf(where,_("Usage: %s [options] filename.xcf[.gz] [layers]\n"), progname) ; fprintf(where,_("Options:\n")); opt_usage(where); if( where == stderr ) { exit(1); } } static int suppress_byline ; static struct FlattenSpec flatspec ; static FILE *outfile = NULL ; static FILE *transfile = NULL ; static void start_writing(FILE **f,int version) { const char *format[] = {"(format zero)", "PBM-ascii", "PGM-ascii", "PPM-ascii", "PBM", "PGM", "PPM" }; if( verboseFlag ) fprintf(stderr,f == &outfile ? _("Writing converted image as %s\n") : _("Writing transparency map as %s\n"), format[version]); *f = openout( f == &outfile ? flatspec.output_filename : flatspec.transmap_filename ); fprintf(*f,"P%d",version); if( suppress_byline ) ; else if( f == &outfile ) fprintf(*f,_(" # Converted by xcf2pnm %s"),PACKAGE_VERSION); else fprintf(*f,_(" # Transparency map by xcf2pnm %s"),PACKAGE_VERSION); fprintf(*f,"\n%d %d\n%s", flatspec.dim.width, flatspec.dim.height, version == 4 ? "" : "255\n"); } int put_pbm_row(FILE *file,unsigned num,rgba *pixels,rgba mask) { unsigned out ; unsigned i ; int bitsleft = 8 ; out = 0 ; for( i=0; i> RED_SHIFT) & 0xFF , outfile ); putc( (pixels[i] >> GREEN_SHIFT) & 0xFF , outfile ); putc( (pixels[i] >> BLUE_SHIFT) & 0xFF , outfile ); } callback_common(num,pixels); } static void pgm_callback(unsigned num,rgba *pixels) { unsigned i ; if( outfile == NULL ) start_writing(&outfile,5); for( i=0; i < num; i++ ) { int gray = degrayPixel(pixels[i]) ; if( gray == -1 ) FatalGeneric(103, _("Grayscale output selected, but colored pixel(s) found")); putc( gray, outfile ); } callback_common(num,pixels); } static void pbm_callback(unsigned num,rgba *pixels) { if( outfile == NULL ) start_writing(&outfile,4); if( !put_pbm_row(outfile,num,pixels, ((rgba)255 << RED_SHIFT) + ((rgba)255 << GREEN_SHIFT) + ((rgba)255 << BLUE_SHIFT)) ) FatalGeneric(103,_("Monochrome output selected, but not all pixels " "are black or white")); callback_common(num,pixels); } static enum out_color_mode guess_color_mode(const char *string) { if( strlen(string) >= 3 ) { string += strlen(string)-3 ; if( strcmp(string,"ppm")==0 ) return COLOR_RGB ; if( strcmp(string,"pgm")==0 ) return COLOR_GRAY ; if( strcmp(string,"pbm")==0 ) return COLOR_MONO ; } return COLOR_BY_FILENAME ; } static lineCallback selectCallback(void) { if( flatspec.transmap_filename && ALPHA(flatspec.default_pixel) >= 128 ) FatalGeneric(101,_("The -a option was given, " "but the image has no transparency")); switch( flatspec.out_color_mode ) { default: case COLOR_RGB: return &ppm_callback ; case COLOR_GRAY: return &pgm_callback ; case COLOR_MONO: return &pbm_callback ; } } int main(int argc,char **argv) { int option ; const char *unzipper = NULL ; const char *infile = NULL ; setlocale(LC_ALL,""); progname = argv[0] ; nls_init(); if( argc <= 1 ) gpl_blurb() ; init_flatspec(&flatspec) ; flatspec.out_color_mode = COLOR_BY_FILENAME ; while( (option=getopt_long(argc,argv,"-@#"OPTSTRING,longopts,NULL)) >= 0 ) switch(option) { #define OPTION(char,long,desc,man) case char: #include "options.i" case 1: if( infile ) add_layer_request(&flatspec,optarg); else infile = optarg ; break ; case '?': usage(stderr); case '@': /* Non-documented option for build-time test */ suppress_byline = 1 ; break ; case '#': /* Non-documented option for xcfview */ flatspec.default_pixel = CHECKERED_BACKGROUND ; break ; default: FatalUnexpected("Getopt(_long) unexpectedly returned '%c'",option); } if( infile == NULL ) { usage(stderr); } if( flatspec.out_color_mode == COLOR_BY_FILENAME && strlen(flatspec.output_filename) > 4 && flatspec.output_filename[strlen(flatspec.output_filename)-4] == '.' ) flatspec.out_color_mode = guess_color_mode(flatspec.output_filename); /* If the output filename was not enough cue, see if we're running * through a symlink/hardlink that gives the required output format */ if( flatspec.out_color_mode == COLOR_BY_FILENAME && strlen(progname) > 3 ) flatspec.out_color_mode = guess_color_mode(progname); if( flatspec.out_color_mode == COLOR_BY_FILENAME ) flatspec.out_color_mode = COLOR_BY_CONTENTS ; read_or_mmap_xcf(infile,unzipper); getBasicXcfInfo() ; initColormap(); complete_flatspec(&flatspec,NULL); if( flatspec.process_in_memory ) { rgba **allPixels = flattenAll(&flatspec); analyse_colormode(&flatspec,allPixels,NULL); shipoutWithCallback(&flatspec,allPixels,selectCallback()); } else { flattenIncrementally(&flatspec,selectCallback()); } closeout(outfile,flatspec.output_filename) ; closeout(transfile,flatspec.transmap_filename) ; return 0 ; } xcftools-1.0.7/xcfinfo.100000644000175000017500000000373611223357030015025 0ustar makholmmakholm.\" Manual page for xcfinfo .\" This file was written by Henning Makholm .\" It is hereby in the public domain. .\" .\" In jurisdictions that do not recognise grants of copyright to the .\" public domain: I, the author and (presumably, in those jurisdictions) .\" copyright holder, hereby permit anyone to distribute and use this code, .\" in source code or binary form, with or without modifications. This .\" permission is world-wide and irrevocable. .\" .\" Of course, I will not be liable for any errors or shortcomings in the .\" code, since I give it away without asking any compenstations. .\" .\" If you use or distribute this code, I would appreciate receiving .\" credit for writing it, in whichever way you find proper and customary. .TH xcfinfo 1 2006-02-12 "Xcftools" "" .SH NAME xcfinfo \- display information about GIMP xcf files .ds p xcfinfo .SH SYNOPSIS .B \*p [ .I options ] .I filename .SH DESCRIPTION .B xcfinfo is a command-line tool that displays information about the contents of image files in the XCF format used by .BR gimp (1), particularly about the layers in the image. .SH OPTIONS .so xcfinfo.1i .SH OUTPUT Information about the image is displayed on standard output in a fixed format. The first line contains general information about the XCF file: .TP 3 \- The file format version .TP \- The canvas size .TP \- The image mode (color, grayscale, or indexed) .TP \- The numer of layers .TP \- The internal compression algorithm .P Following this line there is a line for each layer: .TP 3 1) The character .B + if the layer is visible and .B \- if it is not .TP 2) The size and offset of the layer .TP 3) The pixel format of the layer, including whether the layer has an alpha channel. .TP 4) The layer mode, as well as the opacity if not 100%, and .B /mask if the layer has an active layer mask. .TP 5) The name of the layer. .so exit.1i .SH AUTHOR .B \*p was written by Henning Makholm . .P .SH SEE ALSO .BR xcf2pnm (1), .BR xcf2png (1) xcftools-1.0.7/xcfinfo.c0000644000175000017500000000551411223357027015031 0ustar makholmmakholm/* A program that extracts metadata from an XCF file * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #include "xcftools.h" #include #include #include #if HAVE_GETOPT_H #include #else #include #endif #ifndef HAVE_GETOPT_LONG #define getopt_long(argc,argv,optstring,l1,l2) getopt(argc,argv,optstring) #endif #include "xcfinfo.oi" static void usage(FILE *where) { fprintf(where,_("Usage: %s [options] filename.xcf[.gz]\n"),progname) ; fprintf(where,_("Options:\n")); opt_usage(where) ; if( where == stderr ) { exit(1); } } int main(int argc,char **argv) { int i ; int option ; const char *unzipper = NULL ; const char *infile = NULL ; setlocale(LC_ALL,""); progname = argv[0] ; nls_init(); if( argc <= 1 ) gpl_blurb() ; while( (option=getopt_long(argc,argv,"-"OPTSTRING,longopts,NULL)) >= 0 ) switch(option) { #define OPTION(char,long,desc,man) case char: #include "options.i" case 1: if( infile ) { FatalGeneric (20,_("Only one XCF file per command line, please")); } else { infile = optarg ; break ; } case '?': usage(stderr); default: FatalUnexpected("Getopt(_long) unexpectedly returned '%c'",option); } if( infile == NULL ) { usage(stderr); } read_or_mmap_xcf(infile,unzipper); getBasicXcfInfo() ; printf(_("Version %d, %dx%d %s, %d layers, compressed %s\n"), XCF.version,XCF.width,XCF.height, _(showGimpImageBaseType(XCF.type)), XCF.numLayers, _(showXcfCompressionType(XCF.compression))); for( i = XCF.numLayers ; i-- ; ) { printf("%c %dx%d%+d%+d %s %s", XCF.layers[i].isVisible ? '+' : '-', XCF.layers[i].dim.width, XCF.layers[i].dim.height, XCF.layers[i].dim.c.l, XCF.layers[i].dim.c.t, _(showGimpImageType(XCF.layers[i].type)), _(showGimpLayerModeEffects(XCF.layers[i].mode))); if( XCF.layers[i].opacity < 255 ) printf("/%02d%%",XCF.layers[i].opacity * 100 / 255); if( XCF.layers[i].hasMask ) printf(_("/mask")); printf(" %s\n",XCF.layers[i].name); } return 0 ; } xcftools-1.0.7/xcfspec.txt0000644000175000017500000014714210454724562015440 0ustar makholmmakholm============================================ PARTIAL SPECIFICATION OF THE XCF FILE FORMAT ============================================ Copyright Henning Makholm , 2006-07-11 This is free documentation; you can modify and/or redistribute it according to the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the license, or (at your option) any later version. --------------------------------------------- T H I S I S A D R A F T O N L Y ! --------------------------------------------- This is the native image file format of the GIMP. Beware that CinePaint's native file format is called XCF too. While the latter is derived from the format described here, the two formats differ in many details and are not mutually compatible. The XCF format is designed to store the entire part of the state of the Gimp that is specific to one image (i.e., not the cut buffer, tool options, key bindings, etc.) and is not undo data. This makes the full collection of data stored in an XCF file rather heterogeneous and tied to the internals of the Gimp. Use of the format by third-party software is recommended only as a way to get data into and out of the Gimp for which it would be impossible or inconvenient to use a more standard interchange format. Authors of third-party XCF-creating software in particular should take care to write files that are as indistinguishable as possible from ones saved by the Gimp. The Gimp developers take care to make each version of the Gimp able to read XCF files produced by older versions, but they make no special efforts to allow reading of files created by other software that attempt to extrapolate from the Gimp source. The name -------- The name XCF honors the Gimp's origin at the eXperimental Computing Facility of the University of California at Berkeley. Status of this document ----------------------- This specification is an unofficial condensation and extrapolation of the XCF-writing and -reading code in version 2.2.11 of the Gimp. As of this writing, it has not been approved or proofread by any Gimp developer, though it has been written with the intention of contributing it to the Gimp project for use as official documentation. Some of the normative statements made below are enforced by the XCF reader in the Gimp; others are just the author's informed guess about "best practices" that would be likely to maximize interoperability with future versions of the Gimp. 1. BASIC DATA MODEL =================== It is recommended that a software developer who wants to take full advantage of the XCF format be deeply familiar with the Gimp at least as a user. The following high-level overview is meant to help those non-users who just need to extract pixel data from an XCF file get up to speed. In general an XCF file describes a stack of _layers_ and _channels_ on a _canvas_, which is just an abstract rectangular viewport for the layers and channels. Layers ------ A layer is a named rectangular area of pixels which has a definite position with respect to the canvas. A layer may extend beyond the canvas or (more commonly) only cover some of it. Each pixel of the layer has a color which is specified in one of three ways: RGB: Three intensity values for red, green, and blue additive color components, each on a scale from 0 to 255. The exact color space is not specified. The Gimp displays image data directly on PC display hardware without any software correction, so in most cases the intensity values should be considered nonlinear samples that map to physical light intensities using a power function with an exponent ("gamma") of about 2.5. (This is how PC hardware commonly treat bit values in the video buffer, which incidentally also has the property of making each 1/255th step about equally perceptible to the human eye when the monitor is correctly adjusted). Beware, however, that the Gimp's compositing algorithms (as described in Section 8 below) implicitly treat the intensities as _linear_ samples. The XCF file format currently has no support for storing the intended gamma of the samples. Grayscale: One intensity value on a scale from 0 (black) to 255 (white). Gamma considerations as for RIB. Indexed: An 8-bit index into a colormap that is shared between all layers. The colormap maps each index to an RGB triple which is interpreted as in the RGB model. All layers in an image must use the same color model. Exception: if the "floating selection" belongs to a channel or layer mask, it will be represented as grayscale pixels independently of the image's overall color model. Each pixel of a layer also has an alpha component which specifies the opacity of the pixel on a linear scale from 0 (denoting an alpha of 0.0, or completely transparent) to 255 (denoting an alpha of 1.0, or completely opaque). The color values do not use "premultiplied alpha" storage. The color information for pixels with alpha 0 _may_ be meaningful; the Gimp preserves it when parts of a layer are erased and provides (obscure) ways of recovering it in its user interface. The bottommost layer _only_ in an image may not contain alpha information; in this case all pixels in the layer have an alpha value of 255. (Even if the bottommost layer does not cover the entire canvas, it is the only layer that can be without an explicit alpha channel). In images that use the indexed color model, the Gimp does not support partial transparency and interprets alpha values from 0 to 127 as fully transparent and values from 128 to 255 as fully opaque. This behavior _may_ change in future versions of the Gimp. Layers have certain other properties such as a visibility flag, a global opacity (which is multiplied with individual pixel alphas) and various editing state flags. Channels -------- A channel is a named object that contains a single byte of information for each pixel in the canvas area. Channels have a variety of use as intermediate objects during editing; they are not meant to be rendered directly when the final image is displayed or exported to layer-less formats. A channel can be edited as if it was a grayscale layer with the same dimensions as the canvas. When it is shown in the Gimp editor UI together with other layers, it is used as if it was the _inverse_ alpha channel of a layer with the same color information in all pixels; this color can be stored in the XCF file as a property of the channel. This "mask" representation is generally thought of as an UI feature rather than an intrinsic semantics of a channel. The current _selection_ in the editor is stored as a channel in the XCF file if it is nonempty. Pixels with a value of 255 belong to the selection; pixels with a value of 0 don't, an pixels with intermediate values are partially selected. A major use of channels is as a store for saved selections. Though the channel data structure in the XCF file contains a height and width field, these must always be the same as the canvas width and height. Related to channels is the _layer mask_ that can be attached to a layer. The layer mask is in fact represented as a channel structure in the XCF file, but it is not listed in the master list of channels. Its dimensions and placement coincide with those of its parent layer. Unless disabled by the PROP_APPLY_MASK property, the layer mask functions as an extra alpha channel for the layer, in that for each pixel the layer's alpha byte and the layer mask byte are multiplied to find the extent to which the layer obscures the background. Thus a layer mask can make parts of the layer more transparent, but never more opaque. 2. FORMAT CONCEPTS AND DATATYPES ================================ An XCF file is a sequence of bytes. It contains a series of data structures, the order of which is in general not significant. The exception to this is that the main image structure must come at the very beginning of the files, and that the tile data blocks for each drawable must follow each other directly. References _between_ structures in the XCF file take the form of 32-bit "pointers" that count the number of bytes between the beginning of the XCF file and the beginning of the pointed-to structure. Each structure is designed to be written and read sequentially; many contain items of variable length and the concept of an offset _within_ a data structure is not often relevant. Basic data types ---------------- A WORD is a 32-bit integer stored as 4 bytes in network byte order, i.e. with the most significant byte first. The word is not necessarily aligned to an offset within the XCF file that is a multiple of 4. Depending on the context the word can be unsigned or (2's complement) signed. In this specification unsigned words are denoted "uint32" and signed words are denoted "int32". A FLOAT is stored as a 32-bit IEEE 754 single-precision floating-point number in network byte order. A STRING is stored as follows: uint32 n+1 The number of bytes that follow, including the zero byte byte[n] ... The string data in Unicode, encoded using UTF-8 byte 0 A terminating zero byte Exception: the empty string is stored simply as an uint32 with the value 0. Properties ---------- As an extension mechanism, most kinds of structures in an XCF file include a variable-length series of variable-length PROPERTY records which have the following general format uint32 t A magic number that identifies the type of property uint32 n They payload length (but BEWARE! see below) byte[n] ... Payload - interpretation depends on the type The authoritative source for property type numbers is the file app/xcf/xcf-private.h in the Gimp sources. The number of properties in a property list is not stored explicitly; the last property in the list is identified by having type 0; it must have length 0. XCF readers must skip and ignore property records of unrecognized type, and the length word is there to support such skipping. However, the Gimp's own XCF reader will _ignore_ the length word of most properties that it _does_ recognize, and instead reads the amount of payload it knows this property to have. This means that a property record is not itself extensible: one cannot piggyback extra data onto an existing property record by increasing its length. Also, some historical versions of the Gimp actually stored the wrong length for some properties, so there are XCF files with misleading property length information in circulation. For maximal compatibility, an XCF reader should endeavor to know the native lengths of as many properties as possible and fall back to the length word only for truly unknown property types. There is not supposed to be more than one instance of each property in a property list, but some versions of the Gimp will erroneously emit duplicate properties. An XCF reader that meets a duplicated property should let the contents of the later instance take precedence, except for properties that contain lists of subitems, in which the lists should generally be concatenated. An XCF writer should never deliberately duplicate properties within a single property list. Parasites --------- A second level of extensibility is provided by the "parasite" concept. A parasite is analogous to a property (and is usually stored in a special property in the XCF file) but is identified by a string rather than a number. This makes a larger namespace available for parasites. Gimp plug-ins can access the parasites of an image component through a generic API and can define their own parasite names which will be ignored by other plug-ins. In contrast, only the Gimp itself should define new property types. A list of known parasites and their data formats can be found in the file devel-doc/parasites.txt of the Gimp source tree. 3. THE MASTER IMAGE STRUCTURE ============================= The image structure always starts at offset 0 in the XCF file. byte[9] "gimp xcf " File type magic byte[4] version XCF version "file" - version 0 "v001" - version 1 "v002" - version 2 byte 0 Zero-terminator for version tag uint32 width With of canvas uint32 height Height of canvas uint32 base_type Color mode of the image; one of 0: RGB color 1: Grayscale 2: Indexed color (enum GimpImageBaseType in libgimpbase/gimpbaseenums.h) property-list Image properties (details below) ,------------------- Repeat once for each layer, topmost layer first: | uint32 layer Pointer to the layer structure `-- uint32 0 Zero marks the end of the array of layer pointers ,------------------- Repeat once for each channel, in no particular order: | uint32 channel1 Pointer to the channel structure `-- uint32 0 Zero marks the end of the array of channel pointers The last four characters of the initial 13-character magic string are a version indicator. The version will be higher than 2 if the correct reconstruction of pixel data from the file requires that the reader understands features not described in this specification. On the other hand, optional extra information that can be safely ignored will not cause the version to increase. The Gimp's XCF writer dynamically selects the lowest version that will allow the image to be represented. Third-party XCF writers should do likewise. Version numbers from v100 upwards have been used by CinePaint, which originated as a 16-bit fork of the Gimp. That format is not described by this specification. Image properties ---------------- The following properties are found only in the property list of the image structure. In addition to these, the list can also contain the properties PROP_TATTOO, PROP_PARASITES and PROP_END, described in section 8 below. PROP_COLORMAP (essential) uint32 1 The type number for PROP_COLORMAP is 1 uint32 3n+4 The payload length uint32 n The number of colors in the colormap (should be <256) ,------------ Repeat n times: | byte r The red component of a colormap color | byte g The green component of a colormap color | byte b The blue component of a colormap color `-- Appears in all indexed images and stores the colormap. The property will be ignored if it is encountered in an RGB or grayscale image. The current GIMP will not write a colormap with RGB or grayscale images, but some older ones occasionally did, and readers should be prepared to gracefully ignore it in those cases. Note that in contrast to the palette data model of, for example, the PNG format, an XCF colormap does not contain alpha components, and there is no colormap entry for "transparent"; the alpha channel of layers that have one is always represented separately. The structure here is that of XCF version >= 1. Comments in the GIMP source code indicate that XCF version 0 could not store indexed images in a sane way; contemporary Gimps will complain and reinterpret the pixel data as a grayscale image if they meet a version-0 indexed image. Beware that the payload length of the PROP_COLORMAP in particular cannot be trusted: some historic releases of the Gimp erroneously wrote n+4 instead of 3n+4 into the length word (but still actually followed it by 3n+4 bytes of payload). PROP_COMPRESSION (essential) uint32 17 The type number for PROP_COMPRESSION is 17 uint32 1 One byte of payload byte c Compression indicator; one of 0: No compression 1: RLE encoding 2: (Never used, but reserved for zlib compression) 3: (Never used, but reserved for some fractal compression) Defines the encoding of pixels in tile data blocks in the entire XCF file. See section 6 below for details. Note that unlike most other properties whose payload is always a small integer, PROP_COMPRESSION does _not_ pad the value to a full 32-bit integer. Contemporary Gimps always write files with c=1. It is unknown to the author of this document whether versions that wrote completely uncompressed (c=0) files ever existed. PROP_GUIDES (editing state) uint32 18 The type number for PROP_GUIDES is 18 uint32 5*n Five bytes of payload per guide ,---------- Repeat n times: | int32 c Guide coordinate | byte o Guide orientation; one of | 1: The guide is horizontal, and c is a y coordinate | 2: The guide is vertical, and c is an x coordinate `-- Appears if any guides have been defined. Some old XCF files define guides with negative coordinates; those should be ignored by readers. PROP_RESOLUTION (not editing state, but not _really_ essential either) uint32 19 The type number for PROP_RESOLUTION is 19 uint32 8 Eight bytes of payload float x Horizontal resolution in pixels per 25.4 mm float y Vertical resolution in pixels per 25.4 mm Gives the intended physical size of the image's pixels. Note that for many images, such as graphics created for the web, the creator does not really have an intended resolution in mind but intends the image to be shown at whatever the natural resolution of the viewer's monitor is. Similarly, photographs commonly do not have a well-defined target size and are intended to be scaled to fit the available space instead. Therefore readers should not interpret the information in this property too rigidly; the Gimp writes it to XCF files unconditionally, even if the user has not explicitly chosen a resolution. PROP_UNIT (editing state) uint32 22 The type number for PROP_UNIT is 21 uint32 4 Four bytes of payload uint32 c Magic number specifying the unit; one of 1: Inches (25.4 mm) 2: Millimeters (1 mm) 3: Points (127/360 mm) 4: Picas (127/30 mm) Specifies the units used to specify resolution in the Scale Image and Print Size dialogs. Note that this is used only in the user interface; the PROP_RESOLUTION property is always stored in pixels per 25.4 mm. Instead of this property, PROP_USER_UNIT can be used to specify a unit not on the list of standard units. PROP_PATHS uint32 23 The type number for PROP_PATHS is 23 uint32 len The total length of the following payload uint32 a The index of the active path uint32 n The number of paths that follow path_1 path_2 ... path_n Each path has one of three formats Format 1: Format 2: Format 3: string string string name uint32 uint32 uint32 locked byte byte byte state 4 if closed, 2 otherwise uint32 uint32 uint32 closed uint32 uint32 uint32 n The number of points uint32=1 uint32=2 uint32=3 v A version indicator uint32 uint32 dummy Ignored; always set to 1 uint32 tattoo 0 if none, or see PROP_TATTOO ,---------- ,---------- ,------------------ Repeat for n points: | int32 | int32 | int32 typ Type of point; one of | | | 0: an anchor | | | 1: a Bezier control point | int32 | float | float x X coordinate | int32 | float | float y Y coordinate `-- `-- `-- This format is used to save path data if all paths in the image are continuous sequences of Bezier strokes. Otherwise PROP_VECTORS is used instead. (Hmmm... PROP_PATHS cannot represent parasites for paths, but the XCF writer does not check whether all paths are parasite-less when choosing which property to use, so path parasites may be lost upon saving). There may be paths that declare a length of 0 points; these should be ignored. PROP_USER_UNIT (editing state) uint32 24 The type number for PROP_USER_UNIT is 24 uint32 length The total length of the following payload float factor 25.4 mm divided by the length of the unit uint32 digits The number of decimal digits used with the unit string id An identifier for the unit string sym The short symbol for the unit string abbr The abbreviation for the unit string sing The name of the unit in singular string plur The name of the unit in plural An alternative to PROP_UNIT which allows the use of units not on the standard list. PROP_VECTORS uint32 25 The type number for PROP_VECTORS is 25 uint32 length The total length of the following payload uint32 1 A version tag; so far always 1 uint32 a The index of the active path uint32 n The number of paths that follow ,---------------------- Repeat n times: | string name Name of the path | uint32 tattoo Tattoo of the path (see PROP_TATTOO), or 0 | uint32 visible | uint32 linked | uint32 m The number of parasites for the path | uint32 k The number of strokes in the first path | ,-------------------- Repeat m times: | | parasite ... In same format as in PROP_PARASITES (q.v.) | `-- | ,-------------------- Repeat k times: | | uint32 1 The stroke is a Bezier stroke (p.t., all are) | | uint32 closed Closed flag | | uint32 na Number of floats given for each point; | | must be >= 2 and <= 6. | | uint32 np Number of control points for this stroke | | ,------------------ Repeat np times: | | | uint32 type Type of the first point; one of | | | 0: an anchor | | | 1: a Bezier control point | | | float x X coordinate | | | float y Y coordinate | | | float pressure Only if na >= 3; otherwise defaults to 1.0 | | | float xtilt Only if na >= 4; otherwise defaults to 0.5 | | | float ytilt Only if na >= 5; otherwise defaults to 0.5 | | | float wheel Only if na == 6; otherwise defaults to 0.5 | | `-- | `-- `-- Appears unless all paths can be stored in the PROP_PATHS format. The Gimp's XCF reader checks that the total size of all path specifications in the property precisely equals the length word, so it is safe for a reader to use the length word to skip the property without parsing the individual parasites. (Note that this is _not_ the case for PROP_PATHS). 4. THE LAYER STRUCTURE ====================== Layer structures are pointed to from a list of layer pointers in the master image structure. uint32 width The width of the layer uint32 height The height of the layer uint32 type Color mode of the layer: one of 0: RGB color without alpha; 3 bytes per pixel 1: RGB color with alpha; 4 bytes per pixel 2: Grayscale without alpha; 1 byte per pixel 3: Grayscale with alpha; 2 bytes per pixel 4: Indexed without alpha; 1 byte per pixel 5: Indexed with alpha; 2 bytes per pixel (enum GimpImageType in libgimpbase/gimpbseenums.h) string name The name of the layer property-list Layer properties (details below) uint32 hptr Pointer to the hierarchy structure containing the pixels uint32 mptr Pointer to the layer mask (a channel structure), or 0 The color mode of a layer must match that of the entire image. All layers except the bottommost one _must_ have an alpha channel. Exception: If the layer is a floating selection (see PROP_FLOATING_SELECTION) and is attached to a channel or layer mask, its color mode must be 3 (grayscale with alpha). Layer properties ---------------- The following properties are found only in the property list of layer structures. In addition to these, the list can also contain the properties PROP_OPACITY, PROP_VISIBLE, PROP_LINKED, PROP_TATTOO, PROP_PARASITES, and PROP_END, defined in section 8 below. PROP_ACTIVE_LAYER (editing state) uint32 2 The type number for PROP_ACTIVE_LAYER is 2 uint32 0 PROP_ACTIVE_LAYER has no payload Appears in the property list for the currently active layer. Only one layer must have this property. PROP_FLOATING_SELECTION (essential) uint32 5 The type number for PROP_FLOATING_SELECTION is 5 uint32 4 Four bytes of payload uint32 ptr Pointer to the layer or channel that the floating selection is attached to. Appears in the property list for the layer that is the floating selection. If a floating selection exists, it must always be the first layer in the layer list, but it is not rendered at that position in the layer stack. Instead it is logically attached to another layer, or a channel or layer mask, and the contents of the floating selection is combined with ("anchored to") that drawable before it is used to render the visible image. The floating selection must not have a layer mask of its own, but if an ordinary (not floating) selection also exists, it will be used as a layer mask for the floating selection. If a floating selection exists, it must also be the active layer. Because floating selections are modal and ephemeral, users rarely save XCF files containing a floating selection. It may be acceptable for third-party XCF consumers to ignore floating selections or explicitly refuse to process them. PROP_MODE (essential) uint32 7 The type number for PROP_MODE is 7 uint32 4 Four bytes of payload unit32 m The layer mode; one of 0: Normal 1: Dissolve (random dithering to discrete alpha) 2: (Behind: not selectable in the Gimp UI) 3: Multiply 4: Screen 5: Overlay 6: Difference 7: Addition 8: Subtract 9: Darken Only 10: Lighten Only 11: Hue (H of HSV) 12: Saturation (S of HSV) 13: Color (H and S of HSL) 14: Value (V of HSV) 15: Divide 16: Dodge 17: Burn 18: Hard Light 19: Soft Light (XCF version >= 2 only) 20: Grain Extract (XCF version >= 2 only) 21: Grain Merge (XCF version >= 2 only) When reading old XCF files that lack this property, assume m=0. The effects of the various layer modes is defined in Section 8, below. Beware that the Gimp ignores all other layer modes than Normal and Dissolve for the bottommost visible layer of the image; if m>=3 has been specified for this layer it will interpreted as m==0 for display and flattening purposes. This effect happens for one layer only: even if the bottommost visible layer covers only some (or none) of the canvas, it will be the only layer to have its mode forced to Normal. PROP_PRESERVE_TRANSPARENCY (editing state) (called PROP_LOCK_ALPHA in Gimp 3.3+) uint32 10 The type number for PROP_PRESERVE_TRANSPARENCY is 10 uint32 4 Four bytes of payload uint32 b 1 if the Preserve Transparency flag is set; 0 if not The Preserve Transparency flag prevents all drawing tools in the Gimp from increasing the alpha of any pixel in the layer. PROP_APPLY_MASK (essential) uint32 11 The type number for PROP_APPLY_MASK is 11 uint32 4 Four bytes of payload uint32 b 1 if the layer mask should be applied, 0 if not If the property does not appear for a layer which has a layer mask, it defaults to true. Robust readers should force this to false if the layer has no layer mask. Writers should never save this as true unless the layer has a layer mask. PROP_EDIT_MASK (editing state) uint32 12 The type number for PROP_EDIT_MASK is 12 uint32 4 Four bytes of payload uint32 b 1 if the layer mask is currently being edited, 0 if not If the property does not appear for a layer which has a layer mask, it defaults to false. Robust readers should force this to false if the layer has no layer mask. Writers should never save this as true unless the layer has a layer mask. PROP_SHOW_MASK (editing state) uint32 13 The type number for PROP_APPLY_MASK is 13 uint32 4 Four bytes of payload uint32 b 1 if the layer mask is visible, 0 if not If the property does not appear for a layer which has a layer mask, it defaults to false. Robust readers should force this to false if the layer has no layer mask. Writers should never save this as true unless the layer has a layer mask. PROP_OFFSETS (essential) uint32 15 The type number for PROP_OFFSETS is 15 uint32 8 Eight bytes of payload int32 dx Horizontal offset int32 dy Vertical offset Gives the coordinates of the topmost leftmost corner of the layer relative to the topmost leftmost corner of the canvas. The coordinates can be negative; this corresponds to a layer that extends to the left of or above the canvas boundary. When reading old XCF files that lack this property, assume (0,0). PROP_TEXT_LAYER_FLAGS uint32 26 The type number for PROP_TEXT_LAYER_FLAGS is 26 uint32 4 Four bytes of payload uint32 f Flags, or'ed together from the following set: 0x00000001 Do _not_ change the layer name if the text contents is changed 0x00000002 The pixel data has been painted to or otherwise modified since the text was rendered Appears in property lists for text layers. The actual text (and other parameters such as font and color) appears as a parasite rather than a property. 5. THE CHANNEL STRUCTURE ======================== Channel structures are pointed to from layer structures (in case of layer masks) or from the master image structure (for all other channels). uint32 width The width of the channel uint32 height The height of the channel string name The name of the channel property-list Layer properties (see below) uint32 hptr Pointer to the hierarchy structure containing the pixels The with and height of the channel must be the same as those of its parent structure (the layer in the case of layer masks; the canvas for all other channels). Channel properties ------------------ The following properties are found only in the property list of channel structures. In addition to these, the list can also contain the properties PROP_OPACITY, PROP_VISIBLE, PROP_LINKED, PROP_TATTOO, PROP_PARASITES, and PROP_END, defined in section 8 below. PROP_ACTIVE_CHANNEL (editing state) uint32 3 The type number for PROP_ACTIVE_CHANNEL is 3 uint32 0 PROP_ACTIVE_CHANNEL has no payload Appears in the property list for the currently active channel. PROP_SELECTION (editing state?) uint32 4 The type number for PROP_SELECTION is 4 uint32 0 PROP_SELECTION has no payload Appears in the property list for the channel structure that represents the selection mask. PROP_SHOW_MASKED (editing state) uint32 14 The type number for PROP_SHOW_MASKED is 14 uint32 4 Four bytes of payload uint32 b 1 if the channel is shown as a mask, 0 if not Appears in the property list for channels. PROP_COLOR uint32 16 The type number for PROP_COLOR is 16 uint32 3 Three bytes of payload byte r Red component of color byte g Green component of color byte b Blue component of color Appears in the property list for channels and gives the color of the screen that is used to represent the channel when it is visible in the UI. (The alpha of the screen is given as the channel's PROP_OPACITY). 6. THE HIERARCHY STRUCTURE ========================== A hierarchy contains data for a rectangular array of pixels. It is pointed to from a layer or channel structure. uint32 width The with of the pixel array uint32 height The height of the pixel array uint32 bpp The number of bytes per pixel given uint32 lptr Pointer to the "level" structure ,--------------- Repeat zero or more times | uint32 dlevel Pointer to an unused level structure `-- uint32 0 A zero ends the list of level pointers The width, height, and bpp values are for consistency checking; their correct values can always be inferred from the context, and are checked when the Gimp reads the XCF file. Levels ------ For some unknown historical reason, the hierarchy structure contains an extra indirection to a series of "level" structures, described below. Only the first level structure is used by the Gimp's XCF reader, except that the reader checks that a terminating zero for the level-pointer list can be found. The Gimp's XCF writer creates a series of dummy level structures (with no tile pointers), each declaring a height and width half of the previous one (rounded down), until the height and with are both less than 64. Thus, for a layer of 3 x 266 pixels, this series of levels will be saved: A level of 3 x 266 pixels, with 5 tiles: the actually used one A level of 1 x 133 pixels with no tiles A level of 0 x 66 pixels with no tiles A level of 0 x 33 pixels with no tiles Third-party XCF writers should probably mimic this entire structure; robust XCF readers should have no reason to even read past the pointer to the first level structure. The level structure is laid out as follows: uint32 width The width of the pixel array uint32 height The height of the pixel array ,-------------- Repeat for each of the ceil(width/64)*ceil(height/64) tiles | uint32 tptr Pointer to tile data `-- uint32 0 A zero marks the end of the array of tile pointers The width and height must be the same as the ones recorded in the hierarchy structure (except for the aforementioned dummy levels). Tiles ----- The pixels in the hierarchy are organized in a grid of "tiles", each with a width and height of up to 64 pixels. The only tiles that have a width less than 64 are those in the rightmost column, and the only tiles that have a height less than 64 are those in the bottommost row. Thus, a layer measuring 200 x 150 pixels will be divided into 12 tiles: +-----------------+-----------------+------------------+-----------------+ | Tile 0: 64 x 64 | Tile 1: 64 x 64 | Tile 2: 64 x 64 | Tile 3: 8 x 64 | +-----------------+-----------------+------------------+-----------------+ | Tile 4: 64 x 64 | Tile 5: 64 x 64 | Tile 6: 64 x 64 | Tile 7: 8 x 64 | +-----------------+-----------------+------------------+-----------------+ | Tile 8: 64 x 22 | Tile 9: 64 x 22 | Tile 10: 64 x 22 | Tile 11: 8 x 22 | +-----------------+-----------------+------------------+-----------------+ As can be seen from this example, the tiles appear in the XCF file in row-major, top-to-bottom, left-to-right order. The dimensions of the individual tiles are not stored explicitly in the XCF file, but must be computed by the reader. The tiles that are pointed to by a single level structure must be contiguous in the XCF file, because the Gimp's XCF reader uses the difference between two subsequent tile pointers to judge the amount of memory it needs to allocate for internal data structures. 7. TILE DATA ORGANIZATION ========================= The format of the data blocks pointed to by the tile pointers in the level structure of the previous section differs according to the value of the PROP_COMPRESSION property of the main image structure. Current Gimps always use RLE compression, but readers should nevertheless be prepared to meet the older uncompressed format. Both formats assume the width, height and byte depth of the tile are known from the context (namely, they are stored explicitly in the hierarchy structure). Both encodings store a linear sequence of with*height pixels, extracted from the tile in row-major, top-to-bottom, left-to-right order (the same as the reading direction of multi-line English text). In color modes with alpha information, the alpha value is the last of the 2 or 4 bytes for each pixel. In RGB color modes, the 3 (first) bytes for each pixel is the red intensity, the green intensity, and the blue intensity, in that order. Uncompressed tile data ---------------------- In the uncompressed format, the file first contains all the bytes for the first pixel, then all the bytes for the second pixel, and so on. RLE compressed tile data ------------------------ In the Run-Length Encoded format, each tile consists of a run-length encoded stream of the first byte of each pixel, then a stream of the second byte of each pixel, and so forth. In each of the streams, multiple occurrences of the same byte value are represented in compressed form. The representation of a stream is a series of operations; the first byte of each operation determines the format and meaning of the operation: byte n For 0 <= n <= 126: a short run of identical bytes byte v Repeat this value n+1 times or byte 127 A long run of identical bytes byte p byte q byte v Repeat this value p*256 + q times or byte 128 A long run of different bytes byte p byte q byte[p*256+q] data Copy these verbatim to the output stream or byte n For 129 <= n <= 255: a short run of different bytes byte[256-n] data Copy these verbatim to the output stream The end of the stream for "the first byte of all pixels" (and the following similar streams) must occur at the end of one of these operations; it is not permitted to have one operation span the boundary between streams. The RLE encoding allows "degenerate" encodings in which the original data stream may double in size (or grow to arbitrarily large sizes if (128,0,0) operations are inserted). Such encodings must be avoided, as the Gimp's XCF reader expects that the size of an encoded tile is never more than 24 KB, which is only 1.5 times the unencoded size of a 64x64 RGBA tile. A simple way for an XCF creator to avoid overflow is a) never using opcode 0 (but instead opcode 255) b) using opcodes 127 and 128 only for lengths larger than 127 c) never emitting two "different bytes" opcodes next to each other in the encoding of a single stream. 8. GENERIC PROPERTIES ===================== This section lists the formats of the defined property records that can appear in more than one context in an XCF file. PROP_END uint32 0 The type number for PROP_END is 0 uint32 0 PROP_END has no payload This pseudo-property marks the end of a property list in the XCF file. PROP_OPACITY (essential) uint32 6 The type number for PROP_OPACITY is 6 uint32 4 Four bytes of payload uint32 x The opacity on a scale from 0 (fully transparent) to 255 (fully opaque) Appears in the property list of layers and channels, and records the overall opacity setting for the layer/channel. Note that though the Gimp's user interface displays the opacity as a percentage, it is actually stored on a 0-255 scale. Also note that this opacity value is stored as a 32-bit quantity even though it has been scaled to fit exactly in a single byte. When reading old XCF files that lack this property, full opacity should be assumed. PROP_VISIBLE (essential) uint32 8 The type number for PROP_VISIBLE is 8 uint32 4 Four bytes of payload uint32 b 1 if the layer/channel is visible; 0 if not Appears in the property list for layers and channels. When reading old XCF files that lack this property, assume that layers are visible and channels are not. PROP_LINKED (editing state) uint32 9 The type number for PROP_LINKED is 9 uint32 4 Four bytes of payload uint32 b 1 if the layer is linked; 0 if not Appears in the property list for layers and channels. "Linked" is a UI property: if the Move tool is used to move a linked layer, all other linked layers will be moved in parallel. PROP_TATTOO (internal Gimp state) uint32 20 The type number for PROP_TATTOO is 20 uint32 4 Four bytes of payload uint32 4 The tattoo, a nonzero unsigned integer Appears in the property list of layers, channels, and entire images. A tattoo is a unique and permanent identifier attached to a drawable (or vector element) that can be used to uniquely identify a drawable within an image even between sessions. The PROP_TATTOO property of the entire image stores a "high-water mark" for the entire image; it is greater than OR EQUAL TO any tattoo for an element of the image. It allows efficient generation of new unused tattoo values and also prevents old tattoo numbers from being reused within a single image, lest plug-ins that use the tattoos for bookkeeping get confused. An XCF file must either provide tattoo values for all its elements or for none of them. The Gimp will invent fresh tattoos when it reads in tattoo-less elements, but it does not attempt to keep them different from ones specified explicitly in the file. PROP_PARASITES uint32 21 The type number for PROP_PARASITES is 21 uint32 length Total length of the following payload data ,---------------- Repeat for each parasite: | string name Name of the parasite | uint32 flags ????? | uint32 n Size of the payload data | byte[n] ... Parasite-specific payload `-- This property can appear in any property list. It can contain multiple "parasites" which are named extension records. See "Basic concepts and datatypes" above. The number of parasites is not directly encoded; the list ends when the total length of the parasite data read equals the property payload length. The Gimp's XCF reader checks that the combined size of all parasites in the property precisely equals the length word, so it is safe for a reader to use the length word to skip the property without parsing the individual parasites. The parasite contents may be binary, but often a textual encoding is chosen in order to free the creator/consumer code of having to deal with byte ordering. There can only be one parasite with a given name attached to each element of the image. Some versions of the Gimp will erroneously write some parasites twice in the same property list; XCF readers must be prepared to gracefully ignore all but the last instance of a parasite name in each property list. 9. COMPOSITING AND LAYER MODES =============================== This section describes the "flattening" process that the Gimp applies when a multi-layer image is displayed in the editor or exported to other image file formats. It is present for reference only; an XCF consumer may well elect to do something different with pixel data from the layers than flattening them. Most XCF consumers will need to react to the layer mode property of each layer; such a reaction must be informed by knowledge of how the different layer modes affect the flattening process. In some applications it might be acceptable for an XCF consumer to refuse processing images with layer modes other than "Normal", but such an application will probably not be considered fully XCF capable by its users. In this section we consider primary color (or grayscale) intensities and alpha values for pixels to be real numbers ranging from 0.0 to 1.0. This makes many of the formulas easier; the reader is asked to keep in mind that a (linear) conversion from the integral 0..255 scale of the actual XCF scale is implied whenever data from the XCF file is mentioned. Any practical implementation of the computations specified below may suffer rounding errors; this specification do not detail how these are to be handled. The Gimp itself rounds values to an integral number of 255ths at many points in the computation. This specification does not specify exactly which these points are, and authors of XCF renderers that aim to reproduce the effects of the Gimp's flattening down to the least significant bits are referred to studying its source code. In the description below, the variable letter "a" is used for alpha values. The variable letter "r", "g", "b" are used for primary intensities, "y" is used for grayscale intensities, and "i" is used for colormap indexed. The letter "c" is used for the complete color information for a pixel; depending on the color mode of the image that is either an (r,g,b) triple, a y, or a c. The flattening process works independently for each pixel in the canvas area. The description of some layer modes in the Gimp manual may give the impression that they involve filters that let pixels influence neighbor pixels, but that is not true. This description does not attempt to preserve the color information for completely transparent pixels in a layer. If an application uses this color information, it should document explicitly how it behaves when transparent pixels from several different layers cover the same point of the canvas. Flattening overview ------------------- This is how to compute the flattened result for a single pixel position (in theory, that is - efficient implementations will of course follow this procedure or an equivalent one for many pixels in parallel): 1. Initialize a "working pixel" (a1,c1) to be completely transparent (that is, a1=0.0 and the value of c1 is immaterial). 2. Do the following for each visible layer in the image, starting with the one that comes LAST in the master layer list: 3. Ignore the layer if it is the floating selection, or if it does not overlap the pixel position in question. 4. Let (a2,c2) be the pixel data for the layer at the pixel position in question. If the layer does not have an alpha channel, then set a1 to 1.0. 5. If the layer is the one that the floating selection is attached to and the floating selection overlaps the pixel position in question, then do the following: 6. Let (a3,c3) be the pixel data for the floating selection layer at the pixel position in question. 7. If there is a selection channel, then let x be its value at the pixel position in question, and set a3 to a3*x. 8. Let m3 be the layer mode of the floating selection. 9. Set (a2,c2) to COMPOSITE(a2,c2, a3,c3,m3). The COMPOSITE function is defined below. 10. If the layer has a layer mask and it is enabled, then let x be the value of the layer mask at the pixel position in question, and set a2 to a2*x. 11. Let m2 be the layer mode of the layer. 12. If the layer is the bottommost visible layer (i.e., if it is the last visible layer in the master layer list) and m2 is not "Normal" or "Dissolve", then set m2 to "Normal". 13. Set (a1,c1) to COMPOSITE(a1,c1, a2,c2,m2). The COMPOSITE function is defined below. 14. If the flattened image is to be shown against a background of color c0, then actually visible pixel is COMPOSITE(1.0,c0, a1,c1,Normal). Note that unless all layers have mode Normal, it would give the wrong result to start by initializing (a1,c1) to (1.0,c0). Helper functions ---------------- The following auxiliary functions are used in the definition of COMPOSITE below: MIN(x1,...,xn) is the least value of x1...xn MAX(x1,...,xn) is the largest value of x1..xn MID(x1,...,xn) = (MIN(x1,...,xn)+MAX(x1,...,xn))/2 CLAMP(x) = if x < 0 then 0.0 else if x > 1 then 1.0 else x BLEND(a1,x1, a2,x2) = (1-k)*x1 + k*x2 where k = a2/(1-(1-a1)*(1-a2)) The layer modes --------------- This and the following sections define the COMPOSITE function used in the general flattening algorithm. "Normal" mode for RGB or grayscale images is the usual mode of compositeing in computer graphics with alpha channels. In indexed mode, the alpha value gets rounded to either 1.0 or 0.0 such that no colors outside the colormap get produced: COMPOSITE(a1,y1, a2,y2,Normal) = ( 1-(1-a1)*(1-a2), BLEND(a1,y1, a2,y2) ) COMPOSITE(a1,r1,g1,b1, a2,r2,g2,b2,Normal) = ( 1-(1-a1)*(1-a2), BLEND(a1,r1, a2,r2), BLEND(a1,g1, a2,g2), BLEND(a1,b1, a2,b2) ) COMPOSITE(a1,i1, a2,i2,Normal) = if a2 > 0.5 then (1.0,i2) else (a1,i1) "Dissolve" mode corresponds to randomly dithering the alpha channel to the set {0.0, 1.0}: COMPOSITE(a1,c1, a2,c2,Dissolve) = chose pseudo-randomly between (1.0,c2) with probability a2 (a1,c1) with probability 1-a2 These two modes are the only ones that make sense for all of the RGB, grayscale and indexed color models. In the indexed color model, all layer modes except Dissolve are treated as Normal. Most layer modes belong to the following group, which makes sense for RGB and grayscale images, but not for indexed ones: COMPOSITE(a1,y2, a2,y2,m) = ( a1, BLEND(a1,y1, MIN(a1,a2),f(y1,y2, m)) ) COMPOSITE(a1,r1,g1,b1, a2,r2,g2,b2,m) = ( a1, BLEND(a1,r2, MIN(a1,a2),f(r1,r2, m)), BLEND(a1,g1, MIN(a1,a2),f(g1,g2, m)), BLEND(a1,b1, MIN(a1,a2),f(b1,g2, m)) ) when 3 <= m <= 10 or 15 <= m <= 21. The following table defines f(x1,x2,m): Multiply: f(x1,x2, 3) = x1*x2 Screen: f(x1,x2, 4) = 1-(1-x1)*(1-x2) Overlay: f(x1,x2, 5) = (1-x2)*x1^2 + x2*(1-(1-x2)^2) Difference: f(x1,x2, 6) = if x1 > x2 then x1-x2 else x2-x1 Addition: f(x1,x2, 7) = CLAMP(x1+x2) Subtract: f(x1,x2, 8) = CLAMP(x1-x2) Darken Only: f(x1,x2, 9) = MIN(x1,x2) Lighten Only: f(x1,x2, 10) = MAX(x1,x2) Divide: f(x1,x2, 15) = CLAMP(x1/x2) Dodge: f(x1,x2, 16) = CLAMP(x1/(1-x2)) Burn f(x1,x2, 17) = CLAMP(1-(1-x1)/x2) Hard Light: f(x1,x2, 18) = if x2 < 0.5 then 2*x1*x2 else 1-2*(1-x1)(1-x2) Soft Light: f(x1,x2, 19) = (1-x2)*x1^2 + x2*(1-(1-x2)^2) Grain Extract: f(x1,x2, 20) = CLAMP(x1-x2+0.5) Grain Merge: f(x1,x2, 21) = CLAMP(x1+x2-0.5) Note that the "Overlay" and "Soft Light" modes have identical effects. In the "Divide", "Dodge", and "Burn" modes, division by zero should be considered to produce a number so large that CLAMP(x/0) = 1 unless x=0, in which case CLAMP(0/0) = 0. The remaining four layer modes only make sense in the RGB color model; if the color mode of the image is grayscale or indexed they will be interpreted as Normal. COMPOSITE(a1,r1,g1,b1, a2,r2,g2,b2,m) = ( a1, BLEND(a1,r2, MIN(a1,a2),r0), BLEND(a1,g1, MIN(a1,a2),g0), BLEND(a1,b1, MIN(a1,a2),b0) ) where (r0,g0,b0) = h(r1,g1,b1, r2,g2,b2, m) when 11 <= m <= 14. For defining these modes, we say that (r,g,b) has the _hue_ of (r',g',b') if r' = g' = b' and r >= g = b or there exist p and q such that p>=0 and r=p*r'+q and b=p*b'+q and g=p*g'+q (r,g,b) has the _value_ of (r',g',b') if MAX(r,g,b) = MAX(r',g',b') (r,g,b) has the _HSV-saturation_ of (r',g',b') if r' = g' = b' = 0 and r = g = b or MIN(r,g,b) = MAX(r,g,b)*MIN(r',g',b')/MAX(r',g',b') (r,g,b) has the _luminosity_ of (r',g',b') if MID(r,g,b) = MID(r',g',b') (r,g,b) has the _HSL-saturation_ of (r',g',b') if r' = g' = b' and r = g = b or MAX(r,g,b)-MIN(r,g,b) = MIN(MID(r,g,b),1-MID(r,g,b)) * (MAX(r',g',b')-MIN(r',g',b'))/MIN(MID(r',g',b'),1-MID(r',g',b')) Mode 11: Hue (H of HSV) h(r1,g1,b1, r2,g2,b2, 11) is if r2=g2=b2 then (r1,g1,b1) unchanged otherwise: the color that has the hue of (r1,g2,b2) the value of (r1,g1,b1) the HSV-saturation of (r1,g1,b1) Mode 12: Saturation (S of HSV) h(r1,g1,b1, r2,g2,b2, 12) is the color that has the hue of (r1,g1,b1) the value of (r1,g1,b1) the HSV-saturation of (r2,g2,b2) Mode 13: Color (H and S of HSL) h(r1,g1,b1, r2,g2,b2, 13) is the color that has the hue of (r2,g2,b2) the luminosity of (r1,g1,b1) the HSL-saturation of (r2,g2,b2) Mode 14: Value (V of HSV) h(r1,g1,b1, r2,g2,b2, 14) is the color that has the hue of (r1,g1,b1) the value of (r2,g2,b2) the HSV-saturation of (r1,g1,b1) xcftools-1.0.7/xcftools.h0000644000175000017500000001307211223357027015241 0ustar makholmmakholm/* Generic functions and macros for reading XCF files * * This file was written by Henning Makholm * It is hereby in the public domain. * * In jurisdictions that do not recognise grants of copyright to the * public domain: I, the author and (presumably, in those jurisdictions) * copyright holder, hereby permit anyone to distribute and use this code, * in source code or binary form, with or without modifications. This * permission is world-wide and irrevocable. * * Of course, I will not be liable for any errors or shortcomings in the * code, since I give it away without asking any compenstations. * * If you use or distribute this code, I would appreciate receiving * credit for writing it, in whichever way you find proper and customary. */ #ifndef XCFTOOLS_H #define XCFTOOLS_H #include "config.h" #include "enums.h" #include #include #if defined(HAVE_GETTEXT) && defined(ENABLE_NLS) #include #define _(s) gettext(s) void nls_init(void); #else #define _(s) (s) #define nls_init() (void)0 #endif #define N_(s) (s) #if HAVE_INTTYPES_H # define __STDC_FORMAT_MACROS # include #else /* These legacy fall-backs will probably work on every system * that does not supply a inttypes.h ... */ typedef unsigned char uint8_t ; typedef unsigned long int uint32_t, uintptr_t ; typedef signed char int8_t ; typedef signed long int int32_t ; # define PRIX32 "lX" # define PRIu32 "lu" # define PRIXPTR "lX" #endif #if __GNUC__ # define __ATTRIBUTE__ __attribute__ #else # define __ATTRIBUTE__(x) #endif #if HAVE_NETINET_IN_H # include #elif HAVE_ARPA_INET_H # include #elif WORDS_BIGENDIAN # define ntohl(x) (x) #else static inline uint32_t ntohl(uint32_t a) { return (a << 24) + ((a & 0xFF00) << 8) + ((a >> 8) & 0xFF00) + (a >> 24) ; } #endif #ifndef HAVE_STRCASECMP #define strcasecmp strcmp #endif /* Read a single word value from the XCF file */ /* Use + instead of | because that allows LEA instructions */ #define xcfBE(a) ( ((uint32_t)xcf_file[(a) ] << 24) + \ ((uint32_t)xcf_file[(a)+1] << 16) + \ ((uint32_t)xcf_file[(a)+2] << 8 ) + \ ((uint32_t)xcf_file[(a)+3] ) ) #define xcfLE(a) ( ((uint32_t)xcf_file[(a) ] ) + \ ((uint32_t)xcf_file[(a)+1] << 8 ) + \ ((uint32_t)xcf_file[(a)+2] << 16) + \ ((uint32_t)xcf_file[(a)+3] << 24) ) #if CAN_DO_UNALIGNED_WORDS # define xcfL(a) ntohl(*(uint32_t *)(xcf_file + (a))) #else # define xcfL(a) ((a) & 3 ? xcfBE(a) : ntohl(*(uint32_t *)(xcf_file + (a)))) #endif /* ****************************************************************** */ /* The following are exported from am OS-specific source file; * io-unix.c on unixish systems. */ void read_or_mmap_xcf(const char* filename, const char *unzipper); void free_or_close_xcf(void); /* ****************************************************************** */ /* utils.c */ extern const char *progname ; extern int verboseFlag ; void *xcfmalloc(size_t size); void xcffree(void*); void FatalGeneric(int status,const char* format,...) __ATTRIBUTE__((format(printf,2,3),noreturn)) ; void FatalUnexpected(const char* format,...) __ATTRIBUTE__((format(printf,1,2),noreturn)) ; void FatalBadXCF(const char* format,...) __ATTRIBUTE__((format(printf,1,2),noreturn)) ; void FatalUnsupportedXCF(const char* format,...) __ATTRIBUTE__((format(printf,1,2),noreturn)) ; void gpl_blurb(void) __ATTRIBUTE__((noreturn)); FILE* openout(const char*); void closeout(FILE *,const char*); struct rect { int t, b, l, r ; }; #define isSubrect(A,B) \ ((A).l >= (B).l && (A).r <= (B).r && (A).t >= (B).t && (A).b <= (B).b) #define disjointRects(A,B) \ ((A).l >= (B).r || (A).r <= (B).l || (A).t >= (B).b || (A).b <= (B).t) /* ****************************************************************** */ /* xcf-general.c */ extern uint8_t *xcf_file ; extern size_t xcf_length ; extern int use_utf8 ; void xcfCheckspace(uint32_t addr,int spaceafter, const char *format,...) __ATTRIBUTE__((format(printf,3,4))); uint32_t xcfOffset(uint32_t addr,int spaceafter); int xcfNextprop(uint32_t *master,uint32_t *body); const char* xcfString(uint32_t ptr,uint32_t *after); /* These are hardcoded in the Gimp sources: */ #define TILE_SHIFT 6 #define TILE_WIDTH (1<> TILE_SHIFT) struct tileDimensions { struct rect c ; unsigned width, height ; unsigned tilesx, tilesy ; unsigned ntiles ; }; /* computeDimensions assumes that width, height, c.l, and c.t are set */ void computeDimensions(struct tileDimensions *); struct xcfTiles { const struct _convertParams *params ; uint32_t *tileptrs ; uint32_t hierarchy ; }; struct xcfLayer { struct tileDimensions dim ; const char *name ; GimpLayerModeEffects mode ; GimpImageType type ; unsigned int opacity ; int isVisible, hasMask ; uint32_t propptr ; struct xcfTiles pixels ; struct xcfTiles mask ; }; extern struct xcfImage { int version ; unsigned width, height ; GimpImageBaseType type ; XcfCompressionType compression ; int numLayers ; struct xcfLayer *layers ; uint32_t colormapptr ; } XCF ; void getBasicXcfInfo(void); #endif /* XCFTOOLS_H */ xcftools-1.0.7/xcftools.spec0000600000175000017500000000643011223376405015735 0ustar makholmmakholm# This script was contributed by Marcus Alanen. # # Henning Makholm, the xcftools author, have not had occasion to test # it, so use at your own peril. In particular, note that there is a # hard-coded version number just a few lines in. I make no promises # that I'll remember to update it for versions 1.0.7 - caveat emptor! ############################################################################# # Variables ############################################################################# %define name xcftools %define version 1.0.7 %define release 1 ############################################################################# # Preamble. This contains general information about the package. ############################################################################# Summary : xcftools Name : %{name} Version : %{version} Release : %{release} License : Public Domain Group : Development/Tools Source : xcftools-%version.tar.gz Packager : Marcus Alanen BuildRoot : %{_tmppath}/%{name}-buildroot Prefix : /usr Requires : glibc ############################################################################# # A description of the project ############################################################################# %description xcftools is a set of tools for extracting information from GIMP's xcf files. ############################################################################# # Preparations for the install. We don't need to do anything special here, # so we let the %setup-macro take care of creating a directory and unpacking # the sources. ############################################################################# %prep rm -rf $RPM_BUILD_ROOT %setup %patch0 -p1 ############################################################################# # Build the project ############################################################################# %build ./configure --prefix=/usr && make DESTDIR=$RPM_BUILD_ROOT ############################################################################# # Install the software ############################################################################# %install mkdir $RPM_BUILD_ROOT/usr || true mkdir $RPM_BUILD_ROOT/usr/share || true mkdir $RPM_BUILD_ROOT/usr/share/man || true mkdir $RPM_BUILD_ROOT/usr/share/man/man1/ || true make install DESTDIR=$RPM_BUILD_ROOT cd $RPM_BUILD_ROOT function getfiles() { # Change /usr/bin to ./usr/bin dir=$(echo $1 | sed -e 's|.|\.\/|;') find $dir -type d -print | sed 's,^\.,\%attr(-\,root\,root) \%dir ,' find $dir -type f -print | sed -e 's,^\.,\%attr(-\,root\,root) ,' \ -e '/\/etc\//s|^|%config|' \ -e '/\/config\//s|^|%config|' find $dir -type l -print | sed 's,^\.,\%attr(-\,root\,root) ,' } all=$RPM_BUILD_DIR/filelist.%{name} getfiles %{prefix} | grep -v /man/ > $all ############################################################################# # Files to be included in the package. ############################################################################# %files -f ../filelist.%{name} %defattr(-,root,root,0755) %{_mandir}/*/* ############################################################################# # Cleaning up stuff. ############################################################################# %clean make clean rm -rf $RPM_BUILD_ROOT xcftools-1.0.7/xcfview.100000644000175000017500000000342111223357026015040 0ustar makholmmakholm.\" Manual page for xcfview .\" This file was written by Henning Makholm .\" It is hereby in the public domain. .\" .\" In jurisdictions that do not recognise grants of copyright to the .\" public domain: I, the author and (presumably, in those jurisdictions) .\" copyright holder, hereby permit anyone to distribute and use this code, .\" in source code or binary form, with or without modifications. This .\" permission is world-wide and irrevocable. .\" .\" Of course, I will not be liable for any errors or shortcomings in the .\" code, since I give it away without asking any compenstations. .\" .\" If you use or distribute this code, I would appreciate receiving .\" credit for writing it, in whichever way you find proper and customary. .TH xcf2pnm 1 2006-02-12 "Xcftools" "" .SH NAME xcfview \- display GIMP xcf files .ds p xcfview .SH SYNOPSIS .B \*p [ .I options ] .I filename [ .I layer names ] .SH DESCRIPTION .B xcfview is a wrapper script that uses .BR xcf2png (1) or .BR xcf2pnm (1) (q.v.) to flatten an XCF image and then displays the flattened image using a PNG or PPM viewer found using the .BR mailcap (5) database. .SH OPTIONS Every command-line parameter to .B xcfview will be passed through to the underlying .B xcf2png or .B xcf2pnm command. Because it is not certain which converter will be used, the options given should be ones that make sense for both of these: .so xcfview.1i .SH EXIT STATUS The exit status is 0 in case of success. A nonzero exit status may either be that of the .BI xcf2 foo converter or that of the image viewer. .SH AUTHOR .B \*p was written by Henning Makholm . .P Parts of the script originate from the .BR run-mailcap (1) script by Brian White . .SH SEE ALSO .BR xcf2pnm (1), .BR xcf2png (1) xcftools-1.0.7/xcfview.in0000755000175000017500000001140010374217651015232 0ustar makholmmakholm#! /usr/bin/perl # # xcfview: a wrapper script that uses xcftools and an external viewer # to display XCF images. The external viewer is found through the # mailcap(5) database (q.v.). # # Written by Henning Makholm # Derived from the run-mailcap script by Brian White # # This script has been placed in the public domain (by both authors) # # We cannot use run-mailcap as-is because we can supply the flattened # image either as PNG and PPM, and we need to find the highest-ranked # viewer that can handle _one_ of these two. If everything else is equal # we try to prefer a PNG viewer such that transparency is handled properly. # use strict ; use warnings ; my $debug=0; my $quotedsemi = "\001" ; my $quotedprct = "\002" ; sub ReadMailcap { my($file) = @_; my $line = ""; return unless -r $file; print STDERR " - Reading mailcap file \"$file\"...\n" if $debug; open(MAILCAP,"<$file") || die "Error: could not read \"$file\" -- $!\n"; my @mailcap ; while () { chomp; s/^\s+// if $line; $line .= $_; next unless $line; if ($line =~ m/^\s*\#/) { $line = ""; next; } if ($line =~ m/\\$/) { $line =~ s/\\$//; } else { $line =~ s/\\;/$quotedsemi/go; $line =~ s/\\%/$quotedprct/go; push @mailcap,$line; $line = ""; } } close MAILCAP; return @mailcap ; } sub TempFile { my($match) = @_; my($cmd,$head,$tail,$tmpfile); ($head,$tail) = split(/%s/,$1,2) if ($match =~ m/nametemplate=(.*?)\s*($|;)/); $cmd = "tempfile --mode=600"; $cmd .= " --prefix $head" if $head; $cmd .= " --suffix $tail" if $tail; $tmpfile = `$cmd`; chomp($tmpfile); return $tmpfile; } my ($useline,$usecomm,$useprogram,$usetype,@converter) ; foreach my $mailcap ( $ENV{MAILCAPS} ? split(/:/,$ENV{MAILCAPS}) : ( "$ENV{HOME}/.mailcap", qw( /etc/mailcap /usr/local/etc/mailcap /usr/share/etc/mailcap /usr/etc/mailcap ) ) ) { foreach ( ReadMailcap($mailcap) ) { my ($type,$comm,$program,$rest) = m"^image/(png|x-portable-pixmap)\s*;\s*((\S*).*?)\s*($|;.*)" or next ; print STDERR " - checking $mailcap entry \"$_\"\n" if $debug; next if $rest =~ /;\s*needsterminal\s*($|;)/ ; next if $rest =~ /;\s*copiousoutput\s*($|;)/ ; if( $rest =~ m/;\s*test=(.*?)\s*($|;)/ ) { my $test; print STDERR " - running test: $1 " if $debug; $test = system "$1 >/dev/null 2>&1"; $test >>= 8; print STDERR " (result=$test=",($test!=0?"false":"true"),")\n" if $debug; next if $test ; } # If we get down here, we have a possible hit. if( $type ne 'png' ) { # Save for later; if there is a PNG definition for the same # command, we will prefer PNG ($useline,$usecomm,$useprogram,$usetype,@converter) = ($rest,$comm,$program,$type,"xcf2pnm","-c","'-#'") unless @converter ; next ; } else { # use this definition _unless_ we have already seen and saved # a definition for a _different_ program (which must have been PPM) ($useline,$usecomm,$useprogram,$usetype,@converter) = ($rest,$comm,$program,$type,"xcf2png") unless @converter && $comm eq $useprogram ; last ; } } last if @converter ; } unless( @converter ) { print STDERR "$0: No appropriate way to display PPM or PNG images in mailcap\n" ; exit 1 ; } sub finishcomm() { $usecomm =~ s!([^%])%t!$1$usetype!g; $usecomm =~ s!%{(.*?)}!$_="'$ENV{$1}'";s/\`//g;$_!ge; $usecomm =~ s!\\(.)!$1!g; $usecomm =~ s!\'\'!\'!g; $usecomm =~ s!$quotedsemi!;!go; $usecomm =~ s!$quotedprct!%!go; } # quote arguments for converter for( @ARGV ) { next if m{^[-a-z0-9,.:/@%^+=_]+$}i ; s/'/\\'/ ; $_ = "'$_'" ; } if( $usecomm =~ /[^%]%s/ ) { my $tempfile = TempFile($useline); $usecomm =~ s/([^%])%s/$1$tempfile/g ; finishcomm() ; my $retcode = 0 ; for my $comm ( join(" ",@converter,"-o",$tempfile,@ARGV), $usecomm ) { print STDERR " - executing: $comm\n" if $debug ; my $res = system $comm; $res = int($res/256); if ($res != 0) { print STDERR "Warning: program returned non-zero exit code \#$res\n"; $retcode = $res; last ; } } unlink $tempfile ; exit $retcode ; } else { finishcomm() ; exec( join(@converter," ",@ARGV) . " | " . $usecomm ) or print STDERR "Couldn't exec pipeline: $!\n" ; exit 1 ; }