pfstools-1.8.5/0002755000175000017500000000000011652214413010400 500000000000000pfstools-1.8.5/acinclude.m40000644000175000017500000002065711537623122012524 00000000000000# ************************************************************* # This is a heavily changed version of the http://autoqt.sf.net # The changes hopefully allow for compilation under Debian # ************************************************************* # Check for Qt compiler flags, linker flags, and binary packages AC_DEFUN([pfs_CHECK_QT], [ AC_MSG_CHECKING([QTDIR]) # Check that QTDIR is defined or that --with-qtdir given if test x"$QTDIR" = x ; then QT_SEARCH="/usr/lib/qt31 /usr/local/qt31 /usr/lib/qt3 /usr/local/qt3 /usr/lib/qt2 /usr/local/qt2 /usr/lib/qt /usr/local/qt /usr/share/qt3 /usr/share/qt /sw/lib/qt3mac" for i in $QT_SEARCH; do if test -f $i/include/qglobal.h -a x$QTDIR = x; then QTDIR=$i; fi done fi if test x"$QTDIR" != x || test x"$QTINCLUDE" != x; then AC_MSG_RESULT([$QTDIR]) if test x"$QTLIBS" = x && test x"$QTDIR" != x; then QT_LIBS="-L$QTDIR/lib -lqt-mt" elif test x"$QTLIBS" != x; then QT_LIBS="-L$QTLIBS -lqt-mt" else QT_LIBS="-lqt-mt" fi if test x"$QTINCLUDE" = x; then QTINCLUDE="$QTDIR/include" fi if test "$enable_debug"="yes"; then QT_CFLAGS="-DQT_SHARED -DQT_THREAD_SUPPORT -D_REENTRANT -I$QTINCLUDE" else QT_CFLAGS="-DQT_SHARED -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -D_REENTRANT -I$QTINCLUDE" fi # Try to compile and link with QT TMP_LIBS="$LIBS" TMP_CXXFLAGS="$CXXFLAGS" LIBS="$QT_LIBS $LIBS" CXXFLAGS="$QT_CFLAGS $QT_CXXFLAGS $CXXFLAGS" AC_TRY_LINK( [#include ], [int argc = 0; char** argv = NULL; QApplication app(argc, argv);], [QT_SUPPORT="yes"], [AC_MSG_RESULT([Unable to compile or link with QT. QT support disabled.]); QT_SUPPORT="no"]) LIBS=$TMP_LIBS CXXFLAGS=$TMP_CXXFLAGS else AC_MSG_RESULT([No QTDIR found. QT support disabled.]) QT_SUPPORT="no" fi ]) AC_DEFUN([gw_CHECK_QT], [ AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PATH_X]) #Result of check for qt QT_SUPPORT="yes" AC_MSG_CHECKING([QTDIR]) AC_ARG_WITH([qtdir], [ --with-qtdir=DIR Qt installation directory [default=$QTDIR]], QTDIR=$withval) # Check that QTDIR is defined or that --with-qtdir given if test x"$QTDIR" = x ; then QT_SEARCH="/usr/lib/qt31 /usr/local/qt31 /usr/lib/qt3 /usr/local/qt3 /usr/lib/qt2 /usr/local/qt2 /usr/lib/qt /usr/local/qt /usr/share/qt3 /usr/share/qt" for i in $QT_SEARCH; do if test -f $i/include/qglobal.h -a x$QTDIR = x; then QTDIR=$i; fi done fi if test x"$QTDIR" = x ; then AC_MSG_WARN([*** QTDIR must be defined, or --with-qtdir option given]) QT_SUPPORT="no" fi AC_MSG_RESULT([$QTDIR]) # Change backslashes in QTDIR to forward slashes to prevent escaping # problems later on in the build process, mainly for Cygwin build # environment using MSVC as the compiler # TODO: Use sed instead of perl QTDIR=`echo $QTDIR | perl -p -e 's/\\\\/\\//g'` # Figure out which version of Qt we are using AC_MSG_CHECKING([Qt version]) QT_VER=`grep 'define.*QT_VERSION_STR\W' $QTDIR/include/qglobal.h | perl -p -e 's/\D//g'` case "${QT_VER}" in 2*) QT_MAJOR="2" ;; 3*) QT_MAJOR="3" ;; *) AC_MSG_WARN([*** Don't know how to handle this Qt major version]) QT_SUPPORT="no" ;; esac AC_MSG_RESULT([$QT_VER ($QT_MAJOR)]) # Check that moc is in path AC_CHECK_PROG(MOC, moc, moc) if test x$MOC = x ; then AC_MSG_WARN([*** moc must be in path]) QT_SUPORT="no" fi # uic is the Qt user interface compiler AC_CHECK_PROG(UIC, uic, uic) if test x$UIC = x ; then AC_MSG_WARN([*** uic is not in path]) fi # qembed is the Qt data embedding utility. # It is located in $QTDIR/tools/qembed, and must be compiled and installed # manually, we'll let it slide if it isn't present AC_CHECK_PROG(QEMBED, qembed, qembed) # Calculate Qt include path QT_CXXFLAGS="-I$QTDIR/include" QT_IS_EMBEDDED="no" # On unix, figure out if we're doing a static or dynamic link case "${host}" in *-cygwin) AC_DEFINE_UNQUOTED(WIN32, "", Defined if on Win32 platform) if test -f "$QTDIR/lib/qt.lib" ; then QT_LIB="qt.lib" QT_IS_STATIC="yes" QT_IS_MT="no" elif test -f "$QTDIR/lib/qt-mt.lib" ; then QT_LIB="qt-mt.lib" QT_IS_STATIC="yes" QT_IS_MT="yes" elif test -f "$QTDIR/lib/qt$QT_VER.lib" ; then QT_LIB="qt$QT_VER.lib" QT_IS_STATIC="no" QT_IS_MT="no" elif test -f "$QTDIR/lib/qt-mt$QT_VER.lib" ; then QT_LIB="qt-mt$QT_VER.lib" QT_IS_STATIC="no" QT_IS_MT="yes" fi ;; *) QT_IS_STATIC=`ls $QTDIR/lib/*.a 2> /dev/null` if test "x$QT_IS_STATIC" = x; then QT_IS_STATIC="no" else QT_IS_STATIC="yes" QTLIBDIR=$QTDIR fi if test x$QT_IS_STATIC = xno ; then QT_IS_DYNAMIC=`ls $QTDIR/lib/*.so /usr/lib/libqt*.so* 2> /dev/null` if test "x$QT_IS_DYNAMIC" = x; then AC_MSG_WARN([*** Couldn't find any Qt libraries]) QT_SUPPORT="no" fi if test -z `ls $QTDIR/lib/*.so`; then QTLIBDIR=/usr else QTLIBDIR=$QTDIR fi fi if test "x`ls $QTLIBDIR/lib/libqt-mt.{so,a} 2> /dev/null`" != x ; then QT_LIB="-lqt-mt" QT_IS_MT="yes" elif test "x`ls $QTLIBDIR/lib/libqt.{so,a} 2> /dev/null`" != x ; then QT_LIB="-lqt" QT_IS_MT="no" elif test "x`ls $QTLIBDIR/lib/libqte-mt.{so,a} 2> /dev/null`" != x ; then QT_LIB="-lqte-mt" QT_IS_MT="yes" QT_IS_EMBEDDED="yes" elif test "x`ls $QTLIBDIR/lib/libqte.{so,a} 2> /dev/null`" != x ; then QT_LIB="-lqte" QT_IS_MT="no" QT_IS_EMBEDDED="yes" fi ;; esac AC_MSG_CHECKING([if Qt is static]) AC_MSG_RESULT([$QT_IS_STATIC]) AC_MSG_CHECKING([if Qt is multithreaded]) AC_MSG_RESULT([$QT_IS_MT]) AC_MSG_CHECKING([if Qt is embedded]) AC_MSG_RESULT([$QT_IS_EMBEDDED]) QT_GUILINK="" QASSISTANTCLIENT_LDADD="-lqassistantclient" case "${host}" in *irix*) QT_LIBS="$QT_LIB" if test $QT_IS_STATIC = yes ; then QT_LIBS="$QT_LIBS -L$x_libraries -lXext -lX11 -lm -lSM -lICE" fi ;; *linux*) QT_LIBS="$QT_LIB" if test $QT_IS_STATIC = yes && test $QT_IS_EMBEDDED = no; then QT_LIBS="$QT_LIBS -L$x_libraries -lXext -lX11 -lm -lSM -lICE -ldl -ljpeg" fi ;; *osf*) # Digital Unix (aka DGUX aka Tru64) QT_LIBS="$QT_LIB" if test $QT_IS_STATIC = yes ; then QT_LIBS="$QT_LIBS -L$x_libraries -lXext -lX11 -lm -lSM -lICE" fi ;; *solaris*) QT_LIBS="$QT_LIB" if test $QT_IS_STATIC = yes ; then QT_LIBS="$QT_LIBS -L$x_libraries -lXext -lX11 -lm -lSM -lICE -lresolv -lsocket -lnsl" fi ;; *win*) # linker flag to suppress console when linking a GUI app on Win32 QT_GUILINK="/subsystem:windows" if test $QT_MAJOR = "3" ; then if test $QT_IS_MT = yes ; then QT_LIBS="/nodefaultlib:libcmt" else QT_LIBS="/nodefaultlib:libc" fi fi if test $QT_IS_STATIC = yes ; then QT_LIBS="$QT_LIBS $QT_LIB kernel32.lib user32.lib gdi32.lib comdlg32.lib ole32.lib shell32.lib imm32.lib advapi32.lib wsock32.lib winspool.lib winmm.lib netapi32.lib" if test $QT_MAJOR = "3" ; then QT_LIBS="$QT_LIBS qtmain.lib" fi else QT_LIBS="$QT_LIBS $QT_LIB" if test $QT_MAJOR = "3" ; then QT_CXXFLAGS="$QT_CXXFLAGS -DQT_DLL" QT_LIBS="$QT_LIBS qtmain.lib qui.lib user32.lib netapi32.lib" fi fi QASSISTANTCLIENT_LDADD="qassistantclient.lib" ;; esac if test x"$QT_IS_EMBEDDED" = "xyes" ; then QT_CXXFLAGS="-DQWS $QT_CXXFLAGS" fi if test x"$QT_IS_MT" = "xyes" ; then QT_CXXFLAGS="$QT_CXXFLAGS -D_REENTRANT -DQT_THREAD_SUPPORT" fi QT_LDADD="-L$QTDIR/lib $QT_LIBS" if test x$QT_IS_STATIC = xyes ; then OLDLIBS="$LIBS" LIBS="$QT_LDADD" AC_CHECK_LIB(Xft, XftFontOpen, QT_LDADD="$QT_LDADD -lXft") LIBS="$LIBS" fi AC_MSG_CHECKING([QT_CXXFLAGS]) AC_MSG_RESULT([$QT_CXXFLAGS]) AC_MSG_CHECKING([QT_LDADD]) AC_MSG_RESULT([$QT_LDADD]) AC_SUBST(QT_CXXFLAGS) AC_SUBST(QT_LDADD) AC_SUBST(QT_GUILINK) AC_SUBST(QASSISTANTCLIENT_LDADD) ]) pfstools-1.8.5/README.OSX0000644000175000017500000000641711542346015011660 00000000000000How to install pfstools under Mac OS X 10.5.7 ==================================================== This is a step-by-step instruction how to install pfstools on Max OS X. 1. Install XCode Tools (v.3.1.2) https://developer.apple.com/mac/ You may need to register to download XCode Tools. You may also use g++ from the Fink package, but this has not been tested yet. 2. Install missing libraries These are unix-based libraries that have been ported to Mac. We tested two sources of such libraries: MacPorts and Fink. Fink is faster to install (all packages are pre-compiled) and we provides more libraries that actually compile with pfstools, so it is a recommended option as for now. ------ Fink ------- 2a.1. Install Fink package manager (v.0.9.0) http://www.finkproject.org/ 2a.2. Then using FinkCommander or command line tools install the following packages: libtool14 (1.5.22-1000) pkgconfig (0.21-1) automake1.9 (1.9.6-3) autoconf (2.60-4) imagemagick-nox-dev (6.2.8-1007) openexr-nox-dev (1.2.2-34) libtiff (3.8.2-1002) qt4-mac (4.6.3-2) lcms (1.15-2) libjpeg (6b-17) libpng3 (1:1.2.29-1) netpbm10 (10.24-3) libxml2 Note: The library version numbers in the parenthesis indicate only the versions we tested. Newer versions (and in most cases older) should work as well. Note: When building with imagemagick-nox-dev you may encounter compilation error: missing /usr/X11/lib/libfreetype.la. A quick (and not very elegant) fix is to remove this library from the dependency_libs line in /sw/lib/libMagick.la /sw/libMagick++.la and /sw/lib/libWand.la 2a.3. Add to ~/.profile the line: export LIBRARY_PATH=/sw/lib:$LIBRARY_PATH ------ MacPorts ------- 2b.1. Using "port" command install the following packages: openexr qt3-mac ImageMagick netpbm 2b.2. Add to ~/.profile the line: export LIBRARY_PATH=/opt/local/lib:$LIBRARY_PATH ------------------------ 3. Go to the pfstools directory and execute: ./configure make sudo make install Note for Mac OS X Snow Leopard and later (10.6.1) you most probably need to ensure that pfstools is compiled with the 32-bit compiler. The easiest way to do it is to add CXXFLAGS to the configure script: ./configure CXXFLAGS=-m32 After successful compilation all pfstools libraries and executebles will be copied to /usr/local/.. directories. 4. Add pfsview application bundle to the shell path. In the .profile file add a line: export PATH=/Applications/pfsview.app/Contents/MacOS/:$PATH Note: pfsview is currently unusable as a stand-alone application (cannot be run from Finder) and must be executed from a command line or using the 'pv' script. You may also want to add $(DESTDIR)/bin to the path if you installed pfstools in non-standard location (by passing --prefix to the configure script). ========== Comments from other users: ------- You can't use the Fink package of OpenEXR. You have to either install it yourself or use the ports version. The ports version doesn't install a pkgconfig file though, so if you add that, you can get it. ------- I had problem with finitef function in pfsview_widget.cpp I ended up replace finitef with isfinite both should be defined in math.h but what did work was to add to makefile -D_GLIBCPP_USE_C99 as described on: http://cosmocoffee.info/viewtopic.php?t=176 and it solved the problem ------- pfstools-1.8.5/config.guess0000755000175000017500000012763711371534605012664 00000000000000#! /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, 2009, 2010 # Free Software Foundation, Inc. timestamp='2009-12-30' # 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 (context # diff format) to and include a 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. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD 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, 2009, 2010 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 -q __ELF__ 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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} 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 -q __LP64__ 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*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) 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 ;; 8664:Windows_NT:*) echo x86_64-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 ;; 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 -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} 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 ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" 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:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-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 ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-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: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.[02]*:*) 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.[02]*:*) 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 i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; 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: pfstools-1.8.5/install-sh0000755000175000017500000003253711500011217012321 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # UTC # 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. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # 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 $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pfstools-1.8.5/aclocal.m40000644000175000017500000011645011652214374012173 00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, [m4_warning([this file was generated for autoconf 2.67. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # 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. # # 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. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # 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. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # 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. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # 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. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # 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. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # 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. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # 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. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # 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. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # 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. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # 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. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # 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. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # 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. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # 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. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # 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. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # 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. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # 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. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # 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. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([acinclude.m4]) pfstools-1.8.5/config.h.in0000664000175000017500000000530111652214412012341 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define as 1 when compiling in debug mode */ #undef DEBUG /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define this if you have the GDAL library */ #undef HAVE_LIBGDAL /* ImageMagick library used for reading/writing images. */ #undef HAVE_LIBIMAGEMAGICK /* Define this if you have the libjpeghdr libraries */ #undef HAVE_LIBJPEGHDR /* Define this if you have the libppm libraries */ #undef HAVE_LIBNETPPM /* OpenEXR libraries, optional, used in io routines. */ #undef HAVE_LIBOPENEXR /* OpenGL libraries are required. */ #undef HAVE_LIBOPENGL /* QT libraries, optional, used in pfsview. */ #undef HAVE_LIBQT /* Define this if you have the libtiff libraries */ #undef HAVE_LIBTIFF /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_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 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 to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Disable assertion checks */ #undef NDEBUG /* Name of package */ #undef PACKAGE /* 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 home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Directory where data files are located. */ #undef PKG_DATADIR /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Windows compilation. */ #undef WIN32 /* Output stream for debug messages. */ #ifdef DEBUG #define DEBUG_STR cerr #else #define DEBUG_STR if(1); else cerr #endif /* Output stream for verbose messages */ #define VERBOSE_STR if(verbose) std::cerr << PROG_NAME << ": " /* On some systems iostream, string etc are in 'std' namespace */ using namespace std; pfstools-1.8.5/NEWS0000664000175000017500000000021310571575734011032 00000000000000This file is not maintained, but required by automake. Visit pfstools web page to find the latest news: http://pfstools.sourceforge.net/ pfstools-1.8.5/ChangeLog0000644000175000017500000002621111652213771012100 00000000000000pfstools 1.8.5 <21.10.2011> * fixed: pfsintiff normalizes 16-bit files to 0-1 range to maintain compatibility with pfscalibration and the rest of pfstools * fixed: when reading TIFF files, pfsin falls back to pfsinimgmagick if pfsintiff not found * fixed: pfsout tries first pfsoutimgmagic when writing TIFF images pfstools 1.8.4 <20.05.2011> * fixed: SegFault from pfsview when switching channels * fixed: quoted arguments in pfsin/pfsout/pfsv/pfsindcraw/pfsinmulti (fixes bug 3279342) pfstools 1.8.3 <23.03.2011> * fixed: pfsdisplayfunction properly interpolates display LUT * fixed: bug #3080304 - configure uses non-portable test(1) syntax * fixed: bug #1766263 - pfsinhdrgen fails silently on pfsin failure. - partially * fixed: pfsview the entire code converted from qt3 to qt4 (fixes bug #3127946) * fixed: "Fit window to content" works again in pfsview * added: window icon in pfsview * added: improved image file saving in pfsview pfstools 1.8.2 <18.06.2010> * fixed: compiler incompatibility issue in pfspanoramic.cpp * fixed: bug #2953028 "gcc 4.4.1 const cast error" * fixed: spaces were improperly escaped in pfsin / pfsout (thanks to Timo) * added: new improved hdrhtml template from hdrlabs.com (thanks to Christian) pfstools 1.8.1 <01.06.2009> * fixed: hdrhtml JavaScript code for XHTML pages * fixed: hdrhtml '+' and '-' keys work now the same as in pfsview (were swapped) * fixed: added missing includes * fixed: matlab/pfs_shell.m removes matlab paths from LD_LIBRARY_PATH * fixed: uninitialized color clipping mode in pfsview (tracker 2790026) * fixed: pfsview, "preserve bri & hue" color clipping handles lower limit correcly now * fixed: pfsinppm does not report EOF error when reading from stdin * fixed: compilation on Mac OS X 10.5.7 with Fink * added: make install creates application bundle for pfsview pfstools 1.8 <23.02.2009> * added: pfsouthdrhtml for generating web pages with an HDR viewer * added: matlab functions: pfs_write_image, pfs_read_image * added: matlab interface can now save multi-channel (>3) images * fixed: cleaned up and improved matlab documentation, added Content.m * fixed: problem with inheriting matlab's LD_LIBRARY_PATH when running pfs commands * fixed: improved search for NETPBM header files in the configure script * fixed: pfssize keeps aspect ratio when resizing many images with --min/max/x/y pfstools 1.7.0 <22.10.2008> * added: pfsingdal - reader of geospatial data formats using GDAL (Geospatial Data Abstraction Library) (thanks to Martin Lambers) * added: pfsdisplayfunction command for conversion between display luminance and pixel values * added: pfsinimgmagick and pfsinppm add a WHITE_Y tag to frames (needed by some tone mapping operators) * pfsview: automatically switch to linear mapping and LDR range for display-referred images * fixed: pfsview correctly shows pixel position x=0 * added: inverse gamma correction in pfsgamma * added: pfsgamma sets propertly LUMINANCE tag and displays warnings on improper input images * added: configure script displays information and commands that will not be compiled because of missing dependencies * fixed: some warning messages due to stricter syntax in g++ 4.2.1 * bugfix: removed depreciated matlab command pfsread - caused compilation problems under Windows * added: pfs_test_shell for quick testing for common matlab setup problems * added: pfsview shows in the status bar current exposure for the dynamic range window (relative to Y=1) * added: configure should automatically find the include dir for netpbm * fixed: handling of >8bit files is unified for all commands; new tag ('BITDEPTH') is used to store information about the bit-depth recission; pfsoutimagemagic and pfsoutppm support a new option --bit-depth * fixed: removed --linear option from pfsoutppm, pfsoutimagemagick, pfsouttiff and changed default behavior, which was too confusing and error-prone. Images will never be gamma-corrected (transformed to the sRGB) unless it is explicitly enforced with a new option '--srgb'. pfstools 1.6.5 <06.05.2008> * fixed: matlab interface cleanup: pfsfclose.cpp pfsfgets.cpp pfsfputs.cpp pfspopen2.cpp pfssend.cpp moved to another project as they do not belong to pfstools * fixed: matlab Makefile automatically detects correct mex-file extension (thanks to Neil Alldrin) * fixed: matlab - pfs_shell under unix adds bash as the default shell for executing pfs commands * fixed: matlab interface operates now on single precission floats, thus making most operations faster (thanks to Neil Alldrin) * added: matlab -> pfsview function shows now matrix names * Debian patch ported: changes required to switch to octave3.0 (thanks to Thomas Weber) * Debian patch ported: Fixed the usage of dcraw(1)'s -m command line option (thanks to Sebastian Harl) pfstools 1.6.4 <01.01.2007> * fixed: buffer overflow vulnerability in rgbeio.cpp (thanks to Stefan) * fixed: compilation issues with gcc-4.3 - missing includes (thanks to Sebastian Harl for the Debian patch) pfstools 1.6.3 <05.12.2007> * fixed: pfsinopenexr can now read files that has data window < display window * fixed: pfs library can handle channel names up to 32 characters (was 8) * updated: pfs specification - max string lengths and format of custom channel names * security fix: fscanf in rgbeio.cpp (thanks to Stefan and Ludwig) * bugfix: pfsview - segfault when switching channels * fixed: pfsview - color readout in the status line refreshed when new channel or frame loaded * added: matlab/pfs_write_luminance.m * bugfix: rgbeio - header read properly when the first byte is 0x20 (thanks to Axel) * bugfix: rgbeio - fix misinterpreted rle-compresses lines (thanks to Axel) pfstools 1.6.2 <04.07.2007> * matlab: pfsview can now display 2D cell arrays * pfs library: quite serious bug in sRGB transforms fixed * added: check for GLUT library (unix only) * added: man page for pfsglview pfstools 1.6.1 <24.04.2007> * added: pfsin accepts all extensions supported by dcraw (thanks to L. David Baron) * fixed: tiff logluv reader - segfault bug and wrong colorspace conversions (thanks to Giuseppe Rota) * updated: some documentation files * fixed: matlab/pfs_transform_colorspace accepts 3D/2D matrix as both input and output * fixed: matlab/pfs_put or _get handles tags in pfs stream * fixed: pfsview under different shell than bash pfstools 1.6 <01.03.2007> * added: preliminary support for matlab (see README.matlab) * added: --disable-octave option * fixed: configure.ac honors CXXFLAGS instead of overwriting them with -O3 * added: pfsin/outimgmagic now handles alpha channel * added: pfsindcraw checks for dcraw and reports errors if not found * fixed: pfsintiff could fail with large images * added: example project files for MS VC++ (CVS only) * added: pfsglview (viewer, which does not require qt) * added: support for exposure adjustment in radiance HDR files * fixed: compiler compatibity issues in pfspanoramic.cpp pfstools 1.5 <16.08.2006> * All octave IO API updated: named pipes replaced with popen, which is less problematic under cygwin * bugfix: color conversion matrixes (XYZ->RGB) lead to inaccuracies for 16bit images. matrix values have been adjusted to maximize precision. (2006-08-08) * added: initial support for alpha channels in Tiff files (thanks to Pablo d'Angelo, http://hugin.sf.net). images can be loaded, but alpha channels are ignored. * added: disable-* options to configure script to disable build of certain features * added: pfsview - displayed image can be copied to clipboard * added: pfscut - now it is possible to specify u-l, b-r coordinates * updated: pfs specification pfstools 1.4 * added: initial support for camera RAW files via dcraw wrapper pfsindcraw 2006-03-17 Grzegorz Krawczyk * pfsview: now possible to choose color space for the pixel under the cursor * pfsview: added new color clipping method: Keep brightness and hue * improved QT autoconf check, added --with-qtinclude, --with-qtlibs * fixed typos in documentation and pfs spec (thanks to Adam Buchbinder) * pfs.cpp and colorspace.cpp compile under MS Visual C++ * pfsopen.m can accept file descriptor of an opened file now pfstools 1.3 * added: pfsinimgmagick/pfsoutimgmagick to read and write images using ImageMagick++ library * added: pfsinjpeghdr / pfsoutjpeghdr for JPEG-HDR format * added: pfsstat - hdr image statistic * bug fixed: loading of images in pfsview should be 30-60% faster * configure.ac - improved QT config script ** use pkgconfig to set up QT flags, if possible ** verify MOC ** simpler script to set up QT flags * libpfs uses map instead of hash_map - for better compatibility * added: pfsview - better handling of negative values ** mark negative with red now works ** negative values in color images are now recognized * pv renamed to pfsv to avoid the conflict with the pipe viewer 'pv' pfstools 1.2.1 <19.07.2005> * bug fixed: seg fault in pfsoutexr and pfsabsolute * bug fixed: pfsin uses bash as a shell pfstools 1.2 <15.06.2005> pfs library: extended api: * pckconfig file renamed from pfs-1.0.pc to pfs.pc * iterator over all tags in TagContainer * new iterator over all channels in Frame * FrameFileIterator can be used together with getopt and getopt_long pfsinexr, pfsoutexr: can read/write all channels and all tags/attributes added: pfsinpfm, pfsoutpfm - to read/write PFM HDR images pfsin*,pfsout*: now use 'LUMINANCE' tag to keep the track of the type of intensities stored in the pfs stream: relative (linear) or display (gamma corrected) pfssize: new arguments --minx, --miny, --maxx and --maxy pfs library: sRGB color space scaled to keep channel values within 0-1 range (to be compliant with the other parts of pfstools) Added new filters * pfscut - crops images * pfscat - concatenates images or animations * pfspad - add border to images or animations * pfsrotate - rotates images by 90deg * pfsflip - flips images * pfsabsolute - calibrates images to absolute units (Y in cd/m^2) Support for LUMINANCE tag (recognized by some pfsin* and pfsout* commands) pfstools 1.1 <29.01.2005> pfsview: minimum and maximum of the luminance window can be dragged (previously only entire window could be dragged) 10.01.2004 added: support for gcc 3.4.2 (thanks to Fabio Mierlo) 15.12.2004 added: pfspanoramic 05.12.2004 pfsview: optimized mapping function for faster display and better responsiveness pfsview: added visualization of negative values pfsview: added option to switch off NaN and Inf marking pfssize: fixed problem with boundary conditions pfsview: shortcuts added 24.11.2004 added: octave script: pfssize transformColorSpace does graph traverse to find conversion between any color spaces 18.11.2004 pfsview: can save visible window as .png image 17.11.2004 pfsextractchannels: added Updated man pages 02.11.2004 pfsview: it is now possible to move back and forth between the frames pfsin*: all those commands now add a tag FILE_NAME 27.10.2004 Rewritten and much improved pfssize. Enlarging of images is now possible. pfssize rewrites tags to the resized stream. pfstools-1.8.5/TODO0000664000175000017500000000030210571575734011022 00000000000000Bugs and todo items: * Improve matlab interface * Better color handling in the pfs library * Performance improvements: * Shared memory instead of pipes * "Lazy" color space transform pfstools-1.8.5/config.sub0000755000175000017500000010344511371534605012316 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 # Free Software Foundation, Inc. timestamp='2010-01-22' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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. # Please send patches to . Submit a context # diff and a properly formatted GNU 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. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # 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, 2009, 2010 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 | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -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 \ | rx \ | 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 \ | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # 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-* | microblaze-* \ | 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-* | rx-* \ | 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-* | tilegx-* \ | tron-* \ | ubicom32-* \ | 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 ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; 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 ;; microblaze) basic_machine=microblaze-xilinx ;; 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 ;; # This must be matched before tile*. tilegx*) basic_machine=tilegx-unknown os=-linux-gnu ;; 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. -auroraux) os=-auroraux ;; -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* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -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* | -es*) # 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 ;; -nacl*) ;; -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 ;; -cnk*|-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: pfstools-1.8.5/doc/0002755000175000017500000000000011652214417011151 500000000000000pfstools-1.8.5/doc/faq.txt0000664000175000017500000001610510613375043012403 00000000000000This is a list of frequency asked questions for the pfstools package. ---------------------------------------------------------------------- General questions ---------------------------------------------------------------------- 1. What are pfstools? pfstools package is a set of command line (and one GUI) programs for reading, writing, manipulating and viewing high-dynamic range (HDR) images and video frames. All programs in the package exchange data using unix pipes and a simple generic HDR image format (pfs). The concept of the pfstools is similar to netpbm package for low-dynamic range images. 2. What are the major features? - pfstools try to handle properly colorimetry of images, not neglecting physical meaning of color data. - The filters can work on a single images as well as on a sequences of frames. - It includes a set of loaders and savers for most of the popular HDR file formats. There is no need to write one's own loader for Radiance's RGBE or link with several libraries to load OpenEXR images. - Because of its modular architecture, owning to use of UNIX pipes, the suite of tools is quite flexible. For example, to load an HDR image, tone map it, apply gamma correction and save it as a jpeg file, one can issue: pfsin memorial.hdr | pfstmo_drago03 | pfsgamma 2.2 | pfsout memorial.jpeg It's very easy to exchange one piece of processing to another. - pfs files can contain not only color information but also additional channels, like depth map, flow field or alpha channel. - Integration with GNU Octave and matlab. It includes functions to read and write HDR frame from/to Octave/matlab. This way, it's easy to write one's one tone mapping operator using a high level math language. - It includes a convenient viewer for HDR images and any data that fits into pfs files. 3. What is the license? Everything is under some form of the GNU license. The library for reading and writing of PFS streams is under The GNU Lesser General Public License (LGPL), all software, including programs for reading, writing and modifying images, are under The GNU General Public License (GPL), the specification of the PFS format is under GNU Free Documentation License (FDL). For more information on GNU licensing, see http://www.gnu.org/licenses/ . 4. Are there any alternative tools/formats for processing HDR images and video sequences? We will try to keep the updated list on the pfstools web page: http://www.mpi-sb.mpg.de/resources/pfstools/ 5. What platforms does it work on? pfstools is developed under Debian (sarge) on Intel based platform. It has also been successfully compiled under cygwin on Windows and Mac OS X (except pfsview, which requires qt).It should compile on any platform which is supported by automake/autoconf and which has required libraries (see dependencies in README file). ---------------------------------------------------------------------- PFS file format ---------------------------------------------------------------------- 1. Why pfs format does not employ any compression? pfs stream is not meant to be stored on a disk or transferred via slow networks. pfs stream should be passed from one application to another, which should involve only memory-to-memory copy and minimum amount of processing. pfs format was designed to be easy to read and at the same time generic enough to hold variety of data. 2. Why are the data stored in XYZ color space? It would be so much easier to have RGB data. For low-dynamic range data that can be displayed on the screen, RGB space may in fact seem to be more appropriate (however it does not have any physical meaning unless additional information is included). However, the human eye can see color gamut much broader than the one that can be shown on an LCD or CRT display. If such broad range of colors were to be described as RGB channels, negative values of color would have to be used. Negative values in color channels would complicate image processing much more than simple linear transform needed to convert between XYZ and any kind of RGB space. Additionally, XYZ color space (illuminant D65, normal observer) has precisely defined spectral responses and thus can accurately describe colorimetric data. ---------------------------------------------------------------------- PFS library ---------------------------------------------------------------------- 1. What functionality does the PFS library offer? * Reading and writing of pfs stream (a sequence of frames) * Color space transformations * Parsing of command line options 2. What is the programming language of the API? C++. 3. Do I have to use pfs library to read / write pfs files? No, you are welcome to write your own reader, writer, or library that can handle pfs files, as long as it complies with the specification of the pfs format. See ./doc/pfs_format_spec.pdf 4. Why does the pfs library use C style FILE instead of C++ iostreams? pfs stream is mixed text and binary format. Unfortunately C++ iostreams do not handle binary data very well. We also found many compatibilty problems on failed attempt to use iostream in the pfs library. Besides, there seems to be more libraries that use FILEs from stdio than iostreams. You can use __gnu_css::stdio_filebuf to integrate your iostream based program with the pfs library. 5. Where can I find documentation for PFS library API? Each header file of the library has Doxygen documentation. See also pfstools web page: http://www.mpi-sb.mpg.de/resources/pfstools/ 6. How to link my program with the PFS library? The best is to use autoconf + pkgconfig and include the following lines in autoconf.ac file: AC_MSG_CHECKING([for pfs library]) PKG_CHECK_MODULES(PFS, pfs >= 1.2,, AC_MSG_ERROR(pfstools package required. Download it from http://pfstools.sourceforge.net/)) AC_SUBST(PFS_CFLAGS) AC_SUBST(PFS_LIBS) than in Makefile.am: LIBS += $(PFS_LIBS) INCLUDES += $(PFS_CFLAGS) ---------------------------------------------------------------------- PFS tools ---------------------------------------------------------------------- 1. Where can I find documentation for programs in the pfstools package? Each program has its manual page with documentation (man ). 2. What is typical usage pattern for pfstools programs? To read an HDR image, tone map it, and then save to low-dynamic range file (.png), you can issue: pfsin memorial.hdr | pfstmo_drago03 | pfsout memorial.png 3. Can pfstools programs work with multiple frames? Yes. See man page for pfsinppm. Example: pfsinexr frame%04d.exr --frames 0:100 | pfstmo_drago03 | pfsoutppm tm_frame%04d.ppm To tone map frames frame0000.exr, frame0001.exr, ... frame0100.exr and save resulting frames in tm_frame0000.ppm, ..., tm_frame0100.ppm 4. What is the naming convention for pfstools programs? All programs in pfstools package are named to facilitate a -completion in a UNIX shell. Therefore the names of programs always start with 'pfs' prefix. Then follows a name of the program or name of the program group followed by the actual name of the program. Some example of groups are: pfsin* for reading files, pfsout* for writing files, and pfstmo* for tone mapping. pfstools-1.8.5/doc/pfs_format_spec.pdf0000644000175000017500000026346611557010256014754 00000000000000%PDF-1.4 %ÐÔÅØ 3 0 obj << /Length 1338 /Filter /FlateDecode >> stream xÚ•VMsÛ6½çWhr 8S2ÄI5''©Ó´q›ÖJ/M0 IS¤ ’väÉï.”íDM§q±Ø]<,ôrõäù9/"ÏŠBèÅj½àJeK¥…Y%–‹U³ø“]î“TÌÖîcÎUmF×wI*sÁú5}Ç­%ãýù%ç® .ÎΓ²b½ß™1ùkõÓ‚çUÆ¥^¤VÊKZá&Áú~8æ™Æh€W¦LªB ¼<Ó¥X¤…Ì´,(õlï] IP@æß¡Q2‘sNé‚/x™ ®¦§\çYY”‹·WiªÀ“”s¡ÙÛ.‘œ¾‡"œ5SöyDÁ³¥Ö„À™˜óW[7@J!X©°|=íl—€1’»îid\MŒ·àkmC£a²¿lsÛ\ÈØfpì×±F¶Ñ¹MÎ’T+Û X¡JÅnãsãÑÖ,ì|ŽÚ® ¨À3ö1Œ½·Ç àÚ?ºzj'ÿÖm¶isèÌÎÕäñ¦ÛظÂÎl쀔WìjO¡sˆFqB£ MíГpkûÉ]ì0¶]?m¶5Ƙ!˜¦i¶Ï´4nÌhpi¥Yë®q‹–r»Îb¥ÙS|ïé»ëg¡êc#u…n¡á…,Ø*© Ò–’µÖxìÑzBAä§Û±¤Öò¡û0¬MŒ¾"Pô4ØõÔÒ„érÞn±Þ¼¡_à ý‚qƒÌ‘Ö#û*‹¯}¿;Õlhç0ºnQRÒñI¼G%áÜmtú´EV`%|ÏqçÞþ š"ïÛM Ô솆¿MvÀ† ­å¿’v¤kÕ·9ð®Æª×‰Ö Pè²€ë ü "]üŽtEÁlï•\²aÛOmC÷­Ç¨ YÔîþc‘ž²ÜnßÚã ?—n'RÝïöp‰µí­tõ4 ,ƒ°[ïFë³SŠ•å2[JI•E”ªWýµêàáÆ%RŒÿ)ÌAꄜHÌu^Ã',"Ï%Y¿›u¸>saˆPnº&Ñ‚Þø;»éý~ö†ØŽ"xw¸&Á/3­—;ô>°ÂïÜ@’¯ò2¿WCÖ ûŽß:n ©r*ˆið°‡Ñ;KQí96í§qëC,µWùZªkz ìÔ…Spô©Áð™ÈâGso~ù@F¼ÑýúÑŠ°¿(ð8÷ÎÕ¶,ظÃù5Äiž‰¸–?Å7ÓEMPbÉZ3´`ÞP—cpì§+¸¾ÛÐX‰”² ½ Å :g—ýzĨp¤ÆßÇ€ÖA_Â^€³ÊÙ­·”Ôõö¶KOIçM¢Aм3G•ª*vI÷UGÁÃ%ÐMhâû™¾ê1#n‹‚ìÚO#%ÊÈL˜˜+¼Œbñ­d`&g(å"gg4ø† :Ñò ]šGéÒd1œ yƒØà·«Û‰^Ò0¢Ð˜Ãh‘Æ-ìÑíÿ4 3îÏý¯¿¤®ùꑊ(#­ž~SZÅÊYZ¶ñÍ.5ûÑá›zˆÙ⡸@!þÅ=PÐÌò”YIXþme9‰ ×hŽŠšs1+QÉ>“ëWÐ+G9ŒRúª”–Âÿ–*¯þ*\•sB¥²Q-rMî#0°?ÓøÄYŽFϾ†¤'CGà›À7žÃÿ™¶? d8fiÁã ™f­À2Ì;ù*šÍ jÊYCÃ+:?<] ÿl¦¹m.ÞÑ<þØiPFÐOÛ’F"ƒ~Á;šqUÍ‹aæÉ«'ÿÑø V endstream endobj 2 0 obj << /Type /Page /Contents 3 0 R /Resources 1 0 R /MediaBox [0 0 595.276 841.89] /Parent 8 0 R >> endobj 1 0 obj << /Font << /F16 4 0 R /F17 5 0 R /F21 6 0 R /F22 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 12 0 obj << /Length 1566 /Filter /FlateDecode >> stream xÚµWKoÜ6¾ûW,r‰¨d‘¢Û¢‡$¶[qÓÖÛSÓ­¥wÙHÔ–ÒÆN‘ßyP»r Í!0`g†Ô<¿áŠE b!R™T•Zä«,I3±¨Û³ÎҤʲ*#•)MBU|V©‘y~ÝŠÅEwöü‰pq<ÞO®~¹>;¿åBˆd•çr±¾‡kŠ$Wå"/ª¤Ùb½Yü]ÙíÁ›eœÉ"ß/c•åÑ Ü–QݹÚ쇃nXüÇÍ&6zЬÒvË– *Ý=ó‡ÝRD†éý}÷ƒ7º]þµ~}~%åÔ¨X‰”Õ"ÎT"Óœz—Š’•?ó@$R‰ä¾KóTà8\Ìûý¸‚ øÄ¬+ûh6Á¼¥¬¢{²½ë™‡· ;íÞ÷¬>t¼n½qàß{Ñ•s>°]±T‰JW_åB6(ut¡ . otAª]@Ö‹Í]@R³ ±ýÀ =®Þlg<+æQ¾‚ñs„ §[Óÿ€¾‹HÓ…`&X 0_lYݵ­qKŒUˆGçx…hX¼­ïÿW8ª¯ ‡‚o¬…CVIZ`8JäÉSFAþ‰—1£ ­;(¸æÐºøÜwhöCÜBˆrýÝyVúƒHÜA½Û5>2›ó§)õ3¡ áFÃ7p9‡ž EœŽP2otéO¼ÜbÑVÐZ"ª-|Aav¢~´ÀlѳCËÊÐuÖmYÞà·v=ïµÛ°Ò‡ežGº±³eB(µæ­,òÚmMŸÀA!ŽÅüþ°þ`±Fp!“píÞn2ã‚f}臮 4Úz¬L`Pe2ù`!'3={|–0HÍ÷k iòƒuß QÅ mjDЉª¾ˆ6!:ÈÑÌqæ!Xª·L<y½ŒE´†Ì\\þºþùy°fE™H‘+ÈU"‹r•¬2ÅÖ@Ÿ!óè'ãŒ'|.óèvð‡z@4Ÿq&e¤­Â"ħ°¾Ý£шÙÐ%$±Ö4%ãa{G3˜ÉIáX £›kÐÖõÌéœa%j?`´œ{yN¸/5+‘h.ïhŽ\A¥ #ÐÖñ:ì°îMÍ áíÍ^{ ¶¢¤æŽ»€pçÎÇ0¾¥†ª¢Kjà”—XâB5†i °[C¸Áfº³à‹   Ð;ヲ ×ñÊÁGŠƒ?âðΧƒ;!}(Ê<_==u¤àóÓ§îù…€Ôô… Ê’|Seø ð&ÆÌ!m{ÖîwVǃã­u,-H ˆ^Uá£mŒçŒœÖE¦`XÚºã)§É}%NéF)Uõ@5¤Ð³€:°b8)'X<ªˆv–a/³®núšn;Ý\ÎÜ,ðæ¹y|ÂJìœRäÑK,aè¡ôhï²§OñU‰Ðý¨Ö¾çôÔV4I@ à)žDÅxpM©lâÚœ}:TÏÓxãOÄÀY¯ñöoG½íOP‹3áÇÉBþ^[O¯™ºœà[UaMH„-²uÂtl ÓŒ<¤EЇâ¿$omX×Ë ry7Äú+ l/>»†´«Çâß„›Ý—‹”Ûà‘‚p²ó-lŠaíáY$äÇ œóÔvFo(¤t¼i¸{p6̽³´uÚ;6@òz´$Ü6û<êï}ÛLCeú`Ã+FüSøÆÔ˜ä„DÑÙåúì?4¦ÿ£ endstream endobj 11 0 obj << /Type /Page /Contents 12 0 R /Resources 10 0 R /MediaBox [0 0 595.276 841.89] /Parent 8 0 R >> endobj 9 0 obj << /Type /XObject /Subtype /Image /Width 466 /Height 144 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 4775 /Filter /FlateDecode /DecodeParms << /Colors 3 /Columns 466 /BitsPerComponent 8 /Predictor 10 >> >> stream xœíÝ{TWâðžY¤ å("?á(êQé–X_˜âG_øÖÚ.Z_? µžÚªˆX]=J[×¢žÝStÑÚJw«¬-¢@ÔR`yÔjA¶ü„À¨< „ÌïÔÉs23É|?‡?`rçÎÍÜ™¯7w2Ž@Ix@Éùw)°ÝóC/p ÷»ÃzÙBˆ2åV˜•@Äv ôƒ^àëî5Ké+eÃvø± À(Ä.€ñ‘€óØ-¢‘¼bGõBcckrrú•+7jk›”Jâî>rêT‘蹄„h&Û*T§’'s‘ì¹u«æÔ©,±¸¼®®Y¡è÷ðp ð‹Šš³í¦¥~´{ëVÍôék¯^­øÇ?öþö[ö;gbcþ´{÷)uüÊ<¥2oÐÛ-²r 'Ÿ{n}~þ­'¶¶µe64œÿàƒUEE’ØØ¿°Ý4°`ÃÇn\ÜÑÖÖÎ'¶øÙÙÙúùݼy©——;Ã`QMÍýääôñã=óóSBCŸ <=Ÿ‰]<ÙÞžòc"€NÃÇnii!$8xŠz‰‹‹Ó/¿œS¯Ôã\Õ˜Wõ§ú—ÌÌ¢Y³b#mmCUÅ::ºwìøÌß?ÚÑ1ÌÕõåÐÐw¯_ÿAs‹§OgïÚ•êë»ÊÞ~§çâ+öVVÖ©_UÕ|÷nýªUûÜÜ^qu}ùÍ7ÿÜÒÒÑÔÔööÛG<<:;G._žÔÞÞEÇ>±}‚AMhß±:»ÒšÄÇ/±µµINNïèèV/T*•‹ï Ãô¬„c›Wb(¯½ÈåýçÏ_Ss_.WTW׿óÎÑQ£\yG] $d!äìÙÜGÚ·‘˜¸Z(tHJJKK»¢šØ*+«Z¿>yîÜxU+^$„ìßÿùÇ¿)ýÕK—î¡áÍñí;VgWZ“)S|¶lYV[Û$m¹zµB&“·´t¤¦^*,ü©¯O¡g% Û¼êë0ü%µ”” W®Ü¸}ûÿáqìªNuõyŽ3ŸèàþÅ.Õ‰3ŸIèà1>Åî œùf…^ÞðèX6ú¼ÅMq4B/pþc?ž¬:Âôg=Y‘Áq–Õ_CG/p PÀ*>M2hžö„ú4ƧZ³B/ïñ)vUMb‘èà1þÅ®šžÃ.0+ôðcWç9 €O(ÿ+0Ä.£»ŒBì0 ± À(~ÜÌý å|¸ó½À)ÜïëÅ›ƒ-z ¬»Ô,¥;¬&…Ø`b€Qˆ]F!v…Ø`b€Qˆ]Fá.5nàÃýQèNá~wX/{ŸŸœxœ€ŽàL2ð•RɯÁ7!sy ±ËcH^6 vù ÉË" uù ±Ë{H^f!vÉË uy ± „$/³¹ü†Ø…ǼŒ@ì‚$/0Ôå=Ä.< É `fˆ]Ék>êb†‡ä0Ä.P@òÒC] „ vùéÕW_Õ«’—Ff®¾}ÈŽí£zzz222õ]A•¼£1Èà>KƒØå—yóæ¼’×t†ì@cú, &ø¥¢¢¢¢¢ÂàÕ0ÛÀ #û,bôƒä5>+ÀÓ» 7$¯¹0b ä0b „äÕ†º0Ä.É `Ä.É«†º@± ÆBòjÌj%> Ôü“†ï‡"_†eÂn¡¿€c»`2$ï Ø! &Àd˜m0bè€äUÃPtAìM¼úAìÐC]ÐbèÃó/2ôƒØZñ`L= È|O3 f uÁˆ]0F’×|OÓ·fd.“ `NæŸm0ß“ÇðL30Ä.˜™u_aÃP ‡Øó³îä0ba•É‹¡.± L±²äE悱»À +K^£ vYÖ‘¼ê‚ »À8ëH^cá¡>ÀšŒæ{òeÍê‚i»ÀKÌ/Kl3p &€=˜m^Bì«,+y1Ô: vm–•¼&CìXDòb¨ 4Aì7XDòб œÁåäÅPèƒØ.áfò"sÍ/((ˆí&0± ÃÍäå«yÂÛÎ;ëëë !B¡"•JwîÜÉv£Ì± ÜéäåØP·§§ç‹/¾0dzãX²aÉDâàà ‘H6nÜÂv£Ìw©Wq$ï8ÒŒÇÔ·,[͇Ž=zñâśŋoݺ•í™F»@M `ó‡õp¡CXÙÞ²³³333>lgg—œœœ™™™=z4ûnæ<9´Ræ±ÝˆØnÙ}÷Ýw©©©¾¾¾r¹|æÌ™'OžL]° ²5ƒív™“@„ØÖ>|Xõ‹\.'„L˜0áà½{¬¶ˆ ˜dö•••±Ýæ v ˆ<øìf…I0€öÄQÒ:|ëVÍ©SYbqy]]³BÑïááà5'&f![ëÃäQjÄ.@óUÜf:ˆN<øE@€ß‰[gÏžÖÑÑýÕW×öìIËÎ.¥1vx \8iA;ÆŽR£a’8§¦æ~rrúøñžùù)¡¡Ï …žžÏÄÆ. žloX<Ä.Ðïôéì]»R}}WÙÛ/ðô\¼bÅÞÊÊ:ÍÍÍí±±7n™P6o^|JÊ;»PõgÃãÇ3úûÞÿuW×êUìííÄâOäò«ê%RióÚµ‡ÆŽ]jo¿`̘%«W¬­mR¿ªš„­­mЉ9âí½ÜÑ1lÆŒubq¹fÍ’ê?µ7^³¤ÎMB::ºwìøÌß?ÚÑ1ÌÕõåÐÐw¯_ÿahm™™E³fÅ:;GêÜ·ª;&Ô¿€qL•½h9JƒØš}óÍ¿W­Úçää¸iSÔš5‘~~c½½ŸuqyI] ¥¥ƒ2v¬;U ÞÞÏVW×74<ðóKUFUÉÈ‘Îê%Ï<ãByðà!Õ*ª±¤öw:¯Ý M46¶B´Û¦¥¦@ìÍââŽööö œ4l77ç––Žîî^Í+fš,x¾ºº>7·LËwÅÜÝG65µuvv«Ò–ÒÙÙMñðp3kã âââÔÞÞ%•6Ošämzm@#ÓRSà’ÐL5L˜>}U¹s§BŠ‹ïPˆ_bkk“œœÞÑÑ­^¨T*/Þ-†©þŒˆ&„<™1P}´ˆ0à!ª3J¡è׿ñ™9s !$+«dÐòâb -õƒÑL?JMØš­Xñ"!dÿþÏ>üM¡è¯¨¨^ºtf„„hûÍ›SŠŠ~–Ë?þøË† i˜2ÅgË–eµµM"Ñ–«W+d2yKKGjê¥ÂŸúúª2~¸ÖÃÃmÛ¶?üP­Pô—•UmÛvÂÃÃmïÞµú75$d!äìÙ\õj7Hbâj¡Ð!))--íJ{{—L&/+«Z¿>yîÜx£ëZ˜~”šßdjF}“A&“'%¥}ù¥øþýVBˆ¯ï˜„„èuëk.-­Ü»÷tQÑϽ½ò)SÆÇÆ.Ú´é77çööKêzJJîœ9“}ýúM©´Y¡è÷ô<9*jÎÚµ¿OÀÕÕ5'%¥åä”¶´t¸» Ú·o§–æ Z(•6oÜøqAÁí¾>…««S{û%×þM†¡ %’Ú”” ùù·¤Ò_e2¹³ó¦Nõ‰Ž]¤e>® ßd0½21çQjT›Dˆ] Fë  ÅÝ»õ“'G‡…ýwnîÇ lÎb v¹„¶£T Â$°@( ‹Ž>PYY×ß?pçNm|ü§ö‰‰«ÙnÀæ;JñM`ÁÛÂÃßkjjsw9gδÂÂcAA“ÙnÀæ;J1ÉÔ¸úq/0É`•0ÉÀ0ŒvšÖÛsÀ8˜Û­¬ûãÇa’Á*a’€aˆ]F!v…Ø`b€Qˆ]F!v…Ø`b€Q¸9¨áæ`ÖñðôäÁQ‡›ƒA+ë¾M“ã"¶[Àë>êps0ûŒBì0 ± À(Ä.£»ŒBì0 ± À(Ü¥Ôxp¿×ñðôäÁQ÷ÿ÷Û endstream endobj 10 0 obj << /Font << /F17 5 0 R /F22 7 0 R /F21 6 0 R >> /XObject << /Im1 9 0 R >> /ProcSet [ /PDF /Text /ImageC ] >> endobj 15 0 obj << /Length 2271 /Filter /FlateDecode >> stream xÚÕËŽÛ8òÞ_!ì%2kD‰”¨½%&‹ ÓƒxÉ<l›nkG¯$O§ùø­ýŠäº©X,’õ®"_¯n~x«ÊH©¤2&‹VÛH¥Yb­ŽÊT%JÛhµ‰~‹Çi¨»ÇÅ2³Yü»ÊõâÕ¿~x›eç s›c£”WtB’Ÿ“˜¤*Ë@ñ9uLsu¾M´)Ñ?øÌº'ï6<è·øÏ¿ÉHQ&¥ÖßÏH7ÇF‘(Éb©³4þÐOžÏžvnbn¦g` úaßmF†žêiÇKÜ#ÊšD©£¸wÞü8ÇMV&•UŠ­ñ £en@˜BEK¥­ ¦xÚÕëEVÆpt^Uq=ò¿ë'l¼í›¦G‚'üø O?àà™)\Ǹ»ŸÞ3Àû¹Á­'?€> “Ç«…Šwaóýàÿ¢Ý:üN‚½åß¶Z vS8ëÝOÄ~zÉ÷öЭ§ºïÆ—@•eqSÿ¹ÈlìçTWš$5G#nǵë¶sºË‹¤RGSÊÆÛ¡oRñlåȽqüÖ*ã­†C2/¬p‚ Eðœë6<÷{ªô0Na'TçäG6”BžŠêR`ôå<+⇺sª–lÜäË^†ÐÎí÷Ęï˜hêފ‹økat욃yÎç˜<ï2îÝÚ 1¨Jˆß+öVìÜÄšYÄ!³ˆÐÞ¡'pd1ÍP²ke½8œŸFFLþ³,¢¸Y !xm·|ßp™XÎÊÞÈp»*+v†q’µ(Ñ ¦w[·°1+±¯ÙGáÔ‘ñàŸ¼À»càÀHlÝu¾—‡ôÆÁ)ÂÃz: ž7º¯2¢–ƒ6~\5;ÄÂy f½î.ìXÆ© Q£§èH$Ú,SF£›Ã.y•T¹æ]Ì.3ñ-31ÎE,ÉŠ4ÊKޤK‚P2¦cžè— °MÝún.\Ų5ÿsÕãøJõ„#øÐâWT2`èköÒ` ¤„èžKëž·s¤5¡ˆ^ö<íØä€‘PhÝ7df%Æ¢@‚Û£j&ÖYl§߸Ìï)1Iÿ^>€6÷Œãë|i9gØÖ±ñ–Zé3egEÎÊFài¨§ £¡ãq-Ç?p:ïÚË).@8ÉÑP?p%Â…ã‘ c·ÈNg5õ8]¹`qrÁ ’o ‰žk±®B4Ç*”]Ï7Ây*>€ížŠÓh=šG+c>§A‹Oó}6 ‘p”TpSHsLý§:®1VRÜ(%§æ¥>kN{<ýÌÜ ÊüäŽç»ñ¹„ûê$èSún3wPÀR•èe9ÖDSÔ[ÍrÒªÜAQn˜F†9›#$W1ú=ßN ­û¡“hÍC[[µè¼­–§Ä°8¸4,b¨DVéWn/i¤2Þø%Ük'ýœØALï?¾Æø’{<îv,õ™t‹@Åfè÷Cí&éé¹OÅø ]þg[0°oÜD×,ná—ÜTÑHIam¤“<—½škuRæY´<#“üžçyb¯/™+Êl4µ¡Èq½/¸á„ô&ÐwoGžá²ÁÈQâxÕY¯%%"ÕÆ#¦óãÕ6'ÿdW(è^jC[ðÏSc| úà¤L èu÷´bÞ™}zÈA¸ãò 2g€~Ðö„¨}äQ+ílçC?‹Ä$7ü™anßÝñŠ_>ýÊiB¤Û5U6þè}˜oÛÓ1â‰"x2/#³Î2Ší>}·ŒŸþÿd;þ:+#¼ªÎe¬* „*šYÃ9+i¤Ré³Á@^írBäyÐò;Hš~Ÿ€Ì÷…ßÜݯfŸ„L–äFŸ ‰µìM¸ŸØó¸Àô ,@¢°‰T1E ‘¨Z ÍiºÈ´¡OA„”ð5v÷à :käžÙ¤ÒÙe†à÷&¼¸JëUÿí7ó²g`\•]Êþêýý¯¾%{ªÎe7YüªÙï°}0×®Qá!Ådç™|dÌ4¸2¾nÀä3* ¾ëÃò‹&ÆR'‚ÜÖ^µ¾ÇÚA¹¼»z—óC:—g¨2N…Hžuiéænuóß4ÔñeV•)%èu{óÛi´I¨?I^Ùè‰HÛHê47ÑÇ›Ÿo^ã;oP0³cˆ Ø2RE>g.j‚ª¤*²‚+‚Æ'«<)Tx%8°é¹!†ûYÝî·#¼´":¸ŒÜÝòp¯C€êø-ȇï€Ýô|gyÈnƒ×NðšFV>Ô§r ŒÏp{m±|Ë=«95¡x!©òœB œ†9ç³ó\nx4Ðñ£‡¾@Þ%óœn¢øç²š‡+ `ø^ÅXtÇîoeF*¯ìÈÝTä3 hå¡ñ³éªR` -M¶ßσýÿz endstream endobj 14 0 obj << /Type /Page /Contents 15 0 R /Resources 13 0 R /MediaBox [0 0 595.276 841.89] /Parent 8 0 R >> endobj 13 0 obj << /Font << /F17 5 0 R /F22 7 0 R /F23 16 0 R /F21 6 0 R /F24 17 0 R /F7 18 0 R /F8 19 0 R >> /ProcSet [ /PDF /Text ] >> endobj 22 0 obj << /Length 1920 /Filter /FlateDecode >> stream xÚÍZËrÛ6Ýû+4Ý„š)< ,òœ6‹L[{Ú…í-Ñ3•PtœÔ?ß‹%Ò‚hQT§-‚ÐÅŹ ¿œ‘†L‘R|”H‚§£Éòìò¦ððÃ#¦ÕèÞ6]Ž˜’ (.Fçgœ}Ùµ!”hÙešsÄyâm¼¾8{þžÈ!H AG·`L!•ÐQ’„]LG—ÑÛ´JÇ×ÎÞ]4ú¥‚ÏÉiú¥B#Fy»ß‹1•Ñ÷Ïã.Ù®Œ%ˆžÊ@ÑǼÍÖ“2ÿ\å«b·{®4ÒìÜñãð‡añçHàd˜ ¦!ü¤/””9Ä9"š;(N †Ïß3Ú Å4Xµ­:hÖÛµSŽÞ¦4‡÷fU¬«´0„­Æ1£I”O3w›_a³²ƒ@FÖ \ÒmãéàŒÄ<¦ZMÐ óY8lîói5w Ì³|6w Y.ÐŽ$V‡pá(O *NÃÓ¼0ÁØöëÍ pÚ¨Ñûß'!d”SShf¬nÝ5K'¦vn¼„îbOkÇ=I‹"[8Ô¯°Àä!‚ (’&öY˜DL#¢PQu""bŒð.0oVw0;U˜‡#Ê’xxœ£{xØp´“~§@gC¿F§ï–Ÿ·Ü–ãXIàÛ˜D·®Ø@omjj^…(‘äÝTë=Š0M°H5 èÓPMo¤tÜ–é2»+¥3ǵ=š'n‹C¸v”§a®5=íæÚ ੹Öìt‡k‚`§m„Dl’h¶v7éz½²­&yZeÓÙîózy©æ™)HÿVüðÄì;Ô0™¤HH&áIߥç #9A\yF®J¿¶½$/nË1”,E¥ð­:¸×Û©•ØØÄh€-À Ò\ — é„wû!$’ŠuÈ}CÀP¸Ö9@•Î>ê:¥h¥Õ\ Åy­/]“ÇJ„xBê&`ë/«@‹»,$=¿ªäÔûÈáîÑžæp×U™3ÇK_Þ«E'}#FM/^ 5ZEyló/- t/Ʊ–** /¿Ž…ØÀøX~>§9Ì,"0·Z³L¿ù»EÃ9›û{Ð7….µµ-"“´2†?äœZÁê‘G±S>`+ëÖ¼þ†ç‚„lÐ|‚ÌŸÐÓhOâ‚Do²Mý:´®·/¦ob™ãMlAeHÓa«g l`zäuŽÀ Ö;©xCïÚ»A "9DžŽr2¬N-'ŸT¤ S R«c Iœes"sµ™)82¥æ6/ K-2R°ÑYø‹‘¥ tiîn\ FŸŠ¾c “)aÃøˆLŸˆ”#Fv yHÚ¨pz7sx9›wæí'ÁiCÍf·ÿQæîhmø81Ûòíé…l$ð`ü ’öv˜bŒb)Ó%Z \Ïù2øþ†§#%3ˆJï\(üâˆQŠ0fŠwßþÚAìÞýhyœï{hÙôý<Ÿé"ÿ'ƒ%1‘ÄgqPÈÌù¾)ØüÎ? 0sž¥Ó®WGC†ß ,®ƒÂO•BLêÓìਦHvô®¿3»œb£ÎM`ɰ÷ÂF¶±:QÎL¥„©œ¹û#]/?-nò"¾ÂD¬ìyf’V˜˜z»¼¼¿¾œ_ï_£N‚V--Wÿ\¸îãe >b ª£´,Sû¡ƒ»µ¹4ð!‹oòª% ¢ÞÙÁxÓÊoè’È} ±ÊÝne½_-ú-Ä&ó¼!ƒ/L¼-fvQºþØÃ$:7 slÏaéƒÕ›K½2·Â¬žw“ê®ôO H¦úóí:¶gýZk½^-¦®Åíjó2ÚM³bU6y••ébc€\ûÿ? eYL¤u;Íz<$‰Þ¼1|æúÉ×® ;1F1K`20-¿+òoqÕúÎ%fŒ»‚1æF ‹¼ðü©L'•Ù™*“l¼:ó›µð›oæ6_Sÿ/‚M"a†)¤ÿ°2ӧвõ ÿiF{ÂipoÞMù çN05"²ñËö–»—«Ù¬öò/¾Í¿bFª Å,ÿjÜÊ •c‰Ù>º« Ð/!•¡QÝó6ùÜH`ÝôИoZ7eê †º•EÚJw]®J_ãÏaï´oAã iåÛmƒaP:¤©ÔšÛÇê„›¡™Kê.¥Óㆎ¬è':¶eDÇÜš¡›«[nÊŒ¹oËŒ«³es" ì‰PÉ bž@3Û1 (-¿»¨{Ï[Q‡õ}™V†—ŠEöýgQ™3[ôQ*ŸÁçÓÖí›ÔÌ}1aÚCöž/½[¶bbheϾæk÷ -}o5ó`B®&/BÙ˜½Š u0̳µææ£pç›VW„ñéö ²Ÿ\ídµ¸[ÈÚ'Ú|ö’ ’ÒŸYóZÀÿª—ó¿ endstream endobj 21 0 obj << /Type /Page /Contents 22 0 R /Resources 20 0 R /MediaBox [0 0 595.276 841.89] /Parent 8 0 R >> endobj 20 0 obj << /Font << /F17 5 0 R /F21 6 0 R /F32 23 0 R /F22 7 0 R /F33 24 0 R /F23 16 0 R >> /ProcSet [ /PDF /Text ] >> endobj 27 0 obj << /Length 2521 /Filter /FlateDecode >> stream xÚ­]Û6ò}…ÑËÀZE}pIº)¶Èår—í!›¶\‰¶…Ê’KIÙ.z?þæK²¼r/÷DÎpÈÎ7ùúîêû·*])åçq®îv+„~–E«4P¾Š²Õ]¹úÅ»Ým¶Q”zmØ(Ï:†ªf׺£é«¶ADâõÓðRÑÖ­»†yšx¥=Á6"0MÉë¦> ãkËŽ±}˨‡Í6L=ËÈ®o-y¡’ãÍæ·»ŸVÁj«"ð,d±M Ackàæ ȶazÅgyÞ˜£Å™†së«fÏøÇ eÄ™áåºÝ„™÷ˆgZ·-Lgyù»?¿Û÷¨ Dv‡v¨KžOÂ#ÑÐÙÒ_5ªƒÐ{BíÀ@¨šßqªP•=# '”¶jãžÝ–|3Ü;JƒØIœÝWmeÕ)|;ž•-ÑÛ%™‡£mkêÃî,ò“ØÛ9‹N"2!ŽÝ°ßÛ®g ê™ ý„ˆÏÿþm¨/\/ ü$‰€-±;íÀlmÝýmß¶ûÚî];œ:¿KÒÞgn'0ÏÆ½eÕÕ;ôL¼ÈVëÔOÂðò>t"[G¥~ç—ËoЇA`•]zz¨Rïˆzè~°|69ΞœíDS¨i>€÷½¹½aħûÏ<ù5ˆƒP´‘¯R?‡Àà …Iî‡*^E¾Ö9 ôk ’¥»§@’®¶3Jðí¦4N˜·u_ЭvŠU摯”’;ÇC|ç(€¸;™Âú›m’¦ÞöÄWlJŠ\§ ‡I“/›8‚ÀlwÏÖßýü÷Û÷¯Þ¿¹¼Ùc‚Ó9ÓÒô‹±mùWàÕUc1Â8'ÕýëæÝ«M¦¼»Ûß0ö¯9aýÄôU¶Àì¦@5«Æ4…E½[k܉ÔÄH(gá¤0uõàèŒ Q˜W¯?þãÝÏw ˆ‘þÂ!äû#<é§ãTâï,Ð@S@gá¥#1é$.ƒU#Ž“ÌÝAk aŽ¡P”/%bÂhî_)¸—&÷’$.ùVä§:dßʦ‹¢¦tñì$º’ØO‚ôR!MÛlGké„­õÃíÇh¯.±pØ›ãÑl‹Ö9[ ~qç‹íÝ‘ Ô±³Ž³€gýdàL›ˆ‡\¶äAXŒ”·EB€ËLΦ]Ó YŸÅ_3 ¦HÛжóÐÛ#GG댓¥Ù–jÇ™83dË šqj¼GWõ=:fÃ0º0ŽX¨R(T¼í Ê@U0àL³Ç°ÉA'G³—“!‹DµíF >¼ÿñš¡Ÿ>üHù1np™ ±žjƒ©rY „±öÞ¢])cf™w¤›„Ù³.—ÈŠ¼Fa(ŠœPäýÙ3Ð3L»þÃ;b²S ~Ví~ÎÔ:få0VT1KÆå5Ä'ÉuŽa.ýHÄ¿{@i_Z_3Åú~ÍÒ7¥ ?£+á¶·˜ŸZÇ€ä:¤ ›t׋ÎZCˆT Š¡ÊŠÓO×<ÞóÀ¾ “Ï8D—z …óÍ:÷Tì«/d½DLÁÖ·BTÉVÛ´Ãþ "´²ÖõPÊxåo·`pÇZº,LöŽf[[f-¬_”ÂB U/ÂÔgëÜWcMK6[¥ÂØ»ÛäF÷ÝR¶‚-aâ‡Yº¡õšß,Î8—àØUw ûÅÓ—Ûâ?e.o–>©ðPŽG?_ìpäÕýA™è";?À{È5ð0ˆ"4>~;ÑÏ)"YØ`ž”úFÁû*CF:’ Iu”AHî¼£±¸ê±+Ƭ‰¸gX KgÒ%"ÂVêr8äˆ,ýíTK™1æ²–'hYg±÷¹µÐ=Ô–I§JÜ1 €og•{ãGÙ5/ð'^HŸxËïaêk!eHÊ»—ôš@_˜áo¦ŸeÒ›Åc?ø_^ }_ endstream endobj 26 0 obj << /Type /Page /Contents 27 0 R /Resources 25 0 R /MediaBox [0 0 595.276 841.89] /Parent 8 0 R >> endobj 25 0 obj << /Font << /F17 5 0 R /F23 16 0 R /F29 28 0 R /F26 29 0 R /F24 17 0 R /F21 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 32 0 obj << /Length 2161 /Filter /FlateDecode >> stream xÚ¥XKsÛF¾ëWàV™Ì¯Tù ;ÌF)[ÞµhW´q#$±Áƒ €Vôï·  ìA§™éiôôtý¼[_ýð³Œ=)E†Ê[ï<©Ê‹)¤I¼õÖûÝ¿~w÷é×õj± ƒÔ¿Ë:˜ÈÀïS>|ùxs{}û~åèvÏô®îó–)ß¡ñmqÊx#_H7“C¾?y¹øcý«'S‘zKi„1ë²}ªl™oK•J¿±Õ>Ãiàomg™ˆgḱEþÐØ.ÛŠÅÒ(íß;úBÅþÁVUV0¡=Ô§bËb6u…ÛÍ+Þ´mͺSEŠS‡GG Ìʼ²ÕÆ-áŽ!ݱåõ>ÿŽ"3Å>i?ü¬¢‰ÝC#Reà¾Ù¾-›ñb‘‚;KÅBIí¡µsb®©ˆµò–#6´€Œüۺ׹CÛî¥ w¼÷R&‘H¢ ?”x§S ´Šüø®èTVeàb †»Ø·@…s*K%"™ö\KÝÕ Nâ‘+y£÷ØTÁ]ëÇ„1¨™ I–ôyõáz‘(}óЩdâÿøZžQ$ãE°éPDBPê¯YÅ#ÔÏ#5ß1¤ònŠË ,_w—}ƒ¸ÒÁN؃P{|0>6õ‘üP7]^WÖ1bâvqšÅ±sýöýà µ_ÕµÕžtŒV5ªñXñÒ²ÛëþŒ°êa×%Ša[Â΀71§Ðš²…RÎànÊ Špꉂ±¬‚ÈÔSæCïhP€}­Î¾Fé¥Ýgî‹×b…óÂ>Ùœb:Bß_Se=ôœ÷GÀûéæîŸ =p Ö¡³ÃѰ~H`"iS—¨wM]2±`SŸ¡ŠD§>N¿ÒN”­¶LÿaS/%кÉˬkÈ \[A”•ƒÃF‡ @%ßbÔ1+sܼ?°°—ÃqÃas$­ÍËcñ4gÕQz4bãó¿éHå#Z£§‘Å:ÖSE¸L—HØæí± —>ñÛì{Žh[F€_tVËü¨÷Œf Š%˜é>¸¨e(JŒJA«¶æ]"ÒÀ›%©¶eZ¿Ëù)d+$\úy¬HÈŠô^RŸ…``ý„Á0ä?Ûƒj:NýcÕϺœ£Ë8@FÉßokÁ`Òïx>©yH°•³â`¥.7Ѷš3X_–:ˆ 6P¶BJ@Hi² C }•5LÕ\ž‹§`ó¬Ïvx†Ä‘ã Ž¹çõ8QÎ航S÷Fnt@t…‡4† ÉK/œ4î [4™Ý‚ Ÿx½·eiûÚÔÀE©ë Ô B‡F •f%0¨¤˜Œ:(¢c… +*0i9Ãgt®¡ÈD¶êBÞ«vÙv fù†ëÀ¤ÎXÏ¢K¶í©ìÕ(«©Ô0Ïê/ qœý¾,3hývèùÊZ©¦Wþzs÷åúî_­ÖWÿ½’ :ð$4>Z$AäéT 禼úýÀÛÂ&œ.tšxÄZzZ„ 5ð ïîê_Wïfš×0Z&$+ÜÁï?Ý®W·kÔØÖhyiÇ–·¿çí Ë&r\ôL¤èÕÎÐHøíþßLŒ‹Ý }é¸ /»''vÄð~„ã=£pÀåÏî«>lQW˜Èd`"‚+©¢ñ”r—uglì±;5ân缘¶Eá 8=ê®Þ7öx@,Å’{Ø8Ø–' Õ²«—0à:æ(Â64&Ü&TÛŒ{LàÌ¡IuŒà uFý Ì\¦)¡úÞd_ŽÉPÅɋӒPmRèbÃW Àª¦$+Š¢ €‘:-W×w_>¯>®nÑk°„87Ózjú_¸Pt¹Sx0¼TªaR巶̘äÜDöL¸Ðc–;f¥=:Èoùk,>Ü„ôEí|÷Œ—*Ç\² §hÓåú)Òà±6#1Ø>‘ç‘:ˆ²MÿÂPÜ«Eý¥€à¼ ³ÞÛÌÐn²Šº‹8t­)°ðÙÚ]Øõà±±‡º2ÛºáiÍðl¹t".A_jG—i`GLül5‰q}'În¸ùÜ «íA)¡Š_7#c§!ÉÒ*¹Ìg u0œc’PDpÙÉ¥?¯nZ}¾¹ýÜK§‘k|pFi' þ1‡÷HñĤŸù´WóØd`¨†Þ¸´»Žj8q ]qÈ™}dù)="»^b¾£SNt~ÏG.—Q uÿ$ˆúÊ“óû?:Ü‚VÓz“󓉔pˆ×Îå]ÃaEÙtËF'LF›£cõåß d9¦''‡&T#gó¾5i™R;Þûg œ.B‘\öç̲æw(ýÁ§êKTi*â8ô”NE`^I@™Nb•ˆÄ\BÕa:ôî”ñDaN&: g^Ëà—†bFX±Îû“*ÉQËËÄÛƒ¼>ÅÈIA‰!†Äü;4ï¦?ÀÉ®C*3Ûr=ÅÞäŸC â;3q¾Rã«8 T+™"…®ë5¾R‰:$Q˜E.\¥œ‡`¼P’\Ûü’Nœ+ø†ØÛß§½úG›¾7¡+RHz–ÿ‰Ø2›ãœspöˆ°nð.û CÉÀ}Ö¸sw2”€¹´ƒ}KÿÚšó)`þO›®“þZ‰Ã6RèØ$â¾wž÷åÄV]8Ž›rÈi4Ÿ%cï6›H]kÉ6åWDÿ# Û ÷€!ÿÆŠ9›£²ÿ?!ýû7î›Cö÷yĘ€þ #Bù:l£¡ƒ"QРM±é’D* ™‡@Û ‡8¢^©ÿOÎd endstream endobj 31 0 obj << /Type /Page /Contents 32 0 R /Resources 30 0 R /MediaBox [0 0 595.276 841.89] /Parent 8 0 R >> endobj 30 0 obj << /Font << /F17 5 0 R /F26 29 0 R /F24 17 0 R /F22 7 0 R >> /ProcSet [ /PDF /Text ] >> endobj 35 0 obj << /Length 2221 /Filter /FlateDecode >> stream xÚÝYKsã6¾ûWðHÕF 9U>xÆš¶'kvÇy`¶XK‘‚ÊØûë· Ê¢‡NâŸÖl4~|è†Þ®N¾}ϳˆsV(%¢ÕmÄ¥`<-¢,áðÌ£UýWn6—BÇÆ¹ýÖ–ø’Å}KÄ›ÙÞ,Z\ž/~Z^þÍ~[ý#J¢9/X*‚œÅ½Ùîjûf6O¥Šÿµ¼úpv|'‹ÕɧìIÄ#!&séÔÑz{òËoITÂd²È£ÏžsI¦¸€Q]üóäí—»R²d ¨Lï~¸\-.W§U½¦s.ãJEs‘²4 ÿû»åjñ¥†\%,ÏÓH« 4à_¥"W)| ¼,ɃŽ×`!Å¥ý5áic½öKƒßg*M½¯í-=×3ðÀÆ4­‰p=|gzUAÒŽ|Ö­mõ;~„>Eº ó½µmÖ–l#©iàéUü¼©zËfs%D¼BŤRÇŠá«Û´ûº¤ñc˜(ßá²ylz­âÙ7Uïhˆ{§ ,×ôz´E¿6—³9óŇï—óCà){yvùnqzööꇋ«Å7À%dN© Ú ÑÈ0-(„N4ýð^ÿCPa0ùѸ"zgk‚¢¬[Š—®¬ÓÛð•O?[·]é ')÷Ô°(»çx2èbæÇX†Ÿ7è1`™=àV·4ãV¦*õ›ÖÙñ.UìC{ïzzÃχ zøL¡4™À¢§I“rŽI“‘48IƒOƒ$$ †¤™kˆ¿¤Â>Ôp0à׎žGÈå…¹‘б£p\1 £mWÁ¢]µ6%ÉŸyð' ƒwi –ô<éÀÎwËQ>^ÿL·3kK´_•øÅ1H*Îr8µà,«§€B+=BJ×›¦4]I˵7Îv´ÅÖãSÐ=Z°D 詆(ŸX¯ð€0þtJ€bj`Ó‹'ÅÀù´âb8v¨’)y€Gêpª||FŽä–¿M*UæJMI¨ùyJH~ãG;âù›rJ äp p?mï"“/°÷Ç™|ÆØŠ))ÿ¿Í†¢­`ªàK6.Bé™N•P<Ð"µ=\€Üu… nKqMßCÉÇ ßÛÎÙTŽ÷½³¡ Þ>‹kªØÖƧº‚”wTÑg‡#4 ·(ûÊùig@_äûð4I|Þ]Ùª™Ö™—•AfœqêK­‡‰Õ3h „|Õ¡JÍ¥¯îì§ýÐX?M 6þ*+KHQ­Åxeï–‰e5OÒ×YWK–ÃQ>Z7?¶)»–J±$+BZ†Zííru¾øqõ[Q<=yRsŠ<œ>4˜ùP|wÄaˆ 7Uïð´JÒÐHà¤éÂç8 ê0нÔ6¬Ù·ƒ¡™Ðú¢Òˆ$°ñ®îZ¤*¨½Õ‰Ox”•ÛÕ•|˜ûÄ/‰3PBßYbýwt=q¾¼úñâl–‹ø:ÔLÀ‚X0]‹ïCûüioꪧxö„ºuA2~µÁ£—²tÒnx pÛµ["ó1,úþyzN=JvH‹÷*¥jŽ ø,á|—!Vàá\¨ø¼rë½sUÛLŽ –êLäÁÔÅaÉÒwûu¿ïBYÒ†bgwjÂG÷¤@!æu»ÝÁv+dCx»~ö}ƒ¿÷NWÁ&«õ£ÉQHSÒ ko 5„øðbÊM¹Îs‹Œü?£~ _iº&ï ] ŽêÑiZˆÇ‹ª®77•wŽºà I‡wÁËØ*â*€:óQ‹·5uM_o¬)m7R_=Þc æsÆï„¢iÔ âˆTš5á ºòüŠ¥5®².ðû¬biÕA¸Ú†J„‰m}h¢qò­ÇU›2úhëOX±r‡¥é ¼–ðìÑ{~ðâ­Nù¯uû:Lù=#¸Ö 7º x@ tÃ8½'Z5¬Ö„œõøE n ›î¦ö0ØTf<ÜŒphãuxïª ·P’›ÎQ=‘QˆÂü5ñ®Zƒßˆ´õA#oe½öF9=F 1ìÖ†ŠBU@^¼mÀìé*º1Ä—ªÿò”PÄö„³Pù+„ðë>·æ?ÃÅ^8ÛJéB’Ò_LxB=Sò!SMnj;T*¥‚@!š›ÜøâªÿÚ0ï/6àé³çè⨫ÌMm‰RÛæË7d;Rë!œ8¾Lëƒl°2ÆŽ!=š©4 ÕÔÊÀ¯Û 6„мàX–Gs ¸ nÀØPü½[L, endstream endobj 34 0 obj << /Type /Page /Contents 35 0 R /Resources 33 0 R /MediaBox [0 0 595.276 841.89] /Parent 36 0 R >> endobj 33 0 obj << /Font << /F17 5 0 R /F26 29 0 R /F24 17 0 R /F29 28 0 R /F21 6 0 R >> /ProcSet [ /PDF /Text ] >> endobj 37 0 obj [272 272 761.6 489.6 761.6 489.6 516.9 734 743.9 700.5 813 724.8 633.8 772.4 811.3 431.9 541.2 833 666.2 947.3 784.1 748.3 631.1 775.5 745.3 602.2 573.9 665 570.8 924.4 812.6 568.1 670.2 380.8 380.8 380.8 979.2 979.2 410.9 514 416.3 421.4 508.8 453.8 482.6 468.9 563.7 334 405.1 509.3 291.7 856.5 584.5 470.7 491.4 434.1 441.3 461.2 353.6 557.3 473.4 699.9 556.4 477.4] endobj 38 0 obj [531.3] endobj 39 0 obj [575 862.5 875 300 325 500 500 500 500 500 814.8 450 525 700 700 500 863.4 963.4 750 250 300 500 800 755.2 800 750 300 400 400 500 750 300 350 300 500 500 500 500 500 500 500 500 500 500 500 300 300 300 750 500 500 750 726.9 688.4 700 738.4 663.4 638.4 756.7 726.9 376.9 513.4 751.9 613.4 876.9 726.9 750 663.4 750 713.4 550 700 726.9 726.9 976.9 726.9 726.9 600 300 500 300 500 300 300 500 450 450 500 450 300 450 500 300 300 450 250 800 550 500 500 450 412.5 400 325 525] endobj 40 0 obj [702.8] endobj 41 0 obj [555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8] endobj 42 0 obj [569.5] endobj 43 0 obj [531.3 531.3] endobj 44 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 45 0 obj [500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 1000 1000 777.8 777.8 1000 1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8 275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8 611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 761.9 689.7 1200.9 820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7 666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8 500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4 444.4 611.1] endobj 46 0 obj [562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.8 312.5 937.5 625 562.5 625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8 593.8] endobj 47 0 obj [571.2 544 544 816 816 272 299.2 489.6 489.6 489.6 489.6 489.6 734 435.2 489.6 707.2 761.6 489.6 883.8 992.6 761.6 272 272 489.6 816 489.6 816 761.6 272 380.8 380.8 489.6 761.6 272 326.4 272 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 489.6 272 272 272 761.6 462.4 462.4 761.6 734 693.4 707.2 747.8 666.2 639 768.3 734 353.2 503 761.2 611.8 897.2 734 761.6 666.2 761.6 720.6 544 707.2 734 734 1006 734 734 598.4 272 489.6 272 489.6 272 272 489.6 544 435.2 544 435.2 299.2 489.6 544 272 299.2 516.8 272 816 544 489.6 544 516.8 380.8 386.2 380.8 544 516.8 707.2 516.8 516.8 435.2 489.6 979.2] endobj 48 0 obj [499.3 499.3 748.9 748.9 249.6 275.8 458.6 458.6 458.6 458.6 458.6 693.3 406.4 458.6 667.6 719.8 458.6 837.2 941.7 719.8 249.6 249.6 458.6 772.1 458.6 772.1 719.8 249.6 354.1 354.1 458.6 719.8 249.6 301.9 249.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 458.6 249.6 249.6 249.6 719.8 432.5 432.5 719.8 693.3 654.3 667.6 706.6 628.2 602.1 726.3 693.3 327.6 471.5 719.4 576 850 693.3 719.8 628.2 719.8 680.5 510.9 667.6 693.3 693.3 954.5 693.3 693.3 563.1 249.6 458.6 249.6 458.6 249.6 249.6 458.6 510.9 406.4 510.9 406.4 275.8 458.6 510.9 249.6 275.8 484.7 249.6 772.1 510.9 458.6 510.9 484.7 354.1 359.4 354.1 510.9 484.7] endobj 49 0 obj << /Length1 757 /Length2 1046 /Length3 0 /Length 1577 /Filter /FlateDecode >> stream xÚ­’}4TiÇkIv²8ô®­gÊ”hÌMD›Á8ÈËHÞScæÎ¸ºsï¸34SIE¡ÎJ±’·B/$N”¨Zf·R/¥bœ µ™6½È˶c/m§³úwÏsÿx~Ïïûü~Ÿû}~²ÿFª‹‹‚¸*§2lŽÀÕ‡³1”A [:D¡¸â_c¨_9†ƒxÅ!€ÉL†#ñ1Ö(À“*qX-V®+'Dlà"pXÀG_ Iˆ>6b’+m ‚€€‰2É <Ú’ „r‰a”D›`òDE`>ÆI¿¤â!\F@« Ê•€`b(¢BHD¢ùbD3ˆ@ù?¨¦çÆ!ˆ/_2Qþ³QßøQþ+Á$Ò89„LáèTi0ô™Žƒ!ßôñ”óXà‚ŠPv¶t–ýç,ã HèËÑ@ÄGdÐä9„ §‚öMbÐ6ð<‚|m¾¼ìdÖŸ£ò@¥ô¯òɘñ5&\Âa§.3!±¾ì6OéæŽ 0!ŒŠÓ~5àã8_I"fˆˆìÁN€Q!¤‚@¦Ù¢˜œ¸g€ÃIïÊ Š&åã|1ΗFOäHßþ ‡ƒ)vR™l@u°#гXL°†iŸð¡ Ç!T>90„'_bLøA H@zô¬MŽ9vå@Ùn÷’ûçfXO爫3|+Um7f%u™Žœ¹åk­¹2VžknÜ?£ÉöO²ƒ×wñZ¸oöÆfätèúã·öçy—ë£ì“.N0¹v¥ýƒÖ~º_«ævYV試‚Áæ"+·À3»ÈÓÂã«ò’W³C¸¹È¦”ý—–³È¦9±e©v)ÝÛM³ŽêwßKÚ“bxÕæÉ[ìzœÙX‰áÉL]ÄÛÝ™èXW›”ÖÕpÔ™í\Ú’9¼`sØÌZÚüÛ?uŒ¿>Õ¹v8Ä€l×é¥2žr¦eÉž¡®9U ²Ù›ÜÂZç—V(ÐQlMD!•;RBW_. 00Unºë¶(0¤M?GUâàï%W¿ñvÖΙ[Y~Žd éêÕ ûõÂÏaá§µ³„ ·À¡=žOíÄg6/¶ÑtŒ®ë¾U]”Ën 739t½Ñž{]–Óþ\;Ï<¼~ƒƒñÕ N®ªqgmaý¸ó+Ùê-‹½ß—± )¾ç~øøá¸ýißÑMÒüØËòÓÑ}ëçÒbÐìí¯, Ꞻ T,ýÄÄc«‚¾3WŸ´Ñõ]ë«ÇÙ»^gYKö„öå:=PØ´y«¬OýmQQÇ *H|mõ¦J54ü›¤¢á¤Çmžï‚ʘäö'&ºðäE"Ý µÙ³uK?%—Š –¿¬^1­æÏïÌÌ„ ÷`vHKø!#XÏŠ®+:è]\ñÔ¸W×~­Ð:ß ;X¹/aWmæQqæÙ¹³Ÿ7q¼PÙì4›b¨AÙÕ¦!#5»æmö»A•$=.¾èÕ6‹A—V²Ó2#“žx˜”§7ó ñ K¥ð†P¬´@Í àä[dÜÌÆ ¶i6ܳ¬›¦—ñ0ç±ìšö|DÞ†¼U"£·-ÚV' ƒ½vÐó¨„g"im)…“ç}¸Oiµ©x¹§•7TÕvÓ‹7oí#÷Ø…ïzµyÍ÷EÔ-íÅ/¿¨&¿jóˆ7º[¼Ì®ötªQvþÖ©,ãÍãN}Ô\;KJg¦?vvGf©š:Õ«nõÎþØÞºûSºµ“’Û'aùÆ«—èYf‡È•ûͲ4æŽH[,:zZ"Éröלm›öüu Øî§N Ï Ö¥¹¯žùÑËrssz,3k¤èé²FëGc@šU·÷Æ <ù1_÷ŠÊ?’©î^tÖ¢£¦Gùˆ W endstream endobj 50 0 obj << /Type /FontDescriptor /FontName /SRQGVN+CMBSY10 /Flags 4 /FontBBox [-27 -940 1332 825] /Ascent 750 /CapHeight 686 /Descent -194 /ItalicAngle -14 /StemV 85 /XHeight 444 /CharSet (/paragraph) /FontFile 49 0 R >> endobj 51 0 obj << /Length1 1321 /Length2 6806 /Length3 0 /Length 7588 /Filter /FlateDecode >> stream xÚ­•e\Ôë¶Çé”iºchPPº»Kr€A``fˆ!¥C@@”’ ‘î–”’VZ:”Ž;{Ÿ{6ÞsÞÞϼ™ïzVüÖzâÏÆ¤£Ï'k±)AÜà|@~ @^SÎ(ò â±±ÉCA6p0ÄMÁ’%%YOG€ (&%,"%*‚LJ¸# `G'8€Sžë/'q€¬+ ¶³qhÚÀ@®Èv6.}ˆGðd]\zEÀz ê²çÇö`;8ÀävÃøK‘ª› þ/³½§û¿—¼@PR€)’ €”hqsAìAxZd-RÉÿ‡¨ÿL®äéâ¢eãúWú¿§ô_ë6®`Äÿz@\Ý=á (@b‚ºý§«1è_âä .ÿUFnã¶“ustÿeÔÀ> {0ÜÎ à`ãým¹Ùÿ§äØþ  '§`b Çó¿ûù÷¢Ž Ø n€pÿ'í_Þ3ðž‘Ó‚}æ‚ü‚‚@¤#ò÷ï–ÿQLÑÍbvCQ1€ jƒÀCž $‰ü€°›=ÈòA*àwƒÀ‘!äH(Þ_Û)& ýËô/Èß“@@áž$Šÿ¸ @@鞀å{¨Ü“0@@õžÄ÷„¬ õI sêÜ2NÿžD÷„Œ3¹'¤2ÓH™ÅìžÙÜÒÓî "]íÿ@d û~ÿ"Oäñü·E©Èìuï"ŠlÔâ ý#ÒÅñDªvú‘ÃÿÈ.î³H5n ²>äA*‡¸þXFÖvÿ‘•þÐDV‚Ýëü‹@^ ûì¢Hwò„Ý ÷~¿Œ¬ w‚‚þh)î ù#9XÏ{BF þÆÿ¾ rr?>äôø„‰@aI€¸¨`Àÿq´ó„BAnð¿Ÿäú7;€‘÷òÙáÍNCì…9§ÔE”*æ•br£Ê9Ö'hUw|mÅý–ˆêR4¨îÁ½ôÉäòC:áæ£÷5-,¦Å_÷‹ÒA°GBêÔ톗õFºo#­Éqº&bÝù,t‡¨¹nò×®(ªöÄÒPI²iAoæáç\NƒMì&”Ns¯šÎŒ01q¥tÃÈðOìÂLzÄ©%Q"‘‹ÞÄÉI‹£¡Î‘8 <óGOÒË|œœ×·Vèö_Œ¬ÏÔ÷ß"VÍ.†ÏH«^XǬzæh¦™Æ—_Ûš/0¾š»ÇfLrœðÂ-Ò*ÚÜç*&³ Ì.´q¨EJ•£ÕÄ À1M­L†(U •ìA£õ‹y-NÖfZ§ ÃùÓtNêÊwµQ¾ö¾×|%Œoj¤>`²SíVrfp±Þ© «‡Ï¾šW¼)¯ Jc€%Tn9+VF9t3ë°N­Gð©.Õ~Ûz3+Ú‹'&íTà¡`D|øxÕW‘$æyGu©âkb-ä‹ò9VMùw&PãØO,ø´î¤L5^QŒöâ;c¥!ÇïÕa`˜£º ;D]ˆÖÂÐ’ÕÄ8&z“èß;ó´úCǨÜ ë…q¤tŽÆá<Û{QxÁ¿6Ÿ¥V<¾<–Áh í¼ »wg²—V¹Ioø¯¬#ù[4¢ìåY”8‚uüŒ™¼bhZ 0Ëa&˜˜¶ÑhK>7ãuÿÛ@š5lAü[‡Ãé¹g½Ï(iX¿Öcä³M)‹ÛÿÌè¯"Ž ¶8.+¿tQ²Û ·t|ü3¦þ•UHvPûãC?™-ÿU¯õ;‚¢½äqų—"*"ä7Å« Y.ÊY2ûé$9A8Vv4ãï~Š}7¦‚Þ7»ŽN@+:ùÒßz²Òù¡”›\ž*’¦¤ÑZ¢º3„0Ç¡“]û;|²kA”-^”öĨþùzÕ~ãäv-*Ž¥’[<–Ó/ón2 w¥ÖõúsÒÃtàΫÇãfï§mb6~E × '½QâÙ8ß iþ®6¦8lº•^‘U(æKVÃVdl—üÁˆ¾Ø¨oáÖ&·©Â{àü]€dçÖwﺗQ9tæÌ(iâÃö+Ow¨•Ý“[ßaó=å”É­”¥:°=H!3É»eT¥-ЦkNxK~…£¨r)öôÅþË©^Ü:çÂQRÚšnãí´k— —@ïôª:5ÊŒ*ñ*‡cê¦×k~…õ‰´ÑÏ=¼‹W5¦`sVûÈЙ“=ú Öú2ª©Õ½ÙyWL_QH6N d$),%Vsÿº[Ï—:ÉSóAED¨­ŽÕÝ*˜ó·­~ñ™ÛÏ} I”87øëñèxÑÑ1¼hŸGi…xÒ-[ËgV„Ã÷G3£WäMŒ“› Õ°\ ÃþRmLôúçKM9Ö|£<ªÙftz”$áóÁAbA iæmÌÉ'#Å.¥óÞ±áþçUgJ°Ó„ ˜tÇú7m2¯ƒ‹Ó¥€ßO†Ó§ýÞòg8™¦åW’uì.\E>\f¯èw?ÐâWuPgáý0áÓÉm’7ŸzÖºMw<>³~]Úî­ø[§KDŒ+.EÉJ¾hÿAEOýY’Î 6׺mÏ&îÒËÒÜU­k4û7B/-и”ƒ­À$/Û ßœ0ø€gùDëJ…XevÝjçdV«VÐç†0'Ïò\ß<‰S„Sù9 Îâ„'rÍzoºˆFêýÛ Šj„Šø;S/:PpïF¢æm’j3ŒB~²£Š>ª.Fëfe슊6¶ º€sUÊİ”:ËâÁ2ÅJ*+ÙÅQFI-ÞÙ¹Ó8BZHv}й‹:¨dVJç³ßCnº~X%ÿîÁpmzÒ]¬àÑ¥®_£!IϾk–cÄ =œ„ØÝ ^&ÓÙMjÓÓjê‘`š +Ñ›Lkæ‹¶ÊV4–…–±Hø*Bßu­÷Ö,I[2)$"3?j¿,vuÝâ~¡j€‚¿*j¥Df¥g¯¾uÒ]‰³ŽIœ^㼄!$¶„ 1ØSwae¤“¹òÔô² Ð+è‡Ì#ÞñÜõ ¦©3ñ_Ê“ÕÑbX,&Ê´ú•äq“›aÐðLÖd©µ.ä'@S˜>Zi—юìÈ+øä„{KR8ôË&tƒìvfy[ ¨óý+38~­»²(Fád3—æhKth9£Vû-iW t6”1ø¡ÕOv±—ÅA޹OÕO_ã.&@[zT>=ã¸>!R(Ò%Ÿˆ>¿‰™ç?Ìþ6pF‘2ý(dïUˆ ÉÞG€¼§ ííJ›×ÏâWÈz3MõÄ,âœñ_.×.NЗOA#¨‰a†ÇñAãaµ)‹EÏw™æu—¿VÛFø“ÎhÓM|tÞ¢ù º=æ£ôη´>\ÎÉ}ãû,Ñ:u%èIŠÎoqÆì44-–²§©¶ôì¼Ã*”/&ž„²·Ã-”ô|_‰ok“‘0$èòsÅ!Ž¥XR3àÍמKw—ìçJ—C”O®M&Ójð¬vÁþµDè~èÈaàê2G½žâçóyh—“Ÿ ž­8⧤þ^­{L¥³õQH´}„’Àu¬dqîJÃØ^((ç<±é½¿Ÿ\Ê'Ò©èÂþÔzWü#eôÒGÚz‚7?Ô+†È/ 2Õ+ƒ‰\fŒJøÑÒãÔºHaŸ½‡9ýŠÉqM1ã× ¶+mͳ1oÖC(7“8øÝ5›‘ZùGÔèÆ«AÄÆäoˆp ‹¿ž¬–Õöx%¥7dû/ÏH‚5E tÍ·ñèyLɼ*Oªày€˜¯?Í[E;Qˆ¼¾¤éí+EÝ¡çpd~ëgo j¥¡-½#ÖcŠX+%=¿i[šàbÞÝÿ-Ç S ÓzŽFÚ»,æç–´ûæ©dä4Z®.Åa+•Çp“,ÛŠw éPu+Ýa¢À붬fÌÙÑRá¾qN>ÿ¢#ôC¡oCœ|¥•<;µÝ>¬“!˜‡-DìF*˜¤-þ½¤ùyøK{¼uÊOÈZ¥ö§ùŽ˜/“vY³±—MBc}?ysÄÞ¾—ŽIi­*@qRi=¬ÖiJ)zˆ¦VM³0m8O& ιô [È’îmŒn¸Äó²¯Tɇ1¼vœ™ˆß­Š.)+E«×ATpxò‘èšm™3¼ "™7ýýõªB»Ow°*3 lýÖ·;#LWB·Ž> –m)ó'—]ÖEw³È&1Ž|åçrߢpÝ¥ð-¶ëcÈkU9¢Ä„þ0YvW2ÜÜÛ<ÅÒ°<ûlõyµOî3èй֚‘«ˆ’õÏÅ ãt½Î›Ju‰&YzkW…x@„…9¾°²~P»ÀÖ²èç©DˆòÃÌ*ª",×±P³í¹FO²ˆö›ÓçöøAè²gÅv½xßÊ“êH¯8okη»CݸkZÅÇ'àŸw ¥P ú™I£˜æ»¬Ee;µÔœ²±©ZYÙvƒ…6wLC$S¤¸'úåbÛÕAXÌ9Èówá8Sò0*íŠSAþiM<—ŽO³¼ç"-q+M÷Õ}CÆë‚Ϙ€`ËÀ¬ Tgå”Ô**¹øâ›˜l§!3/us¶ï´u‰êc?Âå!Úð êHÎ.ã„ÝFû™×ãYÆPnü¤Þï¤ý¸ôë¥úýövEq§ÝÌ£ÄošÛ°â(Úw†ã7õ?z‘Öbx¢l}C0íŽú^œQ¾T3›‰n>ŒÔû•ÃÜv<¥ë¼¸Rfб†¥Z9ÐýÊœûÁàìÐíæVM—âßø<ó×Ð{;žË4UüŒnQªs ©îm¯âù\ªâœÀ™Ì ¢WËvJˆ’Tœáu=@Cåw™§X_M•ì×O‡ø˜œþ…ñÜBøÛ—þnòl‰ú?Ïs€ü飜,™u¥+_–Ï%=HX;«êlðRÙMå¨ûê> ›õF‚ù¼mt>Fý7ËéËñ¨:y(êÖ@Ôƒfž3·ê…m¥†Y篙¾jË]8|žï(ëÞÇø¥s#.é.ÔÉpÙÕ”Ò«Ø/ÝãëU°5³z J”¾ê?{OF›‹EÃFäioz¾TÅÆž»>92|0òã.ø(ž‡ªŒÔàsªJ)pô'ýEš¾f 8Ádá·ÌGþŽÃñD˜"ã£Ô¡Û¬“/ÍL eÜŠ‚U®š¢½Œõ9Ê5Iùó¦ÅŒšr¾„5Ú·g/#È|mæS°¤ÓkY¡·‚ä\€ß)7ÒGmi.Õ4£¼ 8¯bÌ•ù¿lêp«ÖÊ~â­ñHž|`Éh"«Á™cøpciðw UÛþ˪ÊH ;eó[¢©âPñÉ&›á)½Y[h*É%Kà»â‡ÎÍ¿Åz«Žñiž¼Á ÊN¦!br0ëâkžlX"¸ó¿ ³¡'ä,¤bžËV~Q+hÿ!-›ªdü‘yå÷˜æPý€;¾a¯7 ­ E¤;Žx]c£ÎØÒy;‘”ou÷wú+¢¨j})<Í$‚,Ž€ÚÊ;*ù$Ülÿ4•g )ô¡q;î&‹_! ߯€ÒÑõ.ªÃÉ"ãñÛÏßâá”M\…H%=]§U‘æææÄ+>×Ì;Æpu¢2‘^kE˜)püðs ÇeÒñ:·R6R­Â,O¦?¦Þ‡£ªï+PêÚrŒ©”Lœ"?Ê ½$&(L¦MüW»Ð¦<¶^¥Â¹H‹êD›DOÔ Åëì³`9 @“ö•h{ý=@Æö!ñ×hÕXcë÷ʧ×Ôeäl‹JCÏ£~K’ù $”|íY=’˜³Ž ]RiVhv´Ìçr’ý*¸÷¼_Xyš…%r„<;&Nû¦ðA ¿[&=o®»xÌËG±ü>•ªEÙ:ñÇF ‡‰<~û‡bxDXrGK&z®Ÿ{ç¾(bP‰Æ*õ~Ÿ‹Wz1ÔˆšG/`pê6÷f™…2ÒÎň%):¦ñô/úE!Öd€# ¸®©$ﺦSÓúÍÛ[¾Ã6NÀÿ*cEE'/B)<!°0ÚN˜¨áHùŒŒ™êô’€³Ôˆíf\mµýÔeFÆÊ®NQ!08£’\QtMÄI^âC2Oœ%%'á½¼¼ªøQ÷Í׿“á9R ‘ï÷ª;ˆ¢ú´urÙ^·c=—½íÆŽ±´ÁÃâJdZBY ¾#é)«ª>À’j qT‘æ6‘^¡çb4#ð“Z‹.T ¹¸õ¡€9ndwU6EH'¤í?µÓkùþemà ×âfÀPÏDªh#Hû Ì`Ò[Ìm’ƒÆ—½C×ÛÒ•8ÌΚëS’„$E`¨×°ðµ&Jv«®Ô?ÕF“dÒÄø2š9ž>Sßd_N×4#¤ƒŽÿËÀ2¤ä Ô¯aä±üžS¾qù,±<ónÙL;ýÚg…Ýs\%æ¶>ÞÃe†Gº<Ê5'ºŽíѾir³ÓD4‚ÀTžO¹W´bÜ,T=Ÿ*òv>UÐú4"íX4„¼—õ­*ÁS@UÄÄ ITì«jÑsW³®l‡‰êH¨(«æs¿DËæóm cYBêë[á0;ŒêF=ø‘°»KE õ_Ü—âaŠØiARv<5Kõe³O\¬,K2S®¼¦»]|QOQ‘noR¢"ó³ zÎþ±%ñc=#H“Î~ |+hªœÒmÃd‡J¸Êú%rˆ‹oÍ.*qPY_–*„u¤vrÐ=™ºÊLƒn»þÌÄ‹¿;£¤É‘ÍäUäÅ•J¦ágÓjǽ躻p¡O<&!¹žÍ‰Ü’zù«ô+áýXE«¬m6ƒYmÇÁT|j#ÁGeÒ Ò ¶~Â(Yé‘j•Þ#ñìö–ðÈs*¦4òÙN7«¸z&‚/"4Ð!'£j' =Õ3sl!• õŠ2ªS Eóª«D3Èï/²ty%7—/§R±CL§ZÖ"¢çÙÿ`ÃÆ ¡œ5„[}Òc,¶BÁ !Î~ bg×Òœ³0Ýå'¿â´æ¸¬©°xCtC"¾éáÙ¿߬?9 °k©Æ˜ZÐò™*[¤Í<¶[‘kmªQ&ó¶}à\ñ ˜8öNýyÃåY«¿BDÔ>©ñÊT7"´lj¬ ‡.­á†ûͧgÂLª@¿tffiÂ/ôÌ®dIù-ކÀÏA¿:Ø š¼"Ô•§Pñõã‘–P¼4ã"Ë)Ê2#ëå=+üþ²hÕ¯mì²^óœ°üD ÓlM/>” –3ô!³o†×òÂ9ä ^Â,ú±þÑ`&©ãŒžWÕKh7UÄrêæëðÜ=M «Ù 6Ξ‘ŽiY›†–ò½BŸ[¹Û *tkFîŸö®“£îïíœ§ŠÆª•Î;úÊ}\¸´ïUwTèÆ i;ÏùeíªáÅ÷šG©uùýqîïù/âò3!œæo}È*I)ä£røà.ÌÛÛ­gDy™Â‹†ë“ö[cÍ…ˆº˜mñŽ­ƒµšPÙ¹ñ×—V–r–öãƒË¡=Ã’#©e93’̉É-UmÜâ•—ºXbäï–Ë„g÷/0“ã屮x;âÅÑòETžÇ#C´Õ}:á0õ)ÊÞT¹>MÇþv|úÙI_ôV@‰k^˜C»Íœõ{œo„{šûîÊLžÓŒb>~±xr€U’©÷b£ä(ùdúE€n‘êÓ‘y=ç 'è9ÓžÊtCTÿ𯿻"†Åj3êq„7Š·9_èÞLJÂ±á™©Ë øt†ÏT<ÏÂ÷îÞq79b։력½;_M<#òF ]h;ðTªZ¸DÌ™L©v=Á•žA×qÃS¢5rp]NA¾ú_æ3ß½(ù׋ ¶®Uú––1U©[Š;û˜1¤ëŽ·çÒ®2›Y·ÎöÊ }(y#/–1Òj—ã-#(U$œ¼ÿqC‚—E>ã›ë¸oÓq7[Ūót’â °»0Âv̆}ÎØSÃ* Ô¤‡ xÊ»÷T® æ¶UËÎüYñ˜X©ßS—–w<;zUº\¸þâæÇ»%Êêó£s>2jÄù&nèµX}ìÌ*EÇžëCåô:v1WÉ)€Æ#©F´€éÐÍG‚/™Ò†e`§¿ŒnÁ^²úý¦K—^¾žàÍÄM“•.Zú®å÷gë=Ô h²Ãêzþ¦¿áõë*¨ªË æŽ"ÖñÚEÕÖ3ngÎ8_6>9<ë%[]9-I&b/¨,ê ñKÆ«¶CºBH/œ?ýw$Ã"µF£äµË Ï"W&Õ°š\re÷ÛˆxjLµf«š+Å0‰=ŽÇ_§¬4ßÓ©oY3˜|ú‚O˜Úéo9«M†%ÆG;vå#öé&ÞÌt6ò“Û––s¾Ä µ›J¢7»9õÀ·s£HM]^Œ9 |àŒký™Ü<ÏžžuÇ×±á\‹7fNxr‚þ3dÊÔÏqÊ"º”´Ý{NMQYnáÕ·6íì ÷¢åê4xíâ×`ùeVÑÉV‘ÄCQÿ@þr‚ÒC‹¹)_õdO¾7e=¿æ³ðÕ xÂ~¦2Êgƒz³³ïe®éF A’Wí‰yïVUJ Ë(:FTu¾‘ãG 0e+…¢Þ' ô'£T/ ·¥ž°Ku9–†à—ÇN‡¨7Ôþ~Oʾ endstream endobj 52 0 obj << /Type /FontDescriptor /FontName /RBDXTB+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/A/C/D/E/F/G/H/I/L/N/P/S/T/X/Y/Z/a/c/d/e/equal/five/four/g/h/i/l/n/o/one/p/r/s/seven/six/t/three/two/u/y) /FontFile 51 0 R >> endobj 53 0 obj << /Length1 887 /Length2 3591 /Length3 0 /Length 4200 /Filter /FlateDecode >> stream xÚ­Ry<”mÛ6Ö²“Q¶Ü-ÊØfF†{²D2ÈRcf˜Ñ,3ö}M¢Pd‹²d‰,•}Ë.B–•­ÇZMôN=ïó>ï÷¼ÿ~¿ûŸë8Ïã<®ã:[².–â‚3¢iÊp8Ð777«¬3 Æ+'§OÅ¡i ÙMÃ!¸––pŽNTL©Ž@ª«óÊú_*Á Oäõ!¿H@—„£0h2`ަáq$–M¬)Žæ«è‰À…_žÀœ'Žê…êðÂá–€¡.87™úË“ Ù• þ,céµ¼pTO–)@þ·MÀ2‰¥‰¾çÊ µ °nñ¼üØú§¸H´@“~ÉÿÞÔÿôÑ$Ñ÷ß ÉƒNÃQs G%ÿ“j‹ûÓœ9K “þÙ5¡¡‰Œ.Ùˆ”áj*0µ?ëO#‚kI að€+šè‰û]Ç‘±ÿtÂÚßoPS£ ºöVŠÿŽöwÓM Ó.úzàØßìßþ7f-‰Jð`*0œEd}œþq™!CÁÈn€ªº€¦RѾ¼0–”ªº:àd,ÎÀù°CUÈk`m&p¥Py媩 @í~•þDZÔþ?H @/ýX=Ì+}Šý/Èê’þÕYª¬À)34àÔ“ˆöÄÿ=£Ê’ðù/Èbøþ†ÿ»N==Š¿ò  ¬ªÎzLU@¨ÃÿC§RqdÚï_–Ê_Ø•ÀʇóÁaxÇF(í÷”ª¨‚ ÃÜB.ˆ§tÚ£ˆžúÈÊ4m•Å)mÑ7Ôêþ‹¸ƒk"‘"î„"á»Ë¦O XWu†D•n@‡¿54ò­H‡€$ûž5Ï*fÑÑ™ýUf{³)#faLvΣZquüÈæ´W=W©Ù'8"GbùgÁèÈÎzÐÕà^Æ_*öȇ»¼N™/ÌîàP§º¿/Sr)cy¯ö;ÞÛÜ·;&Ñünðê¤@šVl¦9ÇÈã/Æ¥wVå ÚГ©­›,A2Ÿ4ÈU;à“HaþBÑÙá1­Ïà8U’šФ~bç´{dÍp†`ê¹ø6ŸÛ“mÁ¾xÏ×?pÓ7ƒu¸>ÓÝ"Š,¬xð‰ÌÛËxõ’V^Ÿ¡¼^,~P˧°±p\'*’פGÙÒ­ÌaB-ðǤ‰p[*¸4âZw£¥Ïä›9A¹œ¥FÍjýö Ò×He?ÍKVG!æhâAOÌS†%¿àòåâýy*÷ƒ}8~ÔßÏ,ÿ*ô¶‹÷˜ƒ-_N²¯òàzŸRød³\-»LÈ|ôçöNŠìÍáöyçÝÝݯ»tïuÐ}?-ø½ u¿ Z6RýŠVÄ_Y•KߦÀÏ™£=æ½6ç¸ïþ9ÛôNÁõXIlï˜b‚ßGøí–VâåV¾JÑ-©]í ò,‰Ô—Ü:[‰û¹m{æÎ¦]HÒf•tº Û#Å-xŒ'¬~‹*£Ù€›–•ÉÓÏx¢x.#D{D½Ñá^—ù±æÐ;Ù­=.Ú°2¯7QcjO)­QH_®¥5jçQrW낽Wø×¢"-1If¶âË-›\WÇïj_MÒ¾ˆ¥¿ü™Ø&º!'VÞ¢”¢.Кý¤Ar¬st ¸«‹¬©èüX¾µ®©2‚E?*¸Ýow ¾,ëüHûu÷+kAëÒ†Ÿ Æûß2ßdEœ‹KÐ^{Ñ¥´_¦·¦¼–¾¦^”8.ŸuÅÔ£v-çR -%{T S½wè£øS½H7GçNÿ‚­n¼dDzXÁ§Œþó|M}rf)g(Â+×Pvþ’ñp ¿«Éƒ´Ú+ÝA†Ãc¢½µ£ÚóëÐoî­AYªíõ«™*8\è…¯Þø1 hü1žÝ™gÖaùŠêßÅÛó|ÅžÞÆ)3¯~O°ä„êPŒãPœ&Ú›uÞ}~I}§öý©y×å©£ýå!l¶s½z^ŕ̼ìÉh·œâֹ̩b¥¨rîK,èˆøÂáV0¦è©_Õ‚Q_CúGñ “¾ ¨°ÒmþãTLs2xïÝZÂuµè.¦¡kž•¬KÆQ6Rt±Òiq¥ô[ËYø£ ëáÎâî LIÍ{jÇôT—3̭؈§grGðZ¦Ì–Øî´—}ãR®֬7‘‰¾–|í/`mʼt§ÒRz?vs¢3»xvÒäԧñ-uæVv½¨`üó%:,ËÙ ’¿±ƒ;¯x˜MVìÞ½šw„Ò:H1õ=íÀ)v_€ƒfÏ‚ôƒjÓWÈ͇tM«‚¶| “myB‘k#LÚ$®´»¾HH'öÊÐ;Z_Ân‰º Ú@c4–Þ U6áësgC–!K€èkYò·X ìhAÿ1ÞK¯Ò>µ<{´a8h3ÐWU’…Øÿiwz@°=éÖ©ªc=?c›·|UWÐ|µTþB|À‘¶7ÆÎ|Ó ÷ݦ¤‚ön–¾X¼Ô!˜dnšž.­J¯›d¯M’¬f_¹9פ¸šwc?Gć¤áÝéRW ýE‹*C3/Þæ=c¯¸4›kOWóÇ-Óˆ[Oýgæü϶Ò]+š8!y²Òi%>Ä ¥QrŒýòÈåóSÖí?Žï{5TðÖîˆUƒR“õNU¥\ñ¶ ÿƒûV´„Ú™ØKêçÆ]ãÚs¾eD;Ä:É)XL~}·õ5ÐzëŸXùîvÈ×Ã.à:¥;»³œ'ÓÌ µžxåžlïÛË”R#~Ý7`‘YŒ¬[®N–R^·³—êœ*ªÕ;7+›–ÓgT&èdž‹8ü¹»N³;*9Ëíëš°¶ö3RâæâWÚg¶S%7A¬j 6âžË–‰iì`ôrÞœIå€ÌZœø«Z¸½¯–ËTYòF/Ø pÓCï5B¤—|‡émG§_–rÖÁ ëi»k—+EÁ·oc:Û,šÈ§´s}  9§î°Q)í†ÑfO|5 ¶?¡d>ÓZú•»j·Ó3ü*ªÒ2»ï6=—¨6zÌÙnhÐÖ ÔŠà:É=®Š/ht׉iŒQÞ£å`ÔSWPš:žµ£7ÏcÙôÕ[”(kQˆ°Þr\¿Ñˆ$!¯…üW­aamSk퍹 ¶=AŽå³›ÎÔ~NݶˆÀ-gò’&-NGur*µ’rÊ„øÍªÌ ¬˜ ðaÿÖߨP ßöRËÚ½+4&vÜöÞ{b˃Qæ>Fìë¿]|ÞáãàtUç&Cª’˜°Ái¾÷ã^%¤ÆôÈå[¡ÓÑâIF@Ïltm$ÅEvÈãܼ óÊ~Y\œ‰‚ ›ÛËîoðìçŒL¾ÚÐÐ?wDFìø¢©i Sþx(ãþ´ÔI°Öƒ¾ÀœìS*ìÅÞ±/~ýM…#¶àõÚý•ï3%úBèÇ­<ÏDÕDËÚOƒŸ¼{/Eª¢L•*—H8WH]nòÞ×gÚ*%œ¼†+_ÉšîieTƒíÒòopÛZé×Ȩ$AŒÇÐÑšŸãÖn˜ ÔE@†ò§î¤^04¸/Gd7O_|k¯]å/fuO'žYqLÌ­ývÓ1ƒ˜uHs[rsXmd”wvĽK[£ôs7µâ±ú'uhq¸ð±°ø1”Øx°Æ»–¾Úåüi°°ª·Çµh3ʉúVjؖп/t,tttúÐv082§ýš¡~««ŒèÉÿRü½$Ýw†ò00)Ùg<öÏéˆRæ€)¿Éò#žØƒµb›pªóÇ3~hpËúò°c.lßÐR¼m¦i¶ôešŽ¾QÄ hGާšz[vÖ?§e˜u¥-ûX@䥿ægeœ]4/"±§šÒ_ø¿®H,¸(ùLšÿÇ&Î+Zro9CðÚcÌõvñÆ…½FyGõ4_n(î’ ŒëF¯zK_¿ñ.E Ì Wã ”iÀ±¨ÔMq1~Ã@K •3¢Üyt'‰Æ͇ É›¢WJS ö³ù!Èfå§‹õ?ÕxÃÌb³ žÆõ濃ÿ°¯mápUFÝsýæ%¶bžVâŽËžŸ¤Î+M2ް—/™E38ÅZüûŠð2ok§_ÓPŠÇÓÈú +¸hïqç½&7^?XZòë¡ †vçºÇ¶r!~ŸŠ.Q ?Yw€B]·/¡Øêž½¶+Ñ7º/8ýæÝÎ:©x¹´÷‘¯Ù¶·yü&÷Ã3*îsaJmÌ9&¿)Ø€R ·‹Ä³Äÿür¾‰‰9’¯~nÿ"'ócÄ â”ÍÆKÛ> endobj 55 0 obj << /Length1 1153 /Length2 6481 /Length3 0 /Length 7194 /Filter /FlateDecode >> stream xÚ­–uT”kÛ·éZJz()¥siéîf€†º»¥Ùˆ4H "HwJ—t HÒ©”À7îý=¾ûý÷]3kÖ}œù»Îóº×fz ígRÖ0KÈ ˜³Ç3NPFU‹‡ÈÃÉÍ- `f–qƒ€= 0gY°äá¾€X"_?H€À ”¹øºAmí<€¬2l¿‚„€RN7¨Ø¨ ö°ƒ8!jXÚ0+(Ä×(åèÔú•áÔ‚¸Cܼ Öœ 5ÔÊh ±…:¸~IRt¶…þ1[{ºüÇåqsGˆ²þ-“ ˆi svôZCl\j0D7BËÿ…¬áéè¨vúUþ× þ—ìuôýÿ0'OˆPf qsþw¨>ämªk¨§Ó¿½Š`G¨•”³­#Èý êþê±Ö€zXÙmÀŽî¿ígë‹@Lîo \꺺/Ôu8þÙéß> 0ÔÙCÇ×å¿UÿÍ<¿17¨И1^D âóŸ'Óõ’s¶‚YCm¼‚@°›Ø€¸=úó¡ÎÖ Ä!˜‹ÓæH"f´¹~-TPÈ%óËô7 s¹4þKˆ}q“0Ëò7‰¹¬þKüü‚99ýŽæáF”²þy€\ÿ"B*×?ÓÿÀ ä²ù¿ú‡—Èeû"úÙýî.€ _;ˆóÛŸùñŽ B½ÓoDì†ë\Ä{ÀûZ\þ@Do·?ÑÈý÷ÁNwÄæ~»'ýã”<ˆ‘zþÞ¡ã\^„ß¿ñ_/ii˜ÿ3^ â‡û׸E€"‚"ÿ#ÒÊÓÍ âìñ÷Û‹¸¥ÿa(âNC >+Àâ<ÌJ4Â>½1ê]\Ñd:;²´mS²Z]×LNø§dÇ’eWöÕZƒ›ò,bümôm:ïŸTî±íšc/ŽC]“3æî·½,¶³üZ¨ βT}·\.Ã÷ Úg/Õ§W?¾{eXÜŸ{2°_ Á*«³ƒù™©ÛØ«¾;;BPÈàE–£ntdí>z- ×w1üÑ+Þ„¯þB[™²ÆjæX>…µ{>º)Âz“zorIšDdÕNǧµÁN¢µ#qPZMHPóÐ7T%™ ´Õvn£/ai(†çGUåúQÊ™OËŨz?mi7 ¿c4]-ùjÎÇanW¬ô Î}òWì}Ë5–ßýðõ•Ha»rj0ÓzÈqAªGA‚ž ›:=^‹=#¹QVö$‰þEŽ.¥T€ÁEâÕƒ¿§d–©T`‰;ºIxc/Íö3H݇ o@Lc7<¯VE¹O‹Ü‹6Qòô‹t¢/gÕº‰‘ÆL¼‘êÏiU”€ÌVˆ`hV«’Zo+´¥ ƒB¿†¾ò‰°¡R$•(ȰGáúƒu£\¹Å·+1JñÕäðÉ1¼¼¶ÛêÙ³˜Þ·?¯ñ÷½/U?½uÒ1®mïË3#K·Æ,Ï}¥ë8{‚Åt¬Ÿm‡ÔøT#1Æê&˜(*í±‚1"X•dõ¢›JfÐm”‰K”þ©òr‚kÁ[•¬W‡H©ð[ˆþź'¡|Õ0ã ¹¹ÒŽˆ CèõVè)‰¢æš±'o!÷]Qƒ§‘pÃN:{y7#ÆÊÌŸWs]›—/Ò4Z÷rN[> ޾VLM£$'ltî2–.Gë“ø“0ÜYw6¯{ÇÔF$Ë Ëá®·“í!}³Š9ÿ)züi± ÙBÀ¥í„ª÷¤æ]à,w²2áîr8”aqwaÛj5ànù+ÉÔËk?}®.ß /RÃ\a“y9E¾§¢t +ùÁ© )sõŽ×R൉•µ/}XÜô`ȃ:¾Âѧq \™ÞÉ18Â[¯-éùC‘j×pê‡À‹ç®¶yZÁêr0oeö«ûóO¢\q™÷î­²u¤%Äò´Eƒc>âÏë锯·€žÙö*²6Ÿð/£*06 Ъž}¹³¿3_ *k$I³KÛ©ÆÿVŸ’c¡xz‘ú uo©¤ÏÇÉ@_•SRÔÑ n,y; sIa2GUž×•^“o÷o·¥Ý®J‰ÞÈøèWO”h¨üfCÖ]Ê]üN¨2ÊZúü0I,Æé;6v•Ðæ]Ÿ@Ô¹óJ|]fÅäSáÿ²!•ô@%Ë·. ¦eä ðÜa³6:Ôj æÉg &Xx94÷ÝyÇ”EÞò;èM6)š/M—ùç=$àÝ œV©’W~?ÈÆŸUzÞÈ챪{ølªú póúq?Èwšò ¾)£¦Yw¡9þc¬·0b€ÑÅ‚¹ÓrñáÜ–ÁÙ}$ðæy¯†¨é"êN(vä3¸üˆ›“䨲]D͵9ô+'k¥^+ÁÚéŽƒÇøYŸÖ#€±•†3ç7ÚÉ×bÆíïe-éœ|í7_½Œ’~X¯æÃóR£ðL:Ñ´|éŸ×ÿ× ]:Ôüu ¿’ò0Üîi¤‘L/v Ë1 UÊ;ùõ‚žÎ€ Ôîzy).qÎù Þ5¥QÚÌþÙÍœ\ËÂŒæN…²Ë¼†)åUŽÑ ]V¬©û8·¾QÚmðNݲ*i€3á I}‚vW§ *µ­ú Ö8“•x"v ¤Èú”SR@‘&ÍYŠ ß¶2í®²ÅZ Ø~Çä“íG‰NGXªØq²ϘÁ)pFr…,î:ý›ûOöéwD½’o yVŸa/”eáIÖÕ@Kʼn£È%‹Í*çžÒÙ™*)Š¥w?¾cûퟬZ˜"­Ó¿³S”öÅí÷«éA­0¥¤vxÏÜþ¤† n¤ß+P'ܨɳIкƒ;Q÷$OE¸àS„@?lržVìR`U€ÊlGÕs¤êh»ÿqÒRù‰ÙÉ'¯ l—êðºáç»Fyið³D– ìÉr€'êb gQÌáò\rwÑ%*ŽV¾Qøe`Z•Ï7?Þ_ûv§‰"<²žôlÉv`ZÓ°¥Ö<ù^€¨Äâ^Yì9‘D0Ru8Öóú¡u@„bKÞä¯Hòÿ<òvÔœUúY;V¢ïº¾±L"f’Õ“´†¡9­ªæy0î§íáçUìï*eÓÛï|vIK_²î"Ó…Fjp³µ”.hÊD+¸47˹Wû5É,JLZí~÷d3'½–&ϳ™ôÜ’ª¿_Ú¾HW}†ø‹J\ð#¨-Ø‹ŽRÇTwžPPQ2bIA¶HxdÖªsCH"¶ï'êð#ÈÔ庘W“Uø+Í%5×a.Ù¡µïvžûÌÊ7ÔóRÖ(!…6)½¼ˆÀ›ü7×¥\oýt‘àä– R¾ îw¾SüÈè˜P³eû6ë” ÿ¤W±4ç´Ë U­ÐUžäµc^Ь5§y·–Ùi¯ãî¶l°ršN‹;¬x½¤Å²5¡xŽlX®NhqípVïœl}Ä¢qKkDÊ1°67”ÃV¯Bl©zd‡´ï}P^š<É÷”`Oä¿0ÛƒÛ^û¨m÷Ö„ðÆ#/{òÊ«Gú2ÝŠ‘¹#KÃKwX?é 5ˆËÞæÛtÕQã<ÏøÊÂ:÷EK–˜ùtÈ ‚©}”öDˆrÓà_!ŒásN7£³9Òç8WÉD²F¢Æêàõ ¶–ˆ†ª|ÓQCM%ÁG:ÆpR4%ý–XÀƒ×ê\—û|ÇpaÖÙ@y¾<·¯-ΖÖHædý¨Hz4Ê5#a‰Ñ©ŸÖ Eæ'K9µTñÎÆAa{eË÷^,Ùý~Pó¥¯`¯vTf5hPºÆ‹F¥)!Ã'çö‚õQo¦ú ïnœÑ Ò&¥ü$D¾Õ‘ÄL~ÁŸ…¥DÇüœé2ÓÉLôÐaADž‡^»uÔJ/ÎC‰Ê­»ÿr+±^úv˜ÔÛȾÎ/ñ\Ë–g¾;‡Ã4²°ŒÃ842¢h±,ú1Ó¢ÉL”¤D+«@•¹³!ßÀ ÷r•4Òýâðì"­•v¢ù-9Œ£ý ëW´Z–Þ£Pco£‹$>Ïš9Ü\º†kÊ$ö·“Oƒ8Ã3íúD¶à „ OÙf—.”Rº0ñÏSf•³Ã†A¨¹xb”uFsšo&Ns×Pu=<> ›umykø‰»;\ܸ`ýÛó#­ q‚fÙéà/äKÝòüW Ÿñ«¸òA ŸãYDÞÕò+o¥»öíé³ÕÈP<ç4ŒQ¿¿pƒ1„Ê?+ñ7Å¥~ú_b•¹†`€Ä',e‹ªN™ýe¹G“Òs;‰s!<ßM?-tÑ·éZúÅùe•Õ5õ Dàe¾ÜÞªb¾æ ª)&,…óJã4…¢dàŸnœ5—ãÈ1Îú¹Øðc}=[)Ë…ŸE  ¶y¾‹æ]¹³‹3âá®Stv޲ôØ »bÒVxi˜u K9zÜÞîRª‚¦5·ÂqÏlÌ9çñ툅é%]–©xÜûÌ’olûñÞ ¾ç™zpËd*ªÔdå8¾& ­#%+~Ê`ÏÐ&„v ²Å^áêÏ]ì\YGÿp˜+ÅCuŒ™Å–£•ÖÎ’ôKÍà±aí˜ Å!Ñ›mPÑÛËÞ ¥¯¥~œ€å„‘Ä“‘¢„þÕ¶^&c™ç#£?ìÜÝŽù˜,¨†a.ÅqŸ¿æøZ!ô@->Uh¹º EiºÚÇʦk`5j¥&JÙu1Í)rêà°Ã3혯íóšcÔk­=:C@EuÝÕó³7ùF ÚçïnŒmŸò®F}ñj?qå²WXÆyM1ƒßÙ¯ê0ŒíëP°ÍçKׂö6ÞÉrrëžþ ›ü,f`Tû–ãí¹žr&½ˆÂ$ýÀ©R¥íJù®}Ç[ŠzÏ¢´,Þ®yߥ¼QC3ÒTiKuªtµâÐØ½(ã¯ÃÈ/Ï5¢µý9?^¾QH`/È­-2׉kкæëz ˜žøÒ}F•ú<Á^ñÉÇÐO¦óþÞpí9ßóñ~©ï1cCˆÆ‹Èjí+ìD+KRàÝÙ‡çY I9÷û+QüQ‰ÁÝï­"6(ª/êöJûùÖáV_oÔ©ÍwPsQq?ú0HòS«[Km:~°Þ–=g>uaüîåÿ#ƒGû6¯¡i-"$  ú½Kô¡pIß8kÊEÂ~§÷ß õ¢ÞܢϷ½Ëí+â¢9ÈzªÂH¤,Ì’’ š½$_#²­FtkVülƒ¨$E’iþ°ø›¾£A’†.ã^–eTÍEé§î„¦lLÀú‡ˆ Ò“{ïªèéŸ]¼†¶›L©ýÓ%m_4ô”åJÍK«Ò6Ý·ö‚’ÙŽS~´ÈguÝUÔ³+††¨¯¬’p¥Ï£Ýâg²q0b] ú`Áõl)Â!MK,1¶þwÙ£/0)KÒÆøÅ/½ÆznúØ:lŽà0g1äu]Ùøb¬¤™ý¸÷bš$Ä{Vé¬t_Šõ!¶Y[š ßI›é‘½OáY 7ø!%ãˆLyÓ³¢Â­`›;$ü|¼h‹»ïö~¥7è«t»‘÷òžÍÏïe“»i4-<¬´ v™¡Lêå\ ŒtBh¼zxð ýÊWÍÒ—Ãïóö¯œÔù!æËyÅú2ôÃT®gîExhDwá*ß[Œ"ù"ÞšX¾”T'(0?zo»ú$×d£qGn®2hÑl¹D#Þ–e΋‰>fðCþG®°Žšã…Å“Ô/{ô¦×‚„¦™l3tG¬8Bûa«³°wÖê\šÔ­oê;&¡:¿(¸Có6{é/¿ÙWX>w /H܉޽èä‡?ú—4³Ð¯<ÎBæZ! Qa6qö¿]m'“yÿÃ)Ý)h“SLRI2 ,ËúL»›b3K6¡Ž:=Ыçts16Zôk|§‘é³Ü€?¨‚dx-fµ«Gœ–2䘋fHï¶o÷Ú· 'kS×å0ò§ÑÊǦ¯¦…T£Ú]Œ4·žÅ`Þ6¹´Þcàu鄜üdLC^S‰l®`Õˆ¬j†±éRƒ«4¼ÝÒÏM§»DŠ4¿\Âäl»k\îµÏ=–;©xq}N3åk_µöÈ«KÑŸ:ÆT™•½Dn†w)0x»ì›òA?[³¿ׄ>W‡ÄAL3ì£øÏŒÙÔí¹Ÿ:U_+¦}{=:^ÿ0"’ÓAV ñ¯ÁéÜËè<6×rn_?ÃØ~‚ý¤õëÑdß^ÞHÉk¢ ƒ4‘¶×™¿p‰GDuã¥|‚øv åÍæ0Êy>ñ.Zº“lëkQLdÌøZ³³£?~ì«*7¨/ëj{FÈijæ®L—_.šü97Bö¨lÝ—®TÕQóý/ï$æØ›¸Àý«Gcdj´²a8$Ú7âí­ŠžôäÜíc§l½÷©ZŠÈ,*}îHYTëÆCaMcÉ(P ã—ʬÒBs¨õÚ{:&Kùõ†¡a§½æÎìŒIaV7ë'üÃà&Ó %ëKøÃÕÙ$?²ýê›ö74ÙŒdúU£uyÍÊ ’ñäŠÍ.Žx•z䧺jŨd©–gŸWÃé”Öb™Wc“"Þg_©ê§úǘ;‘Õ“£e>[A½ïŸêØöXÃî4|ºê\èy—!î\s’×ë…ÂÏ•1©e¿ ’­¤g[u%7wúK³eu^ÆÛ“¹ÞñzCt'6¥¦æB¥ò·Xåd±ÈÕ¿„Ñ'o8ŠŸV:GïšB‘;ȧª`ÚŽð|Å#ýRI}ðXÆ~\ÀÒcoÌà¤"©wƒO ßòq¸Å8ã› 'L·úéÉ9+Ú7߀ ™ÆV«©ÊWĤgù³áoZœk`¤=›1ŸÚê`#N/N1Nb¯óú¿2­8qç·^ Ǥo©ªÕkƒ>ˆÛ‚/¦…GL<Ëòõa£G„‘}ŸÖ­àäñŒÖ˜Qƒ¿•¹äùÙß ôoãM-€ÜRíPj¸Eìí&µx'J÷›9qf£{Š÷ŸyT1t¸´Å|c”1OVÍ<Õ=‰²Ng~¹ä¹€T! ŽDÄã~|æµÊÎØòšã”¬y³Pë­oŽI‚È–‚/&+,òk­ ]Œ8[V -¦õ5ÇJ’Ó­ÅR•÷fëHUtÿþR¯fâ½gHSî198X‰Ÿ©ØB$EïPDÉQÊa¼Œ‹,*wY1÷òØsÈ…p¼ëi¸ î‡Ü©o°DQä ¨“Qµä}›ô™ñ¬²/u„Œ!_™ÿ¢0U!½CD¬C¨pnO\Ç›çªIuØ»ÝÁºš•–}N´}&T.êaiÏž}ŸñPD°´êòMõ$–%2‰’âÉ+o†Ð nï¦ÙÛ£aQ£sÊT™¤›ª2ª™Ìµ¦êý¶Ñ4mL«ƒ'1pµ¡Ù!äž6x¦:¤‘V:SèÑñ×Àçv[ç?0_éêvôÊøÄ¨’Q•Çþ×ÍmÑí¨}9%ë¨vÙuLEèÿX õÁ{Á:ÎâùWø™˜á˜yQÎ#$…kàc$LQ•Û#¶2dœÊNLhWÛ2ö¢¡d™ÕF[ åò‚ÀÞ)Þ¼£w³_{$0eÇèÒÅš˜.Ϲ¶-eK)ŒMcoô>V2ȲfOª -¤Çª¦êAQ>D#Uæt*z¨æUÝVçƒÈªÂÆ3ômõ‹"/‡ûóé(%VGŽTrR…Œ8[W<}c¦;ôçåR¸Ý©z\5K™‘ßµw݃F+ðgU‰ð½94Ë÷1 #E–Wu©¥#«¹Ö¦˜ô÷ì«¡ã—Iùž&Òˆö{°ÛÚÈ80x64ermN)‰åIó2#e—þ,º#x£×fX)áUÒq3£ ˆ|ma?|½F-ù‘Ùl¸ÔPrFÉYÌÿg5£ÊÓkJ¢.{c6,c"À=Cyþiy3Ƚ#ŸßÍ2;¶°¤i]”‰Ü-¨äªÿCÅ·äI5Î=ÀÑ÷o q/í¯æj};Ê)¿”G6úd¤7Ä=WÊ mn'*íBNÁ€6u+é„’¦ÎhEà<ûÿÈGsTg}ð1\¶îµ©g;Á<–wо~x0'~øa$¦’Ux„}Ý0qêÆØX)åô‹¹…oóG‹ík祩zOö.9I¢Ï1.2¢àïlŠ8"÷¯b7 2Ùû)àåÑq=àhdüZ™…Š®Ækqp#•=;Æv.Þ©ãø,€DÁ18Hƒ?—3üLVGç,t> endobj 57 0 obj << /Length1 2060 /Length2 13884 /Length3 0 /Length 14988 /Filter /FlateDecode >> stream xÚ­·UX\ݲ¶»[»;ww×ww !¸»»»4@p· înùû]kïEÖþNÿ«Oú®Q£êU5Çì¦"SQg5w4I9:¸1±1³ñÄÕØØl̬HTTâ.  ›µ£ƒÐ Ä`ããcˆº[ØYlÜü¼ü¬\HTqG'okK+7­8Ý?N<Q{‹µÐ t³Ùƒc˜íêŽfÖ 7of€¨@ퟮ5+ÈÅdÎŒÄÆ0·6s˜‚,­Xþ$ë`áàù·ÙÜÝé—<@.®`QZ°H:X¢¹£ƒ7ÀdÄ¢äÎ+ùÿCÔÿ .ång§´ÿ'ü?Eú–öÖvÞÿãàhïäîr(:šƒ\þ¯«6èßÚAæÖîöÿwUÖ hgm&ê`i°þÛdí*eí2W±v3³Xí\Aÿ²ƒÌÿ¯pÝþ%E[^B]Oœáßýüך ÐÚÁMÃÛé?Qÿqþ³½1¸:.Ö^}VfVV6°#øó¿ß ÿO.I3Gskð@pq€..@o$ðd€‰ à˰v0y@^`Á,ÌŽnà-pMüŽ.Hÿ´“› À"úéßÄ `{#‹øñX$ÞˆÀ"ùâa°H½€EúØ,2oÄ`‘}#N‹ÜµÈ¿X‹Âµ(¾X‹Òµ(ÿ‡xÁZTÞ¬EõÀZÔÞ¬EýÀZ4Þ¬EóÀZ´Þ¬EûÀZtÞ¬E÷?ÄÖ¢÷Fà}À7ï3}#°NS ™-ÈÍdáöfçøýßÒÀ‰ÌþC\à`fŽvàò-œœÿXìíß²±‚Õ˜ÿ…à” ·à#‚þ+;8ÈÞèjõ— ¬<ðÛ¸ÿ‰ãì~ŽßBƒëlñ†`‹¿ó´þ+&˜ß‹ãôxSÆöá-8×?îŽî.e;Xþ…àøoê8Á´òv²9üå¶ý•Ÿ|t›¿Ü&Û¿\Ú¿®»ý_G×ô-2x«ƒµÃ_Úÿ9»ã›ðfÇÿZÆémÌ èrø¯àdûë'Xµø6u|k)'¸Nvî®Å[œßfœÍÙÝÑ dnj÷_)88ßþ; ßÿ¬ü·™íŸ&þÕ6pEßÒr7¹‚ì­ÿ{"¹þñyüÕ.pWð=÷ýàò¹Úý×¼±Où–– \ 7+Ð_c .™›§ã_À1ÜÿBp÷<þB°2Ï¿&¼Ûë/‡÷þ ÁåòyŽärùwªÿ÷¾sôòe’‰¬’|+ðp±úÿ—Ÿ™» ¸‹nÿz•‚Ÿ¡ÿe kð+ò™!-/8š |²Iký\ Y4U K)fÙ¯ÔÔ;Û…²”iWú]Þ™~£Qç±*mvÔó™È5ò«Ÿê„ÔY°s|úü랇É^¦O;‘Îe¦¢÷®ù]ÈzgëÜõ1¤òÌÆXE²nñ`ÎùÐQ ­„Æoø52ˆ>}澬OÜ<:R™vša¡ÔdjéÎáœaëžɉ0ë“!6a_V/¿ºc=!ä'½\̈èãeÏs:ü˜_´Z°·³FEË0p’FÅfµwú—©t‡Þ,ûJ…Ê tJ¯Ç—Ã"Bý3cÉ^«š€}K¾8èàz¿vEº?ˆþº2€Ó)2ÛK~lISJìÉÂôEÓã|ð tœT¾ )‰kvò\j.4òüH½Ô°¼C/ÈEõ2¾Ž·JÎ÷¾¼¯Õž¿Ëjœ4:1L×nOõÏJ˜t_0¾Ó{ì´pÁïØ2×uŒäM»zS{È%AMy5¡Ñ½‹‹[À€?-\o ¨  ˜<“wÞÁAâL!^ã²*W¥p.‹€"Äà'ätRy)=¾‹¶œÁ&Fñ“–‹Wÿì¾gdÍÞVÆýù°2)â^7q ćõ$™¹³µçæë0àzËãG[ëag½—8š b'?+°™¤=,õ‹IÀñWëdÉÃr‹o±Ð'þÊB«ß ¨éo‹I-ë&{¸YGÅ1I&Ò#]ÍîúÛŒêtXëe¥ÐP8¼Ã/TÚñ™Ós=U‰Ê¯ü»»"–vÏ­zºâu’SRå™7D{a¦ÞÅß[†Qfña_¢ÆÁ C«Z“ówì´Ò¥RL˜?û‰”j”±oFâw”íÄvÿЀV6x¬öí½g‰@µ–‘£ȆwØuÛÌ4Ú‰¬(ø›”Ó7û+wŸ2”†7žØæ¢×òØì¶“¿Ãž¦D'þÆl–þ6ÛZ$al é§’÷tÊw¶ùh¤ZÆòžÐ? - \·èùÃiÉ^Oâµ³]‹1«¬©&ý„×òûlÓÈY\,gås–6 ¤ÓÁÔ¬ŠèBL‰VK¡ÀvŒ™zLXÎY§Žo\m%ÍìFŠ­âœ×zª¹n½HDçÂÈ:ýÇõ"GÂÄ0éÝ»¨Ï[fïø‰ÇE^ž’¿ð5Ó»_ ¹8smÇ{JóPI òZˆÔÿð/&ó%Øh€­% ½L+˜´–o’À-Z®z*f‘&VÊR‹îD“ yË<¨ø~¾µàQTÜdj?ŽéÝÚü\øÃ¸ú~Ǩ€Po+Œ?Œzr{\?…G7ÊÙÇG_ý4CTrtuÂÛÄ}$U£ÎáàYOJ†oØÑƒÌ#J‹•Z§Óð=}ÜÇÛ…`«àVIªíR&½Û•ìqãó²(EQÖBèWþˆß¾:N¸üHÏ™u/ßòA´êpÕl’~Œ]³ÐOΧ:óo†Go‹åÑ–L·e£hã¦ûžË~ýàªOQ*û"ßµ•9³"6¨yÿ”1ºVצV§$~ÒŸõ$[&_Ìã]þ@2åËÁë(÷‚ë"÷šÌX;MìˆÙ<ûI%Œnh¤¾6.‚êþ(Ú½òÚŒ¯c(ÝAºf²„¾½]iYFà€ð»ú/ˆó;­a TZiOyÒN‰=“°„}gfø­R®J¢gijÌlà+y%Ë;§sÙÂzÏ:¡ÏšÎ¥.nå¨Ôb1—Ÿu«1æâô…Œøš ëéÌ9gz©ââê5ÝH¶œ{v啌‹g¦äÄ}/­¹½ žCø¥¢¸Wé.Ak…îJ¯C¸L+°ï+ ©£Ú€”O$Ó?¯-+M5¤ú~²±.yƶ‡ÑdY¥ëûÄFî£64qEnu–‰ð*,U Ôþæ¢ —y¢`wD¨ÄÖù_ʼnîáÇ!ªb cqóûýi8%ŠMt¯?îMƇwº“Lû‚lõÇ‘2Sg±<œ»=xYÐG N{}Kу ð~ÉC>^V¸ßú N$•/•lÒe¨Дéº6ßò3§ž5Jº/"=û¾Ô”̅̇ÄÝsÄ,îj’i”Ƴ­ô¤æ¢_ähfj$ý ¹°lRZïžhÛÆÖu°$¿Ù]ùT(«ú†Òõ´‘²%~æõ*½×EÏÅ|­ˆpRˆêú*ŒQâìOâáÄŸØYüñJo™7/(VK<j™³8ïÌ,p'ôßÓEû®”϶5_Üí.?J*iF¥ÂŠ)AÔ ÊÕ\I_#EÔ}Ó™†ä§ô˜^¡*…—ýB¤@&+¿àµ'ÕÉN\^›ã ~#ò}V¨€E¥¶*OÞÝwbé`ú±_!Ý?ÆU;Ý©c5îg$ða혫Yzl¿²æóºÙxØÌIÙ¦©÷ßÀ/¹üäºj8³þ ãJ‹[ÈÚ“ÿ'&·Œä¥‰èC£‰IëgSŒ ]p¯í«¹ýz‹x77uY¬è°9 á1ú¸5vmgM_“)X\õQ®¯þð¡g®vŸŸwШYõIÌÜ-%Sq³kŸ^±aú~avõÊ ³Æ©K°_ï)ÆmƒµyŒ ˆ³ËøZ¶MaµÎÙ‡ÑΙ"ù~Ëî‡ÆoO†mx¤©.BA)æljeI|¬ 9Ò…äÁ´xÁIi@uýhÑ‹‹©¸ñ5¸¬ái¢«½%­›eè7r.[<0‰¯û²í[å9dzxFyï—eU†í½µ­sõµŽ·ûa—ÌbQ¿JÈ+.ƒ&Pk·æ¥¬¸“C5”5áäɯ¨`ˆü†Ô‰Íý\•8Ï^ÇGTÏïîñ ?þüþIWþÎÇ"¡Fkˆ‡²^‡í¡ ½”µêyúV‹Ã²ý~:ñò žøÃk7–«\~ÒN9}Hd胙¢çüùE‹þ™ÀCñ6Z›B*.a§ñÚ¼Þ…Šó£sY\dF@þû–dÊx}.ÿºOO#o‰ŽY±aW¸™¿ô=ÃÏœ }”sE‹¶¼”=j ~õ:š!l`õú1<»@XhpÙôäUOÔ¾~YNy"×ѯº@×ÅWý;ÁÇÒ,)H$X»9†sžïêb¯]ÔøÅ…rTwôE^xï4ä³É›T Ø@/g¬YJ°ûÜ¿5kˬ¬>ϳÂ3oôx9…ÙѪß^›†¾Ne ÿ±€3âè±åVmyJoëq½kiN Úh{Îö‹ªk@Æþh; àÃǨ=Û; Žä{l†ŒÁG°[Ÿ*cü³Hhâ5*¸©æ›Uoí4š(«‹%•³'¨e;^²ò:‡SÑ͹gÇôÃÍݦÀ§'w‚ıZkN28]3vü6Í>+5˜T]bˆž“`"‡Hr*ʱm٬ŭè¾Þl(Võ½™¹æ TçÉb¦{Íp²Q^¼§|Õù~€ ÓqÊ5½h›™›–<Ë•[Z…zÃX›­úy·ôXÃ1³E/.zOò#æ.ýÕ•S$)¬AÅýUOú„Ò»øÇseO&^•n’ôP„•}M‹~³Êσ~«]èk%ýçâëLŽ×þ¢;¹0Æ­ê×û(ÓŽL”?™'ÈÊ*ñ%XT”­×l;,‹Î{Ð’8ÄËz>«dÃ+îàס+$‹áQhÞyÛœo1·ÈUÒýd@€ëòà |-X–ÔÜIºk˜?BÇ7à˜ÈàßÞc·¯ÌïÛ2þŽW(Ës ô#ÁÞi ©b„ºÚ)ÞÕ÷ÀbÙuäƒRj0rS/1Yô‡2”S1ìo¾…=‡yºAÁ‹L%ÿÚMÜÐbÜ6¨¥3ˆùpÇZª®6ÄjÑæGX-}jùbm¿{)©˜>ÜvÛ +3î+ –#ß-³ÀÇ/‡œ–|´Õ 8‹Ü.xJ.;ß(”=8ŸýêBѸ_sˆëÇ^L~8‰þä2Ε¼ºžöB'¼X:Q"«3˜…wô‡ôö*~Їߴ#»ø•)$.%›qæWz2Z(`Ýï~´6;m¸‰YRïç¶Cp;ÒÍúÀIÃüÀDxe a·ð¸Ä×f¢Óyºã ׉Ì9•lÆÁ†tѪGæ§|3€ŠuRÕg…Éqœ¢„RWTrƒhq›Úò‘Óˆ¿#›×‚è+Ì×§¸üвAšÇ‚'n“•ê[4¿Î&4n™ŒÔ¡|¤ŸsìÓ„aíÿS(¤µÇž…u«Ü)ë^žù³ŒÎ‘— ±êõèÆCþ‡‚Ý·ÐñæX`•LSR‚cXUÙ¹þ›ÐgØä9õtk^ˆ¨nÏ‘wŸ*“ u2Éö<…X_‚´ªw±ntââ„¶ˆ³Ú„öûæÛz¾uí“ì;ýIiNpdn¢­ˆ¼[\Oq½¯Þ!ÝüØ8T¡œë²"ÚPn¹}Pñ!;ãÒ0ýæàª¸–ÇÚÈ/ÂÀ[|þKËÒ©Úô–QwÔøîГ’Á³‘oÔ|‚.u^ª:0M†ËÔáe¬r3âã¢|Ÿ£×«Ð›äif?ª’Eè÷~ó¯û¯TÚ>9þÏ1c|ƒþpFqüZE#˜¹YÕåzÉI)¬.î%XÖxt{‘›þŽZ†b‘Y}š+zú·ös"Ý ÙÚÒBÀ<9|ó*öw È]Äu$ú/ˆ?›²úUX‹Âìcà\ü?‹~AÆöì‰Tˆ,¹DPþÁµŠ/F­1 ¨ò¤pÏ»“ò1ÛÆH#;Œ« m›XÊÔoäÁ†PjÙq)³c«í2°ØØ[ Êoœ@Í{šzŠqz©¹ûÔð;ȸ³Áˆ jLzV(Ì(ä —ýîÔ]@_üó€… Éæ¡vÚsîSÔ°;žQSG>±?æëõŒg¬Œ|¬QP%O,ŒBHçŠÉTÅ7æ¥fÍ_çêËÁV«/¨h~NÓsåym¦~b ‡.h?~eò›ËuâðzD¹þò CK°»8Yy¤¹0BÏé©]F!BzR»$&9n,:Aˆ˜üj~Ì·­%#ÿ™tÒTŸ¶ÕÑ%¢æ_Ç(üxQ{eðíkwd⻾Åý«[æÒäW;8S%´iš´QýX?xt—æ|F¼Î‚µÙ\–’½Sžª`^®9êÖü_zw"ö­=¼ŸA }ì›· —¸=³m¥lL;èÛ Hœ÷yÞÇ®š£q8¿ÐxŽd54¼‹`}èùŠÜ4È—, pѨž©Íx7fä¶Ñ\&xxÈhç(õù„„ ¦òvrEi™6ti²k«ƒÑÉÓˆ(ÞÍ4óô¨OØ/rYÚº;Ï-OôDá}¾¼ ¡2’ï?yúÔ®7ÅO‚Ÿþ™Øm“×QÛ—·Ýw_¤¿°¬uÄ>L¥m5Sß:q›]Ý+óÃË¡)…Õ]/Vç‘·h3©Ìœü³n£âO)é nJíÁ¨(slñèÜmgcˆu¥‹ŠþPžµE†Ù’.¤,Ûw Å 'lOùqä­v†ùn„N µî± ‚øo Ék8µ]gлH…½·œ„q£ü„ß¾ˆš%ï–<+}hÉ]à‰±ã;xÈ vòéq=güx,F´ŒÑvqª^:œì!M‚IE†òËAÙ·gÏðcÀêŽ@¢­Úw…þhPk@~ù.£Ÿ5ªÞ)rª°fèKî:A"ºù6Þoò±ÎŽk…Û‰7ǵ€Ë)в/Æå’÷”Ö;h ¡†e“[§Ï%‚Y¨—™ˆ¦õ¬œhanÑ"ß"ŠvJM‘Sœ<Ðɰ)ƒ©‘jo„>²+Ê" ¹ô…Aúe~;ã_Z6¬r> ªòhr–™&ŒDËÀç'Çú>KšõP…ì÷ñeÁí*—×¾½ZØ`¼ž Ì þ!¦a^pçá¢n’~Q;ûôîÝ•_Ê„!a9Já±Ó/ñJJáºåmöJí$‹;ƒ$ýLïo­ù¬?/÷m»¬ò÷ùi²LT"1}0©ÑÇ’ˆ¤¬ê…ÚmÔjqç¹Æ³Ÿ¹‰¯~<–%~KÄ‚¦ÉÜ™”šß‡†:°á=ÙõŠÙ±  µ ÷ÁIþRÚ(®¯GÃXѨ£kØ\xN‡ù®cœyªæ“I˜óÚwsñÆ'Yèª%õrwNTú,tNþ]±$ˆ‡¹|ÁÔ¯òs ¢½âÖH ÅÙ²Gc±ás:uŠÐމåÀo(ç—/¥>+Úû¨HÒW²4lí^ØJÒdæÌ9® åè¯voNªY­ðÎsä€cy¤H‰¾tפrøÉäÆ&Þˆiü«Zô½6Õðª&j½†ÙZ¬TR†ßõ d7!Ü›¬\·³Œc‚תÍ×Y©«âWnŸ„z;ß©“Õàé˜æær/4^”$ä¶ùZ)d5=|Ñ+¹¬ÍèñÛAÔpdq8Úãø~Ê}$ðyÈæV¡iÁÊ>F©®Ù¶ÿ1rÅÖBw‡Ò*¹Àb€r@,|3$¸yJ‡Æôˆ»lŽln:ÖJ:¢:ý96 fËÑ"–ái~äE]ìZ©y°jªþ“½¾ŽY¸uîœLqVæõ±RÚRöËIŽB÷NSö¾÷ÐoÇŠ¹R-+wÁÙÔ‡`sH‰ù•ÍÙèrŠù˜Ž±’Õ»¾Âá'~â°d@*Ùì;ðÍþUE>}•Z`¢BX:£øÕ ™eœÛ¸c.Ÿ‡xÃ/¡›Ò°Öîú]ºé…Ë~ȨÖJ‹ê\"Á ÙЇ6Ÿ¬OÌd»cï;ýhïé6’PåÃäÖ|ЉnÒ7Æ9ÝîëâëŒ:ƾw?^3<­g±íDG´B=»]sP»_ئ|ˆÑ|°•ÙPHk;ç¹_(n+CˆØ”A[[ ©´&ÎS‘x~غÀî·ŸN±S•üRLâë“'C¶]‹7Frlì©”»7í˜~:²<Óø¬VÔMÎ^áµf`å¥AL¨’Sê¸ëtŸ9뉩@W]TøÌEvLõ„BJÒw+råò#n‡P//iP£,œÓ‰m~ÞGlùPÕ—ð«¿œââPWUÀî™|¡wÁS:o ç¬ðî4wõWŽs†Ä—•Ô‘™´*ó †„–¼^jâ©4„”²ˆOØDöÊOÄщõuÁ&Î+„’4ŽÊS²LÈ]Z'¼!ûwÝfÔ¯²½ ‘¦NÈ¢ñ[Ë+ë6"Zíì6.Z5yˆ?M… `³2¤6¸¹€ AÖ,ӥƿw™æ´´qVËöú J 9¯üË`¼´Ðwê´öîš×ð[HÍ›sÒ^ñyK¥FkmÆ #}몂)Â!WW&›i8öÊ?Ú…Ó“_„¼«4Ó>­Fɜ£´º]å`±Í¯Nì¹OúpÚuL«CyÆ±ÍæøTúªâiû¶]¨)ËåÓÆ Œ;êUÈÑ"ê9IJцΠ›Ë „U¢Ì¸:ò;€LÔžÑÈräzµ_s™ l*àÌø1Åèß³8¹/–užrÊcöοpÇ£ƒôÃ$åήgž‚bà‚ˆõÏš†æÄwéž.€‡Óž@Žž·&’fk'ýJëç¥H´ q2ß‹õ¡UÏA¹©ÃDsеŠ6T™EÒEB§µÔk€5oªßÕ­™¬B´9"D0’ì5gjD;Çïüúó`ÝÆ-n íDÁPJf¦‹Ô‚}FfÓ=)@|ö–î±(`˜\O!0>WASK¾ÆfPX;íüPOù bp9ó1› ÂÆÿS¸5„¤1©c¤Î%Ár2Œ}ÒâäµX ;%Â×ÏJÆø–äÁÍ•øŽïžœ$sf·´úõ†uÝ?{99«?Íš¨¯Ðchs® –¯‡IËÄô¶$š‰õi‰¨Oÿ‰þ[Ë £„²ÉÙŸÌs'H.…‰“ÅDîøC˜Ù×»f°äÑÖUŠ]Ò⦑ØOWKgÇ[{]Qy±“õ',l8Â1/ƒ£qõø‰Ö:аNÝ>pˆzrr=ufj÷ÑäKQ@Ú1ßy4¥ÌBÙ”\z"YN$oUèÀˆQ¤c”É¢+ï¥ÃÏÊPvŒ­ŽM¬ìšF:·l‹Ç]Çñ7›OF"ä!Cl´èfY~ö¡Ö&EŸÙ½æ´ Ä­»ž¤NÏ43_é;œí`"³¶/¥' )&ár5w~ºñª Q—Jõù9œâS_¹Ú˜`¦'m9eï<Àù²,¾ÿ¤ÝÊó'øÞïE2YeÉ}u`ýÛЌݨk›ƒ÷ÃpUê_…mCDUÅ[꽫¥²UéϲX%%ûå‚…G‹F<ŒW6ÇÙA+Pׯ¸5ÁHæRV j‰ØXË­é1#kHIªFJ VÂéꎠՒµö( ³W…"îç<‹Êjì’5«™šw¸¤dâ <ƒ3+B‘ç»Vú®¸O¨R΃l]æÑÕÐz#EP…9ŸÈ¯\Äü”úe2 E 7l®‹¤n]ÌóFu)Uº%¬­jˆáÍž/!NRÙ9æL«°ŽÄ_—)–NÈß/rfh‘¬'f7Ù«U#öB¡bÈ4m„e’4’ËÑ7/ù+N {ø‚ôÝÔìç0ÒC¼¸úP¦6¯ì$E))E’^ªç­n‹ËõUÑu9ÈDå—ªHCBV’Ó?¶"?$9~bß\µ²‰›`‚øâúÀ'¹A§‘ºQ”x[(œÆ]I1N¦ŽØ6Œ±éà*§+ ¯Ù7ÛýìÒÕÇ>Hl©–»–ÆtPäÍWÁÓ·ýé'¤íÚ½‘³Úðð’$¿òÒÞ¸N©%§‡ÀÁ†("M›[NÕ̪ùÎ+¥8nT0rw’ `/ÁÛZˆ#Óœ»iÒ‰´\(–ZÞIkr«ãÇʨ˜#\´r3Ðþm‹â?'{ÝOßÅw¡fÒÓ°‡¯Å–˜ ¼žùãÝNƒÉú (2X'ëts?ÌݾA"EøöçÝwëHCÏUué/Ûþ ÃF|ƒ‰Ø¡)Ŧ– cP8¤2ÜsšFûì!öþ±µö>]ºK²ÎŽãÿ„–:ˆ?{oã#Ÿ{„©¬Ö¦äúì>¬êæñä¬]¡Lˆ&íÔŸŒ#sNó|ü$»p ÑÕä‹_ág«=Ÿ…•Þ'ð—¿V(Ž6ÐèëC )ò ;_› QË]Gœv` IGrñfb×!ã«qz¶ Se ë-¯ÝÚÉì?¢f”Mïw-¨ŠüØ*^ÖKï/‚ÿöR·Ìßr¿Š=X?µª:Áóã#{%=—ò²³–VÌ NUžõ‡®Q™Õ¸”ªÒ¹:g¬€sæ-Bÿ½wÇ)“r—…„’ô¤Ÿ¬£Ê\2çG§Õ»ÇS£oÔõ‚°¼§gX w‡ÈZ%‰ù¡æ|›Þ³j„{yZ±’®ˆ'¯Ù¬ÞµJÐ~YDHðk7Éÿ°7·dìË•L¸ð#ŠmH§¼;9ÖŠ¸>çTõñæ™ ÅÌ0P«-L%¡•´ŠašÛ¤Dím±üœà=‰ü,e GpÄæ~Z¾¨k[ð¨rO™T1È; ’H•!Ç 2oÌlN_¿Ÿß±ó>ç¦#_>¿M€ˆì†×´ÍH© øä»kÀöÀävø`Ä„‡Íô!w¸Ñö=øšw¿h !F$ByæÅ_ wHz´ºòÒpbð±ö7«!«—{D È¥ˆ‚tĕȕu ÿØ—£z’ý9Z‹¡ fšsÜU‹™Yw%Õê`a˜Ëún¶ðÜÆéƒ¸TmX¿#xì@»±sÿûÒ3™êæ9£,{7FÓ4ªBŠHH.Ï,ÍÍJ^1ºÂZk§ÕA¾…&¨ú5jîëºDmÛ;¹@½ØôÞúûJ×±8'J#Ǫ£ iկ¾Œ_߯†;¶ BD1ó€N©ª¿cp+iNk'ÝbÿÔx¢‰KÆN(¹ËúwøÏãõAf”øåÇ4&r)=Å~7™–¿ªÍVÒñã$Z¦Œ_ÒG>¿0ñ`©üQºx€PI®D«Æ¨ ©¯±²#DuW‡âœZ<~à]¡o©µóü¸MOZ•xsŽmݾýþLFhYVñsŸ†µ±ÜÕ‹¥Ñaý=¥L]Èe!•½$,#”*±&ÞkÅιc›¿û%2²l„½Vƒò}¿TCŠW[|Í&Ñ_™ÌÓøh£¿ÄýÓD·,ÕëŠjÑlјy¥ø1?Lüœr­E´íª:t:R± fXÙc+"¡·Næ"+»›fˆhï Áψ–|lÀê«Æ˜6É‹Z~/-A‡ÎÇ„K>¢ý‡âÃÏW|¥LSùÉ´$*àŠÐ9OFÞ«æ+S¢ä ƒsE¡à)rv‚Äì;K; /ßö¶ØÛïý IO'J%ÕƒG®²,$ؘ­;0”/×–ÇZüÛi’aÓÕÔWÜ©¡Oƒwf^F\X¬l:1ø‚O*Ìt‹2¢£ô£Hw®H#í,êùŸÐ ðû‘ó£¬K+ ±×S¡ìŒÇê&Okˆø[¼‘Í£›eð„Ϩ¸B'Æ-¡OLêè«kztãµR8=ÍŸ÷¥C{s,ƒÐÉ6þh“?ÏÊ„ÑÜüpàátäwœEWRß¶Ó¥¾ ¦ªI’tºªàÜý¥ßø ½\<Æ0ï •x~ßí³çõ‹Ä›íIVl׋…‘°aÔó¥ÉmRˆÁ„ó^ACÝ &p&=†nèW /¯.n•ÈN¹«Õ°pf%ÿVfQd,ÈñB¼Ð C¯šòÑÈ¡úQl¤¾„YQ@Õ 5íá7ÓIšn/ûõÐÂJÅ©4CȭõÄtWmêz+þa˜Yqàv%öyAþ¯¤¼}Ç•üäÑ`ßz„f˜o«#~‹nOvô; ï|ÃÝ)Í\§DGÙGÂÆGò„Ú9¾÷!E"Hà6ü&÷•Œ!"n=0B:…¢ròQ =»ü)· ©.oå¥P¾êÞ»Ý êÌã ŠsqÿíQ,jæN Ÿ´Ð¡©ýT’¨rávk¾MžØàâvu&¥ô*¨†E†èÏìW/‘o˜åál’#Þ=&êš\¢Ú¦¡ã?ª¨iC}ý?Î÷ÈxŸC… kοБ5 RÃÚÓÐcàÈè¥ä;¹ÅTW;~;“Ý“ì-ÕcÜŽkZã/ñ[õKB.ïét+ÀUÎS`GÜøýPAq‚G óÅ%¸Ÿ¯Yâënm¹ËÐmÎý-—~ßäö‘ }ÕR ƒ¾½Ôx&lj…¨MÿˆýáÓ|£ðhH%áëE÷ÝɃ´’0 ù¾&~|Lô¼>‘›ä(ê ë »5ÿA¢ÒÛšù£0ŒÒ¬¹g ½ñ§2É kûÞÅ~A—CAؤÅô„³PU–ïÚä2ööøÄ$¹¥:wÏÜ,»›.1Ƙ¤â`{\´Œ'`EäV†ÍÙíqÒx‡ªÓân/Ò¥AWâZÿÜŽ†,5pæ‹HOõ=œàýãÞjÈ7V*íOÔŸ¿r[f¢ì%ëWJÍüèÅf&òùLóžòØ€ö‹{ $3B–7SnZ®ÛqÍ'ÁƒÅKÚ?óä죷½>>ÌŽ•±ô˜ÃbñÕÓ%&V»®¢»DìÌ=Ž“ý͵¢Å¶%۔섕çÑFïòâÄ—Œág»vÔQnýTRHäBKPÿ ¾¿Ð áè7㯚oþN”Eûõû7A«ï$¥…sIÀûeNŒæÃä¦ðóŒ:hº<Ÿ|gh0ätà-±Ï“±lÈLªYÃ3´2ˆ´Ý›Ø­cÃ]“Ö¤j°ŒD«zë|-¯©ëøÕh€iw¶2B ¯aUR‹âpE)D!Žòñ\Ù/áVhF~¥Ù¥ÀxšíòÛOM“eúd¢”šopŠ”“16£`X²f% ø“ø·¢¦²ýJÉÀœ|¯´þÌâS6T÷jêîµ@ó bÊ@l¡RàÞ©³ñ“$Òw—ù†ÃÀµÎoËîÓHÖzÕÔ;¦ë܇m6üÑP/ˆ%¯ýElj…]{_´™kðW!..…L#ùMŸ…QóÕi§uW=Uîc«U&Ç_¥E¢§÷qPìÛ %«‡;´uÎq떒ÓY¤xwGÔŒ‡—l 9ÒnÛ覆&L*P?ÚMÇVfÓRÖ'ø8"UmÆ¥@nã[ŽRžõí2(‡}µêÝ,Ù"v*›¬>‡}ßzõ}DÅ›‚"ò}Ÿk‰KråŠ'¹t6áFÌIªcPYˆ6g@îörÜz Ê[Ø_‰D∾P|ÍŠ¹~8äñg`„LW7¢QÚ ý¾(;³¦\åÍî°pZÍò”JA•£ª›+ß‚)ºÉBûM¾{&¸hÎÍz‚A6Â&Ù­»ÙR¬M(»5_ÖÖÁ÷_ž¤‹÷¨»¦.RéÜeñ:¡Â¤´¢f ¯8hÁ Ùÿm ˜ ÏcÇjd• §µÝ°ç‹©Å®ˆy|›¸¯ˆ2/fž„8qÀl¨˜•¼ÙGê 9æ–l£û5CËÁùkŸè³@QžK ìó0Þ:ýæ4m¢8óÌÝÏó{L7üVõo¼ˆC#9¥¶&“ÅïfÏ–ÒØõ±çC&4jYsRÛüÇ?¨wÜL\¥)¦¨ô/BÌ*÷ :j¥«7žgyhÞq›ÇàiõuÅ ›u˜Â¢—”k/=â­hXÆ‘^–Y€°ë»Þs ϲÓwQÃÊþ:±²äWÃ×¾SÛ¶AtÁš[›œø2èŸq!‡›¦X†D·œýÈVqùrÝ(3¸¼Œ/áèýq´lHD¨Ø¥‰U“BŸ–¿‡ûi/´¾~U))½¬ä>éœÈ&}µ"£¬Ã{\çt¶p¬j·‡ žÃ¾ÝµÞÿÅÐ9¡±µ5Ôd(ššÜ®|•Í®ìú—Ce#+É'ªH¢¨ËÀ—îÁÎBe­þ‚#Me`÷Úèþ»bã*X§J¶$|YÊ™vsn;(ÁnúÐÔ?‡‡QZ¼xÍ=9†Ðs!^¤î©9U¥›2ÕîH¼Äž6­†˜FëœPç2ó :x[XÉòç™&¡šMûÿüü8îvå˧³xú…é^r“4o¯;²uÇ÷"Í6 CS =ˆó,À¦pÀhÒßôD Ø™ê1JRBxdo9ã‡ãv§ç‹]ûÁ#¢¤‚ê7er4¿üðE]&]e¨¡˜'=𜃿ªQºø.Á¦®Ço®IjÜ"j¾ßs¯eFX£ãrü-ZŒxð§ß®í‹†¬4ñÌ‹ š´RäÓÅѲ'½ÆB µ#"\Ê)*?M”±’{Ï5¬lñ ~/C$Z¹?ÕEGa‚}³Ùs,o…â±Ól5[¼&Vçìû–âÓâ!›º§¨£ƒþÍ]÷‰ŸQó•½±Ã÷ä.ÝkwÃ5$û»(´êü|+á™fhÙ5j}‹"ûw²„#Pºá@Ìg¥²·‹âD¡›âçï¼ÔÐCÃ3¨¹©|.5Ý ]ßÎKyi3' $aQ³¨Ñt9¤ú»ÛÙª\ø²Q§MÞø‡Fí’ÜtîñÇèc“˜Ÿ]–)&0á®ñ<Õ„âµm£_íÄkÜ0pÄ4E’HÕäÆå~I¨~OЩ¤L Ç1ZÝœüLó0÷<€œs¶»¾sÁªº†ËC‘°~jÁåøí©ã=×·Ž•1b—_„kF},Û%$Œ€É„ Ë,µK î™zýã—ÏøÂHŒ™,Š4’—Y²UGǨHãç¶Çïo¬Ûôd{2¡Êf¿#3rí|¹eÁ­—=1›(•pö»[lH¢—µÕ9¿2Û³_ˆö/ C½¾gr†ü2/– [÷ÆþÖT ŒÂõq#c&å¦l©ž…Æ÷ƒ«®u½>ÿ!‰m/C™ï {de]Zࢱ£hMï³ ¨æbmŸw9>¶”~œ‚©ë²ÎÂZ ±ÆË Ø ê®Ö¦5Î…Ò4MóšV[¡/[lÜO1æ:ƒòì•8§”´NÙTo”YX¿ß+ÑliXŠ¿Ø$ncƒKAÄf³|äò¾Gw¦5šÝÛ{{‘*a.n‰ _C¾•<*=õõøí#6'µlE>ù[‘S–›ØŽ0¡Äç.~KC…Šà‘q•?±¯Éù:ÿc÷uò«È"j6CWZ\¹ÙÚß¡aB Ž€|x³]hZ¡œ07è“!£ÞÞ»úî˜@ÂbhÔ^ tà;ÇÖ½4CzF¶É[ž’VƒS©B,z!§]b|òѯù³O{ºC_3dà½_OÕV‰õ²?'‡›ËÈ[î7XͺKtÔ(w#Ï{Ž Èj# Dµ÷tHa–Á9cØÝUïüŽ~õÿ©7i„mAŸ÷ä7H+¢Ø§¤ëÚOµ°¶‰Ü¦rgPñÛe \sKOàÂÊutFÓ.1õX£[çóxÝ)®Æ—Â> ¥Tb?Vòü…$`RÇ=ÁÕgÜÏol’³æf€1Šy®Þ&½–vàîò@IÈVJ˜ë’øt¬ùãùެŸÏÓ9ˆG)ÿÙy™ìEÉ©‘Ö~ßå¥A\^xÕ…öçij G#|8%ÍǸ¨™Meäó;ææ]€Ø(îo+ú™ƒ€‘[õïi©æ›±µg<¤À@U”ƒQ¾†Šr&•‡›Cw=¿µ‡~³~„¨9? –Ï.yxÑ™•a%~{<3.”Ø‘—]µDåƒjK$ÁÁYõ«ïiI£Çú%Ã4ÙÅYÔYárË9tˆI§‘4”7ÁÜáŽE„ |[¤Ï~?|"Íg² 6ÈšWGV‡~ æð`Ž*:É—L'nž«Ýí­5ßô~V0ÊuäC–ZA{îìEÏLà{ž7RíI¢?Y…ãªæ\§k}ž(þ€#[¸ o~*†AŸDg4ï£ aÓ-BUº»€ÁãÜV…$Zñà^V4vwÝ_OR.Da¡…𠽇z"ž÷ý²û.¬Íš¦Ö&Nn­CW ×Ä×ÏzObèï£ú+Òùë®<ÜSSî†ú•¶Â+Ùý5ܳ´Ù–©Õ{½ð `|!b€Bœ‡’“H|Z[+É ­Y‚ôýц|‡À®è1¦ÁÑ¢Ú@æ~áßÏNÎÃ6ÚÃìDë5†#lÁvÛ?©DjePèÃöñÐS™´Ÿ¨»ÈJí>0µï¦½^YÅ8l c¸¸„BÒi[ðjߦyFÙŽÀ|=búÿ5/ˆ> endstream endobj 58 0 obj << /Type /FontDescriptor /FontName /WKDSZC+CMR12 /Flags 4 /FontBBox [-34 -251 988 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/emdash/endash/equal/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/plus/q/quotedblleft/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 57 0 R >> endobj 59 0 obj << /Length1 1053 /Length2 4281 /Length3 0 /Length 4942 /Filter /FlateDecode >> stream xÚ­“gX“K·†¥K/ÒëK 5J*ˆ‚E"‰ „‚R¤ŠHï½*Hé  R•Þ”"½KQPNtŸooÏþþž+Þ{Ö3kîkfETÐ욌s¡‡Aãd `Èà’‰9D €€åhDE/a0ƒÖሊ Ðòt räüyå PQàÆÍ‹ttÂâ—$~…”-WéC&0œ•ØÃ†®aœ7ÐB¡ó_;<s„‹GÀÁ4G:à€;G$šFö—ú.PúkîéöŸõ JâDI €¨Ç QÞq—Fö †x‚hòÿ!õïæzž(Ô˜ë¯ö¿.é¿Ê0W$ÊûW7O ˜`à,úßш¿ÜLp¤§ë¿«8 é …vD!¹¿–zHn†Ä98wa(Äïuþo â½ýV5¸a®cf!õ×{þ®™ÁhÜuo·¿»þ ÿfÈ?L¼,’ØÊåä Ä ñ÷Ÿ¯[ÿ:Kí€#ÑÄP<À°X˜7 q2ˆ¤܇H4A¢°,Á·Ä;ñîb°4¿žSIÕûµô›”‰döɲ×þ&âëÉÂþ!@Öáo‚Ýd ½ûþ"äߨ(ÿ ñÆY§?PEþÊ€,ê$žìúBˆÊè?(‚ùˆY ú“~©¸ýS>O$â@bà$ˆ.Ø?èâñwàþ@¢þ7þ÷hkc÷eä娢 ¢ ()¨øþŸœƒ'‹@ã~ÿ·ˆSô¾‹$ÎA@8ÐLŒb.;'Ö„úéæ~xA!I¢íXu¥ªu¨™6h<šõ¬ÛÈ]rºÒê¨(åÃÅ’€× GX“ÏÕ>½í÷¨¤‘ŸKxû¥”{õe-9=[ ÿ•’0¨åœvĦ³ºìLð멼ò«+«3ÕœâCu{ƒaV¯ÓRÚ PõH™R.ä}ðð°h{¼ÿx‡==~V·&ˆþrK™{©5ô2û5øâŒ¼˜Ãžê#füm (½q,LÆ(Mï#;›y”$tjAf3"ª—È´58ÄPT±GFÍßÄœ¯”ÊÒ¨¡i§ÄÆ•¯^8 ÃmŠæ,^wØp/¼¿Ðj¤²Àãx'*SsÌZ¿fdÔgùDĵN>IJ¹oYìI ®¦¼íAô\Å¡/tcòAx`‡^Òë|¡ýd«€ÇfRehŸÓñGù‰^—M" [Ûœ9'8¬âå~ þ#cÑç§otL]èÆ#õ 33'1¾Ž3ïûŠ_l}¸«Š‚ßTüתJ±bqr Tó7´E`O@äþÆd*c©ì!2±™”"®âŽw ×ÒjíïäÓo¹ë åÙÝ×Í~ldT¸>Ô¸¸_[õ8×-(0G¿Gº§ºK=Øóce›R…$6ú,pοS ˆßFî4C”u"ÅáªÉQ‘‹˜i©_ÚùI9EJAÍ7ÅIµ¨\É÷­^¼\ù†ªè0k§ãuv_q˜[ÅnŸ±¡Vóå!\ÍÙ`; J{¿þ& Ÿ°M§ëòÚ¤;TëºÂì=Т®¾ò¡»Îúãú]‘¢¦@V\Íy¯\-½¦NãÔ'‡Ö¬3)Ηã,N£JøSâ¾Îå]¿á]h“Lf’áxö½^µÇæ­t ^Òºœ”ˆvead@tä}ÓÛäJù‡ò¢øyèÓ“+€&¦Âïpe^Ûs·ñ ûÈAÁð؆IÈÒÉžXŸl’ÊUŒÎà OƒÞÐØ3¿q×yÕ°´ùº#(ƒt1çdúXÒ÷A¥+†;„5Sõu¿È¬v˜âdÝ“«w³ãîDY>ª“õ½´èùvÞQPãÈ{XÈ—yÈÑÓھʺÍ;cC·O&Ÿ»ž¶i\×<Ÿ‘P ™Ò sáa–'Fa¾7/ž0¦Àp þ`Ì*xÝx~ÌØJ³çFK„"—¨!Å'!án š H¡/?…»àïræ0Ùé ¹Ôñ"IaÖî‘åX’U§L z.M…>KåÜÐdê}áBõ¸Síý4,Å¢}Þä·!‹uÑӋúåYAi7ê+í?Sm‘Bb“¾W –G+"El7Bö^¦y<˜u– #ØärѽUê¾Î›³ ¸ñyV§Ý‰«3Ñ»Lk4aµ 8-ô9yÍͳÚ8wE$n†&bf›¬Œ±*L:öÎ[ 7PJhÃúZºøUY½Œ¶‚ÏŸE6~4tvÂŽ–h#æªwt·Vª_س•Eìj~à”W cî)ÀÐ dŽ­LÕ9Ö)Y™|ÞH/©þL»™=|¤×뢯4 ÈÈ¥ª#È–élû“w*­ +KIõžrûư2nÄã.8üë£UP½¢tXS§—tßøÅàˆç+ÏBv¬¥Pžk^š×LBZA9O¶Þ]øVz‹)ìvdM̲+I2µ”öp–qüRN|È=ãÐð¹'\Q%U[a幯[$‚X.SK>–™x‚èM¦nzãì˲øÎž·N””ß8kÚ×ïÂ?ƒ–]†Ÿur£/{,0%·÷™m€¬4Á-ÀKÚñª®?ahÑêù|êÜÛðµÊ@?¾d’íü)%Ÿî°ÓN»˜¼( BCÉG‚tµYÁ˜\LuF èõ_.ëö,D ¿OxèïãÅÃoej8ÏLj{yz‘YÇÚôAì2Èeí¤Fý;¥ë~K¨ô^‘ø‹&»úi2|P‚±XVk%MÑÓ5`×çÞcóÞCtùÉÄ–ŽÅ»J}ùÝÝÀUpí :ô«Á˜äæòÝaºÚ±ñ¦¤ÒÍr ñ)I„ŠPÙÖW½ñ`-x|œf™T$˜4Œ™Ä/7†òê}?w.G[w‰ñe ½§i¿ #¯×ß·äëëÞh—µ„çÍ ÷&ù'ÄØ¿eìVsu\$¸}ì„zX¶I‡Ô5Ù)µx¼Ž¸ ”Á·îH _u¡¯Ä@Õµêk¤/³G\e1óÍ®ò%ž‹L5ùg²âûIÑt¹¢[¸\kn•8ÄIðá'ë"©>K^®¸oÜþÆ`¶ÝKZ"r4d?kÃ2î^õTè1Wãa@R™§™ˆßÉÓ´ ‡>Î)P§€¦Mò)ÉøMb8ëŸ7=[˜ºûȬ}wÝoœ[ÕIékƒ¾3ós^‡lziƵl½eÂCâÝW±>vä!vVU“Qœi7eœÑ÷¤†…ŰgµM׬I'Ò„]½0@bŒ•Kul#”4J”6zj©¤vRÉÒ–0UÐߦcÙ,Ÿ6ê$œ ½‘ ÌíÈ:÷~b$üŠªi»fUŽ…{}Þ _\—ë©g¶îhKmâ½Øe¿áͨžzöÊ—e ½ik ‘j~£YÚÅMä¬ÈðK´dHþ@™D½áåØã˜yË0û¾9ÚùQGIèÒ”ÁáuDÜF¦r/¸ž,Ÿét&‘q¤E·CªÖüüy\iE÷ m¶ïŽõCÁK$Û¯<6Ø¢Œ½Ávet¬TOnȹ°k {L7ˆ%–ò-(á¶P§™fmZP–'PM›}­®B]†ïâ.z¦+ãH5Ï՘߇Ž$/Qs #»í^×l@±}1ÏðúûvôXOxw ÝW ­_Ë*ÿÒ#¨~ÇqGÛWÒ­QªõÑþÇBgªÂãCïZ«OÒÆÒœã.{p)¡ÕÀý»ÆN¤Q2á¾æ+ÉúÃiýOÕeébȽš>p_ÎÄQ,ekXÉ6óp—fUÔ´Ì·ît³oßqSiÀüÝýá~£+¥B±=š*íšÃÐ[7÷S0V GóåjyQÂéŒÝiwU“™hŠË˜uÊŸ§ùW˜ê¹—Ü¿6“JvÎyš·þPÀMUÂVü­ÈëÄ A‰`­ Y¸3Î9‡‹¼2…Õ“²­*JfWíwON~¼à¬aØAwoyÆl@ÜxÓ+è¸x]^›¢ÀÆÂ-nÙlšcö,š5sm+’‰Å“4)„­€e õ ô‰"9õàݾr©«+ûê)WVóvP×-éï ¥ãÕb8ŠCÚ°µ>4Ôµ*¹¾lh Þ˜tØÁΉ*X™Xsï¦tÕÿ_UgȪâÜœÜfS3ãî9%m®`Ô¯ó<Û]HûR CX`=¦1ñåÈ›¾f\~sKq}™ÿª‡j™6gÎÂúÿoÈÐf–| £¤|™÷Ç’ŸÇ;w¥é“œ#zA=üßkaT‡ëë–Bëé=½eãÑ]zåc"¸NLeîîZ ‹PƒJ$¼jÞ%šÞ¯¬dâÊÓpoQqÓðqE×Lå‰ýÛm>Ô{Ù|xÿw­†_Ô•íŒâð;ˆ•ˆ ´„7]õJ½dtl—Éoއœmz9oþÀ·i`O?f,N*¾m?ýù4—ßÉÍnta„ׂôœvz7ô"yÇAÁWö[ncrÖ3‘Ë¡=W½ÑnŸNtöóìèB~Ÿ@œYåÜdS¥É®Ê Èý£ÝuÛ°ƒÎ¹`³TîøÂéÍ Ô½+,³-Þ4…f´K]¸,îÀðóe€C¼9Ô ƒÒâ‚HÈŒfI :¦3:Y3žüB¿cÏð/[!ÜZ¾ ~^ìòDÞW‹„˜‰Íö–ìÖ‚õ¯±x±Á…3ø õî­¼‹…?X×ɪí=ºšiòÁ«Â$¼›§¢á+Pfë®ÚÜ}B¼v{–nÖûÊlDâeLir:¸D¯û*þø¼l¹øQùÔ Ï¤­?s¼-l¹œ7òÊ.®€O$Ò¶nÝF ö55 ¼š‘üŠÇÉ1}IîJâ^ zní¤Îj§3ÿ5WôG|H¿Â59:÷àð>É–†& êQ†uߊîbÓ ÃæØËúÏû¨•çtÖ0#ÜzƸÏÁ¨nÈгþíÕ›†.½$ÛŸÒHŽGŸs¿=}J‡´®R 8UÓ¼cÛéWÉ;ì—æ>ˆš”ŽòF%«¼ãâ¥E±æhZ˜nô¤8µ×’ß|ËŸWHYÞÛ'0”ë§euDÇÉ2žˆ³?H)í@sZ¤ü^÷||Jîúx ÄrvÈ}ƒ -’b‡!%ÓKå˜ÛÞʼn¸n*OëVL¨öתü4®sPKátK¹ÝÚ=`ÊÉΔsãUÐ¥“J±êl¿y67n:ÜØ(¢R• ˆ¾±vüº¦ñ°Têð+~û`âÚ#値샓­›íSëÃ*»¼½c²ù #½ö6GuYi¾]B2î·¸çKôMŸ‘¶®zKa:ˆAޝrì(½ƒ ®÷匹£èà~#{=fð}íêqÏqp’_(¸—”ZFƒ‹„d%Dããt«ê'ƒ£îUÊÔO“Ì¯ŽÎðWñlüÁߤÃÞÔþɼ6+<[ zTéâÕ§« h;ïVšqôk=²wrm¤¤f—Þ~|MQè Oèæ#µN%u/+Š]6‚Y¾“ÓP8 ©TYí·¨(*F¦“­lY ï¾Ý×PùY¯ ºTï²ÍšŠ­´ÏL|åò.œ<ÙiÓI¡ŒW[îÍk®o€L¹dÛLžÀžøןMõM/¶ÑÏþ²þÉU¼§Î'QUNôxÊ%¥b«Ó°é{¦K~ñqì'^˜ ™Þg‹ÀŒ„:[—ùÞ îU)ºe%©yae†+ýÝ$dü¸i~zk›"þ {ØÎWÇÙ…˜ž#^÷)Ú ºX:; ’¨Íz÷ù²šýMǃÞàge]kÚ %tîž8&ù)×Òú;¨½hg bù,Ÿa~pËràÝ¿íhÍ}ɃؼØs5yrÓÕ]ïO¿Ih*eÅÇÀ}»«„1¦(§®û 1¿O¹¦Ú¥õp{!ÎÛr­Ë}jÖìúÉzK(”äçÏùD³º¾ý‰/›þnKÅ©1”Ãrè µùrA¹é‹ˆºÈ‚ÌwáÏ¢,kǤ&¿ÖGL¼G²ÿÌd¡÷ endstream endobj 60 0 obj << /Type /FontDescriptor /FontName /IWRDPU+CMR17 /Flags 4 /FontBBox [-33 -250 945 749] /Ascent 694 /CapHeight 683 /Descent -195 /ItalicAngle 0 /StemV 53 /XHeight 430 /CharSet (/F/P/S/a/c/e/f/fi/five/h/i/l/m/n/o/one/p/period/r/s/t/v) /FontFile 59 0 R >> endobj 61 0 obj << /Length1 735 /Length2 1053 /Length3 0 /Length 1567 /Filter /FlateDecode >> stream xÚ­R{8”Yf·–ì º*’[13æ’Qi0&j¢I¡T>3¾i|ßß0C)ŒK[Y›TšlÖ%m±‘B$ÑMJ¢mY¹”J²ûѶû¬þÝçüs~¿÷=ïyÏ{~¦ÞkrDX쎡øBª• \ù ÚQH®2 uƒp˜ ¨ŽŽTÀ‘‡P™lG6J²®˜T)CBBq`åj=FbN,C„ ø ‡BHÖ`BÆ•v€#‘Á؉ €#`Y$,²#Q©@„q‡ (É~֧̌¶H.ý E²Â°"LZ¢C%J ‚ƒIö«0â.˜pò˜š(î.—HVAacòDF_ P"QþcaR9ËÁ2t"Õþd‹yØDÔ‡$ˆƒ†H`@ùÔB"Ü,òFpa(†$ðxFEM±[°çzrÖø¬´ÿÍqÈBPÜG)ýGtŒ;^Sÿ­‰ldˆl ØQ(T‚H¬Ï»®â¢BL„ Ä80˜’É %‰˜ ¢b€*@P¬°‚ðko‡b8q‘lÁ˜Œ4ö™tG`¡ðX“ôå\\0EÌB ,¤1U*X ʶÿ…r™ Fñññ ’ø\#Dn0¬€…¤÷0¡“J|à\R^,÷ø­üÉ6š.!çÓV•TÜ.Ÿ’вWSr¢nE¸M[±ßpA–¹kr—IÔˆQÄ÷e[W7¸¿Š O˼;ÚØ•}ÑÈo ‹¯ì”š½MèÖ½tîÎ놦Ws[}^ºε#}ÕÝǼ­Ü|^h=6Õ¨Üy¶òŠÉòsÏ’¬MN,žï`*ÐË ÏK¡'·Fé¥ï›ÔÚ˜+NÖ¾`û¨+“O>®}tÿhÀ› u—²G$Uý/‹hôîÀÑmg ÿ¸¤ªuRï|ŒèØÐ}‡L>)­H‰æÍ®åµqöÞx´ ¢o¾%ýH¹:(oáìiåò¬Õ«K†æmM‰_äÿñžžÍo½£m"ž¯xx¦‰eNüô¼ºû”u†ÈsEqÒ€¹Õ@‘êÕÌ%Ïõ/³ W{äWû0’UÓYjlÂU±š.[BÓ2fokzCÚLKlï×oRÓG~†õnL=FÛu]5Ç·ö[÷æ+#qô ¢žÚê›ZÞÌ›¹Œì:ã´Š¡¤ªK–½ÃÜ»Ëß–k­ì"‰½ª³_²×Ì3`+˜ö”Ô=7v´êx´³®j—vì‹&Žæïžv(cÀ²\­Ž;•÷°{ÐÄÛuG±öTµ~cv·¾Ý•,ç’ò¥q;²«­éɹÜM%”ÍgËÝÓmÏÌ[ôã|žY½¿¡Ä.÷¿(ÆÏØgøœšáA3ÕAgú­02¬ ã;ëÏĆª6Æ,=ºzrïs¨ÙÞ˜ðk˜{ÍZs^jd(M>gèZµ¨ü¤ï]'ÁºnaöS®¸‰ªïB/*Ô)Èq ê~è¨ÜP$=°ŽíßÞŸ‘’ì8˜”gå;eÐk©Åº”“ït§´: =ýeä|³QWY.¡ëf®ÞŽ}ó  ¶å5V™´kó¦âIx~Ô‚þ·­f ¶ôIík<Ÿ‹U7‘n›WFxh°6ƒÆ†àèÓéÏjêM•W­¬¯?g¼È1žds«ô¨É» shG ßùf‹Ï"ª´gÃïè2³¶°Uè$¹)ü}‡vÎßÛîöŽYYm?ë˜Ý‡ð¯]oÓ‚L”kGXZ+;ß×ô«9Z‰³rîïe“Z §¾¿èž§¼ð­h¦u}õC!ÔMN7 ×.£ŒÇÒÜÊ|ÁòI#©™Už¶O6¨Í(.Y|¾7qÔkAˌҪæèVë$ryê  ,—¶ñ ”›Ø`>¹Œ]=ûZgqUÔØçPïü ñMDÎ}áó-©é<^Íú¨•Q?ì^ê£îàÏÐkT$ä$Ö<¡ r×»YýÄ<²¯‚¾‡{Ù³gÓthîtãM}ÓÒtùCl¿ÇæN½)œÀ/×'6µ-‘ëþ T|öw endstream endobj 62 0 obj << /Type /FontDescriptor /FontName /EJASTL+CMR7 /Flags 4 /FontBBox [-27 -250 1122 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 79 /XHeight 431 /CharSet (/one) /FontFile 61 0 R >> endobj 63 0 obj << /Length1 751 /Length2 1206 /Length3 0 /Length 1733 /Filter /FlateDecode >> stream xÚ­R}<”é&DÓŠÕÊÇ&ÏØØ c^ãëHƒÄ˜’3ïðjæ}Ç;¾íf”µ²eI!ýZYë;i“H”ˆ=Î!Thk±Ù—¶s~Çþ{~Ï?Ïu_×s?×s=·>™áeLç`A°3†ŠŒ! dÝ<­D¡’ôõq˜%B0Ô‰%‚mdm º8˜RD³1³¶1'DÀDâHpˆlsܾ,²t>Œ#l ÜX¢˜Oô`³xÀ c#°(’è<ð\>!ž°Æ%0‡B‚ ÀAØ"#(ÉdÙ+ÊÅ€å‡2G,øHI`\H˜Û“Ûa‘ƒ¡¼HÀ¹$wŒ¸ &œü?L­nî,æñÜYüåöDFcY|„ùñbŒ7Œãèj©/üÁšÌAÄüÕ¬«ˆÅCØt4˜ê‡"tF"`±C—ÅÂ+uå¬6AĶbÁ„ÁÜï²ÛÓpå7W( AEÞ‘‚ÿ4]Ö®`还ÈG"€•B¥B„Xwþ«®Ú²1‚ã`A,gE’ˆ¹ ˆ†‚ràG~M((&"Ž"’XÀÅpÒògš[ …—‹+Ø‚ LDáØ þû›°ˆhc306%„Õ’ ,-¨±ÿ#d‹qFE+ãB$ós"GŽ€Ù¤Ç1¶mBhN͉²¸ÝÅÝå ;d‚Nw¿Úò i½´ÿ{Y^é½a;†«˜óy7Œ)Œé†/~.LiŒñèt~y,,=·ïý˜$p,/ªîsæLž[ä¨@ï­ô…JCMïܤ…ìþžá޲¬ƒ%m¯n½(blsòþ—â²Ìu?Iõõüš%Ó9w ñx•ÙS57¬,ÉßöÑGå;ËâêdkÝ¿ÖõŸ#I¤OMü6,\3yÒL‘{䓵©fã JkÀÅåçóÈs+ÖÅ0—¦[×ÊÖZñ ÷'->L¹ªa©zm9ìTÒ±÷P§¯¶v`özõFVÊ‘‰Ï†ÌT&@<˜¦­{[¹Ó*ÐÔ¾‡÷©­¼vÒí2ÌŒ!9qçUwÙmmÈQßáZëpý›‘æ/½'ÉݾÆéAÐ&éúâÓk®¶ÍÌ É:Ú* N·Ä6= é^šò@»í\ª^1+ƒúƒSƒøíųžêF§ë³wþr_§öÊ2IcäFÛ¡þÂ:žéÿPœ;;=}SÝ#;TdõÒ~ÚÁˆï®`&}—Ú2œÊÝ;_I{YDß*tGпbçxè÷àóýö’1Õ¥w4êgÍž|¦’°­ÄP0ÿý–öZDáµÍû/ÖßÄKÕ3kïn?úÝÓ']jŒ?|;6ÈŽ°•ɘÊR¶<çIis_W—°XRK)Šo|m`óƒÓ•¸–‰ôÍŠQ gg©Ž \föWæE9öN8Dj6Ñ÷K`hãÑÀ›{b¸¦Íï­r~JÕú2”ªepãòŒø(M¨n”6»V?¶¸h-¯ƒiHk.— ´¾¹Êˆ˜–sHjÏKÆ›ºègä/­’ªÍ=Ë,¿÷¸´©=5°Ùa,wWóøÛ Zlr Ù©ÜTj) ²Áѧò¿PýZ+¨Âè·ó;ªDC^ÒŠKNzïì2Mc}dÔÚà‘³”IùÒéú‚À€&=Ûƒß=—9Ç2}¼º+÷ærfMâìƒ úæK*r­Q¿H“Â×ì9B+=;TŠ]S¹Ž”s½™a|ÅûáûÈbeY/»˜Ûzɔꬋz§Æ½bæ"ŠÝ s.mÔí7{êvpøÂ°²–äR´SªÆ íÁd .;[ûc—­ÏbB,Ï2çŸöûÉRdÇVyñÑ…žwQÃUÌÃbrÿIÌÿnÆT¦SIào5>¨äÃú9,Ѩ~d€f³†[xú¥vw!ƒÍ[ ÃG_,è´¤IÔìûF*K£üKfõÉ%ÞR—¤ÿ|¦hkQçÛü›zAÉa2WšÇ4˶­mXˆQ׋WßÓ›cj¿4\WŸS^»«{öUlZãIíS† ßä¿Ý'ïô)iË?…wŸÅomß‚_üEçßúJëÜÍ5[Èš+3–‹`²¹êwÝÞwë®Ò°óOs> endobj 65 0 obj << /Length1 821 /Length2 947 /Length3 0 /Length 1513 /Filter /FlateDecode >> stream xÚ­’yPSWÆ­´¢7@Aä‚FA ÉC$Ô… A”"("¾$—äIx/>’˜¸°X¡*âÂ⮌Z—FPZÑ7jDPpÀDG‹ Rµp™â¿÷Ï;çûùÎ¥;‡¸ûJ 1ä¸Êa \à' GXa°htº QFàsQäÄÛ¾j@Ø€Åáz°¸lü¥ŽÄdrpösé5q€o$1 Šª’Ã8j†U€B‚A•Ž| °¨÷DÄ¥Q¨øú@˜¢°€¥Ë\?ïµO F1\ªSBÀúæî«‘o5•‰iA‹Áb!”‘ú¾üE¸l.!¤.l/€’$ª£Q/ˆªØ`-0\ µj)b&'TÔ@E³Ä$­w­ÅÅ£’Øx/ïÕúÛlªK%U_[`Êzß$$á*5µ½¯^OÀT¢$*#QeÿˆïóàñíZwoàîíEñ!ˆàpØëÿc”¨I⪾'G¥ú¥ŽÁ¨M@¨…ZM5!ñIY¹û¦ óÝÍÿ‰9¬»üTkù•¥… û0éúvŽÈQ¦:Üv Á˜Vbk·@â³k ùûxƒp[T×Á1'ú¼£KÓ“ØÅŒ‡!6º_ô™Ã?ºNm (Yµ$kÿÆ;n1Ù¸wË$·š®I‰å–9ÒÞ²C—ßÖW[Œž¶è×iN¶œšãæu?XÛèêš+^&î¾>SÒy§60 Ø&ž¯ŸjŠ™e!îBß<¥EÆhL&WÑ3ß«÷[V“þ32h[q„¶Ý~³S*ýeiÈQík}‚ÝÚ7•æ6÷6?7x½.h­ØžWVw·$åzs{’ÿeûÀ åžòÛrWaæX«Þsð¹g…ão­|ºøìoHê§sÛ# ±û vÚÏm_³êXÑÌ·‹m ë /d…¿8\TbQ]d…Œ™}¿Æo{wî0áí!zÚø&³PžöœiÓÔ1ývõ]ÿÃIqƒ,Çg¯EÐ A(ÿãÃÕ¦ú­eJÖɦ54䯾Žs¢¼öSZ:÷¼ãà™VŸªHNLÐL¶t8¯¸Ÿ*x¤™PB]µYiá2? :½›=å…ŸžwÑx&xcJ'¦2: *]Ú~±ç7°!óíB_¦~Ê¥wg–Å…í4Ý*vÙ7É¢ñï¢áÁ²uÖ:‡Q3¶vw·tŠ7ÜÌSZV¾MÎ*Ëb#ù]Çæ‡{ü :®µšÎ¯Èy–VÆëñz¹À7eoÆÏ’HüáöÑ“³#‹v«ç½MX›³¼9:Ñ~(> endobj 67 0 obj << /Length1 751 /Length2 622 /Length3 0 /Length 1137 /Filter /FlateDecode >> stream xÚ­’}PeÇ&š¡@y+{¢x‘»Ûƒã¸#¸¸8Fîwµe÷¹cénööðnÂ!yÓaTÔxÍqŒ†Œ” ’F" `@pLÂ)H¬ö Ç ÿmöŸý=ßïó}>û}Ö‹§òÇ© (§HÆá!R ‹Q¥„'àxyÉhˆ2E¾‹2P ‰á @D@ – …R„5•m¢ M&¼e>f“„ë M`( bP&êØ Õ…1ñ@¸V ”æz „zHçBœÇA€2 † 9|3‚TS@¼¾Œ²ŸJ¹Ö³PÀ›…ô,"N‘ZÀ¡šÃ¥Ø³ Kò@m —´ÚXTgŽ7—ôœŒê­é_¥Ë601ir£5 ®³Å@œ0è6ª ÕX8©ÑBàò¢uÐË #ÄãËjT«‡këÄ7¢°í­ðS·G$Å'ù­ßꚇ$“`ʆ@ð̼6#Ïf¶#š0‚4O @X#û<}Ûµá¬H£p‚Ô¡( 4š86J(} H4²À|I1ìÀ6“ÔÍ1_*øT6$3Ør!cÖ8ÏKDeÜç þ6A‚E@,–äÿLjh’ÌÚßÂ6òtVl‹!Æ™£°²j¾(n.ˆljy‘o»Ò×~g¦;¹³ ŽÀóU¢†x®†9³pj¶£¢×ùƒŸ\¢±#Žôç®ÇÚýà´c[GùÉsɇ EWxã*gSQùÑ—þò{kAÑ›“X{âÀ¬»ô =w¼ÌsëÄÏûìð_#R//]³{ÅWYåëá&žh²™¶Øìlš¾=ºêε-jHSÞøÊ7Ï}WEAùÉ4‡ÙXÓ]ô|šçÈ10¾Tßš•bÍ îv°(97øzáÃé‰a¶ =o~ ³°ôè7^ö?YZw¶Ý´qÚûP¾<³óªÂÁòü}zžGð­ ‡ª½£²-½<O:oØÁÛúãè=ýêerº“i÷J½Õ½œá$ ëß“N„úu”’A«¡ܨPé7ÕQ©ò;Ã~¿—OæGR§ëî ¤?:ka—˜Ðf73yx[v!øK‚MK¼ø¹®ÂMXé¥åÐ|I@UW—ÇÞœÁþ²Zà…”ê&õ¿ýà\æüûPcØ–”3èd­KkŸU2h?8Õõv‹VRpÕ_YT“2*W|wMn‹¹õ *'÷+#òI¥yEûÓ]md‚V«f«Üúkuï÷ï©›N%®TîH/jNÍmL(òYîÌm×Ç.óKSYMâ‘¿ «ºüÞ¯¨_i^”üár#O=TbEØÙ/Þäª;Æ«v.^‹4ªÔI‡¦Ž'ÎPv¡{¶}k›ùåŸBäkq·Û”cŒçϯY¾`¿Äݺ®r Ù"»[Y¶=ƒÎq ©“­žõ8Êm‘ÜOžŸ.:ØM嬔AM±Â=n±©<ïmE6 endstream endobj 68 0 obj << /Type /FontDescriptor /FontName /ZLBWQW+CMSY8 /Flags 4 /FontBBox [-30 -955 1185 779] /Ascent 750 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 89 /XHeight 431 /CharSet (/openbullet) /FontFile 67 0 R >> endobj 69 0 obj << /Length1 1096 /Length2 5038 /Length3 0 /Length 5733 /Filter /FlateDecode >> stream xÚ­“eX”k·Ç¤•AJš™A`(‘n$¤a`†a†.A$TB@¥$•¥»D)éM§tHœÑ÷Ý[Ï>_Ïõ|y~kýïµþ×Z÷ÍáwWX޶E¨¢]°Âˆ4 ¤c¨ "`2% †E¡]”aX„4‘’‚ H" ˆB¤ÁÒâ7Éx%´«…tÀ|Jü?EP@ÁAÙÁ\Öጯasî¢íP¬ àäü<á ÜO\„ à(;,`‹@¢\È@?i¸Ø£èÂp׿SžŒ;ÞÀ‡7Éà-ÂÑ.N>aOºƒÆ÷Bàü˜úwqU'§;0çŸåMéÿäaÎ('Ÿÿ*ÐήXÐA×Kï!þcNGy8ÿ;«…9¡ì\N@"&ûO宊òFÀõPX;ÀæäŽøG¸Àÿí?½_>@ ª&j‚ÿ]믤 å‚5ôqEàßê_ ùÍø!aPÞ€9X †à…øïï?Ë5Sq±CÃQ.H@T\€a0020¾”¨¸8àP.p„7€ðÆ;‰¸ ±ø#~2€=Cös«P¤ô3ô‹$Åá?„_ö›$ío’@vÿ8>g‡vÂ_‹¿#¼[â”øInø•ÿˆ ûßxOfñŒüñÆþA1q<ù¸: þ쇡þ@ äøâ þYïÞù7BÀèRøÇBÿn†×¢]¤ñ^0 ¾±ûˆoŒýñ3ôø…ÿ÷Ž(*¢½ý„oJ¢âŸ.nPqpÀÿÚy`0ì¯Wˆ¿i³= 9o„ÙØ0ÚN&Ô1©"ìm JVoþ%~wÖä¼Ð®†GeÉ2"«S24ƒ˜Ê/†ˆëÛW]uD\I\×*Áíŧ™+üÛüî‚^m£¤ãýò.ɦݪ…Q{ú§ÔΩ‘‹cìs®•‚›ã\{ß<.½Ó^†@3™×_|;2|ºx?¨{zŒüœk>‘Ì2½Vû9Âxé[lçñš: =–ÓÎhñrölŒùÃ×þû“”ÉROÒu. ¿ùn®öîù&ßÛVØÄä‹þ{zv&æIJ–äì+¾úOoTšy×Çñ6Ч:NñîE‰BG‚Jd}×41™úUYŸÓ.·‘ÛAÂdöËÒý,ÆeÝÑVë·–š^?Y=¨îkÀè©c†\&xAדN0Nín`ÓqæýÓ;3¼Wr^¡?¢^.=œzF_É/ðÁbÈMËéÝ&ÕÖõb0iC®˜™å-çäjF&hùוü~ȪŽûÙr$ÚœH<ÝpÕ)’.ƒ}ˆqc@4ªkí³^âû!Xt¶Ý°œ¼KÏ£(&2§K‘%g“¢´n¢½¦’t–{ç ë„gnq#¬Ñ¹_æú›EÅû0L'®÷eÕ ²kj\¡ò€Édˆ;§vÖ Ž—¶¦¹f»šìqØõ¹SSÍõúKk.reÊžú„èÖKÅ«-ï%ØNÓŽÚœ(;ž““(ïóvyù'•Fô-‰íœáú¡ïéS]¹‰r!eIÕ×'Ÿ…»²(4龡1Sß!.Ì{#'>TCÁïXgz§C¨$0îlÌÜÔ‚c¾‘2{Ö õ›²®~šJ/ìDùù©üÃe„GãG•ntð&ÃlÀðqo)“WqÞ°WºTI<“® †½çM,3è}ÑÛ—§yØfø°’AÌpwñvâYpl©‘ù âÝJ½ õjÈ¥ˆC³b†`UÚ¤Ï}Sƒ?ry”,qU‰tí4×¾p‘ åÜdbûÁ]户Ó-Ï\z]b&´{»5Ùl<”ØôõdšE`ÚžlTü®TEiUˆ™»DD}‘ùÃ;V KNêõò]’ÍgÜð%&—Pe©õKþÔæãór7BØÈ}¹k⾫„\±§2FÄ=ø§E¸¾T:OM’Ö)=7Øîù¯TÂ<¥½¡0÷†©õT4 o‰:3`ºð«Â+…Ëàâð•{f„&AÓÎ)vDJEVýræ>*瀑†Ø}1ÐAëD¼å¸`Ó•~ aÁbs8}Àô•VÁ>'æ[×1Âå$â½ e1$üð Ñ„xØÌr5ΟiÎJÞçÐüá ®µŒÛ0âÚûš‹*·¡` {á8–]þT›V,RåÁÛÇN„%Î!tΛTk¸ØS'Ù£j:¢sà›,\o2´S¾.#h^¹Wd(œÞ^«¦¹Sã_’Ôü½F'ã…({ıÑuŠª¶h›Í炟¾ôÔÃÆoœåcj:É'ã¨vb+Ú[i¡LuN½CÇQRºÇSñ ­¦gîõRÅ0ã„ j÷#súZœ9·¿ñš]ÐUóÉþ²jã 3jŒÞ1ÑYë×Ó.«˜iÁD_±åHn ,Þ·^˜% º‡dHuD+¯ŸS‡v oÒ$[½¨¦¦ŠÙ¬æëüŽ<0+~1Ý•–Üœ…ÏÝwŸQ$,åš,¢Ê'³n¶>Ž\ é”ê|m›ØÛ œÜrXmQX©WšD~Ù~ê Ë8ßww_h9ÃR¬ENHÇMU9–BænC7´‘êèg‹þÒEÄY>!ßSæmîÈ7oæò&ˆÚGDGZ"}½¼ýüãí;Û³8ç!šj1Ñ•ÊV|8¯1s©Öƒa^ªÓR2ê…¦ÏýÔÄØˆœáÏï ^H®te”*JdÜ*·ˆó6 2‰*N¸.¦Q‘‰Ím¥|]Gâš’ú)þ•ࢠ¥ÉŠÕ½åe탥è''Õ~È'|{|Þó~s£63W¡ŸÀЗ6+­3->1»»Ôr: tf»’¾OZ¯˜=øšl™sËÅ^p :ŠR…OAóXæÏ¼rZœ9O¶¡š4Ö&O¯ Å|b!ì§U¾ùó†ù«ùuõZ“;û _ÀT¸ƒN·–{•½ôù#{HŸ¯^®P_¶Æ‡³¶· ‹”Ãf‹Tqp¼RÖD±ÇK±fÿ{Õ*µÄ&SÍR±›Ü'úC}wÁ’ßýìkÁôd.ŸÆùîxg?çPÊnJÜÏB;luÎM<ÒH7=³ê\úR.(ÿ¹êªÎ*¡fGy$ŸÝ-Ó61¶¾ÕÍSû–=²qV d•‹k*úóD^+ç퀷\çz|ºÒL§Ÿ»¾«K†~Ìiè\d¯­nôŠÄƒR¦©l6©'ÏûуéóùFyœÝs]úD¸V3õ–àsâíTJË'o±ÌD¶”ÈIÉg§ä´tIÇÐb9ÏÎ*;Û|ê’:͈†`å2U?òÜ»O‚;ßKM” îN*ŸË:Vy$¬²EZwžžl‡Rí¡°+ÌíöŒUbzrƒ˜¬Rï‡|jÏÖŽi×ÈÀ¡µ5Åû’ù:-çÅ’&;Õ¶´áDa^GEßçyBÕ|’⨨m÷X¶3ì'lëùg$ñ#1c)yk4Íò¸0S¼w?ñÍ¥“ ¡XfÓ¼V35|£ðV‹ö•¡H¶»v·ÝãžÈEY¹ã¤@¬D'߉,µüŒ»k/Fµ¼|-Dœ~õy¥u”Ÿ‚û "¡Ó½w!í úl*u'ß3«šEâ§ž˜ÛÂoä:öÞnñDkˆUº%¼“éÚŽâ]0 ~8¡¶Ê K;åß**¿ÿ² z!Æ™÷ eŸãú»cyRÛG[¾ÍÅ/VIç&!üÈŠ†9÷“Äx&îš/‘ú:­?€Nk5Ùõ…®{E⤬xÕk®)kÝ‹*I*ã-b®ïkµbïz0Uæg%R¸0ú‚“4¤è»Á”LhtîõWÁNSùL¸9SÏ7ŠY¢V¿—ïø¬GÙ̵+‡wÇ’&«5%/ùK‘µzSЯÌ*t3×!5Ó;BÂK×Ü^EΆ âZë¡z˹ò?ÀŒÍ},­·â{íᡬ‰ î?Hºª?æþÂ_Ç=_À%¯ðÐÛŽZHÒøXcãKýDØXÅ=®/a\umSŸež¬+²Å,®ð ƒ1¬r(¡7ða÷ÏlÒWl'_šŸÌFåhV\ÅOç}=ã¾µÝ.­T–AóGûPÆý×’ެrTÓÆÃ”7‡¸tç±XqVnÛ"ÃÖ¦Ð{³m¼¹Ô6ŒBîú)»mdû?žE˜ÈéÝ üLq7LÃ乬ò-¸¼¸™ï+e/åå«”\v’“Þm5míÛ\å3]EÒŸŸL〕nʽÑc%±½G¡;/ì@A¬¡^Cúò»½änüõ]Ã8]WƒØ‚”å)ƒW}×Þ HÕó5‰½#°#A¯÷ÞFЊ\>^‹faØLÔæ`„:9P oZ°/˜‘&2ç½÷t/ißEBÀ¢Ç«ñÍ÷çr±ä•²óTå w žmY¾ï¤ÜNÖGÈËôö Y}oð­Ö—Ž®VäøÑÈ}ÀüìüCÈeyÑ–d[Ÿº­ü;ˆSŠqGC(Q!µÊ»¤îŽ¥fŽxç#æ^€–¦Hó¶’×X.#ñ#ïÎ;ObËóäh†ëIYC4¿çÎPšžÇ†¸˜ËÐÛâZòyTÈt¾ <·™3@ª&^òтδ ú,ËËHí<Þ‘U‡[c6¶ z©5Ì'}w_Ý„;õ5ÂòÐO„£«Žµ¤´§£7þ))Ï ¯f›ªz»4ÊwM°)ªæìÌ2Џ‡'Tî¯Þü,ë¬(4—Að÷‹œÄY–Å•¹å]ÖŽY@ Dve¨)SR`¢E{š 3Ôu“bÙ*&öF/ Ñ)äÅÊžR?oRÇW·&)´Ï/ï0#Ù£é¯T˜’׿%ߊɠnÎX¨X¬œÃŽi¯8T×3Qw#e%ù“‹oäÐ-W£“ÍÖ{º«%jLl„v/&mlĨ †”Ÿq#.Ë'›ùS/}‘+m°'Ø L}¹ÀÀaD¾ð^'(fd+Ê(^»¡Ï¥i"PM—pk†xd™×A®£+·gaõ5c³ákѵÁ—|45m¥1_GRWî†ZÁß:–=wUP×hýœÝ6§æ!,¿dbB¶Àå´•©0Ýj[qïå,,æ!óÉ_mÛÊݼªNL©%£å9|™µ5³*2ݤUˆ.Zn³‡ˆ¨xVDsøÊÞVp!é~¨*–U©6Ëb©ìWÛq2ÄС¥Úð¡[xQj‰¨VµÔu%*MÉÌë*nyëöõOðˆmêá\³PŒ±®—牦ùCe1wÿ>Yr¨b¨.¥; \ÿ,²ÌgK…%˜/òŠNA®6ÝK¡)ǼºTê2¨ÿ9Ã7õÛ [ÒŒM[Cªe¶òqÚ=l¨íBkGïÊomoøSÆ„Qõ¼9=A\Æv¼×c8•´¯|¹fjÃë$þ£1ê]u¿è¹½ˆP¦†F¤æßŸÑñXÉ=~Ò¥z§o}²»|”'»{ïfÑNú·v¢¯l´ÈÕâk–¹ÒmŸ›DÎ5’ŽF"s&¦¤Õº[΄#ÒiŸaßÔ茒‡¾.Crqغòu1¼fƒ”µlNŒ‡¾}â¨óÏ·›æË$5-¾Ñé2QéfÁ«à 6CJ'ØB—Íp;բ;z7 Mž]EæH`iM§‡EX]òh]oõíë¿J73íZ²}#(-º—ä Y¦Ð¸x´þÙ€ë9ƒ\oåÀ°¸f3¬f(X+8ø8ê‹á–éÃBì®q<ÿR€Z£M|݈VaKÐÛº¯®k{º ³zn\ˆro7溤Nôg¡Ð7”ŸbÙÐD£"^\ÒÏÇ`ý¸ýÕ‹ Îà8éžK¬Å7Òm$Ä•Nª2£¨z±°òÎÙ‹râ!ç´Çv)*‹Ú¿ß&™&äPQó`ü\š¯vÁpë“O¶–n§S—BS‹”œÒ–]qÕRu;'“ÎÈ1¨tAân`è!\þüµ´DÙÊ¡u‰ š6¹'{—²·\Ï…6CÓ=6VH*mùEúyZ‚Å@R–·O®ä9c‹ìU´ýò’á'‚’ƘæÍçóáŸnQsŸ(A´°q0éQm×¢úö'orúhø‰Þ¶ôoýå¶9 Ü­F3˜Éô‰Øèò&ÄxbßÁTõÞùb…"Ú»vtK”5ÖG+ÜSRXJŒ÷±Èö¾ÐêÚÍã/z¸/µr¸÷LŽù× ÆÄÔ%åÆúäÇ —}Taž~ÏR$Cx“ïõXª#Ã÷ÐÊtÉ+Il/ËŸÏ$®¤Õv°Oœµl„¼äPMðû®Jcˆ¹dP]õ"f›¶Œ‡Kaœ‹0O¬dòa‹[ßK@ð±Çæ'ÄòPVðOº«ÿÕ¦Sä5j}ÅÄ$›„nô­IÐ%ŠÚg©‡ì†âZÂ]Þ5D$™Ÿ{1ææ?VwÖZìMl&šëgŠRæL¯µÏcæ@ÆW²ÅD—>•"’”ÿŒ–;7 endstream endobj 70 0 obj << /Type /FontDescriptor /FontName /ARFXGR+CMTI12 /Flags 4 /FontBBox [-36 -251 1103 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 63 /XHeight 431 /CharSet (/C/T/a/b/c/colon/e/equal/f/fl/g/h/hyphen/i/j/l/m/n/o/one/r/s/t/u) /FontFile 69 0 R >> endobj 71 0 obj << /Length1 1130 /Length2 4694 /Length3 0 /Length 5393 /Filter /FlateDecode >> stream xÚ­“e\”k·ÆI¥;$„GŽaè’îPR@ʆ†!¤»¤K¤G¤”Ð!¥¤»%@RJiáŒ{¿ïÖ³Ï×ó›/ó_ëº×ºîu¯‡íŽŽ>Ÿ¼ Ì ªs…óùÁ’€¢¶Xó °±)z@!p˜«•À`@ÞËÀ¢’Â"’¢l€"ÌÍ×ÃÁÎp*rý‰ò.Pkˆ+  ÛC]Ð5¬!΀>ÌÚ ÷åä½_'<=¨'ÔÃjÃO6ÖpÀ jçàJúåHÝÕˆý¶ñrûoÊêá‰6p¢Mrh‹60Wg_ÀjKºC÷‚¢ü˜úwq/gçû—_åÿšÒÿÉC\œ}ÿ£€¹¸yÁ¡€6Ìêáúo©ôosÚP/—gÕágkyW;g( ðwÈÁSÅÁj£ã·¶à^пÂPW›{@Ïí/ CEy-==žÿ<è_Iˆƒ+ÜÀ×ퟪ¿Ô1ø7£Çãáà˜ ð €ÑBôï¿ÿÌÿÕLÙÕfãàŠÞQâáñ%@¯šD0ààjõ >hà ~W}@Ï$°…yüzOQq¤ô+ô7I åHL©ý&´òþ?„~Lä÷9a4Á'Ñe¬ÿ!atÒæâò[F_ýÑlÿ@!d÷Š ‡?íÃùD÷rù`äú¢Áþ@t#·ßÆÐZ7ˆÔÕjûÛ¼0ø?Ñ¿w÷Ÿ°(:ŒÞ^˜ÍåÐ7óøÑF=ÿ@ô øˆž˜×oDÀ ŸßÕÑ—òƒzümõÿn“‚ÌÇŸ ð "‚Âè‡ ü_2k/´eø_ß)z#ÿ˶èõ…B} Ö³S0k©ÇçȨò å‘W¸Ü˜ võÉ÷ë>Œ¿' ŸIÁt.éÓtç^¬5>¯È¦$YÇ]g~rÉàÛ ;¨²êžœ9yµîýx=Û¯‘Áø0[ÛwÍå$|›´9ñ}GóÁØbyºIQWÞ~÷v§’Á×›ów0>šz¿ý˜!*f¬’ílYË.tG,ӽŎ|üB$a²æ³¾1ˆ¸Âo‘k8¡ ?u²\ÅcéŒÚó(!ç'½Ñ d¯à-•P d5Ø7+ð;Íœû–ß³“—æTIuíÈW‚N™¼‚ݵÆvÑLÓu‰ÔàÂŇñ bàRß­7ø•fë]\TAcxBì—Äz¼iÒÀŽg2B×A„ f6‘!b„ÿ¥Óo~­D ‡ÚýmYѪX»l‘ — å.½¦Œ yc‹QØN'Š»s¼n;De~A¬´tpäNذgVh\QY(ô¨oªÍ¼+n©c¿‰[œë¶rÑG˃Ø—ÕŸ=øäÛ¹ㆭK½Ÿi#U½%»ök(Æ®ëøñ°ÇƒCçrQÎBPCöÊ IƇçÕyûþæ8qªöžj‹0Ù\ý¡‡ ã÷$n ¦¾Ñ¿H‡Di“7`Ч$R¸u©yvbò.Âb\j†^hbÉ4+.¼púÊ¿×øÙ>\ÒãL]&Í97ßC¹Åšc‘$ê6„ý9ÿkЈ6ôYïQM¤¢b«$Åjríåi¥Ò¹¾ÏXÂÀ7'NÉ"%ÙìG‰<çý$†j»ç6졺æØîýÑÏØÅn1!I£dÞì˜ÝúG4ç™:7ÍtF‰Ý¶”úÌ]“y×~#l0O5Š£­Ú×ÞtÉ%¹®cïl¼I4ñi;&’90‘ rz5ß©ë:SàËÊvX8ÀÇ}\ÍDòì¡ÄX®`üd2Ö¢a“¶ÂäDz‡ögy/ue—Ôgc‚ ûF ¿ KQekZ‰¨L²~^C1 ß{¼zó mó¤ûP#=AA3A2—¯ÁB‚±¦¶Æ[Îý×nÁ°æ•Ì)«T ð?ikßo˶±§„ÝQ€ü¦xC¥B4ÃÖ§,žÙ¿Ÿë{‘¦¸È§ºäOWõÉSrÎÞìQ‹gyíbÆNǼ:êË.så&çti–æMaiÖh¥Ò”‹¥5>^•'ÄÎN´ÉÙθ—U‡˜|Õ`öN‡àhx_§Éó-©œX’Ám­(2!éaS‹˜±ÂiÜ•›~yÍÑã d²þ¯Â›jÃ&4åð;nYóíDråb“Ö”"ÓÅPœ>0Åéõåñ“0 ‹¤t2'dBoT½h*ÇVÑf,‘‡|‡¨­ÕZ ñƒÝÿ´aNM=àJG*§šý©þóÞ~ê«­à£I6éP*¥ÅóìØ»ý›E ¢]CÝPŸ<Þ7ײW]Z81äÉFgb®'~;ÁÖN‚ùÏ­®ðX„¯¢êÜ_œÃ[YןÚ?,ž+:ÉSêpP—4©J›{稆üh./~o¿{€œcÚÞ‡¯‡-édÑÔŽûTc3ŽÏ‰Ã’ÕHôf÷¦ùù~Cþ‹¸œ®µºTIB«&î6‘±9')ö+ú#öV uW,V³Ó˜›Æp&Âç ‰Ò¦Óã£ú·+Gj—úŽËS® ö…“w7î“K!*ÃQ0œÞ÷oEéfZ]Â1ÿhv¦á¡‚-m,x™+bÔCGƒkS&ضlmô˜?à9SQ²U›Y,ûr•š(MX¤eCåÑO9˜¸ºns±Uh}Ë%©zso)Íš·‚m:t¤‚„ iÊ…˜ø°Àý0Y)§ìkWnªÆˆFV§Çâs7Wñûdš:|vIŸïsß+H¾nî¿¿-§×‚bþÒxJkHÊ/÷åâ/n!‰8àjepSý:ŒÃؾm%g?pô-âû¯½°7ŠF¿f4_^T¦êþT¹EÄÜÆl«žÒ )Ýȉ¸È8^È©†Ó–Q…ê¼7ꬤ$®`½Irö|¦Õ½Þôþü0’üUUÈqøîsó½÷†’ëƒ{¯ 5¨tº«¨oô+¬â"ߟáGÑÆÞ7Ç É¾SÂòN – ?¶ÓNÝ{¬ønÙ,¹Lýå;aÚD¿¥qñ²·… yõ*ó\† ’7cŠMìÄäT2\Áˆ@Kb·V÷xç`màSV Ê[`-¢å…¸½Ÿßá@öÑ4aí~º³Á½yx<2è9÷µ€áD‡·Í@Âdáfvâ\£)î'ëµÊk­W¤²†ºxßÛ‘\/e¤…IñÖz bÖºS f4.jïIHdžU¬®â¿IH|YàȶA|ÿmä)²`AÏgAUñ½²dý¨¶$ût‚XŒzËÐæ-X¡3æ|è‘$žÜX½: ©P[‘Iðtø Šc%óYÒBln¶fkÖÃÔÏ’v)?ÝøÃ ó£QæexbË{ÁÚ˜&á½!1š¹ù©S'æñçeYÁØÅ)i\•ÂØõT½w–U릱L ýly5!k½¯’·ˆ1ªZË}¢ôŒ¦;Ú™=tLûÑ@+‹ô,Õ¥,&‚½¥¤_56b¯ƒóðñ‘;8°îÚ‘å˜T½MËg¾M=ãòœnÃê'þrµëK¾;¥OXEÓ¢ý«­ÆžÆáx_ܧËKmC*—T±!w¾Õ1ú‡($Í~8çNÛ`8HæPnyHúc*Q0ñVjh7ª;~þ†á‹bkßn¶§yN9eé LBÌr]P†6æ×ë=‡íþo†“–uæ‡1ƒ[I(•uhæ×º“ K$¼¥n²Û Œ‡5‡?QËÏRYÝvã'GrO06d jbÞMP>'H p›-êm:ÃÏã¯8}t¸¢¶–3Þ°8"jò´#úéxtBœøJÓùh~ ¨â„ƒ×R½¸o?\!嬬/T¿¹×ãÛƒä[žŸß;‰¶«{†Ëq~—}}@£©,¥ÇYÖK ÔÊ`­'•ë"ƒP¤ $e" DLò“ $Ÿ²š,%¬*I½°ò®>9¤6êû|YlÀôCÊ™Êݬc1«–‡0pÜ ¢û›ºe&c¨.Pa©ñ”ä“x,.¤Ðþ¡ÍDXÇ¥ü\t g oß?»5Ž\.x^4Š|Çšå™ âÉÀ-n^Ña¶)b±ÎË׬„ÅCápª\K½»¯0ˆÄd31}š÷çyãS:íWo¨È±a[ªGU±•ŠçPCÒ[‘%œM¦ò²,ù‰oqªlmÇë€s‘ÉŒ’'Ù\xq¦ Ì}Òꢪ¿Šù€n 0ZœbúìRºŸ7{g®1¶ù|6öú|ÏéÀQm­JRŠLÛ¦¸œ˜4zŠëõVË«™²ÞrMÍÄ–ê=®Ud[gå ­}¼ºù\8Æš†©÷èñx…¾™.\庆ÉI¡ö,]üåÇŽê¸ìe'â÷½ü?ùS.û‘Wmœ:=ßÜ‘9bB–rP¯ô‚ž}QÈ?.6kØFm¾DqGâóÐGÆ(ÆÀåûg¥e‚žÖÖˆŒB’6ü&ÍNæu¯µ·«FV/j«¾2'­ÍÍÍ¹ì¸ úMÄánÆ´N|*× ¸ï ®s)}œd Æz£Í$:]ÇÚñ…¹ õHaÓÑ÷ÜWë”c¥,^|•Ÿ¢Ƥ¢wŽyW*¾¥âÀÇPÊÇpÓÁv "RÿYEülõÃZÈÔbùüë¤Y%µ[Û‰ÕbDF£Ó§Hw­l¯=ÛÝ÷Bo ŸªK¹¥1 ŒJí<˜/šë;äáy r«žAÎsLÛÃô¹ÞØÈަÙOüž Wí"¹Æœýå®~À^•i/mÅíÛüLgPf¶ýje’Å ‰%¥¼Ü§Ï¬Ù¼Ô•ÁR¡¹¯Ã¹£É\­ù†n.é%‘לµN# &n(]^µñKŠ.ϲÛfs[I%ÂË ’&›Ü5[׎v{DóÃ({\ÆCóÒ›¨MØR]ë¢ n0Ç\ñ,0ÐÓÂM•¿Ð#ü`W7”è;!ÞêIûÚèî·DÆyuZ©HÔè èk Ð!¨n,ì"ay c÷ö‚Ê'ÍE7Cõnù~f€'AX]qö4¦æ&¡~'(‹MT<4A·"îe†×LL»ËdWÝÉ·«R«'€ØZR¿fâØ¡/ƒª®7oíp†’;pºþLˆ† Â;ô’`ú:m½ÇùCp~q» ¥lp|ÇINsƒoat}î­@YãÓSæÑÔîAêÕ‚à·“)_[ÃgòŒZt5’b À:º–'ß‚½Ó®z÷‹§w·…9"ñK¶µ¿5OeÉŸ)xó)t¤þÈ„ËA˜|ñ¶iïÁ%AË:P"Ô5K[/øö–šîýùu¶@+-"|³Q&O]¿a¡GûÖOŸôöÎJ“Jfê)G½ÿ²WJ¿êqT¤¼ÙýÆWÊñýÛ8VZ:Á÷6 ‡7¤T¶ïdº<ÏÎð>.\ C¬ôˆ3ËHØ ¹åš`3µ/ÉÀöÃ"Œép-^æt…¡üZõ6ÏÛ¤…ב¬3§|w<¿S68šyWߺG‡0VôOuþs茅 endstream endobj 72 0 obj << /Type /FontDescriptor /FontName /UCALRR+CMTT12 /Flags 4 /FontBBox [-1 -234 524 695] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/D/E/H/N/a/at/c/comma/e/f/g/i/l/m/n/o/p/parenleft/parenright/period/r/s/t/u/x/zero) /FontFile 71 0 R >> endobj 23 0 obj << /Type /Font /Subtype /Type1 /BaseFont /SRQGVN+CMBSY10 /FontDescriptor 50 0 R /FirstChar 123 /LastChar 123 /Widths 40 0 R >> endobj 6 0 obj << /Type /Font /Subtype /Type1 /BaseFont /RBDXTB+CMBX12 /FontDescriptor 52 0 R /FirstChar 49 /LastChar 121 /Widths 46 0 R >> endobj 29 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KFRAYQ+CMMI12 /FontDescriptor 54 0 R /FirstChar 58 /LastChar 121 /Widths 37 0 R >> endobj 19 0 obj << /Type /Font /Subtype /Type1 /BaseFont /OUUFOT+CMR10 /FontDescriptor 56 0 R /FirstChar 12 /LastChar 121 /Widths 41 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /BaseFont /WKDSZC+CMR12 /FontDescriptor 58 0 R /FirstChar 11 /LastChar 124 /Widths 47 0 R >> endobj 4 0 obj << /Type /Font /Subtype /Type1 /BaseFont /IWRDPU+CMR17 /FontDescriptor 60 0 R /FirstChar 12 /LastChar 118 /Widths 48 0 R >> endobj 18 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EJASTL+CMR7 /FontDescriptor 62 0 R /FirstChar 49 /LastChar 49 /Widths 42 0 R >> endobj 17 0 obj << /Type /Font /Subtype /Type1 /BaseFont /PXOHER+CMR8 /FontDescriptor 64 0 R /FirstChar 49 /LastChar 50 /Widths 43 0 R >> endobj 7 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QWIXZI+CMSY10 /FontDescriptor 66 0 R /FirstChar 15 /LastChar 123 /Widths 45 0 R >> endobj 28 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ZLBWQW+CMSY8 /FontDescriptor 68 0 R /FirstChar 14 /LastChar 14 /Widths 38 0 R >> endobj 24 0 obj << /Type /Font /Subtype /Type1 /BaseFont /ARFXGR+CMTI12 /FontDescriptor 70 0 R /FirstChar 13 /LastChar 117 /Widths 39 0 R >> endobj 16 0 obj << /Type /Font /Subtype /Type1 /BaseFont /UCALRR+CMTT12 /FontDescriptor 72 0 R /FirstChar 40 /LastChar 120 /Widths 44 0 R >> endobj 8 0 obj << /Type /Pages /Count 6 /Parent 73 0 R /Kids [2 0 R 11 0 R 14 0 R 21 0 R 26 0 R 31 0 R] >> endobj 36 0 obj << /Type /Pages /Count 1 /Parent 73 0 R /Kids [34 0 R] >> endobj 73 0 obj << /Type /Pages /Count 7 /Kids [8 0 R 36 0 R] >> endobj 74 0 obj << /Type /Catalog /Pages 73 0 R >> endobj 75 0 obj << /Producer (pdfTeX-1.40.3) /Creator (TeX) /CreationDate (D:20110430143750+01'00') /ModDate (D:20110430143750+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX using libpoppler, Version 3.141592-1.40.3-2.2 (Web2C 7.5.6) kpathsea version 3.5.6) >> endobj xref 0 76 0000000000 65535 f 0000001543 00000 n 0000001432 00000 n 0000000015 00000 n 0000088737 00000 n 0000088598 00000 n 0000088177 00000 n 0000089152 00000 n 0000089713 00000 n 0000003404 00000 n 0000008425 00000 n 0000003290 00000 n 0000001644 00000 n 0000011015 00000 n 0000010901 00000 n 0000008550 00000 n 0000089572 00000 n 0000089014 00000 n 0000088876 00000 n 0000088458 00000 n 0000013266 00000 n 0000013152 00000 n 0000011152 00000 n 0000088034 00000 n 0000089431 00000 n 0000016108 00000 n 0000015994 00000 n 0000013393 00000 n 0000089292 00000 n 0000088317 00000 n 0000018591 00000 n 0000018477 00000 n 0000016236 00000 n 0000021111 00000 n 0000020996 00000 n 0000018695 00000 n 0000089820 00000 n 0000021227 00000 n 0000021613 00000 n 0000021637 00000 n 0000022127 00000 n 0000022151 00000 n 0000022761 00000 n 0000022785 00000 n 0000022815 00000 n 0000023319 00000 n 0000023949 00000 n 0000024379 00000 n 0000025002 00000 n 0000025658 00000 n 0000027353 00000 n 0000027582 00000 n 0000035289 00000 n 0000035610 00000 n 0000039928 00000 n 0000040175 00000 n 0000047488 00000 n 0000047776 00000 n 0000062884 00000 n 0000063416 00000 n 0000068477 00000 n 0000068746 00000 n 0000070431 00000 n 0000070649 00000 n 0000072500 00000 n 0000072722 00000 n 0000074352 00000 n 0000074610 00000 n 0000075864 00000 n 0000076092 00000 n 0000081944 00000 n 0000082226 00000 n 0000087738 00000 n 0000089894 00000 n 0000089959 00000 n 0000090010 00000 n trailer << /Size 76 /Root 74 0 R /Info 75 0 R /ID [<70EADB51BC134DD5E69BF258F833958D> <70EADB51BC134DD5E69BF258F833958D>] >> startxref 90281 %%EOF pfstools-1.8.5/doc/data_model.png0000664000175000017500000001134010254027365013670 00000000000000‰PNG  IHDRÒ3å}²§IDATxœíÝ{TWâðžY¤ å("?á(êQé–X_˜âG_øÖÚ.Z_? µžÚªˆX]=J[×¢žÝStÑÚJw«¬-¢@ÔR`yÔjA¶ü„À¨< „ÌïÔÉs23É|?‡?`rçÎÍÜ™¯7w2Ž@Ix@Éùw)°ÝóC/p ÷»ÃzÙBˆ2åV˜•@Äv ôƒ^àëî5Ké+eÃvø± À(Ä.€ñ‘€óØ-¢‘¼bGõBcckrrú•+7jk›”Jâî>rêT‘蹄„h&Û*T§’'s‘ì¹u«æÔ©,±¸¼®®Y¡è÷ðp ð‹Šš³í¦¥~´{ëVÍôék¯^­øÇ?öþö[ö;gbcþ´{÷)uüÊ<¥2oÐÛ-²r 'Ÿ{n}~þ­'¶¶µe64œÿàƒUEE’ØØ¿°Ý4°`ÃÇn\ÜÑÖÖÎ'¶øÙÙÙúùݼy©——;Ã`QMÍýääôñã=óóSBCŸ <=Ÿ‰]<ÙÞžòc"€NÃÇnii!$8xŠz‰‹‹Ó/¿œS¯Ôã\Õ˜Wõ§ú—ÌÌ¢Y³b#mmCUÅ::ºwìøÌß?ÚÑ1ÌÕõåÐÐw¯_ÿAs‹§OgïÚ•êë»ÊÞ~§çâ+öVVÖ©_UÕ|÷nýªUûÜÜ^qu}ùÍ7ÿÜÒÒÑÔÔööÛG<<:;G._žÔÞÞEÇ>±}‚AMhß±:»ÒšÄÇ/±µµINNïèèV/T*•‹ï Ãô¬„c›Wb(¯½ÈåýçÏ_Ss_.WTW׿óÎÑQ£\yG] $d!äìÙÜGÚ·‘˜¸Z(tHJJKK»¢šØ*+«Z¿>yîÜxU+^$„ìßÿùÇ¿)ýÕK—î¡áÍñí;VgWZ“)S|¶lYV[Û$m¹zµB&“·´t¤¦^*,ü©¯O¡g% Û¼êë0ü%µ”” W®Ü¸}ûÿáqìªNuõyŽ3ŸèàþÅ.Õ‰3ŸIèà1>Åî œùf…^ÞðèX6ú¼ÅMq4B/pþc?ž¬:Âôg=Y‘Áq–Õ_CG/p PÀ*>M2hžö„ú4ƧZ³B/ïñ)vUMb‘èà1þÅ®šžÃ.0+ôðcWç9 €O(ÿ+0Ä.£»ŒBì0 ± À(~ÜÌý å|¸ó½À)ÜïëÅ›ƒ-z ¬»Ô,¥;¬&…Ø`b€Qˆ]F!v…Ø`b€Qˆ]Fá.5nàÃýQèNá~wX/{ŸŸœxœ€ŽàL2ð•RɯÁ7!sy ±ËcH^6 vù ÉË" uù ±Ë{H^f!vÉË uy ± „$/³¹ü†Ø…ǼŒ@ì‚$/0Ôå=Ä.< É `fˆ]Ék>êb†‡ä0Ä.P@òÒC] „ vùéÕW_Õ«’—Ff®¾}ÈŽí£zzz222õ]A•¼£1Èà>KƒØå—yóæ¼’×t†ì@cú, &ø¥¢¢¢¢¢ÂàÕ0ÛÀ #û,bôƒä5>+ÀÓ» 7$¯¹0b ä0b „äÕ†º0Ä.É `Ä.É«†º@± ÆBòjÌj%> Ôü“†ï‡"_†eÂn¡¿€c»`2$ï Ø! &Àd˜m0bè€äUÃPtAìM¼úAìÐC]ÐbèÃó/2ôƒØZñ`L= È|O3 f uÁˆ]0F’×|OÓ·fd.“ `NæŸm0ß“ÇðL30Ä.˜™u_aÃP ‡Øó³îä0ba•É‹¡.± L±²äE悱»À +K^£ vYÖ‘¼ê‚ »À8ëH^cá¡>ÀšŒæ{òeÍê‚i»ÀKÌ/Kl3p &€=˜m^Bì«,+y1Ô: vm–•¼&CìXDòb¨ 4Aì7XDòб œÁåäÅPèƒØ.áfò"sÍ/((ˆí&0± ÃÍäå«yÂÛÎ;ëëë !B¡"•JwîÜÉv£Ì± ÜéäåØP·§§ç‹/¾0dzãX²aÉDâàà ‘H6nÜÂv£Ìw©Wq$ï8ÒŒÇÔ·,[͇Ž=zñâśŋoݺ•í™F»@M `ó‡õp¡CXÙÞ²³³333>lgg—œœœ™™™=z4ûnæ<9´Ræ±ÝˆØnÙ}÷Ýw©©©¾¾¾r¹|æÌ™'OžL]° ²5ƒív™“@„ØÖ>|Xõ‹\.'„L˜0áà½{¬¶ˆ ˜dö•••±Ýæ v ˆ<øìf…I0€öÄQÒ:|ëVÍ©SYbqy]]³BÑïááà5'&f![ëÃäQjÄ.@óUÜf:ˆN<øE@€ß‰[gÏžÖÑÑýÕW×öìIËÎ.¥1vx \8iA;ÆŽR£a’8§¦æ~rrúøñžùù)¡¡Ï …žžÏÄÆ. žloX<Ä.Ðïôéì]»R}}WÙÛ/ðô\¼bÅÞÊÊ:ÍÍÍí±±7n™P6o^|JÊ;»PõgÃãÇ3úûÞÿuW×êUìííÄâOäò«ê%RióÚµ‡ÆŽ]jo¿`̘%«W¬­mR¿ªš„­­mЉ9âí½ÜÑ1lÆŒubq¹fÍ’ê?µ7^³¤ÎMB::ºwìøÌß?ÚÑ1ÌÕõåÐÐw¯_ÿahm™™E³fÅ:;GêÜ·ª;&Ô¿€qL•½h9JƒØš}óÍ¿W­Úçää¸iSÔš5‘~~c½½ŸuqyI] ¥¥ƒ2v¬;U ÞÞÏVW×74<ðóKUFUÉÈ‘Îê%Ï<ãByðà!Õ*ª±¤öw:¯Ý M46¶B´Û¦¥¦@ìÍââŽööö œ4l77ç––Žîî^Í+fš,x¾ºº>7·LËwÅÜÝG65µuvv«Ò–ÒÙÙMñðp3kã âââÔÞÞ%•6Ošämzm@#ÓRSà’ÐL5L˜>}U¹s§BŠ‹ïPˆ_bkk“œœÞÑÑ­^¨T*/Þ-†©þŒˆ&„<™1P}´ˆ0à!ª3J¡è׿ñ™9s !$+«dÐòâb -õƒÑL?JMØš­Xñ"!dÿþÏ>üM¡è¯¨¨^ºtf„„hûÍ›SŠŠ~–Ë?þøË† i˜2ÅgË–eµµM"Ñ–«W+d2yKKGjê¥ÂŸúúª2~¸ÖÃÃmÛ¶?üP­Pô—•UmÛvÂÃÃmïÞµú75$d!äìÙ\õj7Hbâj¡Ð!))--íJ{{—L&/+«Z¿>yîÜx£ëZ˜~”šßdjF}“A&“'%¥}ù¥øþýVBˆ¯ï˜„„èuëk.-­Ü»÷tQÑϽ½ò)SÆÇÆ.Ú´é77çööKêzJJîœ9“}ýúM©´Y¡è÷ô<9*jÎÚµ¿OÀÕÕ5'%¥åä”¶´t¸» Ú·o§–æ Z(•6oÜøqAÁí¾>…««S{û%×þM†¡ %’Ú”” ùù·¤Ò_e2¹³ó¦Nõ‰Ž]¤e>® ßd0½21çQjT›Dˆ] Fë  ÅÝ»õ“'G‡…ýwnîÇ lÎb v¹„¶£T Â$°@( ‹Ž>PYY×ß?pçNm|ü§ö‰‰«ÙnÀæ;JñM`ÁÛÂÃßkjjsw9gδÂÂcAA“ÙnÀæ;J1ÉÔ¸úq/0É`•0ÉÀ0ŒvšÖÛsÀ8˜Û­¬ûãÇa’Á*a’€aˆ]F!v…Ø`b€Qˆ]F!v…Ø`b€Q¸9¨áæ`ÖñðôäÁQ‡›ƒA+ë¾M“ã"¶[Àë>êps0ûŒBì0 ± À(Ä.£»ŒBì0 ± À(Ü¥Ôxp¿×ñðôäÁQ÷ÿ÷ÛŸ«™XIEND®B`‚pfstools-1.8.5/doc/Makefile.am0000664000175000017500000000107310634275601013127 00000000000000EXTRA_DIST = faq.txt pfs_format_spec.tex pfs_format_spec.pdf data_model.png TARGET=pfs_format_spec SOURCES=$(top_srcdir)/doc/pfs_format_spec.tex # make pdf by default all: ${TARGET}.pdf #${TARGET}.bbl: ${TARGET}.bib # (pdflatex ${TARGET} || rm ${TARGET}.pdf) && bibtex ${TARGET} && pdflatex ${TARGET} ${TARGET}.pdf: ${SOURCES} ${TARGET}.tex @((TEXINPUTS=$(top_srcdir)/doc: && pdflatex ${TARGET} && pdflatex ${TARGET}) || rm ${TARGET}.pdf) clean: rm -f ${TARGET}.{log,aux,ps,dvi,bbl,blg,log,pdf} view: ${TARGET}.pdf acroread ${TARGET}.pdf PHONY : all clean view pfstools-1.8.5/doc/Makefile.in0000644000175000017500000002504011652214375013140 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = faq.txt pfs_format_spec.tex pfs_format_spec.pdf data_model.png TARGET = pfs_format_spec SOURCES = $(top_srcdir)/doc/pfs_format_spec.tex all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am # make pdf by default all: ${TARGET}.pdf #${TARGET}.bbl: ${TARGET}.bib # (pdflatex ${TARGET} || rm ${TARGET}.pdf) && bibtex ${TARGET} && pdflatex ${TARGET} ${TARGET}.pdf: ${SOURCES} ${TARGET}.tex @((TEXINPUTS=$(top_srcdir)/doc: && pdflatex ${TARGET} && pdflatex ${TARGET}) || rm ${TARGET}.pdf) clean: rm -f ${TARGET}.{log,aux,ps,dvi,bbl,blg,log,pdf} view: ${TARGET}.pdf acroread ${TARGET}.pdf PHONY : all clean view # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/doc/pfs_format_spec.tex0000664000175000017500000003516311071466566015006 00000000000000\documentclass[a4paper,12pt,english]{article} \usepackage{babel} \usepackage[]{graphicx} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. %% Because html converters don't know tabularnewline \providecommand{\tabularnewline}{\\} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands. \newenvironment{lyxcode} {\begin{list}{}{ \setlength{\rightmargin}{\leftmargin} \setlength{\listparindent}{0pt}% needed for AMS classes \raggedright \setlength{\itemsep}{0pt} \setlength{\parsep}{0pt} \normalfont\ttfamily}% \item[]} {\end{list}} \newenvironment{lyxlist}[1] {\begin{list}{} {\settowidth{\labelwidth}{#1} \setlength{\leftmargin}{\labelwidth} \addtolength{\leftmargin}{\labelsep} \renewcommand{\makelabel}[1]{##1\hfil}}} {\end{list}} \begin{document} \title{Specification of the PFS File Format\\version 1.5} \maketitle \section{Introduction} This document contains a detailed specification of the pfs file format. PFS file format is intended to store in particular high-dynamic range images, but it is also flexible enough to store additional data, like depth map or motion flow. To learn how PFS format can be useful and why it is different from existing image formats, see a list of Frequently Asked Questions of the PFS tools package. Information in this section should be sufficient to implement pfs compatible reader or writer. \section{Copyright} Copyright (c) 2003 Rafal Mantiuk and Grzegorz Krawczyk Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". \section{Change History} \begin{itemize} \item 1.0 (15.12.2004 RM) --- Original version \item 1.1 (14.02.2005 RM) --- Colon ':' is no longer allowed in the name of a tag; Added a conceptual UML data-model \item 1.2 (16.03.2006 RM) --- Fixed typos (thanks to grendelkhan) \item 1.3 (16.08.2006 RM) --- Added a list of registered channel names; added comments on endianness) \item 1.4 (28.06.2007 RM) --- Fixed column-/row-major ambiguity (thanks to Matt) \item 1.5 (06.08.2007 RM) --- Specified maximum string lengths and valid value ranges. Added suggestion to prepend custom channel names with ''x''. (thanks to Martin) \item 1.6 (03.10.2008 RM) --- Added a new tag 'BITDEPTH' \end{itemize} \section{General Structure} A pfs-stream is a byte-stream that contains one or more frames. Each frame is stored in the pfs-stream right after another frame, without any markers or separators between them. End of file indicates that there are no more frames in the pfs-stream. A conceptual data model of the pfs stream is shown in Figure~\ref{cap:data-model}. A pfs-stream can contain any number of frames, which include any number of channels. Both frame and channel has an associated tag-container, which can contain any number of tags (name=value pairs). \begin{figure} \centering \includegraphics[width=\textwidth]{data_model.png} \caption{A conceptual UML data model of the pfs-stream} \label{cap:data-model} \end{figure} A structure of a single frame is shown in Table~\ref{cap:pfs-frame}. A frame encoded in the pfs format consists of a text header followed by binary data. The header contains information on frame size, number of channels and tags. Data items in the header are separated by end of line (EOL) characters. Note that only a unix-type EOL character is allowed (a single character of the ASCII code 10). MSDOS-type EOL is not allowed. To avoid portability problems, use C string ``{\tt\textbackslash{}x0a}'' instead of ``{\tt\textbackslash{}n}''. Note that the header ends with a {\tt ENDH} string, which is not followed by an EOL character. This prevents C formated IO functions, like {\tt fscanf}, from reading both the EOL character and first bytes of binary data that happen to have the values of white spaces. The binary data part of a frame follows text header and holds a 2D array of floating points for each channel. The structure of a channel is described in the next section. % \begin{table} \begin{tabular}{|l|l|p{5cm}|} \hline Data& Type& Description\tabularnewline \hline \hline \textbf{PFS1\P}& & Constant identifier\tabularnewline \hline width height\P& \emph{int int}& Width and height of each channel (1--65535) \tabularnewline \hline channelCount\P& \emph{int}& Number of channels (1--1024)\tabularnewline \hline frameTagCount\P& \emph{int}& Number of tags associated with the frame (0--1024)\tabularnewline \hline \emph{for i=1:frameTagCount}& & \tabularnewline \hline ~~tagName\textbf{=}tagValue\P& \emph{string string}& An i-th tag: name=value pair (max length of \texttt{strcat(string, string)} - 1023)\tabularnewline \hline \emph{for i=1:channelCount}& & \tabularnewline \hline ~~channelName\P& \emph{string}& Name of the i-th channel (max string length -- 32)\tabularnewline \hline ~~channelTagCount\P& \emph{int}& Number of tags associated with i-th channel (0--1024)\tabularnewline \hline ~~\emph{for j=1:channelTagCount}& & \tabularnewline \hline ~~~~tagName\textbf{=}tagValue\P& \emph{string string}& An i-th tag: name=value pair (max length of \texttt{strcat(string, string)} - 1023)\tabularnewline \hline \textbf{ENDH}& & Signalizes the end of the header\tabularnewline \hline \emph{for i=1:channelCount}& & \tabularnewline \hline ~~channelData& \emph{bin-float}{[}w{]}{[}h{]}& Row-major array of 32-bit floating points\tabularnewline \hline \end{tabular} \caption{\label{cap:pfs-frame}A structure of pfs-frame. Bold font denotes literal strings. '\P'~is a unix-type end of line character (ASCII code 10). Types: \emph{int} -- integer value given as string; \emph{string} -- a string of one or more characters (1-byte ASCII); \emph{bin-float}{[}w{]}{[}h{]} -- a row major array of 32-bit floating point numbers in binary format. The range of valid values and maximum string lengths are given in the parenthesis in the ``description'' column.} \end{table} \section{Channels} Channels are two-dimensional arrays of floating point numbers, which can contain anything from color data to motion flow and depth (z-buffer) information. Channels are written in a stream in the same order as they are listed in the header. Note that no assumption can be made on the order of channels --- it may differ from file to file and some applications may even reverse that order. For the sake of performance, channel data are encoded in binary format. Each cell (pixel) of an array should be encoded as a IEEE Standard 754 Floating Point Number. Fortunately, this representation is used by CPU for most architectures, including Intel-based PC's, so it is enough to store the values in memory as a C 'float' type and then write them to an IO stream. An array should be encoded in a stream in a row major order --- all cells of the first row are followed by the cells of the second row and so on. The encoding starts from the top left corner. The bytes should be encoded in the little-endian order (LSB), which is appropriate for the x86 platform\footnote{Current implementation of the pfs library does not handle big-endian system, so the pfs files generated on x86 and powerPC platforms are not compatible}. This version of the pfs format specification defines the following channels: \begin{description} \item {\bf X} --- X color component of the CIE XYZ color space. See comments below. \item {\bf Y} --- Y color component of the CIE XYZ color space. See comments below. \item {\bf Z} --- Z color component of the CIE XYZ color space. See comments below. \item {\bf DEPTH} --- Depth channel. Format of the depth information is currently not standardized. \item {\bf ALPHA} --- Alpha channel that encodes transparency. The values should be in the range from 0 to 1. \end{description} If other information than color, depth and alpha needs to be stored in a channel, a custom name starting with a lower-case ''x'' letter should be used. If you think that a particular channel name should be registered in this document, feel free to suggest it on the {\tt pfstools@googlegroups.com} discussion group. Color information must be represented in CIE XYZ ($2^\circ$ standard observer) color space. Depending on the value of the LUMINANCE tag, color data are linear (RELATIVE -- linearly related to luminance), linear and calibrated (ABSOLUTE -- the values of Y channel represent luminance in $cd/m^2$), or non-linear (DISPLAY -- gamma-corrected). The preferred representation is a 'linear and calibrated'. 'non-linear' is only a temporary representation used before data is written to low dynamic range image files (PNG, JPG) or displayed. For more information refer to the next section --- \ref{sec:tags}. The channels must be named using upper case letters: 'X', 'Y' and 'Z'. For color images, all three X, Y and Z channels must be given. It is enough to include 'Y' channel for gray-level images. \section{Tags} \label{sec:tags} pfs format allows for storing tags, which are 'name=value' pairs. Tags are robust mechanism for specifying additional information within a pfs-stream. Both the name and value should be a text string, i.e. if a floating point number is to be stored, it should be converted into a text string. The name must not contain '=' and ':' character (some programs use notation 'channel\_name:tag\_name' to assign a tag to the channel). Spaces in front of and after '=' are allowed, although they will not be skipped and they will be interpreted as a part of name or value strings. Tags can be associated with a frame or separate channel, depending how they are placed in the text header of the pfs frame (see Table~\ref{cap:pfs-frame}). Each tag associated with a single frame or channel must have an unique name. There is no limit to the number of tags. In general, tags can be used to store any user defined data, but there are also several tags that are reserved and are part of the pfs format. Those tags let precisely define content of the pfs stream. The reserved tags are listed below: \begin{description} \item LUMINANCE specifies a photometric content of the XYZ color channels or Y luminance channel alone. LUMINANCE tag distinguishes between different methods of storing lumiance data. This tag must be associated with a frame and the frame must contain either all XYZ channels or Y channel. Possible values are: ABSOLUTE, RELATIVE, and DISPLAY. \begin{description} \item ABSOLUTE Set the LUMINANCE tag to this value if the high-dynamic range data is calibrated. Y channel should contain absolute luminance values given in $cd/m^2$. Note that luminance values must be $\geq0$ for calibrated content. \item RELATIVE High-dynamic range data is of RELATIVE LUMINANCE if it is not calibrated, that is Y channel data is proportional to luminance, but nothing is known about absolute value of luminance. This is the case of most of the high-dynamic range images available on Internet. \item DISPLAY If the data comes from low-dynamic range file and no colorimetric information is provided in ICC profile, the data is simply given in pixel values of an unknown display device. This is the worst case, but also most common as most of the low-dynamic range formats (jpeg, png, tiff) do not contain any data that can be used to recover luminance values. The values of the Y channel can range from $0$ to $1$ and are already gamma corrected. \end{description} If the LUMINANCE tag is not specified in the pfs-stream, RELATIVE is assumed. Example: LUMINANCE=ABSOLUTE \item VISUAL\_CONTENT tag specifies visual content of the XYZ color channels or Y luminance channel alone. If an image was captured as high-dynamic range photograph, it has one-to-one correspondence with the real word, therefore its VISUAL\_CONTENT is MEASUREMENT. However, if the same image has been tone mapped (or gamut mapped) it still resembles appearance of the real word scene, but it has no longer one-to-one correspondence. In this case its VISUAL\_CONTENT is RENDERING. This tag is typically set to rendering after tone mapping of high-dynamic range images. This tag must be associated with a frame and the frame must contain either all XYZ channels or Y channel. \begin{description} \item MEASUREMENT Set VISUAL\_CONTENT tag to MEASUREMENT if the image has one-to-one correspondence with the real word, i.e. it contains measured data. \item RENDERING Set VISUAL\_CONTENT to RENDERING if the image has the same appearance as the real world scene, but there is no photometric correspondence. \end{description} If the tag is not specified in the pfs-stream, MEASUREMENT is assumed. If LUMINANCE tag is set to DISPLAY, the VISUAL\_CONTENT is assumed to be RENDERING. Example: VISUAL\_CONTENT=RENDERING \item WHITE\_Y defines the value of channel Y that is perceived as reference white. The value should be given in units of an Y channel. If LUMINANCE=ABSOLUTE, the white point is given in $cd/m^2$. The value of this tag should be a single floating point number in a text format. Example: WHITE\_Y=100 \item WHITE\_x, WHITE\_y tags define relative coordinates of color that is perceived as reference white. The value of those tags must be a floating point number in a text format. The value is given as a relative colorimatric coordinates of the CIE XYZ space ($2^\circ$ standard observer) $y=Y/(X+Y+Z)$ and $x=X/(X+Y+Z)$. If the tag is not specified, D65 white point is assumed: $x=0.3127\:y=0.3290$ Example: WHITE\_x=0.3457~~WHITE\_y=0.3585 \item FILE\_NAME contains a string with the name of a source file. This can be used to locate the origin of a frame. Example: FILE\_NAME=my\_sequence\_frame\_0000.hdr \item BITDEPTH specifies the number of bits, that are required to store a single channel in a display-referred image (LUMINANCE=DISPLAY) without quality loss. The number should be from 1 to 32. Example: BITDEPTH=16 \end{description} \section{Discussion} The structure of pfs files is a compromise between simplicity and robustness and (as well) between portability and performance. Therefore a small header is stored in text format as this is the easiest to decode on different platforms. Storing image data as text would result in too much overhead and thus binary format is used. Since parsing a file is typically more difficult to implement than writing it, pfs format tries to make parsing files as easy as possible. This is why sizes of all variable length structures are given first and then actual data follows. \end{document} pfstools-1.8.5/INSTALL0000644000175000017500000003633211500011217011343 00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. pfstools-1.8.5/configure0000755000175000017500000215542111652214377012250 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.67 for pfstools 1.8.5. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 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 # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (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 # 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 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="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_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { 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_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi 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'` # 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_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # 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; as_fn_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 } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac 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='mkdir -p "$as_dir"' 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'" # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac ECHO=${lt_ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF $* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/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= # Identity of this package. PACKAGE_NAME='pfstools' PACKAGE_TARNAME='pfstools' PACKAGE_VERSION='1.8.5' PACKAGE_STRING='pfstools 1.8.5' PACKAGE_BUGREPORT='' PACKAGE_URL='' # 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" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS OCTAVE_OCT_DIR OCTAVE_M_DIR GDAL_SUPPORT_FALSE GDAL_SUPPORT_TRUE MATLAB_SUPPORT_FALSE MATLAB_SUPPORT_TRUE GL_SUPPORT_FALSE GL_SUPPORT_TRUE PDFLATEX_SUPPORT_FALSE PDFLATEX_SUPPORT_TRUE QT_SUPPORT_FALSE QT_SUPPORT_TRUE IMAGEMAGICK_SUPPORT_FALSE IMAGEMAGICK_SUPPORT_TRUE JPEGHDR_SUPPORT_FALSE JPEGHDR_SUPPORT_TRUE TIFF_SUPPORT_FALSE TIFF_SUPPORT_TRUE OPENEXR_SUPPORT_FALSE OPENEXR_SUPPORT_TRUE PPM_SUPPORT_FALSE PPM_SUPPORT_TRUE OCTAVE_SUPPORT_FALSE OCTAVE_SUPPORT_TRUE PDFLATEX MKOCTFILE MEX_EXT MEX_DIR GL_CFLAGS GL_LIBS GDAL_LIBS JPEGHDR_LIBS TIFF_LIBS NETPBM_CFLAGS NETPBM_LIBS BASH_PATH PKG_DATADIR MEX MAC_OS_FALSE MAC_OS_TRUE MOC QT_LIBS QT_CFLAGS OPENEXR_LIBS OPENEXR_CFLAGS IMAGEMAGICK_LIBS IMAGEMAGICK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG CXXCPP CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL lt_ECHO RANLIB AR OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc 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_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld enable_libtool_lock enable_debug enable_netpbm enable_openexr enable_tiff enable_qt enable_jpeghdr enable_imagemagick enable_octave enable_opengl enable_matlab enable_gdal with_exrdir with_qtdir with_qtinclude with_qtlibs with_moc with_mex with_mex_dir with_bash with_oct_version with_octave_dir with_octave_m_dir with_octave_oct_dir with_mkoctfile ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP CXXCPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR IMAGEMAGICK_CFLAGS IMAGEMAGICK_LIBS OPENEXR_CFLAGS OPENEXR_LIBS QT_CFLAGS QT_LIBS' # 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= ;; *) 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_fn_error $? "invalid feature name: $ac_useropt" 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_fn_error $? "invalid feature name: $ac_useropt" 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_fn_error $? "invalid package name: $ac_useropt" 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_fn_error $? "invalid package name: $ac_useropt" 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_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac 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_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $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_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" 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_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # 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_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" 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 pfstools 1.8.5 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/pfstools] --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 pfstools 1.8.5:";; 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] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-debug Enable debug symbols and asserts --disable-netpbm Do not compile programs that use NETPBM (NetPBM) library --disable-openexr Do not compile programs that use OpenEXR library --disable-tiff Do not compile programs that use TIFF library --disable-qt Do not compile programs that use QT library --disable-jpeghdr Do not compile programs that use JPEGHDR library --disable-imagemagick Do not compile programs that use ImageMagick library --disable-octave Do not compile octave interface functions --disable-opengl Do not compile opengl code (pfsglview) --disable-matlab Do not compile matlab files --disable-gdal Do not compile programs that use GDAL library Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-openexrdir path where exr include files are installed --with-qtdir=DIR Qt installation directory default=$QTDIR --with-qtinclude=DIR Qt include directory (overwrites qtdir) --with-qtlibs=DIR Qt library directory (overwrites qtdir) --with-moc Qt meta object compiler --with-mex MATLAB compiler command --with-mex-dir path for MATLAB files --with-bash location of the bash shell, needed for some pfs* scripts --with-oct-version Octave version, default empty, example: '2.1.35' --with-octave-dir where Octave's .oct and .m files should be installed --with-octave-m-dir where Octave's .m files should be installed --with-octave-oct-dir where Octave's .oct files should be installed --with-mkoctfile mkoctfile command Some influential environment variables: CXX C++ compiler command CXXFLAGS 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 (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor CXXCPP C++ preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path IMAGEMAGICK_CFLAGS C compiler flags for IMAGEMAGICK, overriding pkg-config IMAGEMAGICK_LIBS linker flags for IMAGEMAGICK, overriding pkg-config OPENEXR_CFLAGS C compiler flags for OPENEXR, overriding pkg-config OPENEXR_LIBS linker flags for OPENEXR, overriding pkg-config QT_CFLAGS C compiler flags for QT, overriding pkg-config QT_LIBS linker flags for QT, overriding pkg-config 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 the package provider. _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 pfstools configure 1.8.5 generated by GNU Autoconf 2.67 Copyright (C) 2010 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 ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { 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 : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 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 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* 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 $2 (); /* 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_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_link 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 pfstools $as_me 1.8.5, which was generated by GNU Autoconf 2.67. 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) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append 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 as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset 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 $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" 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:${as_lineno-$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= ;; #( *) { eval $ac_var=; 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 $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" 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 $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" 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 $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" 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'; as_fn_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 $as_echo "/* confdefs.h */" > 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 cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _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 # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac 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 /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$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" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5 ; } 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. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$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. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$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_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## 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 am__api_version='1.11' 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_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 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:${as_lineno-$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:${as_lineno-$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' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } 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"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$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 test -d ./--version && rmdir ./--version 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. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$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 for ac_prog in gawk mawk nawk awk 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # 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_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$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 eval "test \"\${ac_cv_prog_make_${ac_make}_set+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:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='pfstools' VERSION='1.8.5' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # perform tests in C++ language ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # 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_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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 if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5 ; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5 ; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; 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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$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_cxx_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes 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_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.2.6b' macro_revision='1.3017' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$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_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; 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:${as_lineno-$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_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; 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 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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$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:${as_lineno-$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:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5 ; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else 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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes 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:${as_lineno-$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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg 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:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if test "${ac_cv_path_SED+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_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 do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_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 '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_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_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$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 as_fn_arith $ac_count + 1 && ac_count=$as_val 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_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$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 as_fn_arith $ac_count + 1 && ac_count=$as_val 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_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_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 fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # 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 ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&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. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname 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:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test "${lt_cv_path_NM+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$ac_tool_prefix"; then for ac_prog in "dumpbin -symbols" "link -dump -symbols" 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in "dumpbin -symbols" "link -dump -symbols" 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 DUMPBIN=$ac_ct_DUMPBIN fi fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if test "${lt_cv_nm_interface+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:5026: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:5029: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:5032: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if test "${lt_cv_sys_max_cmd_len+set}" = set; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if test "${lt_cv_ld_reload_flag+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if test "${lt_cv_deplibs_check_method+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # 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_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 6238 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if test "${lt_cv_cc_needs_belf+set}" = set; then : $as_echo_n "(cached) " >&6 else 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if test "${lt_cv_apple_cc_single_mod+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5 ; } 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:${as_lineno-$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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h 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` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # 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_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC 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:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$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_cxx_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes 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_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_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 confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} _lt_caught_CXX_error=yes; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu else _lt_caught_CXX_error=yes fi # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; pic_mode="$withval" else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if test "${lt_cv_objdir+set}" = set; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" 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 # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8294: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8298: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 $as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8633: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:8637: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8738: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8742: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:8793: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:8797: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # 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 ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu) link_all_deplibs=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld='-rpath $libdir' archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) 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 exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi 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].*|aix[5-9]*) 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 exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi link_all_deplibs=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # 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=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='' link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi 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 export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # 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*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo(void) {} _ACEOF if ac_fn_c_try_link "$LINENO"; then : archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 $as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if test "${ac_cv_lib_dld_shl_load+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if test "${ac_cv_lib_dl_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if test "${ac_cv_lib_svld_dlopen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if test "${ac_cv_lib_dld_dld_link+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 11177 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if test "${lt_cv_dlopen_self_static+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line 11273 "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CC="$lt_save_CC" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # 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 ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&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. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname 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:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${lt_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) 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 exp_sym_flag='-Bexport' no_entry_flag="" 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].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='' link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5]* | *pgcpp\ [1-5]*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 $as_echo "$lt_prog_compiler_pic_CXX" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13229: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13233: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13328: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13332: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13380: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13384: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) link_all_deplibs_CXX=no ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 $as_echo "$archive_cmds_need_lc_CXX" >&6; } ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[123]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[3-9]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; if test "$enable_debug" = "yes" ; then temp_CXXFLAGS=`echo $CXXFLAGS | sed "s/-O./ /; s/-g//"` CXXFLAGS="-g $temp_CXXFLAGS" $as_echo "#define DEBUG 1" >>confdefs.h fi else enable_debug="no" temp_CXXFLAGS=`echo $CXXFLAGS | sed "s/-O./ /; s/-g//"` CXXFLAGS="-O3 $temp_CXXFLAGS" $as_echo "#define NDEBUG 1" >>confdefs.h fi ########################################################### # system detection and configuration # Check whether --enable-netpbm was given. if test "${enable_netpbm+set}" = set; then : enableval=$enable_netpbm; if test "$enable_netpbm" = "no" ; then do_netpbm="no" else if test "$enable_netpbm" = "yes" ; then do_netpbm="yes" fi fi else do_netpbm="yes" fi # Check whether --enable-openexr was given. if test "${enable_openexr+set}" = set; then : enableval=$enable_openexr; if test "$enable_openexr" = "no" ; then do_openexr="no" else if test "$enable_openexr" = "yes" ; then do_openexr="yes" fi fi else do_openexr="yes" fi # Check whether --enable-tiff was given. if test "${enable_tiff+set}" = set; then : enableval=$enable_tiff; if test "$enable_tiff" = "no" ; then do_tiff="no" else if test "$enable_tiff" = "yes" ; then do_tiff="yes" fi fi else do_tiff="yes" fi # Check whether --enable-qt was given. if test "${enable_qt+set}" = set; then : enableval=$enable_qt; if test "$enable_qt" = "no" ; then do_qt="no" else if test "$enable_qt" = "yes" ; then do_qt="yes" fi fi else do_qt="yes" fi # Check whether --enable-jpeghdr was given. if test "${enable_jpeghdr+set}" = set; then : enableval=$enable_jpeghdr; if test "$enable_jpeghdr" = "no" ; then do_jpeghdr="no" else if test "$enable_jpeghdr" = "yes" ; then do_jpeghdr="yes" fi fi else do_jpeghdr="yes" fi # Check whether --enable-imagemagick was given. if test "${enable_imagemagick+set}" = set; then : enableval=$enable_imagemagick; if test "$enable_imagemagick" = "no" ; then do_imagemagick="no" else if test "$enable_imagemagick" = "yes" ; then do_imagemagick="yes" fi fi else do_imagemagick="yes" fi # Check whether --enable-octave was given. if test "${enable_octave+set}" = set; then : enableval=$enable_octave; if test "$enable_octave" = "no" ; then do_octave="no" else if test "$enable_octave" = "yes" ; then do_octave="yes" fi fi else do_octave="yes" fi # Check whether --enable-opengl was given. if test "${enable_opengl+set}" = set; then : enableval=$enable_opengl; if test "$enable_opengl" = "no" ; then do_opengl="no" else if test "$enable_opengl" = "yes" ; then do_opengl="yes" fi fi else do_opengl="yes" fi # Check whether --enable-matlab was given. if test "${enable_matlab+set}" = set; then : enableval=$enable_matlab; if test "$enable_matlab" = "no" ; then do_matlab="no" else if test "$enable_matlab" = "yes" ; then do_matlab="yes" fi fi else do_matlab="yes" fi # Check whether --enable-gdal was given. if test "${enable_gdal+set}" = set; then : enableval=$enable_gdal; if test "$enable_gdal" = "no" ; then do_gdal="no" else if test "$enable_gdal" = "yes" ; then do_gdal="yes" fi fi else do_gdal="yes" fi if test "$do_netpbm" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pm_init in -lnetpbm" >&5 $as_echo_n "checking for pm_init in -lnetpbm... " >&6; } if test "${ac_cv_lib_netpbm_pm_init+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnetpbm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 pm_init (); int main () { return pm_init (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_netpbm_pm_init=yes else ac_cv_lib_netpbm_pm_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_netpbm_pm_init" >&5 $as_echo "$ac_cv_lib_netpbm_pm_init" >&6; } if test "x$ac_cv_lib_netpbm_pm_init" = x""yes; then : $as_echo "#define HAVE_LIBNETPPM 1" >>confdefs.h NETPBM_LIBS="-lnetpbm" NETPBM_CFLAGS="" netpbm_support="yes" else netpbm_support="no" fi if test "$netpbm_support" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ppm_init in -lppm" >&5 $as_echo_n "checking for ppm_init in -lppm... " >&6; } if test "${ac_cv_lib_ppm_ppm_init+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lppm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 ppm_init (); int main () { return ppm_init (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_ppm_ppm_init=yes else ac_cv_lib_ppm_ppm_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ppm_ppm_init" >&5 $as_echo "$ac_cv_lib_ppm_ppm_init" >&6; } if test "x$ac_cv_lib_ppm_ppm_init" = x""yes; then : $as_echo "#define HAVE_LIBNETPPM 1" >>confdefs.h NETPBM_LIBS="-lppm" NETPBM_CFLAGS="" netpbm_support="yes" else netpbm_support="no" fi fi if test "$netpbm_support" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NetPBM header files" >&5 $as_echo_n "checking for NetPBM header files... " >&6; } CPATH_NO_COLON=`echo $CPATH | sed -e "s/:/ /g"` for DIR in ${prefix}/include /usr/local/include/ /usr/include /opt/local/include $CPATH_NO_COLON; do test -d "$DIR" && NETPBM_PPMH=`find $DIR -name ppm.h` if test -n "$NETPBM_PPMH"; then NETPBM_CFLAGS="-I ${NETPBM_PPMH%%ppm.h}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } break fi done if test -z "$NETPBM_CFLAGS"; then netpbm_support="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi else netpbm_support="no" fi if test "$do_imagemagick" = "yes"; then if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # 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_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # 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_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IMAGEMAGICK" >&5 $as_echo_n "checking for IMAGEMAGICK... " >&6; } if test -n "$IMAGEMAGICK_CFLAGS"; then pkg_cv_IMAGEMAGICK_CFLAGS="$IMAGEMAGICK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ImageMagick++ >= 6.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "ImageMagick++ >= 6.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_IMAGEMAGICK_CFLAGS=`$PKG_CONFIG --cflags "ImageMagick++ >= 6.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$IMAGEMAGICK_LIBS"; then pkg_cv_IMAGEMAGICK_LIBS="$IMAGEMAGICK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ImageMagick++ >= 6.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "ImageMagick++ >= 6.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_IMAGEMAGICK_LIBS=`$PKG_CONFIG --libs "ImageMagick++ >= 6.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then IMAGEMAGICK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "ImageMagick++ >= 6.0" 2>&1` else IMAGEMAGICK_PKG_ERRORS=`$PKG_CONFIG --print-errors "ImageMagick++ >= 6.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$IMAGEMAGICK_PKG_ERRORS" >&5 imagemagick_support="no" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } imagemagick_support="no" else IMAGEMAGICK_CFLAGS=$pkg_cv_IMAGEMAGICK_CFLAGS IMAGEMAGICK_LIBS=$pkg_cv_IMAGEMAGICK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBIMAGEMAGICK 1" >>confdefs.h imagemagick_support="yes" fi else imagemagick_support="no" fi if test "$do_tiff" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFOpen in -ltiff" >&5 $as_echo_n "checking for TIFFOpen in -ltiff... " >&6; } if test "${ac_cv_lib_tiff_TIFFOpen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltiff $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 TIFFOpen (); int main () { return TIFFOpen (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_tiff_TIFFOpen=yes else ac_cv_lib_tiff_TIFFOpen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFOpen" >&5 $as_echo "$ac_cv_lib_tiff_TIFFOpen" >&6; } if test "x$ac_cv_lib_tiff_TIFFOpen" = x""yes; then : $as_echo "#define HAVE_LIBTIFF 1" >>confdefs.h TIFF_LIBS="-ltiff" tiff_support="yes" else tiff_support="no" fi else tiff_support="no" fi if test "$do_jpeghdr" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeghdr_CreateDecompress in -ljpeghdr" >&5 $as_echo_n "checking for jpeghdr_CreateDecompress in -ljpeghdr... " >&6; } if test "${ac_cv_lib_jpeghdr_jpeghdr_CreateDecompress+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ljpeghdr -lhdr -ljpeg -lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 jpeghdr_CreateDecompress (); int main () { return jpeghdr_CreateDecompress (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_jpeghdr_jpeghdr_CreateDecompress=yes else ac_cv_lib_jpeghdr_jpeghdr_CreateDecompress=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeghdr_jpeghdr_CreateDecompress" >&5 $as_echo "$ac_cv_lib_jpeghdr_jpeghdr_CreateDecompress" >&6; } if test "x$ac_cv_lib_jpeghdr_jpeghdr_CreateDecompress" = x""yes; then : $as_echo "#define HAVE_LIBJPEGHDR 1" >>confdefs.h JPEGHDR_LIBS="-lhdr -ljpeghdr -ljpeg -lm" jpeghdr_support="yes" else jpeghdr_support="no" fi else jpeghdr_support="no" fi # Check whether --with-exrdir was given. if test "${with_exrdir+set}" = set; then : withval=$with_exrdir; openexr_incpath=$withval fi if test "$do_openexr" = "yes"; then #Check first using pkg-config pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OPENEXR" >&5 $as_echo_n "checking for OPENEXR... " >&6; } if test -n "$OPENEXR_CFLAGS"; then pkg_cv_OPENEXR_CFLAGS="$OPENEXR_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"OpenEXR >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "OpenEXR >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_OPENEXR_CFLAGS=`$PKG_CONFIG --cflags "OpenEXR >= 1.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$OPENEXR_LIBS"; then pkg_cv_OPENEXR_LIBS="$OPENEXR_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"OpenEXR >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "OpenEXR >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_OPENEXR_LIBS=`$PKG_CONFIG --libs "OpenEXR >= 1.0" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then OPENEXR_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "OpenEXR >= 1.0" 2>&1` else OPENEXR_PKG_ERRORS=`$PKG_CONFIG --print-errors "OpenEXR >= 1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$OPENEXR_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $OPENEXR_PKG_ERRORS " >&5 $as_echo "$as_me: WARNING: $OPENEXR_PKG_ERRORS " >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenEXR header files" >&5 $as_echo_n "checking for OpenEXR header files... " >&6; } CPATH_NO_COLON=`echo $CPATH | sed -e "s/:/ /g"` for DIR in ${prefix}/include /usr/local/include /usr/include /opt/local/include $CPATH_NO_COLON; do test -d "$DIR" && openexr_incpath=`find $DIR -name ImfRgbaFile.h` if test -n "$openexr_incpath"; then openexr_incpath="${openexr_incpath%%ImfRgbaFile.h}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } break fi done if test -z "$openexr_incpath"; then openexr_support="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi #if not found TMP_LIBS="$LIBS" TMP_CXXFLAGS="$CXXFLAGS" OPENEXR_LIBS="-lImath -lIlmImf -lHalf -lIex -lz" OPENEXR_CFLAGS="-I$openexr_incpath" LIBS="$OPENEXR_LIBS $LIBS" CXXFLAGS="$CXXFLAGS $OPENEXR_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include using namespace Imf; using namespace Imath; int main () { RgbaInputFile file("bzdet"); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : $as_echo "#define HAVE_LIBOPENEXR 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; }; openexr_support="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; }; openexr_support="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$TMP_LIBS CXXFLAGS=$TMP_CXXFLAGS elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $OPENEXR_PKG_ERRORS " >&5 $as_echo "$as_me: WARNING: $OPENEXR_PKG_ERRORS " >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenEXR header files" >&5 $as_echo_n "checking for OpenEXR header files... " >&6; } CPATH_NO_COLON=`echo $CPATH | sed -e "s/:/ /g"` for DIR in ${prefix}/include /usr/local/include /usr/include /opt/local/include $CPATH_NO_COLON; do test -d "$DIR" && openexr_incpath=`find $DIR -name ImfRgbaFile.h` if test -n "$openexr_incpath"; then openexr_incpath="${openexr_incpath%%ImfRgbaFile.h}" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } break fi done if test -z "$openexr_incpath"; then openexr_support="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi #if not found TMP_LIBS="$LIBS" TMP_CXXFLAGS="$CXXFLAGS" OPENEXR_LIBS="-lImath -lIlmImf -lHalf -lIex -lz" OPENEXR_CFLAGS="-I$openexr_incpath" LIBS="$OPENEXR_LIBS $LIBS" CXXFLAGS="$CXXFLAGS $OPENEXR_CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include using namespace Imf; using namespace Imath; int main () { RgbaInputFile file("bzdet"); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : $as_echo "#define HAVE_LIBOPENEXR 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; }; openexr_support="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; }; openexr_support="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$TMP_LIBS CXXFLAGS=$TMP_CXXFLAGS else OPENEXR_CFLAGS=$pkg_cv_OPENEXR_CFLAGS OPENEXR_LIBS=$pkg_cv_OPENEXR_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBOPENEXR 1" >>confdefs.h openexr_support="yes" fi #end of PKG_CHECK_MODULES else openexr_support="no" fi ## QT library check # Check whether --with-qtdir was given. if test "${with_qtdir+set}" = set; then : withval=$with_qtdir; QTDIR=$withval fi # Check whether --with-qtinclude was given. if test "${with_qtinclude+set}" = set; then : withval=$with_qtinclude; QTINCLUDE=$withval fi # Check whether --with-qtlibs was given. if test "${with_qtlibs+set}" = set; then : withval=$with_qtlibs; QTLIBS=$withval fi if test "$do_qt" = "yes"; then ##If no QTDIR specified, try pkg-config #if test x"$QTDIR" = x && test x"$QTINCLUDE" = x && test x"$QTLIBS" = x ; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT" >&5 $as_echo_n "checking for QT... " >&6; } if test -n "$QT_CFLAGS"; then pkg_cv_QT_CFLAGS="$QT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtGui\""; } >&5 ($PKG_CONFIG --exists --print-errors "QtGui") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_QT_CFLAGS=`$PKG_CONFIG --cflags "QtGui" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$QT_LIBS"; then pkg_cv_QT_LIBS="$QT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtGui\""; } >&5 ($PKG_CONFIG --exists --print-errors "QtGui") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_QT_LIBS=`$PKG_CONFIG --libs "QtGui" 2>/dev/null` else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then QT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "QtGui" 2>&1` else QT_PKG_ERRORS=`$PKG_CONFIG --print-errors "QtGui" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$QT_PKG_ERRORS" >&5 #if pkg-config fails { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $QT_PKG_ERRORS " >&5 $as_echo "$as_me: WARNING: $QT_PKG_ERRORS " >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking QTDIR" >&5 $as_echo_n "checking QTDIR... " >&6; } # Check that QTDIR is defined or that --with-qtdir given if test x"$QTDIR" = x ; then QT_SEARCH="/usr/lib/qt31 /usr/local/qt31 /usr/lib/qt3 /usr/local/qt3 /usr/lib/qt2 /usr/local/qt2 /usr/lib/qt /usr/local/qt /usr/share/qt3 /usr/share/qt /sw/lib/qt3mac" for i in $QT_SEARCH; do if test -f $i/include/qglobal.h -a x$QTDIR = x; then QTDIR=$i; fi done fi if test x"$QTDIR" != x || test x"$QTINCLUDE" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QTDIR" >&5 $as_echo "$QTDIR" >&6; } if test x"$QTLIBS" = x && test x"$QTDIR" != x; then QT_LIBS="-L$QTDIR/lib -lqt-mt" elif test x"$QTLIBS" != x; then QT_LIBS="-L$QTLIBS -lqt-mt" else QT_LIBS="-lqt-mt" fi if test x"$QTINCLUDE" = x; then QTINCLUDE="$QTDIR/include" fi if test "$enable_debug"="yes"; then QT_CFLAGS="-DQT_SHARED -DQT_THREAD_SUPPORT -D_REENTRANT -I$QTINCLUDE" else QT_CFLAGS="-DQT_SHARED -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -D_REENTRANT -I$QTINCLUDE" fi # Try to compile and link with QT TMP_LIBS="$LIBS" TMP_CXXFLAGS="$CXXFLAGS" LIBS="$QT_LIBS $LIBS" CXXFLAGS="$QT_CFLAGS $QT_CXXFLAGS $CXXFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int argc = 0; char** argv = NULL; QApplication app(argc, argv); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : QT_SUPPORT="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Unable to compile or link with QT. QT support disabled." >&5 $as_echo "Unable to compile or link with QT. QT support disabled." >&6; }; QT_SUPPORT="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$TMP_LIBS CXXFLAGS=$TMP_CXXFLAGS else { $as_echo "$as_me:${as_lineno-$LINENO}: result: No QTDIR found. QT support disabled." >&5 $as_echo "No QTDIR found. QT support disabled." >&6; } QT_SUPPORT="no" fi # QT_SUPPORT="no" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } #if pkg-config fails { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $QT_PKG_ERRORS " >&5 $as_echo "$as_me: WARNING: $QT_PKG_ERRORS " >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: checking QTDIR" >&5 $as_echo_n "checking QTDIR... " >&6; } # Check that QTDIR is defined or that --with-qtdir given if test x"$QTDIR" = x ; then QT_SEARCH="/usr/lib/qt31 /usr/local/qt31 /usr/lib/qt3 /usr/local/qt3 /usr/lib/qt2 /usr/local/qt2 /usr/lib/qt /usr/local/qt /usr/share/qt3 /usr/share/qt /sw/lib/qt3mac" for i in $QT_SEARCH; do if test -f $i/include/qglobal.h -a x$QTDIR = x; then QTDIR=$i; fi done fi if test x"$QTDIR" != x || test x"$QTINCLUDE" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QTDIR" >&5 $as_echo "$QTDIR" >&6; } if test x"$QTLIBS" = x && test x"$QTDIR" != x; then QT_LIBS="-L$QTDIR/lib -lqt-mt" elif test x"$QTLIBS" != x; then QT_LIBS="-L$QTLIBS -lqt-mt" else QT_LIBS="-lqt-mt" fi if test x"$QTINCLUDE" = x; then QTINCLUDE="$QTDIR/include" fi if test "$enable_debug"="yes"; then QT_CFLAGS="-DQT_SHARED -DQT_THREAD_SUPPORT -D_REENTRANT -I$QTINCLUDE" else QT_CFLAGS="-DQT_SHARED -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -D_REENTRANT -I$QTINCLUDE" fi # Try to compile and link with QT TMP_LIBS="$LIBS" TMP_CXXFLAGS="$CXXFLAGS" LIBS="$QT_LIBS $LIBS" CXXFLAGS="$QT_CFLAGS $QT_CXXFLAGS $CXXFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int argc = 0; char** argv = NULL; QApplication app(argc, argv); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : QT_SUPPORT="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: Unable to compile or link with QT. QT support disabled." >&5 $as_echo "Unable to compile or link with QT. QT support disabled." >&6; }; QT_SUPPORT="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$TMP_LIBS CXXFLAGS=$TMP_CXXFLAGS else { $as_echo "$as_me:${as_lineno-$LINENO}: result: No QTDIR found. QT support disabled." >&5 $as_echo "No QTDIR found. QT support disabled." >&6; } QT_SUPPORT="no" fi # QT_SUPPORT="no" else QT_CFLAGS=$pkg_cv_QT_CFLAGS QT_LIBS=$pkg_cv_QT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBQT 1" >>confdefs.h QT_SUPPORT="yes" fi #end of PKG_CHECK_MODULES #else ## Check QT using the specified QTDIR # pfs_CHECK_QT #fi ## Look for MOC if test -z "$QTDIR"; then MOC="moc-qt4" else MOC="$QTDIR/bin/moc" fi # Check whether --with-moc was given. if test "${with_moc+set}" = set; then : withval=$with_moc; MOC=$withval fi # Extract the first word of "$MOC", so it can be a program name with args. set dummy $MOC; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MOC+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MOC in [\\/]* | ?:[\\/]*) ac_cv_path_MOC="$MOC" # 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_MOC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MOC=$ac_cv_path_MOC if test -n "$MOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5 $as_echo "$MOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$MOC" && ( { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no QT meta object compiler (moc) found in the path" >&5 $as_echo "$as_me: WARNING: no QT meta object compiler (moc) found in the path" >&2;}; QT_SUPPORT="no" ) else QT_SUPPORT="no" fi if test "$do_opengl" = "yes"; then # Checks for OpenGL under given operating system, # adds operating system specific flags and libs. case "$host_os" in [cC][yY][gG][wW][iI][nN]|mingw32|mks|cygwin) $as_echo "#define WIN32 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL" >&5 $as_echo_n "checking for OpenGL... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { glEnd(); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : $as_echo "#define HAVE_LIBOPENGL 1" >>confdefs.h GL_LIBS="-L/usr/local/lib -lglut32 -lglu32 -lopengl32 -lgdi32" GL_CFLAGS="-I/usr/local/include -DCYGWIN -DWIN32 -D_WIN32 -DGLEW_STATIC" gl_support="yes" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OpenGL test failed. pfsglview will not be compiled " >&5 $as_echo "$as_me: WARNING: OpenGL test failed. pfsglview will not be compiled " >&2;} gl_support="no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; darwin*) $as_echo "#define HAVE_LIBOPENGL 1" >>confdefs.h GL_LIBS="$LIBS -framework GLUT -framework OpenGL -framework Cocoa" gl_support="yes" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glDisable in -lGL" >&5 $as_echo_n "checking for glDisable in -lGL... " >&6; } if test "${ac_cv_lib_GL_glDisable+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lGL $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 glDisable (); int main () { return glDisable (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_GL_glDisable=yes else ac_cv_lib_GL_glDisable=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_GL_glDisable" >&5 $as_echo "$ac_cv_lib_GL_glDisable" >&6; } if test "x$ac_cv_lib_GL_glDisable" = x""yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for glutInit in -lglut" >&5 $as_echo_n "checking for glutInit in -lglut... " >&6; } if test "${ac_cv_lib_glut_glutInit+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lglut $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 glutInit (); int main () { return glutInit (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_glut_glutInit=yes else ac_cv_lib_glut_glutInit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_glut_glutInit" >&5 $as_echo "$ac_cv_lib_glut_glutInit" >&6; } if test "x$ac_cv_lib_glut_glutInit" = x""yes; then : $as_echo "#define HAVE_LIBOPENGL 1" >>confdefs.h GL_LIBS="$LIBS -lglut -lGLU -lGL -lpthread" gl_support="yes" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: GLUT library not found. pfsglview will not be compiled " >&5 $as_echo "$as_me: WARNING: GLUT library not found. pfsglview will not be compiled " >&2;} gl_support="no" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: OpenGL test failed. pfsglview will not be compiled " >&5 $as_echo "$as_me: WARNING: OpenGL test failed. pfsglview will not be compiled " >&2;} gl_support="no" fi ;; esac else gl_support="no" fi case "$host_os" in darwin*) if true; then MAC_OS_TRUE= MAC_OS_FALSE='#' else MAC_OS_TRUE='#' MAC_OS_FALSE= fi ;; *) if false; then MAC_OS_TRUE= MAC_OS_FALSE='#' else MAC_OS_TRUE='#' MAC_OS_FALSE= fi ;; esac MEX=mex MEX_EXT="" # Check whether --with-mex was given. if test "${with_mex+set}" = set; then : withval=$with_mex; MEX=$withval fi if test "${prefix}" = "NONE"; then MEX_DIR=`eval echo "/usr/local/share/${PACKAGE}/pfstools_matlab"` else first_pass=`eval echo "${datadir}/${PACKAGE}/pfstools_matlab"` MEX_DIR=`eval echo "$first_pass"` fi # Check whether --with-mex-dir was given. if test "${with_mex_dir+set}" = set; then : withval=$with_mex_dir; MEX_DIR=$withval fi matlab_support="no"; if test "$do_matlab" = "yes"; then # Extract the first word of "$MEX", so it can be a program name with args. set dummy $MEX; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MEX+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MEX in [\\/]* | ?:[\\/]*) ac_cv_path_MEX="$MEX" # 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_MEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MEX=$ac_cv_path_MEX if test -n "$MEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEX" >&5 $as_echo "$MEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -n "$MEX" && $MEX -v 2>/dev/null | grep MATLAB >/dev/null; then MATLAB_ROOT=`matlab -e 2>/dev/null | grep '^MATLAB=' | sed -e 's/MATLAB=//'`; MEX_EXT=`"$MATLAB_ROOT/bin/mexext" 2>/dev/null`; if test -z "$MEX_EXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to determine mex extension, defaulting to mexglx" >&5 $as_echo "$as_me: WARNING: unable to determine mex extension, defaulting to mexglx" >&2;} MEX_EXT="mexglx"; fi matlab_support="yes"; else if test -n "$MEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: mex script does not seem to come from matlab (could be Octave mex script). Pass the path to matlab mex using --with-mex option." >&5 $as_echo "$as_me: WARNING: mex script does not seem to come from matlab (could be Octave mex script). Pass the path to matlab mex using --with-mex option." >&2;} else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no matlab mex found in the path" >&5 $as_echo "$as_me: WARNING: no matlab mex found in the path" >&2;} fi fi fi if test "$do_gdal" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDALAllRegister in -lgdal" >&5 $as_echo_n "checking for GDALAllRegister in -lgdal... " >&6; } if test "${ac_cv_lib_gdal_GDALAllRegister+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgdal $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* 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 GDALAllRegister (); int main () { return GDALAllRegister (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_gdal_GDALAllRegister=yes else ac_cv_lib_gdal_GDALAllRegister=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gdal_GDALAllRegister" >&5 $as_echo "$ac_cv_lib_gdal_GDALAllRegister" >&6; } if test "x$ac_cv_lib_gdal_GDALAllRegister" = x""yes; then : $as_echo "#define HAVE_LIBGDAL 1" >>confdefs.h GDAL_LIBS="-lgdal" gdal_support="yes" else gdal_support="no" fi else gdal_support="no" fi # Add define pointing to data directory (for lookup tables, etc.) if test "${prefix}" = "NONE"; then PKG_DATADIR=`eval echo "/usr/local/share/${PACKAGE}"` else first_pass=`eval echo "${datadir}/${PACKAGE}"` PKG_DATADIR=`eval echo "$first_pass"` fi cat >>confdefs.h <<_ACEOF #define PKG_DATADIR "$PKG_DATADIR" _ACEOF # Check whether --with-bash was given. if test "${with_bash+set}" = set; then : withval=$with_bash; BASH_PATH=$withval fi test -z "$BASH_PATH" && BASH_PATH="bash" # Extract the first word of "$BASH_PATH", so it can be a program name with args. set dummy $BASH_PATH; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_BASH_PATH+set}" = set; then : $as_echo_n "(cached) " >&6 else case $BASH_PATH in [\\/]* | ?:[\\/]*) ac_cv_path_BASH_PATH="$BASH_PATH" # 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_BASH_PATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi BASH_PATH=$ac_cv_path_BASH_PATH if test -n "$BASH_PATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH_PATH" >&5 $as_echo "$BASH_PATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$BASH_PATH" && ( { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no bash shell found in the path, some programs may fail to run" >&5 $as_echo "$as_me: WARNING: no bash shell found in the path, some programs may fail to run" >&2;}; BASH_PATH="/bin/bash" ) ## TODO: check by compiling a simple program if it is necessary ##AC_PREFIX_DEFAULT("$HOME/local") #QT_PATH=$qtpath #AC_SUBST(QT_PATH) if test "$do_octave" = "yes"; then #Check for octave #oct_version="2.1.35" oct_version="" # Check whether --with-oct-version was given. if test "${with_oct_version+set}" = set; then : withval=$with_oct_version; oct_version=$withval fi if test -n "$oct_version"; then oct_version="-${oct_version}"; fi OCTAVE_OCT_DIR=`octave-config${oct_version} --oct-site-dir` OCTAVE_OCT_DIR=${OCTAVE_OCT_DIR:+${OCTAVE_OCT_DIR}/pfstools} OCTAVE_M_DIR=`octave-config${oct_version} --m-site-dir` OCTAVE_M_DIR=${OCTAVE_M_DIR:+${OCTAVE_M_DIR}/pfstools} # Check whether --with-octave-dir was given. if test "${with_octave_dir+set}" = set; then : withval=$with_octave_dir; OCTAVE_OCT_DIR=$withval; OCTAVE_M_DIR=$withval fi # Check whether --with-octave-m-dir was given. if test "${with_octave_m_dir+set}" = set; then : withval=$with_octave_m_dir; OCTAVE_M_DIR=$withval fi # Check whether --with-octave-oct-dir was given. if test "${with_octave_oct_dir+set}" = set; then : withval=$with_octave_oct_dir; OCTAVE_OCT_DIR=$withval fi test -z "$OCTAVE_OCT_DIR" && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no path for .oct files specified" >&5 $as_echo "$as_me: WARNING: no path for .oct files specified" >&2;} test -z "$OCTAVE_M_DIR" && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no path for .m files specified" >&5 $as_echo "$as_me: WARNING: no path for .m files specified" >&2;} MKOCTFILE="mkoctfile${oct_version}" # Check whether --with-mkoctfile was given. if test "${with_mkoctfile+set}" = set; then : withval=$with_mkoctfile; MKOCTFILE=$withval fi # Extract the first word of "$MKOCTFILE", so it can be a program name with args. set dummy $MKOCTFILE; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MKOCTFILE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $MKOCTFILE in [\\/]* | ?:[\\/]*) ac_cv_path_MKOCTFILE="$MKOCTFILE" # 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_MKOCTFILE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MKOCTFILE=$ac_cv_path_MKOCTFILE if test -n "$MKOCTFILE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKOCTFILE" >&5 $as_echo "$MKOCTFILE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$MKOCTFILE" && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no mkoctfile found in the path" >&5 $as_echo "$as_me: WARNING: no mkoctfile found in the path" >&2;} if test -z "$MKOCTFILE" || test -z "$OCTAVE_OCT_DIR" || test -z "$OCTAVE_M_DIR"; then octave_support="no" { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Octave support disabled" >&5 $as_echo "$as_me: WARNING: Octave support disabled" >&2;} else octave_support="yes" fi else # do_octave == yes octave_support="no" fi # Extract the first word of "pdflatex", so it can be a program name with args. set dummy pdflatex; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PDFLATEX+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PDFLATEX in [\\/]* | ?:[\\/]*) ac_cv_path_PDFLATEX="$PDFLATEX" # 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_PDFLATEX="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PDFLATEX=$ac_cv_path_PDFLATEX if test -n "$PDFLATEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5 $as_echo "$PDFLATEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$PDFLATEX" && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found in the path" >&5 $as_echo "$as_me: WARNING: pdflatex not found in the path" >&2;} if test "$octave_support" = "yes" ; then OCTAVE_SUPPORT_TRUE= OCTAVE_SUPPORT_FALSE='#' else OCTAVE_SUPPORT_TRUE='#' OCTAVE_SUPPORT_FALSE= fi if test "$netpbm_support" = "yes" ; then PPM_SUPPORT_TRUE= PPM_SUPPORT_FALSE='#' else PPM_SUPPORT_TRUE='#' PPM_SUPPORT_FALSE= fi if test "$openexr_support" = "yes" ; then OPENEXR_SUPPORT_TRUE= OPENEXR_SUPPORT_FALSE='#' else OPENEXR_SUPPORT_TRUE='#' OPENEXR_SUPPORT_FALSE= fi if test "$tiff_support" = "yes" ; then TIFF_SUPPORT_TRUE= TIFF_SUPPORT_FALSE='#' else TIFF_SUPPORT_TRUE='#' TIFF_SUPPORT_FALSE= fi if test "$jpeghdr_support" = "yes" ; then JPEGHDR_SUPPORT_TRUE= JPEGHDR_SUPPORT_FALSE='#' else JPEGHDR_SUPPORT_TRUE='#' JPEGHDR_SUPPORT_FALSE= fi if test "$imagemagick_support" = "yes" ; then IMAGEMAGICK_SUPPORT_TRUE= IMAGEMAGICK_SUPPORT_FALSE='#' else IMAGEMAGICK_SUPPORT_TRUE='#' IMAGEMAGICK_SUPPORT_FALSE= fi if test "$QT_SUPPORT" = "yes" ; then QT_SUPPORT_TRUE= QT_SUPPORT_FALSE='#' else QT_SUPPORT_TRUE='#' QT_SUPPORT_FALSE= fi if test -n "$PDFLATEX" ; then PDFLATEX_SUPPORT_TRUE= PDFLATEX_SUPPORT_FALSE='#' else PDFLATEX_SUPPORT_TRUE='#' PDFLATEX_SUPPORT_FALSE= fi if test "$gl_support" = "yes" ; then GL_SUPPORT_TRUE= GL_SUPPORT_FALSE='#' else GL_SUPPORT_TRUE='#' GL_SUPPORT_FALSE= fi if test "$matlab_support" = "yes" ; then MATLAB_SUPPORT_TRUE= MATLAB_SUPPORT_FALSE='#' else MATLAB_SUPPORT_TRUE='#' MATLAB_SUPPORT_FALSE= fi if test "$gdal_support" = "yes" ; then GDAL_SUPPORT_TRUE= GDAL_SUPPORT_FALSE='#' else GDAL_SUPPORT_TRUE='#' GDAL_SUPPORT_FALSE= fi ac_config_files="$ac_config_files Makefile" ac_config_files="$ac_config_files src/Makefile" ac_config_files="$ac_config_files src/pfs/Makefile" ac_config_files="$ac_config_files src/pfs/pfs.pc" ac_config_files="$ac_config_files src/fileformat/Makefile" ac_config_files="$ac_config_files src/filter/Makefile" ac_config_files="$ac_config_files src/octave/Makefile" ac_config_files="$ac_config_files src/pfsview/Makefile" ac_config_files="$ac_config_files src/pfsglview/Makefile" ac_config_files="$ac_config_files src/matlab/Makefile" ac_config_files="$ac_config_files doc/Makefile" ac_config_files="$ac_config_files src/fileformat/pfsin" ac_config_files="$ac_config_files src/fileformat/pfsout" ac_config_files="$ac_config_files src/fileformat/pfsindcraw" ac_config_files="$ac_config_files src/fileformat/pfsinmulti" ac_config_files="$ac_config_files src/pfsview/pfsv" ac_config_files="$ac_config_files src/hdrhtml/Makefile" 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:${as_lineno-$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= ;; #( *) { eval $ac_var=; 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:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$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= U= 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. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAC_OS_TRUE}" && test -z "${MAC_OS_FALSE}"; then as_fn_error $? "conditional \"MAC_OS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAC_OS_TRUE}" && test -z "${MAC_OS_FALSE}"; then as_fn_error $? "conditional \"MAC_OS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OCTAVE_SUPPORT_TRUE}" && test -z "${OCTAVE_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"OCTAVE_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PPM_SUPPORT_TRUE}" && test -z "${PPM_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"PPM_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENEXR_SUPPORT_TRUE}" && test -z "${OPENEXR_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"OPENEXR_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TIFF_SUPPORT_TRUE}" && test -z "${TIFF_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"TIFF_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${JPEGHDR_SUPPORT_TRUE}" && test -z "${JPEGHDR_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"JPEGHDR_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${IMAGEMAGICK_SUPPORT_TRUE}" && test -z "${IMAGEMAGICK_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"IMAGEMAGICK_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${QT_SUPPORT_TRUE}" && test -z "${QT_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"QT_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PDFLATEX_SUPPORT_TRUE}" && test -z "${PDFLATEX_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"PDFLATEX_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_SUPPORT_TRUE}" && test -z "${GL_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"GL_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MATLAB_SUPPORT_TRUE}" && test -z "${MATLAB_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"MATLAB_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GDAL_SUPPORT_TRUE}" && test -z "${GDAL_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"GDAL_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${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:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_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} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_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 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 # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (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 # 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 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith 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 if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi 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'` # 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 ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac 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 # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { 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_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' 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 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=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 pfstools $as_me 1.8.5, which was generated by GNU Autoconf 2.67. 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 and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, 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 the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ pfstools config.status 1.8.5 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" Copyright (C) 2010 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' AWK='$AWK' 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=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= 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 ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; 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"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append 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 as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --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_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append 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 # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ AR \ AR_FLAGS \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ fix_srcfile_path_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX; do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` ;; esac ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _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 "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/pfs/Makefile") CONFIG_FILES="$CONFIG_FILES src/pfs/Makefile" ;; "src/pfs/pfs.pc") CONFIG_FILES="$CONFIG_FILES src/pfs/pfs.pc" ;; "src/fileformat/Makefile") CONFIG_FILES="$CONFIG_FILES src/fileformat/Makefile" ;; "src/filter/Makefile") CONFIG_FILES="$CONFIG_FILES src/filter/Makefile" ;; "src/octave/Makefile") CONFIG_FILES="$CONFIG_FILES src/octave/Makefile" ;; "src/pfsview/Makefile") CONFIG_FILES="$CONFIG_FILES src/pfsview/Makefile" ;; "src/pfsglview/Makefile") CONFIG_FILES="$CONFIG_FILES src/pfsglview/Makefile" ;; "src/matlab/Makefile") CONFIG_FILES="$CONFIG_FILES src/matlab/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "src/fileformat/pfsin") CONFIG_FILES="$CONFIG_FILES src/fileformat/pfsin" ;; "src/fileformat/pfsout") CONFIG_FILES="$CONFIG_FILES src/fileformat/pfsout" ;; "src/fileformat/pfsindcraw") CONFIG_FILES="$CONFIG_FILES src/fileformat/pfsindcraw" ;; "src/fileformat/pfsinmulti") CONFIG_FILES="$CONFIG_FILES src/fileformat/pfsinmulti" ;; "src/pfsview/pfsv") CONFIG_FILES="$CONFIG_FILES src/pfsview/pfsv" ;; "src/hdrhtml/Makefile") CONFIG_FILES="$CONFIG_FILES src/hdrhtml/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; 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 'as_fn_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_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # 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=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi 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_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 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_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 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_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 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_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// 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_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 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_fn_error $? "could not setup config headers machinery" "$LINENO" 5 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_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; :[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_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append 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:${as_lineno-$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_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; 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"; as_fn_mkdir_p 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:${as_lineno-$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_fn_error $? "could not create $ac_file" "$LINENO" 5 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:${as_lineno-$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_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :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_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$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_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == "file_magic". file_magic_cmd=$lt_file_magic_cmd # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name of the directory that contains temporary libtool files. objdir=$objdir # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that does not interpret backslashes. ECHO=$lt_ECHO # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $* )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[^=]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$@"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1+=\$2" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$1=\$$1\$2" } _LT_EOF ;; esac sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into a binary # during linking. This must work even if \$libdir does not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path=$lt_fix_srcfile_path_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # 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 || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: pfstools is now configured for ${host} Source directory: $srcdir Installation prefix: $prefix C++ compiler: $CXX $XTRA_CXXFLAGS $WARN_CXXFLAGS $CXXFLAGS Data directory: $PKG_DATADIR Bash shell: $BASH_PATH Octave $octave_support octave-m-dir: $OCTAVE_M_DIR octave-oct-dir: $OCTAVE_OCT_DIR mkoctfile: $MKOCTFILE Matlab $matlab_support matlab-dir: $MEX_DIR mex: $MEX NetPBM $netpbm_support" >&5 $as_echo " pfstools is now configured for ${host} Source directory: $srcdir Installation prefix: $prefix C++ compiler: $CXX $XTRA_CXXFLAGS $WARN_CXXFLAGS $CXXFLAGS Data directory: $PKG_DATADIR Bash shell: $BASH_PATH Octave $octave_support octave-m-dir: $OCTAVE_M_DIR octave-oct-dir: $OCTAVE_OCT_DIR mkoctfile: $MKOCTFILE Matlab $matlab_support matlab-dir: $MEX_DIR mex: $MEX NetPBM $netpbm_support" >&6; } if test "x$netpbm_support" = "xyes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: LIBS: $NETPBM_LIBS" >&5 $as_echo " LIBS: $NETPBM_LIBS" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: CFLAGS: $NETPBM_CFLAGS" >&5 $as_echo " CFLAGS: $NETPBM_CFLAGS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: The following command(s) WILL NOT be compiled: pfsinppm pfsoutppm" >&5 $as_echo " The following command(s) WILL NOT be compiled: pfsinppm pfsoutppm" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: TIFF $tiff_support" >&5 $as_echo " TIFF $tiff_support" >&6; } if test "x$tiff_support" = "xyes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: LIBS: $TIFF_LIBS" >&5 $as_echo " LIBS: $TIFF_LIBS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: The following command(s) WILL NOT be compiled: pfsintiff pfsouttiff" >&5 $as_echo " The following command(s) WILL NOT be compiled: pfsintiff pfsouttiff" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: OpenEXR $openexr_support" >&5 $as_echo " OpenEXR $openexr_support" >&6; } if test "x$openexr_support" = "xyes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: CFLAGS: $OPENEXR_CFLAGS LIBS: $OPENEXR_LIBS" >&5 $as_echo " CFLAGS: $OPENEXR_CFLAGS LIBS: $OPENEXR_LIBS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: The following command(s) WILL NOT be compiled: pfsinexr pfsoutexr" >&5 $as_echo " The following command(s) WILL NOT be compiled: pfsinexr pfsoutexr" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: ImageMagick++ $imagemagick_support" >&5 $as_echo " ImageMagick++ $imagemagick_support" >&6; } if test "x$imagemagick_support" = "xyes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: CFLAGS: $IMAGEMAGICK_CFLAGS LIBS: $IMAGEMAGICK_LIBS" >&5 $as_echo " CFLAGS: $IMAGEMAGICK_CFLAGS LIBS: $IMAGEMAGICK_LIBS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: The following command(s) WILL NOT be compiled: pfsinimgmagick pfsoutimgmagick pfsouthdrhtml" >&5 $as_echo " The following command(s) WILL NOT be compiled: pfsinimgmagick pfsoutimgmagick pfsouthdrhtml" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: JPEG-HDR $jpeghdr_support" >&5 $as_echo " JPEG-HDR $jpeghdr_support" >&6; } if test "x$jpeghdr_support" = "xyes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: LIBS: $JPEGHDR_LIBS" >&5 $as_echo " LIBS: $JPEGHDR_LIBS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: The following command(s) WILL NOT be compiled: pfsinjpeghdr pfsoutjpeghdr" >&5 $as_echo " The following command(s) WILL NOT be compiled: pfsinjpeghdr pfsoutjpeghdr" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: GDAL $gdal_support" >&5 $as_echo " GDAL $gdal_support" >&6; } if test "x$gdal_support" = "xyes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: LIBS: $GDAL_LIBS " >&5 $as_echo " LIBS: $GDAL_LIBS " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: The following command(s) WILL NOT be compiled: pfsingdal" >&5 $as_echo " The following command(s) WILL NOT be compiled: pfsingdal" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: QT $QT_SUPPORT" >&5 $as_echo " QT $QT_SUPPORT" >&6; } if test "x$QT_SUPPORT" = "xyes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: QTDIR: $QTDIR CFLAGS: $QT_CFLAGS LIBS: $QT_LIBS MOC: $MOC " >&5 $as_echo " QTDIR: $QTDIR CFLAGS: $QT_CFLAGS LIBS: $QT_LIBS MOC: $MOC " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: The following command(s) WILL NOT be compiled: pfsview pfsv" >&5 $as_echo " The following command(s) WILL NOT be compiled: pfsview pfsv" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: OpenGL $gl_support" >&5 $as_echo " OpenGL $gl_support" >&6; } if test "x$gl_support" = "xyes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: CFLAGS: $GL_CFLAGS LIBS: $GL_LIBS " >&5 $as_echo " CFLAGS: $GL_CFLAGS LIBS: $GL_LIBS " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: The following command(s) WILL NOT be compiled: pfsglview" >&5 $as_echo " The following command(s) WILL NOT be compiled: pfsglview" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: Debug mode $enable_debug $HINTS " >&5 $as_echo " Debug mode $enable_debug $HINTS " >&6; } if test "$QT_SUPPORT" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: * To enable QT support, try specifying either --with-qtdir, or a triple --with-qtinclude, --with-qtlibs, --with-moc. " >&5 $as_echo " * To enable QT support, try specifying either --with-qtdir, or a triple --with-qtinclude, --with-qtlibs, --with-moc. " >&6; } fi pfstools-1.8.5/AUTHORS0000664000175000017500000000060111406630662011372 00000000000000Main authors and maintainers: Rafal Mantiuk Grzegorz Krawczyk Contributors: Miloslaw Smyk Alexander Efremov Dorota Zdrojewska Jan Otop Christian Bloch (Improved templates for HDR-HTML in src/hdthtml/hdrhtml_hdrlabs_templ)pfstools-1.8.5/README0000644000175000017500000001467211542345664011223 00000000000000Release Notes ------------------------------------------------------------------- pfstools 1.8.3 released This realease brings an updated "pfsview", which is now 100% QT4 application. Some cosmetic problems as well as "Fit window to content" have been fixed. Other minor fixes are listed below. * fixed: pfsdisplayfunction properly interpolates display LUT * fixed: bug #3080304 - configure uses non-portable test(1) syntax * fixed: bug #1766263 - pfsinhdrgen fails silently on pfsin failure. - partially * fixed: pfsview the entire code converted from qt3 to qt4 (fixes bug #3127946) * fixed: "Fit window to content" works again in pfsview * added: window icon in pfsview * added: improved image file saving in pfsview pfstools - README ------------------------------------------------------------------- pfstools is a set of command line (and one GUI) programs for reading, writing, manipulating and viewing high-dynamic range (HDR) images and video frames. All programs in the package exchange data using unix pipes and a simple generic HDR image format (pfs). The concept of the pfstools is similar to netpbm package for low-dynamic range images. pfstools offers also a good integration with GNU Octave and matlab. pfstools can serve as a matlab or Octave toolbox for reading and writing HDR images or simply to effectively store large matrices. pfs in not just another format for storing HDR images (and there are already quite a few of them). It is more an attempt to integrate the existing HDR image formats by providing a simple data format that can be used to exchange data between applications. If you use the software for your research work, please consider citing the paper: Rafal Mantiuk, Grzegorz Krawczyk, Radoslaw Mantiuk and Hans-Peter Seidel. High Dynamic Range Imaging Pipeline: Perception-motivated Representation of Visual Content. In: Proc. of Human Vision and Electronic Imaging XII. 649212. @inproceedings{mantiuk:2007:hvei, author = {Mantiuk, Rafa{\l} and Krawczyk, Grzegorz and Mantiuk, Rados{\l}aw and Seidel, Hans-Peter}, editor = {Rogowitz, Bernice E. and Pappas, Thrasyvoulos N. and Daly, Scott J.}, title = {High Dynamic Range Imaging Pipeline: Perception-motivated Representation of Visual Content}, booktitle = {Human Vision and Electronic Imaging XII}, publisher = {SPIE}, year = {2007}, volume = {6492}, number = {649212}, series = {Proceedings of SPIE}, address = {San Jose, USA}, month = {February}, } The paper is an introduction to both pfstools and HDR imaging in general. It can be downloaded from: http://www.mpi-inf.mpg.de/resources/pfstools/papers/mantiuk07hdr_pipeline.pdf 1. Compilation ------------------------------------------------------------------- 1.1 To build from a 'tar' archive: > ./configure for example following command will configure PFS tools to be installed in user's 'local/' directory: > ./configure --prefix=$HOME/local --with-octave-dir=$HOME/local/lib then compile > make and install > make install NOTE: When you specify a different compiler using for example CXX=g++-3.2, libtool may incorrectly interpret compiler and use gcc instead of g++ to link the pfs library. This results in reallocation error in programs that link dynamically to that library. NOTE: Automake 1.6 or later is required! 1.2 To build from CVS: > ./reconf or > libtoolize > aclocal > autoheader > automake --add-missing > autoconf then proceed as for the 'tar' archive distribution. You may need to experiment with different versions of automake, aclocal and autoconf (automake-1.9, aclocal-1.9 and automake2.50 work on Debian). 2. Directory Layout ------------------------------------------------------------------- doc - documentation src - all sources go there pfs - pfs library fileformat - readers and writters for various file formats octave - GNU Octave scripts and libraries matlab - matlab mex sources and functions pfsview - qt application for viewing hdr images and other data that can be stored in the pfs stream pfsglview - similar as pfsview, but uses OpenGL & GLUT instead of Qt visualc - (CVS only) preliminary project files for compiling under MS Visual C++ (only a few commands) 3. Dependencies ------------------------------------------------------------------- Some of the pfs tools require external libraries to be built. As reusing as much of existing code as possible is quite reasonable, it also causes quite a lot of problems when linking with several libraries that come in different versions. To alleviate some of such linking problems, the configure script of the pfs tools disables compilation of those applications for which the external libraries can not be found. Consequently, some of the pfs applications may not be installed after 'make install', even though the compilation was successful. A list of external libraries and applications that depend on them: libtiff - pfsintiff, pfsouttiff libpbm - pfsinppm, pfsoutppm http://netpbm.sourceforge.net/ ImageMagick++ - pfsinimgmagick, pfsoutimgmagick http://www.imagemagick.org/script/index.php jpeghdr - pfsinjpeghdr, pfsoutjpeghdr jpeghdr library can be found on the DVD included with the book "High Dynamic Range Imaging: Acquisition, Display, and Image-Based Lighting" by Erik Reinhard, Greg Ward, Sumanta Pattanaik and Paul Debevec. (The Morgan Kaufmann Series in Computer Graphics) openexr libraries - pfsinexr, pfsoutexr http://www.openexr.com/ octave, octave-forge - pfsstat, pfsoctavergb, pfsoctavelum Note: testing or stable release is required. Currently pfstools do not compile with development Octave releases. mkoctfile (for building Octave's modules) - pfsread.oct, pfswrite.oct, pfstransform_colorspace.oct, and others libqt4-gui - pfsview http://www.trolltech.com/ dcraw - pfsindcraw http://www.cybercom.net/~dcoffin/dcraw/ opengl - pfsglview matlab, mex - matlab scripts and mex sources 3. Documentation ------------------------------------------------------------------- First check the list of frequently asked questions in ./doc/faq.txt. Then browse relevant manual pages, which accompany each program. The documentation for the pfs library API can be generated with DoxyGen or found in the header files. If you want to include reading or writing of pfs streams in your applications, refer to ./doc/pfs_format_spec.pdf. pfstools-1.8.5/m4/0002755000175000017500000000000011652214413010720 500000000000000pfstools-1.8.5/m4/ltoptions.m40000644000175000017500000002724211535036432013145 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # 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. # serial 6 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [0], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) pfstools-1.8.5/m4/lt~obsolete.m40000644000175000017500000001311311535036432013454 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # 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. # serial 4 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) pfstools-1.8.5/m4/ltsugar.m40000644000175000017500000001042411535036432012565 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # 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. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) pfstools-1.8.5/m4/libtool.m40000644000175000017500000077464711535036432012600 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written 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. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 56 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl _LT_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Fix-up fallback echo if it was mangled by the above quoting rules. case \$lt_ECHO in *'\\\[$]0 --fallback-echo"')dnl " lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` ;; esac _LT_OUTPUT_LIBTOOL_INIT ]) # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) cat >"$CONFIG_LT" <<_LTEOF #! $SHELL # Generated by $as_me. # Run this file to recreate a libtool stub with the current configuration. lt_cl_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2008 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. if test "$no_create" != yes; then lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) fi ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_XSI_SHELLFNS sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES # -------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(whole_archive_flag_spec, $1)='' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=echo _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX # ----------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl AC_LINK_IFELSE(AC_LANG_PROGRAM,[ lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/ p } }' aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. m4_defun([_LT_PROG_ECHO_BACKSLASH], [_LT_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$lt_ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac ECHO=${lt_ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then # Yippee, $ECHO works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat <<_LT_EOF [$]* _LT_EOF exit 0 fi # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test -z "$lt_ECHO"; then if test "X${echo_test_string+set}" != Xset; then # find a string as large as possible, as long as the shell can cope with it for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... if { echo_test_string=`eval $cmd`; } 2>/dev/null && { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null then break fi done fi if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$ECHO" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. ECHO='print -r' elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. ECHO='printf %s\n' if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL ECHO="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then ECHO="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. ECHO=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. lt_ECHO=$ECHO if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(lt_ECHO) ]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that does not interpret backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [AC_CHECK_TOOL(AR, ar, false) test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1]) AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ = "XX$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line __oline__ "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` else lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[123]]*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; interix[[3-9]]*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) 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. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname 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 AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method == "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ const struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC*) # IBM XL 8.0 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl*) # IBM XL C 8.0/Fortran 10.1 on PPC _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Sun\ F*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' ;; linux* | k*bsd*-gnu) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # 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 ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; linux* | k*bsd*-gnu) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag= tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) 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 exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi 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]].*|aix[[5-9]]*) 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 exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi _LT_TAGVAR(link_all_deplibs, $1)=no else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # 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. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE(int foo(void) {}, _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' ) LDFLAGS="$save_LDFLAGS" else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then _LT_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], [[If ld is used when linking, flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [fix_srcfile_path], [1], [Fix the shell variable $srcfile for the compiler]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_PROG_CXX # ------------ # Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ # compiler, we have our own version here. m4_defun([_LT_PROG_CXX], [ pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) AC_PROG_CXX if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_CXX dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_CXX], []) # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [AC_REQUIRE([_LT_PROG_CXX])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) 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 exp_sym_flag='-Bexport' no_entry_flag="" 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]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[[12]]*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 will use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; xl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=echo else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='echo' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ]) dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_PROG_F77 # ------------ # Since AC_PROG_F77 is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_F77], [ pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) AC_PROG_F77 if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_F77 dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_F77], []) # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_REQUIRE([_LT_PROG_F77])dnl AC_LANG_PUSH(Fortran 77) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${F77-"f77"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_PROG_FC # ----------- # Since AC_PROG_FC is broken, in that it returns the empty string # if there is no fortran compiler, we have our own version here. m4_defun([_LT_PROG_FC], [ pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) AC_PROG_FC if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi popdef([AC_MSG_ERROR]) ])# _LT_PROG_FC dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([_LT_PROG_FC], []) # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_REQUIRE([_LT_PROG_FC])dnl AC_LANG_PUSH(Fortran) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC CC=${FC-"f95"} compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC="$lt_save_CC" ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC GCC= CC=${RC-"windres"} compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC="$lt_save_CC" ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_XSI_SHELLFNS # --------------------- # Bourne and XSI compatible variants of some useful shell functions. m4_defun([_LT_PROG_XSI_SHELLFNS], [case $xsi_shell in yes) cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac } # func_basename file func_basename () { func_basename_result="${1##*/}" } # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}" } # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). func_stripname () { # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"} } # func_opt_split func_opt_split () { func_opt_split_opt=${1%%=*} func_opt_split_arg=${1#*=} } # func_lo2o object func_lo2o () { case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac } # func_xform libobj-or-source func_xform () { func_xform_result=${1%.*}.lo } # func_arith arithmetic-term... func_arith () { func_arith_result=$(( $[*] )) } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=${#1} } _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_basename file func_basename () { func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } dnl func_dirname_and_basename dnl A portable version of this function is already defined in general.m4sh dnl so there is no need for it here. # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "X${3}" \ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; esac } # sed scripts: my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' my_sed_long_arg='1s/^-[[^=]]*=//' # func_opt_split func_opt_split () { func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` } # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` } # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "$[@]"` } # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` } _LT_EOF esac case $lt_shell_append in yes) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]+=\$[2]" } _LT_EOF ;; *) cat << \_LT_EOF >> "$cfgfile" # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "$[1]=\$$[1]\$[2]" } _LT_EOF ;; esac ]) pfstools-1.8.5/m4/ltversion.m40000644000175000017500000000127711535036432013137 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # 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. # Generated from ltversion.in. # serial 3017 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.2.6b]) m4_define([LT_PACKAGE_REVISION], [1.3017]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) pfstools-1.8.5/ltmain.sh0000755000175000017500000073341511535036432012161 00000000000000# Generated from ltmain.m4sh. # ltmain.sh (GNU libtool) 2.2.6b # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 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. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print informational messages (default) # --version print version information # -h, --help print short or long help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu3 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . PROGRAM=ltmain.sh PACKAGE=libtool VERSION="2.2.6b Debian-2.2.6b-2ubuntu3" TIMESTAMP="" package_revision=1.3017 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs 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 BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # NLS nuisances: We save the old values to restore during execute mode. # Only set LANG and LC_ALL to C if already set. # These must not be set unconditionally because not all systems understand # e.g. LANG=C (notably SCO). lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done $lt_unset CDPATH : ${CP="cp -f"} : ${ECHO="echo"} : ${EGREP="/bin/grep -E"} : ${FGREP="/bin/grep -F"} : ${GREP="/bin/grep"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SED="/bin/sed"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` } # Generated shell functions inserted here. # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # The name of this program: # In the unlikely event $progname began with a '-', it would play havoc with # func_echo (imagine progname=-n), so we prepend ./ in that case: func_dirname_and_basename "$progpath" progname=$func_basename_result case $progname in -*) progname=./$progname ;; esac # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=: for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname${mode+: }$mode: $*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"` done my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "X$my_tmpdir" | $Xsed } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "X$1" | $Xsed \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_version # Echo version message to standard output and exit. func_version () { $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $SED -n '/^# Usage:/,/# -h/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" $ECHO $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help # Echo long help message to standard output and exit. func_help () { $SED -n '/^# Usage:/,/# Report bugs to/ { s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p }' < "$progpath" exit $? } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { func_error "missing argument for $1" exit_cmd=exit } exit_cmd=: # Check that we have a working $ECHO. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then # Yippee, $ECHO works! : else # Restart under the correct shell, and then maybe $ECHO will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # Parse options once, thoroughly. This comes as soon as possible in # the script to make things like `libtool --version' happen quickly. { # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Parse non-mode specific arguments: while test "$#" -gt 0; do opt="$1" shift case $opt in --config) func_config ;; --debug) preserve_args="$preserve_args $opt" func_echo "enabling shell trace mode" opt_debug='set -x' $opt_debug ;; -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break execute_dlfiles="$execute_dlfiles $1" shift ;; --dry-run | -n) opt_dry_run=: ;; --features) func_features ;; --finish) mode="finish" ;; --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break case $1 in # Valid mode arguments: clean) ;; compile) ;; execute) ;; finish) ;; install) ;; link) ;; relink) ;; uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac mode="$1" shift ;; --preserve-dup-deps) opt_duplicate_deps=: ;; --quiet|--silent) preserve_args="$preserve_args $opt" opt_silent=: ;; --verbose| -v) preserve_args="$preserve_args $opt" opt_silent=false ;; --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break preserve_args="$preserve_args $opt $1" func_enable_tag "$1" # tagname is set here shift ;; # Separate optargs to long options: -dlopen=*|--mode=*|--tag=*) func_opt_split "$opt" set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} shift ;; -\?|-h) func_usage ;; --help) opt_help=: ;; --version) func_version ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) nonopt="$opt" break ;; esac done case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_duplicate_deps ;; esac # Having warned about all mis-specified options, bail out if # anything was wrong. $exit_cmd $EXIT_FAILURE } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } ## ----------- ## ## Main. ## ## ----------- ## $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi test -z "$mode" && func_fatal_error "error: you must specify a MODE." # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$mode' for more information." } # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_ltwrapper_scriptname_result="" if func_ltwrapper_executable_p "$1"; then func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" fi } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_quote_for_eval "$arg" CC_quoted="$CC_quoted $func_quote_for_eval_result" done case "$@ " in " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi removelist="$removelist $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist removelist="$removelist $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir command="$command -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then command="$command -o $obj" fi # Suppress compiler output if we already did a PIC compilation. command="$command$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$mode'" ;; esac $ECHO $ECHO "Try \`$progname --help' for more information about other modes." exit $? } # Now that we've collected a possible --mode arg, show help if necessary $opt_help && func_mode_help # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $execute_dlfiles; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_quote_for_eval "$file" args="$args $func_quote_for_eval_result" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" $ECHO "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS $ECHO "X----------------------------------------------------------------------" | $Xsed $ECHO "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done $ECHO $ECHO "If you ever happen to want to link against installed libraries" $ECHO "in a given directory, LIBDIR, you must either use libtool, and" $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'" $ECHO "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable" $ECHO " during execution" fi if test -n "$runpath_var"; then $ECHO " - add LIBDIR to the \`$runpath_var' environment variable" $ECHO " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $ECHO $ECHO "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual" $ECHO "pages." ;; *) $ECHO "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac $ECHO "X----------------------------------------------------------------------" | $Xsed exit $EXIT_SUCCESS } test "$mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $ECHO "X$nonopt" | $GREP shtool >/dev/null; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" install_prog="$install_prog$func_quote_for_eval_result" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) case " $install_prog " in *[\\\ /]cp\ *) ;; *) prev=$arg ;; esac ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" install_prog="$install_prog $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for progfile in $progfiles; do func_verbose "extracting global C symbols from \`$progfile'" $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" } done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms" fi $ECHO >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; " case $host in *cygwin* | *mingw* | *cegcc* ) $ECHO >> "$output_objdir/$my_dlsyms" "\ /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */" lt_dlsym_const= ;; *osf5*) echo >> "$output_objdir/$my_dlsyms" "\ /* This system does not cope well with relocations in const data */" lt_dlsym_const= ;; *) lt_dlsym_const=const ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ extern $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; $lt_dlsym_const lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac $ECHO >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) symtab_cflags="$symtab_cflags $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?' if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper_part1 [arg=no] # # Emit the first part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part1 () { func_emit_wrapper_part1_arg1=no if test -n "$1" ; then func_emit_wrapper_part1_arg1=$1 fi $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs 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 BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then ECHO=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then # Yippee, \$ECHO works! : else # Restart under the correct shell, and then maybe \$ECHO will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $ECHO "\ # Find the directory that this script lives in. thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done " } # end: func_emit_wrapper_part1 # func_emit_wrapper_part2 [arg=no] # # Emit the second part of a libtool wrapper script on stdout. # For more information, see the description associated with # func_emit_wrapper(), below. func_emit_wrapper_part2 () { func_emit_wrapper_part2_arg1=no if test -n "$1" ; then func_emit_wrapper_part2_arg1=$1 fi $ECHO "\ # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # end: func_emit_wrapper_part2 # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=no if test -n "$1" ; then func_emit_wrapper_arg1=$1 fi # split this up so that func_emit_cwrapperexe_src # can call each part independently. func_emit_wrapper_part1 "${func_emit_wrapper_arg1}" func_emit_wrapper_part2 "${func_emit_wrapper_arg1}" } # func_to_host_path arg # # Convert paths to host format when used with build tools. # Intended for use with "native" mingw (where libtool itself # is running under the msys shell), or in the following cross- # build environments: # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # where wine is equipped with the `winepath' executable. # In the native mingw case, the (msys) shell automatically # converts paths for any non-msys applications it launches, # but that facility isn't available from inside the cwrapper. # Similar accommodations are necessary for $host mingw and # $build cygwin. Calling this function does no harm for other # $host/$build combinations not listed above. # # ARG is the path (on $build) that should be converted to # the proper representation for $host. The result is stored # in $func_to_host_path_result. func_to_host_path () { func_to_host_path_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' case $build in *mingw* ) # actually, msys # awkward: cmd appends spaces to result lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_path_tmp1=`( cmd //c echo "$1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_path_tmp1=`cygpath -w "$1"` func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # Unfortunately, winepath does not exit with a non-zero # error code, so we are forced to check the contents of # stdout. On the other hand, if the command is not # found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both # error code of zero AND non-empty stdout, which explains # the odd construction: func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\ $SED -e "$lt_sed_naive_backslashify"` else # Allow warning below. func_to_host_path_result="" fi ;; esac if test -z "$func_to_host_path_result" ; then func_error "Could not determine host path corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_path_result="$1" fi ;; esac fi } # end: func_to_host_path # func_to_host_pathlist arg # # Convert pathlists to host format when used with build tools. # See func_to_host_path(), above. This function supports the # following $build/$host combinations (but does no harm for # combinations not listed here): # $build $host # mingw (msys) mingw [e.g. native] # cygwin mingw # *nix + wine mingw # # Path separators are also converted from $build format to # $host format. If ARG begins or ends with a path separator # character, it is preserved (but converted to $host format) # on output. # # ARG is a pathlist (on $build) that should be converted to # the proper representation on $host. The result is stored # in $func_to_host_pathlist_result. func_to_host_pathlist () { func_to_host_pathlist_result="$1" if test -n "$1" ; then case $host in *mingw* ) lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_to_host_pathlist_tmp2="$1" # Once set for this call, this variable should not be # reassigned. It is used in tha fallback case. func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e 's|^:*||' -e 's|:*$||'` case $build in *mingw* ) # Actually, msys. # Awkward: cmd appends spaces to result. lt_sed_strip_trailing_spaces="s/[ ]*\$//" func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; *cygwin* ) func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"` func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\ $SED -e "$lt_sed_naive_backslashify"` ;; * ) # unfortunately, winepath doesn't convert pathlists func_to_host_pathlist_result="" func_to_host_pathlist_oldIFS=$IFS IFS=: for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do IFS=$func_to_host_pathlist_oldIFS if test -n "$func_to_host_pathlist_f" ; then func_to_host_path "$func_to_host_pathlist_f" if test -n "$func_to_host_path_result" ; then if test -z "$func_to_host_pathlist_result" ; then func_to_host_pathlist_result="$func_to_host_path_result" else func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result" fi fi fi IFS=: done IFS=$func_to_host_pathlist_oldIFS ;; esac if test -z "$func_to_host_pathlist_result" ; then func_error "Could not determine the host path(s) corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This may break if $1 contains DOS-style drive # specifications. The fix is not to complicate the expression # below, but for the user to provide a working wine installation # with winepath so that path translation in the cross-to-mingw # case works properly. lt_replace_pathsep_nix_to_dos="s|:|;|g" func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ $SED -e "$lt_replace_pathsep_nix_to_dos"` fi # Now, add the leading and trailing path separators back case "$1" in :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" ;; esac case "$1" in *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;" ;; esac ;; esac fi } # end: func_to_host_pathlist # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include # define setmode _setmode #else # include # include # ifdef __CYGWIN__ # include # define HAVE_SETENV # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif # endif #endif #include #include #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif #ifdef _MSC_VER # define S_IXUSR _S_IEXEC # define stat _stat # ifndef _INTPTR_T_DEFINED # define intptr_t int # endif #endif #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifdef __CYGWIN__ # define FOPEN_WB "wb" #endif #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #undef LTWRAPPER_DEBUGPRINTF #if defined DEBUGWRAPPER # define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args static void ltwrapper_debugprintf (const char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } #else # define LTWRAPPER_DEBUGPRINTF(args) #endif const char *program_name = NULL; void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_fatal (const char *message, ...); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_opt_process_env_set (const char *arg); void lt_opt_process_env_prepend (const char *arg); void lt_opt_process_env_append (const char *arg); int lt_split_name_value (const char *arg, char** name, char** value); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); static const char *script_text_part1 = EOF func_emit_wrapper_part1 yes | $SED -e 's/\([\\"]\)/\\\1/g' \ -e 's/^/ "/' -e 's/$/\\n"/' echo ";" cat <"))); for (i = 0; i < newargc; i++) { LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : ""))); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno)); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!")); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!")); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n", tmp_pathspec)); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { char *errstr = strerror (errno); lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal ("Could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } void lt_setenv (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n", (name ? name : ""), (value ? value : ""))); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } int lt_split_name_value (const char *arg, char** name, char** value) { const char *p; int len; if (!arg || !*arg) return 1; p = strchr (arg, (int)'='); if (!p) return 1; *value = xstrdup (++p); len = strlen (arg) - strlen (*value); *name = XMALLOC (char, len); strncpy (*name, arg, len-1); (*name)[len - 1] = '\0'; return 0; } void lt_opt_process_env_set (const char *arg) { char *name = NULL; char *value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg); } lt_setenv (name, value); XFREE (name); XFREE (value); } void lt_opt_process_env_prepend (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg); } new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_opt_process_env_append (const char *arg) { char *name = NULL; char *value = NULL; char *new_value = NULL; if (lt_split_name_value (arg, &name, &value) != 0) { XFREE (name); XFREE (value); lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg); } new_value = lt_extend_str (getenv (name), value, 1); lt_setenv (name, new_value); XFREE (new_value); XFREE (name); XFREE (value); } void lt_update_exe_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n", (name ? name : ""), (value ? value : ""))); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF } # end: func_emit_cwrapperexe_src # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) deplibs="$deplibs $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) weak_libs="$weak_libs $arg" prev= continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname '-L' '' "$arg" dir=$func_stripname_result if test -z "$dir"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) dllsearchpath="$dllsearchpath:$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" arg="$arg $wl$func_quote_for_eval_result" compiler_flags="$compiler_flags $wl$func_quote_for_eval_result" linker_flags="$linker_flags $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # -64, -mips[0-9] enable 64-bit mode on the SGI compiler # -r[0-9][0-9]* specifies the processor on the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler # +DA*, +DD* enable 64-bit mode on the HP compiler # -q* pass through compiler args for the IBM compiler # -m*, -t[45]*, -txscale* pass through architecture-specific # compiler args for GCC # -F/path gives path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC # @file GCC response files -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" compiler_flags="$compiler_flags $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_duplicate_deps ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= case $lib in *.la) func_source "$lib" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"` case " $weak_libs " in *" $deplib_base "*) ;; *) deplibs="$deplibs $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else compiler_flags="$compiler_flags $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" dir=$func_stripname_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then $ECHO $ECHO "*** Warning: Trying to link with static lib archive $deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because the file extensions .$libext of this argument makes me believe" $ECHO "*** that it is just a static archive that I should not use here." else $ECHO $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" newlib_search_path="$newlib_search_path $func_stripname_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) temp_rpath="$temp_rpath$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded notinst_deplibs="$notinst_deplibs $lib" need_relink=no ;; *) if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then $ECHO if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $ECHO $ECHO "*** And there doesn't seem to be a static archive available" $ECHO "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $ECHO $ECHO "*** Warning: This system can not link to static lib archive $lib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $ECHO "*** But as you try to build a module library, libtool will still create " $ECHO "*** a static module, that should work as long as the dlopening application" $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if $opt_duplicate_deps ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_dirname "$deplib" "" "." dir="$func_dirname_result" # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else $ECHO $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" libobjs="$libobjs $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"` # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"` # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $ECHO $ECHO "*** Warning: linker path does not have real file for library $a_deplib." $ECHO "*** I have the capability to make that library automatically link in when" $ECHO "*** you link to this library. But I can only do this if you have a" $ECHO "*** shared version of the library, which you do not appear to have" $ECHO "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"` done fi if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' | $GREP . >/dev/null; then $ECHO if test "X$deplibs_check_method" = "Xnone"; then $ECHO "*** Warning: inter-library dependencies are not supported in this platform." else $ECHO "*** Warning: inter-library dependencies are not known to be supported." fi $ECHO "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $ECHO $ECHO "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" $ECHO "*** a static module, that should work as long as the dlopening" $ECHO "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $ECHO $ECHO "*** However, this would only work if libtool was able to extract symbol" $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could" $ECHO "*** not find such a program. So, this module is probably useless." $ECHO "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $ECHO "*** The inter-library dependencies that have been dropped here will be" $ECHO "*** automatically added whenever a program is linked with this library" $ECHO "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $ECHO $ECHO "*** Since this library must not contain undefined symbols," $ECHO "*** because either the platform does not support them or" $ECHO "*** it was explicitly requested with -no-undefined," $ECHO "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" delfiles="$delfiles $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" func_len " $cmd" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then func_show_eval "$cmd" 'exit $?' skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) tmp_deplibs="$tmp_deplibs $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $convenience libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output output_la=`$ECHO "X$output" | $Xsed -e "$basename"` # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" $ECHO 'INPUT (' > $output for obj in $save_libobjs do $ECHO "$obj" >> $output done $ECHO ')' >> $output delfiles="$delfiles $output" elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do $ECHO "$obj" >> $output done delfiles="$delfiles $output" output=$firstobj\"$file_list_spec$output\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=$obj func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi delfiles="$delfiles $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles libobjs="$libobjs $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'` else gentop="$output_objdir/${obj}x" generated="$generated $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) new_libs="$new_libs -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$new_libs $deplib" ;; esac ;; *) new_libs="$new_libs $deplib" ;; esac done compile_deplibs="$new_libs" compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) dllsearchpath="$dllsearchpath:$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) dllsearchpath="$dllsearchpath:$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *cegcc) # Disable wrappers for cegcc, we are cross compiling anyway. wrappers_required=no ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $ECHO for shipping. if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then oldobjs="$oldobjs $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $addlibs oldobjs="$oldobjs $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_extract_archives $gentop $dlprefiles oldobjs="$oldobjs $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else $ECHO "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" generated="$generated $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" oldobjs="$oldobjs $gentop/$newobj" ;; *) oldobjs="$oldobjs $obj" ;; esac done fi eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlfiles="$newdlfiles $libdir/$name" ;; *) newdlfiles="$newdlfiles $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" newdlprefiles="$newdlprefiles $libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$mode" = link || test "$mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) RM="$RM $arg"; rmforce=yes ;; -*) RM="$RM $arg" ;; *) files="$files $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then objdir="$origobjdir" else objdir="$dir/$origobjdir" fi func_basename "$file" name="$func_basename_result" test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" case "$mode" in clean) case " $library_names " in # " " in the beginning catches empty $dlname *" $dlname "*) ;; *) rmfiles="$rmfiles $objdir/$dlname" ;; esac test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result rmfiles="$rmfiles $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$mode" = uninstall || test "$mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 pfstools-1.8.5/src/0002755000175000017500000000000011652214413011167 500000000000000pfstools-1.8.5/src/pfsview/0002755000175000017500000000000011652214416012655 500000000000000pfstools-1.8.5/src/pfsview/pfsview.qrc0000644000175000017500000000015111541657401014764 00000000000000 icons/appicon.png pfstools-1.8.5/src/pfsview/histogram.h0000664000175000017500000000313110306047513014736 00000000000000#ifndef HISTOGRAM_H #define HISTOGRAM_H /** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: histogram.h,v 1.2 2005/09/02 13:10:35 rafm Exp $ */ #include class Histogram { float *P; int bins; int accuracy; public: Histogram( int bins, int accuracy = 1 ); ~Histogram(); void computeLog( const pfs::Array2D *image ); void computeLog( const pfs::Array2D *image, float min, float max ); int getBins() const { return bins; } float getMaxP() const; float getP( int bin ) const { assert( bin < bins ); return P[bin]; } }; #endif pfstools-1.8.5/src/pfsview/pfsview_widget.cpp0000644000175000017500000005375411557013055016343 00000000000000/** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsview_widget.cpp,v 1.21 2011/04/30 14:01:17 rafm Exp $ */ #include #include #include #include #include #include #include #include #include #include #include #include #include //#include #include "pfsview_widget.h" #include #define min(x,y) ( (x)<(y) ? (x) : (y) ) #define max(x,y) ( (x)>(y) ? (x) : (y) ) #define D65_LUM_R 0.212656f #define D65_LUM_G 0.715158f #define D65_LUM_B 0.072186f inline float clamp( float val, float min, float max ) { if( val < min ) return min; if( val > max ) return max; return val; } inline int clamp( int val, int min, int max ) { if( val < min ) return min; if( val > max ) return max; return val; } const char* COLOR_CHANNELS = "Color"; PFSViewWidgetArea::PFSViewWidgetArea( QWidget *parent ) : QScrollArea( parent ) { PFSViewWidget *pfsview = new PFSViewWidget( this ); setWidget( pfsview ); setWidgetResizable( true ); setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ); } QSize PFSViewWidgetArea::sizeHint() const { QSize sz = widget()->sizeHint(); // printf( "widget: %d %d\n", sz.width(), sz.height() ); sz += QSize( frameWidth()*2, frameWidth()*2 ); // printf( "area: %d %d\n", sz.width(), sz.height() ); return sz; } PFSViewWidget::PFSViewWidget( QWidget *parent ) : QWidget( parent ), image( NULL ), minValue( 1.f ), maxValue( 100.f ), zoom( 1.f ), mappingMethod( MAP_GAMMA2_2 ), visibleChannel( COLOR_CHANNELS ), negativeTreatment( NEGATIVE_BLACK ), infNaNTreatment( INFNAN_MARK_AS_RED ), updateMappingRequested( true ), clippingMethod(CLIP_SIMPLE) { setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); setMouseTracking( true ); setCursor( QCursor( Qt::CrossCursor ) ); //name, Qt::WNoAutoErase // setResizePolicy( Manual ); pfsFrame = NULL; workArea[0] = workArea[1] = workArea[2] = NULL; selection += QRegion( 10, 10, 100, 100 ); pointerValue.valid = false; } PFSViewWidget::~PFSViewWidget() { delete pfsFrame; delete workArea[0]; delete workArea[1]; delete workArea[2]; } // ======================= Set current frame ========================== void PFSViewWidget::setFrame( pfs::Frame *frame ) { pfsFrame = frame; if( frame == NULL ) return; // If selected channel not available if( ( visibleChannel == COLOR_CHANNELS && !hasColorChannels( frame ) ) || ( visibleChannel != COLOR_CHANNELS && frame->getChannel( visibleChannel ) == NULL ) ) { // Chose first available channel pfs::ChannelIterator *it = frame->getChannels(); if( !it->hasNext() ) // TODO: failover throw new pfs::Exception( "No channels available!" ); visibleChannel = it->getNext()->getName(); } else if( visibleChannel != COLOR_CHANNELS ) { // Get a new pointer, as the old frame object // can be delete after returning from this method visibleChannel = frame->getChannel( visibleChannel )->getName(); } int desktopWidth, desktopHeight; desktopWidth = QApplication::desktop()->width(); desktopHeight = QApplication::desktop()->height(); if( frame->getWidth() > desktopWidth || frame->getHeight() > desktopHeight ) { zoom = min( (float)desktopWidth / (float)frame->getWidth(), (float)desktopHeight / (float)frame->getHeight() ); } updateZoom(); setPointer(); } //void PFSViewWidget::drawContents( QPainter * p, int clipx, int clipy, int clipw, int cliph ) void PFSViewWidget::paintEvent( QPaintEvent *event ) { assert( pfsFrame != NULL ); QRect clip = event->rect(); int clipx = clip.x(); int clipy = clip.y(); int clipw = clip.width(); int cliph = clip.height(); if( updateMappingRequested ) updateMapping(); QPainter p( this ); // if( image != NULL ) p->drawImage( 0, 0, *image ); if( image != NULL ) { p.drawImage( clipx, clipy, *image, clipx, clipy, clipw, cliph ); //Erase area outside image if( clipx+clipw > image->width() ) p.eraseRect( image->width(), 0, clipx+clipw - image->width(), image->height() ); if( clipy+cliph > image->height() ) p.eraseRect( 0, image->height(), image->width(), clipy+cliph - image->height() ); if( clipx+clipw > image->width() && clipy+cliph > image->height() ) p.eraseRect( image->width(), image->height(), clipx+clipw - image->width(), clipy+cliph - image->height() ); } } // ======================= Update =========================== static void scaleCopyArray(const pfs::Array2D *from, pfs::Array2D *to) { assert( from->getRows() >= to->getRows() ); assert( from->getCols() >= to->getCols() ); float sx, sy; float dx = (float)from->getCols() / (float)to->getCols(); float dy = (float)from->getRows() / (float)to->getRows(); int x, y, i = 0; for( sy = 0, y = 0; y < to->getRows(); y++, sy += dy ) { for( sx = 0, x = 0; x < to->getCols(); x++, sx += dx ) { (*to)(i++) = (*from)((int)(sx), (int)(sy) ); } } } static void transformImageToWorkArea( pfs::Array2D **workArea, float zoom, bool color, pfs::Array2D *X, pfs::Array2D *Y = NULL, pfs::Array2D *Z = NULL ) { int origCols, origRows; origCols = X->getCols(); origRows = X->getRows(); int workCols, workRows; workCols = min( (int)((float)X->getCols() * zoom), X->getCols() ); workRows = min( (int)((float)X->getRows() * zoom), X->getRows() ); int requiredChannels = color ? 3 : 1; // Reallocate work area arrays to fit new size { for( int c = 0; c < requiredChannels; c++ ) { if( workArea[c] == NULL || workArea[c]->getCols() != workCols || workArea[c]->getRows() != workRows ) { if( workArea[c] != NULL ) delete workArea[c]; workArea[c] = new pfs::Array2DImpl( workCols, workRows ); } } } //Copy | rescale & tranform image to work area if( color ) { if( workCols == origCols && workRows == origRows ) { copyArray( X, workArea[0] ); copyArray( Y, workArea[1] ); copyArray( Z, workArea[2] ); } else { scaleCopyArray( X, workArea[0] ); scaleCopyArray( Y, workArea[1] ); scaleCopyArray( Z, workArea[2] ); } pfs::transformColorSpace( pfs::CS_XYZ, workArea[0], workArea[1], workArea[2], pfs::CS_RGB, workArea[0], workArea[1], workArea[2] ); } else { if( workCols == origCols && workRows == origRows ) copyArray( X, workArea[0] ); else scaleCopyArray( X, workArea[0] ); } } #define LUTSIZE 256 inline int binarySearchPixels( float x, const float *lut, const int lutSize ) { int l = 0, r = lutSize; while( true ) { int m = (l+r)/2; if( m == l ) break; if( x < lut[m] ) r = m; else l = m; } return l; } static float getInverseMapping( LumMappingMethod mappingMethod, float v, float minValue, float maxValue ) { switch( mappingMethod ) { case MAP_GAMMA1_4: return powf( v, 1.4 )*(maxValue-minValue) + minValue; case MAP_GAMMA1_8: return powf( v, 1.8 )*(maxValue-minValue) + minValue; case MAP_GAMMA2_2: return powf( v, 2.2 )*(maxValue-minValue) + minValue; case MAP_GAMMA2_6: return powf( v, 2.6 )*(maxValue-minValue) + minValue; case MAP_LINEAR: return v*(maxValue-minValue) + minValue; case MAP_LOGARITHMIC: return powf( 10, v * (log10f(maxValue) - log10f(minValue)) + log10f( minValue ) ); default: assert(0); return 0; } } /** * Copy pixels in work area to QImage using proper clipping and mapping * method. Handle also expansion if image in zoomed in. */ static void mapFrameToImage( pfs::Array2D *R, pfs::Array2D *G, pfs::Array2D *B, QImage *img, float minValue, float maxValue, RGBClippingMethod clippingMethod, LumMappingMethod mappingMethod, InfNaNTreatment infNaNTreatment, NegativeTreatment negativeTreatment ) { assert( R != NULL ); assert( img != NULL ); int rows = R->getRows(); int cols = R->getCols(); int index = 0; bool expand = cols != img->width() || rows != img->height(); // Zoom in float imgRow = 0, imgCol; float imgDeltaRow, imgDeltaCol; if( expand ) { imgDeltaRow = (float)(img->height()) / (float)rows; imgDeltaCol = (float)(img->width()) / (float)cols; } else { imgDeltaRow = imgDeltaCol = 1; } bool color = (G != NULL); assert( !color || (color && B != NULL) ); float lutPixFloor[257*2]; QRgb lutPixel[257*2]; int lutSize; if( !color && ( negativeTreatment == NEGATIVE_GREEN_SCALE || negativeTreatment == NEGATIVE_ABSOLUTE ) ) { // Handle negative numbers lutSize = 257*2+1; for( int p = 256; p >= 0; p-- ) { float p_left = (float)p/255.f; lutPixFloor[256-p+1] = -getInverseMapping( mappingMethod, p_left, minValue, maxValue ); if( p != 0 ) lutPixel[256-p+1] = negativeTreatment == NEGATIVE_GREEN_SCALE ? QColor( 0, p-1, 0 ).rgb() : QColor( p-1, p-1, p-1 ).rgb(); } for( int p = 0; p < 257; p++ ) { float p_left = (float)p/255.f; lutPixFloor[257+p+1] = getInverseMapping( mappingMethod, p_left, minValue, maxValue ); if( p != 256 ) lutPixel[257+p+1] = QColor( p, p, p ).rgb(); } if( clippingMethod == CLIP_COLORCODED ) { lutPixel[0] = negativeTreatment == NEGATIVE_GREEN_SCALE ? QColor( 0, 255, 255 ).rgb() : QColor( 255, 255, 0 ).rgb(); lutPixel[257] = QColor( 0, 0, 255 ).rgb(); lutPixel[257*2] = QColor( 255, 255, 0 ).rgb(); } else { lutPixel[0] = lutPixel[1]; lutPixel[257] = QColor( 0, 0, 0 ).rgb(); lutPixel[257*2] = QColor( 255, 255, 255 ).rgb(); } } else { // clip negative numbers int neg_offset = ((!color && negativeTreatment == NEGATIVE_MARK_AS_RED) ? 1 : 0); lutSize = 257+1 + neg_offset; // +1 - for lower bound for( int p = 1+neg_offset; p <= LUTSIZE+1; p++ ) { float p_left = ((float)p - 1.f - (float)neg_offset)/255.f; // Should be -1.5f, but we don't want negative nums lutPixFloor[p] = getInverseMapping( mappingMethod, p_left, minValue, maxValue ); if( !color && p < LUTSIZE+1+neg_offset ) lutPixel[p] = QColor( p-1-neg_offset, p-1-neg_offset, p-1-neg_offset ).rgb(); // printf( "p = %d\tl = %g\n", p, lookupTable[p] ); } if( clippingMethod == CLIP_COLORCODED ) { lutPixel[neg_offset] = QColor( 0, 0, 255 ).rgb(); lutPixel[LUTSIZE+1+neg_offset] = QColor( 255, 255, 0 ).rgb(); } else { lutPixel[neg_offset] = QColor( 0, 0, 0 ).rgb(); lutPixel[LUTSIZE+1+neg_offset] = QColor( 255, 255, 255 ).rgb(); } if( negativeTreatment == NEGATIVE_MARK_AS_RED && !color) { lutPixFloor[1] = 0; lutPixel[0] = QColor( 255, 0, 0 ).rgb(); } } // bool once = true; for( int r = 0; r < rows; r++, imgRow += imgDeltaRow ) { QRgb* line = (QRgb*)img->scanLine( (int)imgRow ); imgCol = 0; for( int c = 0; c < cols; c++, index++, imgCol += imgDeltaCol ) { QRgb pixel; if( color ) { // Color channels int pr, pg, pb; pr = binarySearchPixels( (*R)(index), lutPixFloor, lutSize ); pg = binarySearchPixels( (*G)(index), lutPixFloor, lutSize ); pb = binarySearchPixels( (*B)(index), lutPixFloor, lutSize ); // Clipping if( clippingMethod == CLIP_COLORCODED ) { if( pr == 0 || pg == 0 || pb == 0 ) pixel = lutPixel[0]; else if( pr == lutSize-1 || pg == lutSize-1 || pb == lutSize-1 ) pixel = lutPixel[LUTSIZE+1]; else pixel = QColor( pr-1, pg-1, pb-1 ).rgb(); } else if( clippingMethod == CLIP_KEEP_BRI_HUE ) { if( pr == lutSize-1 || pg == lutSize-1 || pb == lutSize-1 || pr == 0 || pg == 0 || pb == 0 ) { float p[3]; p[0] = (*R)(index); p[1] = (*G)(index); p[2] = (*B)(index); float gray = (p[0]+p[1]+p[2])/3.f; // float gray = D65_LUM_R*p[0]+D65_LUM_G*p[1]+D65_LUM_B*p[2]; float t; if( gray >= maxValue ) { pixel = QColor( 255, 255, 255 ).rgb(); } else if( gray <= minValue ) { pixel = QColor( 0, 0, 0 ).rgb(); } else { int i; for( i = 0; i < 3; i++ ) { t = (maxValue - p[i])/(gray - p[i]); if( t >= 0 && t <= 1 ) { break; } t = (minValue - p[i])/(gray - p[i]); if( t >= 0 && t <= 1 ) { break; } } if( i == 3 ) pixel = QColor( 255, 255, 255 ).rgb(); else { for( int i = 0; i < 3; i++ ) p[i] = gray*t + p[i]*(1-t); // if( once ) { // printf( "min = %g max = %g\n", minValue, maxValue ); // printf( "r = %g g = %g b = %g; t = %g\n", p[0], p[1], p[2], t ); // once = false; // } pr = binarySearchPixels( p[0], lutPixFloor, lutSize ); pg = binarySearchPixels( p[1], lutPixFloor, lutSize ); pb = binarySearchPixels( p[2], lutPixFloor, lutSize ); pixel = QColor( clamp( pr-1, 0, 255 ), clamp( pg-1, 0, 255 ), clamp( pb-1, 0, 255 ) ).rgb(); } } } else { pixel = QColor( clamp( pr-1, 0, 255 ), clamp( pg-1, 0, 255 ), clamp( pb-1, 0, 255 ) ).rgb(); } } else { pixel = QColor( clamp( pr-1, 0, 255 ), clamp( pg-1, 0, 255 ), clamp( pb-1, 0, 255 ) ).rgb(); } if( infNaNTreatment == INFNAN_MARK_AS_RED ) { if( !finite( (*R)(index) ) || !finite( (*G)(index) ) || !finite( (*B)(index) ) ) { // x is NaN or Inf pixel = QColor( 255, 0, 0 ).rgb(); } } if( negativeTreatment == NEGATIVE_MARK_AS_RED ) { if( (*R)(index)<0 || (*G)(index)<0 || (*B)(index)<0 ) { // x is negative pixel = QColor( 255, 0, 0 ).rgb(); } } } else { // Single channel int p = binarySearchPixels( (*R)(index), lutPixFloor, lutSize ); pixel = lutPixel[p]; if( infNaNTreatment == INFNAN_MARK_AS_RED && (p == 0 || p == LUTSIZE+1)) if( !finite( (*R)(index) ) ) { // x is NaN or Inf pixel = QColor( 255, 0, 0 ).rgb(); } } line[(int)imgCol] = pixel; if( expand ) { for( int ec = (int)imgCol + 1; ec < (int)(imgCol+imgDeltaCol); ec++ ) { line[ec] = pixel; } } } if( expand ) { for( int er = (int)imgRow + 1; er < (int)(imgRow + imgDeltaRow); er++ ) { QRgb* eLine = (QRgb*)img->scanLine( er ); memcpy( eLine, line, sizeof( QRgb )*img->width() ); } } } } void PFSViewWidget::postUpdateMapping() { updateMappingRequested = true; update( 0, 0, image->width(), image->height() ); //updateContents( 0, 0, image->width(), image->height() ); } void PFSViewWidget::updateMapping() { assert( image != NULL ); QApplication::setOverrideCursor( Qt::WaitCursor ); if( visibleChannel == COLOR_CHANNELS ) { assert( workArea[0] != NULL && workArea[1] != NULL && workArea[2] != NULL ); mapFrameToImage( workArea[0], workArea[1], workArea[2], image, minValue, maxValue, clippingMethod, mappingMethod, infNaNTreatment, negativeTreatment ); } else { assert( workArea[0] != NULL ); mapFrameToImage( workArea[0], NULL, NULL, image, minValue, maxValue, clippingMethod, mappingMethod, infNaNTreatment, negativeTreatment ); } updateMappingRequested = false; QApplication::restoreOverrideCursor(); } void PFSViewWidget::updateZoom() { assert( pfsFrame != NULL ); QApplication::setOverrideCursor( Qt::WaitCursor ); if( visibleChannel == COLOR_CHANNELS ) { pfs::Channel *X, *Y, *Z; pfsFrame->getXYZChannels( X, Y, Z ); transformImageToWorkArea( workArea, zoom, true, X, Y, Z ); } else { pfs::Channel *X = pfsFrame->getChannel( visibleChannel ); transformImageToWorkArea( workArea, zoom, false, X ); } int zoomedWidth = max( workArea[0]->getCols(), (int)((float)(pfsFrame->getWidth())*zoom) ); int zoomedHeight = max( workArea[0]->getRows(), (int)((float)(pfsFrame->getHeight())*zoom) ); if( image != NULL ) delete image; image = new QImage( zoomedWidth, zoomedHeight, QImage::Format_RGB32 ); assert( image != NULL ); postUpdateMapping(); resize( zoomedWidth, zoomedHeight ); // resizeContents( zoomedWidth, zoomedHeight ); // updateContents( 0, 0, zoomedWidth, zoomedHeight ); update( 0, 0, zoomedWidth, zoomedHeight ); QApplication::restoreOverrideCursor(); } QSize PFSViewWidget::sizeHint() const { if( pfsFrame != NULL ) return QSize( (int)((float)pfsFrame->getWidth()*zoom), (int)((float)pfsFrame->getHeight()*zoom) ); // return QSize( (int)((float)pfsFrame->getWidth()*zoom) + 2 * frameWidth(), (int)((float)pfsFrame->getHeight()*zoom) + 2 * frameWidth() ); // return QSize( pfsFrame->getWidth() + 2 * frameWidth(), pfsFrame->getHeight() + 2 * frameWidth() ); else return QWidget::sizeHint(); } // ======================= Events =========================== void PFSViewWidget::setRGBClippingMethod( QAction *action ) { clippingMethod = (RGBClippingMethod)action->data().toUInt(); postUpdateMapping(); } void PFSViewWidget::setInfNaNTreatment( QAction *action ) { infNaNTreatment = (InfNaNTreatment)action->data().toUInt(); postUpdateMapping(); } void PFSViewWidget::setNegativeTreatment( QAction *action ) { negativeTreatment = (NegativeTreatment)action->data().toUInt(); postUpdateMapping(); } void PFSViewWidget::setLumMappingMethod( int method ) { mappingMethod = (LumMappingMethod)method; postUpdateMapping(); } void PFSViewWidget::zoomIn() { if( zoom >= 10 ) return; zoom *= 1.25f; updateZoom(); } void PFSViewWidget::zoomOut() { if( zoom <= 0.05 ) return; zoom *= 0.8f; updateZoom(); } void PFSViewWidget::zoomOriginal() { zoom = 1; updateZoom(); } void PFSViewWidget::setRangeWindow( float min, float max ) { minValue = min; maxValue = max; postUpdateMapping(); } // ===================== Mouse interaction ========================= void PFSViewWidget::mouseMoveEvent( QMouseEvent *mouseEvent ) { assert( pfsFrame != NULL ); setPointer( (int)((float)mouseEvent->x() / zoom), (int)((float)mouseEvent->y() / zoom) ); } void PFSViewWidget::setPointer( int x, int y ) { assert( pfsFrame != NULL ); if( x >= 0 ) { pointerValue.x = x; pointerValue.y = y; } if( pointerValue.x >= 0 && pointerValue.x < pfsFrame->getWidth() && pointerValue.y >= 0 && pointerValue.y < pfsFrame->getHeight() ) { if( visibleChannel == COLOR_CHANNELS ) { pfs::Channel *X, *Y, *Z; pfsFrame->getXYZChannels( X, Y, Z ); pointerValue.value[0] = (*X)( pointerValue.x, pointerValue.y ); pointerValue.value[1] = (*Y)( pointerValue.x, pointerValue.y ); pointerValue.value[2] = (*Z)( pointerValue.x, pointerValue.y ); pointerValue.valuesUsed = 3; pointerValue.valid = true; } else { pfs::Channel *X; X = pfsFrame->getChannel( visibleChannel ); pointerValue.value[0] = (*X)( pointerValue.x, pointerValue.y ); pointerValue.valuesUsed = 1; pointerValue.valid = true; } updatePointerValue(); } else { pointerValue.valid = false; updatePointerValue(); } } void PFSViewWidget::leaveEvent ( QEvent * ) { pointerValue.valid = false; updatePointerValue(); } const PointerValue &PFSViewWidget::getPointerValue() { return pointerValue; } // ===================== Data access ========================= const pfs::Array2D *PFSViewWidget::getPrimaryChannel() { assert( pfsFrame != NULL ); if( visibleChannel == COLOR_CHANNELS ) { pfs::Channel *X, *Y, *Z; pfsFrame->getXYZChannels( X, Y, Z ); return Y; } else { return pfsFrame->getChannel( visibleChannel ); } } const QList PFSViewWidget::getChannels() { assert( pfsFrame != NULL ); QList chArray; pfs::ChannelIterator *it = pfsFrame->getChannels(); it = pfsFrame->getChannels(); while( it->hasNext() ) { pfs::Channel *ch = it->getNext(); chArray.push_back(ch->getName()); } return chArray; } void PFSViewWidget::setVisibleChannel( const char *channelName ) { visibleChannelName = channelName; visibleChannel = channelName != NULL ? (const char*)visibleChannelName : COLOR_CHANNELS; updateZoom(); setPointer(); } const char *PFSViewWidget::getVisibleChannel() { return visibleChannel; } bool PFSViewWidget::hasColorChannels( pfs::Frame *frame ) { if( frame == NULL ) frame = pfsFrame; assert( frame != NULL ); pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); return ( X != NULL ); } pfstools-1.8.5/src/pfsview/main.cpp0000644000175000017500000006446211557013055014237 00000000000000/** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: main.cpp,v 1.18 2011/04/30 14:01:17 rafm Exp $ */ #include #include "main.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "pfsview_widget.h" #include "luminancerange_widget.h" #define PROGNAME "pfsview" //QApplication *qApp; PFSViewMainWin::PFSViewMainWin( float window_min, float window_max ): QMainWindow( 0 ) { currentFrame = frameList.end(); QScrollArea *pfsViewArea = new PFSViewWidgetArea( this ); pfsView = (PFSViewWidget*)pfsViewArea->widget(); setCentralWidget( pfsViewArea ); setWindowIcon( QIcon( ":icons/appicon.png" ) ); QAction *nextFrameAct = new QAction( tr( "&Next frame" ), this ); nextFrameAct->setStatusTip( tr( "Load next frame" ) ); nextFrameAct->setShortcut( Qt::Key_PageDown ); connect( nextFrameAct, SIGNAL(triggered()), this, SLOT(gotoNextFrame()) ); QAction *previousFrameAct = new QAction( tr( "&Previous frame" ), this ); previousFrameAct->setStatusTip( tr( "Load previous frame" ) ); previousFrameAct->setShortcut( Qt::Key_PageUp ); connect( previousFrameAct, SIGNAL(triggered()), this, SLOT(gotoPreviousFrame()) ); QToolBar *toolBar = addToolBar( tr( "Navigation" ) ); // toolBar->setHorizontalStretchable( true ); QToolButton *previousFrameBt = new QToolButton( toolBar ); previousFrameBt->setArrowType( Qt::LeftArrow ); previousFrameBt->setMinimumWidth( 15 ); connect( previousFrameBt, SIGNAL(clicked()), this, SLOT(gotoPreviousFrame()) ); previousFrameBt->setToolTip( "Goto previous frame" ); toolBar->addWidget( previousFrameBt ); QToolButton *nextFrameBt = new QToolButton( toolBar ); nextFrameBt->setArrowType( Qt::RightArrow ); nextFrameBt->setMinimumWidth( 15 ); connect( nextFrameBt, SIGNAL(clicked()), this, SLOT(gotoNextFrame()) ); nextFrameBt->setToolTip( "Goto next frame" ); toolBar->addWidget( nextFrameBt ); QLabel *channelSelLabel = new QLabel( "&Channel", toolBar ); channelSelection = new QComboBox( toolBar ); channelSelLabel->setBuddy( channelSelection ); connect( channelSelection, SIGNAL( activated( int ) ), this, SLOT( setChannelSelection(int) ) ); toolBar->addWidget( channelSelLabel ); toolBar->addWidget( channelSelection ); toolBar->addSeparator(); QLabel *mappingMethodLabel = new QLabel( "&Mapping", toolBar ); mappingMethodLabel->setAlignment( Qt::AlignRight | Qt::AlignVCenter ); // | // Qt::TextExpandTabs | Qt::TextShowMnemonic ); mappingMethodCB = new QComboBox( toolBar ); mappingMethodLabel->setBuddy( mappingMethodCB ); mappingMethodCB->addItem( "Linear" ); mappingMethodCB->addItem( "Gamma 1.4" ); mappingMethodCB->addItem( "Gamma 1.8" ); mappingMethodCB->addItem( "Gamma 2.2" ); mappingMethodCB->addItem( "Gamma 2.6" ); mappingMethodCB->addItem( "Logarithmic" ); mappingMethodCB->setCurrentIndex( 3 ); connect( mappingMethodCB, SIGNAL( activated( int ) ), this, SLOT( setLumMappingMethod(int) ) ); toolBar->addWidget( mappingMethodLabel ); toolBar->addWidget( mappingMethodCB ); // addToolBar( Qt::BottomToolBarArea, toolBar ); QToolBar *toolBarLR = addToolBar( tr( "Histogram" ) ); lumRange = new LuminanceRangeWidget( toolBarLR ); connect( lumRange, SIGNAL( updateRangeWindow() ), this, SLOT( updateRangeWindow() ) ); toolBarLR->addWidget( lumRange ); // addToolBar( toolBar ); pointerPosAndVal = new QLabel( statusBar() ); statusBar()->addWidget( pointerPosAndVal ); // QFont fixedFont = QFont::defaultFont(); // fixedFont.setFixedPitch( true ); // pointerPosAndVal->setFont( fixedFont ); zoomValue = new QLabel( statusBar() ); statusBar()->addWidget( zoomValue ); exposureValue = new QLabel( statusBar() ); statusBar()->addWidget( exposureValue ); connect( pfsView, SIGNAL(updatePointerValue()), this, SLOT(updatePointerValue()) ); QMenu *frameMenu = menuBar()->addMenu( tr( "&Frame" ) ); frameMenu->addAction( nextFrameAct ); frameMenu->addAction( previousFrameAct ); frameMenu->addSeparator(); frameMenu->addAction( "&Save image...", this, SLOT(saveImage()), QKeySequence::Save ); frameMenu->addAction( "&Copy image to clipboard", this, SLOT(copyImage()), QKeySequence::Copy ); frameMenu->addSeparator(); frameMenu->addAction( "&Quit", qApp, SLOT(quit()), Qt::Key_Q ); //QKeySequence::Quit QShortcut *shortcut = new QShortcut( QKeySequence::Close, this ); connect( shortcut, SIGNAL(activated()), qApp, SLOT(quit()) ); QAction *act; QMenu *viewMenu = menuBar()->addMenu( tr( "&View" ) ); act = viewMenu->addAction( "&Zoom in", pfsView, SLOT(zoomIn()), Qt::Key_Period ); // QKeySequence::ZoomIn -- not doing it -- silly binding under Linux connect( act, SIGNAL(triggered()), this, SLOT(updateZoomValue()) ); act = viewMenu->addAction( "Zoom &out", pfsView, SLOT(zoomOut()), Qt::Key_Comma ); connect( act, SIGNAL(triggered()), this, SLOT(updateZoomValue()) ); act = viewMenu->addAction( "Zoom &1:1", pfsView, SLOT(zoomOriginal()), Qt::Key_N ); connect( act, SIGNAL(triggered()), this, SLOT(updateZoomValue()) ); viewMenu->addAction( "&Fit window to content", this, SLOT(updateViewSize()), Qt::Key_C ); viewMenu->addSeparator(); QMenu *infnanMenu = viewMenu->addMenu( "NaN and &Inf values" ); QActionGroup *infnanActGrp = new QActionGroup( this ); infnanActGrp->setExclusive( true ); QAction *infnanHideAct = new QAction( tr( "&Hide" ), this ); infnanHideAct->setCheckable(true); infnanHideAct->setData(0); infnanActGrp->addAction( infnanHideAct ); infnanMenu->addAction( infnanHideAct ); QAction *infnanMarkAct = new QAction( tr( "Mark with &red color" ), this ); infnanMarkAct->setCheckable(true); infnanMarkAct->setData(1); infnanActGrp->addAction( infnanMarkAct ); infnanMenu->addAction( infnanMarkAct ); infnanMarkAct->setChecked( true ); connect( infnanActGrp, SIGNAL(triggered(QAction*)), pfsView, SLOT(setInfNaNTreatment(QAction*)) ); QMenu *colorClipMenu = viewMenu->addMenu( "&Color clipping" ); QActionGroup *colorClipActGrp = new QActionGroup( this ); colorClipActGrp->setExclusive( true ); QAction *colorClipSimpleAct = new QAction( tr( "&Simple clipping" ), this ); colorClipSimpleAct->setCheckable(true); colorClipSimpleAct->setData(CLIP_SIMPLE); colorClipSimpleAct->setShortcut( Qt::CTRL + Qt::Key_H ); colorClipActGrp->addAction( colorClipSimpleAct ); colorClipMenu->addAction( colorClipSimpleAct ); QAction *colorClipCodedAct = new QAction( tr( "&Color-coded clipping" ), this ); colorClipCodedAct->setCheckable(true); colorClipCodedAct->setShortcut( Qt::CTRL + Qt::Key_J ); colorClipCodedAct->setData(CLIP_COLORCODED); colorClipActGrp->addAction( colorClipCodedAct ); colorClipMenu->addAction( colorClipCodedAct ); QAction *colorClipBriHueAct = new QAction( tr( "&Keep brightness and hue" ), this ); colorClipBriHueAct->setCheckable(true); colorClipBriHueAct->setShortcut( Qt::CTRL + Qt::Key_K ); colorClipBriHueAct->setData(CLIP_KEEP_BRI_HUE); colorClipActGrp->addAction( colorClipBriHueAct ); colorClipMenu->addAction( colorClipBriHueAct ); colorClipSimpleAct->setChecked( true ); connect( colorClipActGrp, SIGNAL(triggered(QAction*)), pfsView, SLOT(setRGBClippingMethod(QAction*)) ); QMenu *negativeMenu = viewMenu->addMenu( "&Negative values" ); QActionGroup *negativeActGrp = new QActionGroup( this ); negativeActGrp->setExclusive( true ); act = new QAction( tr( "&Black" ), this ); act->setCheckable(true); act->setData(NEGATIVE_BLACK); act->setShortcut( Qt::ALT + Qt::Key_B ); negativeActGrp->addAction( act ); negativeMenu->addAction( act ); act->setChecked( true ); act = new QAction( tr( "Mark with &red color" ), this ); act->setCheckable(true); act->setData(NEGATIVE_MARK_AS_RED); act->setShortcut( Qt::ALT + Qt::Key_R ); negativeActGrp->addAction( act ); negativeMenu->addAction( act ); act = new QAction( tr( "Use &green color scale" ), this ); act->setCheckable(true); act->setData(NEGATIVE_GREEN_SCALE); act->setShortcut( Qt::ALT + Qt::Key_G ); negativeActGrp->addAction( act ); negativeMenu->addAction( act ); act = new QAction( tr( "Use &absolute values" ), this ); act->setCheckable(true); act->setData(NEGATIVE_ABSOLUTE); act->setShortcut( Qt::ALT + Qt::Key_A ); negativeActGrp->addAction( act ); negativeMenu->addAction( act ); connect( negativeActGrp, SIGNAL(triggered(QAction*)), pfsView, SLOT(setNegativeTreatment(QAction*)) ); viewMenu->addSeparator(); QMenu *colorCoordMenu = viewMenu->addMenu( "Color coo&rdinates" ); QActionGroup *colorCoordActGrp = new QActionGroup( this ); colorCoordActGrp->setExclusive( true ); act = new QAction( tr( "&RGB" ), this ); act->setCheckable(true); act->setData(CC_RGB); act->setShortcut( Qt::SHIFT + Qt::ALT + Qt::Key_R ); colorCoordActGrp->addAction( act ); colorCoordMenu->addAction( act ); act->setChecked( true ); act = new QAction( tr( "&XYZ" ), this ); act->setCheckable(true); act->setData(CC_XYZ); act->setShortcut( Qt::SHIFT + Qt::ALT + Qt::Key_X ); colorCoordActGrp->addAction( act ); colorCoordMenu->addAction( act ); act = new QAction( tr( "Y&u'v'" ), this ); act->setCheckable(true); act->setData(CC_Yupvp); act->setShortcut( Qt::SHIFT + Qt::ALT + Qt::Key_U ); colorCoordActGrp->addAction( act ); colorCoordMenu->addAction( act ); act = new QAction( tr( "Yx&y" ), this ); act->setCheckable(true); act->setData(CC_Yxy); act->setShortcut( Qt::SHIFT + Qt::ALT + Qt::Key_Y ); colorCoordActGrp->addAction( act ); colorCoordMenu->addAction( act ); connect( colorCoordActGrp, SIGNAL(triggered(QAction*)), this, SLOT(setColorCoord(QAction*)) ); QMenu *mappingMenu = menuBar()->addMenu( tr( "&Tone mapping" ) ); mappingMenu->addAction( "Increase exposure", lumRange, SLOT(increaseExposure()), Qt::Key_Minus ); mappingMenu->addAction( "Decrease exposure", lumRange, SLOT(decreaseExposure()), Qt::Key_Equal ); mappingMenu->addAction( "Extend dynamic range", lumRange, SLOT(extendRange()), Qt::Key_BracketRight ); mappingMenu->addAction( "Shrink dynamic range", lumRange, SLOT(shrinkRange()), Qt::Key_BracketLeft ); mappingMenu->addAction( "Fit to dynamic range", lumRange, SLOT(fitToDynamicRange()), Qt::Key_Backslash ); mappingMenu->addAction( "Low dynamic range", lumRange, SLOT(lowDynamicRange()), Qt::ALT + Qt::Key_L ); QMenu *mapfuncMenu = mappingMenu->addMenu( "&Mapping function" ); QActionGroup *mapfuncActGrp = new QActionGroup( this ); mapfuncActGrp->setExclusive( true ); mappingAct[0] = act = new QAction( tr( "&Linear" ), this ); act->setCheckable(true); act->setData(0); act->setShortcut( Qt::Key_L ); mapfuncActGrp->addAction( act ); mapfuncMenu->addAction( act ); mappingAct[1] = act = new QAction( tr( "Gamma 1.&4" ), this ); act->setCheckable(true); act->setData(1); act->setShortcut( Qt::Key_1 ); mapfuncActGrp->addAction( act ); mapfuncMenu->addAction( act ); mappingAct[2] = act = new QAction( tr( "Gamma 1.&8" ), this ); act->setCheckable(true); act->setData(2); act->setShortcut( Qt::Key_2 ); mapfuncActGrp->addAction( act ); mapfuncMenu->addAction( act ); mappingAct[3] = act = new QAction( tr( "Gamma 2.&2" ), this ); act->setCheckable(true); act->setData(3); act->setChecked( true ); act->setShortcut( Qt::Key_3 ); mapfuncActGrp->addAction( act ); mapfuncMenu->addAction( act ); mappingAct[4] = act = new QAction( tr( "Gamma 2.&6" ), this ); act->setCheckable(true); act->setData(4); act->setShortcut( Qt::Key_4 ); mapfuncActGrp->addAction( act ); mapfuncMenu->addAction( act ); mappingAct[5] = act = new QAction( tr( "L&ogarithmic" ), this ); act->setCheckable(true); act->setData(5); act->setShortcut( Qt::Key_O ); mapfuncActGrp->addAction( act ); mapfuncMenu->addAction( act ); connect( mapfuncActGrp, SIGNAL(triggered(QAction*)), this, SLOT(setLumMappingMethod(QAction*)) ); QMenu *helpMenu = menuBar()->addMenu( tr( "&Help" ) ); helpMenu->addAction( "&About", this, SLOT(showAboutdialog()) ); colorCoord = CC_RGB; //Window should not be larger than desktop // TODO: how to find desktop size - gnome taksbars // setMaximumSize( QApplication::desktop()->width(), QApplication::desktop()->height() ); try { if( !readNextFrame() ) throw PFSViewException(); if( window_min < window_max ) lumRange->setRangeWindowMinMax( window_min, window_max ); } catch( pfs::Exception ex ) { QMessageBox::critical( this, "pfsview error", ex.getMessage() ); throw PFSViewException(); } } /* void PFSViewMainWin::changeClippingMethod( int clippingMethod ) { for( int i = 0; i < CLIP_COUNT; i++ ) viewMenu->setItemChecked( clippingMethodMI[i], clippingMethod == i ); statusBar()->message( viewMenu->text(clippingMethodMI[clippingMethod]), 1000 ); } void PFSViewMainWin::setInfNaNTreatment( int method ) { infnanMenu->setItemChecked( infNaNMI[0], method == 0 ); infnanMenu->setItemChecked( infNaNMI[1], method == 1 ); } void PFSViewMainWin::setNegativeTreatment( int method ) { for( int i = 0; i < NEGATIVE_COUNT; i++ ) negativeMenu->setItemChecked( negativeMI[i], method == i ); } */ void PFSViewMainWin::setLumMappingMethod( int method ) { mappingMethodCB->setCurrentIndex( method ); pfsView->setLumMappingMethod( method ); mappingAct[method]->setChecked( true ); } void PFSViewMainWin::setLumMappingMethod( QAction *action ) { int method = action->data().toUInt(); mappingMethodCB->setCurrentIndex( method ); pfsView->setLumMappingMethod( method ); } struct ColorSpaceLabel { const char *comboBoxLabel; const char *c1, *c2, *c3; }; static const ColorSpaceLabel scLabels[] = { { "Color XYZ", "X", "Y", "Z" } }; int scLabelsCount = sizeof( scLabels ) / sizeof( ColorSpaceLabel ); void PFSViewMainWin::updatePointerValue() { const PointerValue &pv = pfsView->getPointerValue(); if( pv.valid ) { char pointerValueStr[256]; const PointerValue &pv = pfsView->getPointerValue(); sprintf( pointerValueStr, "(x,y)=(%4d,%4d) ", pv.x, pv.y ); QString label( pointerValueStr ); int channelSel = channelSelection->currentIndex(); if( pv.valuesUsed == 3 ) { // Color assert( channelSel < scLabelsCount ); pfs::Array2DImpl X(1,1), Y(1,1), Z(1,1); X(0) = pv.value[0]; Y(0) = pv.value[1]; Z(0) = pv.value[2]; const char *l1, *l2, *l3; switch( colorCoord ) { case CC_RGB: l1 = "R"; l2 = "G"; l3 = "B"; pfs::transformColorSpace( pfs::CS_XYZ, &X, &Y, &Z, pfs::CS_RGB, &X, &Y, &Z ); break; case CC_XYZ: l1 = "X"; l2 = "Y"; l3 = "Z"; break; case CC_Yupvp: pfs::transformColorSpace( pfs::CS_XYZ, &X, &Y, &Z, pfs::CS_YUV, &X, &Y, &Z ); l1 = "Y"; l2 = "u'"; l3 = "v'"; break; case CC_Yxy: pfs::transformColorSpace( pfs::CS_XYZ, &X, &Y, &Z, pfs::CS_Yxy, &X, &Y, &Z ); l1 = "Y"; l2 = "x"; l3 = "y"; break; }; sprintf( pointerValueStr, "%s=%07.4g %s=%07.4g %s=%07.4g", l1, X(0), l2, Y(0), l3, Z(0) ); label += pointerValueStr; lumRange->showValuePointer( log10(pv.value[1]) ); } else { // Single channel const QString &name = channelSelection->itemText( channelSel ); sprintf( pointerValueStr, "%s=%07.4g", (const char*)name.toAscii(), pv.value[0] ); label += pointerValueStr; lumRange->showValuePointer( log10(pv.value[0]) ); } pointerPosAndVal->setText( label ); } else { pointerPosAndVal->setText( "(?,?)" ); lumRange->hideValuePointer(); } } void PFSViewMainWin::setColorCoord( QAction *action ) { colorCoord = (ColorCoord)action->data().toUInt(); updatePointerValue(); } void PFSViewMainWin::updateZoomValue() { char strBuf[20]; sprintf( strBuf, "%d%%", (int)(pfsView->getZoom()*100) ); zoomValue->setText( strBuf ); } void PFSViewMainWin::updateViewSize() { // QSize sz = sizeHint(); // printf( "main window: %d %d\n", sz.width(), sz.height() ); centralWidget()->updateGeometry(); resize( sizeHint() ); } void PFSViewMainWin::updateRangeWindow() { pfsView->setRangeWindow( pow( 10, lumRange->getRangeWindowMin() ), pow( 10, lumRange->getRangeWindowMax() ) ); char ev_str[100]; sprintf( ev_str, "EV = %+.2g f-stops %+.2g D %.4g", -lumRange->getRangeWindowMax()*log(2)/log(10), -lumRange->getRangeWindowMax(), 1/pow( 10, lumRange->getRangeWindowMax() ) ); exposureValue->setText( ev_str ); } void PFSViewMainWin::updateChannelSelection() { channelSelection->clear(); const char *visibleChannel = pfsView->getVisibleChannel(); if( pfsView->hasColorChannels() ) { channelSelection->addItem( "Color XYZ" ); if( !strcmp( visibleChannel, "Color" ) ) channelSelection->setCurrentIndex( 0 ); } /* channelSelection->insertItem( "Color RGB" ); channelSelection->insertItem( "Color XYZ" ); channelSelection->insertItem( "Color L*ab" ); channelSelection->insertItem( "Luminance Y" );*/ QList channelNames = pfsView->getChannels(); for( int c = 0; c < channelNames.size(); c++ ) { channelSelection->addItem( channelNames[c] ); if( !strcmp( channelNames[c], visibleChannel ) ) channelSelection->setCurrentIndex( channelSelection->count()-1 ); } } void PFSViewMainWin::setChannelSelection( int selectedChannel ) { // If channel combo box has not been initialized yet if( selectedChannel >= channelSelection->count() ) return; const QString &name = channelSelection->itemText( selectedChannel ); if( pfsView->hasColorChannels() && selectedChannel < scLabelsCount ) { pfsView->setVisibleChannel( NULL ); // Color } else { pfsView->setVisibleChannel( (const char*)name.toAscii() ); } updateMenuEnable( ); lumRange->setHistogramImage(pfsView->getPrimaryChannel()); updatePointerValue(); } void PFSViewMainWin::updateMenuEnable( ) { bool color = pfsView->getVisibleChannel() == COLOR_CHANNELS; // negativeMenu->setItemEnabled( negativeMI[NEGATIVE_GREEN_SCALE], !color ); // negativeMenu->setItemEnabled( negativeMI[NEGATIVE_ABSOLUTE], !color ); } void PFSViewMainWin::showAboutdialog() { QMessageBox::information( this, "pfsview", "pfsview " PACKAGE_VERSION "\n" "Copyright (C) 2005-2011 Rafal Mantiuk\n\n" "See the manual page (man pfsview) and\n" "the web page (http://pfstools.sourceforge.net/)\n" "for more information" ); } // ======================= Loading next frame ========================== /** * GUI action -> goto next frame * handle error and eof of frame */ void PFSViewMainWin::gotoNextFrame() { try { if( !readNextFrame() ) { statusBar()->showMessage( "No more frames", 1000 ); } } catch( pfs::Exception ex ) { // Display message and keep the old frame QMessageBox::critical( this, "pfsview error", ex.getMessage() ); qApp->quit(); } } void PFSViewMainWin::gotoPreviousFrame() { currentFrame++; if( currentFrame == frameList.end() ) { currentFrame--; statusBar()->showMessage( "No more frames in buffer (buffer holds max 5 frames)", 1000 ); return; } setFrame( *currentFrame ); } void PFSViewMainWin::setFrame( pfs::Frame *frame ) { QApplication::setOverrideCursor( QCursor( Qt::WaitCursor ) ); pfsView->setFrame( frame ); lumRange->setHistogramImage(pfsView->getPrimaryChannel()); updateChannelSelection(); updateZoomValue(); const char *luminanceTag = frame->getTags()->getString( "LUMINANCE" ); if( luminanceTag != NULL && !strcmp( luminanceTag, "DISPLAY" ) ) { setLumMappingMethod(0); lumRange->lowDynamicRange(); } updateRangeWindow(); // Set the window caption to the name of the frame, if it is given const char *fileName = frame->getTags()->getString( "FILE_NAME" ); QString qLuminance( "" ); if( luminanceTag!=NULL ) qLuminance=QString(" (") + QString(luminanceTag) + QString(")"); if( fileName == NULL ) setWindowTitle( QString( "pfsview" ) ); else { QString qFileName( fileName ); if( qFileName.length() > 30 ) setWindowTitle( QString( "pfsview: ... " ) + QString( fileName ).right( 30 ) + qLuminance); else setWindowTitle( QString( "pfsview: " ) + QString( fileName ) + qLuminance); } updateMenuEnable( ); QApplication::restoreOverrideCursor(); } /** * Load next frame from the stream. * @return false if there are no more frames */ bool PFSViewMainWin::readNextFrame() { if( currentFrame != frameList.begin() ) { currentFrame--; setFrame( *currentFrame ); return true; } pfs::DOMIO pfsCtx; pfs::Frame *newFrame; newFrame = pfsCtx.readFrame( stdin ); if( newFrame == NULL ) return false; // No more frames if( frameList.size() == MAX_FRAMES_IN_MEMORY ) { // Remove one frame from the back pfsCtx.freeFrame( frameList.back() ); frameList.pop_back(); } frameList.push_front( newFrame ); currentFrame = frameList.begin(); setFrame( newFrame ); return true; } // ======================= Saving image ================================ void PFSViewMainWin::saveImage() { QString fileName = QFileDialog::getSaveFileName( this, "Save current view as...", "./", "*.png; *.jpg" ); QByteArray jpeg_format( "jpg" ); QByteArray png_format( "png" ); if ( !fileName.isNull() ) { // got a file name QList file_formats = QImageWriter::supportedImageFormats(); QList::iterator it; QByteArray *format = NULL; for( it = file_formats.begin(); it != file_formats.end(); it++ ) { if( fileName.endsWith( (const char*)*it ) ) { format = &(*it); break; } } if( format == NULL ) { int sel = QMessageBox::question( this, "Select image format", "The file name is missing extension or the extension is not recongnized as an image format. Choose the image format.", "Cancel", "JPEG image", "PNG image" ); if( sel == 1 ) { format = &jpeg_format; fileName = fileName + ".jpg"; } else if( sel == 2 ) { format = &png_format; fileName = fileName + ".png"; } } if( format != NULL ) { QImage *image = pfsView->getDisplayedImage(); if( !image->save( fileName, format->data(), -1 ) ) { QMessageBox::warning( this, "Saving image problem", "Cannot save image " + fileName ); } else statusBar()->showMessage( fileName + QString( "' saved as " ) + QString( format->data() ) + QString( " image" ), 4000 ); } } } void PFSViewMainWin::copyImage() { QClipboard *cb = QApplication::clipboard(); const QImage *image = pfsView->getDisplayedImage(); cb->setImage( *image, QClipboard::Clipboard ); statusBar()->showMessage( "Image copied to clipboard", 2000 ); } // ======================= main and command line ======================= void printUsage() { fprintf( stderr, "Usage: " PROGNAME " [options]\n" "\n" "Displays high-dynamic range image in pfs format. The image is read from the " "standard output.\n" "\n" "options:\n" "\t--help : prints this message\n" "\t--window_min log_lum : lower bound of hdr display window, given as " "a log10 of luminance.\n" "\t--window_min log_lum : the same as above, but the upper bound\n" ); } static void errorCheck( bool condition, const char *string ) { if( !condition ) { fprintf( stderr, PROGNAME " error: %s\n", string ); abort(); } } int main(int argc, char** argv) { QApplication app(argc, argv); // qApp = &app; float window_min = 0, window_max = 0; for( int i=1 ; i -100, "--window_min expects floating point value between -100 and 100" ); } else if( !strcmp( argv[i], "--window_max") ) { i++; errorCheck( i < argc, "expected parameter after --window_max" ); char *checkPtr; window_max = (float)strtod( argv[i], &checkPtr ); errorCheck( checkPtr != NULL && checkPtr[0] == 0 && window_max < 100 && window_max > -100, "--window_max expects floating point value between -100 and 100" ); } else { fprintf( stderr, PROGNAME " error: not recognized parameter '%s'\n", argv[i] ); printUsage(); return -1; } } errorCheck( window_min <= window_max, "window_min must be less than window_max" ); try { PFSViewMainWin pfsViewMW( window_min, window_max ); // app.setMainWidget(&pfsViewMW); pfsViewMW.show(); pfsViewMW.updateViewSize(); return app.exec(); } catch( PFSViewException ex ) { QMessageBox::critical( NULL, "pfsview error", "Can not open the first PFS frame. Quitting." ); return -1; } } pfstools-1.8.5/src/pfsview/histogram.cpp0000664000175000017500000000502410306047513015274 00000000000000/** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: histogram.cpp,v 1.2 2005/09/02 13:10:35 rafm Exp $ */ #include #include #include #include "histogram.h" Histogram::Histogram( int bins, int accuracy ): bins( bins ), accuracy( accuracy ) { P = new float[bins]; } Histogram::~Histogram() { delete[] P; } void Histogram::computeLog( const pfs::Array2D *image ) { const int size = image->getRows()*image->getCols(); float max, min; // Find min, max { min = 999999999; max = -999999999; for( int i = 0; i < size; i += accuracy ) { float v = (*image)(i); if( v > max ) max = v; else if( v < min ) min = v; } } computeLog( image, min, max ); } void Histogram::computeLog( const pfs::Array2D *image, float min, float max ) { const int size = image->getRows()*image->getCols(); // Empty all bins for( int i = 0; i < bins; i++ ) P[i] = 0; float count = 0; float binWidth = (max-min)/(float)bins; for( int i = 0; i < size; i += accuracy ) { float v = (*image)(i); if( v <= 0 ) continue; v = log10(v); int bin = (int)((v-min)/binWidth); if( bin > bins || bin < 0 ) continue; if( bin == bins ) bin = bins-1; P[bin] += 1; count++; } // Normalize, to get probability for( int i = 0; i < bins; i++ ) P[i] /= (float)(count/accuracy); } float Histogram::getMaxP() const { float maxP = -1; for( int i = 0; i < bins; i++ ) { if( P[i] > maxP ) { maxP = P[i]; } } return maxP; } pfstools-1.8.5/src/pfsview/pfsv.10000664000175000017500000000115410401346271013632 00000000000000.TH "pfsv" 1 .SH NAME pfsv \- Viewer for high-dynamic range images .SH SYNOPSIS .B pfsv [files...] .SH DESCRIPTION Display a HDR image or sequence of images using pfsview. This is a shell wrapper that invokes pfsin to load an image in one of the several recognized formats (see pfsin for the list of formats) and displays it using pfsview. Note: This program was renamed from \fBpv\fR to avoid conflict with the pipe viewer 'pv'. .SH EXAMPLES .TP pfsv memorial.hdr Display memorial image. .SH "SEE ALSO" .BR pfsview (1) .BR pfsin (1) .SH BUGS Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/pfsview/luminancerange_widget.h0000644000175000017500000000515211541674054017307 00000000000000#ifndef LUMINANCERANGE_WIDGET_H #define LUMINANCERANGE_WIDGET_H /** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: luminancerange_widget.h,v 1.3 2011/03/21 16:09:16 rafm Exp $ */ #include #include #include class Histogram; namespace pfs { class Array2D; } class LuminanceRangeWidget : public QFrame { Q_OBJECT public: LuminanceRangeWidget( QWidget *parent=0 ); ~LuminanceRangeWidget(); QSize sizeHint () const; protected: void paintEvent( QPaintEvent * ); void mouseMoveEvent( QMouseEvent * ); void mousePressEvent( QMouseEvent * me ); void mouseReleaseEvent( QMouseEvent * me ); float draggedMin(); float draggedMax(); signals: void updateRangeWindow(); public slots: void decreaseExposure(); void increaseExposure(); void extendRange(); void shrinkRange(); void fitToDynamicRange(); void lowDynamicRange(); private: float minValue; float maxValue; float windowMin; float windowMax; static const int DRAGNOTSTARTED = -1; int mouseDragStart; float dragShift; enum DragMode { DRAG_MIN, DRAG_MAX, DRAG_MINMAX, DRAG_NO }; DragMode dragMode; bool showVP; float valuePointer; Histogram *histogram; const pfs::Array2D *histogramImage; QRect getPaintRect() const; public: float getRangeWindowMin() const { return windowMin; } float getRangeWindowMax() const { return windowMax; } void setRangeWindowMinMax( float min, float max ); void setHistogramImage( const pfs::Array2D *image ); void showValuePointer( float value ); void hideValuePointer(); }; #endif pfstools-1.8.5/src/pfsview/resources.cpp0000644000175000017500000002453411541660334015322 00000000000000/**************************************************************************** ** Resource object code ** ** Created: Mon Mar 21 14:25:10 2011 ** by: The Resource Compiler for Qt version 4.5.2 ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #include static const unsigned char qt_resource_data[] = { // /export/users/mantiuk/projects/pfstools/src/pfsview/icons/appicon.png 0x0,0x0,0x6,0xad, 0x89, 0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0, 0x0,0x0,0x20,0x0,0x0,0x0,0x20,0x8,0x6,0x0,0x0,0x0,0x73,0x7a,0x7a,0xf4, 0x0,0x0,0x0,0x4,0x73,0x42,0x49,0x54,0x8,0x8,0x8,0x8,0x7c,0x8,0x64,0x88, 0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0x11,0x77,0x0,0x0,0x11,0x77, 0x1,0x40,0x71,0x9a,0xd1,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x53,0x6f,0x66, 0x74,0x77,0x61,0x72,0x65,0x0,0x77,0x77,0x77,0x2e,0x69,0x6e,0x6b,0x73,0x63,0x61, 0x70,0x65,0x2e,0x6f,0x72,0x67,0x9b,0xee,0x3c,0x1a,0x0,0x0,0x6,0x2a,0x49,0x44, 0x41,0x54,0x58,0x85,0xa5,0x97,0x7f,0x6c,0xd4,0xf5,0x19,0xc7,0x5f,0xcf,0xdd,0xf5, 0xc7,0xf5,0xee,0x68,0xaf,0xd7,0x5e,0xab,0xbd,0xb2,0x62,0x40,0xa0,0x2d,0x8c,0x81, 0x48,0xe7,0x18,0x68,0x36,0x8a,0x58,0x86,0xd5,0x75,0xcb,0x48,0x16,0x45,0x8c,0xcc, 0x69,0x36,0x32,0xb3,0x2c,0x59,0xc,0xba,0x29,0xcb,0x96,0x65,0x31,0x51,0x97,0xf9, 0x3,0xd4,0x18,0x67,0x34,0xc6,0x8a,0x41,0x87,0x85,0x4e,0x46,0xeb,0x1a,0x6,0x13, 0xa6,0xa5,0x45,0x59,0x6,0xa5,0xa5,0xa5,0xbf,0xef,0x68,0xaf,0x77,0x6d,0xef,0xd7, 0xb3,0x3f,0xae,0x7,0x77,0xed,0xb7,0x47,0xbb,0xbd,0x93,0xcf,0x1f,0x9f,0xe7,0x79, 0xbe,0xcf,0xf3,0xfe,0x3e,0x9f,0xcf,0xe7,0x79,0x3e,0x1f,0x51,0x55,0xfe,0x1f,0x88, 0xc8,0x9a,0x22,0x2b,0xd,0xf6,0xc,0x7c,0xa1,0x28,0x27,0xbb,0xc6,0xf4,0x87,0xf3, 0x72,0xa0,0xaa,0x69,0x7,0x50,0xee,0xb1,0x71,0x34,0x2f,0x93,0x5a,0x23,0xfd,0x57, 0x1c,0x34,0x5d,0xd8,0x8e,0xea,0x2e,0xb4,0xd2,0xc9,0xa5,0xeb,0xf9,0x9b,0x3e,0x4c, 0xe9,0xc8,0xb9,0xb2,0x65,0xf7,0xfa,0x62,0x9a,0xeb,0x37,0x71,0xc7,0xb2,0x3c,0x5e, 0xb4,0x67,0xc8,0xb7,0xa7,0xfd,0xfd,0xf2,0x4a,0x27,0x4b,0x17,0x39,0xe2,0xf3,0x12, 0x1b,0x66,0x11,0x29,0x98,0x4f,0x2,0xd2,0x12,0x18,0x8b,0xe0,0xbf,0xff,0x66,0x16, 0xdc,0xea,0x86,0xc6,0x1a,0x8a,0x6e,0xce,0xe3,0x8d,0x6c,0x8b,0x7c,0x3d,0xa1,0xf7, 0xd8,0xf8,0xc3,0x6f,0x6f,0xa5,0x28,0x31,0x2f,0x77,0x92,0x5,0x2c,0x9a,0xee,0x47, 0x44,0xec,0x22,0xb2,0x74,0xde,0x4,0x42,0x51,0x4e,0x7f,0xd2,0x87,0xf,0xc0,0x9e, 0x1,0x47,0xb7,0x52,0xbc,0x24,0x97,0xf7,0xca,0x1c,0xd2,0xba,0xdc,0x29,0x17,0x6b, 0x16,0x52,0xb5,0x22,0xff,0x9a,0x7d,0x85,0x93,0xdc,0xc,0x13,0x2b,0x93,0x2,0x9b, 0xb,0xad,0xf2,0xb3,0xc5,0xb,0xf8,0x62,0x49,0x2e,0xc7,0x92,0xc9,0x5f,0xb5,0x49, 0xb7,0x9,0x45,0x24,0xa3,0xc2,0x49,0x67,0xdb,0xf7,0xb8,0x21,0x21,0x1b,0x8f,0x80, 0xc5,0x4,0x19,0x6,0xd4,0x7b,0x83,0xb0,0xab,0x99,0xfe,0x36,0x1f,0xad,0x7d,0x41, 0xde,0x72,0x5b,0x79,0x7c,0x77,0x25,0xc5,0x3f,0xa9,0xc4,0x36,0x1a,0x82,0xd5,0xef, 0x31,0xd0,0x35,0xc6,0x4a,0x55,0xed,0x4f,0x7c,0x63,0x49,0x97,0x1,0x55,0xd,0x7b, 0xec,0x32,0x19,0x53,0x30,0x49,0x5c,0x66,0x4d,0xf3,0xc5,0xd,0x39,0xf0,0xc1,0x9d, 0x14,0xb5,0xfb,0xd8,0x74,0xf0,0x22,0xeb,0x1f,0xa9,0xc0,0x9a,0x9b,0x39,0x45,0x3c, 0xa,0x31,0x65,0x30,0x39,0x78,0xa,0x1,0x11,0xb9,0x17,0x18,0x4,0x5a,0x55,0x75, 0x4,0xc0,0x63,0x97,0x3d,0x5b,0x4a,0xc9,0x4d,0x4,0x9f,0x2b,0x2a,0x9c,0x50,0xe1, 0xc4,0x9a,0x2c,0x7b,0xec,0x38,0xc3,0xbd,0x41,0x1e,0x99,0x6e,0x6b,0x99,0xa,0xbe, 0x62,0x9d,0x9b,0x7d,0xdf,0x28,0x86,0x13,0x3,0x4c,0x2c,0xc9,0x95,0xc9,0x60,0x84, 0xb1,0xcd,0xa5,0x78,0xf6,0x6d,0xc0,0x69,0x14,0x64,0x22,0xa,0x9f,0xd,0x83,0x2a, 0x7c,0xd5,0x5,0x39,0x69,0x32,0x73,0xd6,0x7,0x2d,0xfd,0x9c,0x8b,0xc4,0xb4,0xd9, 0x90,0xc0,0x42,0x3b,0x7f,0x7c,0x65,0x23,0xf9,0x15,0x49,0xa1,0xfc,0x61,0x70,0x64, 0xcc,0x74,0x56,0xdf,0x41,0x78,0xcf,0x3f,0x19,0xc,0x46,0x19,0x32,0xc1,0x71,0x93, 0x10,0x5,0xaa,0xb2,0xcc,0x14,0x3d,0x75,0xb,0xee,0xef,0x2e,0x62,0xc6,0x57,0xcf, 0xb7,0xe3,0xbb,0x1c,0x60,0xaf,0x11,0x39,0x51,0x55,0x6e,0xb4,0xc9,0x13,0xeb,0x8b, 0xd9,0xfd,0xd6,0xb7,0xc8,0x37,0xcf,0x92,0xee,0xd1,0x10,0xec,0x38,0x86,0xf7,0xd4, 0x10,0x7f,0xe9,0x1a,0xe3,0x47,0xaa,0x3a,0x9e,0xe2,0x48,0xc4,0xe6,0xb1,0xf1,0xf2, 0xea,0x2,0x36,0xbf,0x71,0x7,0xae,0x5,0x99,0xd7,0x74,0x6d,0x5e,0xa8,0x69,0xa0, 0xb1,0xd3,0xaf,0xd5,0x86,0x4,0x0,0x8a,0x72,0xe4,0xd1,0xaf,0x15,0xf0,0xab,0x83, 0x9b,0x29,0xc8,0x34,0xd8,0xe1,0xf7,0x1e,0xc1,0xdb,0xd8,0xc3,0x3,0xfe,0x90,0x1e, 0x34,0xa6,0x18,0x87,0x23,0x53,0xb6,0x55,0x7b,0x78,0xb5,0x7e,0x13,0xae,0x64,0xf9, 0xd6,0x6,0x86,0x3e,0x1f,0xe6,0xb5,0xbe,0x71,0x4e,0x45,0x62,0x5c,0x4,0xba,0x80, 0xbe,0x94,0x63,0xe8,0xca,0x96,0x1f,0x94,0x3b,0x79,0xf6,0x6f,0x5b,0x71,0x5b,0x92, 0x48,0xd4,0x77,0x10,0x7e,0xec,0x38,0x6f,0x77,0xfa,0xf5,0xbe,0x74,0xc1,0x13,0xb8, 0x69,0x81,0xec,0xff,0x7d,0x15,0xf7,0xd5,0x25,0x2d,0xc7,0x95,0x10,0x9c,0x1a,0x84, 0xe,0x3f,0x91,0x2f,0xaf,0x30,0x7a,0xd6,0xc7,0xe4,0xe7,0xc3,0xb4,0xcd,0xa8,0x3, 0x65,0xe,0x39,0x73,0x7e,0x3b,0x95,0xc9,0x4b,0x51,0xfe,0xe,0x97,0xbf,0xb8,0xc2, 0xe2,0xe9,0x69,0x9f,0xd,0x22,0x92,0xb9,0x3c,0x8f,0x8e,0xb3,0xdf,0xe7,0xc6,0x74, 0x76,0x8b,0xdf,0xe6,0x3f,0x33,0x92,0x6d,0xb5,0x60,0x4f,0xe,0x3e,0x11,0x85,0x60, 0x94,0xa1,0xb9,0x6,0x7,0x50,0xd5,0xd0,0x78,0x94,0x81,0x40,0x64,0x76,0x9b,0x23, 0xdd,0x44,0x7d,0x93,0x38,0xae,0x12,0x10,0x11,0x87,0xc7,0x2e,0xbf,0x59,0x96,0x87, 0x3d,0xd9,0xf0,0xb3,0x61,0x30,0xc1,0xf1,0xb9,0x6,0x4f,0x20,0x1c,0xe3,0xd8,0xbf, 0x86,0x52,0x65,0x31,0x85,0x77,0x2e,0x10,0x5e,0xf1,0x2e,0x3d,0x3b,0x9b,0x78,0xc1, 0x3b,0x49,0xa5,0x45,0x44,0xa,0x4a,0x6c,0x3c,0x59,0x99,0xcf,0x3d,0x7b,0x56,0xe3, 0xae,0x33,0x38,0x46,0xff,0xb,0x4c,0x82,0x79,0x7a,0x1,0xab,0x6b,0x64,0xe8,0xe4, 0x20,0x2f,0xf7,0x4,0xf8,0x9d,0xaa,0xfa,0x1,0x2c,0xf9,0x59,0xb4,0xbd,0xba,0x91, 0x82,0x6a,0xf,0x66,0x23,0x47,0xab,0x5c,0x10,0x83,0x19,0x4d,0xe4,0x7a,0xb0,0x8, 0xb7,0xad,0x72,0xa5,0xca,0xce,0x8d,0x10,0xe8,0x1e,0xd3,0xc7,0x53,0x88,0x3a,0xb3, 0xf0,0xcf,0x16,0x1c,0x20,0xdb,0xc,0x56,0x33,0x2e,0x11,0xb1,0xce,0x66,0x33,0x1d, 0x22,0x62,0xcb,0x36,0x53,0x94,0x5c,0x1d,0xa3,0xa,0xc1,0x8,0x81,0xe9,0xb6,0xa6, 0xf1,0x8,0x1d,0x77,0x7d,0x44,0xef,0xcf,0xff,0x81,0x77,0xff,0x97,0x44,0x3e,0xee, 0x81,0x91,0x50,0xaa,0xd1,0xde,0xb5,0xb8,0x4b,0x6c,0xec,0x9f,0x2b,0x81,0x12,0x1b, 0x2f,0x3d,0xbd,0xf6,0xda,0x3d,0x1,0xe2,0x25,0xbb,0xcc,0x41,0x61,0xa1,0x55,0x52, 0x8e,0xb2,0x4c,0x8d,0x62,0x60,0xa1,0xc5,0x44,0x59,0xb1,0x95,0x35,0xb7,0x14,0xb2, 0xe3,0x40,0x35,0x85,0xc9,0x86,0xb5,0x47,0xf0,0xfe,0xb5,0x9b,0x7,0xc7,0xc2,0xfa, 0x7e,0xba,0xe0,0xf6,0x4c,0xb9,0x7b,0x53,0x9,0xaf,0x1c,0xa8,0xc6,0x35,0x5d,0x17, 0x8e,0x41,0xed,0x11,0x86,0x3e,0x1d,0x64,0x6f,0x7f,0x50,0x9f,0x85,0x59,0xee,0x3, 0x65,0xe,0x39,0x7c,0x68,0xb,0xd5,0xe5,0x49,0xbd,0x61,0x34,0x4,0x3b,0x9a,0xf0, 0x9e,0x1e,0xe4,0x83,0xce,0x31,0x7e,0x6c,0x50,0x8a,0xad,0xa5,0x36,0x5e,0x5c,0x53, 0x48,0xcd,0xeb,0xb7,0xa7,0x96,0xe2,0x64,0xc4,0x14,0xb6,0x7f,0x8c,0xb7,0xb9,0x8f, 0xe7,0x7a,0x3,0xfa,0x6b,0x43,0x2,0x22,0xb2,0xe5,0xe1,0x72,0xde,0x7c,0x61,0xfd, 0xcc,0x4e,0x58,0xdf,0x41,0xf8,0x89,0x4f,0x19,0x8,0x46,0xe2,0xcd,0x8,0xe2,0x9b, 0xd4,0x6a,0xa6,0xe0,0xe9,0xb5,0xc6,0xcd,0x68,0x7a,0x63,0x6b,0xf7,0xc1,0x5d,0x1f, 0xd1,0xdc,0xe9,0xd7,0x8d,0x86,0x4,0x4a,0x6c,0xd2,0xd2,0x58,0xc3,0x6d,0xe5,0x86, 0x8d,0x38,0x8e,0x44,0x3b,0x86,0xf8,0x49,0xc9,0x9e,0x65,0x1b,0xef,0x6c,0xc2,0x77, 0xf8,0x12,0xdd,0x39,0x16,0xec,0x45,0x39,0x64,0xad,0x73,0x93,0xdd,0xd2,0x7,0x27, 0x6,0xb8,0x5d,0x55,0xcf,0xcc,0xe8,0xe2,0x22,0xf2,0xcd,0xba,0x9b,0x58,0x92,0x2e, 0x38,0xc4,0x3,0x56,0xb9,0xd3,0xdb,0x3c,0xd4,0x8c,0xef,0xf0,0x25,0x9e,0xef,0x9, 0xe8,0x93,0x53,0xbe,0x73,0x5b,0xfa,0x58,0x9,0x14,0xaa,0xea,0x19,0x30,0xd8,0x3, 0x25,0x76,0x39,0x73,0xa2,0x96,0x4a,0x8f,0x2d,0x3e,0x1f,0x9,0xc1,0x9f,0xda,0x19, 0xdf,0x56,0x86,0xb5,0xe2,0x3a,0xa4,0x92,0x11,0x53,0x28,0x7d,0x93,0xce,0x9e,0x80, 0x96,0xa5,0xb3,0x4b,0xe9,0x5,0x22,0x52,0x64,0x86,0x42,0xab,0x39,0xbe,0x63,0x9f, 0x69,0x25,0xb0,0xf2,0x5d,0xce,0x3f,0x75,0x9a,0x47,0xb7,0x36,0xd0,0xf8,0x9d,0x6, 0xfa,0x7b,0x83,0xc6,0x8e,0xc2,0xb1,0xf8,0x85,0xf5,0xaa,0x63,0x1,0x67,0x16,0x99, 0x22,0x92,0xb6,0xb2,0xa6,0x2c,0x81,0xaa,0xf6,0x67,0x98,0xa4,0xb6,0xea,0x7d,0xe, 0x0,0x91,0x2b,0x21,0x9e,0x19,0x9a,0xe0,0x39,0x55,0x8d,0x2,0xaf,0x65,0x9a,0xe5, 0xc1,0xf,0xbb,0x78,0xe9,0xa1,0x65,0xd7,0xa,0xd7,0xc3,0x9f,0xe0,0x6d,0xea,0xc5, 0x3f,0x11,0x65,0x24,0xc7,0x82,0xbb,0xe5,0x6e,0x8a,0xf3,0xa6,0x4e,0xc0,0xea,0x2, 0x2c,0xed,0x3e,0x96,0x3,0xad,0xb3,0x32,0x98,0xe5,0x39,0xb6,0x14,0xb0,0x1b,0xc8, 0xd7,0xfe,0xb4,0x12,0xaf,0xee,0x8a,0x3f,0xc5,0x5a,0xeb,0x50,0x8f,0x8d,0x43,0x9, 0x7d,0xa6,0x99,0xd,0xab,0x5c,0xf4,0xf9,0x1f,0x88,0xeb,0xf7,0x6d,0x20,0x94,0x65, 0x66,0xe7,0xbc,0x9f,0x66,0xaa,0x7a,0x4e,0x55,0xc7,0xc,0x54,0x1d,0x6d,0x3e,0x26, 0x13,0x93,0x5f,0x9e,0xa4,0xbf,0x3b,0xc0,0x2f,0x12,0xf3,0xc9,0x88,0x36,0x9f,0x1f, 0xe5,0xfe,0xea,0x43,0xc,0x9c,0x1c,0x80,0xd7,0xff,0xcd,0xa8,0xcd,0x92,0xda,0x5d, 0xe7,0x94,0x81,0x74,0x63,0x69,0x2e,0x97,0x75,0x17,0x7a,0x61,0x3b,0x5a,0x6a,0xe7, 0xef,0x46,0x36,0xf9,0x59,0xdc,0xe3,0xb1,0x71,0x14,0x28,0xbf,0x9e,0xbf,0xb4,0x2f, 0x23,0x23,0x2c,0x74,0xc8,0x9f,0x33,0x4c,0xac,0xb,0x84,0xc9,0xeb,0x1f,0x67,0x9b, 0xaa,0xce,0xfb,0xae,0x90,0x8c,0xff,0x2,0xb5,0x5d,0x16,0xc8,0x29,0xe8,0x39,0xee, 0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82, }; static const unsigned char qt_resource_name[] = { // icons 0x0,0x5, 0x0,0x6f,0xa6,0x53, 0x0,0x69, 0x0,0x63,0x0,0x6f,0x0,0x6e,0x0,0x73, // appicon.png 0x0,0xb, 0xa,0xb1,0xba,0xa7, 0x0,0x61, 0x0,0x70,0x0,0x70,0x0,0x69,0x0,0x63,0x0,0x6f,0x0,0x6e,0x0,0x2e,0x0,0x70,0x0,0x6e,0x0,0x67, }; static const unsigned char qt_resource_struct[] = { // : 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1, // :/icons 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x2, // :/icons/appicon.png 0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, }; QT_BEGIN_NAMESPACE extern bool qRegisterResourceData (int, const unsigned char *, const unsigned char *, const unsigned char *); extern bool qUnregisterResourceData (int, const unsigned char *, const unsigned char *, const unsigned char *); QT_END_NAMESPACE int QT_MANGLE_NAMESPACE(qInitResources)() { QT_PREPEND_NAMESPACE(qRegisterResourceData) (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); return 1; } Q_CONSTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qInitResources)) int QT_MANGLE_NAMESPACE(qCleanupResources)() { QT_PREPEND_NAMESPACE(qUnregisterResourceData) (0x01, qt_resource_struct, qt_resource_name, qt_resource_data); return 1; } Q_DESTRUCTOR_FUNCTION(QT_MANGLE_NAMESPACE(qCleanupResources)) pfstools-1.8.5/src/pfsview/pfsview.10000664000175000017500000000571410410032521014333 00000000000000.TH "pfsview" 1 .SH NAME pfsview \- Viewer for high-dynamic range images in pfs format .SH SYNOPSIS .B pfsview [--window_min ] [--window_max ] .SH DESCRIPTION pfsview is a QT application for viewing high-dynamic range images. It expects pfs stream on the standard input and displays the frames in that stream one by one. \fBpfsv\fR script can be more convienent to use if hdr images are to be displayed without any prior processing. .SH DYNAMIC RANGE WINDOW To show high-dynamic range data on a low-dynamic range monitor, pfsview uses concept of a dynamic range window. The dynamic range window is the highest and lowest value that should be mapped to black and white pixel. Values above or below the window are clipped (see clipping methods below). The dynamic range window is displayed in pfsview as a blue area on the dynamic range scale (second toolbox from the top). The window can be moved, shrunk and expended using a mouse or a keyboard. .SH CLIPPING METHODS Currently, two clipping methods are available (see View menu): .TP Simple clipping The values above and below the dynamic range window are displayed as black or white. .TP Color-coded clipping The values above the dynamic range window are displayed as yellow and below the window as green. This is helpful to see which parts of the image do not fit into the selected dynamic range. .TP Keep brightness and hue This method tries to preserve brightness and hue while sacrificing color saturation when the colors exceed the RGB color gamut. Colors are desaturated in the RGB color space towards the neutral color (D65) of the corresponding luminance. .SH MAPPING METHODS High-dynamic range data are usually better visualized using non-linear scale, for example a logarithmic or a power function. pfsview offers several such scales, shown in \fIView\fR menu. Gray-scale values for each mapping method are computed by the formulas: \fBLINEAR\fR: y = (x-min)/(max-min) \fBGAMMA\fR: y = [ (x-min)/(max-min) ]^gamma \fBLOGARITHMIC\fR: y = (log10(x)-log10(min))/(log10(max)-log10(min)) where \fIy\fR is the gray-scale value after mapping, \fIx\fR is an input HDR value, \fImin\fR and \fImax\fR are lower and upper bounds of the dynamic range window. .SH OPTIONS .TP --window_min Lower bound of the values that should be displayed or minimum value of the dynamic range window. The value should be given in log_10 units, for example -1 if the lower bound should be 0.1 (10^-1). .TP --window_max Upper bound of the values that should be displayed or minimum value of the dynamic range window. The value should be given in log_10 units, for example -1 if the upper bound should be 0.1 (10^-1). .SH EXAMPLES .TP pfsin memorial.hdr | pfsview See the memorial image. .TP pfsv memorial.hdr The same as above, but using the utility script 'pv'. .SH "SEE ALSO" .BR pfsv (1) .BR pfsin (1) .SH BUGS Zomming in may sometimes show artifacts. Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/pfsview/pfsv0000644000175000017500000000043011652214412013465 00000000000000#!/bin/bash ############################################################ # View HDR images ############################################################ if [ -z "$1" ]; then echo "View HDR images"; echo "Usage: pfsv [...]" exit 0; fi pfsin "$@" | pfsview pfstools-1.8.5/src/pfsview/luminancerange_widget.cpp0000644000175000017500000002172411542343011017630 00000000000000/** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: luminancerange_widget.cpp,v 1.5 2011/03/22 21:57:01 rafm Exp $ */ #include #include #include #include #include #include #include #include //#include #include "luminancerange_widget.h" #include "histogram.h" static const float exposureStep = 0.25f; static const float shrinkStep = 0.1f; static const float minWindowSize = 0.1f; static const int dragZoneMargin = 5; // How many pizels from the range window border should draging be activated #define min(x,y) ( (x)<(y) ? (x) : (y) ) #define max(x,y) ( (x)>(y) ? (x) : (y) ) LuminanceRangeWidget::LuminanceRangeWidget( QWidget *parent ): QFrame( parent ), histogram( NULL ), histogramImage( NULL ), showVP( false ) { setFrameShape( QFrame::Box ); setMouseTracking( true ); minValue = -6; maxValue = 8; windowMin = 0; windowMax = 2; mouseDragStart = -1; dragShift = 0; } LuminanceRangeWidget::~LuminanceRangeWidget() { delete histogram; } QSize LuminanceRangeWidget::sizeHint () const { return QSize( 300, 22 ); } #define getWindowX( x ) ((int)((x-minValue) / (maxValue-minValue) * (float)fRect.width()) + fRect.left()) void LuminanceRangeWidget::paintEvent( QPaintEvent *pe ) { { QPainter p( this ); QRect fRect = getPaintRect(); if( fRect.width() < 50 ) // Does not make sense to paint anything return; // Paint range window { int x1, x2; x1 = getWindowX( draggedMin() ); x2 = getWindowX( draggedMax() ); QColor selectionColor = mouseDragStart == DRAGNOTSTARTED ? QColor( 0, 100, 255 ) : QColor( 0, 150, 255 ); p.fillRect( x1, fRect.top(), x2-x1, fRect.height(), QBrush( selectionColor ) ); } // Paint histogram if( histogramImage != NULL ) { if( histogram == NULL || histogram->getBins() != fRect.width() ) { delete histogram; // Build histogram from at least 5000 pixels int accuracy = histogramImage->getRows()*histogramImage->getCols()/5000; if( accuracy < 1 ) accuracy = 1; histogram = new Histogram( fRect.width(), accuracy ); histogram->computeLog( histogramImage, minValue, maxValue ); } float maxP = histogram->getMaxP(); int i = 0; p.setPen( Qt::green ); for( int x = fRect.left(); i < histogram->getBins(); x++, i++ ) { if( histogram->getP(i) > 0 ) { int barSize = (int)((float)fRect.height() * histogram->getP(i)/maxP); p.drawLine( x, fRect.bottom(), x, fRect.bottom() - barSize ); } } } // Paint scale QFont labelFont( "SansSerif", 8 ); p.setFont( labelFont ); p.setPen( Qt::black ); QRect textBounding = p.boundingRect( fRect, Qt::AlignHCenter|Qt::AlignBottom, "-8" ); for( float x = ceil( minValue ); x <= floor( maxValue ); x++ ) { int rx = getWindowX(x); p.drawLine( rx, fRect.top(), rx, textBounding.top() ); char str[10]; sprintf( str, "%g", x ); p.drawText( rx-20, textBounding.top(), 40, textBounding.height(), Qt::AlignHCenter|Qt::AlignBottom, str ); } // Paint value pointer if( showVP ) { int x = getWindowX( valuePointer ); if( fRect.contains( x, fRect.y() ) ) { p.setPen( Qt::yellow ); p.drawLine( x, fRect.top(), x, fRect.bottom() ); } } } QFrame::paintEvent(pe); } float LuminanceRangeWidget::draggedMin() { if( mouseDragStart == DRAGNOTSTARTED ) return windowMin; if( dragMode == DRAG_MIN ) { float draggedPos = windowMin+dragShift; return min( draggedPos, windowMax - minWindowSize ); } else if( dragMode == DRAG_MINMAX ) { return windowMin+dragShift; } return windowMin; } float LuminanceRangeWidget::draggedMax() { if( mouseDragStart == DRAGNOTSTARTED ) return windowMax; if( dragMode == DRAG_MAX ) { float draggedPos = windowMax+dragShift; return max( draggedPos, windowMin + minWindowSize ); } else if( dragMode == DRAG_MINMAX ) { return windowMax+dragShift; } return windowMax; } void LuminanceRangeWidget::mousePressEvent ( QMouseEvent * me ) { if( dragMode == DRAG_NO ) return; mouseDragStart = me->x(); dragShift = 0; update(); } void LuminanceRangeWidget::mouseReleaseEvent ( QMouseEvent * me ) { float newWindowMin = draggedMin(); float newWindowMax = draggedMax(); mouseDragStart = DRAGNOTSTARTED; windowMin = newWindowMin; windowMax = newWindowMax; dragShift = 0; update(); updateRangeWindow(); } void LuminanceRangeWidget::mouseMoveEvent( QMouseEvent *me ) { // printf( "MouseButton: %d\n", me->button() ); if( (me->buttons() & Qt::LeftButton) != 0 && dragMode != DRAG_NO ) { if( mouseDragStart != DRAGNOTSTARTED ) { QRect fRect = getPaintRect(); int windowCordShift = me->x() - mouseDragStart; dragShift = (float)windowCordShift / (float)fRect.width() * (maxValue - minValue); update(); } } else { QRect fRect = rect(); int winBegPos = getWindowX( windowMin ); int winEndPos = getWindowX( windowMax ); if( abs( me->x() - winBegPos ) < dragZoneMargin ) { setCursor( QCursor( Qt::SplitHCursor ) ); dragMode = DRAG_MIN; } else if( abs( me->x() - winEndPos ) < dragZoneMargin ) { setCursor( QCursor( Qt::SplitHCursor ) ); dragMode = DRAG_MAX; } else if( me->x() > winBegPos && me->x() < winEndPos ) { setCursor( QCursor( Qt::SizeHorCursor ) ); dragMode = DRAG_MINMAX; } else { unsetCursor(); dragMode = DRAG_NO; } } } void LuminanceRangeWidget::decreaseExposure() { windowMin -= exposureStep; windowMax -= exposureStep; update(); updateRangeWindow(); } void LuminanceRangeWidget::increaseExposure() { windowMin += exposureStep; windowMax += exposureStep; update(); updateRangeWindow(); } void LuminanceRangeWidget::extendRange() { if( windowMax - windowMin > 10 ) return; windowMin -= shrinkStep; windowMax += shrinkStep; update(); updateRangeWindow(); } void LuminanceRangeWidget::shrinkRange() { if( windowMax - windowMin < 0.19 ) return; windowMin += shrinkStep; windowMax -= shrinkStep; update(); updateRangeWindow(); } void LuminanceRangeWidget::setHistogramImage( const pfs::Array2D *image ) { histogramImage = image; delete histogram; histogram = NULL; update(); } void LuminanceRangeWidget::fitToDynamicRange() { if( histogramImage != NULL ) { float min = 99999999; float max = -99999999; int size = histogramImage->getRows()*histogramImage->getCols(); for( int i = 0; i < size; i++ ) { float v = (*histogramImage)(i); if( v > max ) max = v; else if( v < min ) min = v; } if( min <= 0.000001 ) min = 0.000001; // If data contains negative values windowMin = log10( min ); windowMax = log10( max ); if( windowMax - windowMin < 0.5 ) { // Window too small float m = (windowMin + windowMax)/2.f; windowMax = m + 0.25; windowMin = m - 0.25; } update(); updateRangeWindow(); } } void LuminanceRangeWidget::lowDynamicRange() { windowMin = -2.0f; windowMax = 0.0f; update(); updateRangeWindow(); } QRect LuminanceRangeWidget::getPaintRect() const { QRect fRect = frameRect(); fRect.setLeft( fRect.left()+1 ); fRect.setTop( fRect.top()+1 ); fRect.setBottom( fRect.bottom()-1 ); fRect.setRight( fRect.right()-1 ); return fRect; } void LuminanceRangeWidget::showValuePointer( float value ) { QRect fRect = getPaintRect(); int oldx = showVP ? getWindowX( valuePointer ) : -1; valuePointer = value; showVP = true; int newx = getWindowX( valuePointer ); if( oldx == -1 ) oldx = newx; QRect updateRect( min( oldx, newx ), fRect.top(), max( oldx, newx ) - min(oldx, newx )+1, fRect.height() ); update( updateRect ); } void LuminanceRangeWidget::setRangeWindowMinMax( float min, float max ) { assert( min < max ); windowMin = min; windowMax = max; update(); updateRangeWindow(); } void LuminanceRangeWidget::hideValuePointer() { showVP = false; update(); } pfstools-1.8.5/src/pfsview/main.h0000644000175000017500000000530011541674054013673 00000000000000/** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: main.h,v 1.11 2011/03/21 16:09:16 rafm Exp $ */ #ifndef MAIN_H #define MAIN_H #include #include #include #include #include #include #include #include #include "pfsview_widget.h" #define MAX_FRAMES_IN_MEMORY 5 class LuminanceRangeWidget; class QComboBox; //class pfs::Frame; enum ColorCoord { CC_RGB = 0, CC_XYZ, CC_Yupvp, CC_Yxy, CC_COUNT }; class PFSViewMainWin : public QMainWindow { Q_OBJECT public: PFSViewMainWin( float window_min, float window_max ); public slots: // void changeClippingMethod( int clippingMethod ); void updatePointerValue(); void updateRangeWindow(); void updateChannelSelection(); void setChannelSelection( int selectedChannel ); void updateZoomValue(); void gotoNextFrame(); void gotoPreviousFrame(); void saveImage(); void copyImage(); void setLumMappingMethod( int method ); void setLumMappingMethod( QAction *action ); void setColorCoord( QAction *action ); void showAboutdialog(); void updateViewSize(); private: void setFrame( pfs::Frame *frame ); QAction *mappingAct[6]; QLabel *pointerPosAndVal, *zoomValue, *exposureValue; PFSViewWidget *pfsView; LuminanceRangeWidget *lumRange; QComboBox *channelSelection; QComboBox *mappingMethodCB; ColorCoord colorCoord; bool readNextFrame(); void updateMenuEnable( ); std::list frameList; std::list::iterator currentFrame; public: PFSViewWidget *getPFSViewWidget() { return pfsView; } }; #endif pfstools-1.8.5/src/pfsview/pfsv.in0000644000175000017500000000043211565440453014105 00000000000000#!@BASH_PATH@ ############################################################ # View HDR images ############################################################ if [ -z "$1" ]; then echo "View HDR images"; echo "Usage: pfsv [...]" exit 0; fi pfsin "$@" | pfsview pfstools-1.8.5/src/pfsview/icons/0002755000175000017500000000000011652214416013770 500000000000000pfstools-1.8.5/src/pfsview/icons/appicon.svg0000644000175000017500000001032311541660301016052 00000000000000 image/svg+xml pfstools-1.8.5/src/pfsview/icons/appicon.png0000644000175000017500000000325511541660234016052 00000000000000‰PNG  IHDR szzôsBIT|dˆ pHYsww@qšÑtEXtSoftwarewww.inkscape.org›î<*IDATX…¥—lÔõÇ_ÏÝõÇõîh¯×^«½²b@ -ŒHçh6ŠX†ÕuËHEŒÌi62³,Y º)Ë–e1Q—ùÔg4ÆŠA‡…NF릥EY¥¥¥¿ïh¯wmï׳?®wí·G»½“ÏŸçy¾Ïóþ>ŸÏçy>QUþˆÈš"+ ö |¡('»Æô‡ór ªiPî±q4/“Z#ýW4]ØŽê.´ÒÉ¥ëù›>Léȹ²e÷úbšë7qDz<^´gÈ·§ýýòJ'K9âóf)˜OÒ‹à¿ÿfÜê†ÆŠnÎãl‹|=¡÷ØøÃoo¥(1/w’,šîGDì"²tÞBQNÒ‡ÀžG·R¼$—÷ÊÒºÜ)kRµ"ÿš}…“Ü +“› ­ò³Å øbI.Ç’É_µI· E$£ÂIgÛ÷¸!!€ÅÔ{ƒ°«™þ6­}AÞr[y|w%Å?©Ä6‚Õï1Ð5ÆJUíO|cI—U {ì2S0I\fMóÅ 9ðÁµûØtð"ë©Àš›9E< 1e09x ¹ZUuÀc—=[JÉMŸ+*œPáÄš,{ì8ýA™nk™ ¾b›}ß(†L,É•É`„±Í¥xömÀid" Ÿ ƒ*|Õ9i2sÖ-ýœ‹Ä´ÙÀB;|e#ùI¡üapdÌtVßAxÏ? F2Áq“ª²Ì=u îï.bÆWÏ·ã»`¯9QUn´Éë‹ÙýÖ·È7Ï’îÑì8†÷ÔéãGª:žâHÄæ±ñòê6¿q®™×tm^¨i ±Ó¯Õ†Šräѯ𫃛)È4Øá÷ÁÛØÃþ4¦‡#S¶U{xµ~®dùÖ†>æµ¾qNEb\º€¾”cèÊ–”;yöo[q[’HÔw~ì8owúõ¾tÁ¸iìÿ}÷Õ%-Ç•œ„?‘/¯0zÖÇäçôͨe9s~;•ÉKQþ—¿¸ÂâéiŸ "’¹<޳ßçÆtv‹ßæ?3’mµ`O>…`”¡¹PÕÐx”@dv›#ÝD}“8®‡Ç.¿Y–‡=Ùð³a0Áñ¹O ãØ¿†Re1…w.^ñ.=;›xÁ;I¥ED Jlî‘PªÑÞµ¸KlìŸ+/=½öÚ=â%»ÌAa¡UR޲Lb`¡ÅDY±•5·²ã@5…ɆµGðþµ›ÇÂú~ºàöL¹{S ¯¨Æ5]ŽAí†>doPŸ…Yîe9|h ÕåI½a4;šðžäƒÎ1~lPŠ­¥6^\SHÍë·§–âdĶŒ·¹çzúkC"²åárÞ|aýÌNXßAø‰OFâÍâ›Ôj¦à鵯Íhzck÷Á]ÑÜé׆JlÒÒXÃmå†8ŽD;†øIÉžeïlÂwøÝ9ìE9d­s“ÝÒ'¸]UÏÌèâ"òͺ›X’.8ÄV¹ÓÛ<ÔŒïð%žï è“S¾s[úX ªê0Ø%v9s¢–J-> ÁŸÚßV†µâ:¤’S(}“Ξ€–¥³Ké"Rd†B«9¾cŸi%°ò]Î?ušG·6Ðøú{ƒÆŽÂ±ø…õªcg™"’¶²¦,ªög˜¤¶ê}‘+!žšà9U¯ešåÁ»xé¡e× ×ßàmêÅ?e$Ç‚»ånŠó¦NÀê,í>–­³2˜å9¶°È×þ´¯îŠ?ÅZëPC }¦™ «\ôùˆë÷m ”ef缟fªzNUÇ Tm>&“_ž¤¿;À/óɈ6ŸåþêC œ€×ÿͨ͒Ú]ç”tci.—uza;ZjçïF6ùYÜã±q(¿ž¿´/##,tÈŸ3L¬ „Éëg›ªÎû®Œÿµ]È)è9îIEND®B`‚pfstools-1.8.5/src/pfsview/Makefile.am0000644000175000017500000000235411541660461014635 00000000000000bin_PROGRAMS = pfsview bin_SCRIPTS = pfsv man_MANS = pfsview.1 pfsv.1 EXTRA_DIST = $(bin_SCRIPTS) $(man_MANS) mac_os/Info.plist mac_os/PkgInfo mac_os/pfsview_icon_mac.icns icons/appicon.png icons/appicon.svg pfsview.qrc pfsview_MOC = main.moc.cpp pfsview_widget.moc.cpp luminancerange_widget.moc.cpp pfsview_SOURCES = main.cpp main.h \ pfsview_widget.cpp pfsview_widget.h \ luminancerange_widget.cpp luminancerange_widget.h \ histogram.cpp histogram.h resources.cpp nodist_pfsview_SOURCES = $(pfsview_MOC) pfsview_LDADD = $(QT_LIBS) BUILT_SOURCES = $(pfsview_MOC) LIBS += ../pfs/libpfs-1.2.la #LIBS = INCLUDES = $(QT_CFLAGS) -I$(top_srcdir)/src/pfs/ CLEANFILES = $(BUILT_SOURCES) %.moc.cpp: %.h $(MOC) -o $@ $< resources.cpp: pfsview.qrc rcc -o $@ $< if MAC_OS install-data-hook: install -d "/Applications/pfsview.app/Contents" install -d "/Applications/pfsview.app/Contents/MacOS" install -d "/Applications/pfsview.app/Contents/Resources" install "mac_os/PkgInfo" "/Applications/pfsview.app/Contents" install "mac_os/Info.plist" "/Applications/pfsview.app/Contents" install "mac_os/pfsview_icon_mac.icns" "/Applications/pfsview.app/Contents/Resources" mv $(DESTDIR)$(bindir)/pfsview /Applications/pfsview.app/Contents/MacOS/ endif pfstools-1.8.5/src/pfsview/Makefile.in0000644000175000017500000006041511652214376014653 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = pfsview$(EXEEXT) subdir = src/pfsview DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/pfsv.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = pfsv CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am_pfsview_OBJECTS = main.$(OBJEXT) pfsview_widget.$(OBJEXT) \ luminancerange_widget.$(OBJEXT) histogram.$(OBJEXT) \ resources.$(OBJEXT) am__objects_1 = main.moc.$(OBJEXT) pfsview_widget.moc.$(OBJEXT) \ luminancerange_widget.moc.$(OBJEXT) nodist_pfsview_OBJECTS = $(am__objects_1) pfsview_OBJECTS = $(am_pfsview_OBJECTS) $(nodist_pfsview_OBJECTS) am__DEPENDENCIES_1 = pfsview_DEPENDENCIES = $(am__DEPENDENCIES_1) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' SCRIPTS = $(bin_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(pfsview_SOURCES) $(nodist_pfsview_SOURCES) DIST_SOURCES = $(pfsview_SOURCES) man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ ../pfs/libpfs-1.2.la LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ bin_SCRIPTS = pfsv man_MANS = pfsview.1 pfsv.1 EXTRA_DIST = $(bin_SCRIPTS) $(man_MANS) mac_os/Info.plist mac_os/PkgInfo mac_os/pfsview_icon_mac.icns icons/appicon.png icons/appicon.svg pfsview.qrc pfsview_MOC = main.moc.cpp pfsview_widget.moc.cpp luminancerange_widget.moc.cpp pfsview_SOURCES = main.cpp main.h \ pfsview_widget.cpp pfsview_widget.h \ luminancerange_widget.cpp luminancerange_widget.h \ histogram.cpp histogram.h resources.cpp nodist_pfsview_SOURCES = $(pfsview_MOC) pfsview_LDADD = $(QT_LIBS) BUILT_SOURCES = $(pfsview_MOC) #LIBS = INCLUDES = $(QT_CFLAGS) -I$(top_srcdir)/src/pfs/ CLEANFILES = $(BUILT_SOURCES) all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/pfsview/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/pfsview/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): pfsv: $(top_builddir)/config.status $(srcdir)/pfsv.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pfsview$(EXEEXT): $(pfsview_OBJECTS) $(pfsview_DEPENDENCIES) @rm -f pfsview$(EXEEXT) $(CXXLINK) $(pfsview_OBJECTS) $(pfsview_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/histogram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/luminancerange_widget.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/luminancerange_widget.moc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.moc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsview_widget.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsview_widget.moc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resources.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) @MAC_OS_FALSE@install-data-hook: clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-man uninstall-man: uninstall-man1 .MAKE: all check install install-am install-data-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-binSCRIPTS install-data \ install-data-am install-data-hook install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-man \ uninstall-man1 %.moc.cpp: %.h $(MOC) -o $@ $< resources.cpp: pfsview.qrc rcc -o $@ $< @MAC_OS_TRUE@install-data-hook: @MAC_OS_TRUE@ install -d "/Applications/pfsview.app/Contents" @MAC_OS_TRUE@ install -d "/Applications/pfsview.app/Contents/MacOS" @MAC_OS_TRUE@ install -d "/Applications/pfsview.app/Contents/Resources" @MAC_OS_TRUE@ install "mac_os/PkgInfo" "/Applications/pfsview.app/Contents" @MAC_OS_TRUE@ install "mac_os/Info.plist" "/Applications/pfsview.app/Contents" @MAC_OS_TRUE@ install "mac_os/pfsview_icon_mac.icns" "/Applications/pfsview.app/Contents/Resources" @MAC_OS_TRUE@ mv $(DESTDIR)$(bindir)/pfsview /Applications/pfsview.app/Contents/MacOS/ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/src/pfsview/pfsview_widget.h0000644000175000017500000000740611557013055016001 00000000000000#ifndef PFSVIEW_WIDGET_H #define PFSVIEW_WIDGET_H /** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsview_widget.h,v 1.10 2011/04/30 14:01:17 rafm Exp $ */ #include #include #include #include #include #include #include namespace pfs { class DOMIO; class Frame; } enum RGBClippingMethod { CLIP_SIMPLE = 0, CLIP_COLORCODED, CLIP_KEEP_BRI_HUE, CLIP_COUNT }; enum LumMappingMethod { MAP_LINEAR, MAP_GAMMA1_4, MAP_GAMMA1_8, MAP_GAMMA2_2, MAP_GAMMA2_6, MAP_LOGARITHMIC }; enum InfNaNTreatment { INFNAN_HIDE=0, INFNAN_MARK_AS_RED }; enum NegativeTreatment { NEGATIVE_BLACK=0, NEGATIVE_MARK_AS_RED, NEGATIVE_GREEN_SCALE, NEGATIVE_ABSOLUTE, NEGATIVE_COUNT }; struct PointerValue { int x, y; float value[3]; int valuesUsed; bool valid; }; class PFSViewWidgetArea : public QScrollArea { Q_OBJECT public: PFSViewWidgetArea( QWidget *parent=0 ); QSize sizeHint() const; }; class PFSViewWidget : public QWidget { Q_OBJECT public: PFSViewWidget( QWidget *parent=0 ); ~PFSViewWidget(); public slots: void zoomIn(); void zoomOut(); void zoomOriginal(); void setRGBClippingMethod( QAction *action ); void setInfNaNTreatment( QAction *action ); void setNegativeTreatment( QAction *action ); void setLumMappingMethod( int method ); signals: void updatePointerValue(); protected: // void paintEvent( QPaintEvent * ); void updateZoom(); void updateMapping(); void postUpdateMapping(); void mouseMoveEvent( QMouseEvent *mouseEvent ); void setPointer( int x = -1, int y = -1 ); void leaveEvent( QEvent * ); void paintEvent( QPaintEvent *event ); private: pfs::Frame *pfsFrame; const char *visibleChannel; QByteArray visibleChannelName; bool colorChannelsPresent; bool updateMappingRequested; QImage *image; float minValue; float maxValue; RGBClippingMethod clippingMethod; InfNaNTreatment infNaNTreatment; NegativeTreatment negativeTreatment; LumMappingMethod mappingMethod; float zoom; pfs::Array2D *workArea[3]; PointerValue pointerValue; QRegion selection; public: QSize sizeHint() const; const PointerValue &getPointerValue(); void setRangeWindow( float min, float max ); const pfs::Array2D *getPrimaryChannel(); const QList getChannels(); void setVisibleChannel( const char *channelName ); const char *getVisibleChannel(); bool hasColorChannels( pfs::Frame *frame = NULL ); float getZoom() const { return zoom; } void setFrame( pfs::Frame *frame ); QImage *getDisplayedImage() { assert( image != NULL ); return image; } }; class PFSViewException { }; extern const char* COLOR_CHANNELS; #endif pfstools-1.8.5/src/pfsview/mac_os/0002755000175000017500000000000011652214415014115 500000000000000pfstools-1.8.5/src/pfsview/mac_os/PkgInfo0000664000175000017500000000001111210622377015305 00000000000000APPL???? pfstools-1.8.5/src/pfsview/mac_os/pfsview_icon_mac.icns0000664000175000017500000045315111210622377020237 00000000000000icnsViis32žÿþÿþþÿþÿþÿþþýÿÿþþÿÿþþÿþýÿýÿàõêëÿþÿóãúâû€ÿæDŒ‡ÚêÿÉb±}¼¯øäÑ¤Çæ·x›ïÁÁÔí˜~ÕM©â·z³ü9lÏç€vùª¯µÁÃoåsºÎnÞ˜ÓÕ‹æšMí­ÿ­–¿¡ìcúúc×£­ áwšç­@Ä·sv¤êˆÿ‹ÏÕ·ÝÃÁk“Ñ×Ì䲤ÿ¦s£Á—Œÿé¨s±¢l”ÿÿñ÷º±Ï—ÿúÿé•ÝŒ¾ÿÿþýþ‚ÿýýÿþƒÿþýþýÿýþüýŽÿÿþÿþþÿþÿþÿþþýÿÿþþÿÿþþÿþýÿýÿàõêëÿþÿôèúáú€ÿæDŒ‡ÚêÿÂ;¦0´¶öäÑ¤Çæ·x›ñ³BV`E*ÊM©â·z³û=/Z`=9i=®µÁÃoås¹ÓXLaâã[VgX!‘Žÿªˆûï7x€ÿ w=òÿÍÖ[.d_‚ÿ^iXAw¨ÿ² ÿúùúÿµýû³FW7^úúù€ÿ vÿÿO© ÿ’; …ÿ 0ÿ„c‚ÿ ûÿúú£©üÿˆvÿ ùúùùŽ„úÿ{|„ÿùƒÿú‹ÿùÿÿù†ÿûüúÿÿúù…ÿùúùÿÿùùÿÿŸÿÿÿŸÿùùÿÿùúù…ÿùùÿÿ€ù†ÿùÿÿù‹ÿùƒÿù„ÿ |{ÿú„ùùúùÿÿù€ùùÿù‚ÿc„ÿ/ …ÿÿ€ÿÿ€ÿùúú^7W‚ÿ€ùÿœyAXi]‚ÿ]d/ƒ€ÿœÿŽ‘!Xg>Š{zz‹@hr^)‚€€ÿÿ Aff+ ,ed.9‚€ƒúú%^idwi`tue;‹‘Ž€ €y†ÿÿ XNec6\i&ÿ…ƒÿ Œ…5qA’ \7€úù€]€ù€ÿ |ÿÿ3ÿ‡…ÿ€ÿc‚ÿ ùÿùù…úÿƒ|ÿù€ùÿ„ÿùƒÿù‹ÿùÿÿù†ÿúúùÿÿùù…ÿ€ùÿÿùùÿÿŸÿl8mk ]5i?iqgùžwŠpÿ¦åþxPÑÿ¾S0âÿ‘YØþ½]I³ÿúèôúçt‘ðµ®þüñúúꑲúÉXJFÏýÿÿÿÿÿÿÿÿ’hZU×ýÿÿÿÿÿÿÿù{1ùèâÿÿõ¸ºõÿüåûúñÿÿè–r—éþüè(²þÿÿé]]êþðmj¶óÿþâMNÞÿö‰[FÈýÿ„ÿÿüë¶Áýÿvkþÿÿÿä5ËÿððþþßÈÐÿïîÿùàzyÝùÿîïÿÑÇáþþñðÿÌ8äÿÿÿÿowÿýøêüÿÿ…~ÿýÉF[‰öÿàNNãþÿô¶jmðþé]]éÿÿþ´*èüýé—r–éÿÿñúüåüÿõ»¸õÿÿâèù3{øÿÿÿÿÿÿÿý×UZh ’ÿÿÿÿÿÿÿÿýÏFJXÈû²‘êúúñüþ®µð‘tçúôæúÿ³G_½þØY‘ÿâ0S¾ÿÏNxþå¦ÿpŒwžùeqh?h5] it32#=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿ‚´ÿ‚¹ÿ±ÿK+€ªÿ‹ÿ¾™r5¡ÿ€‰ÿ@ÿÿþ¸©ÿ‰ÿŽ€ÿ» ÿˆÿº€ÿí§ÿˆÿô€ÿßžÿ†ÿ1‚ÿ ¥ÿòO†ÿ€ÿüÿ øÿÞ…ÿ¬‚ÿ.¥ÿ MôÿÿùI…ÿ í‚ÿ$žÿJÿ׃ÿ%ý‚ÿR¦ÿMÿ÷BƒÿqƒÿIžÿ‚ÿÑ‚ÿƒÿtˆÿ˜ÿ‚ÿõ=‚ÿäƒÿm‡ÿ€ÿé‚ÿÉ ‚úƒÿ–†ÿ‚—ÿë‚ÿó8€c„ÿ…ÿÿ¸ƒÿÁ€ š„ÿ·„ÿB–ÿºƒÿð2/Yƒâ„ÿ´ƒÿW­Žÿ‡„ÿ¹Bj“¼æ†ÿÙ€ÿ P×ÿ…•ÿ‰„ÿîµÞýˆÿßÿÿ<ÉÿÿÍŽÿV“ÿþŸ!€8Äÿ‹–ÿX”ÿ ñƒ%¯‚ÿÊŽÿ#•ÿûž $­ƒÿÝ–ÿ%–ÿñƒ•ûƒÿŽÿò–ÿûœ3–û„ÿY–ÿô—ÿñ¡ò„ÿñŽÿ€È¡ÿΖÿé¡ÿ{ƒÿ†ÿ€iþ¡ÿDŠÿ„ÿסÿæƒÿ€ÿ€iþ¡ÿ»‹ÿƒ×¢ÿgƒÿB€iþ¡ÿþ0Šÿ W®P׌ÿýéëþÿ؃ÿ “ÿÿ嶇Y(iþ‰ÿ û¼‹s[XqжøŒÿ§‹ÿÞÿòÄ–gC׉ÿ å•EM›è‹ÿSƒÿù„ÿ÷Ñþˆÿ Å^ S»‰ÿø!Šÿe’ÿÕOƒX܈ÿáƒÿ‘‘ÿÚR€ÿ€BˇÿöŠÿ™ÿõe„ÿ€oø‡ÿ9‚ÿÚÿ£‡ÿ‡ÿ–ŠÿŸŽÿà.€‰ÿ€8è†ÿ¾ƒÿÐÿx‹ÿ]ü…ÿúŠÿŽŒÿÔÿ߆ÿAƒÿÄ‹ÿ€ÿ€i†ÿ¡‹ÿ€|Šÿì ÿ*ò…ÿÆ‚ÿ·‰ÿ©ÿ…ÿý(ƒ†ÿ€kþ‡ÿþ?‘ÿN†ÿJ‚¨‡ÿæ ‘ÿÕ…ÿ»D"ƒÿ€[û†ÿ¢“ÿ³…ÿ걑pP. ‚˜†ÿg“ÿKˆÿý㢂a6…ÿ`…ÿ÷“ÿ&û‹ÿï΄€,…ÿÚ•ÿÀÿç†ÿT…ÿ˜•ÿ©ÿâÿT…ÿ}•ÿbŽÿ…ÿ|…ÿG–ÿVŽÿ €{…ÿ+—ÿüÿ?…ÿ£„ÿò—ÿ ÷ÿ/¢„ÿß—ÿÆ‹ÿý«…ÿË„ÿº—ÿËŠÿýª.Ê„ÿ¼—ÿ¥‰ÿûŸ%…ÿò„ÿž—ÿ­ˆÿ úž$ð„ÿ¤—ÿЇÿ÷”„ÿ …ÿƒ—ÿ†ÿ ö“‰…ÿ˜ÿq…ÿò‰ƒÿ‰ò…ÿu—ÿ……ÿ ‹“ö†ÿ˜—ÿ€…ÿ"„ÿ”÷‡ÿŽ—ÿž„ÿ ò$žúˆÿ±—ÿ™„ÿó…ÿ%Ÿû‰ÿ©—ÿ¹„ÿÌ.ªýŠÿË—ÿ²„ÿÌ…ÿ«ý‹ÿΗÿÞ„ÿ¦/ÿù —ÿì„ÿ¥…ÿ?ÿþ—ÿ*…ÿ€€ ŽÿY–ÿ@…ÿ}…ÿŽÿg•ÿ}…ÿZÿâÿ®•ÿ•…ÿV†ÿçÿÇ•ÿ×…ÿ4€„Îï‹ÿý,“ÿö…ÿ`…ÿ6a‚¢ÂãýˆÿR“ÿb†ÿš‚ .Pp‘±ê…ÿ´“ÿœ†ÿû[€ƒÿ"D»…ÿÚ‘ÿå‡ÿ«‚J†ÿP‘ÿ:ü‡ÿþk€†ÿƒ(ý…ÿ’‘ÿ§‰ÿ» ‚ÿÄ…ÿó-ÿêŠÿ|‹ÿ¡†ÿi€ÿ€{‹ÿɃÿ=†ÿâÿÔŒÿŽŠÿú…ÿû^‹ÿrþŒÿÖƒÿ¸†ÿé:€‰ÿ€+ߎÿŸŠÿ–‡ÿ‡ÿ¡ÿá%‚ÿ3‡ÿùr€ƒÿ€cóÿ™Šÿö‡ÿÏDÿÿRÙ‘ÿ—ƒÿÚˆÿß[ƒNÕ’ÿeŠÿ÷‰ÿ¹W €\ňÿþÑ÷„ÿù‚ÿK‹ÿ ëLE”ä‰ÿ×Cg–ÄòÿÞ‹ÿŸŒÿ øµ‰qX[s‹»ûŠÿ i(Y‡¶åÿÿ”ƒÿÔÿþëéýŒÿ ×P®WŠÿ*ý¢ÿk€B‚ÿb¢ÿ׃‹ÿ³¢ÿm€€ÿƒÿã¡ÿׄÿŠÿ<¢ÿo€†ÿƒÿx¡ÿê–ÿÇ¡ÿÈ€Žÿð„ÿò¡ñ—ÿó–ÿQ„ÿû–3œû–ÿòŽÿŽƒÿû•ƒñ–ÿ$–ÿ׃ÿ­$ žû•ÿ#ŽÿÊ‚ÿ ¯%„ñ”ÿW–ÿ†ÿÄ8€!Ÿþ“ÿWŽÿÍÿÿÉ<ÿÿ݈ÿýÞµî„ÿˆ•ÿ ‚ÿ×P€ÿÙ†ÿ漓jB¾„ÿŠŽÿ­Wƒÿ´„ÿâƒY/3ðƒÿ¹–ÿ€A„ÿ¶„ÿš € Ńÿ¼ÿ…ÿ’„ÿc€9ó‚ÿê—ÿ€†ÿ”ƒÿú‚ Ë‚ÿíÿ€‡ÿoƒÿä‚ÿ?ö‚ÿ˜ÿˆÿqƒÿ‚ÿЂÿžÿMƒÿqƒÿGøÿM¦ÿN‚ÿý%ƒÿÖÿRžÿ'‚ÿí …ÿ NúÿÿôM¥ÿ*‚ÿ¬…ÿ Ûÿ÷‘ÿþÿ€†ÿUó¥ÿ‚ÿ2†ÿŠžÿå€ÿôˆÿ§ÿæ€ÿºˆÿ ÿÀÿމÿ©ÿ±ýÿÿ@‰ÿ€¡ÿ8s™¾¹ÿ€*K±ÿ¹ÿ‚´ÿ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿ‚´ÿ‚¹ÿ±ÿ€ªÿ‹ÿ¾™r5¡ÿ€‰ÿ€fJ©ÿ‰ÿŽ€ÿ» ÿˆÿJ€f_§ÿˆÿô€ÿßžÿ : †ÿ‚f¥ÿòO†ÿ€ÿüÿ :cfY …ÿE‚f¥ÿ MôÿÿùI…ÿ í‚ÿ$žÿfVƒÿe‚f!¦ÿMÿ÷BƒÿqƒÿIžÿ ‚fT‚ÿ?ƒf.ˆÿ˜ÿ‚ÿõ=‚ÿäƒÿm‡ÿ€ÿ]‚fP‚ dƒf<†ÿ‚—ÿë‚ÿó8€c„ÿ…ÿÿJƒfM€>„fI„ÿ€–ÿºƒÿð2/Yƒâ„ÿ´ƒÿW­Žÿ6„fJ*;K\†fW€ÿ Vf5€•ÿ‰„ÿîµÞýˆÿßÿÿ<ÉÿÿÍŽÿ"”f@ €Nf8–ÿX”ÿ ñƒ%¯‚ÿÊŽÿ•fd? EƒfX–ÿ%–ÿñƒ•ûƒÿŽÿa–fd>†fd$€ƒÿ"D»…ÿÚ‘ÿå‡ÿ«ƒ€†f ‘ÿeˆf+€†ÿƒ(ý…ÿ’‘ÿ§‰ÿ» ‚ÿN…faÿ ^Šf2€‹ÿ¡†ÿi€ÿ€{‹ÿɃÿ†fZ ÿUŒf9Šÿú…ÿû^‹ÿrþŒÿÖƒÿJ†f]€‰ÿ€YŽf@Šÿ–‡ÿ‡ÿ¡ÿá%‚ÿ‡fd.€ƒÿ€(af=Šÿö‡ÿÏDÿÿRÙ‘ÿ—ƒÿWˆfY$ƒU’f(Šÿ÷‰ÿ¹W €\ňÿþÑ÷„ÿù‚ÿ‹f ^?  ;[‰fV)]‹f!ƒÿ³Šÿ(’fUƒ#XˆfZƒÿœ€ÿ’Šÿ=fb(„ÿ€,c‡f‚ÿ˜‡ÿŠÿ@ŽfZ€‰ÿ€]†fLƒÿ•‹ÿŽŠÿ9ŒfUÿ Y†fƒÿ“ÿ‹ÿ€2Šf^ ÿa…fO‚ÿ‘ÿ‘†ÿ€+‰f‘ÿ†f€”‘ÿ•ƒÿ€$d†fA“ÿH…f^G:- ‘“ÿ”…ÿ&…fc “ÿd‹f`R5•ÿ“†ÿ"…f=•ÿDfZÿŠ•ÿ“…ÿ2…f–ÿ"Žf‹—ÿ’…ÿA„fa—ÿcf‹—ÿ’…ÿQ„fJ—ÿQŠfeDŒ—ÿ’…ÿa„f?—ÿEˆfd?Œ—ÿ‘„ÿ …f4—ÿ9†fb; Ž˜ÿŽƒÿ7a…f/—ÿ5…f8—ÿŒ„ÿ ;c‡f9—ÿ?„fa’—ÿŠ…ÿ@d‰fD—ÿJ„fR”—ÿŠ…ÿ De‹fR—ÿY„fB”—ÿŠ…ÿŽf —ÿ…f3•–ÿŠ…ÿŽf)•ÿ2…f$ÿ“•ÿІÿ\fP•ÿV…f–“ÿŒ…ÿ'4AN[eˆf!“ÿ'†f>”“ÿŽƒÿK…fW‘ÿ\‡fD”‘ÿ†ÿƒe…f:‘ÿC‰fK‚ÿŽÿ’‹ÿ@†f*€ÿ€1‹fPƒÿÿ”Šÿ d…fd&€‹ÿ.fV ƒÿމÿ—Šÿ<‡f8‡ÿ@fZ‚ÿ‘ƒÿšŠÿ b‡fSÿÿ!W‘f<ƒÿ³Šÿ c‰fJ#€€%O‰fTc„fd ‚ÿ³‹ÿ@Œf cH7-#$.8KdŠf *$6I\ff;ƒÿ³Šÿe¢f+€‚ÿ³‹ÿH¢f,€€ÿƒÿ¨„ÿŠÿ¢f,€†ÿƒÿ¨–ÿP¡fP€Žÿ§–ÿ „fd<>d–faŽÿ¨–ÿVƒfE ?d•fŽÿ¨–ÿ6fN€ @”f#Žÿ‰ÿÿ›•ÿ€4fV €ÿW†f\K;*L„f7Žÿ†ƒÿ™–ÿ€„ÿI„f>€OƒfKÿƒ…ÿ™—ÿ‚†ÿ;ƒfd ‚Q‚f_ÿ€‡ÿ‰‚ÿˆ˜ÿˆÿ-ƒf?‚ÿS‚f žÿˆƒÿ‡¦ÿ‚feƒÿVf!žÿ‡…ÿ‡¥ÿ‚fE…ÿ  Xfc:ÿ‡†ÿ†¥ÿ‚f†ÿ 7 žÿ†ˆÿƒ§ÿ\€fJˆÿ ÿ†‰ÿ€©ÿGeff‰ÿ€¡ÿ…¹ÿ€±ÿ…¹ÿ‚´ÿ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÿt8mk@oQ*ôè¾—pJSÿÿÿýßµ ÿÿýýÿÿ3Ëüÿÿÿÿÿ+S@ îþÿÿÿÿÿVKÏBÿÿÿÿÿÿÿNLÐÿö;pÿÿÿÿÿÿÿxAÈÿþÿ‚»üÿÿÿÿÿÿqDÈÿüÿüó5åýÿÿÿÿÿüš¾ÿüÿÿÿÿw2ÿÿÿÿÿÿÿþ”ÿýÿÿÿÿüï.aÿÿÿÿÿÿÿý¼ÿÿÿÿÿÿÿÿl©ýÿÿÿÿÿÿü·æÿÿÿÿÿÿüì(Úýÿÿÿÿÿÿÿàäÿÿÿÿÿÿþþb#ýÿÿÿÿÿÿÿÿÛ²üÿÿÿÿÿÿýç#Rÿÿÿÿÿÿÿÿÿü'¯üÿÿÿÿÿÿþþX˜þÿÿÿÿÿÿÿÿú—$€ÿÿÿÿÿÿÿÿýâ%OxÛüÿÿÿÿÿÿÿÿÿ!ý¬~ÿÿÿÿÿÿÿÿýünp™Ãîÿÿÿÿÿÿÿÿÿÿÿ‹úÿè'NÿÿÿÿÿÿÿÿÿýñùÿÿÿýÿÿÿÿÿÿÿÿÿÿC…øþÿÿ±Mÿÿÿÿÿÿÿÿÿýÿÿýýÿÿÿÿÿÿÿÿÿÿÿÿ^sñÿÿÿýê)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖUlíÿÿÿÿÿÿµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿ½<\ãÿþÿÿÿÿüì,ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÖVSÜÿýÿÿÿÿÿÿÿ¶îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿ½aÐÿýÿÿÿÿÿÿÿÿŸüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿïÿüÿÿÿÿÿÿÿÿþ¡ºüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿýÿÿÿÿÿÿÿÿÿÿT†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúŒþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýË¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2ðýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþòoA2ðüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýµLûÖ¥wH–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx˜ÿÿÿå´†W(2ðüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ,Îýþüÿÿÿí¼¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýç ûÿÿÿÿüÿÿÿøöüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþžMÿÿÿÿÿÿÿÿüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿcœþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþÿÿþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÐüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿýçäúÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüØ#üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿæ©rt¬íÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢Pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿô¨[N ñÿþÿÿÿÿÿÿÿÿÿÿÿÿüÏ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþö‡1>–úþÿÿÿÿÿÿÿÿÿÿÿÿþî Gøýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþø† õþÿÿÿÿÿÿÿÿÿÿÿÿÿTÎþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþ› ¦ÿýÿÿÿÿÿÿÿÿÿÿÿÿ}=òüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ̹ÿÿÿÿÿÿÿÿÿÿÿÿýÙ ÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýöTbúüÿÿÿÿÿÿÿÿÿÿþñ1íýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿ_²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüï.7õýÿÿÿÿÿÿÿÿÿÿÿ‘&äýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬˜ÿÿÿÿÿÿÿÿÿÿÿýï°‘sT5¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿýú>Nþþÿÿÿÿÿÿÿÿÿÿÿÿûᾞ~^>8ÛþÿÿÿÿÿÿÿÿÿÿÿÿýÎ ºþÿÿÿÿÿÿÿÿÿÿÿýþÿÿÿÿøÚ¸”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿi€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿÿÿÿ2Ðþÿÿÿÿÿÿÿÿÿÿÿý+øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPƒÿÿÿÿÿÿÿÿÿÿÿüÑâýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿKáþÿÿÿÿÿÿÿÿÿþš‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{ëÿÿÿÿÿÿÿÿÿÿÿEZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvèÿÿÿÿÿÿÿÿÿÿþùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¦ÿÿÿÿÿÿÿÿÿÿþàóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¡ ÿÿÿÿÿÿÿÿÿÿý˯ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔ5ÿÿÿÿÿÿÿÿÿÿþ¢ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÍ4ÿÿÿÿÿÿÿÿÿÿÿ{]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþú\ÿÿÿÿÿÿÿÿÿÿÿHZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿá[ÿÿÿÿÿÿÿÿÿÿÿJ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿånŒÿÿÿÿÿÿÿÿÿÿÿ&;ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿänPÑÿÿÿÿÿÿÿÿÿÿÿ/ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÜcE¿ÿýÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÛcYÑÿüÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿüÿÒWSÎÿüÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿýÿÑYcÛÿüÿÿÿÿÿÿÿÿÿÿÿÿÿ" ÿÿÿÿÿÿÿÿÿÿýÿÆKaÚÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,ÿÿÿÿÿÿÿÿÿÿÿÑPnäÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>!ÿÿÿÿÿÿÿÿÿÿÿoäÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ2Dÿÿÿÿÿÿÿÿÿÿÿ[áÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`@ÿÿÿÿÿÿÿÿÿÿÿ]úþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿduÿÿÿÿÿÿÿÿÿÿÿ3Íþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý§Šþÿÿÿÿÿÿÿÿÿÿ5ÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüµÊýÿÿÿÿÿÿÿÿÿÿ ¡ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóßþÿÿÿÿÿÿÿÿÿÿ ¦üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿÿÿÿÿÿÿÿçvÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]Eÿÿÿÿÿÿÿÿÿÿÿì{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™þÿÿÿÿÿÿÿÿÿþâKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýäÑüÿÿÿÿÿÿÿÿÿÿÿŠPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö)ýÿÿÿÿÿÿÿÿÿÿÿþÕ6ÿÿÿÿýþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿiÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™¸Úøÿÿÿÿþýÿÿÿÿÿÿÿÿÿÿÿþ» Ïýÿÿÿÿÿÿÿÿÿÿÿÿþß<>^~ž¾áûÿÿÿÿÿÿÿÿÿÿÿÿÿþS?ûþÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨5Ts‘°ïýÿÿÿÿÿÿÿÿÿÿÿ•§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýè+ÿÿÿÿÿÿÿÿÿÿÿý÷=.ïýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶ _ÿÿÿÿÿÿÿÿÿÿÿÿÿ–£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüï6ïþÿÿÿÿÿÿÿÿÿÿýúcQõüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÙýÿÿÿÿÿÿÿÿÿÿÿÿÁËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüõBvÿÿÿÿÿÿÿÿÿÿÿÿþÿ¤•þýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÎTÿÿÿÿÿÿÿÿÿÿÿÿÿþô{ †øýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúJ éýÿÿÿÿÿÿÿÿÿÿÿÿþú‘85‰õþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”Ïüÿÿÿÿÿÿÿÿÿÿÿÿþÿï¡S\¬öÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿë¬tr©æÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý(ØýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿüåèýÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÔ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþÿÿþüþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ¡cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüÿÿÿÿÿÿÿÿQ™þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüöøÿÿÿüÿÿÿÿü" çýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦¼íÿÿÿüþýÐ'ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüð2(V…´äÿÿÿ™xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™Hw¥ÖûL®ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüð2?nòþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýð2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©ÃüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþŒùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽMÿÿÿÿÿÿÿÿÿÿýÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¹¡þÿÿÿÿÿÿÿÿüÿïÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¿ÁÿÿÿÿÿÿÿÿýÿÐa¼ÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíµÿÿÿÿÿÿÿýÿÜSVÖÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ,êüÿÿÿÿþÿã]<½ÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³ÿÿÿÿÿÿílUÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!(èýÿÿÿñu^ÿÿÿÿÿÿÿÿÿÿÿÿþýÿÿýÿÿÿÿÿÿÿÿÿL¬ÿÿþø…CÿÿÿÿÿÿÿÿÿÿýÿÿÿúòýÿÿÿÿÿÿÿÿÿR$åÿúŽÿÿÿÿÿÿÿÿÿÿÿîÙorýþÿÿÿÿÿÿÿÿ}§ý ÿÿÿÿÿÿÿÿÿüÛxO%ãýÿÿÿÿÿÿÿÿƒ ˜!úÿÿÿÿÿÿÿÿþ˜^þþÿÿÿÿÿÿü®&ûÿÿÿÿÿÿÿÿÿR#èýÿÿÿÿÿÿû´Ûÿÿÿÿÿÿÿÿý#gÿþÿÿÿÿÿÿâÝÿÿÿÿÿÿÿýÚ(ìýÿÿÿÿÿÿç·üÿÿÿÿÿÿý©pÿÿÿÿÿÿÿÿ·ýÿÿÿÿÿÿÿa.ðýÿÿÿÿýÿ”ýÿÿÿÿÿÿÿ2zÿÿÿÿýÿÅ”ýÿÿÿÿÿýæ5óýÿýÿÌHqÿÿÿÿÿÿý»„ÿþÿËGrÿÿÿÿÿÿÿp;öÿÑNNÿÿÿÿÿÿÿBŽÏMOÿÿÿÿÿþï @S+ÿÿÿÿÿýÌ,ÿÿýýÿÿ´ßýÿÿÿSJp—¾èô*Qoic08 jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿR ÿ\ PXX`XX`XX`XXXPPXÿdKakadu-v5.2.1ÿ œÕÿ“ÏÁ ‚{‡²ÓÿÙd\\¦"'SuzðÚ˜­ÁZ(Ü{@ D_ Üèå^D˜Ú´C¬©WЕ“3ЛU=”Æ™¦à;£á@ÏÀÐ$Ê ‹L*ØÌúä3’þm˘ßàñ†Œ‘@‹LeE^ÖI£ ØèÓJVLBFð+Ï–M”%8ÏÀ€.[]»u¯bí§ß9ƒí÷¸v<ÛÇÿ#ÞÄû±·,²1ßš`EyÏ0»ø1uOŸRÃRÔC±ÕñÇ£wжþ$“0QÀãµb%侨S‡p›­Ae E£ù¸þϺ&„g‰1òb”,ð'å¢TUÇà´?À-×]Œ¿ÆòÕÉ#¨—'³•”_\¸BLCÏy§Bøïðg‡÷Ìÿx…ýu,öTn¨°vÇ|ÆU &qò™ ö·_r;);¡Æ^M««ê·Ž¾% /ì]L®þŸØ£²0ä¼]•sàî*ä¾€nm.<{P×f.|€­œ ©Ø‹ñ=R…͝ Q—hšzF†IÕû‹a¶OBœy²‡†qïûè{ÑÉb[Ä÷Ö‘lzðû»¨^©Çàm´º¨AÈwÕD9¼*ù+C²e¾vÕlÄX‘ìÚ"M5ð#ï§ÎFD~ëâ%_¸2Ê‚ Ys(êZY̘Íã9ü½ZE™†¨úÄæeÑ©qÿ7¯ÌS•B訄LæÛ©Ñ§°«ª"é¦Z’<¿]í52•’a¿ðSÄŒ`#€³ a[?O”ðKÛ 9A±…øA³ çÀÛ¼ù”&íÇàI€ô? 9!U«k$y¿ˆÙªuüÆ6 l‹=%í<¯šÊ±t,÷¸zé¤ "Z³Y§åÚÌ–$?YÖ…ÞSë½÷|×C2L¤ê%V¯Jæœ@„ÀÀ/Îzj’¨¡ð˜Ný¥äÅÏÍ?ˆüÏÀ9Qæ&¿~îØM’#ß"'r\Ý:ÄBDb§?fv p0>;2t?DbØØX®R鳤öN ™ÞîovÀ—LCZº•˜¹ŠPƒUš‹ èÙÕ[…ê›ðûµ«-ö${´òélnuѰ?/zf·â¬¦öBm®Ó#—Üüòá“ …$y‰û»…ˆ;Ò®³l`aÆj¯ã¿Œö EÛ8hB—Ž ø/Uêä½0%F ÌÝ*RéC™Ïδ³λƒ?L©¦JŸëþÄØÜUZîûÄó*Τ±åü‚çÛ°Û»ÞOüüàyo³ŸàÍ/R4üAqÝ‹`‰ †1f'.Í]–]'ÌI|'V;c ¨7oËÀåR»@Lâhðñº÷"ï OøH$<’É'8BŒXµ—u{iÂbù/6± ñ¹XÎCrNsئ#]y)DFØ0î+º-èÞÿû™Ófd\¥yÑž²e¥£ìIñ¤m˜ ÍT{‰Ù’`rƒBˆYÍÖ¹Ï‹×Æ¹w‡ÔøWÚãBjÈ¢,r“´•_…w¶1¼(´ Nî³`‘PŽe¹uÆ*Á•ÿgc¨ß÷Öúê‹®»0]ù„ô„ÝøºéãÚM6ááA4ÖV¨9ÏZ$ º\¾z9j(x }‚Iä¤O?A(M€6¹Þ›©Î’ ,j1Ð8ï\ó¡GÉ+Úe @Â(ÅL”ÞU ÀU«›¤0Dëƒ®í¦¾n>Ï©#šÄ³>DßLÃS¹Õâ{88ÇT &VÅvÓë–B^ËǦ`lÍœ k¾„‹J¦T:üJ®è¯!RÏØœ+ü*%ÓK›9•ÑîE?’§ÒâhéóðôŽô%ß·O™ê[Ýþfq\T³íS»sØob§9”O·Ä øŽ—ªiï׿ÇÇÀg°|k4-ÇÊ;!ñK=éj›°¸3@ÇáMGáJCð§m1õaÞ´ýÑÌ£®¨tÅ÷Õ s©ìkVd#v ážØ:Óâ•\?ËÝå ÚU x¡ƒD&Õ ©ô–Éó• •i"˜¼V-i2²ÙK€*µ‘Q¯Q&ëõeÀŠ"J­:ÌÆ[ÇXë æØh|‰ÜQPŸÿp/lå»Z€Fíˆäyò‘æQ©G>gïN/õû0 òɹj¼¹G/hC÷>Û6Zž*KÂ`ö¨Åèæ18¯ä²›/¦ÃÙÔ•Sš¯QKB S5ÂëìõOÀê?÷NËã KaéaF–š€uPž¾FíÎûÄþ6EçµL†3>l5KkÁ 8b(¸TÂrZ íM‹´ì¿Ç Ãp¤„´¥mâ€æmIn¢#¬ïõGyÒ€‹µ¸„0"¥YçÛ5|Ây›îÁø\Ò~¯$…þúφÚ-±Gÿ&î\ŸiˆX!¢Ð#„ÊLå‚CxÑžô¾ªWi=kYàd !MAƃßËþÈä“„‘Þi–ñTÌWúЫâÎyp ØaSe¨N-·lÑÒ)U§˜ß|5á\hk/ЧGh*BÖ©Á_(îÅéÃíYÁN‚Ø„^œÍ"ú{O¾Ê^ý1èø‚ÞnS:–O™öÀ4@ŠùŠŸìž¿töY ÿéUm>N7æ¢û^@öÃðq Eד‚Š7&Å‘¡XtÈ¥bð ä§»”ýK²ü{ã ާv3)„·ˆ¦-}ž‚(ö°Þø?“ÅÌãëMu”ƒÑÏ8‰6Xzc4ñ,¯m¹‹~³¢vˆcP¹ÝkZõ±SµÅY paòy›û`^E0ñQlé¥Ì(êÑóê½7ÎXÙ¯aÒËßööOëm(ÿ6‰a‚KšXgCºc>¢_˜ìÓ7ƒu£; ÿ€ï}ºi“¾_Yöû·>.ç`;%õ.ÇáYGáVGç[€m¶ñ"αn[§ gƒ¥ +•G dkùi» l£ËÙ.1åÔvF.¨¡\23eË b­Dç¶ŸDëÊé:­‰gÚ¨¼ÓYЩUNÕÀd—c çÚß’hPŧß$Kþøóf´—d¥v"\R€@ÝÌO.ôŸK=7"¸ly"bÿñ*DžÍ&½Ö›·sSþ•fìÒƒ…ŸÜ~n†-jžé†±.“º¨œ2ëÍ/ ~ŠU-ö ¹Ì«M‚N"Ès‡GNDÔ™wš`†Wv}˜ëª0ì¼Â3xžü¶Î1A’–‘YDŒ7Äóa½4æ°k´ÑË‘ˆŸÒ¯(þ'Ä òúnN‹&*\»eõ¹çr3ô^ÚÃ×”sEáÖoÚD¢Â8}úf†ÈÑîhɃÝðö£Ñk)òA®0•ßóAWŠ ôb%õõ¨ËÖ‘Hû_ °óþùÕìdvSœxjÃÆzêja N¶è W",éÆú³”ÐAÀA×ÒùÕ¸±™gæ›øöG(ÏYTׂ‰ÝÞ8K•Y*ú¯(MøY°¹qùm&¤äc蜞c}2)lšÂšªÐ¸@Û*nõ­)ÅÒ®ÇÉ4pxo"ž[&„Á†b'.¥•'Lw¹…C™oäË\?n§="‰ÑHå“&xe‹Mß7 …©"úú¾¹P Æ­ú‹ÏÏ¡9ùô#ŸDà²áUÀ6ŽR¯ÑÍ»Éêß¡ u¯…ÇLÜæC~H“øª%ÌX‚Gª$÷ï²yRÌtóçb3{½´“–m…IgЍêCZ-­P%IÈdW×` N€[¨ä¹û¶BHÛ³¸Õ¿Y¬ööR䯔YÚ¾ÒIS;8±Ñ¡,á™@AaÌÝ»·Kú «QE¹fg¿º{Ø/Šß'ì<,™uK„Îý¸ÿuQSÒbðäm÷BTe7EÀ¥¤œ}4ÙšUi¾wüÛK9º7pÒ;Ñ–´ð¸©•ƒÞ–ºÍº]¹¬¬¹ò'°[Ú}¦¸JÃDª.‰²©f%¶`d(“ Oª€Ê/³ÿO@ú × ZU3±í‚<û½þ8e¶!®òœ[f9"!¬`å¢}i6+‚z¡}8Z¬T•²©²ê庪m¸»"瀞¹C?¬‡øÇàɪyhÛ´€npÞËOÈëÕfÄ5ÅÏü÷¢ËAã:78Œ*¶ìPøcXî`BlXŠ›šøÐßñ2µþÀÅdLE'AHH»Éz66^4ý“æP œGÅs]ÊÇ•Tÿ/Êî jî›Àý‹“ƒúuÌT£ëóv SmÍ%'6b (ÜÄ<ÿ$4ÿI´N8p®}i"먦d]CÍ›ŸcQVUìmn^+À…CòeŽ(á*0Ei¢©*ª˜Ktã%v íV n³³ðÈT"’}>÷34™Ú·,“œMŠŒŒâ$ ì(¾¶b‹ù†*èÝ܉ðá³ÕE@ß›Û Atñ=rNÐ¥KfàZ ÀŸgH¿\1Æè¨ýUvrÛJ$ЫkŠDƒË„çb!»hò©mŒðíÔЭ•µO„=^Ÿß1öµƒò.?dÎßÌA¥@ã?&¸amTóS;tëu5«]5µ¯VòÞlî€;j]ò0º•ìeË×Ò®Ùd¨Î§Ì­^ Ö|®EY„AyÕÂ)<–W™^õ`Øòœo}ÅÙÞü‹º€ã’’CÓ6wSs—øÛ:Ò-+)ú¼>5!…éÔ¡#ÖœÅ÷qmB¯€û,, ²$W—lá@R‡e‘±]´Ãµ-Üj˜oîo~îPÔ·=‡9³ZíĤ¤¬TàÂdóuuZþ˜è3 §Ä¶8}ÀÄ5°68ŽVöîF=’±]ºâÛ ¥ªIP´ËÀV׉£¢iW|:}Ó.íì1'ÈÔ¥74†º¶®ÒðufÚ9®Ãü  Ý3«ÆÞXü¶ špcu­ràŸÃóÊ K0塬âèŒYof•‚ÿP‰rzbØ x; îËÆ•ªß‹µ)uTÞ|“ˆ2‡þ eþx°;«àkJT¥†RÑh£UÙu üd.[õ ­ÄfÁe$;WZkíôšž§`À©§òÁ±KÉ2 Ü=p<º<Èt¾µQ+ \ÆUÊ)1®ŠùI︺å»Þ2âÝ&Ÿ Á­Mw¡òüþÒmiî̹¡ÿL.8ZªÏiÖ±I«òi<ÓÏx•=’§5þÖ\V¸)ê–@Kk0óU¦ú“vv-kͦ^Ûçl~éÕ¬m•ñrÏF+N}ÂyB0“TžLŒ“Ò+ %j»(³¬“…~8Ü¢%"¨Àw¿_9HRÑë`O-`&L‚,zóްî_Ù⢦Kðþó`6T¹BÍÜå¯\wùR‘Ö¯¾k£ Æ¢ %lÊËAÔ øMZnåƒ “ݪ¹Vd‚"í´u±á„aŠC_×£$>Ab/ªp|Ö$èb0‡ƒýbQ¸ièì$ÚWGÖ!€M£e\øLöÇÓ¼H–=*ÕÉPo6þ–péê¿hÏøgï,ëÇéhÆ|z¿êd{›7à(ÎAÏË2"g.ËÀ°>À.…w xèM5mé¾íTÜ’B…øNòæK¯‰­›ÍŒ->“xð´Õ°ò`I)Ï9@=ïÈk²¥P4‹oEÿp 6ÊWÞ*¶´cÆ—ï‘ Wø¤ojd²[1¡-¶`±J¼0Z»Ü4ãbí-I´Y1”BÂF{ ê߃’e»0úáQVÓ·›ëßrV“ÂÖÜ¢úœ4Àe”jQìÂ-‰ÃíØx}»Ãc²ö‚àüÔe‚qø?æì§Öxøæq¯ùª ìÿƒ±€ °§zf¾ *>lŠ.wy6¨J ͵âLÆÛ°Œ Ä)ýœ¤‹iûϺh>Z)æ3J óF²#@¶›Óîp ëÓ€uK³‡L:CÖm°¾Ö†‘fô{Ë]ƒÉJìóKEžÆL‚½å…{1xo¡žÀçõÅmH;Òqr²è)Ä>©óS2y $'B1Ã9 ‘ß‚ºá<^š„ß±ˆ)ñ*ŠÖ‘ª‡…¦£¯ñûàè×Ý~5´¥ü:¯ºïuxÝ­Ÿpì7/ȺËwð¨fÜdÉ i³e¢Ôôj ¡¬¦)Îöõ¹b~^tÎ3Jxnã*Q“FØ™·Ýp¹Ç­:mÛŒÑN¤ ·â‚ár.ÉÓË< “—ËV 'ïõÐ` ÝèÝFL¸Â{1;©€;B/mMnbÄ·e\Çóô› Àe0sÓíóÀ½2öÒ53+iEïh³ÜP‚ - ª{_ŸIÃ1_»­ Ÿ!üî¸iú«·}vS Ýù-/$ù nª÷°ª Èx¨·ÓÄÝžãäg•1÷Ï¼öѽW¼½ß½³¶5€øÖë.!\PªíâOk)! :¬'i³6¾ä4£ò½ì ¿`Võ¾"¹Í}¼PpÜL奪ê(E|€È“å?,êS \†ùVílšés›àT¢fÍìÀ¡,Ð÷|Œ¿ ©Bc°LË-0£cL桳³·‡Ê7çÈ’ÓL$´êìTŠkG”Ûƒ¥–,6×?8׉°âÀxÀR>ú(®Xˆ!O5wÇ:@žôhÛ~ëýÜ=„z{¾öÏ r´É™dYB¬À bùµº¶<"†z·5ng#³¯.€Ø–%W¾å{åK0RmxkŽõZ¢z…<¶;ÿA¦ö´LÏÿ4Hs °ŒŸëlª³èÉÆ%Ýž­0ËYWùWÖ”>ª Mßæ°ŠªÄZ8˜ê_Ç~JÖn!¡û!Ë‘·vÑ…ÆUî1X©Î@»•B@Ó§ÖI:ßcH[ù}hùòv•„!±!œ æ;jw«ú¾±C)·WÎÿ'÷°à-àV%5ŠxÐ?Ü+'*è¸ÚNo ¡­Åzå•xßRQ¶@W>Ñ´ëîvQŠæA?2#l Úg„¾¾F í¦¦Q¡ê¬¤)#n9N.'ä®IR>PêØ gû@y;dôË…w&‚ûÝd¹5¥ri{9sÀþ-j)n´wM€›¿™ÓÀ¹Ã'9%sr„4›eÏ-<™dY%P“ËöÕÉIò,À!Z&$6ÆiãŠ~ì­;ù–Q?ܦ'þÈìÚÿZ¹ãÃ}ÙšÓ-«4½deËA/1ùþA¢+«ÏÖí%n4ÓsP ^©!6ýIõVLš=oÆGè@»ÏR‰wï|»%îŒ5ÉÄ€iЊÏ|Ë=/YÚ¡ñû,Ð]ÉÝ#»{­Â­ªîû0ÅÈÅÙ}®±“¬íåi*Ãí¶aöÚðü.À¹³ßH 'W ~S²±Z¨åõ jÏ’zLÓ—§~G„ÏÄ,Y qôVJ ¨~ˆý”1—ô³‡ *0摳Õ|YMël- M ïX—‰µ¦ŒG¼¶"VèàÝóvyG¥7þÇj-ß4Ÿ8—jCž2~dJšÿ &p¶UÅÏ ør3ØÅé× ‚Ô$hz‘/ž1E’ÅCÊÂbJ‰¡W¶uúéì@ÒŽÀ'ª@MLÙ, (dœA°ƒŽÞÁšÏÛ ·.V;µ|‹q'i“>#B?ÐN“¨³óûÙNH§-…aaJ:ËÒ;;PéJ!Ó§bÈÅ–pàÒkßLj ¼²½*ðýÑ%—Ôþt¢4ÐgEù£€žä÷þŸ®ß“xŸ²@HqOÌ3OüÒîÞÇv­ÔÔ§w “zF¡;},Z¼Ó¸(ÑàI¡K¯W˵‰¶=àÄ‘û¦Xd3\| Ûô)Qœ@Σ–½ÒµT=gúþÓùßg@NØ2,÷cÊ`$Ϙ|«žêI…ÅýÓ_rÂwi YYwO Ñ"–YO/¼M†q.]'S'Ô_„Éì’››#ªvü zËš.^îód=v[ƒˆ@OÉ‹©?fMùׂÔwíc…}ó%àf¦I5EŠá$ŸOV ÀñQ @öP¡[ííPâÆÀ÷V¨ú’ÞŽ‡dÄ)«Q;sâ¨ãF›ÐöJ¦gRŸ Íl®DÉuXƒPµR(˜ìþ¾ju]e®Ê´^­ÔOý–|'¦i/K ~ ’•|ƒª¢.úë¶~­ w=Mvy?ù™Ã÷bñÓ øÀg²VÍá™Þ˜øÂ.þ»iÄŠñB8iÀ8¨ ãF—8l¬$tbóO9DÝsVÏÏv§ç»ðü7ˆÔÿ%má,†ÄW˜6€\lHýΛëwÖŽ‹ºýýõJb .LQµKã‚:M# lÆ„\‹­qVV¢i–0j8±!dòcÓ÷UéŸ}Ãn¸=ÒL ž–Ê…ÿÉ'o¹9"¾¨›„t´Ñ,ž®Ž¢3¼?£ÅϹÜÅ—ç8$…´È ì/,Ô1p§V¶uð2l+Ý f #“ûÞz<‘‡}s «­21þd;ÚrþÈ2NtÉšÀ™;  ‚©ûŒÇ*O¬ïÕåÛ•SÉ/0svµŸJE¬‡~Tƒ‡®„ÕMhïæ_-ûôlŠQð×Ö„TØ-pè¾õ J@dÛ½Dl !8PÓôV~U®×õ7p<Ià¿TÑì…kXÔÇõÄ5 &Ûk»D6—AÏ,¼½–—¬Y—&D¹@éG«œ8€k»õeé+߈ŠíÚa‰6¿!ñÙ–™xîüÕצ‡6åÔn‡…ôØåÌ“Ÿkaâ®fZœ¯Ô<.}‹£Óð+ÕiÙc=Š<X˜ß¿WRèãšP¹u“ÛÐ%9dê7bÓ½s¦ä‘u $vj˜¹Nµ5ÑeÜï&{%ÿF¨®:·ojü½ú–ÌZVy<ÈPkÌì˜9%5…‚VŒQ§‚ÿ÷×ÏcÚâÈŒç÷—.9>ÀÀ±l ôG*+(ý{fOi<»y³SÓdžUû‹de}  €”ûá,²š¿Ê–W}—lq.CÕàÄá&FÔÊø3¿mÝ;,n‚4-¸Yg¤¯§8;¢ç7 »‡}š/_ 0CÛ£´™hËAzÆŽ]„&0ø9¾²Ǥ^‡nÞ-AMO¾?èavÚ2 þt²Šj —ÀD­‹Ê’E·åU¿c·ÐÆ^t ¸ï¦ž²ÈY3½ÜÁA&é !o!©¹™ÓÊô”€ ¶å“ñj½ÁÁÆë;Ø„¨GccÞϼA¥y.'Ç7¯i¯7s¹öI½±Ôȃ¼¥LN³Ã`³¥‰rßÓuï÷ïþÚ¡keXå‹Yêfk1P»·É/‹A‚íd©'iØžt//Ëd§ˆã¸O„,) A6롊lÞ0‰ÁNÎ9{¡C÷×4{úQhÑ{î-Ò…^T‹zô*ñ^ á0{Ù‹–‹Ѿáâ*â…ó©'´zvBu ºwœH]þˆ˜*Ó=6úðòŸþåáp¸|2ä-ß홵êó˜Çβ‚Sr·³è<Šåè܇@ŒCÕbŽ$¨ïãáÔßãKRö±ÑaZ×8³òû ]f‹R Ba+”eÝ­ŽC9êÁeECLøo˜9;FèÃO˜ÍÄ2v®ô$#¨IE»{vï6`½ŸCžW õXU¬æ4çÍIF(ÌhõD.ÁÌ}óøó±ݩռùùáÖw#¢O0/6YvM}'Y@Ÿñî,ÒlVA9j òM´RßÌÛ¸O,œE¤u¤î¬‰ ›ïK¾(ÂÜ›õá:l&WÓÎ~¶AfóH‹QCÙQ{ñ<¨þ×:}*IªfîUÃjÉf¦Lüdwôu&ž–¢"S®ÅwñèÂ0¾—}ä‰l ÷¿   °YÒgÕ|gø“¸âýQ}†ñ]Â9 “ò˜‘ts>B,»"|Å#ó©Àå½øÖùB¿6•ùïõ7ân»Wþ¯tkëøIfÊöç‡ÃNùk—°¡[®cØï jç ñ“¦úؼµI0I²,3ÒÕ#v×DÌ=®Êi…s†Z¶QiD³bBŒÌR]™Êï•W‹#M¶—v±cŠ…å¢Ã5iš—¾$ ¥ÜÞ”¢Ž3íZÎ"«w]fLù~à£M¯i‘°ÆÃkœ$9ü–ßÔ‡hÙ3?±¶)Tê l¨„…„ñ‘jGÇáꇧÜüý0@äwðƒ 3ÅL)B¤À)®ÞíÞÆuÖ½ø½ý%aû=ßzœù;rÞþûŽrC†çŒõ4:)ɵc-~ðØ(Ç=ˆ·×ÆÊd œ˜Ä§Jgn¼ â3Çæ}®4 TPbX'À‚žuѱ©ü›¥Nlåê s×S—¢¡ƒ/'`H××F•Qö¦ÊÖ#-ôe7y›;gzBB5ýÇ®1”F;ùÊŽÑ[÷Ùx¯L¶=O|ø¥Œ°Õýº çd1°wá%Â'ä˜]PšÔ•ÝЮF¿Ñ†«4U|ïQÙÔ`)³²ÝRi_õ6ÚËž4é­¼Ã(†@´/ýzA¤ò†?´–$Qg}÷Ýc}Ëy;Ø-­àÄ< Æ›Ò.’I%H{ΈïàVšX ¨œÍ&ô[Q§¨r ÛÆP…Ã߃cQ‰qõÛ݈kvšÈå›”CrdK«ÿLØØ²-å[j-µ¬%ó+ÒùCw2fÖÁiéÛÌ´Uß\9K£î¾?å,rÂ`·Êß?GDEò~âþ5§Ž'hñ÷ dû¿ª¶&É&|ªø»,£æ ®alM‘£?jâ—à’+DëvõYÐ M ¢L!ëÅCâ†B_[Þò+µ‰ãÕÓ›eêÖwö¢·²Î|£´;ûs×±*1«g¸{`O4%|!½9óÈç4òÏî»c]E%i†+ÍŽïÖwX¿ÿ*7r ŸxQ‘áY—ýÈÕø‡ÿFE$óÛ)œ¶ë~x¥½%òÈ·|S°É6+긗7Qy£=n6c*µ&Å1]»k“ ÛÁ.âË/pËä³7ÈTBNVLQÊÿf:¬ÙPH½i–}þ‡z!Ž!+¸LÉš3+ öVoŠ“m6"N ﱘ I½wû08Ð7@tð!.¹»ŸZ…©R–„Zm›wC¸ýöÝ{é»sÙ xž;#óvn‘'ý’€ÉÇ3ÝÕß›Jb÷«f\O͹gÓý)‚N1(ÓL,x’J‹„žAÍ!!ái± d±’›BlKßKkï ¿&Œ³*/ë¤OùCsêÙ‹œFÖz¼Õ!0SLrÆ}Œƒ8-'Ò-äø3ª2såv y»6jµP¬–Y:†&íçѽèC.ñ7UHÂ9"¸h×ÏÔ%q£íÁðL)ÀÒèCñó–æ¹¾xPËÔ×í`ÅeR6#µ;Ò{[5½*Äȹïõ³Mx› ]y[z`9tlaÅÐö‘]üG!h!% ,9µÏ®Â¬µHæý‚$ÃåcШ­“Šy¼ÜoôðÕl§Ëìì”u fâÈÂ7G-˜8‘³§-h©ÏEÁ°&ÆCLœLˆ ¾§ËánU K4 ðôÇ}ÊÙRƒ¶Ý[I0Û×ㆠ™µœÓþ¼½$”^e¾ÝÃò]D£}¨¥É7عýÜø‘ÁÇuPB)à³ÐIë´W¤²8¾NÎË#45õö¢s=P°e‚ê°"vݺ+c©þ” ÿuŒµJÉ©AÎ`Ÿ¤¶Å:ÁõIæ6£YaMD):tºqÍ;‡æÐó:6^ãש±&ÅŠ¤µ‘)ÿY}ºÞú•q.‡ ±¸ãP!ÃcÞH íV$¼Í³\r» ÒBsAj\Û=ñÏN#j“©zcر¡‘Œ,·‹íGÜBOÁ¡_ÿt¾=D€œ½Î[úq |Ÿ{kFIÏ…­YrÜP¯ âÿL§‚‹ÿÕÅ$?Gz2p±îltM#9WUÙ ??WO€!¨Re¹³Îw.7{Þƒ‰Sël½q}k•¤D¥‰Ôã#SäE„É1}O}P^O¡ ^.Èè›Ø»`Úºœ×\Gµ˜‘h¸S^G‚…îs'¨Wø°WÏîË j›Í9·®<=ºð4eûÀ0,Ü5Ï«¹Æ4W™eµ¸ ->*/Ü•ûŽ«I$j*Ÿ¡¾— ¥ãéØ;è$tËwû I+X3¶ùÚÕT™eY ö`P sVšþ,nᓹ}ŠDŠLš —e”·” 9yS,zÞ7ð»ÐŽ šæ.„nK(Y{9À—©x(hØü0üN 8÷4‡{¶é‹¿¬~ÿGÒ‰ÙªDÒ UÛm¦Œx©LÝîBפ¸î ÓœV¹£c%§ Hyâq¹Ãv!?.çe–»|¦lÀ²náÉ–=’Ø™eÉ’L9gLEë èÔi°MÁäøâ°J Š$W¶k%¨¿.xþ2u Äܲê‚Gß~èŸH,½4°ŸôŸÄË}³ïª¬uÙ8ðeúhú£Š'ZÏznHFtHT|Ýã£þ#î_ïD7ë;F‹í]Ç <Ùeñ¥%Tê5ì_¤Ô°TËQ8Çï©×'µë,¨M¡áqKm…÷¹§x*¢@  ¤–éCOœ+ü0®憽 >¶ÈÅkÂ3/“8nT8Áç~*ƒ¯ý óyö⩯¯Òù¾›¼QéóºÇš—)Ã#^HqõJº¬O‹#QÍ’HŠ×Ä€ð?d`U¯Xc»©Ró§@‰&ÈÁ:Ú~*¤7ûɤÎ)ÀÕõU@&OŽu®T‚x¨DL#J_waD„ %á9«’ù¯[7½$Ù;¢¨×o»‹– P_McÓ·)›sÆh­²!ÁéwÓ Ÿ±:µwÃóסø`ôDîYÏè×ÉÞYÓA|;îìT™KÐXËúÚ]»ašEs*Ή>ƒ>ž{¯ßFU¿Œ‰jØßµfm* 3jñÄž EÖ?Á¶¡¶Ñ ¼U+âÁ¸b&yÿ$yÖ2 ¾ì04¡Â{‰)”AÈ,ïåÖ‰‰*Ìà8jˆ°üæÑ“’ì}*äÍj ‡g³ngm´àNE±ÏÆÏý&öKÖ¾Ìäý«CûöÌi±èL½Öc»ºi)ŸŒ\ý7ÛáNÂ(<Џâµ)ô¦©&½Ü2èØ©#D}³ª&ÇÐ$ìž‹lOŠDÎDdV(¤Ë¯‡ƒïÃXZ+g´ÇÌ"ñRëhömÀ+ªŒ“´ü!O¡k¨Ìv†÷L7¿ )ï-Y¹Ù‚ŒŽEƒtÕ8{ôlŒš÷ݨ>û&(MQÎR—I•ÆmŸ“áG¤Nõ‘6CJe$²S{§Õµ5xÔÁ¾Á‚ÂÁõ W}$Se‡˜Ð®Ôý#’Ö O8*žùå'ª; ?:ìnù¦ãæt—¸(Or´,‰Ynû¹æÑ%7ÐVDz·¼Ãüóä%ÕGÅߦœ¤Â‚ùáðÓÛ, WùàqUðSÒÒr½öêgÛ!õwys7µÕEïQ>sXYö™vUñ­“Õ*:L­kÖž9bjÛ\ShOÕ¹Î}3áq–y×”­`e®æEiKâ©d¢uTHøbT¿!zSõ‹ØwíÊa†0ÿ-À³æRã[æE"mæ0¤¼ó¶!˜œ]^¢=ü‹~ð¨Ú ÎîbéHUÎFü¯ëÛ?»prfüït»¼µÌzöñMíöÑ’ÍS_„ôœ‚Á ýؘ3ŽùÓ¨ªŒö-“jW>Er?ÀÙ ‘Õ‡Yp@¢ÉÇ€xâCÖ*Ó¤eC§µ¥eÛB^A!êææ°âø)›¢JBùv¡,ViP+Ö´²ÿQ^oqb“7pho’ qÆ2HЧSâq{¬ÖfÞŠÄû>z˜¶aufûÆÉ_Æ-#TŠò_Ç C#a<ºïºz¯S¨áÓZ ƒ?š09€Ä „³‡÷# 9Œ¥9en˜Ê¯ª.“]¿7ML˜‚é½µ®Oe‘ÊÛ.l’‡åþªÕòm6âøÇcçÍsàËSußOù™•ÄDù啺È:¥{Œ8q·±PîºZ¨l×”ñ™èm ޹>T0UVªUýL0  ؈¾)®}NÏOcTv[ùëÊ øŽû¥túf쮹hæ(‹B^/ùk !*fžÛˆb„¬5<}—ÔŸfÓ} (Êvâ(t2ý.xmè‰Ïòëe_Á{&Ó¸åxþ/Ãê‘ÁÓ–»½r‚Cà˜² U\¡#8ç8™C¿‹­å²ÓŸ?ië6¤ỂÛüC}ÁŒüE’G¶ñ;D{ƒç…gʉœø®Ìl;šµÐTp±‚ïb¦]r^ŽwÖSü&-ÈÆmcï!Ž¢Ð5ð‡XBlq´Ð< à©0 ™=dчE ½2/âÔÝgötR)…QP@îÜLpJú[8  xï SóT‰þEÁ@`¡ºn侮°‡a¸g«ŽéLîÎhÕp®#¨¥_Ø_®}ÊšŒŽÒ[ɉªª;qŒ*jr/ÞŸ%wÉÓ¿Ù`ÚRk&*½Zv̓+òp¤éýø7›gäeâ¼ØçÍ"­/ó ‘›©±}ˆ¦w$ùÁeË)5–p|ö—?‘©ÉF ׎Eb!îœçô4WÓºÄÚíãØWë¸ÙSýlaüJSà–¿q^•b@Ó®Ú-²+O¼µ”Óz½WÏo '\=eÔUÈ0!ÉÌ( i®7g`"—ÐÅ[ægËf7óµéË©©ÔAíó’O¬Ü¯ùëŒ2uߪ8=…;­I¦á’ÃÍ©&Þ‘Lò²¯_Џnä*9&.V)"Ñ<ÍgeŸ"X­ì#ÙºØÚh¯5ø!Ä7¼W‘úÕÚàOà˜S±‹òÏÔÆ‚hÛ@¼+ÉÃííFohPû{8ä&fô  ( ¯µ}ו•ŸxÈK”1ËÅ9Ýs˜”Š#¸còWîÝÙ#o1´p4÷Fnª;yOÐü|EFSRpuùH`¦I¶©¼ÆD‚†`vÁ£ïâÖºjerV/C Ž0´R8Š’­uÆGKʵÝQðAûfŽ1 ÿÿMå–q]ìR…v^ÀBC͵É5AÃÿV×<ÐÚÑ0žpàgúE‘ÓjxÙʙޔ'Älê@ùH+A6·Î5aÂó‡_Ô+È#TÛJoÞ׆¯‹Xd¡³L}TrukW„ ^¿„%^å"Nó;ndlóÿcËntP´ôÁ,Û$£~¡ÑC!ž—‘èßžäXƒ­Ôþ…8›¤è(ºøáô½êLÜVmEF‹tø{é‡!¡Z·®˜HŽ0xšiSûÀêàe¶UM•qc±Ê’åé2“ᣇÅ|ì…³œ¸ýñâÑ0H¸®œœ¶LãJ¶BÊð–fâäÛ8ÎöFÒYu#Iɺ¢x ¢Ý〬û Fz°< bÆy}O| fH~íj¶CÅÙáìþéEdt˜›j0_zF¦F29Øt ØË´uµ“ježžU(P'V ˜Bu\(…ÜF¹ ¼,©’ŒÚ¼7ŽòUxÕ ãœ”#Õ@ÉÖá‡3Ë1­$:»0îÙ 6$Íõ0þ¬q«álÚ| Xa“^È%q ÙæýVßáÍrÄ )6}ÊÌL£¾´÷6Dô¦«- ç}ÔY&"L/‘Óš±JÎξ‡zX:Мcÿ~ÒôÃÄ ùtÈv” OÒâÂà|Xh¶à î¼¥·Û¼o±7¦„S®O" +ƒs{jqè'’1Ïjkò¥˜‹D~ Ss…ŽTN·‹‘ßR1N)FŠ®·GªÃÀÁISðIüô;ñ$7A©¸ÇA¿æ(ÿAo¦ “uÀŸC󧚃ZŠO°=•êѵ‘Êt¶Kñú·Å…€Ñî4Ÿ­¥ÆÐb¦‹ÈŽ6”$lœc€/Â*=Ý·‡ö+¢Þ£ƒˆð]¦yÔêê©f2\¯ÕøS'½±Øª8tÉòe¼½fÄŽ¢Ï¶Ì¤ø—KqUÝ)Kèàè=b#F(bƒ~HŒ·W…t<ùt/éFóSÝð{VT`ÿj [,:’ÖÄ* x ­Àj<íÌnc,æeHÝú­†F©1¥•¬ ɶ¡·Ð7Ñ{]HUúüH n þÊ"+3œ;¨mUi zÈìówÌäãB³ˆ<†ÄYåb˵Z/ Ñ[¬|²2¢Îl‚Ì"WÝ/}˽=>»êqÔl›!]¥LqãîsNP¬ç³vs»êigWÒçàjÖx.]dÉŸ“Ë™ [×ì[-æþÚU…™®ÔSA|h§èÓ$£-™zèê1´ÆPËÑ ¬|ÔèVN”µ|5S²›ÐñšMã¡°ENys´´V²x‰z×~÷5 â²bLÕ’õ=g5æLÁ4c.¤Þ‡è)¯¦ŠØ4©äå<Âl¾ú®è¾ú&sž¡wV˜ g˜¯YN²;Š’I~’ؤ ¼Þjã^ -‰Òšñë\^èÛR‡ ý‚2µ1”?Ò}uÛ_æËÄ.œj¬ªb_QKßÉWZËT·óN¯p?vÕ ©Ùƒä«Ñ,Û›Ó¯ws»‰çòÕL»(IÕ0Óp1Kå«WÜÝÐ?eÁÙ(Û®/å ¸E@GÕ9c›m¹t³¬|Î¥L§;ÔmÏ=0~4@Óu#‘ˆ°´úYÑ}h,3týý¹µœ_+eI›q ä®÷í¬’ 2À’T§PµÉÑp¶i`B#HGëƒ<…%ùí0YéÕb·iD9»¶Wx5C%°`Ý=œ8š[ Û¦ÌdPÙn³i ¾F®ˆ£î™ˆ#,ƒëK ð á· ©Qê;Ï5ìßê>«½”@z¼¸˜}ÍQÞÜÔ@Ls­`y…bð°êFu”ù*`ç‚™A<l®¼2y1gÝ4ü§(Öãl^vã³Ê·ÿ CÉ‘nšu(,_õŽ@ÅI9L¹×!˜džw ¸ò]Ç#û®DèÊz% ‘i ûƒ _5ø:?nbׂ€ wüå …ÏVy0çµ$w<Ä¢u‹»FéqߢŸ²‚ Cp“áôkFUó¶PªÄJ>’YAï<×™”W71ÙÄuò¾@®†2v £»æM4G‚­L¨úÕzå+Ýp|Òšßsµ2gjã×ë;¨ÅñØxi¸Îõõ#$VUÆŒånd. DÃÀ†°-y"—n·NÛªvÊ }ºvq9HD½„$å‚¿zË–K=lt 7Wé_áp—5«) üúACß©ùSù ]üÔ’dž“„fÔ¸é)ÌûG:©ÍàïÚ¦8E뤸"UéÓköaCR\CR‰àoúósÑ%ïÆ `$øyé›â‚²2á…ÊÒÄ­™{äÔ`AÏäM€‡5ɺ•¯I2ZŒŒî”'û¼ö 'ˆÑ¹3 ?ô½Ñ·åMž½2Ö(ò—° ­o*kÃíÜÈ}»{·mÀæ…CKèJéºÜQ¦™¾m?i6ƒCõ`¢|Mîqëàà[áò¸fÂ}t?ÜlËösSÈRõ>8O%˜ ÿJ¸r†qÚ“7Ñ[”GVÛ7‚0îjäåþO’ _sä5Zƒ÷ѼZ—œ+nC‘‘6¦ˆù{›ÅþKS’T[™ÉœG¹A’•Îî¥.ÌôèBCÓ^\¹ô=Ü) f¶+dûì X~¸¬Öê¸Ožõ¿Špe6Á/“1%Ðü/I DsŠo(Ó1·86 5(˜ÚØMš¥—è°ð’gˆOž,‚Õ`¦(R›Öç™·:²ƒ ?AýÁ;cþG£…ãЂiƒ~n hîøÁ‘.–< ;z°ùÐHiÖÜÛ~`Öç_ìïÛD°ÝËK˜„Ä ‰”ʹ“€r|nQ(2 4%¡“¸L/ó¿uB±ñaRtÙ%»öÎödÛuγÈÖg73æ~„$}È&™Ÿ(ÑêºpÒ7ª2}ÌM'©Ê91Óåí¯C´4 ~½úˆ°q¨fŒaÑÊŠÀf¹öÆl;møÙù>b®ÈØD&(ò[e%§0(EhE™›ªâ·e€NÏÁp)¥uÑÙzN¶9ƒ@\8¼þëùÿoÝ„”‘)…«>Ú|p{’”T…οöíˆAæV Ûê&÷âÒDÉ“rD¸èœ¥ä «~i¹ô„Ý 7š² ûh:<@øŒäs«™‘—TNQ.S´Š²ºcs¾]˜š»¨‡ÍÆ"˜Dü[;Ôz¢'‘_œé*镊FJ[]‹¹Œ«ö®hŠŽ&¥ªH2‹àèÎ-\HrДîœ9vû+—Ý7f=•„ÕóvÈtíqg…:Hà…jZ½9B?5 H2CóT¥}cΈs§,6:+W`tNFzÚ‰±uJ]ã@òoE—Ûõ41rŽBi†>1ðîÙÔ‹aŽö¤€\å§I“Ô¾ªá(. 9tµÎ!ýÏHÂêÇw² ^­—5*ÐþÒc~:IÛihœof]én2ý%+‚n‹u,!Ñ"‰ºJäÁ­Jë?y»Ch*Õ«çO«z@ÌüyìÈ›'0õy&s´úÑçUê¾ÜŸs,Å–P¡½ªD/õ㟉“ÿM<¹¾[uú¢ÜûÞ#Dõ³’¸æ!~ (ù76щ–”ƒ "ÔEés¤Ìñ‘ OͶc-~<þ—Mð>D©?ÊBöu¶ü<3"¹Ûsgà÷è &‹è…ÐO¥‡cz’.½×Qµwm•,Õ…hÿf”Xe:ÿNA¸,@¥}¶@@T#c7¬Ø‘ó °¯ÿ:°– æÂT_ÔkD'­ãrb±Âe¾:¤I¼Ý=PÇöY¬¥¬]¸¾¼Oò'¤j€²ÌÕC'› Ù ³¥S3ƒ†ÆÔUoY#}-¶Ï}-„þ"i¶ä¢Ööš 1êT©Ñ»È@t>¶$ä[Þ²2sÉ\£OÿtiLàŸ>#uk)h `)-Maú’Ìm ZSœV§°…Ù¾tIÂHÖèwÄ(Ê€%©³Â.Äì1” Çe©ºmUÚÏUU$oŸWâ Ë48O-e¥m£ÐnLá‡CÕÙ-¼/™uù£—6t ‹|„ƒYï°Ñß †B¿ìAGns:K1¦ñìs‚ªîüd2‹ºAù¤€ÆÜK”æð¦îŒ!7Yª K ¦'ųìEÑdaG=ÖÓƒ¨¢>ÇáÞ´~æÇáÝðâ…xêIi7„§!§’#èÁ}Ê‘«Ìåv)¾)z|0Q_iWPp+Žß¨µ,óúW¸zÓ½¡ÁÚìJÓYRû«Þskì çÜ'‡´MD8ÿ5µ$Õ¦/¬6 oâ$܃õsrÐå=…¤ávS™¾&ÖržÚ­%Óͯ“×7=5?‰[ñB­eAD#2à‹ÜWS(˜®œuÿû“ä ØÒJ£í­ua·æ  ž3®j¼ä±ÝˆÇ«ë:ÃÀQ7‰©c –§èxÊ–ø±ŒäË“ IË7Ðí]ÐI×UaÂùÞGå@ÅÌçÍ%ñ×{\?å¾€Ê1Û8Ƨ }moÍ.³Ô|ãÔe…LÛáŽÓÈ2fa×i·Q`·Dd£ÿnŸ‡¬–‹Û†:^%BðÆù./Ñ ´4O5V !sgj„`StoCmMÈê¬ ´û=|îêÙÐù÷•öý¥õyÏ­¢?„{Qéh€LØàÓötÉ’Ÿ‰4d–)h.îÍÀ’?·/¼“â2ç݇¤uø–·‚”{¿o9õl¯\jÜ\ ±Aâ„”å/•1"ÿÄ|£AÃuf=«ª}ì”!ÁRˆ=é¹SjÚK-.Åš\Ÿ×²>p÷Ä!Î*ˆÀJ)\ˆ €ù]ÊžšìÐå0_ë3¦û½¬òÚb1©Z S >¸±Ãù"Þ^Ë*C³8×ÂÅ{ZræŒEóþÞÝsÕ'"·6±xÞÌo"{‡¯‹0¤¥;·iHq"U|¨¥fùCÒ’aÁþ >DgÀ›Xq1Wy­axÑ«pJ„8Ê,„ãQZW¿ýGuø ÖËdÐ&¶#‡/d¥¥z3f=ë1µ[ð0¦˜ìTÿE–^+™ŒŒu²_¥¡Aä1ÛμgEƒàë|œ¡þ¦îgˆ–mtûý" ¿Æß19Z4ç_rµ@î©pAµœ§©7šê7ËÊÀÈ‹ID‰Ræ†í<3€žËàWÞ×/Ö¢çÚåœË›ïxà¾ÉmÔ0ª«¼(Ï- 1e 1ü'à_TI>£·&±ÛÊ5æBzZuT˜ò--éüa™3o Å–Æ-VXâõY‘"Alh¼ù &8†'Ö`¢IXácÃ?­†>æàw ¼j$˜ßN½›6_rì$Óú ÕÏÅ#^I°\µLk‹3ÐËÔü.w³ýd)o,ýÚ˜ æå›*ü ”æ‡ðî®+TpÑ3剡µ<ûªôXzŸâÄûŠ|ŒØ:»vꊔ«-€àÆpS üDYu4”à=0ˆo®V‡tÊ—ôÙLaPvºè0›"Ê3ÑzÇ%;ŸŸa]Ž©´€nÏ÷ÛcþŸü(6gÞõ/n²rñšô2޶$ª¤Œ…ªÀhä¬ß#[ål7ÅIZÁhP½à{„öOÆ–UYžæý«@a#¹Ãƒ{ø­ÌPÇЄª!³çGÇ “tÒ±jL\Bü”Œ!Q[ÚGàP³ÜP6Bã¹§*~ÎÄ1 ðœÅ€øî4¼é9`JEÍÒÚk)1-À›Žš"?2Ôݰ¦¹°óGSÍ&¿¨ƒyQ¼:(€×/‘ñ=À¿Ç2Ò…n¿7]ÿs”²¯‡Ì4AÈÙ)œ_þ(\Ò*5þqNH2íI(`ª]»•êßÙÑäÿXˆÚ1û@¢Bš‹ì)ÔjtŽ<”òU ;æÑãøD~iá4%ÉÙ­µÐäPMîŒlîÔ…üDÜdÌx˜å¼P¨ÚœÖ­ÑæM¦k¸5ÇYK—ƒÅ2«vú"úR™ÈH’¨'+Áu©&¨·êõf¥~)¹…‹›‘,ÁžÈéÂËQ‡p!ÊA6\ìéœ01¿r’²Î˦ä¸]úÓˆvCðø$¸|}oxKx}-m„fŒëNo4ÞÙ ´”åãÌD¾º×ÖA‚*qÑŽ~ÍŠ)z¶Z¾ äd@‡_2bãÕk mN²l[Ñ3©P3$†–ž½_×§­%a²’˜¿6/ý¢4)6?ÿ c'HCG ¦XÍm.¥W½<[¶,K" l›3öÈêk>ÛE"k†¿6ñ ™^ÄLmŸMQÖA8z*y.îÇË·ëñD¸.cÁKÐQ1aª#„y_Vóª\16(ï³@AtÀ‰-†ƒ„·/úÈ#ظSÿUTfÇŠ}9ÈÆJ$ZšM£ÙpU\ñ)d¢ŸåÕ¡ª&Ížr²˜‰­Ö|V™‡se­ßþÞ¶£í^ZðNIB6J3H‰r%ã®X¦s»WÄAëRå+À02›P¾OG†‰ºuÚDl™õäoĦü´ëðë§ùõüû¿±rû{þ|ßoa7Û×6·«OÛÔçíêËöôþñÎz’ÖdÂq®y(o›çÂ=‰•ÏݵÆEï|± Ê©ÈÝÖÔñy•MÃпJ¨]½mc{ÃÓSezûAx2#™Í—˜øÓæ÷¬äIV,ø0™F‹>«ê¹ L½ —úâ’¦ŸÎ.¢\•e°|þº5:ŽuqâþA‘5=(ê…G=‚˜£xd•iG ' 3à¡`Ö¨Aé[0ÚμT@Ô;4Òûù|%†$´ÄW Ž¿è.x*ý'è¿Ë§ Îë¯õy8ü·ª„Iù«:ÛÙäaæ.+8~Ýç€Ý3ëIdÉ`²Iµ•Ž/HÿyÒêt¬]w*À®îÔºòC^¤*oùè¥kâÞxºNi_ €öý'œÞâÉiE_û©XYá/>5&K¯»LcúµäâF»ƒ¿œïÿ ˜‚%ódâŒt¥pÙ#á]¸éÁ¤Å[Pw 7¶ê“kMñû´qZ©F™ ç¤ÞlÙ¼(Kq r—vÓ‘R[þùb2~Ç9É@,P?õÏ ¼ƒÉ¹í†vbP¡º1¦ÛWtœ‚S¦,©¹MïxCørƒ]I‚n(Ûõ„g|ñ¦Ì1 À—ÐXÙ»ÛÐÝï@ÞtNP7i…á¹?Å{;þßb]ÿY±]HþMJýü»™ÿrú;YÝf›”)PäÎ4¡GË ièúæÇáRQš»ƃ}ŽrŸ+u*B‘]A˜àjÊæbâ|… jÕj¹)µUßùÆdF­8[q9Š*¹«/»yê^Ž#ê˜ñG÷¢•Üô"QskÄTŒˆ<ÌÊÖÈÈ:ö¨ºÒYNQ¿ËŽL=Ñ7Ä¢} ÅÉÝkëµ”.³?®³%äS„28À®ÀA½ÝÓwõ¨Ø#ˆ,ZW!_+y»&KM“L©¥2Morœ<úÊÀšZn ¶¿’9Ìz#–ö!¡:!‚!ÆÈ‚´·5ÁѪ]xýe&Àë6¡èÐ ªøN¤àZŒã•."Ñ|g¯"k§·¡ ÃÁ”,HØ“9©·Ld: ”nL û€6g™•‡ª-B(|±–õ'®!–%H(jýàI%£«¶ÍÍÙ®ùÆ ~‰UmtžHJÙ´×$¶KÆÑ€#©g¼Dõš$Ø‚Ù'$øÚ=ýæ¾Y‚¢‰BïE!?‘Î5ðÅG‘½}އöâÂͨÖ?Ê0Npî-º€ÀЬÿx±Ü' ÑÝ:!úýaxy¶q¸°k¥ †9߀²KØ”t„š`Uʾ‡f&þƒÿPN(FïëÒK¾.¨GŠnú€8 8P–«:†RlRú·| KxàèжF'àWSWx cçKh;ôåªpJ +ï-•*S»¡ÝŠ–®¸6EB'»ÖÂ;)Zé;†J} 9›]~ðJQÇ×OryG*«?ºßÍB蓼v§[…³üØAÄ â8CоZ¹ær†Ã(‹Ê#V€ Sk‰(cª½kÐÿ)þæ!uôúnŒŠ§ûRBK€%¹óhmÚ͇„8*eå_&’m âéæ1#¾tM<9 7ì#û˜Ó0u€QNõ¤è„\¡vús'aEûS•_4W=ô“jíëmŽÇÙ"H¥€¤‘o½"×úê÷Ù2öb±&¿ìî¢\‘¾ØÎæ† ›É’qX¥Œ³¬|¬ŒËuü+ïĦH=|bÀ¸D²Hl#*8²«ûT±[ûGÓûÍ”u"„œ[KÃè& ~žòåÔv]ŽN”Ó†dg³D ¶‹zÆ*r8p\0l4c]îãthYI=gÿ>NÌZ¨ì‰ó}/ÌÂk‘ß´¼îB€“<×13z,£‘Bðz:ò8;·Õ[šÛ5iÕ=] ÷¾#†ž±µ6=ך >ÜdNnl†Ë“˜%ýà©g ¤ŒQ…b~ÛŒÊBAe¬ZŸ]€†-Œ´DÍ‚ZÝü7Ò¬«ô\j®¥!y'×6íd8ú¬¾HË¿úo[ÀHniµP ÞáàÊd”¾Èß—ñ¿å@ÜWð%ˆølÊn©f¢ú‡ïê€ÃÂq}±Eµ®4õØŒ6ªÀKR@¼u¸öîÜâhû蜜ø?p5KÞ ¦{%úð9Åúg2ŠÈ’´ÕS“`¦'½™K—mß%*s3{ègþ÷^¡9;Ôº°U&+˜jþN…ÈUÕYóq ¾ÿ=Ûë¤uL=³ù“–ýì‚`?ôžI‘ÐUeùÒ<ôNèjŒ£C5_·víº¦ ŸÐ©Zè7Å^ámÒ_‚»"{J4†ó {Ý>[‰7>œºÕÚe°>L³o²“Gþ˜1ÄÀ2MA}®è ñ¥jT_l–-½NßhË …“Y^–˽0&=Û™ø9i~lóò†ys"£¶Hó¨¸zØß¯5sXÚe›• ÅÁ‘M„IåmÊ (ÖÿSHru×±þ?9e¥i_ô) <Å·†O¾ƒõC¤ÿa$nÈB\Éÿ8ÍŽ„†w[¾‹ þéǰ/¿/ cî]¤ñO¶0‡»yß™®y; v ‡jàbu Ò°Åê6 ¥Ã}«œ”*l—•Ïro\[}3ò¸Ù˃}È3Ü)°X/ú›Æ Ó[ã6VmðâBÁagL`¥¤¨öóhŒ¯V1ñ˜M”óGÿ]c9KÞS&„2g~¤ÄîQÁ¿‹:ëÓ%äudlå1;á1½ò±ÁÏ¢O íHÑ,€Ø˜ˆEê¡pBVK´¨þ)Ä É\ö™€€Ã/õcLj²æ“.Ò‹4†ey\…;RB”Ôàz–J³xnV= …£õK°¾x˜@¹XjºÏ€Ê4;R„ FÈ/`ϵŧ'rÆ›ŽJLäŸ)ªs„¡7ª˜Ï:di{ÉéwôyM<$E…3“^ÿl(„ΛÍÇÕ”ؤÀö-¾Í/ïküåÀ[r•2p0»~ì¯H#¶ËãÁ uuQÜÓOÎ’æØMx?nz¸\ÁBꯋ“=ëØ }¼€&ƒî{·“‰(GPÌÌË*ŸJí±SröõXÐ f†Ã^¢•`%½Ÿ'©E»{'ÂÇsi°æªFä·õBiøZ˜6í>œh1`++¦¬øŽ QmMveö(Q9reŒúœîü!S¾òŸ:Ô1•¤ñælg\EtÐT,¾Ü+°<ÀN%±))@~WVf‡41ß¡³G[ÕeiIèg¸õç!èóàÃØXÍ+vúÓ_N2í|_6ë¤ñúg@‰_òË­Pûx”€Û‚®WçÔªØ[Ô¯ú+\çñ}ðËÖ´Ó(£¿!++ÛÂñeK­÷R0ŽŒ%éï‘…wð¸YRX–’áДÀ ÿ1¥Ûˆ>£x|Z¢" E[cÁËöTZ1©QÿLÆùè*iOÞÊ Òô[{õ#F̺N|5¶çyžŒ§î̾k÷dz­Ç;Ó/ .uªáÍXYÜ¡ú‚L¦+sÙŽŒ½"ôþiúF§ÌvG§ˆªÜSÖƒ’SºŠEvc‰/Só³€ñLKv§\PöËöýϬåÏksA-[;p®B ýJž»¹îžïoÍéöY §"êX0²¸jLå P–BžMöÀ´ÃWäû Ëš8·ë÷—TšãRú:[gMbI17š?#õ7÷zà-è j€ !4Y¼^ Ê|ŽB’^å`¢Õµ‰ BœÌoíú½aÿxw%r¶2ði-²Ïú‡~¤¬,¸=Š<ÍO1ÃàëZoZDáYŠY©úÏf)Ä/ÀG-Ç¥¸-Ú ш׆âÓ÷ˆAGÉB²Î7¶scÀ†º<¯pÒ<ä¹hC³óJÜm$Jß×2¤<}riÝ›g/Ýã㕇hê}Ën[8îh0NTfw¾p ¿Bz.­ÁQ{©›w]šf›|¬Åç埢Árh>/祔9ù®yß/lQ=ôSÐÓïÕEr/-üºq»³EÕwìÞ=ùÇ^†.«è©Ò0ËÆî4œ:Èœzb,ª>𯑸ðÍ^êÌ 9nüsÆrk ¬CËÂùÅ®Òî¯,x_‚‰.í~(=¥ð‡xO?M¤¦žœ7ïºe\›½”ëñü¨‚YiîæKÜ[ûÝèòÔbÍ3§ñýVþž\™¿ÏÆÏ²þ„/e§* OpûfW^=Ö=Aºê5§,Qe\®Id‚ì°;¿£‰º‚vНq•U›{¼`’ Í_ƒÆL…é¹fAu÷g ´Cªk½íc8E][¯¯zã‘dY ¼×áïÀ‘+ÕÂÿ:eÓ*$óõ·,&‡vª%=W¦#ó•v.D6üLJPÄóÒ¤laB˜›#¢-ò‚j,Q"ÉÖì‡ÛÊ XäÁÄå>' 9M%7üÁ]2"ÔŸEPÊøÛ±¯âÑ#âÁCC2æm“:Ñô¡bÙüˆ×ËC·š‰m‰4¾,tX5Ìo’ñ„½#ø‡ Ó„‡›ÀŠ`_(Ë1EÙRâ-­?}¿Ú™ßê¥.8áÅ­¢>SÍÕëï¡!v 4êé­4†_š]ÿ~ò~ÃZwÂ3˜cÓóóó-ÒetcÀµF–öüT2¹µg±V #RYø”$è½K.„Y2ñ“'¸ãT纭¾\32D³J–Ú–=À1™c|‰ÕËú:–m364)ν<ìŸ_F û›Òž»HjÈä5›o Ád¬ŸëÊ{Æ"ÆÎKòËEÆÖÙdïj”diïb[uÕ^› q1oA‡áÑù+îÇ ”A;;aô¤ˆ«È6Vk\Tö)Tcèë G9<Ε“]©äÐö‹Ä¥­¢S‡ ƒ{![¹ŠdÎ,¤6?0†kÖ™ë(÷÷L dõŠŸ‡¤ ¢Þ{‡Nå±HÐ&ÙÁ­ÁÈ׺Ô0êÔhZa¸"é½²Ötõ¡©•Û¬eVU À\_zß½ƒóªÀK=èJðRËÙvžŸT[åîT1æ䎰ô{ÃÑð&ùúë7UmQ""‘?gÍEqÌ,ËK·îÙV\ëb¾3k–¦¤-¦Kû¤æâr[æâRÍ2LJ¯ ‘ç‡$H¦æ€H€–ýô 1¾ôçâDÿ#­RË›1Sß*Ñ6}°Bø—Þ+ZŸ}˜Üæ1áê‚ÊÒÜÈ…8q m€ðšË—¿ß;Wó@ÚßfæûK?kòX ß¡Òâa ¡)“Áˆ·û€ëÔ8$Q|ªz“å}.Îᆗ˜#hBü÷œîE€2"Å¢5£-#ƒ”ÒÚÓ˜_uý z"ž‚á6ÏOH¨í[»P'#&o©Ã R¾(i#8ÔÞ±J³ÛÝŠ¯åü? Úúï8‹ „xÚ9èfêaPA·ä°Jƒº -[“w#uêÆ½ƒé°ºn*ç#á…ÚWÁU$Ê9¦ó´P¿¸àîÕ»X¶€[R¾ äËGoaà¤:Ë6À9»æ ǵ"Ü®ª$BªY/Øœ5ðOa#O#ÈUÑe ¡ŒÖÝhxW†# u9ÚPu™˜ø”½õ6äse·ü—ýîOŠó®¼é–j1rhêbYÝ»lئ{uLÙ¼˜½jž;Ó¿RGu³]qÏ×ídY ÞdûÑÝË^ + Kòý;Á= %õWø|»º%ÞÝ–èD~!_r.ž³ D¥Ú‰‹URve!g=Ô‰·P O£&>úX%OY°ëC®Ï¿]SøÕ q€HÈŠƒà%7‘lâû]¨#Ìð:JÄÅw‹Û¤,QB4—éªs8x±ýMy!cN‡ç÷7µF ©bG”\BF{Wø».3ùl°Ð’¶ü5äˇ?Ua۵糛÷¥û.£ÑûË ÈÍvŽtæÓ0’¼Bß+t­ßÝ…+^ö£[€¤µëÕ½ýÄÐät÷yZñÙ3Ú[ýg EÙ1á „Kb®jË» B¶„#ãÙPcÝMÃÿJQ<á¼^‰œÁV÷!šà‡fË_ÂW§N&Š4±y Áãˆ,è¶G÷>9n`ö:,· ðâ§%å@\ 8p“ù¦+ e³0 Òîÿ žG-‡‡-ŽcØ !ð=ýäoè}HÞÀcÓM¿­…qû è~i¼ëŽƒÊCYäª($ró„Ù< !ƒB½!?Ýr€*Ýu?Ô©‰ý†ÛÍ´ù’ª–µD<åMª_åFöÎ ¢ûç]ßæ=†=c\7Û«`ÃvÆp‹ùþeLÒÈ rc‡ÊØ9JJ|Üö±›'ÜùñjmA±?ÖJ¨ýñ\ïÇa(]€U) ¾] ån ùî0¿3ñEãÏo·¡ƒpë~$Ø‘š÷ ±HZb;”º’ÆC°„(K¡ž¸§·*Ž¥bÁ¤!¹ˆ¡¤ãâJ‰™,§m ’¢›ùÜ´vGY¢p™UšœqÙ¾µ.õTèqyÑ áððÅe™ ùöŠ ºËHð¦$;*ôX<=¸sA!éåË\1 Ÿ~^Ö¢ŠË(+Á]êá‚çfÞ#<“¬ %^Wð°³Ñ w@;†úàp9ä%e¸&ÍÆX‚„3y¿8îÃà„˜]cÏR@„ýÁÑ>|\¸[û”¿ú¬÷eÍíäÒUÜí9_ æÙË ãí4Ýnw÷ xd§±@óß_h¡¯ðc¦—#åp—Ò+&ÑôÌ­d‘9—¨úO”‘wÍœtNM¢ í‘ïÕ ®ê.·”%BwAFÒ!3XDW ôOG$ÿLêX‰ÍÈ XœãuNŸ4œïL]‘(‡È-'.8½-ÆÓK Е¤sNOü‚F³tæàCºpšyt¤HÿDMdúÖTò î£Öð¬¬zR»ô>qžGÌÅø¿ü†šŠ.ØäКþ=VçqwNP?;P(áT_ç‰Ã~5r±‚ÊšoªÎ·µ1q¾tÓ$"êõæL®â aZEZíÓKø*7¹ÄuÎ)Õa„@ë7/i Š!XfÊF’––½Y‰Þýƒ7¬BŸX//3µ6cV%¹.©_ŽwbA%Ö÷¶:d=¥jå¹yBâ'Å?!q?ý=3¶;é4(ñ¨\x Œºóaðúd.ѯ=³ûÙø0PEWÐ@Ï›U®ìk:*uѦþz&?‚×'Œ*.P/Šý°˜; bN@ Ý 6è»}˜Df~q}àifÍVohÍx —!èf øÇúÉ­`.L3K óÄR‰ïˆ³Cj¬GÏfûºÐ‡™*ã ýy•“?COy"'¯O‹,²žxtÑ)4õ8BZ¯§FÇ/G 1¤Æøþ †Þú씦QÊՌսÔ|.ãÝ!‹ol­» sz›(²Dz~±Ug°Ë*"å“Cá•Ú’å(bV†¢ÁPáðPâ… MÉÉ™tÐÍ?Ë XÐx€Eöí=ð]’8ä[pÓ™OP>±23¤q´U0‹ÇÓÏÄnöÏÙ¤l…\4vöŽ!F«g¦«Ê3:b¯N.d¦DŒ°Zìû¸4Ä(êIÿkosÆ´,† Ʊ´_4ã`YÓŒ¯KÚÓô)Êò1Ù²,>Í”ÍiS“¸µÇÆŠ2­óæºLQ*îS™Jbêê nÜ€~X ~»¨ŠvQA¦~¬DŒ°Gp®²Ùű®Í:š£BhxëµEhAç¾ÒwRY ‡VofíñIÚ9:,Ý‘T€Ü‹3™ÓÈgK°~‘s[à¾Håcõ‰*ëÖk8°ïÿ0pôkgV4Ææ¯þ=„Jƒl¸zÅðµ_ÐWj_‚ÞÔÓTð‹&–}TI²}37ª3ø´—9»ŒÎMù¬Ý°F!­Àäüa'LÚý¾Ý¾„é-;ìÇ©•_¿GŽÛ¨ï#¾%¿}ÿuw1ŠõlIšª±âwzå.p|v³…ÅßåÀ&Bf?½…â;j,Ë›”È«ƒT*‰z$ˆ+ ,ÈÀzõCÌ¿ÉXΟigi§‡^ý·…¢ ‘èÒÈ0ãæW4›N=ÅŒ머¨›ò£V”H¬‰(çÚÓpUhé êûþWð>ˆÚóqÖnðæÃ;4î ˆQKŽnD€¬3D“?(š¿‰¹Ì2ׯ¬v“Þ¶JTl£1ï YFN†>B•¾Ö#gëI®è³ê_$Q ˆ‹",‘f¶8¬UL8âðaÙ«›ce“©~ä;¿ySU°¿¯ý.‘¤¿ÌOj„Qr(çõ‰j ó€pgRK‘¤ÖéâÕt—…éÕ¾RïÏ<¯_ÜŸiRª@·kr½mÊb²(é””ÙœãfDO´bÓdùÒú‚¡Ê§í›ö¨ynZÏ–b@VnÏìä QZ –üÃ/Ž×QQ&ßM‚éI?86°b,ô*ø ¿ ¦ne&û“è5½¥þ_Š¿–¬Ú°—0ë-úûiöºèmÖ˼!ã#Ó„¡ÆJÿ~[ì¥#vÌO~æTu!M—\«êì4âÓYºB†dX~ˆ’±ËŒu^¿ÝG8Ý*›þ]¦ˆ;—@¦¥äýïc¶­Ë<ÊÅ*Qð5#BEb›»³7njYxrƬFBª¤Yô…\â”…d5öùØS g×$ÀݱMßHi@A M~÷•yÿdü5Ö5øÉ&^èå9!§‹éM®2 MJvÐCÎVCƒ]ÎÍòGV”ö t’"ñ3BŠ3&ÂèZ@´1Õ~æh£ƒ>«%ÕÅQÑHóÀÅ{¡æe/Kò'v÷\æÊ£"C+µao¾ï›ó³š›Ç6–m9§üЀNÒÔi4fóÂVƒMäm²p9(ërÑXÙ§ °p1*R÷OUª-p;¾CÁ챌åCˆî0pmTÞëBü)§à«KšK¶Ž3²¹ä4æ…8bvdÖîÛ~ /Úè{i€«„œÂ˜cþª'y{Ûg[¹t/”Ñq{†.®Û_'þi¤ÍÓÊÿoºtÈG—kw+D6õU³2-M½s5z>1uW9ÓÆw¶yî[%t=Ý åª0—ò¥ÎáoàõHHN ŒTÛ„N;¼½BoÂÇѹӀ¦¤1¶¦úƒZ2K_æV ¤@c®vOõ ö 8‹*lñ¤FŽb;)³¯]ð7m¤ 'Ñ_ìÅæ‡f¹²h èñ¡àNÕk%tAGéõôS ²=KH3‚dGÒ¦ÌÁ 0}‡ãmø`QƒÛÂÓ‘ÎÁœ‡Éx7?Çø oà;®@ÛEW8FZT½p@ÁAÚ²2%Ly!ڬǹkds‰ ®aÇUÿ_’¯œ«{mšLJÉ)`~VJSŠYú&6ÙË#KÞVhÀð¥¿îʹªMbßZ@•ì95Ö"ø}”³Lcæ±SÛ ä×Á 8è\¦5ÓÏêPI„ßXãöì_íØÛ·WÕ®8~­ ý[Sú¶ïõlF·a/«bo«h/«XÀñÕ•¥¥MïÜNè'd‘×/XÒ;¨<ÔÊœ”Á‰ÏñezbÜh)„5°m}U+§¸,2˜€=xpÚÃ@BÙfâ×VU•£c¾„ññ©q‚ýKãOKðµŠÒÅ ÐÉ ~;bèrà¼]º”^Œö´ºƒÄþéµK©A*a¨vÅ©¾ô‚û7w6Â_¹h­è˜ù-’ó9A»› €«˜•põ70 6Ëï³^pgÚ$ Öãc®]‚‡òË!JZÓ×EjÑd’s‘…S"˜ ì,!Ï>^ ®uKÆÙ¨P¡6ꃜFäÆÈœRY„yOˆBÝ-Ú¥¯Çlôƒ¢’Ì`è[«¦7T;×W C²ÏE@Bʆ#ÌAÄœ?4—'0Iдÿ<ätijð0¸‹;yJÑPõ|©ämm؆²Ç{ªÚBt’UðbR‘]zçUxÝh<Ε\cÎ C/é¾³u[™.©~ŠÏ†}„‚,oÿdTvblH»ØøVwçªîM¢]ŠÅ°G… [M¢ªT“9³'Π·—W‡u ÷5yæµ „a¹jí}hJA·[¶£}®Õ;ÉS.Œ›¬ ö ÚE:B¡W4|T€-—çq¥_ûüÎ&€ˆMšôlhF„z¨ÔA}v½Zyê}WEð™Áò¦é¤>·œdEJ\¯¿jÑ·ÉP`)ášPâšjÝʲå¹ûåD™]yv‘d)yt`S¡hDo·âM£?&ˆ¼ðä|RHW¡³/7³!ýðZë‚5Cžú¬LY]Qç¸ÿ.nJ;¶•q±’ûTËwzktP¹ôzží¥N«1lêíÉ‹˜»jt;eŽo\¶Bz‰´Ayø“Çíaã3º´á"AŸ¦¶°12çån2L80s™™¤] kX]Ƕ³h²/ÑÌëjcè8tDÓuòÀ—’@úØxUý5ÌÀ§¹¸­³õ¥ó@#çCÐk .ôSµRLR×õ0«³Jɵ¥©gÑ7µ’FåaÂ_’^‘)¸§i.Nô¡ÁÞE5ÐjÞ#®0_ô»&zòÐËLXlÉ]±Èn¥ÙF¶·ÎmÏ¢ $öˆº4ü"Z±—s§´-^‰é›±:W)ð‰Ë§§Æ›W²0}•$·¬:å;¥þÑœ–jcã Ë3'ÆZãÈ…0oåp7üÓ–ÌSà¼,·Ž¿3 Ô½½df["‘¦·Í~#œ¿onݸÔÕê­6Ç$%5AtÈ“p JPô@žA ’Iª#¹zªƒé–ZŒ?<>#uȰ6ëÚ½É[\Ìk´'aí§²'cUEÆ/[+Iyf 7гÜÝ:/'£b ÂÜ8†0ôyâO 7C¿zÄ1…G²k®H‡¦æg± ¹%úø„F™yûô@úŒ1¡‹çwSû©ôyÛ¦Ò{±¯ÍØú|G™VѯäÊ/2}Ù®*}°¯•Øš‘!åPÖ¸Bÿ]f…R_%Î{ºPC#¶5ákѤ˜îõ@÷ƒiÑÞ–n"DÝ xdÚIg²«Ï´Ú©°ª‰‡—íså²´§›@ö /áò‘lÍ}ៈr ö‚ü'Ég/oÜNÃ56Úó\• ÿ/Ûð½Z)¶–èú K^‰ô\ß žû•†^×âRYCs¶Ø"µŠïøù<£]ñ°Ñª&P}#Ò}ª>wº< GêSŒª oŸ<*ÂÓ˜ôIsI4ðpç /RŒÑâ¾ *š¨¤›—¹ÂÃæ&¶]Ìw+hL|ÑŽ÷~øj=AŸ-²¹˜¹g.ß~¡!rÒû¤2@´Ãx”k¬ï;ÈÏÇ81XõÚŒ¤Åµ_–?vR^ÇêGÁ±ýH,þ–LçÍêÎgXç ƒô‡zó¸N!t†fáÒ°’p›ˆ®°†tÌݵü.e¥„Ù§ØÆaõì¬Ws&çP´¼?ÅÒ.ÚñÛ FìôÓ Tk» Ã(3åïԌqÁHh BÆ äTOÄÈúHåÍí>å§³y•Ѱ˜‹©(/ý«U­„‰‚Áù†JÌ!!¡â@ÃÌ%Yu¨õ¨Êà³Ni`I-‡¹ý=ÎfÑìP#•J¹ ýg 1:/gAàp¶|ÊÕ[Ržo·ÿpö'ß­‘ 7ˆ¤èê²^0HÇס»+Éd‚ŽóñsŠË?úÍÈ’ÈÚ‡o áÉLÆb±¸Çß„Íf§3×…nÚsd ä$û…ïª_>/m¸Ô¬0#ðš´²,gSØÜ¦ì`=V‰ÁÛ.Éw“$ÿÎ$ 0tbÐyu7 ÕljÛÑC&âØ„Gí£ÉݱØ~9ÖŒàá"øÈëŠnHðÐAO‡ ÈQ¯s&ê[(pɾÜÔL‰!°ö–Îæþ ~àet"M<7‘È ðÍŒ‘ZöØ7Ûf­šlìÍê§þCŠšfÌ•ŸYâd‹Jм!e\Ì8#Sø4`WôÖ¬ÏHE_ž‡W 5] :™`|]¶\j}v©ÑŒª—ÐnªLvD¯ kZ5=!ýߪܶMÞzì1PžV1K\…'3yŠ«Ôß~¸ðülÇ^º…µØ˜È8³d·]Ý,³ÏP™á°!½C«°¦Z]KHGf‹3ÖFÕ_' ÇjŒõ£%šK²L‹‰ádê0•4}JZ·“ƒH!1 s£(§‘ÚEw꥖nݳ¼žV0®eÊ 9mNÝGxG¥Ú¶ÃÕøq’ÉÆñw|vDfxaéZ×Jh£ >ð6& *-„YšQЍaàÀ`rq ïwË­0ª ÜêÑšiDÈ«*W/qiØtb‘šPÑEB¿nÞ"Í­GÓ¼ÉËH¨Ö—;o(/IîĆfÃl(ž[ë·ª¸5ZªŸåA¹cWA…rÚV Ÿ&$}[q÷PN1Á>“Xæœ5±Ÿ^ÅÇÎY C’œ™õ¦²wÙQmû„gÉsHð‰OzÃ~ÜBÉ•²:À ÷!ðš-æN\ÎF¡åMó¿_[ç‘ GŸ±&˶ÊÂËÏ;ж« àn§?¯îÝ`XÎС~Ο%TiÊ%³’ƒÏSµy2kˆÚÙ@‡Œ†—½c©2‰/÷ÖöÂÄñ—õøßX@î0—¶…§#b9~¯a d?Xÿ—ÒDl"‚€;ÚÊÕ«,h=´‚\°ym5_­C–e— »«€æQZ–VÑ’a(‘(ÚD1W¹kÞ!ì€áVèãkMÌI˜ÆâÓËFï̉®€}n¬fIp /U3Ü\+/9*RÔñMê]öàÃfj“\ýµ^Xí5Sf8Ó\üøn µmÒ¢˜4°ôR>r™_Œ2Þ{:ó’×áQª 5§$7´’<@®6o7ÓË™±Ì;°†¦å%®_‰ªGÖ.RýU´ IÿT‘åžÌ^ú!\1ŽÓP`'óÆzÖ šÜ(a8r{ôæpz¥m￉÷,…¾évþ ~³I± ¶I:¤PûÍ(ÛrÔ“¯‘¶€ƒ˜L\†šÌ‹#Æ`\R.ÿ:Q^hja³éKAŽh™ç^ú·Àš¹¶R^úóeåR¹vræp‘Ð}¥ôñ²S¼¬ úx± 6Ô.‰-8\Rá;ÙM¯ªÍœÛk˜€ ½«¹<3¶÷eÊ î<ºìW©Cˆ®x]x÷Ï}∜¶ÍsÂp¢ã|h@ 6†•¶Y@;§zÍ)ö~ÔSzSt×–¶×)ô!ûÒÈ—9·>²ðÞw#q–Q5@‹xûû‹fâ 1âé¦fwmÈÜû}Ö=0ú¦ý,Ô=a ^öÙT½0„õÖò ·yU}â~õ ×ãö©?T”œW¶ Æ›X®ë†åcNORåÕKM"]`ÿm.|¸O+@®§¡$g#5 ì釽?–2™g\:ä¯ÊÿHˆõ˽ƒþ…­1‹ Æi;†}®:nÌ þ5 ^áAÃܸ7gDZâÔˆˆÀ“ `Wªfvƒâ²‰b®ÄTÒ¤àÓ»ååƒ*÷w¢u8Pcîð6hÌ$o`%ª…šv ®.Å’Û˯øRÃÇ]ÇS\(,ÈìnÕOüc_í*| ¯WN<œt54´Ÿ»hªƒœºXÂLSkp¯sá}7;ç¾ùÐ$ïķΜnï4¨aG8ı8Xç“WÕË &æu€'qút«³ñ@¾­ö'ôÊÌ´Q<0`®ÁyC‚ LÝcã“vÖtˆŒ7分Ԯ9%¾­½+d²ƒe›Þ{Œü"ìUAäôcKÕ6&‰v‡s.žñÎDZM=$ÍØyjå_áÒFÒNÔÇŠëø…7 ×8Á©Ûâ!.üªÍ‡˜Ì—?:ðS9Åà1dP¦7çÇÞTAÇŽ‘©¼­x×yy5>˜fM1šÍOd€²+Q_™mQoD¤qó f[‚†XZ¾ÄwðŒ’8•BÓA(iÞÔùްEAÔzý•hÐ^„ʃYkü¥ñåôÖ¿0Lì`ñ÷2ã÷!ÞÀÅ•Dö¢túéJCeÇ)ËÎÄðÐ?•u‰wZ˜Åc^A0#fÜB«Äª¨Žƒd£P–*ïtPs°Ó&²P'Â;Â¥!‡kÿYØ^GJ˜¡; Ì"0ã+è.¾L_ hÿ"Ti7°©áÜÕs#bÒÚ9ê\Ç®YRdíâS|­qW^ %£ füêLIôÿ%œÂ,‘\ëjXƒBü\*£Kx…U½±eT^¼9ñ”W’… ¨â«ƒZsþÇãÇ798¢$=p±ñè@ÆlaWìýlÊ_– þ#@öOÊêk##{¿jDÓÿa)xš]’°'è_Í-Î"³Ø7õŸƒCy÷ÛáîyYú­UQn¢Ñ?sÁ¨ä+|P¤mv”ÀÙå!L'q1 J"jc'/Ú³¾J¦ðÝuŒvñånìâ/V,*kÆ– È_©±Û„ègöÂçã˜Ó¯¯XN¹ÄêQ 3Èq+ẗe1Þm…˜‹ô%êÁ¨B¢ºÃ`xQß„Lj‹Ÿ 緳;Ľô5ÑØACëÛ{Àã’Ënªï§G0ãÛwP¥0Øsô$0!äf!PxÙLuüŸŸ™³Nc>ÌufŠ—»ÈŸíY…Ûã*å*s\–å’pË ä·ëÇšm´'—Ãú.‘]Pì*<ÚUZ¡ŠÙ\`'›èöþ b"ðD9ù¥+ð5#ðè¸yo6¬{B$0€ŸÔ²¥f\å,ZýàqŠaW¤ÌofƈÓïЭ eOÙfŸý;âxÿ3’˜OÈ"$xŽÔ¹Û.€þÿmp†bX“Þ}‘2œâ>@ß·j?h§íÙü!Ñ?VÜþ¡_Õ´X'ÈõlÝó”ý[öä­ó?kñØóC@è³ìDä³êІß¼û+l>ž’ÉôŸÅU¤}‰jè1ndF­f£ÝËiHŠ"~ˆ ý›D'ƒâ4œ]I·ÔPïÄ0{]I¦ÃÿO!ÒóLgš}Ê«A§}еîôF{3{A5Q²Iþ£Îàã’›Ï'˜ÿò’\®zDZ(´@lÞ­ÌÞ5Ix+}UŘYqˆŽ”á¾…C EåjKf’¯ KiH²(Äßf…­FýªŽÁÞXõ²ƒÖÑ`q”Ì$H÷Éul?»­ ÓÜÃZvÏ_õaÛü<+²ºãm„f¡Mí©Iïv}}rêøèÐT¯óùí›#¡XÿE-HHº»ˆr®®žìåÑnáiœ/çYò¬‡º†ìÉ«Ož|ªìÁ„bòä¾ê™Ç ±Ö‚¿ÿvJɵÐ[u®Éº*ý †ÔÅÃãÝ [í¶Cyù¥OÀF‹Öz)N¸Ã±8ƒ|¹ A¤#u¹x 1ú¯‡\äÂSl"²+Aã)¼¿Ë™}}”mwG@u—êз)v—¤…Ÿ¢Ô4AÚ‘O&ËÇ´EÖY.Ò-_ —c1”dPš@æÊÓ•Õ˜±¨¤õNÇÂþ­wrjÀÝÝcSu Â×sås]lÿG*hºŠZ%ÝÇÈ ƒ1ÝÉ¢üç5D ¨àohÑìÛ“Y"FdÇ÷’‹µ õö« 7j´û)ÖCWCצû¿ÂJ¡í¯–û‰—Dz ÔƒU(Ìx’‰ëÝÏj’0“¹.C•ÜbíÖ­'38ÇDÕö" Äí—Àæ hD;´ôax%&JÿqÄŒV‚2Aƒnœˆ«NåàÑ_™¹ÚÅhÇ „}!"[ý! ’{úà úyE ¢¹o"c©kÿ*‚Gp}”ª L!=2#Á.<ÄLªåÿSs.SS%Á;[`'·ÈwÍ£“¿äR¸ÎP¬…WÓ²—®Søj(ùöv®è¾(‘@ý›Wö°¼NËŽóØ¥‹ç‹6q½ÕRëˆcΡ*”Æúú.1z+r­û«¥Òa€×¢ Âoà‹à;é|-1Dí´ð ÉáÔ™þf¶FKy¸@àç‚|pÚÊÎg+Âtöá·ð«&IºV>d§Ò¼´òGÎ9Íׇ¦uxÈ7sf:{¢Oa4š¡" Ó›70 ºUsNAUƶ0W@9ÌT”XѰOóZÜ‹¦‘´>ËàýõDŒ9ÇѼ×[òˆq÷Ï´£E­D'i‘bÙ( ¸¶’rFîV;–”Ë}ô™ž^Š$ƒ U‹ÉA«¯®©Ùì>»}NkÄœºà íqw¬éò Ø¿G "6eǼÒúiÇv.*ÈMû ôÏ }Õ‰ÆóŸ5†NcïPøßú„@#V®¥ú…)1 ¾Ùë¡‚D{ k'AâiCþ—3q߯oþ´ y¢G¦»Òð¸:Î’ZúÚ”Ü$@µÖ`MŸ¤ÕÁNx.žÍ×¹D˜G8V!xYÜÛ¬[ma¢y3qiôУԻpcdñDfÆ‘Ÿ.ªª‹ˆ†/ñsžÅ®0·¿—4†WõuÔ0Ía}8Ÿû`šä]o¥O¯I%(dƒ´¢$ð$èÏŒ_æ;e(#ïà"v|í £xâ¡õDi|MÕrX€qùëÏ<µÇB­Ý]Û}§´Ò·ðÌ~J¶îJ™ 3âÀñtÇŸ;åðz’8N±¢ùÝúœ7ûQÇ Þ¡§(X&L Ï&}Ç+;Æ S3Yúl'RHÌñ²l[h¶»•ß„z†û₽iϼþ;-'éÊ?ä[L2“›ãLd ‡}ž‘wêÓN“ £DÙ¡ïjí„áùòž1 WQÚõÛ ÀQs¨¤˜™ ò³áøy7‹§òNFûÑ(^ý?¢°€ög…²f@'¡=xÒ%•€ÃŠ(P]«ÙYüÃ'olôû˶Ea ÀØï^l½T£'`±kdzfFƒøê¾Â;ÉËíZ|ÙÌÓAŸØN ƘE¼ŽUx¨’•O­,GÉs2/Ô¿b÷ \?Í“àSº%,=ää$ö¥Ë&ö6¡= ¥I"à¬d|ÉrgÑÿ7Ñ"+Ê^‹bŒ?g@H·Vç&Î:“Ïwh®57£Ì_ Ê“w}¿*RE/ÒqW?,–'ì’{¦ö¯å¯N¾¶V¦¯]c?Ør³–%0iÿr(Å ™•2S9#ä ( ¢¥e Î/åߢûö䥾c ð¡°sò™»%Òë¿OÚþ6³6òæ\»¾Ás^˜±« (²¢ÎøŠ)ÎKkø|]a½#^[7|“ÃÒ-ä²LLêEôÿ;CDpzâÛåö-§J~U¢æ+W™^Ò¸R­ÓáÀí[¤×¥*˜hÒ=jBµ³å¾DÔ^O*‰ ‚k•ùfÅSex»Êõ‚éîž`S€©Í<¦ÂN'IÁèWÞ·±òC2oôF¨:€ZŠ42•øýWÄ…ðƒ•½I9±Ã [Ö/ËÿwA`D8]BzÚ¶§Ðã*òø&<a,¥}Üjç¸bxt½õˆŒíÅ"¾ÏÞµé4ÞÜŸIê{‹•¤ÆÁá'3yœ*º8ðÏMqzë4üÊr‰utÃ'αôéŠ t´.AÉÔhÛ@c°3n*b‡#ú¾"E}n/ ‹7ئhÄœ!fáÃR„òTŠ)í7äôŽ÷ÇœÆzÑD6™@« ²²û:ª½F€Úà߯çH ›GM盘²èï— Êxä­gSOøë„ÁT\Ì«‚­ÏÜHN/‰/¾RW€ƒÑ§D´ ÊÉãùˆÐGϼŸØçá-OM#!î‡Öç ËK½[ÿKih©E”f¥¯Ì `1%‘»=üŸ=o…· á<`c51¹Ã{ì*kà—tN3_ìw=`TžÁ/LI ‚§tÄQÖ€{ñÄH`Þ&…Á±% sØ¢’Ûê ?àÈ@±¬RFÄ(×£®w¦ûeäú¡$ /oÞ‰¹¤ü W š`§‘ìb®‰Ä\â'dÇfòÆïŠÇp Þ¸åÙ0·ÜyÒ­$d§&gkÄQp¨ÙAOg>EÄ€ ×õ-“ø…^°pÙÖýÀn¢Âî#¢Ìø5óN–èçÆ×ŠíÏ›¬êÄŒé…Æ4Áb-½¹mì4ˆ³ƒë.ÅùkÖO¯ƒHŒ‰M#X (Iµcî–'Æ%Çľїú-•Ð÷_§‚ÅqÌ€’«øèù-Jß‘µoòR6³kš–Èë%Ý‚¿ý'ϵ _2L9ú´ÀjªÈŠÉŽ žf@]^cçðÜ¿á»?Ãu†ãeöïoðßßá¾wÛ¾X~ÝÄý»™ûwöí°øY®‚Ê|2™¥@nc÷éEl3Źܹ‚ýDgŸHßO©ÅfîN ‘Ãñf¢.øYé© ɧêÿI7Ghº½<ôØí¦K¤ èT¶‰[i’Z/GH®Hÿ;øD*·‘F]%9®ßâú»bT%NöÌ`ùÿ¦“0\c'ÞÐéÂ1F«õ3AtøB¯354ÌâPˆô²¿¨xãÅ8'ÈP4•Í~Á.äú¿¨½Ð^êYb£o˜ 3péÒVòóÅ!t >ö塪¢2^F‚æ—u‰ƒ>ŽeŤÈšÐí‰XÌàzÉOL{°4ÅÕÔ>†µÇGEQÇ¡X·ÈzÒMe8„Ú›ÈöÓ-£ú5ç(‚‰)CÚoQõo]“ó"„¿Áû“ ºJ‡ó|‚duO%çõPЙd3ú0:î.êÄ€}†·.ÀÄ.ÅÚ]T у¼.¿Ç·g&™~‚»i‘‰`´\?©:l„W!Ò4Gh<«-¶ƒ¶¦ @úQYˆ5ô*¹J²œ@}¦ìr kP ŒS0¥³|[-š=É%6päVèáÃdªkëhäo³õ"nºu0Æ.‚øNµÖnrÒ6la«õðîFï°[ù¾‚v£XƒzÌ=à­ºÍ — ]G®&AªUDfÞ²mv{8;|u9B0}¨]·œÿMü‚|¢™|в¯?œjèeú¯ý@Œ:¡«y•‡†´ñÆÎÚÖ]Ü]ôŒT@Å6Ýçæ¬ô»ä+Âøß&†Š½” &×XìköÈX Ø8­ÊÓîcTâuO‡Úem/|ãÂîáÃæ¡ûêZ¤…÷°HÞqàÆá¿9‰[~4v¦Tgå¿Ö&¡¼MÙ»úblR†á©ÔžÆª­%Ï“ßXTék’òPLiÕê2øMïŒÒÓ7¨êÐ\„ÏLYP¹AÓòNGöðkzψóFúÊϘ {«ÕEù×tÃAOQ|úù óß—ûZ^_«º†„\:¶ò¡öpúšl©xŸõç˺°_A;èðÆm=¸eYÀJ®"ïѬ1&½J/¢ËV¾¿¥€‡£m®ù_½¶ö=ðƒk„þiö‚‚¸¼ü†i¾íÐyÑô_ s€âõ}Ïž‡í¹Xo‹¹7j_Yþ’æx æd¿€måOœ“œ¼Ê0ºË×ÅW³ûjã¡_€/À?äkŸ^\šf¶ó¦MœÏ®?÷€8Â%‡Xq0åÐÁ-“l þÉ ã ý0µ][‰ïÚ¾’œ-cÝõŽ^#zûÓš]ÛÏå™Óå²WˆZ´êæõ¿Ã(ðòÒ_”QoêI…¥$5]f…;É2ê%Y-f–‘¡5ףΪ˜Îè†Â1„L©¾èIkýÎŒè«@¦úÁb† 6äÃ%E³ÏIƒ}Ë©ÿ.üc‹ÊË;™ûѧyXŒÚ>ù w_¸6®Öû€¿8W'¿¯ƒ$Où™ý…ÈŽdªÇéNJ±ÒUoI>Å=z÷IÝ"TñËMgªícø|ïÀú3òEŒt­™Õ~a\î™è0£-ÐÆY¹ßìÌyž‡xXN¦A#ðÏÇ™¨U]5/(Çž‘}Pûá™iw·çÄá{DºHðm"²P¥>ô!Î9$Y“ÿb-ƒsä>ýžA‡íYm‚¹ês=\í)v,/œÆ˜½5ƒyËz”Sã_¢_µc'±/”Ýll}›)a’R¦mBÒh˜3zdÿao•8ÿSüê2¶úwã{:ž~µ`ÔLêD töfrB§Õ”'maN^:›2%ûHU§ôf!n©o¼j={¨Ô,É¢LÕ…¶ì8z¦ÊDmK—}º¿ÓëDÔ ƒ1u ¤w'»ªW³ŸÙPà×o½¿$ÀÍRPôJ“ÏÐ =ùÒ’9¶–£x¬  gV^lñRz%;·@Ÿ_þ^ /û ˜ÖÕ{êálƒd€k«&HY—B¢K›!ßq³ôÅr¯qªbvÕuhn ª‘Á0\ÿ*.A†imò¼çþ¸—øåì4CáÍWÛz½×}tIIP’¡HJ¢oqŒS¨P+4·‰\ wp ÄS~=ÛTJxö\ì鈟ÿ êªp¶“°ÿQè¨U€jÑî N”4Œç×iÜUIÙæóz!Ÿ·ò+¼)°(1ŒÍFðdl=‡¬UHG"̡܇NÈ­–9 #þ#%Á£Í!Suƒ“ <ì¶h©Áº.Dí=xlº»Âïðë‹ o!æÖ#móÜoN5E¥ Ès­ TüË ±loÑçëUþ%ýÌÆy‚Ò_…eÀ6ëæ+˜kŸÿ"ö4q*°wD`5æ2õþÙA¬§v)Ý'aÇA~Ièò*pŸÓв€ÅyÃce?Vh¥õõxÅÐðì.5Y¾N•—v’†]Ôao+£Í/3@*ÚùCÛçq(ÈøålD’Ä͹$ºËZµøVVþ¢DðþÉaUÂü¯Þz†+ËlKv8S:ñ¤O«¥M^‘BäÒ€òŒmdÑ/†¤åõîÁšHÝÕ™-÷S5é34ﯗFͨT;cËA¡@CLGt'êVPUupËÍ-}Ví÷’? ~»~_LšÞhýoû¢ñÔ—V¯+ˆ¥à¨m챜9V¸.Øáv Úk…r¼ïW²áf'ž1â¨óN|rÿ)Òà±Lé°IøP*®1e.­ûêô¢'ËÈëò½Šé\­cs…ÿ$xV–wlR38üÕ!QÞTÏÌF6ëÏܬ:Ø}á{ÏLÞ;x¯¿Z0W,ªý¿»Ñ ª÷Øj"‡ÛâVChÆI¡+mJ7,ðæUh³®†ƒy‹µÿ5ÎæDèvê)Ÿ¨FZ²C¦žhRŠÀnŒ°|j}*—b{`e=Ü[+›p›¼4µ?c×[' ‰´¯4žõx¢¡>7¨OCX “-®/ýRNYýÉ7-¾–Ú1YëoÕE#j,›hkïF$’>ÈîÞÖ5nS—@y-d_½V¡2ÊmDŠC±?Pµ³Ìe2Þ«Ó"xØMhpÁÁ0?ºÜ ¤Á€¢SWYô-ã§[Jh:nÃÖÞ´=Š„ÜörþÚ“WÖÈ“äô)'i#«Q'´ú€í:'“*¼YŒ6WÒ§+¥>¤ûlÉÌ0þ<ƒï/ø˜í…²ï|x LòÎ|+þÖF\âÖR]³ï˧ê»Ð‡bìDF‚:Xï«çP Ö–ýþ—u÷üJ 9z˜€$À×Yò4d1ûŠzó-[Åî‘ý}nÑg®_Ï'Âa ÛÛž˜ï‘ÌÑà,Ë“wøõÛf-Mó¬å¬åZ/! cO£T\” kËJÈ%Ùâ݈vB ©ÇC»ÙnÝìït!¾!Š•¦ Ág’"å¥'˜¹ÿlÑ_t‹Ó➺ª@{4Êûñ.¨¼m !BÒÙçx|ț ç\í{‚å¶Ñ‹Åð’äîxléwñ³ LÖ;¤¼M¿Þ ЪöëÀŒ(Ç­8å;´­(›¾¨ëFPçºÖ:úÓ2=ÆÎžÐ$.8²Í)ÉÆP6)4¤D{AÚK­ÎE„ý©Ì~m‡§•À]°l5”UÙº‹^Nß¶~Sê[Ll O¯ÎRˆ„0.›XÑ Vê…LÚÉβ¸[C»¸3}}qC:^Ö#¦~åæ*•:ô8vÿ/.¸ôAù•~ý¿¨< àÛ]·FìQËü3ndÒøaˆ…êüx dÕ¾æ„d–+2Ñ¢™·î¬J*£ì GÅõ÷lîV@ü_/eq ½Rpš;Ò« +%^ÈJ% =½8‹wno4&‚*[“oH?\?¬¬ÒpÞØ>}Æ D5üÓ÷SHGm{Ù°vŠy¡ÔÜËV‘Ù¾£ÀÚB‹€¨89jƒHeO/A¸i^r¢f- +»¦@Š?Ð+Y ˜¥9І²ØÏUéq"‚T¥ìwwdøî·‘z¯§hnT—^€"ÆX³É!Ê~âr¼Øé½%²bN9æéÃ>ҤŠé„I<јÆ ÿ!9*Ï~‡¹{ê…ÿnÝ/ Xà>m=²ØÆã5jÚć’ k÷…Ÿƨù>Pû•È,!À;rfî£]³<²‰Åø—~'GåÊ"©/}å<¯£µ3˜[Îä³Sü{4lå^oæ÷iØÎÌc'f!øÖŸÖ#M6íq~¨…Ñ?âá´Øžöçá=qÈðfBŽmf4ëàœ6é®gþÒ/z9ª’­$+Û [Žd^Û6jo8.è$uõX e^ð°´„gG™­-4RÏ<Ç1­Úñò\Íj‹îî[߬rD뎮ÍTæd¬lÿW_E<¸æ¼XhTÕgp=må€4­\£ë­ºTô„J5¸w‚x ­§Vþ=Œ­)OÏ`h*ìÑåjÞ¶œr:b:=ðí9æZŒ±ØˆbOö¦NàtÛTjÛÐ:Î73Ru"†!ï 1YÖÒ¼~H蜮ãN¾¡ûÏc‡•oÖéáѸióY ½¡« Š–Á0Q0𾙦e@Lñ+Оwñf3ñÖmÞü_0ä îw\ÀÍÏÕ=bI7¡Itpj cåíÄjº›Ø5¬Êl£åJ9Ï„X•ªY‘ Þ(pjþí*˱Ö/©Aµ&Ñm©gÚ.‰H°©3ÃQ•¥ ¬þ½†²¶N$uñ÷ç;fˆŠúåãè ‡ë ­ îF@øYX÷qþ£%Fø™Nú¥7ƒ0Ž7/”£{yX^B²%½L¡mWüƒ!’ÈV±•l$W‹-éeî™üþJ;–•œà³Z¡™PŸ¨<Ê(0ã}r}æ›ÆòLDÁ…J‰{“ðìTjfÃñŽù² …ÑLã”ã¤%³ O9 œú-T8~Lq¡O¿A,ââPä·]TG)ïÙ,áV¡…§„”Ûýù§è˜³Äã˜Ò’ÃH"á‡÷»ƒõSê/£uQ ™´ ‹Þ %ÀüÒ±O>er… —å«WFå(Rºõ;gׯ85 ú|55ÿ{"vÀ¿9.\KÙ§×7íƒò§fÊÕŽLœßÍa6UŽ_©´„\Ñ’/2ÊÔS¬a8Œ³h5hM*¡˜¯‚‘)@ýDœ¯OwŒØw=!Ü­P¥î™•¢ø%® •Si‘v€ª†rNlÝ™éO! ¿6o!`5éCµÍ¸rÚm“œy²ðïÌ#Cîv¤Ú¿«;Y¹ÜгF¸”XN¨Ókß(”äÑØ®€^ÕÖöroÆ”‰šëÜ+yô_…7Å;Á o™ñBd…VV”ÑÃTX\£“ÕLÂ"}zÛ­*Ðk :QMCú¸çÍÕ0¼k 5ìÿX „‡ÈmfCÔâ «¡}Ðp‘~‹KØÚ?[_¢N‘lA;S1.7N oŽÙ»Ìv) T^ñ¨@‚<Ç”œxúÌJ+8à#ƒ÷ßËg÷cb¾v+½‘¹™4TöËH·¨µ¶ƒ‘<æýÁag¾\šfë6ï# ÿ €FôznÖ‹ä^9ã $ÚkàÍÃÝfƒ€fC+Ÿv¨©®£\ùÐö?…ãˆ!&O­íL¹øRƒ¸ç°YÖK#Õî}Ò{:ÏdíÊ3’BSA¤,€/… Dô¯“Ë J¸3t(Ü¥¬,ý§mš!Cîøú‰‹ÎÅJGã¿ûY´‚5ƒr¸ë&î2A¬o ]·Ê°/ê‹.EßÔ‚£¦Â‘6Ö!yÉ 0Yˬõ¿^2v4æu0Á±2>2zŠ ÑÞqSÆ&Ç\ÜíK»©ñ‘„ŒàûÚVÿBšŒ‡‰†6ãZú˜J”åN@Öøærz@nÈÐ-ÐÓRÏÖ$¤­ #öÖG¥ ŒÊvl9[Ƕ;þĘNj[uq¬ø¯ÂÅPáÌüä.¤·dù/dÐÚþŽ›eçy‡ØÈ>ý¿îî‹#!¸PG—%¬¥/&oóÓÂ[ƒÎç‰älÒƒtT+ª!^SI©9Û•?¡Lû©ÎÃtÕ·¸Àb{›ÎÇû¢N¬—ÅR9¯½ñ*§­n tž‹+Þ–#àíŽ/S*½nß²y‘žiÌ–ðm¬®ù ÆnÃnþm˜™®9áZs–Í'û a'£êtðCÒI¸Ù. CsõômÁÉ* Á1)ñ‰¢LÌZÁcaÙ÷ý]ÓêØ`r õgS‘哎EåСPœp-c(ç³Ý ñÔ4ÆT{Ê×[þÝû 3ñdbV%€%A¼·~è^|¬Ý3°æ¾Õ ܇8X¥@Ã˰qïY à°Ô£´Õ±E…rW5Cåÿm,Ï(áoR“9;±.Êèh:r™Ü¦%âhlTÀXÙI‰¹r@F²ÏŸqkÀµ9A}ê°¢õ™ çxH]îorHk™ ߀AöŠÓE Á \c†ÕÅZ”KƒêÌHøuÙp_)'”Ö ³þ†•»%bçßeTþÆQ€Ò¾'\±y5š„E Š4]ñÍæAÌ â9؇Å ô„kõÌ(d+ CaÔç· Üž×šžZþ-Y‹ˆï@­Ã¾gšœ§À{Ñ,¦ÏÁd…+qR÷sk4vÈjÄUÛ±E\Š*6eõ\ÕâN|²µÏÂîPf.Nô@²u†È˜»Í,úªë š’]G·ß lÓ¹B§ÈçþÔŶƒrÊ…“a)À©'‡„¸;;;ô—J¾›xëx+>nŠîÇ2ô†Äà˜ñÕ±M«ƒ¯ìŽ[Øä}òÒ„k@T©m&§ÌðãQiô¬Ê'ïAó¥_pÊÛÊ’” è9—,b¶ƒC©¸É8+[ÆÀÅyx gøÚ.ƒ…íÔ×.!©e´_e¢>·[ – bª (>eQVú33œiyqR¥sÅä ú¥+zÈž£ü" Tt$ ôðTP4Ⱥ„˜€2Y¸3tÇáYÇáWÇç^e›Ë?Mp¸ê*©}KLÝxá¦ô·k;¡ðLk*>µf¸„S&ÜeöìŸþØÉ)ˆ¹šZ&O¬uÕ38ÞèÒI„ qsƒæ¯°Nm²—6·=&4g‹Æ¢Ù}8yŸšêˆ$,”¥»ê×Õà@ „<¼—qsV]1ã™ÿR -¥aî‹´[¹GÙÇáNGáKÃ𧀎+PO£xÎûd½ÿ^çÑ»ª;ì×ì¯%”c¬›Î¾¾è»ÎE¿Z^ßa4$W5:ªIØ»æÿ ýÓC5bstÚ‡‹@·Áå?Ü·i%XŒ€‡i7ð·rï$mÕ)‚ô/Cf¦äj¦2⎞ûÿ#ëþæ0åjZçÚVWcQ<ÀÕŠ„xn«P›¼Œ˜UE…+äßíP˜7¾3VîçÒ\š©›ý¬¦ä .ܰk{‚¹N«¤¬º¸ãj[²\HOý¶€wÞ`O‘¢ÛÉj5¼í)ä ?ÕÍÄÂÊ ÜéCçHZr€ðdBÿ€½*Vln¢&]2œöÀ„ñBH,›`cÚŒ˜H árjº"¢Ì©~Î&lbu(¡—†5AŸæêÃãG„táX}ŽÚŸÅ ¾Å1ee™A‰‚n#JLý_zÏxûÙ®éàTãyòg ½„}Td½[Õ4*-ö&ˆ>ŠTì{ÙëÏŸÛœ!se– J¿?lª½ „p–1c==zP$wE,eNÃíZÁZ‚Ø„^›“îT9É4VËœ ‡&¯óÚ+Ñ«õ_¿ªÑ/[ƒ“ ˜ £È·ÊÂÀý›d^I>¬²;©½l&2€”E.ß{Û(ŒèLéÄ“zš@®/ ~ŠTz2£Ó˜˜ 6ùüf§¡;pŸ5˺xþ*œÉ6=½²¿eÉØ*‰‚Œ¹ªBh+iQ¼·¹×fy ‹æ¤Á`ºxž_È7+›¹r€›+¨MNBýá›®ô¢àŠL,ÎÏ©jvH/o–ì}¼l“k°÷ä9‚jB¨­ü§ÚÙÀôܶmar$ÓÐhææ;®Õ'—½‹sÄ‹KV¶à{·-ض>@ bª/'¥œxnÑK±ðï@.Ehƒs|] xõBŸ0]$ñ0í“wóÓ­ÿ–ç!@ïsC¿=ÕŽóÝ@Çù§6Õ¶q:êzWøV#à•ŸÞ"isõ:²[ú“"¿Ô¨¦š_2eKßš¬ÉvqBíšÑîO׸B¬ÑíŸ@Y|-Àt ¸ôrU‘Äȼ,8¶.Kz<< ,)AÃøÄx£lŽ}¤Ä&Í«¬LüÍ©%ÝÛ¿e{õh´h|è—ÏÏ¡Yùô%ŸE ²áU¿Ã¡+…báX¾›O‚Ï» ½)Ö¨ºVIÖËk€BšÎ]=¤¯Œjš‹ÎŠÍ\}†Ž\J!ý¸œ‹Ý1%¤lO{KyzéXäñÖŠ«;ýâ“7ß]”5áU– ®äPÖaËt„\ÿT:yc5Âg-“ÀƒHQ‡*H)/DF4cÐV‘bÅ?x/ª#)î`qØÎ>hÌ1¤6Ú¿Ãà¹O–b±„£ô¬gþEñ¶ЕµYÃùZ\™ñÁ½ùÜ ¤ÇÂSNR¹—Z°}-G­éɶX¤«hH¯õ6wÝ€5ùˆwìëÇTÛb Ѷg¾¼ß\‰,8üÚðwd-¸Œ\û'®ªÌyë”/“%@– wߪt׎îÛ£ÔI’ùÉ'¼¹f¥lõ£OÝÄ`tá“/åΡ¡ÿ (ƒ ⣟ÒÑÞrT´x3j†=“3ã€syH¹#OÉÔI·xyù•sþ·öÍœµ¨¤ì¥ˆ³d¹{Õ¨KˆR’`f›às+X²ŸQ%Qì6ÞåcxÅšT7xâL5ÏZâÕƒç|¨Ðƒ½V3d%Þ×ÿrÄ›ƒ€À9TÄjÚ=ØŽž>äz)xKi; Šønt«Cݶ|àûˆ ;´ò¨¬4Bc!ÆšJ¢Š¥Àô7)Äc–ë(‹òý~„7åC•ƒ‰rL¡1—Õô”y9¥µQ³²Šœ†èþóøt@þSéj”¨I€“ÖÐ+Šý2جÜaÀ“ÅRøª4Àƒ„¯DãQ7¡ÏLž K›¤)Û8­óî¥ öµÔE×¼,ÿ<T$ØÛ#‘Ëåìf\îçm¿(ƒ/t @,$‘\½ƒÇõúÒvʃœn)^£ ±ó·m߬óªmÙoµÐ3ZãÍC°rTnó¥}nÄ–yXÜN¢K[5Ôiº ž‚ÇßOãe4Ð&¬ÙÍÒ&¾«¾ZEñ?hSU:€°äï~PäfÓ©}ìVïƒÍ1dèŠ`w²¶Iý{­šÝ—n±ø`Açž\Lˆ¨Ø~Â:i¤Šñsvy’¹Öø`ÙüE˜¡–ënê?R¯Ån¨âóKsoÊ©_[fãi  ŽF·}t ‰Erƒ4) tiÙR8¹S¬Ûv“uî$ù—ͱ^²’IËé'5…еWL½*ídü"`9«ªþH,"p. ­íÈCÀuõX‚… Z,áãx0 ;5’-ÃÑðé®KÇ£ÚØ˜ºšàïhVI$38Öî~Üÿ,„CéJqða²ʖ³]e¬îÞ#Õ$‰ ìˆ-QòÜ®À@™¸Tñâ<ÍV6‹!Aì[q¢‹ë–6€ý'æ=Î~S›Ôϼ¦SÿéCI»´YTD »–ÀëwÖ<)ÑÜxúÌòˆëÅÀ†‰jÚ´Ž¶¨³àyýÞi·1›ÓsÕH±#¢Šµ¿ðì.±øªü“aî’<гämÆryŠÑr|­ J6O[ š"‰Ã¶ÕÏ2éxÒUèºä*ë”ôyƒØh ÜÕ¼áˆÞÌéÃíØ¸}»Ãe€²ö‚àü’/X{6gmëݹ(¤58¸ïx–µßûX…&šÝü2D+näÒú†sŸçOҋɰËú2PaXúžÑ~¿V[}.XË:’ˆew†3çL›–µÌ6´·”«3¬^²3£Æ<¡Œ‚ûæõÜÇ⡉ŽG¼l( Ø„ J-z&Ð_4Ë×3¿>° À jˆùÖø›Žyp8Š­#Â&Æ¢vjÂ64Ö Î«¡ºE‰®.Ðׇ‚e(å¸|»äŽ?#—Z©¶´pÎVJ¢3œÈû¿\<ª›j™Gùmó >?²æ#Ù×rð™ÎDY7Jl‡†ƒÖ;j3åì "ywi$2—rA‰ì—C –]Ú|ºQÙ6ûøŽÞK5#CÇ “Dtùä}$ÈÏß' ”µà´¸ÓöÑ !¯IóD\G,Èqs!CðÍQ߆kÂ/I¶É„³*M˜\{º Ý¡ßÅœ©½ô]NýGeè­S¯\í2N‘n‰ ƒ¡ÌJÆ8Ïú ŒCã³Üšz0@ãZj |=™ç¢úÈHÈêÚÇ.mpþNi {.LØaäáe2”Œ ãtZfî%û‚(TßtúpPå‚;Úr_nÙzhÅ+ÀG¬Ÿþ«7ÚèËÒW²_5÷?*¶P¹!£vfvÚP4¬^Ì †@«þª§Æ¬;aÒŠGpÓ¾¯ŸFlúYöñÊxq¶9/QZn,ðˆ„ß !*¢ú϶L›Ó«³º «ˆH¡­8Í„JóX)½Ø ½©ûñC  ¼†ZÏ-e×]l«·ÀÐ×/tÕ”6Û(ÙtåDÉÀ†m+~½H]O"½5]©'Ü ²:‘ãõ=Ãr ‚Yªj ˜Æñ°Ãžð‰ßV]A¸Ç¨Fy¶7.ºÙ©>‡3²ôé=ùŠxÍro…îá5Íp%°yõ²®E&m»°Éƒqh)X6‡CÁY+áÏ`xû“¼}âN±|@@õØe™ðþ¡šËž@ ‘Ö#.àZ¶—Å‚RÄYßÛâ„ ,[÷ù+„s7¹~mþ/Š´Œ?PŽ0R%3ÿf­Km*…àÏò“ÕàW•»@Î04-´7‰Â•€\m3üT¢)ÚËQfÜtþ”²3Û»]ß‚9cC³ú\¤Â~eü-3_ñ%/¹Î± &¶ ¿è­þp†}!"^ŒÞƒù›rž÷Z¨Sqe`ÉuÍ Aãqµ»Ex›eqÐ0ˆ¢J >÷-Hô6²Ù5q OÃÈ¿ÿÞMݿ΂N[ßw¿žrÑôêÀx¡w-DT±FJ›KÆ%Ï‹¸Î8#Öߚ»M½K¯Z?Ϩ³PmÛa\!À´xåç¢ïðd,:¾ ›}¥õW¾@Ò« 8^-Œ¶E.̸öT Ò&*´]Éœ­dàû5 Vdý{û ‹ÕÓP¤”ϦÖ(ñŰ~ÈS|+Ø);l$Ãí·#ð¶aø\ À¹³ßH 'W B ø`7 Æ=AŒÎpõÔ7à!ÛÓ¢ûËo»¼µÓ–ž¼[ôdõ“®‡¯Ûã†o‡îÂýml7O³g2Ôp#GH€PŸ¹¦¹|—ÕÝœ·TŠfw¸Hº7„P0þoæ+Amoñ1rê)|3<3ƒ«sËý ‡xE.› ]ìÝ&:¾‘Qƒ}+«Ë0¶öP…ãÆƒ œ9Ö&k‡§*>Gæ<0y&JÁΩ®fÏr›_ÊIbåþôP„NN´)CH*ŽÊµÒó7xñ%澇}ìÂèÔÅ&–°»í”í¤{+rMa÷DO×Á1ªb4vÚ˜4ø¼Ž§>›NÐ fÜ2迟5Öåßô§’fD™åÝGÇ[A‰…vM¦‡ó™ý;FŸš]rS›®ƒ(S_yü5â„6ËXmdF³[xÖªzý(æ®ÈAÝž‹‘O9Ðz<¦áÚÕÇ=s? ÃA¾+¯6 S6Ûæ„°îÚ¼•§®âÔ'J8M7óDäüÆuƒ¬¢Ž~šga˜-¥ô8wïU¬ˆ.²Ìfp d)·€.<Î;ÁÈuU=-3-’v碳¿„?åZ¬sªåÓ«cîþ†2žë†ƒ0@U#·Â¡{®î»LsÙ1ah¡\xá(>yvq«¥_’£ÑzÐvR¹µî#>´Rׯ[{©£Ÿ¡»C¢—-u%}‰6$ÿo˜Örþ9À0pI¥Ò‘ŠËñ[×›€y¢ä…!)öáKvAu9,)@ @‰{˜€#ÿ{ý^•^_;‰J]ìZ¹‰ƒ’Ùß3†?õšƒä@XAhQÜQÏjûîS®{ Iù’QéÅä²| ÏÏyçç»±ùï€Ôÿ0ÁÐ —6/ræ´ô”]±È|lòõÜðåÏû¼ž"ntÚ v£> ~aÉ€þÇ}:MËë L¨,§©±4|›\å_Êß”Nä5Êô!,ʼnÑeƒWI¬Òü÷om:øÂÇN²?«Ø,£|€/–^$€Þ‡c^E]„¾>¼8EDaæ@Iš­¥£O¥ë¾r` /ª®éOæ•÷¸Œƒ€ëAŠzÔÝËËm·å™¼\Ô~7'îYøk–9И†œ‰èÑtàº.Ü ªÅ1¨Xé¦Íçñ ›ÔââÂZb¡+Pr>ÈY£!B±eîÂoCzUòIÄ~ë»_ݧËǽ†ÉÀ‹aæð©w`¿²LI±Ð[‘4ĺÇ”ÀìÔ½±Ù`'J²_íezøÙÅÈû©Â½l Ñ¿#²øƒ›iq^ ê³\ê1¬*«l´ê2YLÁлXJVø6.ôV{¹‹ÓÖ_?Ö¥`Wz‚øÿ#p8ÁmÚ›™Ï´.ûönÓ/ SkLŠu-Ú©üô!Ü+¿¯½¹~ˆ’‰™£ª6ÏTåžÒóí'BÁmÀdˆxˆÊw#²»ÈOÐ8h:>± Œo«Ué™®6ïZÒVýÝ)Ä@–d>…·3`@Z¥á©É^Ȫû§¸äǵQPGç8°}€±)_ß°9Ë2 D®rŒŽÕàÈ`‚viÜ— Œê%/GÕ[þ0@ïCð„·6r$Ú7Úûý©±ñÉÐ{ÎAEŽ’šEšˆ%ÛCE D*Æq¬Íòƒý«Šjpæµù“УWžg¢kuP‰ëùÌ®<É_ÝÕšöyãO߸ûP³£À%ÿB¨'1ìÇM®Ù$9ì!wséFGà̯ÞÞé—´ é½‰HBà–]05( «&ªù™¹ÓXì!oÜPˆÆ¯Ù”ùÁö¡æÐõ ÒA)Ò”šL1ĘWúO†"Ú)®öºÇ b ¹¹*BW@³æ¯„õv ‹÷\‡¼šu³¸µÖV1¯'qAyÝ6Ì6 >‹4-dô¼Öê»Tž@%P“âº-°tOwèû1ßQ˜É#BªÏÛ×÷è¤,Á¦Ðõ›ƒ—2Fëûœúµ0mÓ1N§ÊH$|-}eÐ…‹1Ey,¾žˆ’A›wïLIŽ 2øÝXç¶^Ö`ïÆbOÕýM.OÞÔÄZ¤•Ÿºÿ`«›$ßj¦ÝçpÉççñjz”Μ\¯tÊÜ ì‡_Ï:AHMnìÑ:³Ø*¥WHqÃ2BJxê™·J»‘&e±É&’L#$½E2i3Qc\ªc·+Ÿ0ñ‹ªÃ¿[*Š b1ý±¦¦™ýŸý6·}j’œúd»1û:d˜ %ÒɶøÌš0ÆK(ŒRç"\çìªô{ l árÌ ~{¸…¿upAö o¥EgÃg˜¦¦Ù¹'?‚Çö%Ή¯J–Lh£l¬0€0qGˆú¾"½ã˜>s¥ìÕ¹æý¾c°Ÿ.V35•~µÁu§–-ÜøœÕï‰;dÉd%#YˆAÆŸþnPþje¼ÊÚf@+-nŽŠ6nû~æÄC=ägRðzÛS^*¡ëŸ€SD[ôƱ—nò…•¯ð‡ùCà GVÔ¿ÛW3‘ããÉÉJºÔgc‹KAÆ6„˚;*”¿‘ÇCy2E-fG„|;’=Õh´‹©y;õÑßs®6/Þ)ÜuiMiJÙ•i¶ÄAnÌ<î$u!ÍžŠªS *–­) otu(ðÅ+ »W§!(ªÌtQ×S¼Ý¬ø$á\m6À8€Ô^×õwï}| [FVîKodÏÏÔÊ~~¥ñùú”ð!îdº)/'¿ŸÒxù«Žd/§+ÑÓ™BªƒéÍÜ}¾¸6ÌRöQì/Œú‘z‹ëØrŸ5¶îÏââbÍèNœ½9Oìù*UÚŠâøLÛCÜ9¨5Õ0ï<Ýû(EívÚ""{zˆt…b:æi}élô0¤ßôä°]W«)ô~ )í€f™ ¥¾šU?Œ¥rq‰™Íh I±ŒsWL,uÀÔ«‘¸¾ºìëÜý½nYÙ¡¦¶¿þ»ù6þ31)“h‚% ­M´·JÛ&³Òž6KÃ{ÉήôRo.…NÄà’e=w+tãÓzì%thŠ#Õû[ËÏæöóLF&…*!~P¶†Ü‘ À kàÔÛ°Žæsº°kìz~0?üióp1}K;"õвè!}¤·Ö–º]Ö8³kÎ ëQInñÏë‹ÃËê^OA‹”­~–4wë«F´"ó'„Ö·b›×7]ôõ4´dÈŠ*¿ËXĽO6µœkrzsÄ"©½ûœQ ãø¿8Çõ¼N i—ˆ9-é½}?1Öþ¬Ûè·%_6´&4•Ürã:!ngÌ͇ ‰6UéµøÐCÿd›N]zš¨œÙ‚¶è͸àŸŠý‹iô3`ò1£XÆâÅHΞYè0–Ú;å²ß©ÓçS¾–{Áà—«>°<«eÍÝñ+çºÃŠÞ¶ÞŠ4›êhj…ÄŒ+yo¶›/öêHñ耺™cs•9Ϻ€°¯ÇV7¹ÇÒÉxþlš¼¿èVøµ¦¾ëÝ'pÿ\å˜sB‡ù/ãTÜ3äo”‘._»äɳqëÙô £N³h+Í µ ¡÷Ûj3„íò~øéfßÚØ(“F“${ï{F°Æ|CÀ1¨2íÂô.%‹Óóô"UvFvãjövÀØYk^ŸÎÜðÃÃòã9êˆ\Â0t¶éŠòUz¥ÙJ~šÅª,®¥eÛ‹«Q…¥Rˆf¡ýä‚IrnÞíF³ùx Š’”j³³-s]|ýFUèX¹Õ _X_5—2 Ÿôg’$brµ}ã U/9¾Z3ÃÿW 6Ô0e¿ª.€h¿qóüIœÌ?`îžû¯‘¨œ_b8;ûßmÈ,W ƒÛ‡b¥ Û’nšDN20¡û(¹oîɈ‹É®ýŒ¹èrø2âb˜n¡]¾}RçFÓøÚãïÃç7U ÐDª@ ½.‡ÞîÅÞqÑ– )é(¹íçHBS8 ’¦h>M¥‹ÿ8Ö).àØÇdÇö#(d*­È„”à'¸îrAt²&kÿ4a¤fxÝ(Ücâ¹6Çfª9Ï@«&£¤E PA­j;lÍnIKÂÒ¥~p×·Åë1v·GÇÞ]ûUkÉ-~cÌ[ß/<Þk6DÁ*ÞíŠö%¸Þç¡ôì²t‚YÿH†:Bðö׳d¿8 Ã?·C ^ú‡i]AíÀ*x«µ¨ç`ÂNDš>‰j´ta£*ápëWD×ùêc»,˜Æ±R¥€ès¹uguör"(­c%–I½aö›®¹­êª€2ù²¨«øŽOçóó,#¤h µ¢r&/›Íõ~F>]Ñãl|Тi˜0áú;ŠKéîÝEÊߘÌÓë‰mNÇÔcZŽ#m£Oç"Utà½Ü!t¯ò'Œ\žÕ·ö|gÍÀa×®ÖQ63p½-¬…¾ÈÇÌËB ‰°ÅÜ Ò(çùeWɰÉò䨸ž78ŠÝjEKÊ6*aȾk©o¯ë°¶5'¦&'›YÃÒ‘h^m!ÇçcW”<Öf6jDž~·¤¦uÍ£12’F4÷½#H‰=Æ{±à¬u`'$WgSîXMål HŽRk›©hnPÄ/›½Ù›³c‰ÑïúB>P¨á”Ÿ¯EkŒŠÊAÁ¸GßÌ›ARS_Û_ÿFEäÍÀXX¤ÓIì"œÑ¤5CY³ v„ 浡¸³¦"—ÙJµ›Ái/Å»ŸìÖ7Ä9‡¾€û°vÉã¥Uné7?9íœ7ƒ£Ý›ìQ®êûr'¨¤œ—hWØ>ÙäÏqR©5~:Ðs#цuEt¯L+!÷V ŽÖGFh|4†+÷òì9 M<ÃVbuÏ@0cãTèì‹M= ³V>'C'ÖNÉdg ÛK|ó²ñ‹žFÏòÄÕ6‡þ—¹Zœ]4c00°˜®òÝg'´ |'þ¾5ƒŒ\k*o­ö­61HÃ!=Û*Bh4ŽxB/“~Üy˘µË‚“­`¿›š¬Ž>킪•Tí¹òcîËc¨²¨œk½ñ9CHOa>­®F´^ºh‹s¤äL¬fÒ}‡Ï.þ6"4QÅê PÝ)ÕšŽ±¥g£*Þ­3WuDÉÚÙ;2ÂÚ¹1'˶Âí#  C„È}y½ò-tšdçLæÞ¹¤Þ X$a±ý%H3åH¥ëŒ,[E+Ú¢-Ê¡1} skð«ñª¤Ö¨&ºHÕa½™äq.‘SÜ©ó­a!ÝðÎË?2^T…¥¿‰ÕÑ^·s¶zùò¡L ´Ùüú³gg(Ta—äî¶PvLêVHv<ê¡óki Ç´z8‰Î[6å²Q–û »¼“æYacÉ6òr°éȾ>ïv$Ý¡6'•Ý¢¹\8¨îožUùüå\÷¬™~ É®ì0Ug¡¨·ù­ÓÈ}“2¾*tn°¶ JgG+;µÕ”U?²h»ŠVÛtví7Ë¥,Œµj`da×àGçµÏs¯mƒ©~øÆù E …4|ªÌ×V~8cÜ3«¥ŽbªH®•Î9¬îìÿ„ó¬®åƒþ]ƦÏ| AZ·XÎ8k¸F‹ûèÊ›Þñb8Ê/ÚF"=yÜþØøb-ш*Ö†Ùä9Ê¿ 8OV4+†ú½éOê1›ûÓ2ò¬D¢êZÕ£ì ü‚ÍN›\:ëjØòfÃAŠFœðä±ËÜ8üÊôÓ® %+-rðýOCÏÞV9ÚoÙC©»J7oÈÀƒ˜AÖÖ›Žší¨™è}Fü'½ƒ'ˈx§ÓFú’ q9±àÈ!1Ü·¾€yÔŠ70 •ž£ÒÌžá!jò‘»,ó&úà%š Ü=»¡S„iqhE?e®ñïpÒª¯Ã¶±þ–ê ×~:¯Aêë©È6Ì•ôÔâuRb¼(fexx³ÈïN’£ŽÞ' …<…Ç¿i8y®ôøÃ“ ²»B‚97™¤‘˜>7Ü|ïŠ7syÏ%m):/¢49Ía&ÅÖÿ*V²¦¦õÿlÑ ák©á¬²» Ý%“³êVøIdzÁÓf³Ë–p®i8Õ©«HÆÑk¤ž)$Ñ8Is:GE­Ý¦ø¿# ïà ÄEãJdì»wœk}D›¼ÔWòõ3€Åá¿í&™¥™)GK üm5w_§rš^õ7 òÇyÀIÒÂ%µ”ÀŒVœ½ks D¬t~¡ µôÍøÊ­\˜"½J]j+î¸Ó>ê{Ý Útœ¼k¨%Þ7%Àtžàmþx†Á;ÎY‚!jIÌÁÄÈävüÔKôÃ4l©×r¶¹ó@Ö BWÿrÄÁI š$ĹöÁ¯:Yûž¢"|#ÔüHVmÐÓÚ¾®:W9M7ƒ tÁ÷ÂKüšÂ{¦ãшV‚Q6Y>í~“Ö$µB3& _öÉãn@Á ŠCÓ¡ósÒw1¨#Ç4O/Ÿ'8¹µmŒñy;þ£Ôú 4š¾o!-¤Žu° ¡DNs c±5¨ÇSÑ”É×ÏE,§¸ÆöÕjU„× ¬¾ÎÊÛ‰óLš ýW/ã{˜‡LÚWßëÞJAGçÄ"ÞÐî˜wíŠWÊÃ-€T+y‚zE½«>Âûæ‹;ðbx *b—Z·öOÉF^Å OD­pÀvæi$¡:‹0ÝMÖŸŽ)‰'dBÊ”VÌV㽄˜Ï)ÜìA³— "ectøòê¹ÔÉø¡1ç;aû§8„KèÄ@&ß ôX…-½=Is­üÈP2ö³'>_EpÄsþ aÂ</2÷ÙŽ{`þ¬Ç0Z½¶¾q@s­ÿ!•H¢•l?qØå¡2"…UkŽƒâ]ˆY7zÓÅ6X–èб¤a9ì¢+ËbGæ_Vé^t­KÑvÙE•÷<†Ä‚Å’Ú­ê¦$ª[6ùy“?¼cø{/ zbÅO¨+.°¡ ‡éoÜý Æè6”&ôRL¤ëY™‰wš£M½Fâ{í j³ÓMT7ŠšP¯]°7?8ÞwôÂ6@§z¯ì‰E¹ÔñyanËÿ Ð7¤^ÉÍäýï–„X¤~€9ÍR)À"Š KM8ñ'æ¢ÛÏípruJ‰SççZ½þ·Ð¨›9 €âÍÔI°ÿ— Ï^þ W‡:üž÷€”àOZuV\«<ù(– Uô˜&ÚÐ9g…—³Ä¢~¥©ÂFk@ß®‡§´±æ’ÔãÚ`R')Ö¹šÛÚ“ÅóþÖP©bdßÃííöonðü;‚ä)Kð…Ïê5ŸOpøu{t_% Ç"_¡tL£7vÔ¨ªÈê5Mâ1ózÊEºiªÅ<Üé³I„‹Ý±¯Ìëm?”eõ6€}ÜÿnêäœÔE…¦]ϸCkòÞÃ|ÕÓ˜w¶â†“y ª£+Èö’^²3  ÷­ì ½Os†€¢x?«ÆÌ K‡Üj8BÌ!B€€dˆÑ´ãÖò]²À±2 Ÿ'ÓŠèaÛÎâkÄ’ îU$/„5òn)Ë×DÏ])…’&Ç”&#$»¸ ½¥M˜-B+- úµÒ««=@·'´ß⃮ܔQ9µµoEÙ4Ì}—fçÏ,Jý†þékrùNT‚õšëJ¶a˜¸ÍþãQ©“Å2™W¡9*¥VFËP[6·¨0ðÙë ffR;‰a’×$ìVŽÚ} ÍK—zØtT’NÌ‹†VYLP”ЦQ»ñìÏý/K†¿7©”€‘™BsùK“ò‘ô $\SA¢åOìù³Ê<ï—Úb ”ï`/îoåv$!30üôáÌõ†Øà¼aeá ‘ R»,(òè6¦;Bù½M¡$lk1MÜH5á„ùÆN2}éðƒIœ5q`$• *sLÌã6\[§j¢Òf+©þÊÞ`¹C9‹¸ò:”ümÜ5`ŽXV|*~…ÑCœ]•ÓVÔ>– šèL’‹kwgâ·½0=hîÆÐ oÏ£p'‘ÄÆ¯žÈ T4š$þæ^,"*縌0…£kóÑ¡xÄî80>]ØÈsiàµ]ŽñË<ëÇ;ø¥€FëKc4¨µˆ:»˜úÙ±oVמNÑí8xŸL—nN†ÅIàLªhbÝE„šÒíÖn+÷PÃmÓ8Å}ÚQaŠpÏ”{S/Ñ@ëL˜QŽÁnŒ³€ÀŠ!ÿbb¦LÉiÞÐ)ë³Mël€,ÔA\ Š`ŽÓ›•‹i¤ó å º+z†žsù±¥YȄր °Scäÿn†×ÈæªÚâׄ'¡ ´ƒ…^°–@•DzùÞÊ*‡¿µÌO¼iOµs¹AK3§îûZÌb³¸:é Ž ”QÐàxÜž*L3J{“qí¾¿¢¦£#×s¬quœ ¬j'ÌD;Zà„K.ôe’´ÿ}ЉÍÛt¢y'ópË;̵ç#£™Â#'f͉nþ÷ÁÊýc'Eë¥/Õ:[ùϺÜ×Rïs MÈì•c¥æçÀé]žDùôq*6 p¬5ôªÀ›ÞMÕÖø"¥*$’h}j·>Š8D áZšÓ|Óþ¦&·Âª¹Ãp± \d€Ã,¤„眴upÂ:2ž2O˜%í‡÷XnÅ’óDå.F—–†â;Fw›3›JôFx±§Î1%¿,\9ºÞY4€¡¨3[)t«#~u{ ƒÐŸÖ_ ‘"³R+B¸'ûÁï µ›ÛîîY Þ`eÛoúV¿Ô[péþ…˜¥Ã•Nö«tM™F‘gEÅÑ?£Ù/Ùof5xÎ9èZÕ0&朖jMråA±îñ5ØYd³ ø‡. ^v§€H-þòcIë)J^…aì9m»99ÿ-{pE;Š2Ñýa¿:âøbáê°Â½B+Vß ¦~á>’Ù|]³›y—íúv0Ï=«8e€9¦?0v,¡{:m ápOÃB<íç‘ÈŽS³ï-ýCtE×|€{éªâû¢’o¹¹®g‡„4ÿdi&øªë&–fᩉùЏ&.\Ñïüo‘ÉNªÅu^T)ÖÛÔ.£ó+3/Ëß~Ãá)Ã~ªAôiœ(r_Æõz§/êDys° » ÝAêh'°¥µ\‹m¤Sk•óÂ̼8Š‚„·Ò¨ÓfGegö™™bÐ*‘]xº:Ÿ^aåUv o¯†MFM³_Çu/zÍ%~=Ø ¶ÛêÆ[€é˜ÈcÀP…`³sl‡,/†ÚU´‹´Ö¶n#`A )f‰¾€–=‘5XÌA.C‚¡A+€¥9˰¥ïRÒe™¹6 ÁÇîÙ4)r]żsÒÄÀÆêÍE—³$ ’Î:wìR§Ð”léUÒ”É/ äüèbdÙlBl’­:–¨ S¶ôwK3Ë2Œâá%jª§Ý¶3e¾(Ú³p@ÌÍ,«½¥)”Yay{LÄ1@PÎ7fzW˜ †@Ã^òØËãé {3äâP€bF‘àíoýùëC~ºÎ‰®­sAòk?’c$±÷,v«}>ðá¸uSnnnš~Vsdý^ëÝZ„q%¼ÈyÂå$B•­Ëµ•\FD˜õá¢ÔóÙ¥¢UÙíú‡êžúáÐJ–˜?õ<ºç&‘‚—‚+ÚS×´KÇ`ßGú3ËTåú–Jƒ…šð©MÍN`Ÿ°'[íÑùZÚÒì!ëctkO¸ÔCá* íý¡žÆéëV­f(ªC7,·w¡Ú,e¦ =Ïóxà k[«n#äµi¢š´"F1hfððÉX:89~ö§¤­áœü½»ôú†Æ¯-D»á5!£tóS4½ŽeTäóGf àŠÐÒ 6ù‘6¢ñI‚Ľ‡ÕÔÐú'1MŽíe(·ª®q^Άø˜/t “ž»¡1!5òÛÐFäT¥:ÆPÚð'ú=:—…UƒéÔK¾tt²™K«S–ÜX“æD[‡€dǘmâ²)áŽ%|ËVCÆè:á-#bãuZ¸ZŸN@ª&ë}AxªÀ´‚»7Q|ßçg äZN·Àém<á÷¹¾ÐV½&ÌŽ;ù='—iaK’¬^²kŒj…¯`µnæâ2þP¶¡&ELÕrx²Æí¦=+îqýlWê¢ÒŒ²Ñ*ÌÞM‡2èbøh[¾ÕUOû4LÍUYy~ë‡úñgë‚— Ì¡·²Áç]û ‰ ÛùNøÃÁ œ÷ðHë!è†dl½¨ÿ+0õ/#‘œût°èžÒ¥!6þXI ÎêåÿG4a)P{xX)ÏBÔ_Å»úf1âäéZù†·þ“?Z¬†ˆŒµwR!óaS6T'ˆcïòãÖ½!M«¿ÿ k9ÚP$Ê”½¢®¸•rí™?K‹% ‹ßj S·©‡‰‹Çu¸’Íþja½/<%ËtØôtQE#ůûÀøZ¯rà¨jÄŒ*×}ým„]v¥=ö-š ,rfúÐ |§Ì>õ:n–Újca É|Á”m7'šÅˆ÷°qž7ç4.­ÏsŒ"F¢@(Ã.÷Ø–mAëUì+âÂb)Ëß8Dt¾ó™ GÝ[¶¨~™¹&TPí ß++âL­÷û(1¢vøÐ+P”’À¡Tx"l  •Û ~›lN_Ö–¯öÁró:r›ª]--@ËDИ6%Ž5óµÊ3¾(ó1}b^¶ÇEN”@ñamóì2·gMáåt“Ê5Ü ší£®µºy,°/x@gÝÊ,ÎCï?—žvQÂi_Y9ÖDæ+N ñVè@Dè4Sñ?Íuóç¾É€Ñg´;¢Ý²ñšÊxñm+ź±·ëGŬ‚Äx~…@˨¿rjÐͼöÜÇMhŸåp@þz¬)†=`­TWhµ]é¾2žÅ•q_ßÁ£ÆÕYŸË®'¬3]X‰8¨Í–Å%Øž{íN_&¾V5 % ©«¾ÙˆîõAóhO"?Ü€Ç*‘ƒ™PÃßÐÖðàVŽA+;‘!+•œø¾6݇…IMá–5³—˜úÙÝÑò[E?´t“û¯´)*²²2iÈ…¤<Ý„»l=²ÄÖ³(r̸>ë÷óÊ<)µíð§¡{Mn30“:—é[LbXkTì¶Æ8áÞÁ+âÛ]›¬ÚC°#GÙZ{|'÷0¿ƒY,“•&E¬këDPWÝ\¹yñÜ©Q0œH¯`–Õ5…æˆÕx‡<­'8úº >°Òf¨‡sZî³ùdKëõoQ{Žu>ÝcàãßÙF-§„Èvki.H6–è)Ÿ’ñÔÍIÇáè??@¨üý€äŽEQŠfèƒFÍšŸ@ Ri²j9Aâ °Á ¼ÎÚ£9wÊÄ;ZH¢L"ºu×wôvO›öÛx”>¦©:AFh³­\¬èÌ|]5ˆ}±ÏC ©6,#I‚¾Ý`Å2Ѳ=^SXè®OAªg‹?–2ÉR'Ò ×e.EƒmmŸ™˜;£×A&QxœßfÒ—Oôû+Ô娷½Ež*GIÊ?tWûÅBîáp0€Ã(±ƒv¾•: ôЧ+ÎÏGZЪDÍ5ÓtËÀdÚÖeÏÇÃÇ›m“È‹ Š™&àÅj¯ë¨£çÍ©Ô+÷}!úÑ‘ùjD1po¥Ë‡ã4ØÛphZïw×­>;“ö~í‡.éj±‚­ÅÞ#ÿ%˜}]Ò” Þ ¨ g~w™90±JP×jäɤ¹ƒ …vc«¥ÔBz1ÊDñ T±õgÄ)4_hSäg$à\FÞ+ r®MmϵR»—àT(Ù˾kÍ®ºdqÿnÄ9wž^1=/¦ovàÈz~ÎH|…FQaD÷Ú/@’Ê˹×!Mž|ŠïWBÄ›óLëÍHê¾a eÿ?è Ô¾ý##ëÎPàS3Q¾oO*Ñ€pr´î½Ü/ÂKÁ0ús¸·x×.©3NëícÏMPw““›Í&Ú(m¨Þ6¸wM/Üp#“_oîâ#†ÎÐóšëñÔ6  •ð°_÷0sræJ›ú;ò¹2ƒ%o˜Õq®ÆŸu0™.WÊdTÝùeShWÙ¤œkQ:£úÛ™g¼+‘ÏŒQÁm2Îö2R׉K‚¬d#[ßZ .„اC­uᮨ’ގͳOŽóŠeÜ 27ïék”(x·’‹ ¦ ß§†¶ÜcÞø­'ôFþ¸Bäýp$Ó:P–÷OüÎq-ØßÛPZ¹«£žªrÞ6Ì…C˳^¾ˆ[÷Õ¸û ÂÙÚö†.¢2˜«íFNå‚\LÚâÊ$X>Yˆ‚)§ù2I%ÑZˆ] L]\–ùF¼¾‰J7©û¨Çp[xX 9|6vª/Ib[Ì—›Rfw-é·7ëh#ѸÃEÞoj1*'Þë`+V•›Uð¦@Ý㵇DðK,¾ñ/m°éÁãm.ÃöEËw(ç?W¸vkÎÒ7j«R å+¢Ók®¨cøß"ɇ• G×g_Fk{–֙В4U%I·DçÙÖŒÔãÛ|,Wú€g˜ù’{Á7㕌:~*µcæ0Òëb{ë¨:uCTËðd¶Ôtz¯@šã¼¹Ù“juf…PþwûO2ÓCÜn¼6¹|ß•}cP´/Ö¡-4òøLžÅù>ÓÛÐ1b>Ðø²(Î=eˆÞD–Ÿ‚`9fAA>-[®âœ™H#íQ–~1 ¶Í©ßÔmuúv»nþãö?R´>0L‡æ h¥7 Ÿ–!¼’Æå’z0žmŸ†ŽR’ 8ž“±Sx?¶@(Ç®ZV#Ÿ£ï4Ÿ" áÏ&\Ðéc’X·‚JÐÖœãú€ŽÿsNUw£ñ'¶ãº©sƵgJÑ Ã\ÿKG&Ð?û·³Æ­ ÿ{·™Ù–ÐP_¯Ýµ†Q¼ÇÒaF.!šIU“k^Úò]"&KÞ6PW…„!Óòd…Iý¦ãØ5«%ÆiÞ2«Ü2—œ±ÖVA¿ë ྒ3Í`XÏBa ÏÇôû`õ€rëÔéóÔ+ö¥W×Ù¶¾NH±ìü­UxÅÕÈùÀ)Îä±½Yû4`ç¡=”÷¥Ÿg¸¹¼y|ÅoP§ ¡bÀi n ZÀ6ŸHú\3©’+˜ü®)DÐÝÍEÊGšk=ýzÕîÎ÷uF+_®#{“€ï«ïßïÃ(µïM}nI%ê¾:´«z;ªh¼šb½ ˆžpHk?'ü&®MýÿS?þµžl›ÐeâÒéZÃfÓòW;À1mï/.ŸjÒÒpŒ´¼ŠW²;bÇ.# ‡gDÆW ›“]‰Ó¿°ªŒÏYô?æ:sÚ#Í¢$ ×Í Ÿ\h†f_à¦Ý7½ךª‡Š·õÓaV¼@%Ãÿ>¶döZZ…Œ×³¿[€Âl!ý`ñ,~Uy¹ªQOç–‚ÔXñ Á‚ñ¶ HÛ‹h#Ë$‚ièiRBV«ˆV™¬Ï%š‹Åk=~Ãå>Z -uöæ&µãÆXy¢¦1Ȫ?/³;!]9µÜ:kY·htƒ•Õк“¨M`7¹i\ºÜåõEÈ·ô ÿ4Q²ý5w´3/¦cئY®…bý¿V¬Æ°¶å?׫‡š´OÞ­(<;o5YZµ‰tƒÒ»A<ûŠŠ7¡Ù‹xâkVË÷W³Ï¬œŒNs9ZèœiÖq¶“Y{hày Ž7ó®žÕ79Î; ØQž)ŸyBÙ«Ý.cŠ«'ñC×3îÃãˆWRûq¥*ö¢ÆÊÓ\m‡.Ü+fõnõgÎ}62ïçJÛçD¹¥ö—Ž–¡ö$úåÅ 'aÞ¡I…•¶Ú›×#ƒ½øØÂ"´ –R ùA‚ìÜÊ$«íX‰†vÓù†¯ AÜÁ;¡b•9zƒ¼‚ª2PñµÂs“ñê5Œ§ƒ¢jî˜ÑbDÀOÀŸœ;»ÝìR©¹®2S)—¾Û€Ÿ¹Û Ò“=uÜHÆ ì_ÚAè†ëiÝñ eç2l|è-›•A]ÖVa®ÙHÈdq484 ¿˜¯N —%á¸ät«Ñ.>,Ü”«¦Ä_´ÁGUJ=‡1™8-+Ç—±GÖ”Ÿ}°k³g±0æ¿*¤; ]ÅÖB’þÒS¤½±­Áõ~jùé…jÆ6Pp´—Ú£±Xï»0&¥›ºÃ!™šY9ñS}²<Þ˦þžÔ½»Cs¸Í’¤žßù}ÆàP²SnIÃÎ1CÆ·ԹܺY­Ë&¤‡—ÒAM€ñä÷Ö_®êdT:®r~*3¡iQuhH4uAß{¿W¶UÍ•ìdŒîâÑ‹¶æXóW!‡âm9¯ ‹D 䵩Z^ã´R±f}}?¢¦è‚ñi8ŽšâÅIvç¼twKC%Â&eŠànªædš´øÈi¢rêïý£D$Fs¼wû”bÈͶ½Ã?˜¦’ñ{‚Ø[Ø6jo‰¤¥¯` A®Q#vaåøvqüû&þ}³_‡bøþžÊÿCµ?áØÞ?‡fÿaØïðí'øvñÐ' ­$™wÈ(qMZû±€dFWbœtQ¥DÞÆ)\ovjÀ.8뺛¯Î˘ñ'2áoÃXûFá‹.Ñ·ÖT‘ ÚÂÔ©T<£ xu>c¤C9€ïwߨ”ölU8g€nca¨ã}Ï2öèåÐ&ÅÓ¢ƒ0e#ñ[µßjÑ1ñÑMÒ=EßÁg¤ã)Æ=Ѐëø–T镃*£Lñ.ª P? ©h/sé+ŸTm…ÁFž7ž&Ý£­‹L¢¿£ªöžƒ·W-mXˆêzôkÍ*.D‘öÖìȹW¥¶æ,¨«ÂŠ2œ×ew¶×ÊšþªTΓ&ç¶õßês)`ßø¨üU¡ŠîÀÏžCy«P…˜˜Á‹Øþ„¸Îº ½¼>®'bØì.ï»Ò J`=EùYÙViÕ&ÚÎKx¡8ZY¿\xÉ NCÒhé"¾‹µ;²cMl~I>ħF‚ ²ÍîÖÀpl.­ óqü$ ÿbY6ŽoÏ9Qôz­S }u¯}=VËÔÿ%á;ƒãƒ›ÏI)¾ráüg£Hwô7ò[6ª¹ôñtÙZK&·Àl4±Š£Ó5¢«çûpK¢ú „"J/¼8{Úž ú!®æE'  ›w~ç%.ƒú0]ð³Ùõ0ˆNÙ‹—Hh <óU[£[ãå+`ú)¹q¾ç­¨™Xá¬!Óèí«ùèøµtw{“V>ö[REÅ+Fc•ãx~[e·Eï ó~6” øÏ+®¿´[¶¿ öójxlüÔhhò¶Å£þS+^zÇj>WGæsÅ·y’@Ë/cJùÏJaΊ¯‘ÌeÇW«°E9%Ü©7·)Õ Ól‰ã-©Fþ-BŽ&e'K²ìxx°¤#H?µL¿³³§#%¨¡mí«>Gx»Œ;(£Çž ãJs&ÖaÒ)˜àLhÀ̘ªO›ÄÉRw•±|ŒÀç(bM212—‚šf3=ZâæÍ•ÇKýÈÖhÀçqù5ÿ`÷)^Ƙ+­g‡],LïºÞvt²‚jÅ„:NÕ$Q3<÷@ñér;uªî4ºJº]{®ëž¤æ¹üÜÇG#¿D“‰Üo&?”äØßù*—ïC¨ˆ×͉ö·Ó"õ·{š L¸Eœ)\Ž–ÆëœCqà'¢Ìó¾ä†çfÑZ3ªÿJ|uq/$~­ÿe·¾:¥Ë¬ÑdÉì T3߸7LMæ'#–‚(ÀÝô×þ?uq5ÞTíu´óHˆ›þfjTF‰¸]Ïàz "å­uÀ_Ÿ±0Pîi¢±¿Ø³ÛËH´ôŠa Zõ÷ÒM“á\ ‡§©wŒß:‰³o–Ìž çÅ 8¦Fê‚Óe_úY…p?\ME!†m°¿ú+`®rœ¦†€˜"+A‡Tpm_â[¾MÄ CpQMìŸÌwX`n‹’\uïÀŽŠ»ËÏ#e†~‚mzšiÄÙþ¬Ôê¹#ô×VEó \œ²ÒÌ1UÍI¿¹×“j½)ýoÏó¡Ûô+M íä–üá}g,«ð¹Ï ˜:â¥E¦½Ç“ž&`÷ÛŠÓ2)žjا¿Ø3t±¿ï#.3° "U®R¡ = ‘E‚²‰{ú»`³˜ />ãr ¢LøT|rÀúÒuÄ.ïåÙV°»·¾@³(®¨«–Õ×ÚXº.Ç"W2L>z›²mž²´w¹ZÜRÆ…-毒ù]Í"ŸÃ]QL“å¢Å µàÖ{bïË3P4=(ï†âÖ>\‡/©¦ WA\”ít/Ã2‹‡ò8.\ì)Ñ­z¥}AÎÔB¹¿ Ig«PÄ:±('3/9௓škM CÙÝVåо¹ÜÞ²ƒÅ+Hf9ÊkB¼‹XPØàpU_†åz|Ný¡ e!áð5gÐÒ_"ÒÄ¿C–²SÌHæÈ‘©H¥ßy—Jm5)È ü ÷d:¼ü‘!3ýÆî·¤´M7ïÅ ëÈ£¿¼›ÖðÍ##&ttf¯Œh³9îW-ö}¯¦Rñ­©&Q‚m~Hù4MÙë·´»É^kuÄßFÈU›O„YÝ9¹béÇ-"ó¼ï±ú ñ¶;ÚàFÄQÊ;š BžlÁ€E‘o‚…Ó«¿„ }tuÐ㧨2Öý‹O®%ÂâºÂïå”Î ~Y÷Œ«¥ DîÑtKL»{æõè¤É¿ Õ]AV–l L5jK¡V©ÜªŽ]¼jE(Ôæü*{¨8)Ž6"ÀþéU‡m|`UµÏÌXì€%ç/°ºöì×¥’dtÍ·‘õ‰5J w‹A^hè^=â{7žÓͬŠÿ¹ëj)òà–¹›PöóÇóý~NìÌìs–ر)µ\m¸Cjk{DÌ`œÏJyêøLuåãgUwtá•ãѻݕrÝ5á<¯ín#Ò¿Åà¡…®¦U ìsjµ”Ç9$ ÷ «8€×,(E£š¶^ùªoxÚyÔZËq¿á~Z†ð§˜„gâ_ ™"…˜™ƒû“ÓÙ<kÌÆ6?oå|t¹+ãÓ6Ý;-X޵ͲËéj‚Ç™Ì3Güq!â0p×¾W,%º ÊÒöÝf¬ö7Šr’Ð~Ën'lÊS‚OAc¶ R§ð­¤ngv!ËYé‡ßq1”8ZôÕR)9\ØÁláxa|:nz|±UÝé ¼Ìí’ûnþæQþ3y9±”2Æ¿–i[ìÿ&Æ@f¯ëKÈù,ˆŸFŠÙZG(/_¤Rp„þ†Ì qþ…u@ŠÈûlfªÐ_Ç+½ö;-ä'$ï‹"“œ#7:f½1_všD,‰¤Ë&7Å q›&äK¨Gžu¬ ÇaUyЦ-&gîÁžð}’ã™Ncïn8±OUî¥A)æmùŸlîÒ°x¢ ©$Ã|Ù£†~®íºEÑÒùCDKiUþÄ‘LL&ïßwÁ­", ½ÙÎÔ0Æü+¢\å<& ? ³Õ©« ò#lËõ ËqŸ–a+Örf¥aF¤ˆ™-µÒö¡6ZY8ù™hý5'ݵùÊž¨G,\¼¹j²ûj²¯a<';áË•J£ÌXK!¼¦Rçº(Éø_¤@Ü6Va뢱…~þw•h–Ø ¤êœT9,äC7³¼(÷ï.Hêu†U é=X>×õÀ22LÃÌGJ«m0À)ù¶Y«J´…¯…Ï Öd㛤ßi.TŃÃåðÌšÜ ûþ‘e¢·|w˜|XG¤*‘Ëûqàýª _“1ó1ª.Ó š(g+ƒi'9* âßJÌêA‘×ñ1ÒeåÕ0WáýV3zwh‡©YMÙcN.k{q‰ 4žZ¡Ú…§Å>’Q£…qåú(Žõ¹ä8ÔOwíëìb'ðþÖQõÐù)ò”D,ò³M$Ä×hœÆEŒGÒmç ¨º~+’æä°E™hø¬P5/x¨?Í"dÞ 9ùá, «Ø;ŸÿN#€iã#çwÍÈ-±ž·?¥/Q„Ï9<ù'øÎmâôCÃ{p.,ì)º#ÞY—a;˜~Aô¦Ì¥ ½«Q@FCßÅÃq†KKœçHæ{œ±Š©VÏí‚…7‡®Õw€ÚQ÷“BÄ!¾³y¶ RîlvùÁg}!¸ã`#·’Íí‡,~.›Ý˽4†Û|£Ày‚íÌÎ=)ôaRÆj‚1.ûºSû.0ònk$Â_£‡Êô :É^&ýùø¡KÌtù*!Sµ_T^ª8áz]èú4Â0Ò:îÏnk×ôr2àçŽ#žº6ì0–A‡?{v³«$*EIAî[ä”߯&=¤§öw qPµÿ^È>Pà Žgfœt2vœÉh’È3 ŸêY³œ7?¿/&iàsÏŒ Ø!.}Zz:ÜÂ2+l¯yuô Ó|J½[å ð#Yk'ç#»î}5  (ô/óoÔ»¨#os8fV"o\‰m^A'°y6PÏe28`~­?ðl–mEïx±ˆªÖk"2Jÿ]Dù¼`D-}È—é;ósÉ”tpg ¦ÅõÊ&Gç>ÉS)¸Œ,n˜Ý_zžŠg£xˆÏÅünûD=áû¬i’’_%ø¹ö ý•èÙ©ŒÂ>˜à+yZ¿!·-l>=’Š:ðyp®,’ éO¡Úä9žõ^gõá›è¯Æñiß é1k”4Pd!éÝjïÂ44­kY]þÛ€W‘¯Br¤®3ªêøê ¿‹ŠŽ?àg¯Q¤ãmnù¤}È—‘DÝÉeN“îÝ«Õa×Àãíd™~ýbq‘Q6ñ5·þ´´è˜µµ@|Ó‰ú/~=Ú´T›Á³K·yúï™,¹ÙèíÀð…bA +0a’÷`ÐQtbçs·=WâV³7ó\#W©÷1-} Â5rãqŠ©ÃØpÀø*õmÆmtBýLrnçðË`ϼ|;‘ø6Äjë°„ÝòÜ÷NÊÐ ™¬+ÜG²ÀLB¾4/ :¥ ï‚$Ãä% F„¬ÿ'³À¤'&׺­Áb A9‰áÒrO xTuD/u¹áŸŸ3 †¶ø&Û5øV!ó‹øfO‰T>Y~ñ|PxÐ([½zê³ù¤}y&µa Ö*Ùs#€B‰ÈbúŸÇ­%Ä'_}G'y ¢U°¥ñ`ÑÌ•øŒü${Ó3ÅuX”miåIÖ`¾@ï]áO.БV‡ŒIebFÅw·I>w•ˆï­½'Ô|ò&BÌBµTÁ7ØTĶ:tmÒq°°'dN,U jðGgv2^ Ñìsš˜ëT•{6 ¤o…k„SgØß…KƈìgRõìzh{ýQŽˆÓ¼[â[ÃO¦<_ 0™ÏšË˜+¬Ä=ºÀetóJ_ʵËâU½®%È ~âÇ$'×÷'GŠÜ° W›“ŽðC,§Cw€é³–¹T§)Òf“Ù %Á8'ñ€HŒ µåîñèèMb‰Ò¿µÈ¦å°9Í¢ÿL¦®dˆl=î¡öO­¯+O­% —’±·\Éÿ ö@ö`R=g?ÃD „×’)¤·UEÁ§Ìÿ(ª—½opf”|¬DFccϨWæ{÷sÆdØ\•¢ÇyAXþ&0qsÁ™¡ú[{©Í[w’K[×ݶ½ÌŒô[ÃVÕV1hD™IQºæ‰ f* Ì l¤Ñû­áaoØZ®7pÔý5¡t6¤›Øœçþ–)ù´'W“ÿ` ¶ ”f5Ä(/Ÿ7øãrtQO•hJùJepŠà[b·¬¹¾„<+É¢)wx\ 4‘«™lsV "»I)gh%A.û²ó¾fÁ…“}·î1A›âLÚmŠ„‘ˆ± xûÜ?Ò³õ+yª‡Çc£L.twJS_=·ÆF¨Q¤ ï2§Wnn˜ü‚cÒæd¿I Í'#‰Ü—è jŠ•¼+*}]mœ`™«Ý«…¿ØÄ€D811ÆÊ"rÞ{¤}üÔ@þ äv[• 6¯—X…äú†½í¥çå>pXÜ3“\üç»Ê§Soö½Å«lQYiJ º^×Ï’•jÂ~âæm+òNÆÊžÖ­£ .×Îé¹ÇÌ$‘¶¾æ‰V" ´TâÍ{4˜>8š/Bæ­ÉÐ9K–×’œD‰¹%;­„•%a Ì ((eR…i¶àº*‰²TûŸh´^MôÆ Á2‹{W‚U@Ö£Ÿ&ù©»²wî¥5ÚM 9&` !Ÿ)ž‚U‹0«b]ì©~aà~Q «CAuV±dmcx ½¼^:f/Òvp¨¯®ŒÉÎ7ÇF‹^YéfR/›À©W·=ÑY6ø”%HòëÇ<ã±—™µï7è[’Ub½NÊfÀ®Г"C­ãëÔ¿CÖ$a?f~}3#×ÐÓÕVbõ»ôžôÐÌtás» SµÓtbF± ÿ/‚,t–ÿ7Á–¢ÛŸãD 3 µRÉØ7PÀÎÔ¤\y­ÃãùÌ5ä.& }7™gÿXÏ›ý«ƒ½ F®eÛÏA­ Ëìy“Ĭg~ ‰ 1t<’ÈoµæíÉp~¿>l2(c)v]P©"×›à²\馱­¿øàÚä…Àwz3Éè#j%ž«¾ÑUˆÿ ƒ4{àꉉýpϸFb¶â;ÖYpgiȱ#ÅÔO âFØß,š“oÀìn>AŠ‘Ú8JTªÛ ô‹ïr{%PŠ™°áP§”Ô^{¾óÐ76Nyš1ÞûvÃÈ=3Äs¼DßÑOE&ÕÁ‡Nm›²½ƒ‘Ä·°R>cT9œJ_!Ÿ¿Â‘<å†Ú˜÷j‹¢ÁZ?Š8ˆ)܇ÏÔvHqõÔ3¿@kRK!õPÏ4†#«&– O&ÄVâèÚÇ›X‹‚úèëqÎx£vÊA fËÅ'ù*:ž`3Ì.3"é=ÛÊÿHß?Í d¯6¶íbÞ[²ó}dšÎõÇÊòEêjÖc „ÃÂà¨2€ªo±ÆW¸¬$žÎ¼»˜tÔ⟳ġ´ý <â¯ob ûc8EétP5é!*÷Qª ^o}•85–Æm¡Ÿ>©>;ÅøùKNgÓ†~ú3™fágſث« àux·-œ7êIp¬Rø+z”Ø@0ÃᕳaBî³S—/Uü2xvÅ¢aÍØõpÒ¸h_>©TÅ$8ÃôXilPKÕ9óhfZ\æ2œ`9si¨fP‚ˆ<äãWß\*%=²—óɤŠP±#IU©-£ýПŠó¶ûÝ·ƒÍÊxµÅÝ)Ý‚«°ä‹»¸f oÊ›OÆY°ÔÈl¿†;åJRêŒ1Aë˜AÖü£.À²Ò ¿=«¹²¬Ä ·5“¼9&6UöVž îh}«z¨OXV*Ì=sѵ/3”“sôtmíE½!cÙ‘5,<§{¿rDI/÷÷ö [-¤–GFºÅº›Ïy–Xn#)Òãn\kóÅ K&lAÍ)ˆ¬™Øj¡˜™›3îgÿ ?¨Ü˜ÏkâíÐæä­™Ú¼UÊ|…[¬ºQ“Fà;ްiÂÈuÿx©56+ÄæK|=·m»_Zëò½áMåâ±ýwžG=—! á tx §É·É+ ­¸Ä—>Þæ%4XH[ ®[»•Z•âŽ;°n O Bm&ƶŒë“*uH]¶XÉh@Õè¸ßS6ÏŒ^· ’„ä¡O…òmÁb¿¾JLxW‡14ì3ö8'®D=ZÙëÕh0*3õN¡{nšbh4V:6ÕK|7ܶ#Žø××b]¾ImøWNÜ„ûЮ©#0£Þv¥×ênF÷›}²âOUo¼½Šü«çtÕV²Xã#Nµ ìú.ãÅ-2ûÖÑÛé¾ÓÏÕ 5d¼ã0•ygçÊ/âçÀ£ å­U+ªäühŸXáU]Œ`Hb\ÙHAvÀkÑ´äð…$‰Ÿ¯Ùª‰èË‘„ê'– LöNˈÓçóM3F‰)'ðdtÁÇûßo…e§:/æÎr`*LƇ ÁáÚT¡å1Dåî¯8߯}eWÆ-p—D‹$9r{.S™!²x1RM“Øm•e‡Þ Åu“ϳ3`ù„ؤ1ñ6hð³p 7÷+°AšhŸÌ›xü—õÅÎ!Ù'2×îÕ-f2ÝoQ[N«{-s¾£Ö`Ÿ”ôSê¾a–U ]¡á¶Ë‡Ü^¬< Ҳ蕣ì=aáûvïöííÞÛ³~Ý·ý»SûwVú¶;Û¶_·gnæþÝ…ñÔD FÓC_‘*ÅÌ/xº9è…å™k3˜òGÊõœÐFX/ ¼UUéÒ_–ý%œ­ÞŠN_}&Þ:š:ÑgañÂ~2¾Å‡ uhí`vÒb@]VíÀÛå )ß‘©Ä]*BG[¾Ô–WƒhÒ+±[ˆŽ´€p:6¸P²µ‰'™ÛL2Ò…sø|Ÿm‹ÊV•Qr‘iÕšœHr„Úìœ}S§§ÜLĈÚä+m*Ô¥[E è¥]•œÉ›–=7à?•…,fÓÖ—t/Ä·=¥WQ¸žÙíÅ™#¯’I±ÓJÐä†k*]ÀJk[øô¢p^¡±¦:H2Ý¥ñ†é,†“ôÇNï¸Uk5:¡‰3T&Ú:–¬ 2Ûî¼äVXƒšÃj¦Ç!Ò%´¦$ì¢ȸõ6kHS³Ð!Xl­».ƒ¥•ÁNÞ© Þu}® W òûôÀÕX­ö2¾Žº+ Ôq~œ ¶ÔâØ™<ÒÕW1|mh4…TŸé\P¹°zV‡)Ìn’cùžZ¡övF7Ù¶!R‡Æ¡œ=±¼?¶ÐÙîÔIƹ®GËDônß@@)¸œíoÎÐu2ÝI@µÙÍ >¼A Í ª˜™G’8"8©àØX¸Ôyœ“âLË^¦€õúˆÍ<5´­fr¼š¾º;Db#" ò¨•‘5ÞÅi¶Õ®UÑ`8ä¼û9Ká3- qÙuˆóte¬ó"a² B…–M‹SëÝ@sW©o[¤CžûqcéÃúdïrc½d²*ó².õâÜ¥yŠÌlÙÖV·@y/wð|à#3ìÄWBÂnÍX=8¯€´,d¬(¯ãzùù<_Zrh€Å„KBóÍZšª§¼‚ ý™ì‘W¸Ë£'óºùí-¦&%æôw[4R ¹‚y™Ñ#°YÙê8ºM'›-G›‰ø­ xs¤O„ií?«õõÝÕ>ÛK5ÿ üö-˜§À¦v³h¶†Ä‚ÊÆ ¦‚Ñ ²`JµÇ(Yç´à™{PZ¦ëð`V¯ñÝ  Ëk”¢³Aœ^:©@v²–]á£Wdš”̸^ð7†ˆ~¨äwïTèÂ=˜Wo¶M®éºnî™DÍ4Ða8ÀœÌØ·ä6sÌN ›rÓp”\–Í_&3`Âé9]é@èÚ>¾Ãah·ÌNDOSv0=Æ ýQm¨î©ø†V‚Ás8=* 5>Ö ½ÆµùkAriáåϺEU„`¹ì}zAqªX#›I‘›h CSÔ)‡îI-ó‰°ï%›N V³$–? k”c”šÝGé0êÚ*Œ¼ŽÎøõZ+÷W¤Y²!<•Ïë›*á{8b¦AUϱžÜ>@ÌZH ~¤ìí*àÿ€Éý8ëXÊ ´yþNOe¿ùéÈÿ'SiJ:á¹+Dùô {æ1Š×Uó ñyº}‹Š´7q”¢¯bN(G1oZ±uFîzq,›sþ`r= ¶0Ç)Fs‹\0?h7 ‘©ÐSY5‰JfˆnÎÖ޼侕¡ˆ¶NJ¿™aÅ艾8 $oÍÿ(šÝLf±O„ùãö9*’GF9®âT`Bd)Å¢™nÑZv…àV¦·F–ï©=(Q‘ùåúLBµ»U<™Ó¡aaŸòÊОv…£Mʇ¥»‹†Asif†LæpS “ ‹Zä`“9$F­µ8ý(jòpZ¼>eþ¸ÞhØŒsF=J®G7#¹Ç^ÀùƒWÍxX7#+šñÓy£Ú[œßů ;LŸPúŒ÷ëùéúküvûçJEjV:išÃªì²Ã†k°ÖÅîñÜù{ð$?s¢¥ý "çÉõ{O;67—Ѐv5àæÁw½éhí‘“y‘7TlJ“ä0ëïôJ}D=Žˆ·–+v¾ÒŽT¡±8‘Ý~:,s€Ú“97¦7—g 2ÝÓ½Êæk ³aÚ˵EøU—ýÆÖé`áL½Î/ë•´ç½Õâ‚5ßÛ’ç‚,ØuŸðá¿®'Î5{GPw,ÃaÞù1ÔwôÓhÇ*Z}ä2úVQõ6š:tlœ‡ÉA‘†“Iu±è¤^÷ÎÕ fçüìôryDq‹>mFGV'þ·Tø,Ý9!ÍRRbÈÓòAÒ×Ki˯WSáDòvMº×¿ü]uü[7)-ºÚò¥Ëq%¸|,Öß Ý#w‡ŠÅuÁ‡zÜ¿S츦·¥a+nå‰y&ZX~‹l¬Í<)€D¶ ið¸Ê)t«œÆZew¯6äùHeô¯ ÈmGKMB‹%ÄZ$´KÄl m‘X‹‚hûŒeµ¼þ©o™²ÛgÓ6ŽV~"ÃeÆtú_mt‰8;@–=æË„ê èNò…xh¥Š©Õq6™éáR˜ „CþÞ\)ˆel‡+° ]~Ö<¬ˆÂ¥<»‘uÄÁËFH¢/ٔª% xf9  æœS²cÊnœ4OÍOß)°ó]Ö¼2¤ekõÓÒ¦7ÝéˆÝû¿ÚßϦ%-é´Ø›ýÉݬ¯?º±Ÿ)%…–Yˆ\>$›¥RÁÈBHþÒ›¬ÚÃÐjP:·ò¤/÷$/OÅø§k_¨Uwqƒk(Ð?‡ •ÔŒbhÇ×&ÿ èäÎÑ›•¼ ô0‡ÇÏIUà‡Õ¬" .°²`"“h+þ…ÝA$Cƒò Då"LÌ9+˜»j7f€™dZ£‹þ[p\6½òlêçƒû*Ï$ГéP‘>|Âì°åIúäŠÙH}~œ”Oޝ—.ERL²÷ØòФmèÓyÅüñ¦µî0ÒÚ%{V&¦[ÜñÎêñMa’^©0)Q»úÃ.áÐEìÏêŽÄ©Þ‘ðB» HÌṈ"ÞÌU´Y˜÷dƒ9ÉÒy^»ÃxÛP‘ûѬEŽâ¢`²tüÕö܉Ì*Ó…ü£Xõ!"D¨‡ãB§Œ¡ÆZªÁOvÒ9˜çJ„SÆ£¬´ßtèP÷gQet˜Ð(þå–]q¸e\juÒà°ÏO„åǘ[8$Ïfuìÿ ±ÝeµGé‘ZC,ßÑ;6ñru fòýî&µëpUòœIJöÞLkŸ<»øqÌñjò»’˜éT›pyŸÊYz©AùmVcvÒë ˜î཭€CŽù~o;yÇq0Îz~z¬}Ʊ›©.Fêëþ]Z­¼¼0J$þÇ…Ù¼|tš“—.áŠ1=&ˆ"׬ïüì,äŠìÝj¨ÅÅ  Á`=†¢3÷6wÁ®‚úVæÃ®GÔVùuƒ X)pzã^¬Ê RÌUÖ;ÉyÞÜ„fDu—!“ñU×í¿ùã}ï*@œ¶ËøC ýÉöÓu…ã~3éŒ&ãõÎ]ɨš U]ŒáKùéäe¬ÄC)Dô›+í½§S}Û(•wô?§@ý Ót/ìâ 5¡Ü«ézi?…ªð¢bDH`WbÄ5wn‹‡]%wª% Tlô(!¼kÀ,ŠÃ/"69‘ëçlev?`^®…î$Fô8îUõZR3‚ÃUnnd-Üjô016¨-Ÿ„4çÛ¨°I„úåp8„ì¨ú´žŒŠáyc©¦F™<¸:=xœB,&-ìæi#hö¸v{óv©!òIv#äû#•¬ˆÃ:»øQ›ú™ûØ2wB±¡ 0%ö% !ö>8”(˘†—î{Ò¬<¡ü¤ù1€"ßGvú⽦‘ÆIK™»F¸3Ô‡ÈÛÜ¿äcùðê®Ì‘`«ñµ‚u\\·ý“ƒ$.àÕ2„õÈ9„N·Wì¥yüx\–c0 ôcL¾ZŸú8@ÞõN<Ò¡¡±¡3éLñ¬s`8¶2x;ÉÀ—Ÿ··lÅ7öq;0«C_ѤëưÉb ûæX@í„¢€Hìyck­.Äê¦-†ê«™…ôDµNÝrr˜öðv¡„,–ƒâ×(í驸c—®O>vÝò¤UýÁ’å%¨.˜BC¼ u… Mª2ÒÓ­¾9 uÜ»ßfãmŒs^¹1(ðfLoØ^’_¥ev(ìñ§ùûm ʽºÅT®V@Dþ{²Å¡??bÝ’•YÃKÐ@A»X*þ5¢`o3‚=kMl³ÎôN<‚üÒê$ \Ò†»H[-ð˜VDüÝ™· $CÆ#ó3k-í¨îO>ÎhÒø‹±1¢&ÎÅ!¶PæÙ{|{û&^ÑŸ éy þ|Ö€Åõ á9¶1ß1#½ëËÔ<ûYß™IŸ 9"«ðAjÓ/ƒûÏ ÓŽ¯bƒˆuî-¼nÈåçAîw ‰+aâËÅÑÎw4]ÝÀ}EîÏlû>%€´gû­&›f§E•?^-ÉìßN?ìË>é]õtù÷f"cÛ#uóÎõk°8Ž•ÝU†‘ê°ÇzDûBð®S’.D󦲠iœ©ínm LJƒ»-Ñ\ú“§x¢Ì‹LPÙ.©,nT¥ÿ4ìŸÁ%¢GKÌJÓØá©|²¿S}ºÏøÚŽ[†Õ-Œu{ºj³n²ðdñ‚5«pÁˆÈtÑÒš¿1Î&m^B@Ñ3*Kß7NåcP;ŒäÖÂï–ÅVF@Vß)‹lv´°à¥mÔúTÊšç‰Ó}žZùˆD’Š Ñöä+ë^Sö7 A¶p–ücçR}ÿ ì`“Øè5ÊÍc|:üH¾—Fi,E<¢ÓËûHƒ;µHo©X±Ê­P#DÙ2è­ÌhíU–FúS­oí#/¬ S²V$º(Ùå°·Ó\áÀ¶ý¸o+8eE -S½R†CÀc‡%墮רƒ¸P½±d ÌQ±ÐØÑ®ûN¦Ú‚¯k¶¥BD“1`];Ý»@zΤ˜í‡YUµ°ôUN¾B%ünÛ—òö2%…¿Ä—-þd¼âW5ÕZ´tï帓ýKAäM¥ÉÒÌO7þ×%AÙÁ̘¿UEº·£í!=@q€çȉ Ëuj´·à žÒ¿UûŽ´oÂ’x”ÙËoâF‘{ùeÞ©ö h½¡¢Ö ©MÉÃBìÕÆ©U·â XçÎ_ïÿºXý%=©<(ޞЅ,|¦‘ð©–ÈF[v/d5ü[ îúþw¤·î¿ô]†'µÝ~«§Äs¿5Çþ­²}SŽ2ð«jõJÈÒžS¶W1بöçž/ÌWÜÞ¶—`©áHî`ãlO ¢^óéV¨®%ÀÝá‚S ‘X½ŸYÔÓZ}\]û»ô`D* b›l–Z”³¶ý(Ð Pºk¢#T|ƒ{rz^Û¾O@=‘__êfüèþÇöªŠŽ1@¼‘ Åo@9Öƒ¹©¬¾¾Ï©1};:/Z÷£ûŸÔwÙsϸæFʇWÿHðp~«:™Ÿ[ð8 $­´¶ éè¿«—ÒM³×ÔôR¬3*¿ûÀØ%vH=ªGªLÞQ¬g¬¿¡}”h#˜çâçØÏ-¦;)¹x£s°'DãR8Ö^Îæ°.{–0VsuÏf̈FKÛß+¤™7’¢‹DæAqÇM;³Ê)¥#q¦ÖW¤)¡f^‡žØ•4Ëk»g¼]ˆ2F͘¯‹L|}žðc;æóÙfEÒœ¼!Ýls¦Ï3gV0‚‰ôW‡V1Ǭ¶ád‘’´Å^gÒ£…º³D{{œIÁìÏm¾š”©IðÄcýÍõÌŠPŸŽ˜ˆsGoÝ3j|ÿ(hÈ|)€ágÚÙç§ðDèt¶$¦î†Î ЊY L€¯(^%i,Bñò¹Dgÿ9Xk1]‡1a_Z½TåßÇ‹R6lùQ+D\ÔŸÕì‡3´ß>Lš~ž~Vç±ØÐCÀt‘6Y-Õ©ˆc¸kªqþFȃtrümRß %ùF§Í;Ù*±ÀBw;âÅôT™ˆEuáÏ(ßµkÿøM—[Cî…Á=¤s•ÿ^ÏnÍ£·_iõÐÚ‘Nm¶<7†–÷s] ôš†v]êf-Md—fgaÊ8 ð.³´¿Ân¿j¥=ËÖÄÌæ`ÚÏxá„OÛ·¿´_öîtOÛ¹´WöíÖòý»q}B¿·köäUÉñ}±‡ É#Š,n¡¢p¡A’6Ãhj¬ZX¬(㬘C|Ÿ±ó»}-)³Yƒ.ËFª¢u ±¶¦´z´õÛÏó?×\Å!7šfi`—Û)±~×9Ó·£èfò¡#ñP¸ÞªÈ¡ØÜöyc óîz 0Å€±Mß—§«dÌϧH$òá]kjÖ6⻫š¶lG¶D"Ó†­; $Þä罃/ÜÅUð[´º€ÜÀYóo †?勤0>Í%ü]f_ê2ft‹Â3똪dŠ®»¥þቑ1¼ÆûAǼýfh³ë=bØnHÜ"Õ»Q¡Ž‚ð÷U͸‰Wæ#ÝB:'aW–@ FxaŽ“Õ|ûÃÑå ¸¨wÎâ.„ä•4þŸsƒ—³öÀN‰YRÒ ¥c¹¤ÍlÁP‡Sq{aú9ŒŒþù§‚œ”™2ÕÛ¢KÈMÔðž|ÕBö3+!ê;Ä îR'Ya›xŠÞ¦Íb8«¹äoï1cX÷¬†æ  ‡ÕoÕ×5Mí<­7-—Mk|{}Œ7Î|ƆÇ7%!ˆ sýüC~þ>)îEx Mšõ¼Dd냟¹~¸nɉ趋(ËØ'-{lû E¬P3÷Êl¤{ïÿ|T—\-ÏUÊú0‹à}Žî²Ë¸¹DÄÊUcôΖ¥xÀÌe0äõÛ‡‡8ôBq£§¯AôÔ¶WÐdÛxÆåF0ëíÍ®üáœo©fœÒÈ+.Ä…ÖñŸúw@pöjoAõò€œe˽ÑÎ"Çç|–Š¿HÌy<ˆo!rY*ŒËz87ªí¡Ô˜÷*éázʬ°FKªë©%9Ã÷™®c/‹®³Nwô¢ö﫽øˆ}ä! ðÙÀäug&ÿ_àògȾnwÇ!ަ!}/*"7_$ýZY“G¦ L G†š›ÇV©´-ƒšÎÅ\B« Ø== DfÅt©vöA7¨R‡½5&HƒMÆìjÒ6'n/T?•uP°ü5H$½mÖ¥òÿm6†_ŽzÌknµ¶Öa Y‚dX2‘ã÷YN‹8°\·)(Ñ÷çöôSž Ši(ø¿‘½“¸½B^Dùä.ÈÖº4Ç5¾ØÝdŸS 8òó`(>˜j®Ó„¸[ Ü›³À+Ãð–e ù(Ý{ÈHK7³C½{}Ùa’Í=!ÆÔ‹†¨…ÉÂéÖª ¿e†öM@üLvÃ"^u…,­¸Ä 'ö䨊ð« ÀèxtK%@kaoÍ£çÁõ½X±€¢^V¥wM¯õy·X‘™ÁªT§âöjÉÙ–š¾Cb†ÅçûY=Jv©×Ú}ÆöMZŠŠì±½r[)û_*Øx¨sÕÄ ¢„Þ)Õ猢}8|çÏ(G@+W„alÏpk*ƯsÜDš”ˆ0“ò±'…Qö/h b5Z™ì¥æ~Såf\ªIØI¶ž "JÒBûÑÄâ|grÁÄãú¹ãl'ðþä®±±Ø*«.µO+ ýmª;¥B«xN3@õÍà\8äx° ‡OÀ<ŠáléÛ9* ÿ<çû8ÁiÃóa+ 6Q­ù$v(^–lƒi²*j¶üÎ=NQI^î <†°xWžÿpÜ Þxæíbï1’M£ÆÐýÔ`KÇ¥¬‰ø{æ;£§@‚hëBCÚznYûÆÞÖdù9Šž·Ì?\B|BqcÌ&!oP|ß‘€ „_+ãt{-)qP8)ÞmòÙÚÞPáÚÛ“~¿í+³*Ícsâ¯@ìÐ(š.ñZ)i ÇÎX‚:w¸¢fþ¬|¨ÜhdÞ¬²AwB^² ÌqjÎ݉Ç ™¸Åi†XŸZÜJüNé£ïÔÊk®+©Ê[Ý—¦Øžs ±5RÏùÎÂY.FõXÚ Ÿ—†3˜ï¦Ð…—%Û]Ñý_³-çq½?b :&r'á°JsjƒŠ'Ȥ bd”Š!±RŠk¢ü`˜²¹^$Lvö¤è±Æô/̰0„•ÍáËç8÷̬b Úõœ?‰Ó ¾,OØæ[+GZ¥ÊÔmÅÏÌÓ<ϯ¾ã7W«$|ÐM¸oº¤í®¶îŒ‰ØXV˹¶$h}Ô€¦bÓÅNPSê%1Mëö£§¨¨ü=ÿ ¿º¥ŠNpå0ÛÀá(àE½ú¬D–󟨚»>|'ó}ß;•Í:)2˜ÿL'b%SÊ&_ÿfyAû×[ò,©¬Ð–2UtÑr̤Au\eŠ;çÃü¹Üp’?Gó©À/#Ža^úH c•JtD{ÖÅÊ\Êþ׉·-¶*@· B° /–“S¶˜ÌbAÏ™ºFÊõ­ÈŸ×jùÁÿQÁ6  {ÎA¡ûì†]X`.4©b "™†z«¼I ñ`íÐwù…V{£í‚@v¦Õ ’ гªóÄþߞÔƒ½Àº÷ñ[Uâ$õ‹‚`i‘ÃHãQûÛ;n.c5¼FÌà +#Ÿœ{ì»j„x,b½sOã¶–ª5,3xØ/\ΞB²imûµ¯kq6YPZn-yEÑÙHîòÑ ³K§hJfyãùÅÑeËBèVÀv18+½´Šqõ”R`©ÑMÕÒ Ónìÿ|ÂÄ7úõ€¢'|™À–íO€XÖÖ){pZI3bzñ{:³W,p= ¯sè™Y´„¯v§1ñ\ò³ '™dA/¥Ô˜Àf÷')Ëj‹bOœJ±²z~¯à\û÷` ãÖMo1»Æ5HQe?äH,atâHìtöQuõuÊÑH‰À«YyS÷L;7:¤#k­#:Ïàîó=š$nõ­¡úpì˜ ̈/Ý–ÔÉa¨½’øðÁž²E¹ÿJÏHìm™õ.ÉÜe¡j¹„q‡)Ž=î…Ç9ŽÝÜ^NnÎé ,ÄÖ#»O«¨°âµ¢‡"¿)þg+ñœ˜Ç%02Ä`GΠܢÈñz0Û=à#߅ʧìÃP`ƒŠ¿‰/I\2$†ÐÕ§·ÇuJ®”v}Cü½«1!߆óôwl‹êXØUv×X4ñ¯ë‘õ˜±F•À§ý_» Îa¸4ô÷–XÐLKÍêj'¡Ç$jd·kC»¥pn Zc–C`!1[ÀX¤{îrk~ ²¶èT2@þËT•ß¡‹1¿z’Ê•šEƒHÄÅmÞß Mà¬VW4Û¶óóÙHS¾!ƒÊ¹À†<‰×¹\™Úh@<ÄðºŽAKåò˜/am{PÔÀ™ÑªV8YƒëuzÉqµ«þòˆÐÐWð5à¼ÿf‹›=kÜF•ø8ÊÑ–.=¨É[`ú‰ˆbÍVI''õ3OíîiÕ)eZ°º ¡ [6¢xçÔ/ݹ ë¢Ùºq0¼”s(=ÿOoI ³~ ßäuøXŒäÏ[9 ÛHiì6Ÿ°‡:òÀ5-ö5cDÛUÚ† eKP‰Žÿ@?t~ÃñÕܘނ2¹•žC6@_d9ÏŒñ $äwQ·.åøowóè"ü:¿ ýÇðߟáÐgðßÿpßœ áþíü7¿øoñÊ#”ŸÐ[-wÍ“_Ö´Ì­ƒÿDaÿD<£Zã@nñ<ÞbÓb°lcq`Ýô~1Ä^Äno‡ H@Ë9+ºI]ëÖÃO¢7§ñ+ìh×Z~qAì"Ù)Š€ˆPŒ…ÿk83¾Aðl*—5Ð{ ¤[ËäŠóÒWõ4–¯¡CŽy×> 0Èf-Ù\jèùÕq”JùÊVhJ9Mjꘜöæ¹4(öÒ°´…ÌœSïôÿB *`ŽÓŠ­»Œâ|Rã£Ï·I¢ý»NÐ8ðÍ,_b±>ï"³#SÞŠÿ‚þoŸIÛ*°»º¨Çóc{2ü,É? GœYlx6ÊWë0}ƒ®nÐ[ãÙäÈß½~PCˆî¢VóûØ}ã#µzfô®*[àf¶bâÁ¯’{vJKR·ÀåhxÜØAç6‘ ®Pñ_Â(^ƒ³…@Õ YPy„«¸ÿ[ÿ/±!ˆø^dXó±ŒA¬:¹T±Uü×_ïÔ´ñ ©h"„·Ø'¦§‰Z”o“U­ûvÄ{ü*ú{û0ퟜÎUú€z…âÇ ¨žgæ/{ p‹0už/ {!úR\«ÐóÀ×%‰CŠ:‡¾ô3}r–Vgk- o#žÒެùXà 3t+ïîrû Óä_t|nøN²ø{Lm}OüJ!H)Ã\MªzoFmâG¬ÉØd­vpFa€¿I@-e a!PÑ@Þ5þÙ®g˜ÀRªà¸ÞPé"®.;m fžz«³sðµÏ|º)W/Ôó‰=fíTÆ“•Л¦Á:5ðõeGn©¿ÆnXì„q˃ì/Mt’«UœÒø -ón‚‰Ê›ã\½+¢c² ?Íkm‡ 5Á,Ò[çÝþq†{y Ù/jBV E¬TûG;_Äy”¢Å€B Ê=Pn|š`lIŠÛGóÚÛ #¸Ÿ®´½|Ëö‘áC§}r‚/Z‚v\°ùA %©1êD{ èGùë7 r¦·L›ÐãK]ÖÍ7ŸŒ¾¡Ú @|E²F•}•zÆ9o>ó§ ô¡ö1ßÕv¶}½adé_1kb¥`â,VöM¨g50H¯:R?G«{ÔÃ+çêkƒM×u,ãÁ™òï0‡‚Á&¦éì‚8ë¤ß†ÎÎ ÑfA?ãò/¥uOò›Ø2}(ñp÷ÖH!BJYêòT©‘"º-ÎÙÎ,É ™‰P垿芻‘¦.òÈy—£§½e`‡¶h©rÞ{%!™®u›Ñ« SQÔ38eiLŽÒµ“·1ÎïLÒîÿW4´"©ÝÇ\çpvN–¢×ñêwù.ÐcVt ¾ëIaeôP`+ýÅÄ»C5—÷®‘UcRœò,E¨;Ù{äz<¶HÇ›G%f-aVOÂâúu'ºâ”£!–r-]Ýà& ËÑçù‡E>yÕxigù‚ð'¬usáØ«kSît«O]×ñα-dôC¯Ü»¹n| ¹6[ORFT[; ¬Q†ž,¶ÊH˜PŸ›|N1êâQb­õ7o ilÆŸQµ÷¶!ÚõìG×Î|Cñm DW_$tbšE§÷LN“C_$4k éõÇEÇöø4LÄ P¶gìwoIñÎŒÆýb %ÇÏ.܄ޒ¸ÕYˆsä²yê¿?»Àˆë•èg sýäM¹uP«À·~€íÂÒK¾ö ~Þ€¦jÝ.Ö“í#EpI:Nx{uêt/¿>Å&¬‚²QòA[Íé´ê -÷ä†Åó¼ciV:{(L׌ûyJá Êè°l³›?×) »ãYƒ©gDµÂ!лU¦¶?»_‹ ¸Ñ¹ðLÞøÅ¸Ik¨aAxTF¼“»†Ïk\·Tbó50]G.²fÞ¿·ïìœò‹¸nWU6"¯7Qyë´VÞ-å._ëá¦:$¡'t ¢ç é.j‰_ûÉJŨXz<²wŒ˜ë%Èå"Þ¸\zÇŽsmne¡Üž[¯ŽoZ¤&´ŽÛÈÊüP+•Û›FQC‡îˆ¾%çÝ|“L›4Hêð‰þ ;)Í·……öžíÉ{7Xà3u#ü°8WÍe3¼¦ôÖ­¼…¾/fL1@ͯꀚ¶ïZÁôùHÛë!úR*ç Š…2F±$i{ „øIUB¿ˆqh­ñÎ6æŽ% ]Þ»î÷D3˜jÜÙ]wÂ…º³{2¨ê ß´6öÌÀ½%1di(ÁñLú:ÿm6ó—ÄBƒªæðŸ“PI¡óÕt®bÙž· Éšü£ÊºÑuV5=Å:d ‡“T.O Ë¢ŸÎyªmñ§â¨×sÞ)È}¥Î ß/÷T¾ÄÃÌàF‡9ÉIð{“SÏÑ:¼—Š£¤ËéÉ{6S5º(Ѐ½›B;u:>?‘“é¢T‡Z‡H{=ý¼q=?£×Ã\͸í‹ÔárÎ[9qÀqÂ¥è“Z6(XUÊŒ pêÌùyËkñvPTìj«1= ‡ š\8Ùl;=s9™Û2|™§æ:rGÙ5|FG3d©>áAi#}ØüZªˆá~âW îÏ>Œ¦ŸýèŸÝ¨p‡]³e%ÎÌ8RǪ§üÏL¨XžGŸÇvô xögNº»)èjÎv]võ9%8 p»cE ÕÖ6Ì€1îŒð~(hïð¹€Ìê<èASÐÙªã€Û<î Œ¹¨³2¼Gp-®nÇÍywf—ÓF|ûù‘T¢MùÉ¡¬`g”dýöXZÿ[Q{L`eŒBlNŸýW8A£Ýrf¾tEÛnÒ¶”¸JY¢–Ìö¨`O‡x(wËh2˜iË»ºÊ4öN,C¼ ãëÉd¸æ§›ð­ÅR$H9¨odþ .t¢MW-ý®÷ÒùÄL1²®‡Ýïlz½GÓYÃÍY€Ì©ÆÄg°1à€¾ :ï±5)„¹$x–ìF•C=©s¶Þ…:°Q¯à\GÒǬ¥eP§tM=yŠóvið¨hξ5ézË)Uä¢Î~“=Ú'­R•Ñ0—éA€2*ð€Ñtë6– Wº!ØïÒ©FP9DŽÁ¤.³ÒŠ_¿C°­µO™ø¶Êþ©t¡½„Š&À£ºõ‘m¬jÄ5ª#™.ᨠ¹u~¾t%Æòl1»PÜŠ…­9VìÚ`Ï c7#ß÷_ïÉ™2Ó‘u%ÂeIgDƿؕ8åÎ+ÀÄÜ‚ÏQŠŠÍl©×üAsÂF÷9¨WBG‡)×*‚ƃmW_…‡sXwÞqo6E5›ôB>Q4RØÞ’HžxbÿGa„bEÕƒ %CßÚ©AÛ,‰Ü®GÄ$ú·Mˆ$OµE‡çOâ7üS)èS?dºè]¢=p—…vPA½ß•Ïp.Pœ»‘Sm”©ã¿ÂÛ.¤8½Œ’_ñ”–ÿZ‘Féõàà‘Dʱ¤§ÃæáV~é‚]†ï+tN•Ÿ–¾e5ÉÑÙŠÌsS¶§ÿ"*ÌiKôÒr«ÃE™Óž›¶Õ6OFj”â*âs› óÀW^}²³wÂ_ oœSÄ4Y`û…o¹ë•=éi¼k¾˜3üdp\E–»`y`ï,}ﺳÁM|™_S,>™n õp=“äKg(}âØÓ|üªà¾k„£+™_›¾CZ'—¾ß …¤n¼”ýM–rÚ•=&s´¼§]Žl\z± ®õ)¶³Õ Uy8õu‘+EÅ.»aDIdGX]‡Êˆæ*ïÍzÐóE9Š-{Æéí"ïÓ»¼€;Çôá,º»v} Û»oüÊï¥ÀP{ǂ߉Cœ *¢"sÛ›ý‘Baõ尿Mö1Åû°r 3@ÍûuÐIæç¹ôt€|)¶­}6KÅzNÂé´%v¯pjÞ1ò¡à‡d/¥3‘A±ž-~n&ƒ:ņl1b!½ø¸¡Ë›¦bEV¢ ø(ãߦ'}%-þ¼âØmÕº¢·™’ÅãO#ÊZ¤fà± 6è;£âÌ8Þí ÈÖ¡7@=G”àìXÓâ|S*WË$ÏL2Åj‡~J~§"DóT5Ø7ÙÎ…*ÖÛ¸†¼dÐêBÁnÎ$Я_•ñ‚8gºnL\ìo·„<»+Êq¡©ª×Â.…®G,Û]?˰úk„e;¯þAù/¾kEIš™gªPu²;;áb Hô‹1ÅÿD¢¢CÀ¬Òváãrš2xUÇfl°0…Cd~c_ØÀv¹ù>²Âj8¼9ÕQ„‘ûª¨ Ç_4³sa5¹N3BÐë¹ä‚é 4‘A!öw$ô­RË*‹œ¿#>¸âÄ !0„õ‰ Ï# 1AòN |áþüžÆiضý¯3³?{T’™n¦»ÈqÝζ"0› hPN¤ÆqÇóDQĆâ_ÖÑçìÎä-q˜>}+1{ý}%,w(Øf™ˆYÐL<.Úðæ!< ŸŽ°Þ³¯!dÝëô 'ŒbegÙAú}ùt%êÿ8«˜>[bÌÔXa¨±w­åu¾Ø-áWðƒ÷Û¬è‘|­We´ª<0WQGoŽþ–ÅÄ\bÆ[HUº÷†¸'0¶—>­‡ìš Ó¯!oè,¢?ñ;<}K ¡ïØ*ÒZgXtT<“Â0P09‰b‡ÿhPY®î¶ÀþIŒIq^µÐBWfÞc½f;A—^ÑÔkë{SˆõFk¾¤déd«QAPö­Þ.v–”Ú—näñ‹«¦Ïç‡7·L*Ý4ZïÂnÚ‹Ô„ª¯á|*h¼¾eRƒ¦$XkóÁ€XõdX8º»~z‚c1­è©÷–(ü˜&,÷‰ñÞû;.L\KÌÝÒåæœñ…rþú1¿+$6vÉÙýZa£Ê<½ØÖÁ¿óq_é?%Xa­1ýŒš,šŽsx=é˜ìk÷ÉàÍs8èc7æ=ùÛ6^ñ6IÉó´8·ô§Æ'è»þ²Üm“6?H¦'zÂ. à·@Ɔ¥êŽÅÌK%¡d“Ul¤:Çp œL(¿7¯Tæê½¶AóÔyËý¨ñ&öåˆâŸ1Ðé^ŽË€=F- V ż¹xx-äî^ÖJ ê²âU£oG‘Í?< ïöhÐðƒ<å ÂK¦IÆdÔaõ5ñs%[N-á«­Þ¼1¬±‘~®uÊ{ÿJߌ ¾ßEˆêüOFg„Å$ºpZX°­B áÎΣHùîWÂQ5òô2Ù4 ˆoWX›`kæ ¸ô І0¾õâ`u«w˜ö9£†g¯r£äzèþÞ wþ_¤lð<\B ~¬Cü‡ÇîÙ]üB‚ʨš9êSíZ¯¦ hÏDZMƒ wßÑõãï-é®-‡åuâ·Yˆa+BÿC]"\.ö“+LYiˆ¨Û»Œ|ã3Ô~›‰žÙÝFÇÊ¿jÕ=6NÞbV¿s)©&Ä[1ð{PfÐnìÙÝò=¼eg}÷ ®ß½ø‰Ÿª ò“ŠjÈ JmþôÄEÎc—® TÿA°w˜-yÓŠpaߥV§öÑY¦µàXÏ¿ÎùÍ`%³üÓÎ"Û‘;D‡‡%N °¹ôi£¾ ÔöÉÉèàÕA#Á9<˸ ²j &ˆ7˜ÃÛ_«<{>ùº>ru-8í–X\š8™fVžá ÞØ°>âΉ ’´)ææ»~2sÌÀÄ€Úîd-2ß“™ùéô½´ûŠYÍÈáEœCÊ5¼Š,m…âàF÷^|ul²1ê~¯hôÕâkÊ»çy“¬Q}½$Áõ „=­·‘ÇÃ@z4Ÿá§Ø™e™EqE—_Åo(•Úo{2‹Féw‡ÏN5_~;õSòÞíÓç~–Rl¼ÞÞŒdͽÝ/yü—ÕÒ: èë‘ëýt½l Ül½Ùµ»¶- âÓ,¾ö(%â´N:í0©B µŽÆczï÷XŸQ£¼ß5pç%;Oá’Ír%¤ÂSoüôDOºö)x4\E¬ÿ‚7k“QÉ÷kɺ;‚Òaw­©Ý‘Ô¿F¨rƒp Ñ•oÜ$Ì\þ“€Ú²Õ¨ y›þ¦[çϽEð;éé®»Ê,…lWÿjH\°¹µ3—ª\ÌÚBÅëŒD´é«£Z2 Ëû™Ó½ !hùʵÄRFÀ¡­LÓ MÎ:¯E@‡ààÐqúÓU—íÁÛ7j£š ]8‹m½šBßÛOô7ýBÃs›5dYb¹2i1.ÈçL2ÜZ©èÇà ¼4G Æ&*_Z)´–*nŒm9•|v«A§T‘ÁýbûIóy±ÃèRøkO…&;]‚ÀõãÅåêf«Z-‘Ðù)Èex`-¥ZÒ™¼-!oÔø™-4P¶-z^T®¬äÓªõÇüKZäñs¯Ûí!~N¨3še“‚O_fI3wèC«…pî=ÊT·퓺¬T~y¿Ôâõ#m%÷6³ò)ÙM0þv~ks–ößÐnÏ›Æb[»* ÖN::ö­ÈÌêÙZ›ÊpAÆù{3¯DÂ2Œ;º-ðÇ~q4ÝM½uù†’–˜RêSŰLìhˆtjJˆÓ§„uwRÕíöÐ×”ó£è]ä´( ,+ßHáÅ;ÒSo æ èEYIo¨²ñþhA_?½[8͘~ê9±rŠRÛŽ.6ͼÑ=3µÖ‚‰ïíÐ.æÅ–l;ÿ%ó=át- ªµl}?°|-¢‡rûe–ð³ŽÇÓ†>!{&:¥W–‰åãyošì=Q<Í,=›E¼}±UÂr‹¦dÞþ´j$í¦¬¸_pˆšž…bÂÅ•jPÀÐÌ‹2z<£ì“†êi[V€Ló‹9–ˆ_6¹Ö¼aó.i& ÝÄ‹ÈÜçúÝ]ÆPûÚ²aøƒnV÷óÕµ+9: F )¦«¼Qó»Õ Ý•ûPj3Ⱥ~éN, ‹õ(–(O•Œí¶©$a—•6ÍÿT÷î÷ìa­¸‘ë¾³ Ø8P@|AϬ%‚p­¤â7숋^7ÉO~|™ÆÇЉ*"åðݘì'Y¤ºUî¹»×øqÀ|›~_dÎüêÙ•»´VèaÇõÜO^G`›)ÌR<m|ü.“È0´:ë/0Tˆø}e‹»^ö ÅÑð&"‘¯_èc: ; õlv˜ôúÚ„žV‘ìö`¬ø" ÄžtsVQg"D1°‚,N"—‹©Sypèhý,ó¢aŒ‘]¢D(ÿÖ ¬–Œr²¢™æ¹K!ZK‘Ô`ç-<>R…Ä “c"œàx=¦DT»ú§U×.lr˜bÙÑñ”.*WñQ úÀ Á§5Ô±úÆ-ŸÂX‚J ”`ƒªW*t–H²D¤egüú;áŒ^¢+7úm< ˆ“Î3XVÅ`n7ûh)?1ÈáFÖŠô€ÓVÓÇðà)½€.5©… `x_9b '5箚aÌ3…Hƒ4Ù‰ôŽx´¾x¢÷>çOšÍU!‘ä2ÿ¸wá¤ï‚á«"]>±3iüÑÞH ›`È&hˆ,Aÿyhúž½Ç½Í€”‡«üÌf¸-³ÑñBüF£WP!3„ÿbbœã„žJƆè<^ì¡Þo¼U#Îi¡nIÝÙ§ÍÓŸ_®´¦#p”š9 ‡sëk±¾h\‰šçM8‘–µ»“þöii‹ƒÖ-FÌe–”`Þú RgÞð7âÿÄÃZïhŸôÙ»¶äL] ÏÒ£>¥=……¿ï#^ÉŸM͉©™r÷¡ß a2Îi¿I%({vî͇ٸRž ÷¸ÉeÿV”ÉvïtaR·ÿì6Æ»Pi±òЋôI·Ö ‡¬°{Æá€¾wKÔ¶=¨¢aR-fXà—?¬ÞÚ˜b}vÏ–¡}¯–›Ãcεô—¶#6 SâÖ1šæãbVÇ{~øÇæÂËÏîv7þ%Áñ‹€wðꆟ‡á †W½†Äe¤.=*³§ÙÜ–(êçjC™nB#íÀ×𠂇þKa^91¡Ê_]bD4—¢ÀŠ¿tiAl5ëÍž‚¬M<z+å¿S@½ÀÓÁ7žÜ³Uw6¯}쀡‘üø;«Ré!7åFNºÒVò¼ 컂GÚÌR¹Ÿ¸šõè,{>.Ä B–|Ðþ– ô’•²'1ל wÁk¯öGLy…̼¢¨Ò® vQ1ÃðÛo-WùD»?E÷û™Æj·Õ•A&g0›µó~:`©u?·—õ㸱SFXV£Ù`p•¿÷ñY¸KßÐèÉe âG`]­\,ÖLÓÇq<ö¾¹~‹»ü >Š£…µa!ÐNLÕRë+£rŸ‡ú¬$¸ÈrN¶? ²ìsÇxEÜðÏE+"ˆÍùì§ ‡öã¥jEýN1 ƒõߣ¤ø“ÞsÁ¨î!vðÁÑ Ý¼Õe+©.Mrb/2À¤Žá!š–'ÂÜ®ó+댥4œ•mĊÈ_ðÿ=àÒgoIàs„ª £*ÉR¥š¥Oúl}îyÐÑkÊÜø1Z„1ËņªäCªíOÆ?G4¤ÙDÈ“hä©CùÉÀÏí«ºö­û7ùD¯!G óâñ>8Kd“?ôÛË+ÛÐÄp€ì®!Ì /ñ‚XÑ"­ÿO½ÀÛè--\§\Ô¼'/¯èv]PÖ§H`m9½Ç°`AÒB‚¡ûôRs?ƒÐx³íÝKÙ;íá ðÞg‹ÈzÓeÂMTy~ŸôcĉeMÒÜZX[ êÃq1ø„ÐàŽ›Æ9Êqypî;;Oýj}õàŒ¸HQ_~ݘû]ä¦xóB#ÖýLêZpK@¡P1Q$ÍåŽPövgûÔ9¯_4@ ®YQ§f¨ië^ÓCH4&|ÜUý}]í “Í—}O0¿t,Aõ}$w€»Ðß\‘x¨Zª:Êù<‡4‰„Pß,»¦Ç‚´ ÁŸ Ô˜v!>5ÿ2†ËÓžkÇP±ðÓ¨è*hRâÉ!o|ýäºð.8<ó¢ê~!ò¬ònšÌÁ_Q ‡Æ¾»ú¥øUŠSÝžªl½€7=yyrD  yÜcg "å¡/?Ñ»’ÄS°fšøŒvÇ´‡øÞóÞ9 4º5ŽÔÚ¿GqW(g%Q}o"èÍqâq¨PØ&…âê8è'’°ßÓ Òª–é2f}¾Þ—ëO‰÷x&PñR±ÜI,ÄŽ >£ ÞîòÏOÎðÜs2»SXæC xåÄRð‰,ÚˤUh¼/•mGxÁ€€m+öÐÀ³Åóðj¾*$“ày§óTÃżVÝ«G91ŠZ×ù¿u‹PØo8Ôv ) q!ªñ¢Énúä ³üùzä*·!®d´|ɤý×G@Bõ$.”Û9KZd/}¼©±ª ÊW_Æ#› UùæVà !T7Â%8£t."¥gÝ!!F8¾2©t´O\Ñ0ŽgfíkÒ´êñˆxƲGšaÀé^Ej§N°Ù³u3É9ðøo ú–Rß7—QÙÀ›Lƒ¿:pUºÇR;?õ¦ ç·®¢\EŽýЧ!G!hê¨g:uS£ðk$ç­†‘}B4„)N£§›‰efaqù‘“UqqúvÀWŒëßEšÔÝvƒšnµ/Ñb`ö\]HÌ z0ƒ¯¸O(UŠDOo*3QæEa²0]X1L’Ú&6þÌÓräG,ܤ°DWf&bú¤Œ­Óˤþ‹Ë3'ÃLwWwç«ü?„í3aÝ*g,°`¼‡{d*ß*ß9]ˆTí—4=Ñ󙀷e/‹TÊ+š<“‘ÎÙY}[sE”{-7÷˜ˆ^²lÅ<û°¶šˆÈãÊú`ŒîG¼¸—mkA뻜±@:¹*­†Ž›ù6 5>ιÃÓöz˜¥?þ­Å"¸Ù€ÝÉͰPÅÕïÈÆÈʽʼnÌ9µx1œæƒáæŽÞ@ò&˜¥“rõ>Ì[­Â ´3§»ÙºPj”#åLð/h#ºÕw1‹‚'8:9Ð ”ér×O²^íUÌL'÷q&vÌ÷9è|1ÑK eÒ "K•pZ ^ê_× zU ÉÛ5hß›aÓ™ z4èAG¤,‡ôV½¶v¹”{FRQo…Ü:PÃÊG7OËÑê‹È ðýEÏC3ËIûfÜqözç*I ©÷Þj@«×‚5CyÀÊGΆ]ÙížH¶Õ iì3Þ‚ÜÙÀÅBœçóM—ò_Cl¡=ƒªtôj)]Ÿ·% u:„,Ä^ÃH üK¶á…¨:ȶ“jq„…˜È­?©¨„'þfƒÌ§ýõƒÅpͪ‘‚¹ëä­ˆ}뢚]xЯ2隻̔† €³ƒôÕ·-;Û¬±g~›+¬¢§vë—MÂ;%ë´8ö[­µJóŸªçJFÝ·Ü”wÚK>šø|ÏóÑ዇©W=­pë±ýYôñŸ¯LA‚fv [ÏM¼`–øek—aÁ§ðNŠZõ™ ʹèb½ÃRÁÆVâ‹ã²‹éØý–þÜæ¡ž ^œœ¾\"nib}aÚÔ\Å´8†›\eÜ5ÆÙ&´l ŸÌ—TÖ!3ƒêÅï}%O•ꪽfNE2ú˜?@ÄÀçZ¬ w8? 3ûvt'™,¹¡­Ž-9ÿP¾C’äªkP73öMÓZ‚þœÅ™‘Ñmú}ÌÑËŠ¢š9— ¨$oFRDf{°údþÏ¥Ãñ‡•2dõꢸáƒtM0‰©ÅX™Y朇'7€¾_B¨3bIè†ç³Å‚R›EÃ;••¾oɈ¸ç ƯC4Z£@æwi73ŽôèÕ]ððuìážS*>éðÁP§7¼ãr $¨È“ÅÒFeË}n÷~Ë·Çyä5GÃÕÜ7,Réüà=‘¸]Iýçʸ· øeêJþw˜C¹•¸ú™1w!•äР$s "ï’Æ-Y^ðìKOR]·DÛ O¤a&÷C ™BWÅ”JÂþÆwªÎ冈Cùc¯_ ¯ñ­ÑOŸko—¯ ¾½G¶Ïy½sAæŠÆOQûB€%¹Ò9]T:Á yû6m+´ *¾Ôø_&e›Ä~m”"+ÔõeÂVúúó%÷ÈðsÞ”)}ƒŒS)Ê/ªð¯‚™ÛxÂZløw”RE‚ƒâ%}ŠûŸÎ˜¡)àØø ò­€z( ²h8“LGV#}Ë„²ÛÒ]M$Ú¸18Ìö€J6ôñ’µJê‚ÇCiU×Yž¾š¯ÁÒH³îjmÀD¡Sÿw>ò÷Ñ~ÜQ-Æ5•÷ÕZl̦æ.6M>y4­V{õ;={äÍ`(f;Xj¦tf˜»©Ÿ™m'p‘lZiöRyWK+ÕÎÝçÀ2[šõƒM±7i#áØæ7?g/Öv+ßk½Y‹†J@ ¸Z!Fö×)=ªÒ Ú6jˆµdnÁh™Q‘"ØmH’õsÎ$ŠI¨C×W¸][þÚdðJ¶öîg:ú€h{`öZê*Ä /öGìÿ€pN³˜0nhœ¹óŸ ÓÖô>ûKøòü6"ÖY¹ögÿxm²¶:Bn†m3È©”ÁàÊT@gv†o‹Bb®kĈ|&Ë´% íâêòëÿq{„Å@T‡ UÖ*‘^l#¾ë]EóT¬ý ÀOPÁî[gC­“n®BgÚÂ8V LM|r§v¼G+šþA,G>Ä ¿R¼ÚÄnq„–W+ŽyÎOu4ÝwŇo‡i·iZI¢àY}ÕT X7Ž\a͆£º¾){6€ß—4?û‹)Ç^i§7®S ´2_æ?7 Îj»ð}þžÒ‡IsúuÄNpkJ`&Ð rÿ¶ v^T\QhöÚ™KÓñU%¡a É6У&ýz×ÈOç:ì¦r>£5Û,V…ÄÙñ™Gö AsC7ISÉiÑekÏ0B´Þ®8 a §’4ÿ@ZÂÕÀåZ€7y…–‰ÈÏÁËÛ”é°QŠdS.©%-ÂntXPI R(jР¥üò¬ZûG´õ“°ÛZb¸Ö¤0ËE–6Ì^á[§Ò >~0£Å1iyµ¬Ñ Þ=ð†´è×Iúc™_ ÏB£{»åâ=˜czøÑÅ÷;€Ä£)ã›øÚþÙr² b¢&´ìúÆÂl9‹úõëk„Xª¼ÐTäXhä·\[ö~Ek\Ñœfó -' ÐrÿrYî|ø&¼GoH(ƒÅÓ¹†&Ò§ŸÚ‡{¾ùž{™.WŸ"0=AÇzƒd…Š–BÅ ó'ÿê™sâäÕ1õ´Y×Õ¯öˆrh.#ž_B°â|Nô'ê»}n,f»¬#ÐÍ­·}o^mseÆ™ENɆ£ØW©¿fdâsäóÒcA5,ÿ>¯„ðÉꪻ‡,æ^;z(²Ù ço«À%ìÜKõa¢BñKJ,b&ꦎwv Êï Ž¼â«‡ß£5©ûrð Sæ¾5÷É\RWùö«¿H¤þ"ç(+?â13Ê`ä(› ‡¤A(íEÅRJjU…÷1ú™²Ÿz‚„ö¦øjþ]2èÓÄÉM+/Rµ‹áÀƒÎ౎¦Ÿå×, ·Vy˜ß±3«ù‹+kªH—š#¡þŒtByøêas |I±jýO¡ŸR4åè_. ýÜbö¿á%WŸ'ÈžiE©‡¦þDz Êg• qpL·ªÐÒ‚^x&ovïS&jßT“ǨLeÒñix Imhï³–+D2ù†{¤ô&å Ö÷Ž} œÏ;?”õ„·oôáŸUˆ¼>4¡.p™D’4‚ÃNw ë ó+wÓÏCãFeRÌp8»¡NBÝý[ºcntB?Óm_·ÉŠŸ›ºìÑ6z‚NJ=»zLJà®l§ 1·ýƒº[£ÇÖÚÜÛEcyÓÔlû )M—Yû°çu–tãç‡ðsŒ‹€ÿ3ážþ•½Ã¦uj8 ¯£T2ï 3¥Túê';N¤ƒu0¯!…¥Ý`ô®%Å„ƒ\F‰ôË‘kÒ}óþ¡üFïžÕtæÍ{;ÌevMÓ&§ƒcÑæj]•HàÔë¹×w|Ųà P¢ÓîØŽ¥2'¶e.Y¸âF0»‡Ž1w°¬Æ”ŽdV/w1ˆ·F4 •`åš?íÞ‘ Ñ®P¼›ùh߯Ç×6B;v“xîD¬çö·Ynqüÿ4Ðú4N£À Á˜ÈŠ_µ2¡×9è~c¾@ÀËÞÆé¡¯m¢ûtÀÖp_%~nÈó»@s«þ0Ã(îG«¡cû#²!ì:”c˜@Ú.¥Ôl†äOJÐ=àz´Ê±?ýGéeÿ ã_4l@ÓÏ&œäë¤Ìù_ÅËŒR8™ð’<ÛKx™AlÜxB/ü· ðÇÁt™6üXÐLøL“f0œì±†wAsÄ£—„®Ìé¯}7§ÔwH36PÍjÀ¦øâA¦¯ý̰êÄÂiŽùtê9í¡9ÊËn¸Îô¬ Ü×ý±ó,ÌŠfDµüõÚ‰<ç^ ª\žBÝÈ]A\ò/ý&YXtVUO‚€›ù¢íÁŸ]•Ý€xí"xõ÷ƒ¿·ŠÙÃ0,èaÊCB“®©òHQÝiB‘Ý÷çÊٳ î]0Ü´7Ô'1µsÇ+HÕ‘®q0^…ùè_  ,ü`…ˆ(vJÈÂÉ4âc Émw)âα5µÌn{Åàu៤–ðŒShÀ)EÖT*öC\Š+¯hñɼ–‘¦©,o(ÔLanÄK™QTÎk³ßÛF.÷±0¹Ùž8‚Fzqò%­¯hìl#µO/-lö‰;°î'¿¾ïz€RÏ’¥hp„–¤ßMG- >xb…YÕvÈ~[|S„·ÃÇPwîPVt‚dÕõhiKEûôŠÜ)M}O‹ø tÇŠzÁ‹1…k¥Äá“´u8)iv(:žÑ]´-õçF??/>ß˵2[ÀpÞBAãήÖ"–BdH‡ÔöowÈŸÒû.ÌhÆ>ÆÊ ”(ä ƒÂASUèåðÇòR¶#ÿ‘QM_^ÔâTJF”-:¿fI]UKLÑÑ‘ˆ»l¥á KCVÝì¡ÿõ¡”ÕÆ¯qeuËRâ.þŽB¿øœ„RœR-‰qµNäµ±$%®à.=R•Ík‡Ì¶ÿyGó’+þO1-M£vÂ;.Iχkì?Šñ+ò·xê¦-¨·¢+8 gC"^!`\x’7í>v±nK¸äÄ“¡5®æh_÷6Å 8#\žŠs5‘O˜j(Þª„ÅM8Àt#ÃŒTäT>Ÿ&?Å57¸£†©BÅÆÎ1Ìï·yZ œtC¹Ù9¢o…Ñ«‰Žvµ(÷ C¬fJ“Þóæ“K9Û?‹‰Ž»ÈHáQ‹ÎZ`žaåMq­4Ú1’;F$ÙªIÁ`\ÓÇŽX³øÇWÿJÆç`³åaˆiô`sá§+Ã[Eü° /ô)Vwÿc`Œ½Ýg\”´ºQé0èÓî¬ a¿3X‹Ùå²WK¡O*mì™ÖaíáÀå¢åUâÎõeX æEg••þ³©–T¬ÓÂP†®»9 <=m»½&Ez@ nç/Çc8_ÛáASU)˧6#‘_‡Ò8‡ëÌØ£³ ºN¥ø1*µÑb>‡ÈÀ`ü$»Øá5"6ÔúÖ¿í~‚ó ã!æ¶{²ñõTw4æìÂ¥\] ¡ç¡ò|P¿EáüB6þ‚’.8 Ç5>”Û¯`§÷”;µ_¡ÉuW„ZóÓ*¨qô?=²j~—s }vâÇÍ2ïçõvލçèqvl¯Ý‰@à,˜k¿]Áþím—«zJÕ ˜º2 ÓQqÔ€—Ü÷¬wu˜OÝ9ëÿ‡Žî’0bfÅ$c¸òÎûÓÈÕ*ö×åôƒÄ‚p×Éü‰ò3<äŒTtÓÔ…²:$ÆÎVºcañ=’Åò•ÖÙ8½HVYœÓowË6ÔÅþ‡Ê™×Û‹“Á,_×À ‹'8ó×tdgVؤþ.¸P/!.6Uæ:â?çd;$pü|}Ôƒ^ÌXÿÝqØW5hMïa1'ÒxÆ»´]1ŒÉ‡ŠÍ¢QB„¤)Qœ(…—hÒ4~PÌhÓ‘'>ãÛ¹5…hù¥3È(Â=¾^ÿw6Øî¡¦Ñò&ku—»¡êw=÷Ь?Ä*͆Õó67âRç ÷>´fs¡Ñݨ’,©ï%£?Ù›»É†I¡m0úNÔs—âÿ8¥5(Qd<ÏÂPf¨¶ô|sñª½ÄóŠí`¸†!~òÌBhµ÷õŒsL¼UFúK˜1»¹Ê/`λy:«u£¢;lX€EðýFPä*š85<ä[–Éh÷Àºó-V6 }sB7ˆœ•d|ªµÍ¿Ì ©º`.Ž~XõÌhbšæ…òœtz±mÞHjEûÇt½–(É)ßdë;I4ˆMÔ×ýË£9Þ’l¬ÍÁb­}¤_¨¦Ösû"«#^ YG$»¿O‹`}ðõË& >ž4¹(Ûox²œçi¥øuÒ\ÅïgýLms”¬™hô£!3ù7}¡®´î@³ ¯õK`#Þ#̵2üXùuñ¹]hÂ*RN'&¬&n÷Oµð}:Í}< Î _.q^Ië+àç—ÌÊÝ»ŽÍ¦¿ Lfa‡×ÚÅ„ïáRÉ|†Š ÛƒÐh(bkДØ+_T@V˜Œ¥*÷iæH „8ß.Iÿ.и‰mh¦ÚYÈNœ'fŸuyÏLuFléÁ—f+ƒ˜“äxbúªÔ¨6ïò‘âÑW±RO{Üu½bþ]1ã»taE=÷X(“[³£(—>‹@n?Dõ;Û(0ÎU ºEýæµd„U8©a¾Ml¸ûEÃý^okÞÜ? ª°Ï‘ȲóDè\.loüÀøüù0šƒi0¼0_z†h¸Ü~ysó¬è ß¼ª>Iá6û_m¿nC¼äe˦uVÌZhñÛWMÄu!\¶ŸÄÍôÃ{®š!Î@Òrs²’ù𦢌¨L&ê…߇ÿ67(FÓñ`FÏðEp2 J’g«<ÊÔbý6Eä>JˆÀ¯êW]j1;*’Æ×ÒÖ¬«vZµë½ënVÛ×5ÊÙóöûh,®H™ÙtÍŠ‹ UÇ19dLR=Aʶ©ŽØPè_è ö[¶HÄ8ìgdä‚þèù"4ÛÂtèÓ›¡asN2/gÆø®ºÔƒ•}öÄ¡¶È?f.ž:ªÞñÃo7¨Õn«±eÐ6ŸÁäcP`øÊ=?9„/£í•QÆ1¨êº³ÎÝbT=ß¡|ÜþïÊ3=ïj²l¾ ™Aµq¾¹Dœ‚¥Âc‰§*D ÅÄcŠtKVÛ@%žøv¡Ñ¬Nÿ*?ñËK1{ Y2­E²“¼¼w®ëÍA(Ð>CBÄô·:èýÅòýÚ)bœ¡íÄ}Vi¡›9£V\sL¡†DdžxèÏqði±ÊÉ„J\~bÄîcmCÌà|Ç |<‚tÐ  µ{ÈGÒ¾Õ¶^o(ñ8#zN,ÐÊÞ”È>òíÇIÚŽuÙ!Hˆ"ï× z×Î&óW3£x°Ù^OYúäóY™ÚX´qžÇÞJ\Ïw…ãêÕ†ê±óÏbn·&¢<Ž Uü!™¥yP/]l–L&Î|ó!VºÝÒ8VTÿ ë"èƒ7É‘Hß­&Õ¦2¶“‡øWÜÚÊâ<\OÄ`Y:fùž\$Käõw†ªüp³0¼ŒüÖ1ؼeû|5 ´ÞMZ7–Y;Õ @òäá5pGÚ 8Ë®á–ý,lÙ§{ퟸç}á:lIõî‰$¸ÿWÞÂÄÇ—î‚[§xôŠPÇ h[=Ù}%%`ÝZ .O^QñHu®ˆ+™šûU/j.7”.©˜yÄ8…Nƒƒ‘§© Ò‚Ö)¤?Æå0Ïá[W–¤àpôH(J¥_3ÙÂxõ^Þ GQ ÷ ƒˆ a<ŽÚS€¬•Uï²v_EÃ-B(f,é@¦òèöÍšŸÏ.†ä¨§wÉMš†Bc|¢«^üQVCv{"°Î>ž„µO‘Ók‹XHüy\Ó a€]GÏ,ùpïöAù!2Ät|ý¡J{rð}˜í¨±ÅÂq^® ߨxÖŃxë`L00ŽXŽs$A0AÝ{Ðh"}ÙÍ’ “ØáóŸ•6„uòã×øcª`v£Ñ}í±TWqŸö–÷h?¹æÃd´â!Iž·¤UzžQ[Ûe¯ÂèÁµù];òf©tø 3Œëdã–yv¼ð²ðG„o£NcwÜŸª3Z´V÷¾¦cl :‡X1E»‘ÇFª”ëO€.ìæé5±þd‰[â” MÍæ¥Œ>ù]Á î×µuAœ|!4bè+¢âèGß¶æ;SäRá¦ZÈ é#9ºh.&²í„Ï ÉQÿjÕI´ÈÕ)ùc9Y—.…¥Óà)©¬9P½ SYó³|Ähý¸9 Û|Ù^ÅÉÊW·Òp¦whªñwìô¸ˆèî)p/Ñ‹ø(êÔ5é2OºÝQC~0LN QJïÂÇ¢Nq.]µ´ ¢­³b$gc÷¤eµ/<>_þ /At;t6–ªl¬Ëö—Ý-”D4ðç;¶?¡ÄâÆp‹J©5 ¾v0qpÒÌov›YÎSèé‹ ±€!»ðÓDh“,?<‡N“õ\öª1FH¤Ûd.àa·Z7¿8J)¸…[¯÷Ò³4'7`»®ÀZ¡bc#"‹‚3äQÊþ³6€Ï¶ðá­ë¸æãͲ™5jÁGˆ/,~h§Þ²°Ž|X± òº]¦›­½ò]¢GMsÞÛ·è!ï;xZ®¿æƒ-ÖA6€1ê´€6,{:1"×+sUǺM$ü–ÊϽíŽLÔÛ)E‚Z¸­ku­ˆzÁlGMo”FûOFȦE­eó<5YVùÎÕÚ$-ý ]¤ÄîïåuÇ4G‡ý&Z1<œ[ê‰rP¾Éès< Z<â ’fª¯ô®”œ'y¡ çÿr|‰$»0¾×uZ÷•Š©çœ°‚§sšX½¼²¶k@èòò “É”ÏC¡*]XÎæêÃ]8¦!7ˆišXÀ¼ßg-ŽÈÝM› Õ”Díð^„_“£¯*à ÿy÷P~È:p¯èòÇO(‰¦m’ƒL˜]é*0AúšÇ†ºQuvÒ)u%«Óެ/cj†h'©®t²vfÁ§?MA0Ç…ªòxEtI«E åÿåv©ÍçGÑ@Özw.×›7ô]H=ÌF´zîÑqY«òòkylû‚@-ד„™zÚ¡ÃÒ‰’ Ein–Ö˜¦Lk`³„ÞuDд~ΞD£Ûñ/vZy×Ô‡K"«ðáÔ„Ù~ê{ì¹åÔo9‚ZßÒ£Ž“I‚¿U˺HÞ´µ$˜Z»y¶-nÛ ñ% 7@ªˆóuüñ’¹ƒŸÎtqZãò-¼UP”€1´ì‘Í_<9•·ªeSçõkamsÂ7vúdÇ+ÂnÈÛdvÛH³mœËJ3±¾N¬ÖE\1† Æe–†ƒÑé:•æêÏoN¡*kS®çðÏ9‰™¶ÃØ 1®•l,¾W%‡Ng<;{Ó뻌IkõäpÔzˆBS¡=Ù{T°>¦ëš;nÓ¥úƒåY5åŸÃ©¬¯Jèèv-[n`øT6iΕÀÂoãã¢Î(6Ä„dñÁ}¬à¤. ½1u …¼"}Aյ뱦¿ÿaÓVˆ—ºcoatâð:à?Í´DÍËÿ-û­ßMIÇ8×))`^ùΑë r*4 ïД‚]7Ø]‚ð¨ªÝEF§};@†ø¯˜T^ÜŸpYYhMÂw¡èTxjæ‰Øüoƒüë¨ð' Ñ>äéF“÷ןi®iùÖº÷7u ò>Gݳr4üÈFµ,âÀWTÌ› Ÿdš¯]Gñk/s„­_À'Êa^‡æù¡¦žÕÞZ|SX7¡M© È¡þuéù èx—¯kºáÒÉ»¬Á(çußY2VlMÌu­(¤ÙSrI0ò‚¸JJñZõÂJX”ª7ÕÌÀcÞ¡ŠGC“ýø÷RÍ}îNÒ«úI–@³;{DD.ìÁÿtмiÄ4KËôë™…™†O9-´¡[’‘.AÑøæT¬ñ¯wé¡U°sÄ÷ûÊÅ\¢š—QEá›äg§öóZ-¯üŠZåÊ9ü+O¥LU^jÇŸ«Ùï0à˜ëb‰uOn– —2Åž…Å´>ëUÚB)¡~‰”YsŸå ŽìDEB×o¦Þ ‰âŒ#mÏû­gõ×IH‹OpÏX‡n‰ùÒŒup¾>êí`‡Ãmõo6Ì1v>r¸‚g`CÞª¼Lš€S«e±Uˆ½4=!4K{õ)ÿnHö¥?µ% þ»˜¯þ¼.HÚª}#@—#¯ü óÅà Y©x9y9q$;Ýæ‚ R‰i?‰"\6tç·tRAÄ:Y8 ‹^ݸý4ÁLƒ?.&n85y‰Âoö1€Öfïe,­bL”êk ä_#¯´½j„¸ê;Æû£O4¦G÷t7®D6>Pœ¶¿Ê°Ã¼ÎÖ}h{¼›ž´Îñì¬Sò± æ^î\fÁwÜÃ1ò%ß{|lÙ7Abj\ÎÈf]Ëgìïz^†B3'åGùqsgýúŸnAå´¾ÞdªHÙC>ŸüáÅ”D-Ά™Ý´ä¯ÇÞK»ÞÝcI„)oª. 0ÿ2¡Àq1Yçn¢LäÒÓÕIzw‘Ä0,$)6è³çõ©ýA3¥©ÁÜ[LX­ÏO¡)Ôj›—õ[ ›ç%¶Pé¶]Ý®T´ŸÊßGQÇtÉ‹V·Ç-‰­­ôòŠi<¶A˜qõ·/]Þí4ÑÍÌ#³¸ÂH‚™.ßC$ª³t;Ênr?ŠXÜ7+¥Ñl–¨r°¼ž:³n¢Å‚ir©KÚ¥µ;¤o.LÓž;’’û{¡Vu›á“ŠRAÞ¯ùùe›!ai*‰¦ò%¸>ß\Á½÷↧5¨¶Ø!æco¦úÂT—¼$™)}Y³«:ŽìÉÓ%³³€Ì öÉeP•í,/«˜’à­'Ìd1 {œÉv»t*Q×…ˆ{k°^Îë·ôD7#PµÂ“Néù"Ø;å –®¤ñ6˜©êlo~§eЉ½ψ›ì³«ø'~Ed@k•ÁÅJGë~§9¹[ä"ŸûŸR· ùÑ'μ†¿ül’ͽêTÄ2T)ÖÚIùWМ‘’•`‡rW¨Bbú3¼Ùœô¾.œs®ç:RË/MS_ìbÇsª6Xÿ1T{M±]8‘Èî@„Ñ– ¹›Àj Þ/8öw‹wØ^œ ¾L[ö¡\G¿./?ß#§=~Âa—ž&~àT¼¤•\Èèuìõ‰qèøEøZ—9Y¹bøQmyüE—£ÜÌm÷ÕSÂծʵÎ[,éo«!`»MdÍ‚ú2(÷ú%õ¼„åUY C¤‹L` $ýàÒS}Äö®ôÙ>Èm0£}¤Î+hFf|îiSLn˜i‹É°uR˜ÅG’/ê&kµIV ©x%ø4GòpåpˆÝ8¬v´í•¢Ë"Ȱ•—†zayM'\ýds¯~hÕ`‚ìü“r;ÂèÀ9¯èÙŒñ.¾ßñ~¼½~ «q>ßáËK¨ìríÆ´·Ð‡šÞYˆ0¶óõCÙÓqªîæ¬TÇ´-‘ŒºÂŸ8[¬+8¦Êæ&3tf¥œSõ>8¯!W=;Ö Ð2iÏ­½]Î\Æç"ð¤°(?±Š¦\j‘­º”ß [¬XÿqòB|4*ƒ;Ñ×{ˆÛ»¹zÿw]áðÄšpFÇ9^F5_ú‘½…~Òb&Õ¶¡–…R ‡Ylw)/’8OêÍ =A7äœ9·§ƒ_³ô‚%|| F—µQ¸ÉŸ •³»¢~nÌÑÉ{“©{ë^1„ο¼{š\_ó¼œ^àώą̲yõ€} ¹"ô‚€rõTúzŽÕ3ÙÉÚuúBAÄcÂeÄ–[`¥QY’ _»&JäT½$Õ¡¦?„†q”Ônn§|·çcÈ¢å¤ü¸ à¹ùåh×´ÛŒÈ*óäÒ=È)ðôsŽî‹j«Ö’ûì*­8†~n%öÄšøûìæÆ"&å¿dîñV|òÜ¡Òú3ž¼z|OW½õ/¹Ô<½5µ£}®ÖZ:Û:ýÓ®'Ce§‹ØpCÆP«1ZŠØæÂI©r뎷X0‚:0j«‡yp¹¾w¶€bP©%Q&ùxdÈqÞt²#"Ù3Vªâ?ÆúuØÖ›þI)2c¤€öŸ•5o:¶Ù_ü)©¬’3þ_P‚„é(÷|Uáa|Lîò8|¤’˜#!˜©#K-.ëFïWÅõÑÀH7è¦R/ŠƒðD2÷7wÄeÇöõ†ß¿ ç;ØU“qË;ó‚-ènfÉéÀ™›9åi‹š{Ë#!gkn—gôödKVÇ3°'å¯ ÒK~å[¬_lVnf¤¹@øá¹0MK“¯ÝJ öBð™0gHïÍ3®HlXjZý7~¤?5ZEN¬Z˜q•ß„²Lû—‹¢fÞÚª„Aoþ€¾ßJŠ$x žÂRunQGî¾;Î]‡kΩ‹ÚÇŠ”ݤ]„“Kº •¡Úw•?>5¢1[ºe©2|æ•®ŠP)¢Ö ‚Ð3Æk‚9^òîP^^_¥p/”LQpâöê?½Dt\S./™Ä°þ¿£kS‡Ó6¼@hÏ…g[zמqC¬õ¶O/¤ 5‰¡©¦)ž.Èž£á *#,|ÈÏk·3¨­3°èïpP*‡ ƒÂ´¹4Ø«Üb€Vriá¸*^?›¤iÊrfˆ»ˆcVn¤ÔsÈ®jhˆw™zåi1ك‘2‹µŒ„ÞV0¼0Ä6Ù\)þ­Ÿî¡qú/>T£i „ÌJ«X±hp¶Hó ëe{·Ö­h8ÄìKÐoRn’1élÊ^à¿ÿ“íêþ! P»hïÃöÀÙ-ï+ŒmOúc–%|ôëeý.Ëâ¢òi wïS-/,N/]žD½/Ih±ðšÝÇøu–•ëj~¢&4Q…;@ŒFM*)œ^œQpahÿ0/¦vÑóƒ|“‡%;˜ýªFÜ™ˆÝqbz’õLEô?³ÑVˆvÃö³ï;ÂZ™»ü‚±‚Q7–»õÊ/+RwRõÒÚádt>û§J^á‡kYÅ…ö× s _9:eÅï\ ;3w?+“ÿi¯oòñêjèúÈÔ†óâæT¥[–]ô8Õ¦HD|NX:i"ÍYE,šG—´2ÔQ®rטÅfA‘3mFØK©à‚€,G‚¤¼Å@›?.[Y7/ýÕ€K[™,ÏÒYu„Ú[Ž˜M"ý1š~íÇð ¸ýdÍ'¦}#_\l± Ú\übâ4£°Ç,¹IðÉlÂ+ÆÏ!>ªë_Ä&«mÇ;ñ© !Á©«"èMà¼I]ʵ@” ¼·M±ƒ!¤$ò!cª³ÛåÓY$ªêE¾)aè•§yázæùHl¼ªœŸº_¿+EbÜ_¿¾1Ú±-,uáªËŸH–µl[ŸÄù5â ²Þ®WièßYgÚ<„”Ç]›Ý˯¨fx\ôT&‘Oòÿ»ÚpZ/^AaJføHsÞ/áÆŸa1£"~\ Ç!çdyS\ÍÜâL²ˆ‹oس³Eã%Éœ4•™"ÕCöç‡%M]+£9ºÑ¹4‹œd³Lè¦îÀSFJ –ëY!X‘Ž‹Œñß÷_›gëÑÅgÝFZA½ƒÐWùîŸÎhÉݵºáKÇ<–ÍNäx¯Á]]Ä$4±P¼x—u$ãµÙÚ%â«iÎÎÏ$ñþµ>ùaæ̧¦G¡¥eíyÚ… ÍÚ»Ë$2¥Õ£”aÌÕ ŒÜöw0)CܯÑÚOevGÀH×%„•tœÛÛÈI#ùéϽ5RýˆÓu7×uú}›qojxŒþøRö¤,W|«‰ƒñ\)ë ;ýÑLÁu‚ÖtÉzMÃÌSÁÈ@ŒéÈc0 †ulnê.õÃäCÛ{%²3&µ±Oª²ÄKÄ—ßÕ±“Ç.¦ŠÍy€tº ©´;ô".6ÐúŽ3I$‰=´Z¬‚?y ¤ìe/ ¹µ#W9å [LDû+«?~LÒÂçØ–“ˆVæ¡zS"H¶ ±uí~Orm¯ û×¶JHĈ­IÅÜä Ô&BõkæŽC;Id6kc¤R Ž>Íä”ûeË0Á ú€6“Õ‰-®Áf2õ>Î'Ô?Q}·DûT½ÅAu2‹e;Qh—å¿!,Ä!o^ßh½¦˜ ûCD#j`, ÉfßEÀ©5èÛ–ÀlŒAÛ87­X*ºžc\N/7ÝM;®#H½q‹ex1ýŽUWt]“‡2®Ñª?Rèü•`±»{EwâÛ ³± Î-@|€@v-‹>衆'!Þ¹8ðÁl¾¢FÔñ˜œèrYÑÊ…Dƒ¨DbøˆÅ«½¸­È>þcÃgD®ÖÕÈêãÕxJFžæ0åÝRμ¾ë¡Â§>+ߊÞpR-½ºXL[Ï­ 7êKÿ€üÿÏ|DÙ­ùZØ›VîÉ.%ÇO¸()öUän²«¬GÚWh|°{•á”9dPv¤Ú®Æ5(~Rœ=÷ýNÖ–½ ¬¾DgôÀèÜNjøMw×+ø¾ì¹›ößìiÚáVR÷ •+Ã=³“¸%˜õfxŽþE—@ ðÆ% ÂØ3èÃJܸö|Þ•W{È™ÇÞK63Œn,ÿç}DתY@IëJÄ:\L6˜%• 8‘¶“-J¯§ œ1%){Ã{È£aùA潘Þd{˜Þï¹ÞÅЫ2”¬ö¸¢‹”D±H=IÏS”¢®Iý‚à¦èð'ø\ûký\Æ$g¶øU :í¶ÎÜžÀKêŠq0σç$ùM_u)V X¬þ] z]¯¥\¹LI€+:$Åÿ2E'¸—Õ,&í–D ö’Ž6Vhði?ºÙÇ ½w@,£|ñ— ÷^éßPZ㓦fIR2TgQFk<ÈÕg’&„5×’4xt§zwL€/}ò ã±ôbys[ #޽;ÃL ]óѶ„—CvbE.¨\ÕŸ1b¶ å’Ï€Ú\}3:ý/lŒý14=éÞq78ÈÓÉ[Í÷P8¾yǬ,åê ¥AGËU‘VL¤s5c¬µGÃ5.‚RÁ¸öņ˪.#hþÖ©'iàpUœ$ïøÔ7‰Ž_­ak5•ñýg—ââ÷ú³û±IÃàÓxa«u¿ 89gÍ-ìƒãô÷³›ᘦæù8#1†È‚>ãµÉ6ùÉùPÿmsn1úk²oã¬È7ÛÓÓ0Ôš¨„€bh¥˜Tkç x<¤žVB÷ƒYo’@C—yéŸ&>·MÀºw<{Õï&=.D0g¿DêEU¸Bn÷ÄïéZ:ÓØÑÓ—(­þÀÌd@DšÈR#Ž=zȯļöŸÀ : É•G’"^Úþ‚xÝ<Ôd™·Ö*8E)å¨1–ÐÉyg]zÚ@Œ¼Ž˜T~ ÃÂ1×Ùùà ’ yù~8húãl+úéžâùzÈåT@æÆ:¿o.â˜aç´…¶Ë_we¹]VNÈE kà}¸-¦©J}ÄOu2ÜetY¶ ¬†ø–(o©2äG¸úOIîÐà=õÓS„s Óݱ5­£L\1*Ä$²j‚Ò\F.j(Ùt¸Þ߇Mo,³¦¬*8¿OdP@€7ª™'hïŠn·ŽìÑ‚C*œdã¿ÝÚÚQ«ÊG*àR'ñ%›Ïdq¿„S¯.ûºÞtÆíÈÕ*ÊÍMí\‘ØVEßTSÃIjµº…À…ÁKp¿Ýá6†Ï*°Ì†ž/§ÚΆ¤™SÉ‚ ÖSa©¸÷jÞ4 oKªFcbP’é#:O¢è)ñ»"µ|ë2Î¥âümæö`×ÞçFßÐ1ïâû»Þbiû¢l…z¹#_Á.,¶Ù³ÁoµŸÍâ«Iy ÷­È¾\ç|«Q…&Àƒ #VæRˆeGÄ­•[·c^GØÔìÎ.=ûå®ý¾g/JÐU'…É;Îî¾ÔÞ1C"Òã¤_ÊìÂÉŸ”ŽOé¨ËÐ/ò4&;³µóê ( ´ÃÝÒ`Dò¢5h-.Œ·éY ­0z)E:¾* ø[§P ËXÅôŸVfr0š•(+Í5%ÇY ö,úâ˜ô芎-ÐÅLÍóßär>ǰ‚ó•~B“Û…’¿³£jÉºí£®•Ì©P]’‡á_'g6Òœ0@|Ôbj©Ý… £&3ÑæÖ²¬×ÉBt£I) usHÒ{Îb'^Ê3üv–îoñ”à´Mbz7 He=pišhè;Éç¨Dú/¹*´Æê&Ù”4u$MÖûó9ˤ ùÈŸ«’»yäj)yMCµ¨§ûÛÕëæiï˜øPª'OQâÞ±Àgìpÿ?QUébäìË ð«‹¹”¯n»\1{+!UÞº¾Œ#©BA$R§!9ZGæI&‡Ï^<6pœ†ì.´O9­nzÏŽg01‚”S$*`J2¶õ‚HrÓÄðË_?vØTáöªËÕ­‘Žg 5Œ+Â^ýFÍ'_Ftão`†J‹eÑ‘Ë5u½m{ð#ÌC2¤-å[z¿zRg4`ܱXœÖù½ã@”Sh[º¥­Rd®Ù\Nñ.ó—Íäý׈:=Z,"ôÁWì¡pzv9m …ù?¥†<¥…ôQ¡ê8G‡µñ<ÖóúéMYÖtíœVÑózŸ¦$ݽڈ¸VúC¿Ò2† ?6eŸ†3ìã…ŒMU W~ûsä§OºÝ£')€$ úÙànÒ—¢ƒpòÃK&­åˆ Ç‘[Äÿè; ý¿Ïy §÷jÿD*0REGMtPÜ—zÀ‡"(½úñ˜=Ii‘r¦c¼eKâVöç ïe¬–"‘;垸Ÿ§ƒÈH9ÏâÄLŒì °#(ë–ó1Yk*ÅÓdæ¤1˜ë="%E]Lù±²œÐî·Ú}û„Øà¼±xP&¾iÜ“Úí;‚SeݰÙã}q ^£UN$áäîë•CýùÈ-Ÿ´Ô/½Ú ô‡3­ÍLCq¾V¥.úz.ºI^^éA, òƒº²o±öZ¿ÍØÛ¦ãdR 7€wxÓ”fŠlo^@©4[糪ß$pÏdVŒx¿û†VëË KÌ?QìvãB‘¨äk¡ã µ G³ÄS½M¼Ë° ]d|#¥å¢¥iŒõöÎÓ6lq*ÅùRù3ó¡©ÇxSÿvçä9ÖIã™æ¨?‰Áç­é'úr›&/;¯š·Í7€¤Œ?gÂÖšµ°ãöÓféËKïOöSÒäh‘ö¹PµÇZ7zÄO äõõ$’Z?¥²ô>l ãN ù5ËÖ£ðU¬âí¿@&NIpöšèa,‰^ª`»;:¾I<+¦(lU»upH0X ÙZ¯6»syáÕpû8Îú¡¤&†©A 'JPÀ\Ü–> 0€†<âHâ \$óx%#2­s'lô68õœ¬U©mÑl7gúfØ)óB|U±:sHdR-ÍsvÄ"Í$¸ºE¦³'çÏF˜®œ`-¤ lu‚Ô¢ÙÜjøZ—øAq jwøQkª‰úVFÃܪzÌ íuâŸÞÍ'õƒVv*Ñj‰PuT|ç3­§–xÚÐÈ~õOå›Ê´`„âÍð*7Æ«Û?AÍö–†V6*BR§Y«±ÆX¶XLƒº ï}!àôF õº€ß­Ñ´ÑÛ¿‹‰uq…ºçN9yÔ¨Ç!³)òd“$à$Žò’¹ÛH!w1kÇ7Üu7 ”œ {ŽÙ€^h‹BІ§ee‘´©D¤—÷—. ¿'£€à¾[ýÖ¥4G(·ò(+v3§ûã‚ïe=Bð4[¸½Áܪ³èAÖDä"EJ£,î“õBšð|G˜ÎÝI L™C?ššOÂõ¹Pš§áé>Tå@˜äÊ¿8k6oÚ›JYùÃÉ" ½‹)IQØ‘ÝK;žÅ»Z­Wc—z’ “æÀ…~ ò²Äæ´ŽÐú´)s&¥ ]ÜÈ‹.ÐÈšk¤ÒJð¢·:ñ7ç#ýóâŸé† mJÃÊ“ÙyÖrFyD†fiÄkZ-À&Ú\ ˜„œ€o@½Nå#U~RÀÍvÅ¿çߟú…RˆbŒõuŒœ(í®üŸg@’„¦©ñУB*&±ö9.ÒcÕÈÖTF#!B§bó!:_S—ÿ€©³SðO 9í]9I@Êh?¯J™åÃðyŒ‘Ï좊ž ŒaxH§ÕV …†U€&qhÞÚŠÜã>£Üˆ„ØØ/Z0gê¥BPP¢•ó±=K¤ B6¤ªV³ð«|ÜR¡PŠP6>ó“•ÓC}áW”oA”yÝß…~4³'TÃSÓhÌÝc×i¹d*žSuR0S»þA{¾³¢tü³õfÆišÂ‡üªx ô1b{š™j:ñ:ôì7ª[`Âë—m2B‘§?¶hëû˜ùþ-Z#\â(R¯[ë0 éÐÙ(dJ¤àp׬¤؉TtPˆd-˜òª°É¬ Ã[0“™¸^!™Í¢Pþk%gE;ú°ýÞÆ\BÝÿ0qi’ÈuÉPíID©„”Q~#NdYVð‹ªùÂrtì,ÕXÆ«ö\#U¶1Qá ܺzwàk/ ¦ÀˆðÉÙ¹ ÔÃ24x<Ò[1êÝ*™tbµl‰ªÞ‰YK–çéØ=BX!õ†´øb¶4è” ãHèý÷>ò€¡¬M$+Rg'thŽq¥œDó¬øøYnH•ê­+ö¤r¤çŸQ—éÎCVÐSo'üTÙùÕ«y()ŠJ´ˆƒ”»ƒf–wF›6é˪IŒõ>ÄApð½Å›d°}ZAG¸wVqEy&]fÈâ£^©v7à.7O8_i2…v»‹„“b{¨L–!{/=Ì¢ÎÞ*ŠsÃÅ6› ãˆRl£5$)£¿M+Ùå(A¯a}ÌD©ãבeôM>Ø*$¦€¬™\‰ó £èáÕA!´#0¦_ÁeöLð¶ý ý· ÞB4>AŸÈ/ÿj•c ‹Šš9ª2©Žmv">LP +sôo':7óôrV5€u9 ¯[QϨ$вÄä{ÍÈmKÉTj¥1q‰‹îÕŒ ¸A@ЧcöJ áé-³p~[;KÚfí :׬sDsy¯Õȧ®ì‰LP‚C1siÂMü§Ä‘æ1GŽ’íEl=¥ Eñ“Kñ1º-"-”àÛå0Lï{¹ÁEË6vìl‹ô GÁi.£2lºÈæf È {F¥£ÀѬÇ9’H_ Œ8ëÛËT£ iF¶ ý>9ÛoþË¡î +QåÓDh«„åSPzY‚õ×`ý‰aïæ¤ÕX(þXOy·øÎWày oJNÀjS}ŸT=æF ¸ü,Íó &&«µ¸È2CVPƒÛÃ]ú5Ú áúš¬·VåŠ|gjSW6ïêwäž òÊ‹JÁU=Zò’—%Lׄ^gˆûÙ¥x†¸C£Ô"©=,%J1ÊåÒÊ/V¾c$ÚxMoŃLÑöÖ¤¬¦´)]y}Cðçv¾ò÷%Óh³YúÝM‡iZ$@¾Ó¤Ý7~gè2‹ÂÏ´‡o¿/•ÿ03çR “{Úë·»møç;ˆÂ:XTªjWåæüÁh¹N*¨2³´ g'¯*ЉYÝB¤™Qw·—hw.Fì`òkxG½Zf™Á~zeb³cgÿ;Ug êjÆämjKx‚¬û®jÔ7®Ëg±,ûy¬Ò,뉿L%>ÙàöÚÊê™ [ ù§ÌA bq÷ü$¦Ö3ÙÅóünE öжµ:óìYüƒø¼éiq? Õ¾±(Ü7`TôÍ܈/m«ä3Ýß*N©=̃eQKï&Ë£c±X3bŽ£éb l2œù@øéÛ¨+¡‹>.…ÜΆçUŒ˜û2ø˜'SEÁ×Á ³¾)]!¦ŸnN<ØUSî,³àãyë#wä1·¼¸%óÜÖº=¯æ”!ÇÄ â…þç±6ƒA%í½½´®¥VјÅw½ù&R¼ ìN½¼f7AaÛ§ž[(æ¹ßÊHô"ü‰'w:bªó®W5¦FKPào´¶/Tõ¹‡"ÖZåËîéóqk²“Œ§¦?•ØzÀß’R¡Š›‡ èMÝÔ¸w$qâÞ¦”VÌ&>ÿ}Ùì¹”XŠ0ÏvûÒ×¢ÛIE¤3Z-„»‹ùì­ÆØð“ÕfÛ¹co•º†q³ÆÊ±8GøƒªÍ1âçŒç:˜ah5²RÁÞæSDÜ—°Î »q¨›rÚÝ;¬Ñ‘ÚÂOü3µ‘H=·ùA˜Ï´¹­Ú€á–‡~{S\ì¹i]„ Î1>€px¨å®YVú;¬YxÊ-»]œ)7/gP‚Þíz[ àPÜ•qëmâ• ¯ñØá¡S¢+A D}?‚^h ÖV¿²=Žn~pµ„X%»Ijý‚ŒZ]j¶XÒ`l¿²:í­UfDn뺘ø>GŽü&z{ŠàåÖ˜çЧ‹«·ã˜…¶ÙVL'ŽêtNߣH/ ÆÀÌ|0Éíòc$Oåû³½&zÝn¹WOÓ9вI·Hb–}á @¤[5陼 OÞ—M.¢V+ªD² 4½üõR”{xÃRlcæWcûÞs}çŠN@ÔÝ?÷[B˾' msÔ“ÒhU–I¹™Xà™í«ˆ±3\çFfo/Ét<˜7ñu8ÐæeóÊ÷J}u¹Q‘_uõóÆ)D°áÕƒætøŠcr|~8TôãSíôØâ†BfFîÉD@ƒ ªíöfûýég0‚Tí Êv__ÆH@htk{ŠçÕuß8;Mê³Í펫;zY*=òò†J°™÷Ó—¢âxËGÔo¨GöìŸí×[ûG¿Û±ß·WIóŽTh¯íØÛ­Wö·cn¨òT3ç%ûuöéÝ~¡Ïöê×íÒ¢ øQW8ê™òÇ0"^WéƒÓÑQÑø«¸É‘p#"pYëìñ°¯WwF2?¤yòÂ{wñÚ<–â ÉðÚX*†­¾.!Ѽª{?F< dÁåDCf§2YgnFnD^­î±˜”Nv€šIZî¹í”$ªº¥ ±Ù'†;vK¹Áä±÷Y“á ßõ´Àeü’^[É˜ß ÖZ•(ó&ææ£‰©«bf‰vÉ€I!7,òÛp—>›Ÿgz6“ùÄyWçl¼ˆÇ9¹íë™’øª|zîP—ÛYFÁ²nºZÿ!ñËÁQfr7ògã¦nmÛEµI“˜ð¹5•ƒÂ#2Mž(R,m0q£½–ä¶&» } ¦à+Z•9?®«ý  µ£°QÞâ$Ãú»ç6ï 锇%áÝ5â~%l^Æ ÐhqǘÀûŸßÿ0ê3¬lšåÆãÁUòêŽ÷Ü'¿ÅÀ‰™9]Ý ¼Ø½ÆCÉÃt>AF;.Úèñá ³6àî =(ÍŽ ÞXõ+ „ŸÒ›-  vÑ?` ¦æ\@g +°z˜ ¯nHà+ˆÂ -LïQ_ Q](ÏhVO ç·Ðv׉WüÓ2½WL\í¥€¿„­OH9Íør¬3òÿ„°çë8j¶ÅWœM±ù{é{h´?¤éks²Ô¥;÷‡Të±î–µ}’¦Ü±2/JQnÉ ¸s÷xe7%Æ¡œþ[`L´YƒºO{ý;O«k¨I¹bŸ˜>|3^êûÇÖ¯À,ÝúE§!hËÇHuÊÔ?{w–ì”esŽÀÊ+tQ“ef°­é„yýî)9^hM?E>·[®[¼·€Áiý÷;-ÑÔÚ ]Ì[f,Ɇ‰ ®Âgò“^ûÂTÜÛ­A­X–ÐsZW¸ Ež/¨*šýÛ&…ƒO,‚C(©ßGüËð”&ôÒðý‡ÙZËj‘Î_ÃØš¼jïõ]kU¤#£„ºª8¿`ra3î.W>\÷"JˆÛ$÷½ó§Gs:q{Û,óËj.rJ†‘×ÏÃ̘v(ÄÇGÐk€Ü+Žµç¿ŽIˆ;#ùç‘ ýÌ ð-ƒâ­uÌøËå =t]© PBHf;¡ƒûRæÌy2qižÙ hµg¸[ÅÚo©rûŠóL¥d-ôû¸Ú^‰Ðj=jLÏö4gFÀ@hzÒ'©Øv¶¬¬6A$' s‘¦&%R $â%7#¯ú<`Ã%'×ú½îD;åT7G„Êp»MŽœÇE¡”ßg ÕE«‚ªŽ£WÊï$±UÓÌ—ј‡«e›Øß²HŒú>ádžŠ{ðfkýÁæO:qãZ=8ä{nߊX?þ²Âý$;ž ]ü(59/@Šëì§ûŒí¶eçœ.Ö¥_ôßyÉpG96””ïC)K]`¹Ó½›Š„ý¢æa8G¤ûm©±q1{RѰ«_d[ÕÓÔì8žÏ¿IK¥‚èá±Æ˜Š‘¯É®":½bí&R3õ 5­{Z2`ÓÀ-¼WÈkɧ3xþáá¦Æ}žÒë3b£§w‹$N+²Þ}{ìI…† (ƒ&e¿þsûRâr®™ÿ*îkÑl5\FÃ[•×){>eä9ÛܧýÿEØ-ó‘uÛŒl×âATB¿æ±­îx8?qÙ²–‰ ­uy!lŒB&TÇÄÃ6Ù˜=/9ÆVžôKãˆ4ˆ˜h¾=èTµÉ˜¦s]V?2ZÞ„·–õ57 C&vKÒZfJ¿ ŽËW÷EkÆÔ=nuªLЂ±ñYå«ç’l]©´Þ|ÐïÛfbÞ]OÉ ã)ÜñÁÎ͸..ÕLšÃÀîïDIôˆúÌ÷|¸–ʨŸ>:¾¿Ì©x¦Øí[,e,³OâÝ‘œgôˆ8ql°ûÅ2‹Î²-ŽRÍ`™oªÍTs¾Œ*+ÐÞù7Ѧœ†RCùýtˆîš3ÈUy˜ lò·rŸfÕ„ À=x½“ã¢E$Lð:0Þ'!fo¢Ùå3:9@]QæÎKøVKF·Ú*úŽû’N¹øAÙ­Ó/âØŒjcgvÅ6h¬«™â¦y½ò¥‰ÀÆ…Ž¥»3òÉÞ‘r±‹ÌºL%è±Z/!&Üú/ìÌY¢Ý¾‚¿`=cx3 + úÒ}^kE ZY”…ÆäÀšÊ ÕCÏ»ÇDÌ®),‘(ž˜|A ÍS‘“-·&dÛB@­a‰°º­“9¿Š^—2£–ŠÆÃ _ Ö)NCIwä¢÷P½Â’#ÏJìÍÛX\óÇT«åOÿ!ŽÆk˜Œ1zË’z"ƒçȺ ¨uÛÑÖ˜nÊÕýOm2Ø‚54^ÂânÕ}!mØà(B°,*ßÔ ‹ ÷§ŠàK¥ÅA=„TK»°¥uÆ™×õ”‚`̸l(#xDºåÞQ@Úübz„kCˆëüá-’Δ’EÄÀB¨Y2MÞÃ.o8i©ÖÝÞ¬ußÈ„^‹Q8Ì’®kc N ç D!Ü®fßݺg°O,ü§]…¾c>Ž"š‹¶»5…{ß”§+e0ÈàxǾUâä|î¼»[³ÏDî§Ð‹"é|;üÁõ°PLOŽš@†¹VÑB9,½D9ÑTØ lM¹ÿ?Øp|dÔ’Èq +DO{ƒ•^8Âè;‰œÛË`MàÓhÙ´9ÑltýÕ³ö7ÈŠ‘‰BD3.¯°ÙÙæj3L>TXv$‘S#±Æåª[óZë€ý4aÏÎøPº,Œ•ºž$l=%®ÔÈ»Ícôë‘6V¦À‹ªÿeD:µ#\ ûñÒ4jWš P±©”BÀûz0a××K†ú]LJJ?ŒÁ.€Eâ…‚ÑaˆwæË R)èU"dª*üª~MEÐáO¯—ÞŠ ¡•>¼gfrïüÿDúF:D}ÚTžÂï:û¯ý×3ÙLuC5*³£6Ç:Çß›4å¡7Â)&Iº P÷}>ùsOÑ4 1~ŽVøqΞ•ûõ>½0|Ù[WM ¯ªŒŽi9è‘üRÇÓ¯xË‚ŽLÖIŽ8j³Ï÷èÕ$ÀBÛ"´÷vZ›c€æ»gÎË@7¡âPHÐÇ+Øb˜MGŽ+‚g”ó»Û-˜7ž|¡è•$G°·øt—LO! Þ@¹t}¯‹;ø™.!Wî>¤áÇúthÍâKqxü*Ÿ÷¥þѪIRÃc¾2ÅZ¨¥ÿzûDÑŒ¢òIþ0Ûl¸HSÄŽéþw`ÀbP=ŽNßú.Ÿ^v'léFÙ NÑ'³C7ÅY œéscEؾ÷AÕŒäëV¯B±ÂäÖL§8[fÌrpl?ψØ_Ÿª ÷ùMT-%³ aöWHŸ Ùº7uù<µ§¸@? rFè2ÂÎsÂÀ®jB<±Ø{ßóBÄ{h­÷ÑZ¥ž,{÷ˆ„š1Ã5·|ÌurRª,7HïÇû?õ(] |ý±“šÿHÃîdò:¹_œl6 Q}~œ…numB*‚5k]à¹6ÉävY8y‘Íΰ7¹µð-×obˆä®$4ÈÊßÜDZ‹|Ž­~ÖˆÑÕUˆæ÷”)bÚ{H ìu "k:V½Ñ·{ ñLÂmæfÑ ¹í¥Õ¶ãd”;¥—òD–è3kó‡C J¨€èÙCa+£"Ä x÷ë¶g4Î2~ Ÿò'é}QªÙØŽõÕìÑ\ü.Jm¡$Ò ŒÒÐì2‡ôRù¹ØQ78…Ã~ÕÖú×ÇUÏ9\£?4§È/{Y!7i-:/ªÃrôeÇdç-ú&=÷XSøS~‰ g¸;û‰]ô<=å0±)HLjû¼ËïBx ¸[±Ís¨P¨äÆý8_jÆ2TF· ù€ëÂ/ƒôYZjqŒ‘Ñ…¹¢_š‘& \.«±ŒˆÙÝ H{Ñi«ï0ú™ì&P"åí \»“Ò‰¥×’y©þÎ}â ®¡öÙÍe O¢&JkÄš ˆ:BŽÃf½ÔDÈ•MžÓ뢮 kþøQY£ŽêÎ;8¶%,Iç*Äž:øàdËÕDZh/݃KûZÓ"^¤‰yÓРŪÔܾü¢ï²é.sO4;AŽï®#ÚxfB|ѺnÝ,N¼·çU? w”lÂÇC€7ˆ¶Û,â#Àq4,qœ¦fbɾ76"BÒúêsÆ1¶€J1W;À'é\ß]¯‹"Ó¹T€÷88»ØdªÓÈX—1‚‹K2\vè?a¿_>‹ÙæÓÕ´|ÇOдÇšr²~b°ÀÐÍØ¤ó §@-Öï ¡ÆIuGbQ«Îò·ò …fCóo³î:0„^OñÕ;ú+•pūϭ¹ó˜‰ÌòܬDÐ*ðá^pŽæ¶ÔÒÁ­ûDeÚ™~Œòµ¥@à~s±Ý—h#†zS÷uxù“^ÜRú~IÐ¹Õ r?c‹ÊV°„_û-Ò]=ø·4$ ÌÑ©ÐÊ,]8Ív]S¤H@ÊBŸÒ]0ÉÍØè ¹50æF†õï±gyÓÊØŠÑ€¾ZœµêÍú:«çø–¿Ú|ö~æäгç­@3s ó5»…\Pp}]\Í/Ï®>£‹göÙõ°Ö ~ªÒ4?(Ñ"Œ9Æ!™%EÝLláýn( [$o±Og®Cò¾h  t³Â´q8¶Jdï_·ý?þ%ÏÜtAp4WŒÄDä´vX.ƒé9Í,“é1@èä1Ó¼ÔŸ­KSL–LÉší⯓˜«Ý×¹ªüµJ=èln/KæÇб’BÌœ‹µH:¨€_úãü KK{R»Dzhû•ì†þ?3zŸãÆ|íˆqâ3÷iQà` ÕP@èp²¼{â`¥r»DF„~ɹL’ˆF Œ§*öÝ•xÏ^jV#ù÷ÞE·Ò+EËtxDèÎ)FO½Ì{,C¦ fÔ²Z:›~ELôÚ²Ü{Šºh’˜Õ BÅ»ÔÿL¿r¶WBÕb^ƒç#=¸dÀ½Cr¦ïãŽÎCF|TØ%ÒÅ=u=9IÖ*?¢Àm-С(¬fÍtS`\僧,–’ï"¹Ó6mf¿Bͽœ8èåã©\¸œHQℹƒcM1&KbŒÑ(/Ê~dƒrë¼ÑAEµsÂS‘“lã2@áf¤mäÚ^’"ž²8FqefIæ»éqŸžó‰ÓÀßÏqÒUÉ¿£í0kÏc³xmUå|úÅê‰`Ç£(žLfÃ…„K^"ðl;4Ç¿ÔËA©¬Að‘Ÿmz"Ä4j´»¦Êx½ ì̸h–à#làÌú©E3–ë¢]/‹ñ±®fáò›õk_ÕÚyùã¡¿â7wé¾Ò>ûDï´vûv+øluöîð×ûuïöîVý»#ûv3öŽþÑOÚNÓ}¤ü|ä=öì/ðØkíÛïá¯[öëçíÜMûvCöìWí%Ÿ8ïÚPÐßQ}B´oöêÿvêÇíØ?Û©ÿvêgíØÏöêçíÕŸÚ;}AŸ´ŒøWî4SÊKy9¶Ñ {+C1^;Lucqø^sŠÓ’p“çþlq^ãî!0~˜°s ¥ÃòÙ¿¦ÐV±ˆ¥ ïB9E’×_3übWŠ6ˤ^_õôgìæ¶FæͪU¡¢qÕÅa|pi|p(›¹kdé F§h¹ ˜º(‚´Cš‡Úã}hTøÓcP‡‚\5 Ñ·#\f.Iíšóc£–ýZáép¾åä¡›i¬ìmœ¥Z ›vƒÖýw=éÍ,gB9Lçê&}©0¥h{ Qñgóh ñSw|ì\a8{ÐÒ4M'cYÈ:^¨í§¹¸Š #®J7>c’S$ˆÂñä®C„ô=3@ÒaÆ ¡4ZôÞ° »Ò{Oï/N¾pÃõGœ8 ¨ š1Å:BóñãßkË­°Ð‰%¬™ÂI§óž¸AuŽB_…߇u‚æó¢ â¬Â讜}û0øÄ¢/.­£¼c íØâèå±à¹ýè0ZÁô…ã÷™j„̼ž<ÒßwƒÁ¦åøÒi»T¶”-o»ˆšûíx `‹¿Êœµ{6¢oEÌi®ŸD¼;§¶å ¥qÎ¥´a¯ð}Ò"Æ™ŸC`sÍD…´ÐõÍ#0ì¤À#¸Í`™í’Æ´ÀD}–KÙLšãIÒØà¥êÓäÝa<š—FÊMpyxÔô¢ˆ( óÜÖY¾b7FÙhŠÇN½XË»-‰•ñU2³òe@à [^—N)3°W:¼ÅÅÊÔ”é1t¶³%ù™w9LM¦µÛ-˜)â°c'a•Æk?Æîv솱Š#\˜Ù¦5§’ø^: y€ù5ߪâ¤}ê¾ ´?ïß‹¼m¥IEýx«ØW1éäÆùÃ5ô¶ô¨.CÃ3ßA-O—¦û1]bÕ–¥„z¾ºÿFí‹D”ñëhî¡1­ŽÚ¨úV[’ÿ[Å3Z<·?nUa2]M Òt”îWÚÓ¡1ç¾Å1Œ½AId}Fne€ivœ©{©¬ü@OVáŸI]ûfØ2­¨rÂâœæ’^øÛsihÒÕªã&àÛ<¸kùæ,£Ð]«emAí늲%Ùð|v¥LªŒ Æ€'êéõA] 4¦óD#¯• ÂN³Wê´qOAâ„ðüZí“Ä8^7w­Q™ö‚æÌî^ì¯@œ ú©Xky™–R,‘ò­WžTJýý*žÚÜ.XfЪ oüÔþ*úŒ1OÐx˵ßý¹«–Ç“üD„Ó’ÿ )Ïôü¼5·I‹•)KÒ/Û†º\n˜Ç4úñœÎk©·Â¯ ç€fáÜÕ×5Ãê†úñšûV;£ Êò…ÝŠn—´Ó"{°Z¾N–¥®7ñTiÅ«S¸Íu¯µŽç §A§+?¥iŽëL·¥¯Zùÿ…”¿–f)'|hß? 8ãC6ñˇ݉úìvx=’Í”]{H¼Ôe·“SFéÏp‘W×þÄ©¿n.žKV2 nŸQ—¢ýñ‹çÄæÕw4«úqǧ÷9u]DîC¤^õ|@4ÉL-è.qCisd†ûœž7ó”»p =å3AÉž&K¥  µ\=ø&¡žDJÞ37’@ „ çP 35Ò¨HÈøH9ß0ƒáHÙ¹\_j²¿W+ÝTšH¼Œ>s§·IÕå—IžtâÎøºžŸÁFÌâI{¦€ã¥@¬±ßÛQ˜pý`RÜÒ]d·Ú¯ÔXžÚmrq]¿ãŽä"ª†ºý ÏIÑNxÁ}”9&æ¹\E¤„(¸~µ³µŸZ»®&2z"ídgåYA”>8cÖk(ãB9¸2¸)j€%£`Àø~#Q2Å<ÌÉ4üƈñqZ­? º½°+Ϧ*ÆÎgM§Ic}ÄUf5Ð'M ¿g/w!È©;,‚è›Ó$•]¾Æç) 8t˜~¼Îgå"9x¸bF„[“å©NìüðG)°Ï«Ê4kjlôQä]õÁTd]ÅW‡y5UQ$KM¿'áþm”‘áQäƒíønÑ’YISµ<ÊU´HyLÈ iÿ!'„ b³s_Ù Ê´äÛi ؃R¦‡Ò´‡½ ´4>At¨ÖýC»8RSYkýoÀ~ûØÏ••§üÊžWJ¹<<Ð. 7ñÅÿ§¥1wl“µ2ã£ØcBPºf[ߢ µâF ¯W’!ÞaâÆÓF «µµ…Eêè¨×‡æç;œI–~Ñ¥?ÃåTSç›KR‘ ‹àÖõAa ¯Y-™ÊçaÆÄ©½:g€ƒÒpÃmù÷Tp1 ~VÉ.¢JÕˆiFÚ/ é«—‘ý·ž¹ siÚwpkîwK—â0 €üÝ’eQÂØñ¶µßS$">÷Ë3NÍ]Z#ÍKR†MbbÉP¡ïy¹sŠ|{˜Íã*².~J%ïÑ5 ¼È®Ã¦Ä'CÏ Ý”¦0ý˜!ÓR<õÜ]¥;XÖLí¥²×Søú¾…leªÝt¯‚OdžS€Ÿéëg%¢;GøùÔØè¦OC¾ÎÞR`ƣ׫eÛíqU3Ñ¿ á(wú×ßfUKºS ªNÜ ^4ì“?p‹(^]ãNEFV~‰aU1FšVù`^-ŠÝibJˆ+£îMŸ m»eF ´]¿[XÜTTz J¾fÎNí 1IXÚÔüÓ²ð]Ö V@GYƒÿ}ƒ)?”þ™nèâÉgùxõÀ+é!Š¿J‚rÒ«ßyX<ý–X²’ß±9:†FôÙ”4lÁN×+!"@zs?¥0ãæ xDî!;G4ݘ‘~òlC“ø=^©®NºDyݬÎxçÈÆm³?Ôu  *¾×0B‘‹rXʪŸŠ§ÚЇgýí6Z<â¦uK½ó¨ìy­?v_ =ÙXÊÍÀç§´gA·H'7üfFl¹bïý“ø¡°§kh ÞNä}º]vjipígi±÷"kÃyj­eNÍ êAñ“õb=T”(²°BåEÞg¥ÃŒ]ùänˆÁ–…‹Y8’7ÐylýÚV_ÊaC~äP…'N¹wö‹[çèKñ0´bš'…Ø~¿)âò¤­eÅNÆpWt˜\ùnÝ%ÙQ2»@wž_ñœB+䚦©Ã|Û¦CÏ3üðÞ󧧬«!ìòá¸]²µ×uáú3†4nL ñ8[§6jÒ¦KÄ ¡à®K?ÀgjsÀdO”AcÒ"¾ª¨>zlžò‚Lcè gÇ^óAµÈñzF°Jcb ‡È0W¶"ÎEùBîÝ®> hS1¹† ÍU7®´“°*>„‡V»aûö¦Ît“ ý—2f8ÕŸG ñ’€uÍìì=—ÄG¡ÞpoĶë /^Âé¶É:p©OñE+¯zæ<é®8JܧÇecvrÃл…B =:–Y±“ë‚Ô¶m^/óGªMY)þœªçU^Û÷Ú=Þ37Úº6镽@tñšS×ÇØUøcFZoã Ð!ïs± $:Â%}ÓÂ!v£›´ÞÅðc_äçææJÞ‹ÅÁ2˜>£s‚­Í£9Rtn ØÚĸ‰‰û©^-siEYèž6_P”Ë©©$sñô<êØ †ÂÔ>¹YJÌ-¼–©ÜtA€•[´ÔT®"år8À…"ÞµHÀz÷>І !öä~ù[”֖߮ÀNNrÞ§C/xâmKÞóÏ”ïP ö ìÊð6¬®Ñ–Q¬àI1b(é>7ìuW!À¶¤¦;Æ õ|’*ñ|)p"#‡’ÅFV¸ ÄU–ôU”™A ý¸IóÔ ÊjAÚ¦óÜ’¾¨ŸÏÞ«ÉT ÎÊB$¶#ÿuýÞ0s:‘2ì£!Ìç;‡ßã_Eî¿–¤'²#ž{ilh»‚„E2Üÿ=ê1}½Î¼jG݃>v¤›D˜Ú™£ø“`½ykwI5“Žs ¢±á|ZÔ@¸9Êe“b¹F\q@&?ç'Ã>]» ‚Ôÿ%T®ýEBN1ð©ÛñÈ\{VfÖ1–Ê|hÛÏôßPÌ™BkA¥Á¹ÁÂë/ÿ%`1- £ÿW°rUp½X¬Ø¦©œ EµøáØŸ sâ±w˜!M^¸# °·‡¥»‡¨\_—¯‘Q§€qž{ !!ƒÞsÔ}ï§d$“9À‹ÉN˜ hj®#®¨OøZ}й˼û–“ÿoŽãz;ì5$¤}Ÿú·å0aân@J’eBøw{I»[™´(ƒ6´§Sèøl%˜Æ!u?’ì¯Gïw÷ zÖTÖ‡²Ì.ÙE²lñ$ÐÃÛQ£€#²ûò %?¶CBp«DÜè ðãGÿo'9þomñþöThËcá|sÝ3'“l›xFš«ö+Å7 úE¦$eŽàY¦V§ë Úìúl£Aâ ‹ÃSÐ_?¥Š9Ôn¸#ì_•2½ÉD.41´1±rDƒÇ:ÚyXà 7mïOfþªÃúõŠs„ĉ,y'¶Å¨wc±È@µ]Á #¶ŒOY#­HÕúÜô—âmªÒtçi>âÆ¡¬}ðL»8Æ[ìò†»{ï äaÑÖ ó éYjiGïYçÇ ’ÍS29Ô«ÐÒ¹¨ 7ìqñƾJïUøZç ž€»a-–>õ7µ‘ ˆÔ²)W ™½8ÌöEŸA­`m†ö“¿W¤:×J°í¨º©”h¼ ó•ÛØ@Ne0—79:&ÄÞD·9ºB•¢óí )?5•Kf^A½*( cÂV ŽÜãz°„Vñ9Èq|Pþ¤9P^•«X÷`÷1·Ò#T)ûš¹kOöE³Ó}L?áz5Y +Ψ᱌7ÿbW†¿ ´»>UáÁR‚y7“4äÍFG›“z5%‚½=˜‘<™77=…!ÕÈÛÿUðP”P2.nÑ×-;Îi[”öâÇÑi„îÕ‘žÕçTg2zÅ2ÚÅžw2ýÏMºîÞUY® }sÿu@Êõ· A­µ²Dö ^“G8D‚¢tÑÑ*©tËm­­W˲pd” ž”%J£x]A€C2áÊ ü€v¢ú/BÚtqžóóŠÏúo/}6äð<ýh8V66EE›ng_ÀH×éXqÉ·2óïp=:}0Ek#O3•‚/ ÍXæj®ó\jî|ÛKEJË¿ìè «,Ý!>,ÚP+$E™“==ÑÀPý7¢6Hއþàà²Ì.º„½xht£•î qxÅý­ø‡…°®~ÌþŸqÁþEmV'GMç¶¹úÕ#=‘Ð÷)vº¢K‹QL¦~ÐŽ¯JnÒÓ5<Ëô³I\÷ßÓýÁ>X¤²Ã‡"ÐÀyV¡Wñl‚aBÖׄ¤¬š¾ô<[~é~ºé()>Bܦ÷`¢/^ŒK|Œ1‚6ãÑQ­¯ UÕ]³p×1‹ R~/Öâ[<6nç#ÛjÅ‘ó¯ùò­ÏMA$ÁέÛ{ŽäسØéGzøã2¯Ÿ©£IKž ÷šÍÆŽÄjH)rëÔÏŒuyºa‘ +tš]pM^u•‘~LÔL &>bÖ©-WðÜç? 1} u@ÏqjÂD`uÅ k«¥µ72iÂyxµ„îÏqìA®FŒ{Ï£ibs?ØØF82´/j¹P½†%Ú§ ®ø@d5ôµÿ*”$1©œ†V:¾øÊ6ÍsÏÑ¡õÉɱ‰–Ä6•î0g|÷+ã„ôøí¦)º&g…ÕÎÃÃÑ'dô—Êàˆ¦HÕ«[ ‚csnHÃÜSž曵­-sl¨u×ÅsŒˆ{­ÎÚåÞ½3ØûØé¥l)N6Bâ7ï«}Ë%Áðë<õ óħÉc$w8K~÷‹>$.ÇùOÂé@çòÒk>F‚³Ã™ßœ“NUï躴ÐÄê»ðÚ òg¦ÈV;°èG•Þ’<â»TòÚ'9•ñKJ\‚õõX±pX¥òÅOçJoº°$}_Ä=§Üejîr‡æ|@± „ék lnS€w^r…oŒI(ö ¿VÕ™Ü'æ@‘+Øš…ÄH¥¤âþÆèH¬[ª5:Ü®ÍÝe¬éŠËŒ :?³7§Šß&Âê‹&oí¾KúæLT¥Ç,’q1©O5/ȇS±ìñFB,ÕŸ£æˆþ_ˆ(ˆMÈ °ò/¨¥Ötò9EPq,¾¡n ¼¹®7Ñ%ÛÉÈn›¢¢N„v]ñ—ôbs:Š ©P?s¡v=c¦©ÀŠ´åг'ÂQ§¿ºçê†ýE¡œ>[énKq¦ÿs vé’4htKæE•ÄmÐ׌„»Q‡ƒq–M-07T¢ôº ¤Ï˜'r‰·¡û^ü§uEH\gµ±kÍßoœÂéAÔLÎ÷zqÏzIhÒð®[Ý¢ºæM SÀ¸H)çªL×™H=.gƒK½K K°¹ý}|!jèí®RÉèç‚dè™÷h‚…Ñ=¨0œœvàrÐÃΧ.Z-Œ«ÔýC\lÁ»GD×!vøY\w¬“÷°¤Û§ßéLYÕ*:™ú9ó/uÀ¦FIø˜JW/Õ*lÄ8³“c ýÓ)…øEx1ɬÇSüÄ£˜h‹7ÑK®æ¡.ØçËÍô(V’êKž‘1èH`,Jˆ‘„ðšâ€ÑLÐÿ0èWFInKV6” ÷så^¬ñ®|PXz)‚‡†àçŠq®º\:†ír%½Í`¯EH±¶ èÌðAÞš ¾Ó2_TôTªL [ [¤ÄïŸdÁ ]ñWÔÓÎáÝ”mJÂxÆ3êž¼ëPrþ•Ú¨GQ4™êLщјzÊ6Ö²‰D¦#“3ø”Þ(úÝÝTJüˆª”ÓØ ¹æ¨p4Q&ƒÎ x‘˜P.™òȤ /q>›·cÒ"DƒÅ‘*eGöu'ã]K@xlõ,ÓÀ*²¹¾ï÷é¹ûÎLúrÈé"ÞHÄŽ+úÊKô†¢hR¨‹¢£ÈõæFis ÒW\¤£´íTí“Î’€³$}¶+©}ëäSEÙ€ICÔÕ?¡ZÖ½Mû‰1ül;Ø…>Oƒ¥äúk/AâR"°¹å; \Zþ¡0Q_Z‰t¬SÁý'×wì{™pÍùo‡‘Ž8Üù%<.–'‰ôsýW1ºHj릨7z‚ùy̱C0`'?âl3 v]¨%U¨þoƒÀ;x¥ðd¶¼‚„)ÜbLÌ*„È1’É»>|–Ÿ[Ëžlç;q•VUŠ #pÚÄúcíÛÖæ–Ñ£¾kD]ašâåEf~U§J>}ÈwÖõÜ1R&ãKÌ™j@9#H¥~gÇy Œ‘ Ü6°mª ³Ù†=*&•Y½š#³56KðL½«).ÖÞ®ã»pËF~æ*fÈ ·ý©€Ž– Â3Q çIc½]ÿ$}sä)ƒ$ÝöHÅ›·˜®•(e’"ö⥼sÚèÓO›)ts`Ø!§‡¢¨zËìÌ\§öWøäuOEp¨Óåâ¤]™b‰H²R!‹Á2(µ†'Hp^õ G»­Œt÷ù|ˆ‡AÈ>`µépó3%;‘lÙÂaåµ³¶<©l”ÐÀ:"NëΉ% `Á£æÊÊÓAÅÝ"´†HúãæDÃ6ìe‘ÑhX¿³þ²5w ê™IÆã:£-WX(ÖŽÚ_¼n¯íMßV¥ñ‰LC\ËÅZ,'`Œs!´K Ï—â aHŒ>F¢4ŸXÈ~5¾[|ÊìDã š PhãKšZ†šï‚ ¬²Ep®×Ȧ`J)-YS¤eå»S0qJˆ_FŽ&Z”ÒÚ‡‚$lh¿[ôAàÝYr:ÕMµ}LH Vî~Nñó¡c÷q›S(CýíX±š‡/ZSï )[¶&ç[_–#Û­ mÒKs(®ˆ ‚&-05_ } ì¾×ØfêÚj«Îî`} ›ø]¬;$Æx˜4äKóÇÿ °>€žœK_‘%|æ µrkkˆù»ô;©gdJgQ°1³Ðö‡$bµ;P§E)°Án;˜sØÌš /'rÙ©Ö^ãXÊý÷­›øKÁG‹A9ˆʆ¶ÚTÚ<˜¹”›²¾øxÆ¥¤NJV»¾t»ì!ÁeVÏ^Ê;]Ÿ¤k†wMÔ%F [ò´*Ì«£TaÜEñÛáÒUrh·ß¬®$ò”B?4£Þ6è±dL½ëÒò¬2©§A÷Å‘|t3E3è­ÏM¿4bciUº{õ à0 x•rôúFÝU¶ÀQ_~o—!:…SZæ¦c‰a(T‡¹fä´–-yríXekÍ"£)‡p–­/8û‰ Kšñw„Ž[†òi<Ó y!]ìsM>JYí>µF,Â.ˆâ-sÃOK©¥ðh ¡,˜åì9C^p:CÓ‰Jw””ñ»£iíXlæw@$ÏñöRùË[˹oN[_¾Ì›gž—ˆ‡ó šÔúFò=òи KË뤸 Á²ÓÏÉÉFµDõ—TnJ¿M®õG¹;$åb¨A¾àÝÐð|oó- ,lZ5Ò{ƒ²7¼ÕþVs|ǰ T¨¨œd²|‹«ŸB±WXJÌ ¡ÑÕ1"‚5UU/~w‡ð©2Ö4AÒá;eÑ·­µñ<ï`LLÞïü%«,¡êB!þ…ÍKáØ¬^ÓÄõ&¯¢h€É.ÃÀ´Í:E’#Q¯f(}¾ ݦ3¾Ž§;yÝP’gŒ\Âp‡ê"¾õëÍî;‹ÿ&o0úy»2Öó…laébÈ{a:úðCEԜ٣m ö»µ|‚ým“» K±×M)H,¨„b‚ zÖqµ•cçNИB6.áˆæwš# ËÚkÜ”×ãzäüú(À×ïÔõpƒoîJXoB]äXtâ²%‘ÇåYŽRz¾í HðÔ¨F2e Åj®þß0I´«î•Ú®ý²ñŽR^…[”&q­Áì}ú'TåF}-ÀÔ¯£»,ÿhî…i’\´Óf ð+A’ú!¡â é^Nét¹ä•ï¥aÎ Vç¥Þwê[°2û» ‹̬ô8–²|ö^ sú8$÷]ŒlƒRtîö%4kªDËÌNð,•­`zRßœ<}%m"ì–«7ú±•-™¿ Ù0ÕÓ"|ÐNyÃ9,¹©X4Ýå*$¾ƒ~<£ÅÆÀ¨Þºòù^³ÄDÞÞ<+\ñÃhÂvPFºå»ŽÁ<³ÿ8ô*ÜLpù“tµƒW‹S²q·G JÑ $‹ìç0ã© mG-)ì¤ßrcx”ÿ_ÚwUw=Q+TZ»¸ìs“’Â¥F®U㬠#£Ÿž!ƒèýr¯Â…xë•SñR4¶$E5ÛÅq`{ü“ïÚ¯U[—Š_Ìþ´£ëqOÌ D&R?›í²EûFŸ!vñþÏùs3n·oÃö~ßb0ÁTJqDKa¿Á#Õ¿YhY‘š¶î¡îoÿ?$w×ÏŠBÛe©;± S6N ïÈC€êðѵK#Í{šT&xó@ QÕ¿rz†hÿÈK<Üor­KŽÈÂr‰ôÑÉ RçÌ`i|“(@уq&à¨ä¡C(¸yiœk\Ý]»[]'m“ÜIj£[Q¼Ü«2cì¹?Œuù ž<-Áêh(îú£Š°J}§Mf ‰¡Ýöƒ;¾ƒ)@'ëL±IׯøÅ´Šåû»yÜIÐÜB2—}À8s)õ‚N•M¬æûü̲W2«7¦C¼}S,c>ÚCÞX뽸õmãÕѽ( ½<¯ÃP'âã¦J‘þ/›h¢x%ª…Qq§ÂVÑyìÓ‰î ÝÓ`+x²k̈hPµz+NÈÁÀ‡óùDgaoƒ Ón)DíÐ÷CÖICh4ÒOEc*«øÿ-@ˆ€¼i‰¾+¶#ƒÔŸÚê=qÅíº§‡Ç7Fµ­²€F ÔéêÅ$Ùç$µÃ7†ûD"™Ji'%Ÿ t[ e幌:¥ìA!«ˆ†½Ç=½pÞDgŠU£ ÿ{ìjae±Y.];ÿÙicnV Bðpfstools-1.8.5/src/pfsview/mac_os/Info.plist0000664000175000017500000000072711210622377016013 00000000000000 CFBundleIconFile pfsview_icon_mac.icns CFBundlePackageType APPL CFBundleGetInfoString pfstools 1.8 CFBundleSignature ttxt CFBundleExecutable pfsview pfstools-1.8.5/src/matlab/0002755000175000017500000000000011652214416012432 500000000000000pfstools-1.8.5/src/matlab/pfs_write_image.m0000664000175000017500000000371511151364245015702 00000000000000function pfs_write_image( file_name, img, options ) %PFS_WRITE_IMAGE write an RGB, luminance or multichannel image to a file. % % PFS_WRITE_IMAGE( file_name, IMG [, options] ) % % Writes a luminance image if IMG is a 2D matrix, an RGB image if % size(IMG,3) == 3, and a multi-channel image otherwise. Each channel in a % multi-channel image has a name C1, C2, .., Cn. % % 'options' passes a string with additional options recognized by each of % the image format writers. For example '--compression=PXR24' modifies the % compression algorithm for OpenEXR files. See the manual pages of the % "pfsout*" shell commands for the list of supported options. % % The format of the file is recognized based in the file name extension: % .hdr for Radiance images, .exr for OpenEXR, .jpg for JPEG and .png for % PNG. See manual of "pfsout" shell command for the full list of the % supported formats. % % Currently only OpenEXR and PFS formats support multi-channel files. % % Pass single precission matrices for better performance. % % Example: % pfs_write_image( 'image.exr', cat( 3, R, G, B ) ); % % R, G, and B are 2D matrices with red, green and blue channel data. % % See also: PFS_WRITE_RGB, PFS_WRITE_LUMINANCE, PFS_WRITE_XYZ, % PFS_READ_IMAGE, PFSVIEW. % % Copyright 2009 Rafal Mantiuk img_sz = size( img ); dims = length( img_sz ); if( dims > 3 ) error( 'image matrix has too many dimenstions' ); end if( ~exist( 'options', 'var' ) ) options = ''; end fid = pfspopen( sprintf( '%spfsout ''%s'' %s%s', pfs_shell(), file_name, options, pfs_shell(1) ), 'w' ); pfs = pfsopen( fid, [img_sz(1) img_sz(2)] ); if( dims == 2 || img_sz(3) == 1 ) pfs.channels.Y = single(img); elseif( dims == 3 && img_sz(3) == 3 ) [pfs.channels.X pfs.channels.Y pfs.channels.Z] = pfs_transform_colorspace( 'RGB', img, 'XYZ' ); else for k=1:img_sz(3) pfs.channels.(sprintf('C%d', k)) = single(img(:,:,k)); end end pfsput( pfs ); pfsclose( pfs ); pfspclose( fid ); end pfstools-1.8.5/src/matlab/pfsget.cpp0000775000175000017500000001315411010110507014335 00000000000000/** * @brief Read frame from pfs stream in Matlab * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsget.cpp,v 1.5 2008/05/06 17:11:35 rafm Exp $ */ #include "compatibility.h" #include #include #include #include #include "mex.h" #include "mex_utils.h" #define SCRIPT_NAME "pfsget" #define error mexErrMsgTxt #include void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* Check for proper number of arguments. */ if( nrhs != 1 || !mxIsStruct( prhs[0] ) ) error(SCRIPT_NAME ": Improper usage!"); const mxArray *pfs_stream_in = prhs[0]; mxArray *pfs_stream = mxCreateStructMatrix( 1, 1, 0, NULL ); mxArray *f_fid = mxGetField( pfs_stream_in, 0, "FID" ); if( f_fid == NULL || !is_mex_scalar( f_fid ) ) { error( SCRIPT_NAME ": FH field missing in the structure or it has wrong type"); } int fid = (int)get_mex_double( f_fid ); set_mex_field( pfs_stream, "FID", mxDuplicateArray( f_fid ) ); // Check mode { mxArray *f_mode = mxGetField( pfs_stream_in, 0, "MODE" ); if( f_mode == NULL ) { error( SCRIPT_NAME ": MODE field missing in the structure or it has wrong type"); } if( strcmp( "R", get_mex_string( f_mode ) ) ) { error( SCRIPT_NAME ": Can not read from the stream that is open for writing." ); } set_mex_field( pfs_stream, "MODE", mxDuplicateArray( f_mode ) ); } //mxRemoveField( pfs_stream, mxGetFieldNumber( pfs_stream, "channels" ) ); //mxRemoveField( pfs_stream, mxGetFieldNumber( pfs_stream, "tags" ) ); //mxRemoveField( pfs_stream, mxGetFieldNumber( pfs_stream, "channelTags" ) ); FILE *fh = fdopen( dup( fid ), "r" ); if( fh == NULL ) error( SCRIPT_NAME ": Cannot open file for reading" ); try { pfs::DOMIO ctx; pfs::Frame *frame = ctx.readFrame( fh ); if( frame == NULL ) { // No more frames set_mex_field( pfs_stream, "EOF", mxCreateLogicalScalar( true ) ); } else { // Not EOF // Set width and height { set_mex_field( pfs_stream, "columns", create_mex_double( frame->getWidth() ) ); set_mex_field( pfs_stream, "rows", create_mex_double( frame->getHeight() ) ); } // Add channels as matrices to pfs stream struct { mxArray *channels = mxCreateStructMatrix( 1, 1, 0, NULL ); pfs::ChannelIteratorPtr cit( frame->getChannelIterator() ); while( cit->hasNext() ) { pfs::Channel *ch = cit->getNext(); mxArray *mat = mxCreateNumericMatrix( ch->getRows(), ch->getCols(), mxDEFAULT_ARRAY_CLASS, mxREAL ); copy_pfschannel_to_mex( ch, mat ); set_mex_field( channels, ch->getName(), mat ); } set_mex_field( pfs_stream, "channels", channels ); } //Add tags (only frame tags, no channel tags) { mxArray *tags = mxCreateStructMatrix( 1, 1, 0, NULL ); pfs::TagIteratorPtr it( frame->getTags()->getIterator() ); while( it->hasNext() ) { const char *tagName = it->getNext(); mxArray *tag_value = create_mex_string( frame->getTags()->getString( tagName ) ); set_mex_field( tags, tagName, tag_value ); } set_mex_field( pfs_stream, "tags", tags ); } //Add tags /* { Octave_map tags; pfs::TagIteratorPtr it( frame->getTags()->getIterator() ); while( it->hasNext() ) { const char *tagName = it->getNext(); tags.assign( tagName, octave_value( frame->getTags()->getString( tagName )) ); } pfsStream.assign( "tags", tags ); Octave_map channelTagList; //Copy all channel tags pfs::ChannelIteratorPtr cit( frame->getChannelIterator() ); while( cit->hasNext() ) { pfs::Channel *ch = cit->getNext(); Octave_map channelTags; pfs::TagIteratorPtr tit( ch->getTags()->getIterator() ); while( tit->hasNext() ) { const char *tagName = tit->getNext(); channelTags.assign( tagName, octave_value(ch->getTags()->getString( tagName )) ); } channelTagList.assign( ch->getName(), channelTags ); } pfsStream.assign( "channelTags", channelTagList ); }*/ } ctx.freeFrame( frame ); plhs[0] = pfs_stream; } catch( pfs::Exception ex ) { char error_message[100]; sprintf( error_message, "%s: %s", SCRIPT_NAME, ex.getMessage() ); error( error_message ); } if( fh != NULL ) fclose( fh ); } pfstools-1.8.5/src/matlab/mex_utils.h0000775000175000017500000000703111010110507014520 00000000000000#ifndef MEX_UTILS_H #define MEX_UTILS_H #include "mex.h" #include "array2d.h" #include namespace pfs { class Array2D; } #define mxDEFAULT_ARRAY_CLASS mxSINGLE_CLASS mxArray *create_mex_double( double val ); mxArray *create_mex_string( const char *str ); char *get_mex_string( const mxArray *arg ); double get_mex_double( const mxArray *arg ); float get_mex_float( const mxArray *arg ); bool is_mex_scalar( const mxArray *arg ); bool is_mex_fid( const mxArray *arg ); int set_mex_field( mxArray *arg, const char *field_name, mxArray *value ); void copy_mex_to_pfsarray( const mxArray *arg, pfs::Array2D *array ); void copy_pfsarray_to_mex( const pfs::Array2D *array, mxArray *arg ); void copy_mex_to_pfsarray( const mxArray *arg, pfs::Array2D *d1, pfs::Array2D *d2, pfs::Array2D *d3 ); void copy_pfsarray_to_mex( const pfs::Array2D *d1, const pfs::Array2D *d2, const pfs::Array2D *d3, mxArray *arg ); void copy_mex_to_pfschannel( const mxArray *arg, pfs::Channel *pfsChannel ); void copy_pfschannel_to_mex( const pfs::Channel *pfsChannel, mxArray *arg ); mxArray *mxCreateLogicalScalar( bool value ); template void copy_mex_to_pfsarray_T( const mxArray *arg, pfs::Array2D *array ) { assert( array->getCols() == mxGetN( arg ) && array->getRows() == mxGetM( arg ) ); const T *data = (T *)mxGetPr( arg ); for( int c = 0; c < array->getCols(); c++ ) for( int r = 0; r < array->getRows(); r++ ) { (*array)(c,r) = (float)*(data++); } } template void copy_mex_to_pfsarray_T( const mxArray *arg, pfs::Array2D *d1, pfs::Array2D *d2, pfs::Array2D *d3 ) { assert( d1->getCols() == mxGetN( arg ) && d1->getRows() == mxGetM( arg ) ); T *o1 = (T *)mxGetPr( arg ); const long sdsize = d1->getCols()*d1->getRows(); T *o2 = o1 + sdsize; T *o3 = o2 + sdsize; for( int c = 0; c < d1->getCols(); c++ ) for( int r = 0; r < d1->getRows(); r++ ) { (*d1)(c,r) = (float)*(o1++); (*d2)(c,r) = (float)*(o2++); (*d3)(c,r) = (float)*(o3++); } } template void copy_pfsarray_to_mex_T( const pfs::Array2D *array, mxArray *arg ) { assert( array->getCols() == mxGetN( arg ) && array->getRows() == mxGetM( arg ) ); T *data = (T *)mxGetPr( arg ); for( int c = 0; c < array->getCols(); c++ ) for( int r = 0; r < array->getRows(); r++ ) { *(data++) = (*array)(c,r); } } template void copy_pfsarray_to_mex_T( const pfs::Array2D *d1, const pfs::Array2D *d2, const pfs::Array2D *d3, mxArray *arg ) { assert( d1->getCols() == mxGetN( arg ) && d1->getRows() == mxGetM( arg ) ); T *o1 = (T *)mxGetPr( arg ); const long sdsize = d1->getCols()*d1->getRows(); T *o2 = o1 + sdsize; T *o3 = o2 + sdsize; for( int c = 0; c < d1->getCols(); c++ ) for( int r = 0; r < d1->getRows(); r++ ) { *(o1++) = (*d1)(c,r); *(o2++) = (*d2)(c,r); *(o3++) = (*d3)(c,r); } } template void copy_mex_to_pfschannel_T( const mxArray *arg, pfs::Channel *pfsChannel ) { int index = 0; T *data = (T *)mxGetPr( arg ); for( int c = 0; c < pfsChannel->getCols(); c++ ) for( int r = 0; r < pfsChannel->getRows(); r++ ) { (*pfsChannel)(c,r) = *(data++); } } template void copy_pfschannel_to_mex_T( const pfs::Channel *pfsChannel, mxArray *arg ) { int index = 0; T *data = (T *)mxGetPr( arg ); for( int c = 0; c < pfsChannel->getCols(); c++ ) for( int r = 0; r < pfsChannel->getRows(); r++ ) { *(data++) = (*pfsChannel)(c,r); } } #endif pfstools-1.8.5/src/matlab/Contents.m0000664000175000017500000000257511153617236014341 00000000000000% pfstools - matlab interface % % This is an entry page for pfstools matlab documentation. % % ----------------------------------------------------------------- % The most frequently used functions: % % PFS_READ_IMAGE - read image from file % PFS_WRITE_IMAGE - write image to file % PFSVIEW - view matrices as images using pfsview % % ----------------------------------------------------------------- % More specialized functions: % % PFS_TRANSFORM_COLORSPACE - transform between color spaces % PFS_READ_LUMINANCE - read luminance image from file % PFS_READ_RGB - read RGB image from file % PFS_READ_XYZ - read XYZ image from file % PFS_WRITE_LUMINANCE - write luminance image to file % PFS_WRITE_RGB - write RGB image to file % PFS_WRITE_XYZ - write XYZ image to file % PFS_TEST_SHELL - diagnoze for possible problems if pfstools interface is not working % % ----------------------------------------------------------------- % Low-level interface, probably you do not need this: % % PFSOPEN - open pfs-stream for reading/writing % PFSPOPEN - execute shell command and acquire its input / output stream % PFSCLOSE - close pfs-stream % PFSPCLOSE - close stream created with PFSPOPEN % PFSGET - read one frame from pfs-stream % PFSPUT - write one frame to pfs-stream % PFS_SHELL - wrapper for calling pfstools shell programs from matlab % % ----------------------------------------------------------------- pfstools-1.8.5/src/matlab/pfs_write_rgb.m0000775000175000017500000000277211151364245015377 00000000000000function pfs_write_rgb( fileName, varargin ) %PFS_WRITE_RGB write an RGB image file. % % PFS_WRITE_RGB( file_name, R, G, B ) % PFS_WRITE_RGB( file_name, img ) % % R, G, B - red, green and blue color channels, given as linear response % img - 3D matrix image, where img(:,:,1:3) represents red, blue and green % color channels % % The format of the file is recognized based in the file name extension: % .hdr for Radiance images, .exr for OpenEXR, .jpg for JPEG and .png for % PNG. See manual of "pfsout" shell command for the full list of the % supported formats. % % See also: PFS_WRITE_IMAGE, PFS_WRITE_LUMINANCE, PFS_WRITE_XYZ, % PFS_READ_IMAGE. % % Copyright 2009 Rafal Mantiuk if( nargin == 4 ) if( ~isnumeric(varargin{1}) || ~isnumeric(varargin{2}) || ~isnumeric(varargin{1}) ) error( 'pfs_write_rgb: matrices of the equal size expected as an arguments' ); end [X Y Z] = pfs_transform_colorspace( 'RGB', varargin{1}, varargin{2}, varargin{3}, 'XYZ' ); elseif( nargin == 2 && ndims(varargin{1}) == 3 ) [X Y Z] = pfs_transform_colorspace( 'RGB', varargin{1}(:,:,1), varargin{1}(:,:,2), varargin{1}(:,:,3), 'XYZ' ); else error( 'pfs_write_rgb: improper usage' ); end %cmd = sprintf( '%spfsout %s%s', pfs_shell(), fileName, pfs_shell(1) ) fid = pfspopen( sprintf( '%spfsout ''%s''%s', pfs_shell(), fileName, pfs_shell(1) ), 'w' ); pfs = pfsopen( fid, size( X ) ); pfs.channels.X = X; pfs.channels.Y = Y; pfs.channels.Z = Z; pfsput( pfs ); pfsclose( pfs ); pfspclose( fid ); end pfstools-1.8.5/src/matlab/pfs_write_luminance.m0000664000175000017500000000157211151364245016572 00000000000000function pfs_write_luminance( fileName, img ) %PFS_WRITE_LUMINANCE writes an image file % % PFS_WRITE_LUMINANCE ( file_name, img ) % % img - 2D matrix representing luminance values % % The format of the file is recognized based in the file name extension: % .hdr for Radiance images, .exr for OpenEXR, .jpg for JPEG and .png for % PNG. See manual of "pfsout" shell command for the full list of the % supported formats. % % See also: PFS_WRITE_IMAGE, PFS_WRITE_RGB, PFS_WRITE_XYZ, % PFS_READ_IMAGE. % % Copyright 2009 Rafal Mantiuk if( nargin ~= 2 ) error( 'pfs_write_luminance: improper usage' ); end %cmd = sprintf( '%spfsout %s%s', pfs_shell(), fileName, pfs_shell(1) ) fid = pfspopen( sprintf( '%spfsout ''%s''%s', pfs_shell(), fileName, pfs_shell(1) ), 'w' ); pfs = pfsopen( fid, size( img ) ); pfs.channels.Y = img; pfsput( pfs ); pfsclose( pfs ); pfspclose( fid ); end pfstools-1.8.5/src/matlab/pfspclose.m0000664000175000017500000000016410570530524014526 00000000000000% Close fifo pipe. Used internally by pfstools. % % pfspclose( fid ) % % fid - file descriptor returned by pfspopen pfstools-1.8.5/src/matlab/pfs_read_luminance.m0000775000175000017500000000160611151364245016354 00000000000000function Y = pfs_read_luminance( fileName ) %PFS_READ_LUMINANCE read image file and return luminance channel Y. % % Y = PFS_READ_LUMINANCE( file_name ) % % PFS_READ_LUMINANCE accepts all formats recognized by the shell "pfsin" % command. % % See also: PFS_READ_IMAGE, PFS_READ_LUMINANCE, PFS_READ_XYZ, PFS_WRITE_IMAGE. % % Copyright 2009 Rafal Mantiuk % Check if file exists fid = fopen( fileName, 'r' ); if( fid == -1 ) error( 'pfs_read_luminance: File "%s" does not exist', fileName ); end fclose( fid ); % try cmd = sprintf( '%spfsin ''%s''%s', pfs_shell(), fileName, pfs_shell( 1 ) ); fid = pfspopen( cmd, 'r' ); pin = pfsopen( fid ); pin = pfsget( pin ); Y = pin.channels.Y; pfsclose( pin ); % TODO: Check why crashes on windows if ~ispc() pfspclose( fid ); end % catch % pfsclose( pin ); % pfspclose( fid ); % end endpfstools-1.8.5/src/matlab/pfsopen.m0000664000175000017500000000311110754047200014173 00000000000000% Open pfs stream for reading or writing. pfs is an interchange format for high dynamic range images (see http://pfstools.sourceforge.net). % % usage: pfs_struct = pfsopen( fileName ); % pfs_struct = pfsopen( fileName, rows, columns ); % pfs_struct = pfsopen( fileName, [ rows columns ] ); % pfs_struct = pfsopen( fid, ... ); % % fileName - name of the file to read or write. \"stdin\" or \"stdout\" for standard input and output % rows - height of images to write % columns - width of images to write % % The first usage of pfsopen opens pfs stream for reading, the second and % the third for writing. pfsopen also accepts file descriptor returned from % pfspopen, which can be used instead of a file name (the fourth usage). Use % pfsget or pfsput to read or write frames or single images. You must close % pfs stream with pfsclose. The stream will not be closed when pfs_struct % is deleted (for example with 'clear pfs_struct'). % % pfs_struct is a structure that contains the following fields: % EOF - set to 1 if there are no more frames; 0 otherwise % FH - file handle of the file. For internal pruposes, do not use % MODE - file open mode: R - for reading, W - for writing % columns, rows - dimensions of each channel in the stream % channels - structure that contains channels represented as real matrices % tags - structure that contains tags represented as strings % channelTags - structure that contains a structure for each channel, % which contains tags. The format of the latter structure is the same as % for 'tags' field. pfstools-1.8.5/src/matlab/pfs_read_xyz.m0000775000175000017500000000203611151364245015231 00000000000000function varargout = pfs_read_xyz( fileName ) %PFS_READ_XYZ read image file and return X, Y, and Z color channels. % % [X Y Z] = PFS_READ_XYZ( file_name ) % IMG = PFS_READ_XYZ( file_name ) % % PFS_READ_XYZ accepts all formats recognized by the shell "pfsin" % command. % % See also: PFS_READ_IMAGE, PFS_READ_LUMINANCE, PFS_READ_XYZ, PFS_WRITE_IMAGE. % % Copyright 2009 Rafal Mantiuk % Check if file exists fid = fopen( fileName, 'rb' ); if( fid == -1 ) error( 'pfs_read_xyz: File "%s" does not exist', fileName ); end fclose( fid ); fid = pfspopen( sprintf( '%spfsin ''%s''%s', pfs_shell(), fileName, pfs_shell( 1 ) ), 'r' ); pin = pfsopen( fid ); pin = pfsget( pin ); pfsclose( pin ); pfspclose( fid ); if( nargout == 3 ) varargout{1} = pin.channels.X; varargout{2} = pin.channels.Y; varargout{3} = pin.channels.Z; elseif( nargout == 1 ) varargout{1} = cat( 3, pin.channels.X, pin.channels.Y, pin.channels.Z ); else error( 'Wrong number of output parameters' ); end end pfstools-1.8.5/src/matlab/compatibility.h0000775000175000017500000000321110571557361015404 00000000000000/** * @brief Compatibility header file * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: compatibility.h,v 1.1 2007/03/01 14:10:57 rdmantiuk Exp $ */ #ifndef COMPATIBILITY_H #define COMPATIBILITY_H #ifdef _MSC_VER #include #define popen _popen #define dup _dup //#define fileno _fileno #define fdopen _fdopen #define open _open #define pclose _pclose #define O_CREAT _O_CREAT #define O_TRUNC _O_TRUNC #define O_RDWR _O_RDWR #define S_IREAD _S_IREAD #define S_IWRITE _S_IWRITE #define O_BINARY _O_BINARY #endif #ifdef __linux__ #include #define O_BINARY 0 #define stricmp strcasecmp #endif #define DEBUG_STR if(1); else cerr #endif pfstools-1.8.5/src/matlab/pfs_transform_colorspace.cpp0000775000175000017500000001024211406630662020157 00000000000000/** * @brief Tranform between color spaces using pfs library in MATLAB * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfs_transform_colorspace.cpp,v 1.9 2010/06/05 18:24:24 rafm Exp $ */ #include "compatibility.h" #include #include #include #include #include #include "mex.h" #include "mex_utils.h" #define SCRIPT_NAME "pfs_transform_colorspace" #define error mexErrMsgTxt #include static pfs::ColorSpace findColorSpace( const char *name ); void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* Check for proper number of arguments. */ if( (nrhs != 5 || !mxIsChar( prhs[0] ) || !( mxIsDouble( prhs[1] ) || mxIsSingle( prhs[1] ) ) || !( mxIsDouble( prhs[2] ) || mxIsSingle( prhs[2] ) ) || !( mxIsDouble( prhs[3] ) || mxIsSingle( prhs[3] ) ) || !mxIsChar( prhs[4] )) && (nrhs != 3 || !mxIsChar( prhs[0] ) || !( mxIsDouble( prhs[1] ) || mxIsSingle( prhs[1] ) ) || mxGetNumberOfDimensions( prhs[1] ) != 3 || !mxIsChar( prhs[2] )) ) error(SCRIPT_NAME ": Wrong number or type of input parameters!"); if( nlhs != 3 && nlhs != 1 ) error(SCRIPT_NAME ": Wrong number of output parameters!"); try { pfs::ColorSpace inCS = findColorSpace( get_mex_string( prhs[0] ) ); pfs::ColorSpace outCS = findColorSpace( get_mex_string( prhs[nrhs-1] ) ); const int *in_dim = mxGetDimensions( prhs[1] ); const int rows = in_dim[0], cols = in_dim[1]; // printf( "%d x %d\n", rows, cols ); pfs::Array2DImpl c1Buf( cols, rows ), c2Buf( cols, rows ), c3Buf( cols, rows ); if( nrhs == 5 ) { copy_mex_to_pfsarray( prhs[1], &c1Buf ); copy_mex_to_pfsarray( prhs[2], &c2Buf ); copy_mex_to_pfsarray( prhs[3], &c3Buf ); } else { copy_mex_to_pfsarray( prhs[1], &c1Buf, &c2Buf, &c3Buf ); } pfs::transformColorSpace( inCS, &c1Buf, &c2Buf, &c3Buf, outCS, &c1Buf, &c2Buf, &c3Buf ); if( nlhs == 3 ) { plhs[0] = mxCreateNumericMatrix( rows, cols, mxDEFAULT_ARRAY_CLASS, mxREAL ); plhs[1] = mxCreateNumericMatrix( rows, cols, mxDEFAULT_ARRAY_CLASS, mxREAL ); plhs[2] = mxCreateNumericMatrix( rows, cols, mxDEFAULT_ARRAY_CLASS, mxREAL ); copy_pfsarray_to_mex( &c1Buf, plhs[0] ); copy_pfsarray_to_mex( &c2Buf, plhs[1] ); copy_pfsarray_to_mex( &c3Buf, plhs[2] ); } else if( nlhs == 1 ) { int dims[] = { rows, cols, 3 }; plhs[0] = mxCreateNumericArray( 3, dims, mxDEFAULT_ARRAY_CLASS, mxREAL ); copy_pfsarray_to_mex( &c1Buf, &c2Buf, &c3Buf, plhs[0] ); } } catch( pfs::Exception ex ) { char error_message[100]; sprintf( error_message, "%s: %s", SCRIPT_NAME, ex.getMessage() ); error( error_message ); } } static pfs::ColorSpace findColorSpace( const char *name ) { if( !strcasecmp( name, "XYZ" ) ) return pfs::CS_XYZ; else if( !strcasecmp( name, "RGB" ) ) return pfs::CS_RGB; else if( !strcasecmp( name, "SRGB" ) ) return pfs::CS_SRGB; else if( !strcasecmp( name, "YUV" ) ) return pfs::CS_YUV; else if( !strcasecmp( name, "YXY" ) ) return pfs::CS_Yxy; throw pfs::Exception( "Not recognized color space" ); } pfstools-1.8.5/src/matlab/pfspopen.cpp0000775000175000017500000000165210571556214014723 00000000000000#include "compatibility.h" #include #include #include "mex.h" #include "mex_utils.h" #define SCRIPT_NAME "pfspopen" extern void _main(); void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* Check for proper number of arguments. */ if (nrhs != 2) mexErrMsgTxt("Expecting two parameters."); char *cmd_line = get_mex_string( prhs[0] ); char *mode = get_mex_string( prhs[1] ); FILE *in = popen( cmd_line, mode ); if( in == NULL ) { mexErrMsgTxt("popen has failed."); } int fd = fileno( in ); // int fd = dup( fileno( in ) ); // if( fclose( in ) != 0 ) // mexErrMsgTxt("fclose has failed."); plhs[0] = mxCreateNumericMatrix( 1, 2, mxDOUBLE_CLASS, mxREAL ); double *df_ptr = (double*)mxGetData( plhs[0] ); *df_ptr = fd; // Very bad hack df_ptr[1] = (unsigned long)in; mxFree( cmd_line ); mxFree( mode ); return; } pfstools-1.8.5/src/matlab/pfsget.m0000664000175000017500000000041310570530524014015 00000000000000% Read next frame from the pfs stream. See also help for pfsopen function. % % usage: new_pfs_struct = pfsget( pfs_struct ); % pfs_struct - the structure returned by pfsopen or pfsget % new_pfs_struct - new structure with new fields containing channels and tags pfstools-1.8.5/src/matlab/pfsclose.m0000664000175000017500000000022510570530524014344 00000000000000% Close pfs stream. See also help for pfsopen function. % % usage: pfsclose( pfs_struct ); % pfs_struct - structure returned by pfsopen or pfsget pfstools-1.8.5/src/matlab/pfsput.cpp0000775000175000017500000001466611010110507014377 00000000000000/** * @brief Write frame to pfs stream in MATLAB * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsput.cpp,v 1.6 2008/05/06 17:11:35 rafm Exp $ */ #include "compatibility.h" #include #include #include #include #include "mex.h" #include "mex_utils.h" #define SCRIPT_NAME "pfsput" #define error mexErrMsgTxt #include void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* Check for proper number of arguments. */ if( nrhs != 1 || !mxIsStruct( prhs[0] ) ) error(SCRIPT_NAME ": Improper usage!"); const mxArray *pfs_stream = prhs[0]; mxArray *f_fid = mxGetField( pfs_stream, 0, "FID" ); if( f_fid == NULL || !is_mex_scalar( f_fid ) ) { error( SCRIPT_NAME ": FH field missing in the structure or it has wrong type"); } int fid = (int)get_mex_double( f_fid ); // Check mode { mxArray *f_mode = mxGetField( pfs_stream, 0, "MODE" ); if( f_mode == NULL ) { error( SCRIPT_NAME ": MODE field missing in the structure or it has wrong type"); } if( strcmp( "W", get_mex_string( f_mode ) ) ) { error( SCRIPT_NAME ": Can not write to the stream that is open for reading." ); } } // Get width & height int width, height; { mxArray *f_cols, *f_rows; f_cols = mxGetField( pfs_stream, 0, "columns" ); f_rows = mxGetField( pfs_stream, 0, "rows" ); if( !is_mex_scalar( f_cols ) || !is_mex_scalar( f_rows ) ) { error( SCRIPT_NAME ": 'rows' and 'columns' fields missing in the structure or it have wrong type"); } width = (int)get_mex_double( f_cols ); height = (int)get_mex_double( f_rows ); } // Get channels int ch_count; mxArray *f_channels; { f_channels = mxGetField( pfs_stream, 0, "channels" ); if( f_channels == NULL || !mxIsStruct( f_channels ) ) error( SCRIPT_NAME ": 'channels' field missing in the structure or it has wrong type"); ch_count = mxGetNumberOfFields( f_channels ); } try { pfs::DOMIO ctx; pfs::Frame *frame = ctx.createFrame( width, height ); // For each channel in the 'channels' map for( int ch = 0; ch < ch_count; ch++ ) { const char *channelName = mxGetFieldNameByNumber( f_channels, ch ); mxArray *f_data = mxGetFieldByNumber( f_channels, 0, ch ); if( !(mxIsDouble( f_data ) || mxIsSingle( f_data )) || mxIsComplex( f_data ) ) { throw pfs::Exception( "all channels must be given as real matrices" ); } if( mxGetM( f_data ) != height || mxGetN( f_data ) != width ) { throw pfs::Exception( "size of the channel must be the same as given in pfsopen" ); } pfs::Channel *pfsChannel = frame->createChannel( channelName ); // Copy matrix to pfs::Channel copy_mex_to_pfschannel( f_data, pfsChannel ); } // Copy frame tags { mxArray *tags, *f_rows; tags = mxGetField( pfs_stream, 0, "tags" ); if( tags != NULL ) { if( !mxIsStruct( f_channels ) ) error( SCRIPT_NAME ": 'tags' field has wrong type"); int tag_count = mxGetNumberOfFields( tags ); for( int t = 0; t < tag_count; t++ ) { const char *tag_name = mxGetFieldNameByNumber( tags, t ); mxArray *tag_value = mxGetFieldByNumber( tags, 0, t ); // printf( "tag: %s = %s\n", tag_name, get_mex_string( tag_value ) ); frame->getTags()->setString( tag_name, get_mex_string( tag_value ) ); } } } /* Not implemented - hopefuly nobody uses this // Copy channel tags { Octave_map::const_iterator itChTags = pfsStream.seek( "channelTags" ); if( itChTags != pfsStream.end() ) { if( !pfsStream.contents( itChTags )(0).is_map() ) { throw pfs::Exception( "'channelTags' field must be a structure" ); } Octave_map tagChannels = pfsStream.contents( itChTags )(0).map_value(); for( Octave_map::iterator itCh = tagChannels.begin(); itCh != tagChannels.end(); itCh++ ) { std::string channelName = tagChannels.key(itCh); if( !tagChannels.contents( itCh )(0).is_map() ) { throw pfs::Exception( "each channelTags file must be a structure" ); } pfs::Channel *pfsChannel = frame->getChannel( channelName.c_str() ); if( pfsChannel == NULL ) { throw pfs::Exception( "can not set channel tag if channel is missing" ); } Octave_map tags = tagChannels.contents( itCh )(0).map_value(); for( Octave_map::iterator itTag = tags.begin(); itTag != tags.end(); itTag++ ) { std::string tagName = tags.key(itTag); if( !tags.contents( itTag )(0).is_string() ) throw pfs::Exception( "all channel tags must be given as strings" ); std::string tagValue = tags.contents( itTag )(0).string_value(); pfsChannel->getTags()->setString( tagName.c_str(), tagValue.c_str() ); } } } } */ // FILE *fh = fdopen( fid, "a" ); FILE *fh = fdopen( dup( fid ), "a" ); if( fh == NULL ) error( SCRIPT_NAME ": Cannot open file for writting" ); ctx.writeFrame( frame, fh ); ctx.freeFrame( frame ); fclose( fh ); } catch( pfs::Exception ex ) { char error_message[100]; sprintf( error_message, "%s: %s", SCRIPT_NAME, ex.getMessage() ); error( error_message ); } } pfstools-1.8.5/src/matlab/pfs_read_rgb.m0000775000175000017500000000316611151364245015156 00000000000000function [varargout] = pfs_read_rgb( fileName ) %PFS_READ_RGB Read image file and return R, G, and B color channels or a single 3D matrix. % % [R G B] = PFS_READ_RGB( file_name ) % IMG = PFS_READ_RGB( file_name) % % R, G, B - red, green and blue color channels, given as linear response % img - 3D matrix image, where img(:,:,1:3) represents red, blue and green % color channels % % PFS_READ_RGB accepts all formats recognized by the shell "pfsin" % command. % % See also: PFS_READ_IMAGE, PFS_READ_LUMINANCE, PFS_READ_XYZ, PFS_WRITE_IMAGE. % % Copyright 2009 Rafal Mantiuk %Check if file exists fid = fopen( fileName, 'rb' ); if( fid == -1 ) error( 'pfs_read_rgb: File "%s" does not exist', fileName ); end fclose( fid ); fid = pfspopen( sprintf( '%spfsin ''%s''%s', pfs_shell(), fileName, pfs_shell( 1 ) ), 'r' ); pin = pfsopen( fid ); pin = pfsget( pin ); if( isfield( pin.channels, 'X' ) && isfield( pin.channels, 'Z' ) ) [R G B] = pfs_transform_colorspace( 'XYZ', pin.channels.X, pin.channels.Y, pin.channels.Z, 'RGB' ); elseif( isfield( pin.channels, 'Y' ) ) R = pin.channels.Y; G = pin.channels.Y; B = pin.channels.Y; else error( 'Color channels missing in the pfs frame' ); end if( nargout == 3 ) varargout{1} = R; varargout{2} = G; varargout{3} = B; elseif( nargout == 1 ) varargout{1}(:,:,1) = R; varargout{1}(:,:,2) = G; varargout{1}(:,:,3) = B; else error( 'pfs_read_rgb: wrong number of output arguments' ); end pfsclose( pin ); % TODO: Check why crashes on windows if ~ispc() pfspclose( fid ); end end pfstools-1.8.5/src/matlab/pfs_test_shell.m0000664000175000017500000000344711151364245015556 00000000000000function pfs_test_shell() %PFS_TEST_SHELL run several test to check for common problems with pfstools %matlab interface. % % PFS_TEST_SHELL() % % The function displays test results and instruction what to do if the % test has failed. % % Copyright 2009 Rafal Mantiuk tmp_file = tempname; cmd = sprintf( '%secho "OK" | cat >''%s''%s', pfs_shell(), tmp_file, pfs_shell( 1 ) ); display( '===========================' ); display( ['Test 1: executing: ' cmd ] ); system( cmd ); display( ' If the lines below show a single line "OK", eveything is correct.' ); display( ' If the lines are empty, the shell most probably cannot be executed.' ); display( ' In such a case check error messages either in matlab command window' ); display( ' (Windows) or in the shell window from which you have started matlab (unix).' ); display( ' Then edit pfs_shell.m to fix these problems.' ); display( ' If the lines contain besides "OK" additional lines of text, fix shell startup' ); display( ' files (/etc/profile, ~/.bash_profile and others) so that no messages are' ); display( ' displayed when shell is started' ); display( '---- START ----' ); display_file( tmp_file ); display( '---- END ----' ); cmd = sprintf( '%swhich pfsin%s', pfs_shell(), pfs_shell( 1 ) ); display( '===========================' ); display( ['Test 2: executing: ' cmd ] ); [status result] = system( cmd ); if( status == 0 ) display( 'Successful.' ); else display( 'Shell failed to find pfstools in the PATH. Make sure that the PATH' ); display( ' includes directories with pfstools at shell startup.' ); display( 'Error message: ' ); display( result ); end end function display_file( file_name ) fid=fopen( file_name ); while 1 tline = fgetl(fid); if ~ischar(tline), break, end disp(tline) end fclose(fid); endpfstools-1.8.5/src/matlab/pfsclose.cpp0000775000175000017500000000376310571556214014714 00000000000000/** * @brief Close pfs stream (MATLAB interface) * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsclose.cpp,v 1.5 2007/03/01 14:00:44 rdmantiuk Exp $ */ #include "compatibility.h" #include #include #include #include #include #include "mex.h" #include "mex_utils.h" #define SCRIPT_NAME "pfsclose" #define error mexErrMsgTxt void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* Check for proper number of arguments. */ if( nrhs != 1 || !mxIsStruct( prhs[0] ) ) error(SCRIPT_NAME ": Improper usage!"); const mxArray *pfs_stream = prhs[0]; mxArray *f_fid = mxGetField( pfs_stream, 0, "FID" ); if( f_fid == NULL || !is_mex_scalar( f_fid ) ) { error( SCRIPT_NAME ": FH field missing in the structure or it has wrong type"); } int fid = (int)get_mex_double( f_fid ); int ret = close( fid ); if( ret != 0 ) error( SCRIPT_NAME ": Cannot close the file. Perhaps it is already closed."); } pfstools-1.8.5/src/matlab/mex_utils.cpp0000775000175000017500000001005011010110507015046 00000000000000#include #include "mex_utils.h" mxArray *mxCreateLogicalScalar( bool val ) { mxArray *array = mxCreateNumericMatrix( 1, 1, mxDOUBLE_CLASS, mxREAL ); double *df_ptr = (double*)mxGetData( array ); *df_ptr = val; return array; } mxArray *create_mex_double( double val ) { mxArray *array = mxCreateNumericMatrix( 1, 1, mxDOUBLE_CLASS, mxREAL ); double *df_ptr = (double*)mxGetData( array ); *df_ptr = val; return array; } mxArray *create_mex_string( const char *str ) { char *buf = (char*)mxCalloc( strlen( str )+1, sizeof(char) ); strcpy( buf, str ); return mxCreateString( buf ); } char *get_mex_string( const mxArray *arg ) { /* Input must be a string. */ if (mxIsChar(arg) != 1) mexErrMsgTxt("Input must be a string."); /* Input must be a row vector. */ if (mxGetM(arg) != 1) mexErrMsgTxt("Input must be a row vector."); /* Get the length of the input string. */ int buflen = (mxGetM(arg) * mxGetN(arg)) + 1; /* Allocate memory for input and output strings. */ char *str = (char*)mxCalloc(buflen, sizeof(char)); /* Copy the string data from prhs[0] into a C string * input_buf. */ int status = mxGetString(arg, str, buflen); if (status != 0) mexWarnMsgTxt("Not enough space. String is truncated."); return str; } double get_mex_double( const mxArray *arg ) { double *data = mxGetPr( arg ); return data[0]; } float get_mex_float( const mxArray *arg ) { float* data = (float*)mxGetPr( arg ); return data[0]; } int set_mex_field( mxArray *arg, const char *field_name, mxArray *value ) { int fnum = mxGetFieldNumber( arg, field_name ); if( fnum == -1 ) { fnum = mxAddField( arg, field_name ); } mxSetFieldByNumber( arg, 0, fnum, value ); return fnum; } bool is_mex_scalar( const mxArray *arg ) { if( arg == NULL ) return false; return mxIsNumeric( arg ) && mxGetN( arg ) == 1 && mxGetM( arg ) == 1; } bool is_mex_fid( const mxArray *arg ) { if( arg == NULL ) return false; return mxIsNumeric( arg ) && (mxGetN( arg ) == 1 || mxGetN( arg ) == 2) && mxGetM( arg ) == 1; } void copy_mex_to_pfsarray( const mxArray *arg, pfs::Array2D *array ) { assert( mxIsSingle( arg ) || mxIsDouble( arg ) ); if ( mxIsDouble( arg ) ) copy_mex_to_pfsarray_T( arg, array ); else copy_mex_to_pfsarray_T( arg, array ); } void copy_mex_to_pfsarray( const mxArray *arg, pfs::Array2D *d1, pfs::Array2D *d2, pfs::Array2D *d3 ) { assert( mxIsSingle( arg ) || mxIsDouble( arg ) ); if ( mxIsDouble( arg ) ) copy_mex_to_pfsarray_T( arg, d1, d2, d3 ); else copy_mex_to_pfsarray_T( arg, d1, d2, d3 ); } void copy_pfsarray_to_mex( const pfs::Array2D *array, mxArray *arg ) { assert( mxIsSingle( arg ) || mxIsDouble( arg ) ); if ( mxIsDouble( arg ) ) copy_pfsarray_to_mex_T( array, arg ); else copy_pfsarray_to_mex_T( array, arg ); } void copy_pfsarray_to_mex( const pfs::Array2D *d1, const pfs::Array2D *d2, const pfs::Array2D *d3, mxArray *arg ) { assert( mxIsSingle( arg ) || mxIsDouble( arg ) ); if ( mxIsDouble( arg ) ) copy_pfsarray_to_mex_T( d1, d2, d3, arg ); else copy_pfsarray_to_mex_T( d1, d2, d3, arg ); } void copy_mex_to_pfschannel( const mxArray *arg, pfs::Channel *pfsChannel ) { assert( mxIsSingle( arg ) || mxIsDouble( arg ) ); if ( mxIsDouble( arg ) ) copy_mex_to_pfschannel_T( arg, pfsChannel ); else copy_mex_to_pfschannel_T( arg, pfsChannel ); } void copy_pfschannel_to_mex( const pfs::Channel *pfsChannel, mxArray *arg ) { assert( mxIsSingle( arg ) || mxIsDouble( arg ) ); if ( mxIsDouble( arg ) ) copy_pfschannel_to_mex_T( pfsChannel, arg ); else copy_pfschannel_to_mex_T( pfsChannel, arg ); } pfstools-1.8.5/src/matlab/pfsopen.cpp0000775000175000017500000001060311406630662014535 00000000000000/** * @brief Open pfs stream for reading or writting in MATLAB * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsopen.cpp,v 1.6 2010/06/05 18:24:24 rafm Exp $ */ #include "compatibility.h" #include #include #include #include #include #include "mex.h" #include "matrix.h" #include "mex_utils.h" #define SCRIPT_NAME "pfsopen" #define error mexErrMsgTxt // Because there is no O_BINARY under UNIX #ifndef O_BINARY #define O_BINARY 0 #endif #include void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* Check for proper number of arguments. */ if (nrhs < 1 || nrhs > 3) error(SCRIPT_NAME ": Improper usage!"); if( !mxIsChar(prhs[0]) && !is_mex_fid( prhs[0] ) ) { error( SCRIPT_NAME ": expected file name or file descriptor as the first argument!"); } int width, height; bool writeMode = false; if( nrhs == 3 ) { if( !is_mex_scalar( prhs[1]) || !is_mex_scalar( prhs[2] ) ) { error( SCRIPT_NAME ": expected frame dimmensions as argument 2 and 3"); } height = (int)*mxGetPr( prhs[1] ); width = (int)*mxGetPr( prhs[2] ); writeMode = true; } if( nrhs == 2 ) { if( !mxIsNumeric( prhs[1] ) || mxGetM( prhs[1] ) != 1 || mxGetN( prhs[1] ) != 2) { error( SCRIPT_NAME ": expected 2-column matrix as argument 2"); } double *dim = mxGetPr( prhs[1] ); height = (int)dim[0]; width = (int)dim[1]; writeMode = true; } if( writeMode && (width < 1 || height < 1 || width > 65535 || height > 65535 ) ) { error( SCRIPT_NAME ": Illegal frame size"); } // Open file for reading or writing int fid; if( mxIsChar( prhs[0] ) ) { // File name given char *fileName = get_mex_string( prhs[0] ); if( writeMode ) { if( !strcmp( "stdout", fileName ) ) fid = 1; else { fid = open( fileName, O_CREAT | O_TRUNC | O_RDWR | O_BINARY, S_IREAD | S_IWRITE ); if( fid == -1 ) { error( SCRIPT_NAME ": cannot open file for writing!"); } } } else { if( !strcmp( "stdin", fileName ) ) fid = 0; else { fid = open( fileName, O_RDONLY | O_BINARY ); if( fid == -1 ) { error( SCRIPT_NAME ": cannot open file for reading!"); } } } mxFree( fileName ); } else { // File descriptor given double *p_fid = mxGetPr( prhs[0] ); fid = dup( (int)p_fid[0] ); } mxArray *pfs_stream = mxCreateStructMatrix( 1, 1, 0, NULL ); plhs[0] = pfs_stream; int fnum; fnum = mxAddField( pfs_stream, "FID" ); mxSetFieldByNumber( pfs_stream, 0, fnum, create_mex_double( fid ) ); fnum = mxAddField( pfs_stream, "MODE" ); if( writeMode ) mxSetFieldByNumber( pfs_stream, 0, fnum, create_mex_string("W") ); else mxSetFieldByNumber( pfs_stream, 0, fnum, create_mex_string("R") ); fnum = mxAddField( pfs_stream, "EOF" ); mxSetFieldByNumber( pfs_stream, 0, fnum, mxCreateLogicalScalar( false ) ); if( writeMode ) { fnum = mxAddField( pfs_stream, "columns" ); mxSetFieldByNumber( pfs_stream, 0, fnum, create_mex_double( width ) ); fnum = mxAddField( pfs_stream, "rows" ); mxSetFieldByNumber( pfs_stream, 0, fnum, create_mex_double( height ) ); fnum = mxAddField( pfs_stream, "channels" ); mxArray *channels = mxCreateStructMatrix( 1, 1, 0, NULL ); mxSetFieldByNumber( pfs_stream, 0, fnum, channels ); } } pfstools-1.8.5/src/matlab/Makefile.win320000775000175000017500000000172511044132204014750 00000000000000#MEX=mex MEX=c:\progra~1\MATLAB\R2006b\bin\mex.bat #MEX="c:\matlab\bin\win32\mex.bat" MEXOPTIONS=COMPFLAGS^#"$$COMPFLAGS -GX" all: pfsclose.mexw32 pfsopen.mexw32 pfsput.mexw32 pfsget.mexw32 pfspopen.mexw32 \ pfspclose.mexw32 pfs_transform_colorspace.mexw32 pfsopen.mexw32: pfsopen.cpp mex_utils.cpp ../pfs/pfs.cpp $(MEX) $(MEXOPTIONS) -I..\pfs\ $** pfsclose.mexw32: pfsclose.cpp mex_utils.cpp $(MEX) $(MEXOPTIONS) -I..\pfs\ $** pfsput.mexw32: pfsput.cpp mex_utils.cpp ..\pfs\pfs.cpp $(MEX) $(MEXOPTIONS) -I..\pfs\ $** pfsget.mexw32: pfsget.cpp mex_utils.cpp ..\pfs\pfs.cpp $(MEX) $(MEXOPTIONS) -I..\pfs\ $** pfs_transform_colorspace.mexw32: pfs_transform_colorspace.cpp mex_utils.cpp ..\pfs\colorspace.cpp $(MEX) $(MEXOPTIONS) -I..\pfs\ $** pfspclose.mexw32: pfspclose.cpp mex_utils.cpp $(MEX) $(MEXOPTIONS) -I../../ -I../pfs $** pfspopen.mexw32: pfspopen.cpp mex_utils.cpp $(MEX) $(MEXOPTIONS) -I../../ -I../pfs $** pfstools-1.8.5/src/matlab/pfspclose.cpp0000775000175000017500000000172011406630663015062 00000000000000#include "compatibility.h" #include #include #if defined( __win32__ ) #include #include #else #include #endif #include "mex.h" #include "mex_utils.h" #define SCRIPT_NAME "pfspclose" void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { /* Check for proper number of arguments. */ if (nrhs != 1 && !is_mex_scalar( prhs[0] ) ) mexErrMsgTxt( SCRIPT_NAME ": Expecting one parameter - file descriptor." ); if( mxGetN(prhs[0]) != 2 ) mexErrMsgTxt( SCRIPT_NAME ": File descriptor not created with pfspopen." ); double *p_fid = mxGetPr( prhs[0] ); // int fid = (int)p_fid[0]; FILE *fh = (FILE*)((unsigned long)p_fid[1]); // FILE *fh = fdopen( fid, "r" ); if( pclose( fh ) == -1 ) mexErrMsgTxt( SCRIPT_NAME ": pclose has failed."); // int res = close( fid ); // if( res == -1 ) // mexErrMsgTxt( SCRIPT_NAME ": pclose has failed."); return; } pfstools-1.8.5/src/matlab/pfs_transform_colorspace.m0000775000175000017500000000160311151364245017630 00000000000000%PFS_TRANSFORM_COLORSPACE Tranform between color spaces using pfs library. % % [C1 C2 C2] = PFS_TRANSFORM_COLORSPACE( inCSname, c1, c2, c3, outCSname ); % img_out = PFS_TRANSFORM_COLORSPACE( inCSname, img_in, outCSname ); % img_out = PFS_TRANSFORM_COLORSPACE( inCSname, c1, c2, c3, outCSname ); % [C1 C2 C2] = PFS_TRANSFORM_COLORSPACE( inCSname, img_in, outCSname ); % % inCSname - name of the input color space % c - matrix with n-th channel of input color space % C - matrix with n-th channel of output color space % img_in - input image given as 3D height/width/3 matrix % img_out - output image given as 3D height/width/3 matrix % outCSname - name of the output color space % % Recognized color space names: 'XYZ', 'RGB', 'sRGB', 'YUV', 'Yxy'. % Color space names are case insensitive. % % See also: PFS_READ_IMAGE, PFS_WRITE_IMAGE, PFSVIEW. % % Copyright 2009 Rafal Mantiuk pfstools-1.8.5/src/matlab/pfs_read_image.m0000664000175000017500000000344411151364245015462 00000000000000function img = pfs_read_image( fileName ) %PFS_READ_IMAGE Read image file and return RGB, luminance or multichannel matrix. % % IMG = PFS_READ_IMAGE( file_name ) % % If input is a gray-scale or luminance image, IMG is a 2D matrix. If input is % a color image, IMG(:,:,k) represents red, blue and green color channels for k=1,2 and 3. % If input is a multi-channel image (channel names C1, C2, ..., Cn), IMG is a % 3D matrix with 3rd dimension corresponding to the channels. % % PFS_READ_IMAGE accepts all formats recognized by the shell "pfsin" % command. % % Example: % img = PFS_READ_IMAGE( 'hdr_images/memorial.exr' ); % % See also: PFS_READ_RGB, PFS_READ_LUMINANCE, PFS_READ_XYZ, % PFS_WRITE_IMAGE, PFSVIEW. % % Copyright 2009 Rafal Mantiuk %Check if file exists fid = fopen( fileName, 'rb' ); if( fid == -1 ) error( 'pfs_read_image: File "%s" does not exist', fileName ); end fclose( fid ); fid = pfspopen( sprintf( '%spfsin ''%s''%s', pfs_shell(), fileName, pfs_shell( 1 ) ), 'r' ); pin = pfsopen( fid ); pin = pfsget( pin ); if( isfield( pin.channels, 'X' ) && isfield( pin.channels, 'Z' ) ) img = pfs_transform_colorspace( 'XYZ', pin.channels.X, pin.channels.Y, pin.channels.Z, 'RGB' ); elseif( isfield( pin.channels, 'Y' ) ) img = pin.channels.Y; elseif( isfield( pin.channels, 'C1' ) ) ch=1; % count the number of channels while( isfield( pin.channels, sprintf( 'C%d', ch ) ) ) ch = ch+1; end ch_max = ch-1; img = zeros(pin.rows, pin.columns, ch_max); for ch=1:ch_max img(:,:,ch) = pin.channels.(sprintf( 'C%d', ch )); end else error( 'Color channels missing in the pfs frame' ); end pfsclose( pin ); % TODO: Check why crashes on windows if ~ispc() pfspclose( fid ); end end pfstools-1.8.5/src/matlab/pfs_shell.m0000755000175000017500000000332411537623122014512 00000000000000function cmd = pfs_shell( suffix ) % Returns command line that starts shell. Internal, do not use. if ispc() % -i option is needed to make sure that .bash_rc is executed and thus % DISPLAY and other environment variables are set if( exist( 'suffix', 'var' ) ) % This is put at the end of the shell command cmd = ''''; else work_dir = strrep(pwd(),'\','/'); % work_dir = regexprep(work_dir, ... % '([a-z]):','/cygdrive/$1', 'ignorecase','once'); [pstatus pdir] = dos('set CYGWIN_HOME'); if(pstatus == 1) pdir = 'c:\\cygwin'; else [pstatus pdir] = dos('echo %CYGWIN_HOME%'); pdir = strcat(pdir, ''); % used to remove final LF end % This is put at the beginning of the shell command cmd = sprintf('%s\\bin\\bash -i -l -c ''cd "%s";', pdir, work_dir); end else if( ~exist( 'suffix', 'var' ) ) work_dir = strrep(pwd(),'\','/'); % It is necessary to set all ENV variables before invoking % pfstools commands. '/bin/bash' may need to be replaced with the % shell you are using. % This will remove all references to matlab libraries from the % LD_LIBRARY_PATH. pfstools usually do not work with matlab version % of the standard libraries set_ld_path='export LD_LIBRARY_PATH=`echo $LD_LIBRARY_PATH | sed "y/:/\n/" | grep -v "matlab" | sed ":beg;N;s/\n/:/;t beg;"`'; % Start shell, cd to the working directory and remove matlab % libraries cmd = sprintf('/bin/bash -l -c ''cd "%s"; %s;', work_dir, set_ld_path ); else cmd=''''; end end end pfstools-1.8.5/src/matlab/Makefile.am0000664000175000017500000000237311406632352014413 00000000000000mexdir = $(MEX_DIR) mdir = $(MEX_DIR) mex_SCRIPTS = pfsclose.@MEX_EXT@ pfsopen.@MEX_EXT@ pfspopen.@MEX_EXT@ pfsput.@MEX_EXT@ pfsget.@MEX_EXT@ pfs_transform_colorspace.@MEX_EXT@ pfspclose.@MEX_EXT@ mex_ccfiles = $(mex_SCRIPTS:.@MEX_EXT@=.cpp) mex_utils.cpp mex_utils.h \ compatibility.h m_SCRIPTS = pfsclose.m pfsopen.m pfspopen.m pfsput.m pfsget.m pfs_transform_colorspace.m \ pfspclose.m pfs_shell.m pfs_read_luminance.m pfs_read_rgb.m pfs_read_xyz.m \ pfs_read_image.m pfs_write_rgb.m pfs_write_image.m pfs_write_luminance.m \ pfs_write_xyz.m pfsview.m pfs_test_shell.m Contents.m EXTRA_DIST = Makefile.win32 $(mex_ccfiles) $(m_SCRIPTS) CCFILES = $(mex_SCRIPTS:.@MEX_EXT@=.cpp) .cpp.@MEX_EXT@: $(MEX) -I${srcdir}/../pfs -D_MATLAB_VER $^ pfsclose.@MEX_EXT@: pfsclose.cpp mex_utils.cpp pfsopen.@MEX_EXT@: pfsopen.cpp mex_utils.cpp pfspclose.@MEX_EXT@: pfspclose.cpp mex_utils.cpp pfspopen.@MEX_EXT@: pfspopen.cpp mex_utils.cpp pfsput.@MEX_EXT@: pfsput.cpp mex_utils.cpp ${srcdir}/../pfs/pfs.cpp pfsget.@MEX_EXT@: pfsget.cpp mex_utils.cpp ${srcdir}/../pfs/pfs.cpp pfs_transform_colorspace.@MEX_EXT@: pfs_transform_colorspace.cpp mex_utils.cpp ${srcdir}/../pfs/colorspace.cpp clean: rm -f *.@MEX_EXT@ .PHONY: clean pfstools-1.8.5/src/matlab/pfs_write_xyz.m0000664000175000017500000000276511151364245015456 00000000000000function pfs_write_xyz( fileName, varargin ) %PFS_WRITE_XYZ write an XYZ image file. % % PFS_WRITE_XYZ( file_name, X, Y, Z ) % PFS_WRITE_XYZ( file_name, img ) % % X, Y, Z - XYZ color channels, given as linear response % img - 3D matrix image, where img(:,:,1:3) represents XYZ color channels % % The format of the file is recognized based in the file name extension: % .hdr for Radiance images, .exr for OpenEXR, .jpg for JPEG and .png for % PNG. See manual of "pfsout" shell command for the full list of the % supported formats. % % See also: PFS_WRITE_IMAGE, PFS_WRITE_LUMINANCE, PFS_WRITE_RGB, % PFS_READ_IMAGE. % % Copyright 2009 Rafal Mantiuk %cmd = sprintf( '%spfsout %s%s', pfs_shell(), fileName, pfs_shell(1) ) fid = pfspopen( sprintf( '%spfsout ''%s''%s', pfs_shell(), fileName, pfs_shell(1) ), 'w' ); pfs = pfsopen( fid, [size( varargin{1}, 1 ) size( varargin{1}, 2 )] ); if( nargin == 4 ) if( ~isnumeric(varargin{1}) || ~isnumeric(varargin{2}) || ~isnumeric(varargin{1}) ) error( 'pfs_write_xyz: matrices of the equal size expected as an arguments' ); end pfs.channels.X = single(varargin{1}); pfs.channels.Y = single(varargin{2}); pfs.channels.Z = single(varargin{3}); elseif( nargin == 2 && ndims(varargin{1}) == 3 ) pfs.channels.X = single(varargin{1}(:,:,1)); pfs.channels.Y = single(varargin{1}(:,:,2)); pfs.channels.Z = single(varargin{1}(:,:,3)); else error( 'pfs_write_xyz: improper usage' ); end pfsput( pfs ); pfsclose( pfs ); pfspclose( fid ); end pfstools-1.8.5/src/matlab/Makefile.in0000644000175000017500000003652511652214376014435 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/matlab DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(mdir)" "$(DESTDIR)$(mexdir)" SCRIPTS = $(m_SCRIPTS) $(mex_SCRIPTS) SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mexdir = $(MEX_DIR) mdir = $(MEX_DIR) mex_SCRIPTS = pfsclose.@MEX_EXT@ pfsopen.@MEX_EXT@ pfspopen.@MEX_EXT@ pfsput.@MEX_EXT@ pfsget.@MEX_EXT@ pfs_transform_colorspace.@MEX_EXT@ pfspclose.@MEX_EXT@ mex_ccfiles = $(mex_SCRIPTS:.@MEX_EXT@=.cpp) mex_utils.cpp mex_utils.h \ compatibility.h m_SCRIPTS = pfsclose.m pfsopen.m pfspopen.m pfsput.m pfsget.m pfs_transform_colorspace.m \ pfspclose.m pfs_shell.m pfs_read_luminance.m pfs_read_rgb.m pfs_read_xyz.m \ pfs_read_image.m pfs_write_rgb.m pfs_write_image.m pfs_write_luminance.m \ pfs_write_xyz.m pfsview.m pfs_test_shell.m Contents.m EXTRA_DIST = Makefile.win32 $(mex_ccfiles) $(m_SCRIPTS) CCFILES = $(mex_SCRIPTS:.@MEX_EXT@=.cpp) all: all-am .SUFFIXES: .SUFFIXES: .@MEX_EXT@ .cpp $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/matlab/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/matlab/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-mSCRIPTS: $(m_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(mdir)" || $(MKDIR_P) "$(DESTDIR)$(mdir)" @list='$(m_SCRIPTS)'; test -n "$(mdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(mdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(mdir)$$dir" || exit $$?; \ } \ ; done uninstall-mSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(m_SCRIPTS)'; test -n "$(mdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(mdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(mdir)" && rm -f $$files install-mexSCRIPTS: $(mex_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(mexdir)" || $(MKDIR_P) "$(DESTDIR)$(mexdir)" @list='$(mex_SCRIPTS)'; test -n "$(mexdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(mexdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(mexdir)$$dir" || exit $$?; \ } \ ; done uninstall-mexSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(mex_SCRIPTS)'; test -n "$(mexdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(mexdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(mexdir)" && rm -f $$files mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(mdir)" "$(DESTDIR)$(mexdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-mSCRIPTS install-mexSCRIPTS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-mSCRIPTS uninstall-mexSCRIPTS .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-mSCRIPTS install-man \ install-mexSCRIPTS install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am uninstall-mSCRIPTS \ uninstall-mexSCRIPTS .cpp.@MEX_EXT@: $(MEX) -I${srcdir}/../pfs -D_MATLAB_VER $^ pfsclose.@MEX_EXT@: pfsclose.cpp mex_utils.cpp pfsopen.@MEX_EXT@: pfsopen.cpp mex_utils.cpp pfspclose.@MEX_EXT@: pfspclose.cpp mex_utils.cpp pfspopen.@MEX_EXT@: pfspopen.cpp mex_utils.cpp pfsput.@MEX_EXT@: pfsput.cpp mex_utils.cpp ${srcdir}/../pfs/pfs.cpp pfsget.@MEX_EXT@: pfsget.cpp mex_utils.cpp ${srcdir}/../pfs/pfs.cpp pfs_transform_colorspace.@MEX_EXT@: pfs_transform_colorspace.cpp mex_utils.cpp ${srcdir}/../pfs/colorspace.cpp clean: rm -f *.@MEX_EXT@ .PHONY: clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/src/matlab/pfspopen.m0000664000175000017500000000063010570530524014360 00000000000000% Execute the command line and create a fifo pipe for reading/writing % output/input. Used internally by pfstools. % % fid = pfspopen( command_line, mode ) % % command_line - shell command line that should be executed % mode - either 'r' for reading output, or 'w' for writing input % fid - file ID, which should be passed to pfsopen % % Always use pfspclose() to close the pipe created with pfspopen pfstools-1.8.5/src/matlab/pfsput.m0000664000175000017500000000100410570530524014043 00000000000000% Write frame to the pfs stream. See also help for pfsopen function. % % usage: pfsput( pfs_struct ); % pfs_struct - the structure returned by pfsopen. The stream must be open for writing % % Typical usage: % % ## Create you image % Y = ones( 512, 512 ); % Y(256,:) = 10; % % ## Create pfs stream for writing % pout = pfsopen( \"output.pfs\", size( Y ) ); % % ## Add channels % pout.channels.Y = Y; % % ## Write frame. You can 'put' multiple frames. % pfsput( pout ); % % ##Close stream % pfsclose( pout ) pfstools-1.8.5/src/matlab/pfsview.m0000775000175000017500000000671011352360002014210 00000000000000function pfsview( varargin ) %PFSVIEW Shows set of matrices as images using pfsview % % PFSVIEW( ['title',] channel [,'channel name'], ... ) % % title - (optional) a title to be displayed in the title bar of pfsview % channel - a real matrix, or a cell array of real matrixes. If the matrix % has the size(..,3)==3, it is recognized as an RGB color % image. % channel name - (optional) name for the channel given as next argument % after channel matrix. % % See also: PFS_READ_IMAGE, PFS_WRITE_IMAGE, PFS_TRANSFORM_COLORSPACE. % % Copyright 2009 Rafal Mantiuk width = -1; height = -1; title = 'matlab'; n = 1; for i=1:length( varargin ) if iscell(varargin{i}) C = varargin{i}; width = size( C{1}, 2 ); height = size( C{1}, 1 ); if( size( C, 1 ) > 1 ) for j=1:size(C,1) for k=1:size(C,2) if( any( size(C{j,k}) ~= [height width] ) ) continue; % empty or invalid cell end ch_name = sprintf( 'c_%d_%dx%d', n, j, k ); channels.(ch_name) = C{j, k}; end end else for j=1:length(C) ch_name = sprintf( 'cell_%d_%d', n, j ); channels.(ch_name) = C{j}; end end n = n+1; elseif( isnumeric( varargin{i} ) ) m_size = size( varargin{i} ); width = m_size(2); height = m_size(1); if( length(m_size) == 2 ) matrix_name = inputname( i ); if( isempty( matrix_name ) ) ch_name = sprintf( 'matrix_%d', n ); else ch_name = matrix_name; end n = n+1; channels.( ch_name ) = single( varargin{i} ); elseif( length(m_size) == 3 && m_size(3)==3 ) % Color channels [channels.X channels.Y channels.Z] = pfs_transform_colorspace( 'RGB', single(varargin{i}), 'XYZ' ); elseif( length(m_size) == 3 && m_size(3)<10 ) matrix_name = inputname( i ); if( isempty( matrix_name ) ) ch_name = sprintf( 'matrix_%d', n ); n = n+1; else ch_name = matrix_name; end for j=1:m_size(3) channels.( sprintf( '%s_%d', ch_name, j ) ) = single( varargin{i}(:,:,j) ); end else error( [ 'Cannot display matrix of the size [' num2str( m_size ) ']' ] ); end elseif( islogical( varargin{i} ) ) ch_name = sprintf( 'bool_%d', n ); n = n+1; channels.(ch_name) = double(varargin{i}); m_size = size( varargin{i} ); width = m_size(2); height = m_size(1); elseif( ischar( varargin{i} ) ) if( i == 1 ) title = varargin{i}; else if( ~exist( 'channels', 'var' ) || ~exist( 'ch_name', 'var' ) ) error( 'channel_name argument must follow channel argument' ); else channels.(varargin{i}) = channels.( ch_name ); channels = rmfield( channels, ch_name ); clear ch_name; end end end end % tmp file is used rather than pipes to run pfsview in background without % blocking matlab tmp_file = tempname(); pfsout = pfsopen( tmp_file, height, width ); pfsout.channels = channels; pfsout.tags.FILE_NAME = title; pfsput( pfsout ); pfsclose( pfsout ); system( sprintf( '%s(pfsview <''%s'' && rm -f %s) &%s', pfs_shell(), tmp_file, tmp_file, pfs_shell( 1 ) ) ); end pfstools-1.8.5/src/fileformat/0002755000175000017500000000000011652214414013320 500000000000000pfstools-1.8.5/src/fileformat/pfsindcraw.in0000755000175000017500000000303211565441256015740 00000000000000#!@BASH_PATH@ ############################################################ # Wrapper for dcraw. # Convert digital camera RAW files to 16bit PPMs. # # this is a stub with basic functionality ############################################################ if test -z "$1" || test "$1" = "--help" || test "$1" = "-h"; then cat < [...] See the man page for more information. EOF exit 1 fi if ! which dcraw 2>/dev/null 1>/dev/null; then echo >&2 "pfsindcraw: dcraw program not found. Check if it is installed and can be found in the PATH." exit 1; fi if ! which pfsinppm 2>/dev/null 1>/dev/null; then echo >&2 "pfsindcraw: pfsinppm program not found. Check if pfstools are compiled with netpbm support." exit 1; fi #Arguments used for all images passed to pfsindcraw global_arguments="" if test -n "$1"; then while test "${1:0:1}" = "-"; do case "$1" in *) echo >&2 "No option is implemented at the moment." exit 1; esac global_arguments="$global_arguments $1" shift done fi while test "$1"; do file_pattern="$1" dcraw -c -o 0 -4 -w "$file_pattern" | pfsinppm - 2> /dev/null | \ pfstag --set "FILE_NAME=${file_pattern}" --set "LUMINANCE=RELATIVE" shift done pfstools-1.8.5/src/fileformat/pfsinjpeghdr.10000664000175000017500000000105010306037136016000 00000000000000.TH "pfsinjpeghdr" 1 .SH NAME pfsinjpeghdr \- Load images or frames in JPEG-HDR format .SH SYNOPSIS .B pfsinjpeghdr .SH DESCRIPTION Use this command to read JPEG file with HDR extension. This software makes use of the High Dynamic Range Imaging Library from Sunnybrook Technologies Inc. (c) Sunnybrook Inc. 2005 .SH EXAMPLES .TP pfsinhdrjpeg memorial.jpeg | pfsout memorial.hdr Converts from one HDR format to another .SH BUGS Please report bugs and comments to Rafal Mantiuk . .SH "SEE ALSO" .BR pfsoutjpeghdr (1) pfstools-1.8.5/src/fileformat/pfsinrgbe.10000664000175000017500000000544311071466566015323 00000000000000.TH "pfsinrgbe" 1 .SH NAME pfsinrgbe \- Load images or frames in Radiance RGBE format .SH SYNOPSIS .B pfsinrgbe [--linear] ( [--frames ] [--skip-missing]) [...] .SH DESCRIPTION .I pfsinrgbe command loads images in Radiance RGBE format and writes \fIpfs\fR stream to the Standard Output. The \fIpfs\fR stream is usually piped to another program for further processing. To detect the format automatically based on the extension, use \fIpfsin\fR command. .PP Since RGBE is an HDR format, 'LUMINANCE' tag is set to 'RELATIVE' (relative linear luminance values). .PP To read images from standard input use a single dash '-' instead of filename. The images are read until EOF is reached. .PP Each file can contain a \%%d pattern, which is substituted with frame numbers. The pattern has the same syntax as C .I printf command. For example, you can use \%%04d to make the frame number four digit with proceedings zeros. You can select the frames using the following options (the options must be always given after the file name): .TP .B \--frames Range is given in mathlab / octave format: .B "startframe:step:endframe" Frame numbers start with .B "startframe" (default 0), are increased by .B "step" (default 1) and stop at .B "endframe" You can skip one of those values, for example .I "1:100" for frames 1,2,...,100 and .I 0:2: for frame 0,2,4,... up to the last file that exists. .TP .B \--skip-missing Skip up to ten frames in a row if corresponding files are missing. Otherwise the program stops reading sequence at the first file that does not exists. This switch does not apply to the first frame in a sequence. This switch can be useful if there is a rendered animation where some of the frame has not been generated. .TP .B \--linear Ignored for compatibility with \fIpfsinppm\fR. .SH EXAMPLES .TP pfsinrgbe intro\%%d.hdr frame\%%d.hdr | ... Concatenate two animations into one and pass it to pipe for further processing. .SH IMPORTANT NOTE There is an incompatibility between viewers of RGBE format in terms of absolute luminance values. The ximage viewer from Radiance package expects radiance values in RGBE files and uses the WHITE_EFFICACY constant equal to 179.0f to convert from radiance to luminance. This in practice means that the values displayed with pfsview maybe higher than expected. To compensate for this incompatibility we suggest to use \fIpfsabsolute\fR command: pfsinrgbe measured_luminance.hdr | pfsabsolute 1 179 | pfsview This is not necessary when RGBE files are saved using \fIpfsoutrgbe\fR, Radiance package, mkhdr or Photospheare. This is also not relevant when only relative absolute values are considered. .SH BUGS Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools .SH "SEE ALSO" .BR pfsin (1), .BR pfsout (1) pfstools-1.8.5/src/fileformat/pfsinppm.cpp0000664000175000017500000001214611202601266015600 00000000000000/** * @brief Read files in PPM format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * @author Grzegorz Krawczyk, * * $Id: pfsinppm.cpp,v 1.6 2009/05/13 17:26:14 rafm Exp $ */ #include #include #include #include #include #include "ppmio.h" #define PROG_NAME "pfsinppm" class QuietException { }; void printHelp() { std::cerr << PROG_NAME " [--linear] [--absolute ] [--verbose] [--help]" << std::endl << "See man page for more information." << std::endl; } void readFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; bool opt_linear=false; float absoluteMaxLum = 0; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "linear", no_argument, NULL, 'l' }, { "absolute", required_argument, NULL, 'a' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "lhva:"; pfs::FrameFileIterator it( argc, argv, "rb", NULL, stdin, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'l': opt_linear = true; break; case 'a': absoluteMaxLum = (float)strtod( optarg, NULL ); break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( absoluteMaxLum != 0 && opt_linear ) throw pfs::Exception( "'absolute' and 'linear' are conflicting options" ); if( absoluteMaxLum < 0 ) throw pfs::Exception( "maximum absolute luminance must be > 0" ); VERBOSE_STR << "linearize input image: " << ((opt_linear || absoluteMaxLum!=0) ? "yes" : "no") << std::endl; if( absoluteMaxLum != 0 ) VERBOSE_STR << "maximum absolute luminance: " << absoluteMaxLum << std::endl; bool eofP = false; while( !eofP ) { pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) break; // No more frames PPMReader reader( PROG_NAME, ff.fh ); VERBOSE_STR << "reading file '" << ff.fileName << "'" << std::endl; pfs::Frame *frame = pfsio.createFrame( reader.getWidth(), reader.getHeight() ); pfs::Channel *X, *Y, *Z; frame->createXYZChannels( X, Y, Z ); //Store sRGB data temporarily in XYZ channels eofP = reader.readImage( X, Y, Z ); if( opt_linear || absoluteMaxLum != 0 ) { pfs::transformColorSpace( pfs::CS_SRGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); if( absoluteMaxLum != 0 ) { // Rescale to absolute luminance level const int pixCount = X->getWidth()*X->getHeight(); for( int i = 0; i < pixCount; i++ ) { (*X)(i) *= absoluteMaxLum; (*Y)(i) *= absoluteMaxLum; (*Z)(i) *= absoluteMaxLum; } frame->getTags()->setString("LUMINANCE", "ABSOLUTE"); } else frame->getTags()->setString("LUMINANCE", "RELATIVE"); } else { pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); frame->getTags()->setString("LUMINANCE", "DISPLAY"); } // This is the luminance / luma perceived as reference white // Some tone-mappers may need this frame->getTags()->setString("WHITE_Y", "1"); char strbuf[3]; snprintf( strbuf, 3, "%d", reader.getBitDepth() ); frame->getTags()->setString("BITDEPTH", strbuf ); const char *fileNameTag = strcmp( "-", ff.fileName )==0 ? "stdin" : ff.fileName; frame->getTags()->setString( "FILE_NAME", fileNameTag ); pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); it.closeFrameFile( ff ); } } int main( int argc, char* argv[] ) { try { readFrames( argc, argv ); } catch( pfs::Exception ex ) { std::cerr << PROG_NAME << " error: " << ex.getMessage() << std::endl; return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsinexr.10000664000175000017500000000431111071466566015173 00000000000000.TH "pfsinexr" 1 .SH NAME pfsinexr \- Load images or frames in OpenEXR format .SH SYNOPSIS .B pfsinexr [--keep-rgb] ( [--frames ] [--skip-missing]) [...] .SH DESCRIPTION Use this command to read frames in OpenEXR format. The frames are converted to pfs stream and send to the standard output. This command can read arbitrary channels from OpenEXR files; color channels XYZ are however specially handled (see option \fIkeep-rgb\fR). pfsinexr reads also all string attributes from OpenEXR file and write them as tags in pfs stream. Attributes of other types are ignored. If attribute name contains a colon (:), the part before colon is treated as a channel name and the attribute is assigned to that channel (similar notation as command line argument of pfstag program). pfsinexr recognizes OpenEXR standard attribute \fIWhiteLuminance\fR and multiplies the data by that value to get absolute luminance values (see also \fB--fix-halfmax\fR switch in pfsoutexr). Additionally the tag \fILUMINANCE\fR is set to \fIABSOLUTE\fR unless OpenEXR files contains attribute \fILUMINANCE\fR set to semething else. That is the channel \fIY\fR is assumued to represent absolute luminance levels in cd/m^2. If an OpenEXR file contains 'Z' channel, it is renamed to 'DEPTH' to avoid conflict with the Z color channel for the XYZ color space. Details on the format of the pattern file names, which are used for reading multiple frames, can be found in the manual page of pfsinppm. To automatically recognize a file format from the extension, use \fIpfsin\fR command instead. .TP .B \--keep-rgb By default, color channels R, G and B from an OpenEXR file are converted to XYZ color space, which is suggested format for color data in pfs. When \fIkeep-rgb\fR option is specified, color channels RGB are stored as they are without any conversion. .SH EXAMPLES .TP pfsin memorial.exr | pfsout memorial.hdr Converts from one HDR format to another .SH BUGS pfsinexr and pfsoutexr can not take stdin / stdout as an input/output (dash '-' instead of file name). Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools .SH "SEE ALSO" .BR pfsin (1) .BR pfsinppm (1) .BR pfsoutexr (1) pfstools-1.8.5/src/fileformat/pfsoutffmpeg0000775000175000017500000000374610254027366015712 00000000000000#!/bin/sh ############################################################ # Read pfs frames from stdin and forward them to ffmpeg # program ############################################################ # # This file is a part of PFSTOOLS package. # ---------------------------------------------------------------------- # Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk # # 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 # ---------------------------------------------------------------------- # if test "$1" = "--help"; then cat < output_file.avi See manual of ffmpeg for further information. Note that the usage of '-f' switch (input format specifier) and '-i' switch (input file specifier) is implemented inside the script and is therefore not allowed. See the man page for sample usage. EOF exit 1 fi FFMPEG="/usr/bin/ffmpeg" FFMPEG_SWICHES="-f imagepipe -i - " FFMPEG_USER_SWICHES="" while test "$1"; do if test "$1" = "-f" -o "$1" = "-i"; then echo "pfsoutffmpeg: Usage of -f and -i switches is not allowed." &1>2 exit 1 fi FFMPEG_USER_SWICHES="${FFMPEG_USER_SWICHES} $1" shift done pfsoutppm - | ${FFMPEG} ${FFMPEG_SWICHES} ${FFMPEG_USER_SWICHES} pfstools-1.8.5/src/fileformat/pfsoutimgmagick.cpp0000644000175000017500000001553611537623634017157 00000000000000/** * @file * @brief Writing frames using ImageMagick library * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsoutimgmagick.cpp,v 1.7 2011/03/15 08:47:24 rafm Exp $ */ #include #include #include #include #include #define PROG_NAME "pfsoutimgmagick" class QuietException { }; void printHelp() { std::cerr << PROG_NAME " [--linear] [--quality] [--bit-depth] [--verbose] [--help]" << std::endl << "See man page for more information." << std::endl; } template inline T clamp( const T v, const T minV, const T maxV ) { if( v < minV ) return minV; if( v > maxV ) return maxV; return v; } void writeFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; bool opt_srgb=false; int quality = 75; int opt_bit_depth = -1; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "srgb", no_argument, NULL, 's' }, { "quality", required_argument, NULL, 'q' }, { "bit-depth", required_argument, NULL, 'b' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "shvq:b:"; pfs::FrameFileIterator it( argc, argv, "wb", NULL, NULL, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'q': quality = strtol( optarg, NULL, 10 ); break; case 'b': opt_bit_depth = strtol( optarg, NULL, 10 ); break; case 's': opt_srgb = true; break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( quality < 1 || quality > 100 ) throw pfs::Exception( "'quality' argument must be within 1-100 range" ); if( opt_bit_depth != -1 && (opt_bit_depth < 8 || opt_bit_depth > 32 ) ) throw pfs::Exception( "'bit-depth' argument must be within 8-32 range" ); VERBOSE_STR << "quality: " << quality << "%\n"; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) { break; } pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) { pfsio.freeFrame( frame ); break; // No more frames } it.closeFrameFile( ff ); pfs::Channel *X, *Y, *Z, *alpha; frame->getXYZChannels( X, Y, Z ); if( X == NULL ) // No color { Y = frame->getChannel( "Y" ); if( Y == NULL ) // No luminance throw pfs::Exception( "Missing X, Y, Z channels in the PFS stream" ); // Grey levels X = frame->createChannel( "X" ); Z = frame->createChannel( "Z" ); pfs::transformColorSpace( pfs::CS_RGB, Y, Y, Y, pfs::CS_XYZ, X, Y, Z ); } alpha = frame->getChannel( "ALPHA" ); if( alpha == NULL ) alpha = frame->getChannel( "A" ); const char* luminanceTag = frame->getTags()->getString("LUMINANCE"); if( luminanceTag!=NULL && strcmp(luminanceTag,"ABSOLUTE")==0 ) std::cerr << PROG_NAME << " warning: This file format cannot store absolute luminance values\n"; if( opt_srgb ) { if( luminanceTag!=NULL && strcmp(luminanceTag,"DISPLAY")==0 ) std::cerr << PROG_NAME << " warning: This image seems to be display referred thus there is no need for applying the sRGB non-linearity\n"; pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_SRGB, X, Y, Z ); VERBOSE_STR << "writing file (sRGB corrected) '" << ff.fileName << "'" << std::endl; } else { pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, X, Y, Z ); VERBOSE_STR << "writing file (linear) '" << ff.fileName << "'" << std::endl; } // Determine bit-depth for writing images (bitdepth == -1 for default) int bitdepth = -1; if( opt_bit_depth != -1 ) bitdepth = opt_bit_depth; else { const char* bitDepthTag = frame->getTags()->getString("BITDEPTH"); if( bitDepthTag!=NULL ) { bitdepth=strtol( bitDepthTag, NULL, 10 ); if( bitdepth < 8 ) bitdepth = 8; else if( bitdepth > 16 ) bitdepth = 16; } } { // Copy image to array that can be accepted by ImageMagick const int pixelCount = frame->getWidth()*frame->getHeight(); unsigned short *imgBuffer = new unsigned short[pixelCount*(alpha == NULL ? 3 : 4)]; int i = 0; float maxValue = (float)(1<<16) -1; for( int pix = 0; pix < pixelCount; pix++ ) { imgBuffer[i++] = (unsigned short)(clamp((*X)(pix),0.f,1.f)*maxValue); imgBuffer[i++] = (unsigned short)(clamp((*Y)(pix),0.f,1.f)*maxValue); imgBuffer[i++] = (unsigned short)(clamp((*Z)(pix),0.f,1.f)*maxValue); if( alpha != NULL ) imgBuffer[i++] = (unsigned short)(maxValue-clamp((*alpha)(pix),0.f,1.f)*maxValue); } Magick::Image imImage( frame->getWidth(), frame->getHeight(), (alpha == NULL ? "RGB" : "RGBA"), Magick::ShortPixel, imgBuffer ); imImage.quality( quality ); if( bitdepth != -1 ) imImage.depth( bitdepth ); imImage.write( ff.fileName ); delete[] imgBuffer; } pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { writeFrames( argc, argv ); } catch( pfs::Exception ex ) { std::cerr << PROG_NAME << " error: " << ex.getMessage() << std::endl; return EXIT_FAILURE; } catch( Magick::Exception &ex ) { //This is comming from ImageMagick std::cerr << PROG_NAME << " error: " << ex.what() << std::endl; return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsinexr.cpp0000664000175000017500000002113510736434641015614 00000000000000/** * @brief Read files in OpenEXR format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: pfsinexr.cpp,v 1.3 2008/01/01 13:01:21 rafm Exp $ */ #include #include #include #include #include #include #include #include #include #include #include #include #define PROG_NAME "pfsinexr" using namespace Imf; using namespace Imath; class QuietException { }; void printHelp() { fprintf( stderr, PROG_NAME " [--keep-rgb] [--verbose] [--help]\n" "See man page for more information.\n" ); } static string escapeString( const string &src ) { int pos = 0; string ret = src; while( pos < ret.size() ) { pos = ret.find( "\n", pos ); if( pos == -1 ) break; ret.replace( pos, 1, "\\n" ); pos+=2; } return ret; } void readFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; bool keepRGB = false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "keep-rgb", no_argument, NULL, 'k' }, { "linear", no_argument, NULL, 'l' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "lkhv"; pfs::FrameFileIterator it( argc, argv, "rb", NULL, NULL, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'k': keepRGB = true; break; case 'l': std::cerr << PROG_NAME << " warning: linearize option ignored for an HDR input!" << std::endl; break; case '?': throw QuietException(); case ':': throw QuietException(); } } VERBOSE_STR << "keep RGB channels untouch: " << (keepRGB ? "yes" : "no") << std::endl; while( true ) { pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) break; // No more frames it.closeFrameFile( ff ); InputFile file( ff.fileName ); FrameBuffer frameBuffer; Box2i dw = file.header().displayWindow(); Box2i dtw = file.header().dataWindow(); int width = dw.max.x - dw.min.x + 1; int height = dw.max.y - dw.min.y + 1; if( dtw.min.x < dw.min.x && dtw.max.x > dw.max.x || dtw.min.y < dw.min.y && dtw.max.y > dw.max.y ) throw pfs::Exception( "No support for OpenEXR files DataWidnow greater than DisplayWindow" ); pfs::Frame *frame = pfsio.createFrame( width, height ); const ChannelList &channels = file.header().channels(); bool processColorChannels = false; pfs::Channel *X, *Y, *Z; if( !keepRGB ) { // Keep RGB channels as they are const Channel *rChannel = channels.findChannel( "R" ); const Channel *gChannel = channels.findChannel( "G" ); const Channel *bChannel = channels.findChannel( "B" ); if( rChannel!=NULL && gChannel!=NULL && bChannel!=NULL ) { frame->createXYZChannels( X, Y, Z ); frameBuffer.insert( "R", // name Slice( FLOAT, // type // (char*)(X->getRawData()), (char*)(X->getRawData()), sizeof(float), // xStride sizeof(float) * width,// yStride 1, 1, // x/y sampling 0.0)); // fillValue frameBuffer.insert( "G", // name Slice( FLOAT, // type (char*)(Y->getRawData()), sizeof(float), // xStride sizeof(float) * width,// yStride 1, 1, // x/y sampling 0.0)); // fillValue frameBuffer.insert( "B", // name Slice( FLOAT, // type (char*)(Z->getRawData()), sizeof(float), // xStride sizeof(float) * width,// yStride 1, 1, // x/y sampling 0.0)); // fillValue processColorChannels = true; } } for( ChannelList::ConstIterator i = channels.begin(); i != channels.end(); ++i ) { const Channel &channel = i.channel(); if( processColorChannels ) { // Skip color channels if( !strcmp( i.name(), "R" ) || !strcmp( i.name(), "G" ) || !strcmp( i.name(), "B" ) ) continue; } const char *channelName = i.name(); if( !strcmp( channelName, "Z" ) ) { channelName = "DEPTH"; } pfs::Channel *pfsCh = frame->createChannel( channelName ); frameBuffer.insert( i.name(), // name Slice( FLOAT, // type (char *)pfsCh->getRawData(), sizeof(float), // xStride sizeof(float) * width,// yStride 1, 1, // x/y sampling 0.0)); // fillValue } // Copy attributes to tags { for( Header::ConstIterator it = file.header().begin(); it != file.header().end(); it++ ) { const char *attribName = it.name(); const char *colon = strstr( attribName, ":" ); const StringAttribute *attrib = file.header().findTypedAttribute(attribName); if( attrib == NULL ) continue; // Skip if type is not String // fprintf( stderr, "Tag: %s = %s\n", attribName, attrib->value().c_str() ); if( colon == NULL ) { // frame tag frame->getTags()->setString( attribName, escapeString(attrib->value()).c_str() ); } else { // channel tag string channelName = string( attribName, colon-attribName ); pfs::Channel *ch = frame->getChannel( channelName.c_str() ); if( ch == NULL ) { fprintf( stderr, PROG_NAME ": Warning! Can not set tag for '%s' channel because it does not exist\n", channelName.c_str() ); continue; } ch->getTags()->setString( colon+1, escapeString( attrib->value() ).c_str() ); } } } file.setFrameBuffer( frameBuffer ); file.readPixels( dw.min.y, dw.max.y ); VERBOSE_STR << "reading file (linear) '" << ff.fileName << "'" << std::endl; if( processColorChannels ) { // Rescale values if WhiteLuminance is present if( hasWhiteLuminance( file.header() ) ) { float scaleFactor = whiteLuminance( file.header() ); int pixelCount = frame->getHeight()*frame->getWidth(); for( int i = 0; i < pixelCount; i++ ) { (*X)(i) *= scaleFactor; (*Y)(i) *= scaleFactor; (*Z)(i) *= scaleFactor; } const StringAttribute *relativeLum = file.header().findTypedAttribute("RELATIVE_LUMINANCE"); const char *luminanceTag = frame->getTags()->getString( "LUMINANCE" ); if( luminanceTag == NULL ) frame->getTags()->setString( "LUMINANCE", "ABSOLUTE" ); } pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); } frame->getTags()->setString( "FILE_NAME", ff.fileName ); pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { readFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch (const std::exception &exc) // OpenEXR exception { fprintf( stderr, PROG_NAME " error: %s\n", exc.what() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsoutffmpeg.10000664000175000017500000000252510254027366016040 00000000000000.TH "pfsoutffmpeg" 1 .SH NAME pfsoutffmpeg \- Read pfs frames from stdin and forward them to ffmpeg program .SH SYNOPSIS .B pfsoutffmpeg [--help] output_file .SH DESCRIPTION This command is a wrapper for ffmpeg program and can be used to write pfs frames to a compressed video. Check the examples section to for sample usage and see manual of ffmpeg for further information. Note that the usage of '-f' switch (input format specifier) and '-i' switch (input file specifier) of the ffmpeg program is implemented inside the script and is therefore not allowed. .SH EXAMPLES .TP pfsinrgbe frame%04d.hdr --frames 100:2:200 | pfstmo_reinhard02 -s | pfsgamma -g 1.7 | pfsoutffmpeg -qscale 4 test.avi 1. Read HDR frames in RGBE format with the following names: frame0100.hdr, frame0102.hdr, frame0104.hdr,... frame0200.hdr 2. Apply local tone mapping operator to each frame (Reinhard2002 model, part of the PFSTMO package) 3. Apply gamma correction to each tone mapped frame 4. Compress frames to test.avi animation .SH "SEE ALSO" .BR ffmpeg (1) .BR pfsin (1) .BR pfstmo_reinhard02 (1) .BR pfsgamma (1) .SH BUGS Frames smaller than 512x384 can cause broken pipe error, due to bug in ppm pipe reading routine in ffmpeg. Please report bugs and comments to Rafal Mantiuk or Grzegorz Krawczyk . pfstools-1.8.5/src/fileformat/pfsoutexr.cpp0000664000175000017500000002763410736434641016027 00000000000000/** * @brief Write files in OpenEXR format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * @author Rafal Mantiuk, * * $Id: pfsoutexr.cpp,v 1.3 2008/01/01 13:01:21 rafm Exp $ */ #include #include #include #include #include #include #include #include #include #include #include #include using namespace Imf; using namespace Imath; #define PROG_NAME "pfsoutexr" class QuietException { }; #define min(x,y) ( (x)<(y) ? (x) : (y) ) void printHelp() { fprintf( stderr, PROG_NAME " [--compression ] [--keep-xyz] [--fix-halfmax] [--linear] [--verbose] [--help]\n" "See man page for more information.\n" ); } bool isColorChannel( pfs::Channel *ch ) { return !strcmp( ch->getName(), "X" ) || !strcmp( ch->getName(), "Y" ) || !strcmp( ch->getName(), "Z" ); } // Change from pfs channel name to OpenEXR channel name const char *exrChannelName( const char *pfsChannelName ) { if( !strcmp( pfsChannelName, "DEPTH" ) ) { return "Z"; } return pfsChannelName; } void writeFrames( int argc, char* argv[] ) { Compression exrCompression = PIZ_COMPRESSION; bool verbose = false; bool keepXYZ = false; bool fixHalfMax = false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "compression", required_argument, NULL, 'c' }, { "keep-xyz", no_argument, NULL, 'k' }, { "fix-halfmax", no_argument, NULL, 'f' }, { "linear", no_argument, NULL, 'l' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "c:kf"; pfs::FrameFileIterator it( argc, argv, "wb", NULL, NULL, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'k': keepXYZ = true; break; case 'f': fixHalfMax = true; break; case 'c': if( !strcasecmp( optarg, "NO" ) ) { exrCompression = NO_COMPRESSION; } else if( !strcasecmp( optarg, "RLE" ) ) { exrCompression = RLE_COMPRESSION; } else if( !strcasecmp( optarg, "ZIPS" ) ) { exrCompression = ZIPS_COMPRESSION; } else if( !strcasecmp( optarg, "ZIP" ) ) { exrCompression = ZIP_COMPRESSION; } else if( !strcasecmp( optarg, "PIZ" ) ) { exrCompression = PIZ_COMPRESSION; } else if( !strcasecmp( optarg, "PXR24" ) ) { exrCompression = PXR24_COMPRESSION; } else { throw pfs::Exception( "Unknown compression method. Possible values: NO, RLE, ZIPS, ZIP, PIZ, PXR24" ); } break; case 'l': std::cerr << PROG_NAME << " warning: linearize option ignored for an HDR output!" << std::endl; break; case '?': throw QuietException(); case ':': throw QuietException(); } } // // FrameFileIterator should process only non-option parameters, but // // it assumes that the first parameter is a program name, therefore // // argv+optind-1 // int newArgc = argc-optind+1; if( verbose && keepXYZ ) fprintf( stderr, PROG_NAME ": keeping XYZ channels untouched\n" ); pfs::DOMIO pfsio; bool firstFrame = true; half *halfR = NULL, *halfG = NULL, *halfB = NULL; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) { break; // No more frames } const char* luminanceTag = frame->getTags()->getString("LUMINANCE"); if( luminanceTag!=NULL && 0==strcmp(luminanceTag,"DISPLAY") ) { static bool show_once = false; if( !show_once ) { std::cerr << PROG_NAME << " warning: " << "display profiled content written to an HDR output" << std::endl; show_once=true; } } pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) { pfsio.freeFrame( frame ); break; // No more frames } // OpenEXR library can not use FILE, therefore we do not need FH it.closeFrameFile( ff ); VERBOSE_STR << "writing file (HDR) '" << ff.fileName << "'" << std::endl; // Write the frame to EXR file { bool colorChannelsToHalf = false; pfs::Channel *R= NULL, *G = NULL, *B = NULL; // for clarity of the code if( !keepXYZ ) { pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X != NULL ) { // Has color R = X; G = Y; B = Z; pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, R, G, B ); colorChannelsToHalf = true; } } Header header( frame->getWidth(), frame->getHeight(), 1, // aspect ratio Imath::V2f (0, 0), // screenWindowCenter 1, // screenWindowWidth INCREASING_Y, // lineOrder exrCompression ); // Define channels in Header { pfs::ChannelIteratorPtr cit( frame->getChannelIterator() ); while( cit->hasNext() ) { pfs::Channel *ch = cit->getNext(); if( colorChannelsToHalf && isColorChannel( ch ) ) continue; const char *channelName = exrChannelName( ch->getName() ); header.channels().insert( channelName, Channel(FLOAT) ); } if( colorChannelsToHalf ) { header.channels().insert( "R", Channel(HALF) ); header.channels().insert( "G", Channel(HALF) ); header.channels().insert( "B", Channel(HALF) ); } } // Copy tags to attributes { pfs::TagIteratorPtr it( frame->getTags()->getIterator() ); while( it->hasNext() ) { const char *tagName = it->getNext(); // fprintf( stderr, "Tag: %s = %s\n", tagName, frame->getTags()->getString( tagName ) ); header.insert( tagName, StringAttribute(frame->getTags()->getString( tagName )) ); } //Copy all channel tags pfs::ChannelIteratorPtr cit( frame->getChannelIterator() ); while( cit->hasNext() ) { pfs::Channel *ch = cit->getNext(); pfs::TagIteratorPtr tit( ch->getTags()->getIterator() ); while( tit->hasNext() ) { const char *tagName = tit->getNext(); string channelTagName = ch->getName(); channelTagName += ":"; channelTagName += tagName; header.insert( channelTagName.c_str(), StringAttribute(ch->getTags()->getString( tagName )) ); } } } FrameBuffer frameBuffer; // Create channels in FrameBuffer { pfs::ChannelIterator *it = frame->getChannels(); while( it->hasNext() ) { pfs::Channel *ch = it->getNext(); if( colorChannelsToHalf && isColorChannel( ch ) ) continue; frameBuffer.insert( exrChannelName( ch->getName() ), // name Slice( FLOAT, // type (char*)ch->getRawData(), // base sizeof(float) * 1, // xStride sizeof(float) * frame->getWidth()) ); // yStride } if( colorChannelsToHalf ) { if( firstFrame ) { halfR = new half[frame->getWidth()*frame->getHeight()]; halfG = new half[frame->getWidth()*frame->getHeight()]; halfB = new half[frame->getWidth()*frame->getHeight()]; firstFrame = false; } frameBuffer.insert( "R", // name Slice( HALF, // type (char*)halfR, // base sizeof(half) * 1, // xStride sizeof(half) * frame->getWidth()) ); // yStride frameBuffer.insert( "G", // name Slice( HALF, // type (char*)halfG, // base sizeof(half) * 1, // xStride sizeof(half) * frame->getWidth()) ); // yStride frameBuffer.insert( "B", // name Slice( HALF, // type (char*)halfB, // base sizeof(half) * 1, // xStride sizeof(half) * frame->getWidth()) ); // yStride int pixelCount = frame->getHeight()*frame->getWidth(); // Check if pixel values do not exceed maximum HALF value float maxValue = -1; for( int i = 0; i < pixelCount; i++ ) { if( (*R)(i) > maxValue ) maxValue = (*R)(i); if( (*G)(i) > maxValue ) maxValue = (*G)(i); if( (*B)(i) > maxValue ) maxValue = (*B)(i); } bool maxHalfExceeded = maxValue > HALF_MAX; if( maxHalfExceeded && !fixHalfMax ) fprintf( stderr, PROG_NAME " warning: Some pixels exceed maximum value that can be stored in an OpenEXR file (maximum value of HALF-16 float) and will be clamped to that maximum. Use --fix-halfmax switch to rescale the data to the valid range.\n" ); if( fixHalfMax && maxHalfExceeded ) { // Rescale and copy pixels to half-type buffers float scaleFactor = HALF_MAX/maxValue; for( int i = 0; i < pixelCount; i++ ) { halfR[i] = (half)((*R)(i)*scaleFactor); halfG[i] = (half)((*G)(i)*scaleFactor); halfB[i] = (half)((*B)(i)*scaleFactor); } // Store scale factor as WhileLuminance standard sttribute // in order to restore absolute values later addWhiteLuminance( header, 1/scaleFactor ); } else { // Copy pixels to half-type buffers for( int i = 0; i < pixelCount; i++ ) { halfR[i] = min( (*R)(i), HALF_MAX ); halfG[i] = min( (*G)(i), HALF_MAX ); halfB[i] = min( (*B)(i), HALF_MAX ); } if( luminanceTag != NULL && !strcmp( luminanceTag, "ABSOLUTE" ) ) { addWhiteLuminance( header, 1 ); } } } } OutputFile file(ff.fileName, header); file.setFrameBuffer (frameBuffer); file.writePixels( frame->getHeight() ); } pfsio.freeFrame( frame ); } delete[] halfR; delete[] halfG; delete[] halfB; } int main( int argc, char* argv[] ) { try { writeFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch (const std::exception &exc) // OpenEXR exception { fprintf( stderr, PROG_NAME " error: %s\n", exc.what() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsinmulti.in0000755000175000017500000000461111565441357016000 00000000000000#!@BASH_PATH@ ############################################################ # Read several streams of frames and write pfs streams to # named pipes. ############################################################ if test -z "$1" || test "$1" = "--help"; then cat < [...] -- @1 [@2 [..]] See the man page for more information. EOF exit 1 fi all_named_pipes="" do_break="0" while test "$1"; do if test "${1:0:1}" = "-"; then global_arguments="$global_arguments $1" shift continue fi file_pattern="$1" # Get --frames and --skip-frames arguments extra_arguments=""; if test -n "$2"; then if test "$2" = "--"; then shift do_break="1" else while test "${2:0:1}" = "-"; do if test "$2" = "--frames"; then if test -z "$3"; then echo >&2 "Required argument missing after --frames" exit 1; fi extra_arguments="$extra_arguments $2 $3" shift else extra_arguments="$extra_arguments $2" fi shift done fi fi named_pipe=`mktemp` rm -f $named_pipe mkfifo $named_pipe pfsin $global_arguments "$file_pattern" $extra_arguments >$named_pipe & all_named_pipes="$all_named_pipes $named_pipe" shift if test "$do_break" = "1"; then break fi done command=$* new_command=`echo -e "FILES=${all_named_pipes}\nCMD=${command}" | awk '/^FILES/ { for( i=2; i <= NF; i++ ) FILE[i-1]=$i;} /^CMD/ { gsub( "CMD=", "" ); for( i in FILE ) { PAT="@" i; subsc=gsub( PAT, FILE[i] ); if( subsc<1 ) { print( "ERROR" ); exit( 1 );} } print $0;}'` if test "$new_command" = "ERROR"; then echo "pfsinmulti error: You must specify as many @1, @2, .., @n arguments in the command string as there are pfs streams" 1>&2 #remove named pipes cat $all_named_pipes >/dev/null rm -f $all_named_pipes exit 1 fi if ! ${new_command}; then echo "pfsinmulti error: command returned error" 1>&2 # cat $all_named_pipes >/dev/null rm -f $all_named_pipes exit 1 fi rm -f $all_named_pipes pfstools-1.8.5/src/fileformat/pfsin0000644000175000017500000001211711652214411014277 00000000000000#!/bin/bash ############################################################ # Read any image and write pfs stream to the standard output ############################################################ if test -z "$1" || test "$1" = "--help"; then cat < [...] Recognized file formats and extensions: Radiance RGBE - .pic, .hdr TIFF (incl. LogLuv) - .tiff, .tif PNM, PPM - .ppm, .pnm JPEG - .jpeg, .jpg PNG - .png PFS - .pfs OpenEXR - .exr PFM - .pfm DPX - .dpx GIF - .gif BMP - .bmp EPS - .eps hdrgen - .hdrgen (multi-exposure sequence, see pfscalibration) Canon 350D RAW - .cr2 (and other camera RAW formats recognized by dcraw) See the man page for more information. EOF exit 1 fi #Arguments used for all images passed to pfsout global_arguments="" if test -n "$1"; then while test "${1:0:1}" = "-"; do #Handle options that require a parameter for par_opt in "--frames" "-f" "--absolute" "-a"; do if test "$1" = $par_opt; then if test -z "$2"; then echo >&2 "Required parameter missing after $par_opt" exit 1; fi global_arguments="$global_arguments $1" shift break; fi done global_arguments="$global_arguments $1" shift done fi while test "$1"; do extension="${1##*.}" file_pattern="$1" # Handle common arguments arguments extra_arguments=""; if test -n "$2"; then while test "${2:0:1}" = "-"; do #Handle options that require a parameter for par_opt in "--frames" "-f" "--absolute" "-a"; do if test "$2" = $par_opt; then if test -z "$3"; then echo >&2 "Required parameter missing after $par_opt" exit 1; fi extra_arguments="$extra_arguments $2" shift break; fi done extra_arguments="$extra_arguments $2" shift done fi case "$extension" in ("hdr"|"HDR"|"pic"|"PIC") pfsinrgbe "$file_pattern" $global_arguments $extra_arguments ;; ("ppm"|"PPM"|"pnm"|"PNM"|"pgm"|"PGM") pfsinppm "$file_pattern" $global_arguments $extra_arguments ;; ("tif"|"TIF"|"tiff"|"TIFF") ## Use internal pfsintiff if possible, if not - ImageMagick if which pfsintiff >/dev/null; then pfsintiff "$file_pattern" $global_arguments $extra_arguments elif which pfsinimgmagick >/dev/null; then pfsinimgmagick "$file_pattern" $global_arguments $extra_arguments else echo 1>&2 "$extension files unsupported. Compile pfstools with ImageMagick or libtiff." exit 1 fi ;; ("exr"|"EXR") pfsinexr "$file_pattern" $global_arguments $extra_arguments ;; ("pfm"|"PFM") pfsinpfm "$file_pattern" $global_arguments $extra_arguments ;; ("jpg"|"JPG"|"jpeg"|"JPEG") ## Use ImageMagick if possible, if not - netpbm if which pfsinimgmagick >/dev/null; then pfsinimgmagick "$file_pattern" $global_arguments $extra_arguments elif which jpegtopnm >/dev/null; then jpegtopnm "$file_pattern" | pfsinppm - $global_arguments $extra_arguments else echo 1>&2 "$extension files unsupported. Compile pfstools with ImageMagick or NetPBM." exit 1 fi ;; ("png"|"PNG") ## Use ImageMagick if possible, if not - netpbm if which pfsinimgmagick >/dev/null; then pfsinimgmagick "$file_pattern" $global_arguments $extra_arguments elif which pngtopnm >/dev/null; then pngtopnm "$file_pattern" | pfsinppm - $global_arguments $extra_arguments else echo 1>&2 "$extension files unsupported. Compile pfstools with ImageMagick or NetPBM." exit 1 fi ;; ("dpx"|"DPX"|"gif"|"GIF"|"bmp"|"BMP"|"eps"|"EPS") pfsinimgmagick "$file_pattern" $global_arguments $extra_arguments ;; ("pfs"|"PFS") cat "$file_pattern" | pfstag --set "FILE_NAME=${file_pattern}" ;; ("hdrgen"|"HDRGEN") pfsinhdrgen "$file_pattern" $global_arguments $extra_arguments ;; (*) if dcraw -i "$file_pattern" > /dev/null 2>&1; then pfsindcraw "$file_pattern" $global_arguments $extra_arguments else echo 1>&2 "Unknown extension: $extension" exit 1 fi ;; esac shift done pfstools-1.8.5/src/fileformat/rgbeio.cpp0000664000175000017500000002454710725753141015234 00000000000000/** * @brief IO operations on Radiance's RGBE file format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: rgbeio.cpp,v 1.11 2007/12/06 11:00:49 rafm Exp $ */ #include "config.h" #include #include #include #include #include "rgbeio.h" using namespace std; /// constant to change between radiance and luminance #define WHITE_EFFICACY 179.0 void readRadianceHeader( FILE *file, int &width, int &height, float &exposure ); void readRadiance( FILE *file, int width, int height, float exposure, pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ); void writeRadiance( FILE *file, pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ); //--- // RGBE IO classes implementation RGBEReader::RGBEReader( FILE *fh ) : fh(fh) { //TODO: read header from radiance file readRadianceHeader( fh, width, height, exposure ); } void RGBEReader::readImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ) { readRadiance( fh, width, height, exposure, X, Y, Z ); } RGBEReader::~RGBEReader() { //TODO: empty } void RGBEWriter::writeImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ) { writeRadiance( fh, X, Y, Z ); } //-------------------------------------------------------------------- // RGBE IO format support functions typedef unsigned char Trgbe; struct Trgbe_pixel { /// @name RGB values and their exponent //@{ Trgbe r; Trgbe g; Trgbe b; Trgbe e; //@} }; void rgbe2rgb(const Trgbe_pixel& rgbe, float exposure, float &r, float &g, float &b) { if( rgbe.e!=0 ) // a non-zero pixel { int e = rgbe.e - int(128+8); double f = ldexp( 1.0, e ) * WHITE_EFFICACY / exposure; r = (float)(rgbe.r * f); g = (float)(rgbe.g * f); b = (float)(rgbe.b * f); } else r = g = b = 0.f; } void rgb2rgbe( float r, float g, float b, Trgbe_pixel& rgbe) { r /= WHITE_EFFICACY; g /= WHITE_EFFICACY; b /= WHITE_EFFICACY; double v = r; // max rgb value if( v < g) v = g; if( v < b ) v = b; if( v < 1e-32 ) { rgbe.r = rgbe.g = rgbe.b = rgbe.e = 0; } else { int e; // exponent v = frexp(v,&e) * 256.0/v; rgbe.r = Trgbe( v*r ); rgbe.g = Trgbe( v*g ); rgbe.b = Trgbe( v*b ); rgbe.e = Trgbe( e+128 ); } } //-------------------------------------------------------------------- // RGBE IO support functions // Reading RGBE files void readRadianceHeader( FILE *file, int &width, int &height, float &exposure ) { DEBUG_STR << "RGBE: reading header..." << endl; // read header information char head[255]; float fval; int format=0; exposure = 1.0f; while( !feof(file) ) { fgets(head, 200, file); if( strcmp(head, "\n")==0 ) break; if( strcmp(head, "#?RADIANCE\n")==0 ) { // format specifier found format=1; } if( strcmp(head, "#?RGBE\n")==0 ) { // format specifier found format=1; } if( head[0]=='#' ) // comment found - skip continue; if( strcmp(head, "FORMAT=32-bit_rle_rgbe\n")==0 ) { // header found continue; } if( sscanf(head, "EXPOSURE=%f", &fval)==1 ) { // // exposure value // if( exposure==0.0f ) // exposure = fval; // else exposure *= fval; } } // // if exposure is not set, set it to WHITE_EFFICACY // if( exposure==0.0f ) // exposure = WHITE_EFFICACY; // ignore wierd exposure adjustments if( exposure>1e12 || exposure<1e-12 ) exposure=1.0f; if( !format ) { throw pfs::Exception( "RGBE: no format specifier found" ); } // image size char xbuf[4], ybuf[4]; if( fgets(head,sizeof(head)/sizeof(head[0]),file) == 0 || sscanf(head,"%3s %d %3s %d",ybuf,&height,xbuf,&width) != 4 ) { throw pfs::Exception( "RGBE: unknown image size" ); } /* if( ybuf[1]=='x' || ybuf[1]=='X' ) { height += width; width = height - width; height = height - width; } */ DEBUG_STR << "RGBE: image size " << width << "x" << height << endl; } void RLERead( FILE* file, Trgbe* scanline, int size ) { int peek=0; while( peek128 ) { // a run int run_len = p[0]-128; while( run_len>0 ) { scanline[peek++] = p[1]; run_len--; } } else { // a non-run scanline[peek++] = p[1]; int nonrun_len = p[0]-1; if( nonrun_len>0 ) { fread(scanline+peek, sizeof(*scanline), nonrun_len, file); peek += nonrun_len; } } } if( peek!=size ) { throw pfs::Exception( "RGBE: difference in size while reading RLE scanline"); } } void readRadiance( FILE *file, int width, int height, float exposure, pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ) { // read image // depending on format read either rle or normal (note: only rle supported) Trgbe* scanline = new Trgbe[width*4]; for( int y=0 ; y4 ) { // write a non run: scanline[0] to scanline[run_start] if( run_start>0 ) { Trgbe* buf = new Trgbe[run_start+1]; buf[0] = run_start; for( int i=0 ; igetCols(); int height = X->getRows(); DEBUG_STR << "RGBE: writing image " << width << "x" << height << endl; if( Y->getCols() != width || Y->getRows() != height || Z->getCols() != width || Z->getRows() != height ) { throw pfs::Exception( "RGBE: RGB layers have different size"); } // header information fprintf(file, "#?RADIANCE\n"); // file format specifier fprintf(file, "# PFStools writer to Radiance RGBE format\n"); // if( exposure_isset ) // fprintf(file, "EXPOSURE=%f\n", exposure); // if( gamma_isset ) // fprintf(file, "GAMMA=%f\n", gamma); fprintf(file, "FORMAT=32-bit_rle_rgbe\n"); fprintf(file, "\n"); // image size fprintf(file, "-Y %d +X %d\n", height, width); // image run length encoded Trgbe* scanlineR = new Trgbe[width]; Trgbe* scanlineG = new Trgbe[width]; Trgbe* scanlineB = new Trgbe[width]; Trgbe* scanlineE = new Trgbe[width]; for( int y=0 ; y> 8;; header[3] = width & 0xFF; fwrite(header, sizeof(header), 1, file); // each channel is encoded separately for( int x=0 ; x [...] Recognized file formats and extensions: Radiance RGBE - .pic, .hdr TIFF (incl. LogLuv) - .tiff, .tif PNM, PPM - .ppm, .pnm JPEG - .jpeg, .jpg PNG - .png PFS - .pfs OpenEXR - .exr PFM - .pfm DPX - .dpx GIF - .gif BMP - .bmp EPS - .eps See the man page for more information. EOF exit 1 fi #Arguments used for all images passed to pfsout global_arguments="" if test -n "$1"; then while test "${1:0:1}" = "-"; do #Handle options that require a parameter for par_opt in "--frames" "-f" "--absolute" "-a"; do if test "$1" = $par_opt; then if test -z "$2"; then echo >&2 "Required parameter missing after $par_opt" exit 1; fi global_arguments="$global_arguments $1" shift break; fi done global_arguments="$global_arguments $1" shift done fi while test "$1"; do extension="${1##*.}" file_pattern=$1 # Get --frames and --skip-frames arguments extra_arguments=""; if test -n "$2"; then while test "${2:0:1}" = "-"; do #Handle options that require a parameter for par_opt in "--frames" "-f" "--absolute" "-a"; do if test "$2" = $par_opt; then if test -z "$3"; then echo >&2 "Required parameter missing after $par_opt" exit 1; fi extra_arguments="$extra_arguments $2" shift break; fi done extra_arguments="$extra_arguments $2" shift done fi case "$extension" in ("hdr"|"HDR"|"pic"|"PIC") pfsoutrgbe "$file_pattern" $global_arguments $extra_arguments ;; ("ppm"|"PPM"|"pnm"|"PNM") pfsoutppm "$file_pattern" $global_arguments $extra_arguments ;; ("tif"|"TIF"|"tiff"|"TIFF") if which pfsoutimgmagick >/dev/null; then pfsoutimgmagick "$file_pattern" $global_arguments $extra_arguments else pfsouttiff "$file_pattern" $global_arguments $extra_arguments fi ;; ("exr"|"EXR") pfsoutexr "$file_pattern" $global_arguments $extra_arguments ;; ("pfm"|"PFM") pfsoutpfm "$file_pattern" $global_arguments $extra_arguments ;; ("jpg"|"JPG"|"jpeg"|"JPEG") if which pfsoutimgmagick >/dev/null; then pfsoutimgmagick "$file_pattern" $global_arguments $extra_arguments else pfsoutppm - | pnmtojpeg >$1 fi ;; ("png"|"PNG") if which pfsoutimgmagick >/dev/null; then pfsoutimgmagick "$file_pattern" $global_arguments $extra_arguments else pfsoutppm - | pnmtopng >$1 fi ;; ("dpx"|"DPX"|"gif"|"GIF"|"bmp"|"BMP"|"eps"|"EPS") pfsoutimgmagick "$file_pattern" $global_arguments $extra_arguments ;; ("pfs"|"PFS") cat >$1 ;; (*) echo 1>&2 "Unknown extension: $extension" exit 1 ;; esac shift done pfstools-1.8.5/src/fileformat/exrio.h0000664000175000017500000000344210254027366014547 00000000000000/** * @brief IO operations on OpenEXR file format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: exrio.h,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #ifndef _EXR_IO_H_ #define _EXR_IO_H_ #include #include class OpenEXRReader { Imf::RgbaInputFile* file; /// OpenEXR file object Imath::Box2i dw; /// data window int width, height; public: OpenEXRReader( const char* filename ); ~OpenEXRReader(); int getWidth() const { return width; } int getHeight() const { return height; } void readImage( pfs::Array2D *R, pfs::Array2D *G, pfs::Array2D *B ); }; class OpenEXRWriter { char fileName[1024]; public: OpenEXRWriter( const char* filename ); void writeImage( pfs::Array2D *R, pfs::Array2D *G, pfs::Array2D *B ); }; #endif pfstools-1.8.5/src/fileformat/pfsingdal.cpp0000664000175000017500000001730011012676754015725 00000000000000/** * @brief Read files using GDAL. * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2008 Martin Lambers * * 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 * ---------------------------------------------------------------------- * * @author Martin Lambers, * * $Id: pfsingdal.cpp,v 1.1 2008/05/15 00:03:56 rafm Exp $ */ #include #include #include #include #include #include #include #include #include #define PROG_NAME "pfsingdal" #ifndef SIZE_MAX #define SIZE_MAX ((size_t)-1) #endif class QuietException { }; std::string stringify(double x) { std::ostringstream o; o.precision( DBL_DIG ); o << x; return o.str(); } void printHelp() { std::cerr << PROG_NAME " [--verbose] [--help]" << std::endl << "See man page for more information." << std::endl; } void readFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "hv"; pfs::FrameFileIterator it( argc, argv, "rb", NULL, NULL, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case '?': throw QuietException(); case ':': throw QuietException(); } } GDALAllRegister(); GDALDataset *poDataset; GDALRasterBand *poBand; double adfGeoTransform[6]; size_t nBlockXSize, nBlockYSize, nBands; int bGotMin, bGotMax; double adfMinMax[2]; float *pafScanline; while( true ) { pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) break; // No more frames it.closeFrameFile( ff ); VERBOSE_STR << "reading file '" << ff.fileName << "'" << std::endl; if( !( poDataset = (GDALDataset *) GDALOpen( ff.fileName, GA_ReadOnly ) ) ) { std::cerr << "input does not seem to be in a format supported by GDAL" << std::endl; throw QuietException(); } VERBOSE_STR << "GDAL driver: " << poDataset->GetDriver()->GetDescription() << " / " << poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME ) << std::endl; nBlockXSize = poDataset->GetRasterXSize(); nBlockYSize = poDataset->GetRasterYSize(); nBands = poDataset->GetRasterCount(); VERBOSE_STR << "Data size " << nBlockXSize << "x" << nBlockYSize << "x" << nBands << std::endl; if( poDataset->GetProjectionRef() ) { VERBOSE_STR << "Projection " << poDataset->GetProjectionRef() << std::endl; } if( poDataset->GetGeoTransform( adfGeoTransform ) == CE_None ) { VERBOSE_STR << "Origin = (" << adfGeoTransform[0] << ", " << adfGeoTransform[3] << ")" << std::endl; VERBOSE_STR << "Pixel Size = (" << adfGeoTransform[1] << ", " << adfGeoTransform[5] << ")" << std::endl; } if( nBlockXSize==0 || nBlockYSize==0 || ( SIZE_MAX / nBlockYSize < nBlockXSize ) || ( SIZE_MAX / (nBlockXSize * nBlockYSize ) < 4 ) ) { std::cerr << "input data has invalid size" << std::endl; throw QuietException(); } if( !(pafScanline = (float *) CPLMalloc( sizeof(float) * nBlockXSize ) ) ) { std::cerr << "not enough memory" << std::endl; throw QuietException(); } pfs::Frame *frame = pfsio.createFrame( nBlockXSize, nBlockYSize ); pfs::Channel *C[nBands]; char channel_name[32]; frame->getTags()->setString( "X-GDAL_DRIVER_SHORTNAME", poDataset->GetDriver()->GetDescription() ); frame->getTags()->setString( "X-GDAL_DRIVER_LONGNAME", poDataset->GetDriver()->GetMetadataItem( GDAL_DMD_LONGNAME ) ); frame->getTags()->setString( "X-PROJECTION", poDataset->GetProjectionRef() ); if( poDataset->GetGeoTransform( adfGeoTransform ) == CE_None ) { frame->getTags()->setString( "X-ORIGIN_X", stringify(adfGeoTransform[0]).c_str() ); frame->getTags()->setString( "X-ORIGIN_Y", stringify(adfGeoTransform[3]).c_str() ); frame->getTags()->setString( "X-PIXEL_WIDTH", stringify(adfGeoTransform[1]).c_str() ); frame->getTags()->setString( "X-PIXEL_HEIGHT", stringify(adfGeoTransform[5]).c_str() ); } for ( size_t band = 1; band <= nBands; band++) { size_t nBandXSize, nBandYSize; VERBOSE_STR << "Band " << band << ": " << std::endl; snprintf( channel_name, 32, "X-GDAL%zu", band ); C[band - 1] = frame->createChannel( channel_name ); poBand = poDataset->GetRasterBand( band ); nBandXSize = poBand->GetXSize(); nBandYSize = poBand->GetYSize(); VERBOSE_STR << " " << nBandXSize << "x" << nBandYSize << std::endl; if( nBandXSize != (int)nBlockXSize || nBandYSize != (int)nBlockYSize ) { std::cerr << "data in band " << band << " has different size" << std::endl; throw QuietException(); } VERBOSE_STR << " Type " << GDALGetDataTypeName( poBand->GetRasterDataType() ) << ", " << "Color Interpretation " << GDALGetColorInterpretationName( poBand->GetColorInterpretation() ) << std::endl; adfMinMax[0] = poBand->GetMinimum( &bGotMin ); adfMinMax[1] = poBand->GetMaximum( &bGotMax ); if( ! (bGotMin && bGotMax) ) { GDALComputeRasterMinMax((GDALRasterBandH)poBand, TRUE, adfMinMax); } VERBOSE_STR << " Min " << adfMinMax[0] << ", Max " << adfMinMax[1] << std::endl; C[band - 1]->getTags()->setString( "X-TYPE", GDALGetDataTypeName( poBand->GetRasterDataType() ) ); C[band - 1]->getTags()->setString( "X-COLOR_INTERPRETATION", GDALGetColorInterpretationName( poBand->GetColorInterpretation() ) ); C[band - 1]->getTags()->setString( "X-MIN", stringify(adfMinMax[0]).c_str() ); C[band - 1]->getTags()->setString( "X-MAX", stringify(adfMinMax[1]).c_str() ); for( size_t y = 0; y < nBlockYSize; y++ ) { if( poBand->RasterIO( GF_Read, 0, y, nBlockXSize, 1, pafScanline, nBlockXSize, 1, GDT_Float32, 0, 0) != CE_None ) { std::cerr << "input error" << std::endl; throw QuietException(); } memcpy( C[band - 1]->getRawData() + y * nBlockXSize, pafScanline, nBlockXSize * sizeof(float) ); } } CPLFree( pafScanline ); GDALClose( poDataset ); const char *fileNameTag = strcmp( "-", ff.fileName )==0 ? "stdin" : ff.fileName; frame->getTags()->setString( "FILE_NAME", fileNameTag ); pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { readFrames( argc, argv ); } catch( pfs::Exception ex ) { std::cerr << PROG_NAME << " error: " << ex.getMessage() << std::endl; return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/hdrtiffio.h0000664000175000017500000000516310575467035015410 00000000000000/** * @brief IO operations on High Dynamic Range TIFF file format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: hdrtiffio.h,v 1.3 2007/03/13 09:25:49 gkrawczyk Exp $ */ #ifndef _HDRTIFFIO_H_ #define _HDRTIFFIO_H_ #include #include class HDRTiffReader { TIFF* tif; uint32 width, height; uint16 comp; /// compression type uint16 phot; /// type of photometric data enum {FLOAT, WORD, BYTE, GRAYSCALE16} TypeOfData; uint16 bps; /// bits per sample uint16 nSamples; /// number of channels in tiff file (only 1-3 are used) double stonits; /// scale factor to get nit values bool exponential_mode; /// if true, grayscale data come from LarsIII camera bool relative_values; /// if true, values are linearized (hdr data) bool xyz_colorspace; /// if true, values are in XYZ colorspace char format_string[255]; /// for verbose output public: HDRTiffReader( const char* filename ); ~HDRTiffReader(); int getWidth() const { return width; } int getHeight() const { return height; } void readImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ); void setExponentialMode() { exponential_mode = true; relative_values=true; } const char* getFormatString() { return format_string; } bool isRelative() { return relative_values; } bool isColorspaceXYZ() { return xyz_colorspace; } }; class HDRTiffWriter { FILE *file; public: HDRTiffWriter( FILE *fh ) : file(fh) { } void writeImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ); }; #endif pfstools-1.8.5/src/fileformat/hdrtiffio.cpp0000644000175000017500000003407211652214253015727 00000000000000/** * @brief IO operations on High Dynamic Range TIFF file format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: hdrtiffio.cpp,v 1.5 2011/10/27 08:39:07 rafm Exp $ */ #include #include #include #include #include #include "hdrtiffio.h" int TIFFWriteIFD(FILE* file, unsigned short tag, unsigned short type, unsigned long count, unsigned long value); //--- // HDR TIFF IO classes implementation HDRTiffReader::HDRTiffReader( const char* filename ) { // default values for constants exponential_mode = false; relative_values = false; xyz_colorspace = false; // read header containing width and height from file tif = TIFFOpen(filename, "r"); if( !tif ) throw pfs::Exception("TIFF: could not open file for reading."); //--- image size TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height); if( width*height<=0 ) { TIFFClose(tif); throw pfs::Exception("TIFF: illegal image size"); } DEBUG_STR << "TIFF file \"" << filename << "\" (" << width << "x" << height << ")" << endl; //--- image parameters if(!TIFFGetField(tif, TIFFTAG_COMPRESSION, &comp)) // compression type comp = COMPRESSION_NONE; // type of photometric data if(!TIFFGetFieldDefaulted(tif, TIFFTAG_PHOTOMETRIC, &phot)) throw pfs::Exception("TIFF: unspecified photometric type"); uint16 * extra_sample_types=0; uint16 extra_samples_per_pixel=0; switch(phot) { case PHOTOMETRIC_LOGLUV: DEBUG_STR << "Photometric data: LogLuv" << endl; if (comp != COMPRESSION_SGILOG && comp != COMPRESSION_SGILOG24) { TIFFClose(tif); throw pfs::Exception("TIFF: only support SGILOG compressed LogLuv data"); } TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &nSamples); // set decoder to output in float XYZ TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_FLOAT); xyz_colorspace = true; TypeOfData = FLOAT; strcpy(format_string,"linear LogLuv XYZ"); relative_values=true; break; case PHOTOMETRIC_RGB: DEBUG_STR << "Photometric data: RGB" << endl; // read extra samples (# of alpha channels) if (TIFFGetField( tif, TIFFTAG_EXTRASAMPLES, &extra_samples_per_pixel, &extra_sample_types )!=1) { extra_samples_per_pixel=0; } TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &nSamples); bps = nSamples - extra_samples_per_pixel; if (bps!=3) { TIFFClose(tif); throw pfs::Exception("TIFF: unsupported samples per pixel for RGB"); } if (!TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &bps) || (bps!=8 && bps!=16 && bps!=32)) { TIFFClose(tif); throw pfs::Exception("TIFF: unsupported bits per sample for RGB"); } if( bps==8 ) { TypeOfData = BYTE; DEBUG_STR << "8bit per channel" << endl; strcpy(format_string,"linear 8bit RGB"); relative_values=false; //!! TODO: verify if 8bit is always gamma corrected } else if( bps==16 ) { TypeOfData = WORD; DEBUG_STR << "16bit per channel" << endl; strcpy(format_string,"linear 16bit RGB"); relative_values=true; //!! TODO: verify this case!! } else { TypeOfData = FLOAT; DEBUG_STR << "32bit float per channel" << endl; strcpy(format_string,"linear 32bit float RGB"); relative_values=true; } break; case PHOTOMETRIC_MINISBLACK: // HDR video camera format (grayscale) DEBUG_STR << "Photometric data: MINISBLACK (hdrv camera)" << endl; if (!TIFFGetField(tif, TIFFTAG_SAMPLESPERPIXEL, &bps) || !bps==1) { TIFFClose(tif); throw pfs::Exception("TIFF: Unsupported samples per pixel for " "grayscale image"); } if (!TIFFGetField(tif, TIFFTAG_BITSPERSAMPLE, &bps) || !bps==16) { DEBUG_STR << "Detected bits per sample: " << bps << endl; TIFFClose(tif); throw pfs::Exception("TIFF: unsupported bits per sample for " "grayscale image."); } TypeOfData = GRAYSCALE16; strcpy(format_string,"linear 16bit"); relative_values=true; break; default: DEBUG_STR << "Unsupported photometric type: " << phot << endl; TIFFClose(tif); strcpy(format_string,"unknown"); relative_values=false; throw pfs::Exception("TIFF: unsupported photometric type"); } if (!TIFFGetField(tif, TIFFTAG_STONITS, &stonits)) stonits = 1.; } void HDRTiffReader::readImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ) { //--- scanline buffer with pointers to different data types union { float* fp; uint16* wp; uint8* bp; void* vp; } buf; //--- image length uint32 imagelength; TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imagelength); DEBUG_STR << "Image length: " << imagelength << endl; //--- image scanline size uint32 scanlinesize = TIFFScanlineSize(tif); buf.vp = _TIFFmalloc(scanlinesize); // DEBUG_STR << "Scanline size: " << scanlinesize << endl; //--- read scan lines const int image_width = X->getCols(); for(uint32 row = 0; row < imagelength; row++) { switch(TypeOfData) { case FLOAT: TIFFReadScanline(tif, buf.fp, row); for( int i=0; i < image_width; i++ ) { (*X)(i,row) = buf.fp[i*nSamples]; (*Y)(i,row) = buf.fp[i*nSamples+1]; (*Z)(i,row) = buf.fp[i*nSamples+2]; } break; case WORD: TIFFReadScanline(tif, buf.wp, row); for( int i=0; i> 12; float lum = value*pow2[expo]; (*X)(i,imagelength-row-1) = lum; (*Y)(i,imagelength-row-1) = lum; (*Z)(i,imagelength-row-1) = lum; } } break; } } //--- free buffers and close files _TIFFfree(buf.vp); TIFFClose(tif); } HDRTiffReader::~HDRTiffReader() { } void HDRTiffWriter::writeImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ) { // image size int width = X->getCols(); int height = X->getRows(); // Offset in tiff image unsigned long tiff_offset=0; //--- Tiff header unsigned char head[4]; head[0] = 'I'; // byte order head[1] = 'I'; head[2] = 0x2a; // tiff version head[3] = 0x00; fwrite(head, sizeof(unsigned char), 4, file); tiff_offset+=4; //--- Tiff image data int rows_per_strip = 3; int no_of_strips = ((height+rows_per_strip-1) / rows_per_strip); unsigned long* strip_offsets = new unsigned long[no_of_strips]; unsigned long* strip_byte_counts = new unsigned long[no_of_strips]; //--- first IFD pointer // (67 - ifd values block) unsigned long first_ifd_offs = width*height*3+no_of_strips*4*2+67; fwrite(&first_ifd_offs, sizeof(unsigned long), 1, file); tiff_offset+=4; //-------------------------------------------------------------------- //--- writing image data int strip_len = rows_per_strip*width*3; int bytes_count = 0; //bytes to write int strip_no = 0; // no of strip unsigned char* strip = new unsigned char[strip_len]; for( int y=0 ; y0) ? ( (r<255.0f)?r:255.0f) : 0; g = (g>0) ? ( (g<255.0f)?g:255.0f) : 0; b = (b>0) ? ( (b<255.0f)?b:255.0f) : 0; strip[bytes_count++] = (unsigned char) r; strip[bytes_count++] = (unsigned char) g; strip[bytes_count++] = (unsigned char) b; } if( y%rows_per_strip == rows_per_strip-1 ) { // write strip strip_offsets[strip_no] = tiff_offset; strip_byte_counts[strip_no] = bytes_count; fwrite(strip, sizeof(unsigned char), bytes_count, file); tiff_offset+=bytes_count; strip_no++; bytes_count=0; } } // write remaining strip if( bytes_count>0 ) { // write strip strip_offsets[strip_no] = tiff_offset; strip_byte_counts[strip_no] = bytes_count; fwrite(strip, sizeof(unsigned char), bytes_count, file); tiff_offset+=bytes_count; strip_no++; bytes_count=0; } delete[] strip; //-------------------------------------------------------------------- //--- Tiff data unsigned char software[] = "PFSTOOLS tiff io operations"; unsigned long software_offs = tiff_offset; int software_len = 37; fwrite(software, sizeof(unsigned char), software_len, file); tiff_offset+=37; unsigned short bits_per_sample[3] = {8,8,8}; unsigned long bits_per_sample_offs=tiff_offset; fwrite(bits_per_sample, sizeof(unsigned short), 3, file); tiff_offset+=3*2; unsigned long strip_byte_counts_offs = tiff_offset; fwrite(strip_byte_counts, sizeof(unsigned long), no_of_strips, file); tiff_offset+=no_of_strips*4; unsigned long strip_offsets_offs = tiff_offset; fwrite(strip_offsets, sizeof(unsigned long), no_of_strips, file); tiff_offset+=no_of_strips*4; unsigned long xresolution[] = { 72, 1 }; // cecha i mantysa unsigned long xresolution_offs = tiff_offset; fwrite(xresolution, sizeof(unsigned long), 2, file); tiff_offset+=2*4; unsigned long yresolution[] = { 72, 1 }; // cecha i mantysa unsigned long yresolution_offs = tiff_offset; fwrite(yresolution, sizeof(unsigned long), 2, file); tiff_offset+=2*4; //-- not used tiff data delete[] strip_offsets; delete[] strip_byte_counts; //--- check if offset is ok assert( first_ifd_offs==tiff_offset ); //--- image file directory unsigned short ifd_count=15; // ifd entry count fwrite(&ifd_count, sizeof(unsigned short), 1, file); tiff_offset+=2; // NewSubfileType: 0 - full resolution image TIFFWriteIFD(file, 0x00fe, 4, 1, 0); // ImageWidth TIFFWriteIFD(file, 0x0100, 4, 1, width); // ImageLength (Height) TIFFWriteIFD(file, 0x0101, 4, 1, height); // BitsPerSample TIFFWriteIFD(file, 0x0102, 3, 3, bits_per_sample_offs); // Compression: 1 - no compression TIFFWriteIFD(file, 0x0103, 3, 1, 1); // PhotometricInterpretation: 2 - RGB image TIFFWriteIFD(file, 0x0106, 3, 1, 2); // StripOffsets TIFFWriteIFD(file, 0x0111, 4, no_of_strips, strip_offsets_offs); // SamplesPerPixel: 3 TIFFWriteIFD(file, 0x0115, 3, 1, 3); // RowsPerStrip TIFFWriteIFD(file, 0x0116, 4, 1, rows_per_strip); // StripByteCounts TIFFWriteIFD(file, 0x0117, 4, no_of_strips, strip_byte_counts_offs); // XResolution TIFFWriteIFD(file, 0x011a, 5, 1, xresolution_offs); // YResolution TIFFWriteIFD(file, 0x011b, 5, 1, yresolution_offs); // PlanarConfiguration: 1 - single plannar TIFFWriteIFD(file, 0x011c, 3, 1, 1); // ResolutionUnit: 2 - cm TIFFWriteIFD(file, 0x0128, 3, 1, 2); // Software TIFFWriteIFD(file, 0x0131, 2, software_len, software_offs); tiff_offset+=ifd_count*12; //--- second and the last IFD pointer unsigned long last_ifd_offs = 0; fwrite(&last_ifd_offs, sizeof(unsigned long), 1, file); tiff_offset+=4; } int TIFFWriteIFD(FILE* file, unsigned short tag, unsigned short type, unsigned long count, unsigned long value) { // image file directory flag unsigned char ifd[12]; (unsigned short&)ifd[0] = tag; (unsigned short&)ifd[2] = type; (unsigned long&)ifd[4] = count; (unsigned long&)ifd[8] = 0; if( count>1 ) (unsigned long&)ifd[8] = value; else { switch( type ) { case 1: // byte (unsigned char&)ifd[8] = (unsigned char)value; break; case 3: // short (unsigned short&)ifd[8] = (unsigned short)value; break; case 5: // rational case 4: // long case 2: // ascii (unsigned long&)ifd[8] = value; break; }; } fwrite(ifd, sizeof(unsigned char), 12, file); return 0; } pfstools-1.8.5/src/fileformat/pfsout0000644000175000017500000000764711652214411014514 00000000000000#!/bin/bash ############################################################ # Read pfs frames from stdin and write them in the # format determined by the extension of the file name ############################################################ if test -z "$1" || test "$1" = "--help"; then cat < [...] Recognized file formats and extensions: Radiance RGBE - .pic, .hdr TIFF (incl. LogLuv) - .tiff, .tif PNM, PPM - .ppm, .pnm JPEG - .jpeg, .jpg PNG - .png PFS - .pfs OpenEXR - .exr PFM - .pfm DPX - .dpx GIF - .gif BMP - .bmp EPS - .eps See the man page for more information. EOF exit 1 fi #Arguments used for all images passed to pfsout global_arguments="" if test -n "$1"; then while test "${1:0:1}" = "-"; do #Handle options that require a parameter for par_opt in "--frames" "-f" "--absolute" "-a"; do if test "$1" = $par_opt; then if test -z "$2"; then echo >&2 "Required parameter missing after $par_opt" exit 1; fi global_arguments="$global_arguments $1" shift break; fi done global_arguments="$global_arguments $1" shift done fi while test "$1"; do extension="${1##*.}" file_pattern=$1 # Get --frames and --skip-frames arguments extra_arguments=""; if test -n "$2"; then while test "${2:0:1}" = "-"; do #Handle options that require a parameter for par_opt in "--frames" "-f" "--absolute" "-a"; do if test "$2" = $par_opt; then if test -z "$3"; then echo >&2 "Required parameter missing after $par_opt" exit 1; fi extra_arguments="$extra_arguments $2" shift break; fi done extra_arguments="$extra_arguments $2" shift done fi case "$extension" in ("hdr"|"HDR"|"pic"|"PIC") pfsoutrgbe "$file_pattern" $global_arguments $extra_arguments ;; ("ppm"|"PPM"|"pnm"|"PNM") pfsoutppm "$file_pattern" $global_arguments $extra_arguments ;; ("tif"|"TIF"|"tiff"|"TIFF") if which pfsoutimgmagick >/dev/null; then pfsoutimgmagick "$file_pattern" $global_arguments $extra_arguments else pfsouttiff "$file_pattern" $global_arguments $extra_arguments fi ;; ("exr"|"EXR") pfsoutexr "$file_pattern" $global_arguments $extra_arguments ;; ("pfm"|"PFM") pfsoutpfm "$file_pattern" $global_arguments $extra_arguments ;; ("jpg"|"JPG"|"jpeg"|"JPEG") if which pfsoutimgmagick >/dev/null; then pfsoutimgmagick "$file_pattern" $global_arguments $extra_arguments else pfsoutppm - | pnmtojpeg >$1 fi ;; ("png"|"PNG") if which pfsoutimgmagick >/dev/null; then pfsoutimgmagick "$file_pattern" $global_arguments $extra_arguments else pfsoutppm - | pnmtopng >$1 fi ;; ("dpx"|"DPX"|"gif"|"GIF"|"bmp"|"BMP"|"eps"|"EPS") pfsoutimgmagick "$file_pattern" $global_arguments $extra_arguments ;; ("pfs"|"PFS") cat >$1 ;; (*) echo 1>&2 "Unknown extension: $extension" exit 1 ;; esac shift done pfstools-1.8.5/src/fileformat/pfsinjpeghdr.cpp0000664000175000017500000001173310332620703016430 00000000000000/** * @brief Read files in JPEG-HDR format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003-2005 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Jan Otop, * * $Id: pfsinjpeghdr.cpp,v 1.3 2005/11/04 08:54:27 rafm Exp $ */ #include #include #include #include #include #include #include #define PROG_NAME "pfsinhdrjpeg" extern "C" { #include } /* #include "jhcomp.c" #include "jhdecomp.c" #include "jhresamp.c" #include "jhtonemap.c"*/ class QuietException { }; void printHelp() { fprintf( stderr, PROG_NAME " [--verbose] [--help]\n" "See man page for more information.\n" ); } void readFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; JHSAMPLE *hdrscan; JSAMPLE *ldrscan; jpeghdr_decompress_struct jhinf; struct jpeg_error_mgr jerr; bool verbose = false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "linear", no_argument, NULL, 'l' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = ""; pfs::FrameFileIterator it( argc, argv, "rb", NULL, stdin, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'l': std::cerr << PROG_NAME << " warning: linearize option ignored for an HDR input!" << std::endl; break; case '?': throw QuietException(); case ':': throw QuietException(); } } while( true ) { pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) break; // No more frames jhinf.cinfo.err = jpeg_std_error(&jerr); // Reassign error handling functions as desired jpeghdr_create_decompress(&jhinf); jpeg_stdio_src(&jhinf.cinfo, ff.fh); VERBOSE_STR << "reading file '" << ff.fileName << "'" << std::endl; pfs::Frame *frame; switch (jpeghdr_read_header(&jhinf)) { case JPEG_HEADER_HDR: // HDR image jpeghdr_start_decompress(&jhinf); frame = pfsio.createFrame( jhinf.cinfo.output_width, jhinf.cinfo.output_height ); hdrscan = (JHSAMPLE *)malloc(jhinf.cinfo.output_width * jhinf.cinfo.output_height * sizeof(JHSAMPLE)*3); // Important: test jhinf.output_scanline, not jhinf.cinfo int index ; index = 0; while (jhinf.output_scanline < jhinf.cinfo.output_height) { jpeghdr_read_scanline(&jhinf, (JHSAMPLE *)hdrscan + index ); index += jhinf.cinfo.output_width * 3; } pfs::Channel *X, *Y, *Z; frame->createXYZChannels( X, Y, Z ); //printf("bbb"); //exit(0); for(int i=0;igetRawData())[i] = hdrscan[3*i]; (Y->getRawData())[i] = hdrscan[3*i + 1]; (Z->getRawData())[i] = hdrscan[3*i + 2]; } pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); free((void *)hdrscan); break; case JPEG_HEADER_OK: // LDR image case JPEG_SUSPENDED: case JPEG_HEADER_TABLES_ONLY: default: throw pfs::Exception( "Can handle only JPEG-HDR images" ); break; } it.closeFrameFile( ff ); frame->getTags()->setString("LUMINANCE", "RELATIVE"); const char *fileNameTag = strcmp( "-", ff.fileName )==0 ? "stdin" : ff.fileName; frame->getTags()->setString( "FILE_NAME", fileNameTag ); jpeghdr_destroy_decompress(&jhinf); pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { readFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/rgbeio.h0000664000175000017500000000333410527317500014663 00000000000000/** * @brief IO operations on Radiance's RGBE file format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: rgbeio.h,v 1.2 2006/11/17 11:38:40 gkrawczyk Exp $ */ #ifndef _RGBEIO_H_ #define _RGBEIO_H_ #include #include class RGBEReader { FILE *fh; int width, height; float exposure; public: RGBEReader( FILE *fh ); ~RGBEReader(); int getWidth() const { return width; } int getHeight() const { return height; } void readImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ); }; class RGBEWriter { FILE *fh; public: RGBEWriter( FILE *fh ) : fh(fh) { } void writeImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ); }; #endif pfstools-1.8.5/src/fileformat/pfsoutpfm.cpp0000664000175000017500000001324310254027366015777 00000000000000/** * @brief Write files in PFM format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * The format description was based on: * http://netpbm.sourceforge.net/doc/pfm.html * * however the order of the lines in pfm file seems to be reversed - * from bottom to top * * $Id: pfsoutpfm.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include #include #include #define PROG_NAME "pfsoutpfm" #define PFMEOL "\x0a" class QuietException { }; #define min(x,y) ( (x)<(y) ? (x) : (y) ) void printHelp() { fprintf( stderr, PROG_NAME " [--verbose] [--help]\n" "See man page for more information.\n" ); } void writePFMFileColor( FILE *fh, int width, int height, float *R, float *G, float *B ) { // Write header fprintf( fh, "PF" PFMEOL "%d %d" PFMEOL "-1" PFMEOL, width, height ); const int lineSize = width*3; float *line = new float[lineSize]; for( int l = height-1; l >= 0; l-- ) { for( int x = 0; x < width; x++ ) { const int lineOffset = l*width; line[x*3+0] = R[lineOffset+x]; line[x*3+1] = G[lineOffset+x]; line[x*3+2] = B[lineOffset+x]; } int written = fwrite( line, sizeof( float ), lineSize, fh ); if( written != lineSize ) throw new pfs::Exception( "Unable to write data" ); } delete[] line; } void writePFMFileGrayscale( FILE *fh, int width, int height, float *Y ) { // Write header fprintf( fh, "Pf" PFMEOL "%d %d" PFMEOL "-1" PFMEOL, width, height ); const int lineSize = width; float *line = new float[lineSize]; for( int l = height-1; l >= 0; l-- ) { for( int x = 0; x < width; x++ ) { const int lineOffset = l*width; line[x] = Y[lineOffset+x]; } int written = fwrite( line, sizeof( float ), lineSize, fh ); if( written != lineSize ) throw new pfs::Exception( "Unable to write data" ); } delete[] line; } void writeFrames( int argc, char* argv[] ) { bool verbose = false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "linear", no_argument, NULL, 'l' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "hlv"; pfs::FrameFileIterator it( argc, argv, "wb", NULL, stdout, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'l': std::cerr << PROG_NAME << " warning: linearize option ignored for an HDR output!" << std::endl; break; case '?': throw QuietException(); case ':': throw QuietException(); } } pfs::DOMIO pfsio; bool firstFrame = true; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) { break; // No more frames } const char* luminanceTag = frame->getTags()->getString("LUMINANCE"); if( luminanceTag!=NULL && 0==strcmp(luminanceTag,"DISPLAY") ) { static bool show_once = false; if( !show_once ) { std::cerr << PROG_NAME << " warning: " << "display profiled content written to an HDR output" << std::endl; show_once=true; } } pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) { pfsio.freeFrame( frame ); break; // No more frames } VERBOSE_STR << "writing file (HDR) '" << ff.fileName << "'" << std::endl; pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X != NULL ) { // Has color pfs::Channel *R= NULL, *G = NULL, *B = NULL; // for clarity of the code R = X; G = Y; B = Z; pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, R, G, B ); writePFMFileColor( ff.fh, frame->getWidth(), frame->getHeight(), R->getRawData(), G->getRawData(), B->getRawData() ); } else { Y = frame->getChannel( "Y" ); if( Y == NULL ) throw pfs::Exception( "Can not find color or grayscale channels in the pfs stream" ); writePFMFileGrayscale( ff.fh, frame->getWidth(), frame->getHeight(), Y->getRawData() ); } it.closeFrameFile( ff ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { writeFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsoutppm.10000644000175000017500000000564311652213351015364 00000000000000.TH "pfsoutppm" 1 .SH NAME pfsoutppm, pfsouttiff, pfsoutrgbe, pfsoutexr \- Write images or frames in one of the several formats .SH SYNOPSIS .B pfsoutppm ( [--srgb] [--frames ]) [...] .B pfsouttiff ( [--srgb] [--frames ]) [...] .B pfsoutrgbe ( [--frames ]) [...] .B pfsoutexr ( [--frames ]) [...] .SH DESCRIPTION This command can be used to write pfs frames piped to standard input in one of the several recognized formats. See the manual page of pfsinppm to get a list of available formats. .PP To write images to standard output use a single dash '-' instead of filename. .PP Each file name can contain a \%%d pattern, which is substituted with frame numbers. The pattern has the same syntax as C .I printf command. For example, you can use \%%04d to make the frame number four digit with proceedings zeros. You can select the frames using the following options (the options must be always given after the file name): .TP .B \--frames Range is given in mathlab / octave format: .B "startframe:step:endframe" Frame numbers start with .B "startframe" (default 0), are increased by .B "step" (default 1) and stop at .B "endframe" You can skip one of those values, for example .I "1:100" for frames 1,2,...,100 and .I 0:2: for frame 0,2,4,... up to the last file that exists. .TP .B --srgb, -s Apply the sRGB non-linearity (approximately 2.2 gamma) before writing a file. This can be used instead of using \fIpfsgamma -g 2.2\fR to store the result of some tone-mapping operators. The option will compress contrast to make sure that tone values are properly shown on a display. It should be only used with linearized (not gamma corrected) images that are normalized to the 0-1 range. .TP \fB--bit-depth\fR , \fB-b Enforce bit-depth (per color channel). The allowed values are from 8 to 32. If not specified, the bit depth from the pfs stream ('BITDEPTH' tag) will be used instead. If the 'BITDEPTH' tag is missing, the ImageMagick default value will be used (usually 16). The bit depth of actually stored file may be lower of that specified, if the file format does not support higher bit depths. .SH EXAMPLES .TP pfsin memorial.tiff | pfsoutrgbe memorial.hdr Converts from one HDR format to another .TP pfsin test.jpg | pfsout test.png Convert from one image format to another. .TP pfsin --linear test.jpg | pfsout --srgb test.png The same as above, but apply inverse gamma correction after reading an image (--linear) and then apply gamma correction before writing an image (--srgb). .SH "SEE ALSO" .BR pfsout (1) .BR pfsinppm (1) .SH BUGS Writing TIFF files with pfsouttiff seems to be broken, but pfsoutimgmagick can be used instead. pfsout will attempt to use pfsoutimgmagick and fall back to pfsouttiff if pfstools were not compiled with ImageMagick. Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools pfstools-1.8.5/src/fileformat/pfsoutimgmagick.10000664000175000017500000000654611077723455016541 00000000000000.TH "pfsoutimgmagick" 1 .SH NAME pfsoutimgmagick \- Write images or frames using Image Magick library .SH SYNOPSIS .B pfsoutimgmagick [--linear] [--quality ] [--bit-depth] [--frames ]) [...] .SH DESCRIPTION This command can write images or frames in the multitude of image formats supported by the ImageMagick library. This includes but is not limited to: BMP, JPG, PNG, GIF, EPS, TIFF, DPX. See the manual page of ImageMagick for the full list of available formats. .PP \fBpfsoutimgmagick\fR reads images or frames in \fIpfs\fR format from the Standard Input and writes them under the specified file name(s). .PP The input of \fBpfsinimgmagick\fR must be within 0-1 range. If \fILUMINANCE\fR tag set is set to \fIRELATIVE\fR or \fIABSOLUTE\fR, the linear values will be gamma corrected, assuming sRGB color space. Use \fI--linear\fR switch to disable gamma correction. .PP The images are stored using the bit-depth for which the ImageMagick library was compiled (default is 16 bit). Note that some formats (for example JPEG) do not support encoding more than 8 bits per color channel. To use higher bit-depths, store images in the PNG format. .PP This command stores 'ALPHA' channel if it is present in the pfs stream. .PP Each file name can contain a \%%d pattern, which is substituted with frame numbers. The pattern has the same syntax as C \fIprintf\fR command. For example, you can use \%%04d to make the frame number four digit with proceedings zeros. You can select the frames using the following options (the options must be always given after the file name): .TP .B \--frames Range is given in mathlab / octave format: .B "startframe:step:endframe" Frame numbers start with .B "startframe" (default 0), are increased by .B "step" (default 1) and stop at .B "endframe" You can skip one of those values, for example .I "1:100" for frames 1,2,...,100 and .I 0:2: for frame 0,2,4,... up to the last file that exists. .TP .B --srgb, -s Apply the sRGB non-linearity (approximately 2.2 gamma) before writing a file. This can be used instead of using \fIpfsgamma -g 2.2\fR to store the result of some tone-mapping operators. The option will compress contrast to make sure that tone values are properly shown on a display. It should be only used with linearized (not gamma corrected) images that are normalized to the 0-1 range. .TP \fB--quality\fR , \fB-q\fR Set JPEG/PNG compression level from 1 to 100. Default 75. .TP \fB--bit-depth\fR , \fB-b Enforce bit-depth (per color channel). The allowed values are from 8 to 32. If not specified, the bit depth from the pfs stream ('BITDEPTH' tag) will be used instead. If the 'BITDEPTH' tag is missing, the ImageMagick default value will be used (usually 16). The bit depth of actually stored file may be lower of that specified, if the file format does not support higher bit depths. .SH EXAMPLES .TP pfsin test.jpg | pfsout test.png Convert from one image format to another. .TP pfsin --linear test.jpg | pfsout --srgb test.png The same as above, but apply inverse gamma correction after reading an image (--linear) and then apply gamma correction before writing an image (--srgb). .SH BUGS pfsoutimgmagick can not write frames to the standard output. .PP Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools .SH "SEE ALSO" .BR pfsout (1) .BR ImageMagick (1) pfstools-1.8.5/src/fileformat/pfsintiff.10000664000175000017500000000450611071466566015333 00000000000000.TH "pfsintiff" 1 .SH NAME pfsintiff \- Load images or frames in several variants of TIFF format (both LDR and HDR) .SH SYNOPSIS .B pfsintiff ( [--linear] [--frames ] [--skip-missing]) [...] .SH DESCRIPTION .I pfsintiff command loads images in TIFF format and writes \fIpfs\fR stream to the Standard Output. The \fIpfs\fR stream is usually piped to another program for further processing. To detect the format automatically based on the extension, use \fIpfsin\fR command. .PP Both the standard LDR tiff and extended HDR (logLuv encoding http://www.anyhere.com/gward/pixformat/tiffluv.html); Note that both LDR and HDR tiff files provide photometric data (ie linearly related to luminance). The 'LUMINANCE' tag is set to 'RELATIVE', also the '--linear' switch is ignored. .PP To read images from standard input use a single dash '-' instead of filename. The images are read until EOF is reached. .PP Each file can contain a \%%d pattern, which is substituted with frame numbers. The pattern has the same syntax as C .I printf command. For example, you can use \%%04d to make the frame number four digit with proceedings zeros. You can select the frames using the following options (the options must be always given after the file name): .TP .B \--frames Range is given in mathlab / octave format: .B "startframe:step:endframe" Frame numbers start with .B "startframe" (default 0), are increased by .B "step" (default 1) and stop at .B "endframe" You can skip one of those values, for example .I "1:100" for frames 1,2,...,100 and .I 0:2: for frame 0,2,4,... up to the last file that exists. .TP .B \--skip-missing Skip up to ten frames in a row if corresponding files are missing. Otherwise the program stops reading sequence at the first file that does not exists. This switch does not apply to the first frame in a sequence. This switch can be useful if there is a rendered animation where some of the frame has not been generated. .TP .B \--linear Ignored for compatibility with \fIpfsinppm\fR. .SH EXAMPLES .TP pfsintiff frame\%%04d.tif \--frames 0:10 | pfsview Read frames from files frame0000.tif, frame0001.tif, ..., frame0010.tif and show them using pfsview. .SH BUGS Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools .SH "SEE ALSO" .BR pfsin (1), .BR pfsout (1) pfstools-1.8.5/src/fileformat/pfsoutppm.cpp0000664000175000017500000001214011202601266015773 00000000000000/** * @file * @brief Writing ppm frames * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsoutppm.cpp,v 1.5 2009/05/13 17:26:14 rafm Exp $ */ #include #include #include #include #include #include "ppmio.h" #define PROG_NAME "pfsoutppm" class QuietException { }; void printHelp() { std::cerr << PROG_NAME " [--linear] [--verbose] [--help]" << std::endl << "See man page for more information." << std::endl; } void writeFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; bool opt_srgb=false; int opt_bit_depth = -1; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "srgb", no_argument, NULL, 's' }, { "bit-depth", required_argument, NULL, 'b' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "shvb:"; pfs::FrameFileIterator it( argc, argv, "wb", NULL, stdout, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'b': opt_bit_depth = strtol( optarg, NULL, 10 ); break; case 's': opt_srgb = true; break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( opt_bit_depth!=-1 && (opt_bit_depth < 8 || opt_bit_depth > 32) ) throw pfs::Exception( "'bit-depth' argument must be within 8-32 range" ); while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) { break; } pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) { pfsio.freeFrame( frame ); break; // No more frames } int bitdepth = 8; if( opt_bit_depth != -1 ) bitdepth = opt_bit_depth; else { const char* bitDepthTag = frame->getTags()->getString("BITDEPTH"); if( bitDepthTag!=NULL ) { bitdepth=strtol( bitDepthTag, NULL, 10 ); if( bitdepth < 8 ) bitdepth = 8; else if( bitdepth > 16 ) bitdepth = 16; } } PPMWriter writer( PROG_NAME, ff.fh, bitdepth ); pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X == NULL ) // No color { Y = frame->getChannel( "Y" ); if( Y == NULL ) // No luminance throw pfs::Exception( "Missing X, Y, Z channels in the PFS stream" ); // Grey levels X = frame->createChannel( "X" ); Z = frame->createChannel( "Z" ); pfs::transformColorSpace( pfs::CS_RGB, Y, Y, Y, pfs::CS_XYZ, X, Y, Z ); } const char* luminanceTag = frame->getTags()->getString("LUMINANCE"); if( luminanceTag!=NULL && strcmp(luminanceTag,"ABSOLUTE")==0 ) std::cerr << PROG_NAME << " warning: This file format cannot store absolute luminance values\n"; if( opt_srgb ) { if( luminanceTag!=NULL && strcmp(luminanceTag,"DISPLAY")==0 ) std::cerr << PROG_NAME << " warning: This image seems to be display referred thus there is no need for applying the sRGB non-linearity\n"; pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_SRGB, X, Y, Z ); VERBOSE_STR << "writing file (sRGB corrected) '" << ff.fileName << "'" << std::endl; } else { pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, X, Y, Z ); VERBOSE_STR << "writing file (linear) '" << ff.fileName << "'" << std::endl; } writer.writeImage( X, Y, Z ); pfsio.freeFrame( frame ); it.closeFrameFile( ff ); } } int main( int argc, char* argv[] ) { try { writeFrames( argc, argv ); } catch( pfs::Exception ex ) { std::cerr << PROG_NAME << " error: " << ex.getMessage() << std::endl; return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsout.10000664000175000017500000000310311071466566014653 00000000000000.TH "pfsout" 1 .SH NAME pfsout \- Read pfs frames from stdin and write them in the format determined by the extension of the file name .SH SYNOPSIS .B pfsout pfsout [...] .SH DESCRIPTION This command can be used to write pfs frames piped to standard input in one of the several recognized formats. The proper format is determined by the extension of the give file name. To get a list of recognized formats and extensions, execute: pfsin --help This command is a front-end for pfsout* programs for writing images: pfsoutrgbe, pfsoutexr, etc. Based on the file extension, appropriate program is executed. If two different file format are given as parameters, two different program for writing images are executed. Additional options starting with dash '-' can be passed to pfsout* programs. The following rules apply for passing the options: the options given before any image file name (or %d pattern) are passed to all pfsout* programs. Options given after image file name are only passed to the program executed for that file(s). Note also that all option that take an argument (except \fB--frames\fR) must given in the form \fI--option=value\fR, that is without a space between an option and its argument. .SH EXAMPLES .TP pfsin memorial.tiff | pfsout memorial.hdr Converts from one HDR format to another .SH "SEE ALSO" .BR pfsin (1) .SH BUGS This command currently does not handle multiple frames given with a \%%d pattern in case of LDR formats: JPEG, PNG, PNM. Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools pfstools-1.8.5/src/fileformat/ppmio.cpp0000664000175000017500000000666111206570201015073 00000000000000/** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: ppmio.cpp,v 1.5 2009/05/25 19:24:49 rafm Exp $ */ #include "ppmio.h" extern "C" { #include } #include #include struct PPMData { pixval maxPV; int formatP; }; static inline float clamp( const float v, const float minV, const float maxV ) { if( v < minV ) return minV; if( v > maxV ) return maxV; return v; } PPMReader::PPMReader( const char *program_name, FILE *fh ) : fh(fh) { pm_init(program_name, 0); data = new PPMData; ppm_readppminit( fh, &width, &height, &data->maxPV, &data->formatP ); } bool PPMReader::readImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ) { pixel *ppmRow; ppmRow = ppm_allocrow( width ); assert( ppmRow != NULL ); float normalization_factor = 1.f / (float)data->maxPV; for( int y = 0; y < height; y++ ) { // For each row of the image ppm_readppmrow( fh, ppmRow, width, data->maxPV, data->formatP ); for( int x = 0; x < width; x++ ) { (*X)(x,y) = (float)PPM_GETR(ppmRow[x]) * normalization_factor; (*Y)(x,y) = (float)PPM_GETG(ppmRow[x]) * normalization_factor; (*Z)(x,y) = (float)PPM_GETB(ppmRow[x]) * normalization_factor; } } ppm_freerow( ppmRow ); int eofP; ppm_nextimage( fh, &eofP); return eofP!=0; } int PPMReader::getBitDepth() { return (int)ceil( log2( (float)data->maxPV ) ); } PPMReader::~PPMReader() { delete data; } PPMWriter::PPMWriter( const char *program_name, FILE *fh, int bit_depth ) : fh(fh), bit_depth( bit_depth ) { pm_init(program_name, 0); } void PPMWriter::writeImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ) { pixel *ppmRow; int width = X->getCols(); int height = X->getRows(); ppmRow = ppm_allocrow( width ); assert( ppmRow != NULL ); const int max_val = (1<...] .SH DESCRIPTION This command can load images or frames in the multitude of data formats supported by GDAL (Geospatial Data Abstraction Library). See \fIhttp://www.gdal.org/formats_list.html\fR for a list of supported formats. .PP \fBpfsingdal\fR reads images or frames from files and writes \fIpfs\fR stream to the Standard Output. The \fIpfs\fR stream is usually piped to another program for further processing. .PP The output of \fBpfsingdal\fR is the closest possible match of the input data. .SH EXAMPLES .TP pfsingdal sardata.cosar | pfsview .SH NOTES pfsingdal can not read from pipes, due to the design of GDAL. .PP Please report bugs and comments to Martin Lambers . .SH "SEE ALSO" .BR pfsin (1), .BR pfsout (1) pfstools-1.8.5/src/fileformat/pfsinpfm.10000664000175000017500000000224711071466566015165 00000000000000.TH "pfsinpfm" 1 .SH NAME pfsinpfm \- Load images or frames in PFM format .SH SYNOPSIS .B pfsinpfm ( [--frames ] [--skip-missing]) [...] .SH DESCRIPTION Use this command to read frames in PFM format. PFM format is used for HDR Shop plug-ins and is also supported by some recent versions of NetPBM package (pamtopfm and pfmtopam commands). The frames are converted to pfs stream and send to the Standard Output. This command can handle both color and gray-scale images. Details on the format of the pattern file names, which are used for reading multiple frames, can be found in the manual page of pfsinppm. To automatically recognize a file format from the extension, use \fIpfsin\fR command instead. .SH EXAMPLES .TP pfsin memorial.pfm | pfsout memorial.hdr Converts from one HDR format to another .SH BUGS pfsinpfm does not handle images that store floating point numbers using big-endian format. pfsoutpfm may also read floating point numbers incorrectly on big-endian machines. Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools .SH "SEE ALSO" .BR pfsin (1) .BR pfsinppm (1) .BR pfsoutpfm (1) pfstools-1.8.5/src/fileformat/pfsinmulti0000644000175000017500000000460711652214411015357 00000000000000#!/bin/bash ############################################################ # Read several streams of frames and write pfs streams to # named pipes. ############################################################ if test -z "$1" || test "$1" = "--help"; then cat < [...] -- @1 [@2 [..]] See the man page for more information. EOF exit 1 fi all_named_pipes="" do_break="0" while test "$1"; do if test "${1:0:1}" = "-"; then global_arguments="$global_arguments $1" shift continue fi file_pattern="$1" # Get --frames and --skip-frames arguments extra_arguments=""; if test -n "$2"; then if test "$2" = "--"; then shift do_break="1" else while test "${2:0:1}" = "-"; do if test "$2" = "--frames"; then if test -z "$3"; then echo >&2 "Required argument missing after --frames" exit 1; fi extra_arguments="$extra_arguments $2 $3" shift else extra_arguments="$extra_arguments $2" fi shift done fi fi named_pipe=`mktemp` rm -f $named_pipe mkfifo $named_pipe pfsin $global_arguments "$file_pattern" $extra_arguments >$named_pipe & all_named_pipes="$all_named_pipes $named_pipe" shift if test "$do_break" = "1"; then break fi done command=$* new_command=`echo -e "FILES=${all_named_pipes}\nCMD=${command}" | awk '/^FILES/ { for( i=2; i <= NF; i++ ) FILE[i-1]=$i;} /^CMD/ { gsub( "CMD=", "" ); for( i in FILE ) { PAT="@" i; subsc=gsub( PAT, FILE[i] ); if( subsc<1 ) { print( "ERROR" ); exit( 1 );} } print $0;}'` if test "$new_command" = "ERROR"; then echo "pfsinmulti error: You must specify as many @1, @2, .., @n arguments in the command string as there are pfs streams" 1>&2 #remove named pipes cat $all_named_pipes >/dev/null rm -f $all_named_pipes exit 1 fi if ! ${new_command}; then echo "pfsinmulti error: command returned error" 1>&2 # cat $all_named_pipes >/dev/null rm -f $all_named_pipes exit 1 fi rm -f $all_named_pipes pfstools-1.8.5/src/fileformat/pfsindcraw.10000664000175000017500000000235510406521230015460 00000000000000.TH "pfsindcraw" 1 .SH NAME pfsindcraw \- Read an image in a camera RAW file format supported by DCRAW and write pfs stream to the standard output .SH SYNOPSIS .B pfsindcraw [...] .SH DESCRIPTION This command can be used to read images in a camera RAW file format supported by DCRAW and write pfs stream to the standard output as if read from 16bit ppm file (no gamma correction, white balance from camera if available). In principle such data should conform to the definition of High Dynamic Range contents used in the pfstools package. A raw image may in some cases require clamping to remove zero values, see examples. At the moment this is a stub with a basic functionality. So far, it was tested with the following raw file formats: Canon 350D (*.cr2) .SH EXAMPLES .TP pfsindcraw img_0070.cr2 | pfsview View a full dynamic range of a raw image from Canon 350D camera. .TP pfsindcraw img_0070.cr2 | pfsclamp --rgb | pfstmo_drago03 | pfsout img.jpg Tone map a raw image and save it as JPEG. Clamping is used to remove zero values, which otherwise result in NaN values after tone mapping. .SH "SEE ALSO" .BR pfsout (1) .BR pfsinppm (1) .SH BUGS Please report bugs and comments to Grzegorz Krawczyk . pfstools-1.8.5/src/fileformat/pfsinmulti.10000664000175000017500000000311210401346270015506 00000000000000.TH "pfsinmulti" 1 .SH NAME pfsinmulti \- read several streams of frames and write pfs streams to named pipes .SH SYNOPSIS .B pfsinmulti pfsinmulti [--frames f:s:t] [--skip-frames] [...] -- command @1 @2 [@3 ...] .SH DESCRIPTION Use this command to read several animation sequences and write them to pfsstreams. This command is useful with those pfs programs, which take several pfs streams as arguments. For example, the following command can be used to combine two animations so that there are stitched together: pfsinmulti anim_a-%04d.hdr anim_b-%04d.hdr -- pfscat @1 @2 arguments @1 and @2 are replaced with named pipes for anim_a-%04d.hdr and anim_b-%04d.hdr frames respectively. \fIcommand\fR argument is obligatory and it must be preceded with '--'. There should be as many @1, @2, .., @n arguments as there are animation sequences given as input. Arguments \fB--frames\fR, \fB--skip-frames\fR and other options are handled the same way as in \fIpfsin\fR program. Also pfsinmulti recognizes the same file formats as pfsin. Technically, pfsinmulti creates a named pipe for each pfsstream, replaces @n arguments with the names of those pipes and deletes the pipes when \fIcommand\fR finishes. .SH EXAMPLES .TP pfsinmulti image1.hdr image2.hdr -- cat @1 @2 | pfsview Does the same as 'pfsv image1.hdr image2.hdr' but in much more sophisticated way. .SH "SEE ALSO" .BR pfsin (1) .SH BUGS This command currently does not handle multiple frames given with a \%%d pattern in case of LDR formats: JPEG, PNG, PNM. Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/fileformat/pfsouttiff.cpp0000664000175000017500000001016311077723455016151 00000000000000/** * @brief Write files in TIFF format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: pfsouttiff.cpp,v 1.3 2008/10/22 22:20:29 rafm Exp $ */ #include #include #include #include #include #include "hdrtiffio.h" #define PROG_NAME "pfsouttiff" class QuietException { }; void printHelp() { std::cerr << PROG_NAME " [--linear] [--verbose] [--help]" << std::endl << "See man page for more information." << std::endl; } void writeFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; bool opt_srgb=false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "srgb", no_argument, NULL, 's' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "shv"; pfs::FrameFileIterator it( argc, argv, "wb", NULL, stdout, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 's': opt_srgb = true; break; case '?': throw QuietException(); case ':': throw QuietException(); } } while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) { break; } pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) { pfsio.freeFrame( frame ); break; // No more frames } HDRTiffWriter writer( ff.fh ); pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X == NULL ) { // No color throw pfs::Exception( "Missing X, Y, Z channels in the PFS stream" ); } const char* luminanceTag = frame->getTags()->getString("LUMINANCE"); if( luminanceTag!=NULL && strcmp(luminanceTag,"ABSOLUTE")==0 ) std::cerr << PROG_NAME << " warning: This file format cannot store absolute luminance values\n"; if( opt_srgb ) { if( luminanceTag!=NULL && strcmp(luminanceTag,"DISPLAY")==0 ) std::cerr << PROG_NAME << " warning: This image seems to be display referred thus there is no need for applying the sRGB non-linearity\n"; pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_SRGB, X, Y, Z ); VERBOSE_STR << "writing file (sRGB corrected) '" << ff.fileName << "'" << std::endl; } else { pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, X, Y, Z ); VERBOSE_STR << "writing file (linear) '" << ff.fileName << "'" << std::endl; } writer.writeImage( X, Y, Z ); pfsio.freeFrame( frame ); it.closeFrameFile( ff ); } } int main( int argc, char* argv[] ) { try { writeFrames( argc, argv ); } catch( pfs::Exception ex ) { std::cerr << PROG_NAME << " error: " << ex.getMessage() << std::endl; return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsoutexr.10000664000175000017500000000600111071466566015372 00000000000000.TH "pfsoutexr" 1 .SH NAME pfsoutexr \- Write images or frames in OpenEXR format .SH SYNOPSIS .B pfsoutexr [--compression ] [--keep-xyz] ( [--frames ]) [...] .SH DESCRIPTION Use this command to write frames in OpenEXR format. Source pfs frames should be piped to the Standard Input. This command can write arbitrary channels to OpenEXR, color channels XYZ however are specially handled (see option \fIkeep-xyz\fR). All tags from pfs stream are stored in an OpenEXR file as String attributes. Tags assigned to channels are stored in the format :, so that pfsinexr can later restore tags in the appropriate channels. The depth channel \fIDEPTH\fR is renamed to \fIZ\fR to keep compatibility with \fBpfsinexr\fR. If the luminance is absolute (tag \fILUMINANCE\fR set to \fIABSOLUTE\fR), \fIWhiteLuminance\fR attribute in OpenEXR file is set to 1. Details on the format of the pattern file names, which are used for saving multiple frames, can be found in the manual page of pfsoutppm. .TP .B \--compression , -c Use one the the available compression methods: \fBNO\fR - no compression \fBRLE\fR - run length encoding \fBZIPS\fR - zlib compression, one scan line at a time \fBZIP\fR - zlib compression, in blocks of 16 scan lines \fBPIZ\fR - piz-based wavelet compression (default) \fBPXR24\fR - lossy 24-bit float compression .TP .B \--keep-xyz By default, color channels XYZ from pfs stream are converted to RGB color space and HALF format, which is a standard format for color data in OpenEXR. Since Half format is 16-bit and floating points values used in pfs stream are 32-bit, this conversion causes loss of precision. When \fIkeep-xyz\fR option is specified, color channels XYZ are stored as they are without any conversion (32-bit float XYZ channels). Note however, that most OpenEXR applications can recognize only RGB Half format images and can not handle 32-bit XYZ. .TP .B \--fix-halfmax The maximum value that can be stored in OpenEXR file is limited to 65504 if 16-bit HALF float is used (color channels are stored by default in this format unless \fB--keep-xyz\fR switch is specified). If the luminance data is calibrated in absolute values (cd/m^2), pixel values can easily exceed 65504. To avoid clamping large pixel values, pfsoutexr can rescale data to the range that is valid for 16-bit HALF float format when \fB--fix-halfmax\fR switch is specified. If this switch is missing, a warning message is displayed. Scale factor used for rescaling is stored in OpenEXR file as OpenEXR standard attribute \fIWhiteLuminance\fR, so that pfsinexr can later restore the absolute values. .SH EXAMPLES .TP pfsin memorial.hdr | pfsoutexr memorial.exr Converts from one HDR format to another .SH "SEE ALSO" .BR pfsout (1) .BR pfsoutppm (1) .BR pfsinexr (1) .SH BUGS pfsinexr and pfsoutexr can not take stdin / stdout as an input/output (dash '-' instead of file name). Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools pfstools-1.8.5/src/fileformat/pfsinrgbe.cpp0000664000175000017500000000721210736434641015735 00000000000000/** * @brief Read files in Radiance's RGBE format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * @author Rafal Mantiuk, * * $Id: pfsinrgbe.cpp,v 1.3 2008/01/01 13:01:21 rafm Exp $ */ #include #include #include #include #include #include "rgbeio.h" #define PROG_NAME "pfsinrgbe" class QuietException { }; void printHelp() { std::cerr << PROG_NAME " [--verbose] [--help]" << std::endl << "See man page for more information." << std::endl; } void readFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; bool opt_linear=false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "linear", no_argument, NULL, 'l' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "lhv"; pfs::FrameFileIterator it( argc, argv, "rb", NULL, stdin, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'l': std::cerr << PROG_NAME << " warning: linearize option ignored for an HDR input!" << std::endl; break; case '?': throw QuietException(); case ':': throw QuietException(); } } while( true ) { pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) break; // No more frames RGBEReader reader( ff.fh ); VERBOSE_STR << "reading file (linear) '" << ff.fileName << "'" << std::endl; pfs::Frame *frame = pfsio.createFrame( reader.getWidth(), reader.getHeight() ); pfs::Channel *X, *Y, *Z; frame->createXYZChannels( X, Y, Z ); //Store RGB data temporarily in XYZ channels reader.readImage( X, Y, Z ); pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); frame->getTags()->setString("LUMINANCE", "RELATIVE"); const char *fileNameTag = strcmp( "-", ff.fileName )==0 ? "stdin" : ff.fileName; frame->getTags()->setString( "FILE_NAME", fileNameTag ); pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); it.closeFrameFile( ff ); } } int main( int argc, char* argv[] ) { try { readFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsinimgmagick.cpp0000664000175000017500000001403711071466566016755 00000000000000/** * @brief Read files using ImageMagics++ library * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsinimgmagick.cpp,v 1.5 2008/10/03 19:07:34 rafm Exp $ */ #include #include #include #include #include #define PROG_NAME "pfsinimgmagick" class QuietException { }; void printHelp() { std::cerr << PROG_NAME " [--linear] [--absolute ] [--verbose] [--help]" << std::endl << "See man page for more information." << std::endl; } void readFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; bool opt_linear=false; float absoluteMaxLum = 0; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "linear", no_argument, NULL, 'l' }, { "absolute", required_argument, NULL, 'a' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "lhva:"; pfs::FrameFileIterator it( argc, argv, "rb", NULL, NULL, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'l': opt_linear = true; break; case 'a': absoluteMaxLum = (float)strtod( optarg, NULL ); break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( absoluteMaxLum != 0 && opt_linear ) throw pfs::Exception( "'absolute' and 'linear' are conflicting options" ); if( absoluteMaxLum < 0 ) throw pfs::Exception( "maximum absolute luminance must be > 0" ); VERBOSE_STR << "linearize input image: " << ((opt_linear || absoluteMaxLum!=0) ? "yes" : "no") << std::endl; if( absoluteMaxLum != 0 ) VERBOSE_STR << "maximum absolute luminance: " << absoluteMaxLum << std::endl; while( true ) { pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) break; // No more frames it.closeFrameFile( ff ); VERBOSE_STR << "reading file '" << ff.fileName << "'" << std::endl; Magick::Image imImage( ff.fileName ); VERBOSE_STR << "input image gamma: " << imImage.gamma() << std::endl; bool hasAlpha = imImage.matte(); if( hasAlpha ) VERBOSE_STR << "alpha channel found" << std::endl; pfs::Frame *frame = pfsio.createFrame( imImage.columns(), imImage.rows() ); pfs::Channel *X, *Y, *Z; frame->createXYZChannels( X, Y, Z ); pfs::Channel *alpha = NULL; if( hasAlpha ) alpha = frame->createChannel( "ALPHA" ); // Copy line by line to pfs::Frame int pixInd = 0; const float maxValue = (float)(1<getWidth()*X->getHeight(); for( int i = 0; i < pixCount; i++ ) { (*X)(i) *= absoluteMaxLum; (*Y)(i) *= absoluteMaxLum; (*Z)(i) *= absoluteMaxLum; } frame->getTags()->setString("LUMINANCE", "ABSOLUTE"); } else frame->getTags()->setString("LUMINANCE", "RELATIVE"); } else { pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); frame->getTags()->setString("LUMINANCE", "DISPLAY"); } // This is the luminance / luma perceived as reference white // Some tone-mappers may need this frame->getTags()->setString("WHITE_Y", "1"); const char *fileNameTag = strcmp( "-", ff.fileName )==0 ? "stdin" : ff.fileName; frame->getTags()->setString( "FILE_NAME", fileNameTag ); char strbuf[3]; snprintf( strbuf, 3, "%d", imImage.depth() ); frame->getTags()->setString("BITDEPTH", strbuf ); pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { readFrames( argc, argv ); } catch( pfs::Exception ex ) { std::cerr << PROG_NAME << " error: " << ex.getMessage() << std::endl; return EXIT_FAILURE; } catch( Magick::Exception &ex ) { //This is comming from ImageMagick std::cerr << PROG_NAME << " error: " << ex.what() << std::endl; return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/exrio.cpp0000664000175000017500000000672710254027366015113 00000000000000/** * @brief IO operations on OpenEXR file format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: exrio.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include #include #include "exrio.h" using namespace Imf; using namespace Imath; OpenEXRReader::OpenEXRReader( const char* filename ) { //--- read image file = new RgbaInputFile(filename); dw = file->dataWindow(); width = dw.max.x - dw.min.x + 1; height = dw.max.y - dw.min.y + 1; if( width*height<=0 ) { throw pfs::Exception("EXR: illegal image size"); } DEBUG_STR << "OpenEXR file \"" << filename << "\" (" << width << "x" << height << ")" << endl; } void OpenEXRReader::readImage( pfs::Array2D *R, pfs::Array2D *G, pfs::Array2D *B ) { assert(file!=NULL); DEBUG_STR << "Reading OpenEXR file... " << endl; Imf::Rgba* tmp_img = new Imf::Rgba[width*height]; assert( dw.min.x - dw.min.y * width<=0 ); file->setFrameBuffer(tmp_img - dw.min.x - dw.min.y * width, 1, width); // read image to memory file->readPixels(dw.min.y, dw.max.y); // check if supplied matrixes have the same size as the image if( R->getCols()!=width || R->getRows()!=height || G->getCols()!=width || G->getRows()!=height || B->getCols()!=width || B->getRows()!=height ) { throw pfs::Exception("EXR: matrixes have different size than image"); } int idx=0; for( int y=0 ; ygetCols(); int height = R->getRows(); Imf::Rgba* tmp_img = new Imf::Rgba[width*height]; int idx=0; for( int y=0 ; y [...] .SH DESCRIPTION This command can be used to read high- or low- dynamic range image in several recognized formats and output pfs stream on standard output. The pfs stream is usually piped to another program for further processing (see examples). To get a list of recognized formats and extensions, execute: pfsin --help This command is a front-end for pfsin* programs for reading images: pfsinrgbe, pfsinexr, etc. Based on the file extension, appropriate program is executed. If two different file format are given as parameters, two different program for loading images are executed. Additional options starting with dash '-' can be passed to pfsin* programs. The following rules apply for passing the options: the options given before any image file name (or %d pattern) are passed to all pfsin* programs. Options given after image file name are only passed to the program executed for that file(s). Note also that all option that take an argument (except \fB--frames\fR) must given in the form \fI--option=value\fR, that is without a space between an option and its argument. .SH OPTIONS The following options are shared by most pfsin* commands, although some may not accept --absolute and may ignore --linear. .TP .B \--frames Range is given in mathlab / octave format: .B "startframe:step:endframe" Frame numbers start with .B "startframe" (default 0), are increased by .B "step" (default 1) and stop at .B "endframe" You can skip one of those values, for example .I "1:100" for frames 1,2,...,100 and .I 0:2: for frames 0,2,4,... up to the last file that exists. .TP .B \--skip-missing Skip up to ten frames in a row if corresponding files are missing. Otherwise the program stops reading sequence at the first file that does not exists. This switch does not apply to the first frame in a sequence. This switch can be useful if there is a rendered animation where some of the frame has not been generated. .TP .B \--linear, -l Converts pixel values to linear luminance (XYZ), assuming the sRGB color space for the input image. The maximum pixel value (255,255,255) is mapped to Y=1. \fILUMINANCE\fR tag is set to RELATIVE. .TP .B \--absolute , -a \fB--absolute\fR converts pixel values to an absolute linear luminance (XYZ), that is the color space, in which channel Y contains luminance given in cd/m^2. The sRGB color space is assumed for the input image. The maximum pixel value (255,255,255) is mapped to Y=\fI\fR. \fI\fR is typically set to 80 [cd/m^2] for a CRT monitor. \fILUMINANCE\fR tag is set to ABSOLUTE. \fB--absolute\fR process images almost the same as \fB--relative\fR, but additionally it scales all pixels by \fI\fR. .SH EXAMPLES .TP pfsin memorial.pic | pfsview See a hdr image in Radiance format (RGBE). .TP pfsin memorial.pic | pfstmo_drago03 | pfsout memorial.jpeg Tone map a hdr image and save it as JPEG. .SH "SEE ALSO" .BR pfsout (1) .BR pfsinppm (1) .SH BUGS For LDR formats - JPEG, PNG, PNM: If pfstools are compiled without ImageMagic support, this command currently will not handle multiple frames given with a \%%d pattern. Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools pfstools-1.8.5/src/fileformat/pfsindcraw0000644000175000017500000000303011652214411015312 00000000000000#!/bin/bash ############################################################ # Wrapper for dcraw. # Convert digital camera RAW files to 16bit PPMs. # # this is a stub with basic functionality ############################################################ if test -z "$1" || test "$1" = "--help" || test "$1" = "-h"; then cat < [...] See the man page for more information. EOF exit 1 fi if ! which dcraw 2>/dev/null 1>/dev/null; then echo >&2 "pfsindcraw: dcraw program not found. Check if it is installed and can be found in the PATH." exit 1; fi if ! which pfsinppm 2>/dev/null 1>/dev/null; then echo >&2 "pfsindcraw: pfsinppm program not found. Check if pfstools are compiled with netpbm support." exit 1; fi #Arguments used for all images passed to pfsindcraw global_arguments="" if test -n "$1"; then while test "${1:0:1}" = "-"; do case "$1" in *) echo >&2 "No option is implemented at the moment." exit 1; esac global_arguments="$global_arguments $1" shift done fi while test "$1"; do file_pattern="$1" dcraw -c -o 0 -4 -w "$file_pattern" | pfsinppm - 2> /dev/null | \ pfstag --set "FILE_NAME=${file_pattern}" --set "LUMINANCE=RELATIVE" shift done pfstools-1.8.5/src/fileformat/Makefile.am0000664000175000017500000000550411071264574015307 00000000000000### # if PPM_SUPPORT PPM_PROGS = pfsinppm pfsoutppm endif if TIFF_SUPPORT TIFF_PROGS = pfsintiff pfsouttiff endif if JPEGHDR_SUPPORT JPEGHDR_PROGS = pfsinjpeghdr pfsoutjpeghdr endif if OPENEXR_SUPPORT OPENEXR_PROGS = pfsinexr pfsoutexr endif if IMAGEMAGICK_SUPPORT IMAGEMAGICK_PROGS = pfsinimgmagick pfsoutimgmagick endif if GDAL_SUPPORT GDAL_PROGS = pfsingdal endif bin_PROGRAMS = pfsinrgbe pfsoutrgbe \ pfsinpfm pfsoutpfm \ $(PPM_PROGS) \ $(TIFF_PROGS) \ $(JPEGHDR_PROGS) \ $(OPENEXR_PROGS) \ $(IMAGEMAGICK_PROGS) \ $(GDAL_PROGS) bin_SCRIPTS = pfsin pfsout pfsoutffmpeg pfsinmulti pfsindcraw man_MANS = pfsin.1 pfsout.1 pfsinppm.1 pfsinexr.1 pfsinrgbe.1 \ pfsintiff.1 pfsoutppm.1 pfsoutexr.1 pfsoutffmpeg.1 \ pfsinpfm.1 pfsoutpfm.1 pfsinmulti.1 pfsinimgmagick.1 \ pfsoutimgmagick.1 pfsinjpeghdr.1 pfsoutjpeghdr.1 \ pfsindcraw.1 pfsingdal.1 EXTRA_DIST = $(man_MANS) $(bin_SCRIPTS) LIBS += ../pfs/libpfs-1.2.la INCLUDES = -I${srcdir}/../pfs #Commented out because it does not work with conditional build #noinst_LIBRARIES = libpfsfileformat.a #libpfsfileformat_a_SOURCES = rgbeio.cpp ppmio.cpp hdrtiffio.cpp if PPM_SUPPORT pfsinppm_SOURCES = pfsinppm.cpp ppmio.cpp ppmio.h pfsoutppm_SOURCES = pfsoutppm.cpp ppmio.cpp ppmio.h pfsinppm_LDADD = $(NETPBM_LIBS) pfsoutppm_LDADD = $(NETPBM_LIBS) INCLUDES += $(NETPBM_CFLAGS) endif if TIFF_SUPPORT pfsintiff_SOURCES = pfsintiff.cpp hdrtiffio.cpp hdrtiffio.h pfsouttiff_SOURCES = pfsouttiff.cpp hdrtiffio.cpp hdrtiffio.h pfsintiff_LDADD = $(TIFF_LIBS) pfsouttiff_LDADD = $(TIFF_LIBS) endif if JPEGHDR_SUPPORT pfsinjpeghdr_SOURCES = pfsinjpeghdr.cpp pfsoutjpeghdr_SOURCES = pfsoutjpeghdr.cpp pfsinjpeghdr_LDADD = $(JPEGHDR_LIBS) pfsoutjpeghdr_LDADD = $(JPEGHDR_LIBS) endif #pfsreadseq_SOURCES = pfsreadseq.cpp #pfsreadseq_LDADD = ../pfs/libpfs-1.0.la if OPENEXR_SUPPORT pfsinexr_SOURCES = pfsinexr.cpp exrio.cpp exrio.h pfsoutexr_SOURCES = pfsoutexr.cpp exrio.cpp exrio.h pfsoutexr_LDADD = $(OPENEXR_LIBS) pfsinexr_LDADD = $(OPENEXR_LIBS) INCLUDES += $(OPENEXR_CFLAGS) endif if IMAGEMAGICK_SUPPORT pfsinimgmagick_SOURCES = pfsinimgmagick.cpp pfsinimgmagick_LDADD = $(IMAGEMAGICK_LIBS) pfsoutimgmagick_SOURCES = pfsoutimgmagick.cpp pfsoutimgmagick_LDADD = $(IMAGEMAGICK_LIBS) INCLUDES += $(IMAGEMAGICK_CFLAGS) endif if GDAL_SUPPORT pfsingdal_SOURCES = pfsingdal.cpp pfsingdal_LDADD = $(GDAL_LIBS) endif pfsinrgbe_SOURCES = pfsinrgbe.cpp rgbeio.cpp rgbeio.h pfsoutrgbe_SOURCES = pfsoutrgbe.cpp rgbeio.cpp rgbeio.h pfsinpfm_SOURCES = pfsinpfm.cpp pfsoutpfm_SOURCES = pfsoutpfm.cpp install-data-hook: cd $(DESTDIR)$(man1dir); \ ln -f -s pfsoutppm.1 pfsouttiff.1; \ ln -f -s pfsoutppm.1 pfsoutrgbe.1; uninstall-hook: cd $(DESTDIR)$(man1dir); \ rm pfsouttiff.1 pfsoutrgbe.1 pfstools-1.8.5/src/fileformat/ppmio.h0000664000175000017500000000351311206570201014531 00000000000000/** * @brief * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: ppmio.h,v 1.5 2009/05/25 19:24:49 rafm Exp $ */ #ifndef PPMIO_H #define PPMIO_H #include #include struct PPMData; class PPMReader { FILE *fh; int width, height; PPMData *data; public: PPMReader( const char *program_name, FILE *fh ); ~PPMReader(); int getWidth() const { return width; } int getHeight() const { return height; } int getBitDepth(); bool readImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ); }; class PPMWriter { FILE *fh; const int bit_depth; public: PPMWriter( const char *program_name, FILE *fh, int bit_depth = 8 ); void writeImage( pfs::Array2D *X, pfs::Array2D *Y, pfs::Array2D *Z ); }; #endif pfstools-1.8.5/src/fileformat/Makefile.in0000644000175000017500000010341411652214375015314 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ### # VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = pfsinrgbe$(EXEEXT) pfsoutrgbe$(EXEEXT) \ pfsinpfm$(EXEEXT) pfsoutpfm$(EXEEXT) $(am__EXEEXT_1) \ $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ $(am__EXEEXT_5) $(am__EXEEXT_6) @PPM_SUPPORT_TRUE@am__append_1 = $(NETPBM_CFLAGS) @OPENEXR_SUPPORT_TRUE@am__append_2 = $(OPENEXR_CFLAGS) @IMAGEMAGICK_SUPPORT_TRUE@am__append_3 = $(IMAGEMAGICK_CFLAGS) subdir = src/fileformat DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/pfsin.in $(srcdir)/pfsindcraw.in \ $(srcdir)/pfsinmulti.in $(srcdir)/pfsout.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = pfsin pfsout pfsindcraw pfsinmulti CONFIG_CLEAN_VPATH_FILES = @PPM_SUPPORT_TRUE@am__EXEEXT_1 = pfsinppm$(EXEEXT) pfsoutppm$(EXEEXT) @TIFF_SUPPORT_TRUE@am__EXEEXT_2 = pfsintiff$(EXEEXT) \ @TIFF_SUPPORT_TRUE@ pfsouttiff$(EXEEXT) @JPEGHDR_SUPPORT_TRUE@am__EXEEXT_3 = pfsinjpeghdr$(EXEEXT) \ @JPEGHDR_SUPPORT_TRUE@ pfsoutjpeghdr$(EXEEXT) @OPENEXR_SUPPORT_TRUE@am__EXEEXT_4 = pfsinexr$(EXEEXT) \ @OPENEXR_SUPPORT_TRUE@ pfsoutexr$(EXEEXT) @IMAGEMAGICK_SUPPORT_TRUE@am__EXEEXT_5 = pfsinimgmagick$(EXEEXT) \ @IMAGEMAGICK_SUPPORT_TRUE@ pfsoutimgmagick$(EXEEXT) @GDAL_SUPPORT_TRUE@am__EXEEXT_6 = pfsingdal$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am__pfsinexr_SOURCES_DIST = pfsinexr.cpp exrio.cpp exrio.h @OPENEXR_SUPPORT_TRUE@am_pfsinexr_OBJECTS = pfsinexr.$(OBJEXT) \ @OPENEXR_SUPPORT_TRUE@ exrio.$(OBJEXT) pfsinexr_OBJECTS = $(am_pfsinexr_OBJECTS) am__DEPENDENCIES_1 = @OPENEXR_SUPPORT_TRUE@pfsinexr_DEPENDENCIES = $(am__DEPENDENCIES_1) am__pfsingdal_SOURCES_DIST = pfsingdal.cpp @GDAL_SUPPORT_TRUE@am_pfsingdal_OBJECTS = pfsingdal.$(OBJEXT) pfsingdal_OBJECTS = $(am_pfsingdal_OBJECTS) @GDAL_SUPPORT_TRUE@pfsingdal_DEPENDENCIES = $(am__DEPENDENCIES_1) am__pfsinimgmagick_SOURCES_DIST = pfsinimgmagick.cpp @IMAGEMAGICK_SUPPORT_TRUE@am_pfsinimgmagick_OBJECTS = \ @IMAGEMAGICK_SUPPORT_TRUE@ pfsinimgmagick.$(OBJEXT) pfsinimgmagick_OBJECTS = $(am_pfsinimgmagick_OBJECTS) @IMAGEMAGICK_SUPPORT_TRUE@pfsinimgmagick_DEPENDENCIES = \ @IMAGEMAGICK_SUPPORT_TRUE@ $(am__DEPENDENCIES_1) am__pfsinjpeghdr_SOURCES_DIST = pfsinjpeghdr.cpp @JPEGHDR_SUPPORT_TRUE@am_pfsinjpeghdr_OBJECTS = \ @JPEGHDR_SUPPORT_TRUE@ pfsinjpeghdr.$(OBJEXT) pfsinjpeghdr_OBJECTS = $(am_pfsinjpeghdr_OBJECTS) @JPEGHDR_SUPPORT_TRUE@pfsinjpeghdr_DEPENDENCIES = \ @JPEGHDR_SUPPORT_TRUE@ $(am__DEPENDENCIES_1) am_pfsinpfm_OBJECTS = pfsinpfm.$(OBJEXT) pfsinpfm_OBJECTS = $(am_pfsinpfm_OBJECTS) pfsinpfm_LDADD = $(LDADD) am__pfsinppm_SOURCES_DIST = pfsinppm.cpp ppmio.cpp ppmio.h @PPM_SUPPORT_TRUE@am_pfsinppm_OBJECTS = pfsinppm.$(OBJEXT) \ @PPM_SUPPORT_TRUE@ ppmio.$(OBJEXT) pfsinppm_OBJECTS = $(am_pfsinppm_OBJECTS) @PPM_SUPPORT_TRUE@pfsinppm_DEPENDENCIES = $(am__DEPENDENCIES_1) am_pfsinrgbe_OBJECTS = pfsinrgbe.$(OBJEXT) rgbeio.$(OBJEXT) pfsinrgbe_OBJECTS = $(am_pfsinrgbe_OBJECTS) pfsinrgbe_LDADD = $(LDADD) am__pfsintiff_SOURCES_DIST = pfsintiff.cpp hdrtiffio.cpp hdrtiffio.h @TIFF_SUPPORT_TRUE@am_pfsintiff_OBJECTS = pfsintiff.$(OBJEXT) \ @TIFF_SUPPORT_TRUE@ hdrtiffio.$(OBJEXT) pfsintiff_OBJECTS = $(am_pfsintiff_OBJECTS) @TIFF_SUPPORT_TRUE@pfsintiff_DEPENDENCIES = $(am__DEPENDENCIES_1) am__pfsoutexr_SOURCES_DIST = pfsoutexr.cpp exrio.cpp exrio.h @OPENEXR_SUPPORT_TRUE@am_pfsoutexr_OBJECTS = pfsoutexr.$(OBJEXT) \ @OPENEXR_SUPPORT_TRUE@ exrio.$(OBJEXT) pfsoutexr_OBJECTS = $(am_pfsoutexr_OBJECTS) @OPENEXR_SUPPORT_TRUE@pfsoutexr_DEPENDENCIES = $(am__DEPENDENCIES_1) am__pfsoutimgmagick_SOURCES_DIST = pfsoutimgmagick.cpp @IMAGEMAGICK_SUPPORT_TRUE@am_pfsoutimgmagick_OBJECTS = \ @IMAGEMAGICK_SUPPORT_TRUE@ pfsoutimgmagick.$(OBJEXT) pfsoutimgmagick_OBJECTS = $(am_pfsoutimgmagick_OBJECTS) @IMAGEMAGICK_SUPPORT_TRUE@pfsoutimgmagick_DEPENDENCIES = \ @IMAGEMAGICK_SUPPORT_TRUE@ $(am__DEPENDENCIES_1) am__pfsoutjpeghdr_SOURCES_DIST = pfsoutjpeghdr.cpp @JPEGHDR_SUPPORT_TRUE@am_pfsoutjpeghdr_OBJECTS = \ @JPEGHDR_SUPPORT_TRUE@ pfsoutjpeghdr.$(OBJEXT) pfsoutjpeghdr_OBJECTS = $(am_pfsoutjpeghdr_OBJECTS) @JPEGHDR_SUPPORT_TRUE@pfsoutjpeghdr_DEPENDENCIES = \ @JPEGHDR_SUPPORT_TRUE@ $(am__DEPENDENCIES_1) am_pfsoutpfm_OBJECTS = pfsoutpfm.$(OBJEXT) pfsoutpfm_OBJECTS = $(am_pfsoutpfm_OBJECTS) pfsoutpfm_LDADD = $(LDADD) am__pfsoutppm_SOURCES_DIST = pfsoutppm.cpp ppmio.cpp ppmio.h @PPM_SUPPORT_TRUE@am_pfsoutppm_OBJECTS = pfsoutppm.$(OBJEXT) \ @PPM_SUPPORT_TRUE@ ppmio.$(OBJEXT) pfsoutppm_OBJECTS = $(am_pfsoutppm_OBJECTS) @PPM_SUPPORT_TRUE@pfsoutppm_DEPENDENCIES = $(am__DEPENDENCIES_1) am_pfsoutrgbe_OBJECTS = pfsoutrgbe.$(OBJEXT) rgbeio.$(OBJEXT) pfsoutrgbe_OBJECTS = $(am_pfsoutrgbe_OBJECTS) pfsoutrgbe_LDADD = $(LDADD) am__pfsouttiff_SOURCES_DIST = pfsouttiff.cpp hdrtiffio.cpp hdrtiffio.h @TIFF_SUPPORT_TRUE@am_pfsouttiff_OBJECTS = pfsouttiff.$(OBJEXT) \ @TIFF_SUPPORT_TRUE@ hdrtiffio.$(OBJEXT) pfsouttiff_OBJECTS = $(am_pfsouttiff_OBJECTS) @TIFF_SUPPORT_TRUE@pfsouttiff_DEPENDENCIES = $(am__DEPENDENCIES_1) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' SCRIPTS = $(bin_SCRIPTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(pfsinexr_SOURCES) $(pfsingdal_SOURCES) \ $(pfsinimgmagick_SOURCES) $(pfsinjpeghdr_SOURCES) \ $(pfsinpfm_SOURCES) $(pfsinppm_SOURCES) $(pfsinrgbe_SOURCES) \ $(pfsintiff_SOURCES) $(pfsoutexr_SOURCES) \ $(pfsoutimgmagick_SOURCES) $(pfsoutjpeghdr_SOURCES) \ $(pfsoutpfm_SOURCES) $(pfsoutppm_SOURCES) \ $(pfsoutrgbe_SOURCES) $(pfsouttiff_SOURCES) DIST_SOURCES = $(am__pfsinexr_SOURCES_DIST) \ $(am__pfsingdal_SOURCES_DIST) \ $(am__pfsinimgmagick_SOURCES_DIST) \ $(am__pfsinjpeghdr_SOURCES_DIST) $(pfsinpfm_SOURCES) \ $(am__pfsinppm_SOURCES_DIST) $(pfsinrgbe_SOURCES) \ $(am__pfsintiff_SOURCES_DIST) $(am__pfsoutexr_SOURCES_DIST) \ $(am__pfsoutimgmagick_SOURCES_DIST) \ $(am__pfsoutjpeghdr_SOURCES_DIST) $(pfsoutpfm_SOURCES) \ $(am__pfsoutppm_SOURCES_DIST) $(pfsoutrgbe_SOURCES) \ $(am__pfsouttiff_SOURCES_DIST) man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ ../pfs/libpfs-1.2.la LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @PPM_SUPPORT_TRUE@PPM_PROGS = pfsinppm pfsoutppm @TIFF_SUPPORT_TRUE@TIFF_PROGS = pfsintiff pfsouttiff @JPEGHDR_SUPPORT_TRUE@JPEGHDR_PROGS = pfsinjpeghdr pfsoutjpeghdr @OPENEXR_SUPPORT_TRUE@OPENEXR_PROGS = pfsinexr pfsoutexr @IMAGEMAGICK_SUPPORT_TRUE@IMAGEMAGICK_PROGS = pfsinimgmagick pfsoutimgmagick @GDAL_SUPPORT_TRUE@GDAL_PROGS = pfsingdal bin_SCRIPTS = pfsin pfsout pfsoutffmpeg pfsinmulti pfsindcraw man_MANS = pfsin.1 pfsout.1 pfsinppm.1 pfsinexr.1 pfsinrgbe.1 \ pfsintiff.1 pfsoutppm.1 pfsoutexr.1 pfsoutffmpeg.1 \ pfsinpfm.1 pfsoutpfm.1 pfsinmulti.1 pfsinimgmagick.1 \ pfsoutimgmagick.1 pfsinjpeghdr.1 pfsoutjpeghdr.1 \ pfsindcraw.1 pfsingdal.1 EXTRA_DIST = $(man_MANS) $(bin_SCRIPTS) INCLUDES = -I${srcdir}/../pfs $(am__append_1) $(am__append_2) \ $(am__append_3) #Commented out because it does not work with conditional build #noinst_LIBRARIES = libpfsfileformat.a #libpfsfileformat_a_SOURCES = rgbeio.cpp ppmio.cpp hdrtiffio.cpp @PPM_SUPPORT_TRUE@pfsinppm_SOURCES = pfsinppm.cpp ppmio.cpp ppmio.h @PPM_SUPPORT_TRUE@pfsoutppm_SOURCES = pfsoutppm.cpp ppmio.cpp ppmio.h @PPM_SUPPORT_TRUE@pfsinppm_LDADD = $(NETPBM_LIBS) @PPM_SUPPORT_TRUE@pfsoutppm_LDADD = $(NETPBM_LIBS) @TIFF_SUPPORT_TRUE@pfsintiff_SOURCES = pfsintiff.cpp hdrtiffio.cpp hdrtiffio.h @TIFF_SUPPORT_TRUE@pfsouttiff_SOURCES = pfsouttiff.cpp hdrtiffio.cpp hdrtiffio.h @TIFF_SUPPORT_TRUE@pfsintiff_LDADD = $(TIFF_LIBS) @TIFF_SUPPORT_TRUE@pfsouttiff_LDADD = $(TIFF_LIBS) @JPEGHDR_SUPPORT_TRUE@pfsinjpeghdr_SOURCES = pfsinjpeghdr.cpp @JPEGHDR_SUPPORT_TRUE@pfsoutjpeghdr_SOURCES = pfsoutjpeghdr.cpp @JPEGHDR_SUPPORT_TRUE@pfsinjpeghdr_LDADD = $(JPEGHDR_LIBS) @JPEGHDR_SUPPORT_TRUE@pfsoutjpeghdr_LDADD = $(JPEGHDR_LIBS) #pfsreadseq_SOURCES = pfsreadseq.cpp #pfsreadseq_LDADD = ../pfs/libpfs-1.0.la @OPENEXR_SUPPORT_TRUE@pfsinexr_SOURCES = pfsinexr.cpp exrio.cpp exrio.h @OPENEXR_SUPPORT_TRUE@pfsoutexr_SOURCES = pfsoutexr.cpp exrio.cpp exrio.h @OPENEXR_SUPPORT_TRUE@pfsoutexr_LDADD = $(OPENEXR_LIBS) @OPENEXR_SUPPORT_TRUE@pfsinexr_LDADD = $(OPENEXR_LIBS) @IMAGEMAGICK_SUPPORT_TRUE@pfsinimgmagick_SOURCES = pfsinimgmagick.cpp @IMAGEMAGICK_SUPPORT_TRUE@pfsinimgmagick_LDADD = $(IMAGEMAGICK_LIBS) @IMAGEMAGICK_SUPPORT_TRUE@pfsoutimgmagick_SOURCES = pfsoutimgmagick.cpp @IMAGEMAGICK_SUPPORT_TRUE@pfsoutimgmagick_LDADD = $(IMAGEMAGICK_LIBS) @GDAL_SUPPORT_TRUE@pfsingdal_SOURCES = pfsingdal.cpp @GDAL_SUPPORT_TRUE@pfsingdal_LDADD = $(GDAL_LIBS) pfsinrgbe_SOURCES = pfsinrgbe.cpp rgbeio.cpp rgbeio.h pfsoutrgbe_SOURCES = pfsoutrgbe.cpp rgbeio.cpp rgbeio.h pfsinpfm_SOURCES = pfsinpfm.cpp pfsoutpfm_SOURCES = pfsoutpfm.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/fileformat/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/fileformat/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): pfsin: $(top_builddir)/config.status $(srcdir)/pfsin.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ pfsout: $(top_builddir)/config.status $(srcdir)/pfsout.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ pfsindcraw: $(top_builddir)/config.status $(srcdir)/pfsindcraw.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ pfsinmulti: $(top_builddir)/config.status $(srcdir)/pfsinmulti.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pfsinexr$(EXEEXT): $(pfsinexr_OBJECTS) $(pfsinexr_DEPENDENCIES) @rm -f pfsinexr$(EXEEXT) $(CXXLINK) $(pfsinexr_OBJECTS) $(pfsinexr_LDADD) $(LIBS) pfsingdal$(EXEEXT): $(pfsingdal_OBJECTS) $(pfsingdal_DEPENDENCIES) @rm -f pfsingdal$(EXEEXT) $(CXXLINK) $(pfsingdal_OBJECTS) $(pfsingdal_LDADD) $(LIBS) pfsinimgmagick$(EXEEXT): $(pfsinimgmagick_OBJECTS) $(pfsinimgmagick_DEPENDENCIES) @rm -f pfsinimgmagick$(EXEEXT) $(CXXLINK) $(pfsinimgmagick_OBJECTS) $(pfsinimgmagick_LDADD) $(LIBS) pfsinjpeghdr$(EXEEXT): $(pfsinjpeghdr_OBJECTS) $(pfsinjpeghdr_DEPENDENCIES) @rm -f pfsinjpeghdr$(EXEEXT) $(CXXLINK) $(pfsinjpeghdr_OBJECTS) $(pfsinjpeghdr_LDADD) $(LIBS) pfsinpfm$(EXEEXT): $(pfsinpfm_OBJECTS) $(pfsinpfm_DEPENDENCIES) @rm -f pfsinpfm$(EXEEXT) $(CXXLINK) $(pfsinpfm_OBJECTS) $(pfsinpfm_LDADD) $(LIBS) pfsinppm$(EXEEXT): $(pfsinppm_OBJECTS) $(pfsinppm_DEPENDENCIES) @rm -f pfsinppm$(EXEEXT) $(CXXLINK) $(pfsinppm_OBJECTS) $(pfsinppm_LDADD) $(LIBS) pfsinrgbe$(EXEEXT): $(pfsinrgbe_OBJECTS) $(pfsinrgbe_DEPENDENCIES) @rm -f pfsinrgbe$(EXEEXT) $(CXXLINK) $(pfsinrgbe_OBJECTS) $(pfsinrgbe_LDADD) $(LIBS) pfsintiff$(EXEEXT): $(pfsintiff_OBJECTS) $(pfsintiff_DEPENDENCIES) @rm -f pfsintiff$(EXEEXT) $(CXXLINK) $(pfsintiff_OBJECTS) $(pfsintiff_LDADD) $(LIBS) pfsoutexr$(EXEEXT): $(pfsoutexr_OBJECTS) $(pfsoutexr_DEPENDENCIES) @rm -f pfsoutexr$(EXEEXT) $(CXXLINK) $(pfsoutexr_OBJECTS) $(pfsoutexr_LDADD) $(LIBS) pfsoutimgmagick$(EXEEXT): $(pfsoutimgmagick_OBJECTS) $(pfsoutimgmagick_DEPENDENCIES) @rm -f pfsoutimgmagick$(EXEEXT) $(CXXLINK) $(pfsoutimgmagick_OBJECTS) $(pfsoutimgmagick_LDADD) $(LIBS) pfsoutjpeghdr$(EXEEXT): $(pfsoutjpeghdr_OBJECTS) $(pfsoutjpeghdr_DEPENDENCIES) @rm -f pfsoutjpeghdr$(EXEEXT) $(CXXLINK) $(pfsoutjpeghdr_OBJECTS) $(pfsoutjpeghdr_LDADD) $(LIBS) pfsoutpfm$(EXEEXT): $(pfsoutpfm_OBJECTS) $(pfsoutpfm_DEPENDENCIES) @rm -f pfsoutpfm$(EXEEXT) $(CXXLINK) $(pfsoutpfm_OBJECTS) $(pfsoutpfm_LDADD) $(LIBS) pfsoutppm$(EXEEXT): $(pfsoutppm_OBJECTS) $(pfsoutppm_DEPENDENCIES) @rm -f pfsoutppm$(EXEEXT) $(CXXLINK) $(pfsoutppm_OBJECTS) $(pfsoutppm_LDADD) $(LIBS) pfsoutrgbe$(EXEEXT): $(pfsoutrgbe_OBJECTS) $(pfsoutrgbe_DEPENDENCIES) @rm -f pfsoutrgbe$(EXEEXT) $(CXXLINK) $(pfsoutrgbe_OBJECTS) $(pfsoutrgbe_LDADD) $(LIBS) pfsouttiff$(EXEEXT): $(pfsouttiff_OBJECTS) $(pfsouttiff_DEPENDENCIES) @rm -f pfsouttiff$(EXEEXT) $(CXXLINK) $(pfsouttiff_OBJECTS) $(pfsouttiff_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exrio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdrtiffio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsinexr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsingdal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsinimgmagick.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsinjpeghdr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsinpfm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsinppm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsinrgbe.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsintiff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsoutexr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsoutimgmagick.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsoutjpeghdr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsoutpfm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsoutppm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsoutrgbe.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsouttiff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppmio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rgbeio.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man1 .MAKE: install-am install-data-am install-strip uninstall-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-binSCRIPTS install-data \ install-data-am install-data-hook install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-binSCRIPTS uninstall-hook \ uninstall-man uninstall-man1 install-data-hook: cd $(DESTDIR)$(man1dir); \ ln -f -s pfsoutppm.1 pfsouttiff.1; \ ln -f -s pfsoutppm.1 pfsoutrgbe.1; uninstall-hook: cd $(DESTDIR)$(man1dir); \ rm pfsouttiff.1 pfsoutrgbe.1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/src/fileformat/pfsoutrgbe.cpp0000664000175000017500000000772210736434641016144 00000000000000/** * @brief Write files in Radiance's RGBE format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * @author Rafal Mantiuk, * * $Id: pfsoutrgbe.cpp,v 1.2 2008/01/01 13:01:21 rafm Exp $ */ #include #include #include #include #include #include "rgbeio.h" #define PROG_NAME "pfsoutrgbe" class QuietException { }; void printHelp() { std::cerr << PROG_NAME " [--linear] [--verbose] [--help]" << std::endl << "See man page for more information." << std::endl; } void writeFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "linear", no_argument, NULL, 'l' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "lhv"; pfs::FrameFileIterator it( argc, argv, "wb", NULL, stdout, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'l': std::cerr << PROG_NAME << " warning: linearize option ignored for an HDR output!" << std::endl; break; case '?': throw QuietException(); case ':': throw QuietException(); } } while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) { break; // No more frames } const char* luminanceTag = frame->getTags()->getString("LUMINANCE"); if( luminanceTag!=NULL && 0==strcmp(luminanceTag,"DISPLAY") ) { static bool show_once = false; if( !show_once ) { std::cerr << PROG_NAME << " warning: " << "display profiled content written to an HDR output" << std::endl; show_once=true; } } pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) { pfsio.freeFrame( frame ); break; // No more frames } RGBEWriter writer( ff.fh ); pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X == NULL ) { // No color throw pfs::Exception( "Missing X, Y, Z channels in the PFS stream" ); } VERBOSE_STR << "writing file (HDR) '" << ff.fileName << "'" << std::endl; pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, X, Y, Z ); writer.writeImage( X, Y, Z ); pfsio.freeFrame( frame ); it.closeFrameFile( ff ); } } int main( int argc, char* argv[] ) { try { writeFrames( argc, argv ); } catch( pfs::Exception ex ) { std::cerr << PROG_NAME << " error: " << ex.getMessage() << std::endl; return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsintiff.cpp0000664000175000017500000001056010736434641015746 00000000000000/** * @brief Read files in TIFF format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Grzegorz Krawczyk, * * $Id: pfsintiff.cpp,v 1.3 2008/01/01 13:01:21 rafm Exp $ */ #include #include #include #include #include #include "hdrtiffio.h" #define PROG_NAME "pfsintiff" class QuietException { }; void printHelp() { std::cerr << PROG_NAME " [--linear] [--expmode] [--verbose] [--help]" << std::endl << "See man page for more information." << std::endl; } void readFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; bool opt_linear=false; bool opt_exponential_mode = false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "linear", no_argument, NULL, 'l' }, { "expmode", no_argument, NULL, 'e' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "elhv"; pfs::FrameFileIterator it( argc, argv, "rb", NULL, stdin, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'l': opt_linear = true; break; case 'e': opt_exponential_mode = true; break; case '?': throw QuietException(); case ':': throw QuietException(); } } VERBOSE_STR << "linearize input image: " << (opt_linear ? "yes" : "no") << std::endl; VERBOSE_STR << "exponential mode (Lars3 HDR camera): " << (opt_exponential_mode ? "yes" : "no") << std::endl; while( true ) { pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) break; // No more frames it.closeFrameFile( ff ); HDRTiffReader reader( ff.fileName ); if( opt_exponential_mode ) reader.setExponentialMode(); VERBOSE_STR << "reading file (" << reader.getFormatString() << ") '" << ff.fileName << "'" << std::endl; pfs::Frame *frame = pfsio.createFrame( reader.getWidth(), reader.getHeight() ); pfs::Channel *X, *Y, *Z; frame->createXYZChannels( X, Y, Z ); //Store RGB data temporarily in XYZ channels reader.readImage( X, Y, Z ); if( opt_linear && !reader.isRelative() ) { pfs::transformColorSpace( pfs::CS_SRGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); frame->getTags()->setString("LUMINANCE", "RELATIVE"); } else { if( !reader.isColorspaceXYZ() ) pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); if( reader.isRelative() ) frame->getTags()->setString("LUMINANCE", "RELATIVE"); else frame->getTags()->setString("LUMINANCE", "DISPLAY"); } const char *fileNameTag = strcmp( "-", ff.fileName )==0 ? "stdin" : ff.fileName; frame->getTags()->setString( "FILE_NAME", fileNameTag ); pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { readFrames( argc, argv ); } catch( pfs::Exception ex ) { std::cerr << PROG_NAME << " error: " << ex.getMessage() << std::endl; return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsinppm.10000664000175000017500000000642511071466566015201 00000000000000.TH "pfsinppm" 1 .SH NAME pfsinppm \- Load images or frames in PBM formats .SH SYNOPSIS .B pfsinppm ( [--linear] [--absolute ] [--frames ] [--skip-missing]) [...] .SH DESCRIPTION .I pfsinppm command loads images in PBM formats (PPM, PNM or PGM) and writes \fIpfs\fR stream to the standard output. The \fIpfs\fR stream is usually piped to another program for further processing. To detect the format automatically based on the extension, use \fIpfsin\fR command. For more information on PBM formats, refer to the NetPBM web page (http://netpbm.sourceforge.net/). .PP Note that PPM or PNM images are low dynamic range. Therefore pixel values (0-255) are scaled to 0-1 before storing them in pfs stream. Similarly, before writing low dynamic range image from pfs stream, pixel values are multiplied by 255. By default, the 'LUMINANCE' tag is set to 'DISPLAY'. The '--linear' switch can force the inverse sRGB transformation and provide linear data. In this case the 'LUMINANCE' tag is set to 'RELATIVE'. '--absolute' switch can be used to convert pixels to absolute luminance values. .PP To read images from standard input use a single dash '-' instead of filename. The images are read until EOF is reached. .PP Each file can contain a \%%d pattern, which is substituted with frame numbers. The pattern has the same syntax as C .I printf command. For example, you can use \%%04d to make the frame number four digit with proceedings zeros. See the OPTIONS section below for details. .SH OPTIONS .TP .B \--frames Range is given in mathlab / octave format: .B "startframe:step:endframe" Frame numbers start with .B "startframe" (default 0), are increased by .B "step" (default 1) and stop at .B "endframe" You can skip one of those values, for example .I "1:100" for frames 1,2,...,100 and .I 0:2: for frame 0,2,4,... up to the last file that exists. .TP .B \--skip-missing Skip up to ten frames in a row if corresponding files are missing. Otherwise the program stops reading sequence at the first file that does not exists. This switch does not apply to the first frame in a sequence. This switch can be useful if there is a rendered animation where some of the frame has not been generated. .TP .B \--linear, -l Converts pixel values to linear luminance (XYZ), assuming the sRGB color space for the input image. The maximum pixel value (255,255,255) is mapped to Y=1. \fILUMINANCE\fR tag is set to RELATIVE. .TP .B \--absolute , -a \fB--absolute\fR converts pixel values to an absolute linear luminance (XYZ), that is the color space, in which channel Y contains luminance given in cd/m^2. The sRGB color space is assumed for the input image. The maximum pixel value (255,255,255) is mapped to Y=\fI\fR. \fI\fR is typically set to 80 [cd/m^2] for a CRT monitor. \fILUMINANCE\fR tag is set to ABSOLUTE. \fB--absolute\fR process images almost the same as \fB--relative\fR, but additionally it scales all pixels by \fI\fR. .SH EXAMPLES .TP pfsinppm frame\%%04d.ppm \--frames 0:10 | pfsview Read frames from files frame0000.ppm, frame0001.ppm, ..., frame0010.ppm and show them using pfsview. .SH BUGS Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools .SH "SEE ALSO" .BR pfsin (1), .BR pfsout (1) pfstools-1.8.5/src/fileformat/pfsinimgmagick.10000664000175000017500000000670511071466566016336 00000000000000.TH "pfsinimgmagick" 1 .SH NAME pfsinimgmagick \- Load images or frames using ImageMagick++ library .SH SYNOPSIS .B pfsinimgmagick ( [--linear] [--absolute ] [--frames ] [--skip-missing]) [...] .SH DESCRIPTION This command can load images or frames in the multitude of image formats supported by the ImageMagick library. This includes but is not limited to: BMP, JPG, PNG, GIF, EPS, TIFF, DPX. See the manual page of ImageMagick for the full list of available formats. .PP \fBpfsinimgmagick\fR reads images or frames from files and writes \fIpfs\fR stream to the Standard Output. The \fIpfs\fR stream is usually piped to another program for further processing. To detect the format automatically based on the extension, use \fIpfsin\fR command. .PP The output of \fBpfsinimgmagick\fR is scaled to 0-1 range, unless '--absolute' option is specified. By default, the 'LUMINANCE' tag is set to 'DISPLAY' contents. Using the '--linear' switch you can force the inverse sRGB transformation to provide linear data. In this case the 'LUMINANCE' tag is set to 'RELATIVE' contents. '--absolute' switch can be used to convert pixels to absolute luminance values. .PP This command handles properly 'alpha' channel (transparency) stored in images. .PP Each file can contain a \%%d pattern, which is substituted with frame numbers. The pattern has the same syntax as C .I printf command. For example, you can use \%%04d to make the frame number four digit with proceedings zeros. You can select the frames using the following options (the options must be always given after the file name): .TP .B \--frames Range is given in mathlab / octave format: .B "startframe:step:endframe" Frame numbers start with .B "startframe" (default 0), are increased by .B "step" (default 1) and stop at .B "endframe" You can skip one of those values, for example .I "1:100" for frames 1,2,...,100 and .I 0:2: for frame 0,2,4,... up to the last file that exists. .TP .B \--skip-missing Skip up to ten frames in a row if corresponding files are missing. Otherwise the program stops reading sequence at the first file that does not exists. This switch does not apply to the first frame in a sequence. This switch can be useful if there is a rendered animation where some of the frame has not been generated. .TP .B \--linear, -l Converts pixel values to linear luminance (XYZ), assuming the sRGB color space for the input image. The maximum pixel value (255,255,255) is mapped to Y=1. \fILUMINANCE\fR tag is set to RELATIVE. .TP .B \--absolute , -a \fB--absolute\fR converts pixel values to an absolute linear luminance (XYZ), that is the color space, in which channel Y contains luminance given in cd/m^2. The sRGB color space is assumed for the input image. The maximum pixel value (255,255,255) is mapped to Y=\fI\fR. \fI\fR is typically set to 80 [cd/m^2] for a CRT monitor. \fILUMINANCE\fR tag is set to ABSOLUTE. \fB--absolute\fR process images almost the same as \fB--relative\fR, but additionally it scales all pixels by \fI\fR. .SH EXAMPLES .TP pfsinimgmagick frame\%%04d.dpx \--frames 0:10 | pfsview Read frames from files frame0000.dpx, frame0001.dpx, ..., frame0010.dpx and show them using pfsview. .SH BUGS pfsinimgmagick can not read frames from the Standard Input. .PP Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools .SH "SEE ALSO" .BR pfsin (1), .BR pfsout (1) .BR ImageMagick (1) pfstools-1.8.5/src/fileformat/pfsinpfm.cpp0000664000175000017500000001405210254027366015575 00000000000000/** * @brief Read files in PFM format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * The format description was based on: * http://netpbm.sourceforge.net/doc/pfm.html * * however the order of the lines in pfm file seems to be reversed - * from bottom to top * * does not handle big-endian files * * $Id: pfsinpfm.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include #include #include #include #define PROG_NAME "pfsinpfm" struct PFMHeader { int width, height; bool grayscale; float scale; }; PFMHeader readPFMHeader( FILE *fh ) { PFMHeader header; char headerID[2]; int read; read = fscanf( fh, "%c%c\n%d %d\n%f", &headerID[0], &headerID[1], &header.width, &header.height, &header.scale ); if( read != 5 ) throw pfs::Exception( "Wrong file header" ); if( !memcmp( "PF", headerID, 2 ) ) header.grayscale = false; else if( !memcmp( "Pf", headerID, 2 ) ) header.grayscale = true; else throw pfs::Exception( "Wrong PFM image type" ); read = fread( headerID, 1, 1, fh ); // Read a single EOL character if( read != 1 || headerID[0] != 0x0a ) throw pfs::Exception( "Wrong file header" ); if( header.scale > 0 ) throw pfs::Exception( "Can not handle big endian PFM files" ); return header; } void readPFMFileColor( FILE *fh, PFMHeader &header, float *R, float *G, float *B ) { const int lineSize = header.width*3; float *line = new float[lineSize]; for( int l = header.height-1; l >= 0; l-- ) { int read = fread( line, sizeof( float ), lineSize, fh ); if( read != lineSize ) throw pfs::Exception( "Unexpected EOF" ); for( int x = 0; x < header.width; x++ ) { const int lineOffset = l*header.width; R[lineOffset+x] = line[x*3+0]; G[lineOffset+x] = line[x*3+1]; B[lineOffset+x] = line[x*3+2]; } } delete[] line; if( header.scale != -1 ) { const float scaleFactor = fabs( header.scale ); for( int i = 0; i < header.width*header.height; i++ ) { R[i] *= scaleFactor; G[i] *= scaleFactor; B[i] *= scaleFactor; } } } void readPFMFileGrayscale( FILE *fh, PFMHeader &header, float *Y ) { for( int l = header.height-1; l >= 0; l-- ) { int read = fread( Y + header.width*l, sizeof( float ), header.width, fh ); if( read != header.width ) throw pfs::Exception( "Unexpected EOF" ); } if( header.scale != -1 ) { const float scaleFactor = fabs( header.scale ); for( int i = 0; i < header.width*header.height; i++ ) { Y[i] *= scaleFactor; } } } // ======== Main class QuietException { }; void printHelp() { fprintf( stderr, PROG_NAME " [--verbose] [--help]\n" "See man page for more information.\n" ); } void readFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; bool verbose = false; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "linear", no_argument, NULL, 'l' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = ""; pfs::FrameFileIterator it( argc, argv, "rb", NULL, stdin, optstring, cmdLineOptions ); int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'l': std::cerr << PROG_NAME << " warning: linearize option ignored for an HDR input!" << std::endl; break; case '?': throw QuietException(); case ':': throw QuietException(); } } while( true ) { pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) break; // No more frames PFMHeader header = readPFMHeader( ff.fh ); VERBOSE_STR << "reading file '" << ff.fileName << "'" << std::endl; pfs::Frame *frame = pfsio.createFrame( header.width, header.height ); if( header.grayscale ) { pfs::Channel *Y; Y = frame->createChannel( "Y" ); readPFMFileGrayscale( ff.fh, header, Y->getRawData() ); } else { pfs::Channel *X, *Y, *Z; frame->createXYZChannels( X, Y, Z ); readPFMFileColor( ff.fh, header, X->getRawData(), Y->getRawData(), Z->getRawData() ); pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); } it.closeFrameFile( ff ); frame->getTags()->setString("LUMINANCE", "RELATIVE"); const char *fileNameTag = strcmp( "-", ff.fileName )==0 ? "stdin" : ff.fileName; frame->getTags()->setString( "FILE_NAME", fileNameTag ); pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { readFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsoutpfm.10000664000175000017500000000214711071466566015365 00000000000000.TH "pfsoutpfm" 1 .SH NAME pfsoutpfm \- Write images or frames in OpenEXR format .SH SYNOPSIS .B pfsoutpfm ( [--frames ]) [...] .SH DESCRIPTION Use this command to write frames in PFM format. PFM format is used for HDR Shop plug-ins and is also supported by some recent versions of NetPBM package (pamtopfm and pfmtopam commands). Source pfs frames should be piped to the Standard Input. This command can handle both color (XYZ channels) and grayscale (Y channel) images. Details on the format of the pattern file names, which are used for saving multiple frames, can be found in the manual page of pfsoutppm. .SH EXAMPLES .TP pfsin memorial.hdr | pfsoutpfm memorial.pfm Converts from one HDR format to another .TP pfsin memorial.hdr | pfsextractchannels Y | pfsoutpfm memorial.pfm Stores memorial image as a grayscale PFM file. .SH "SEE ALSO" .BR pfsout (1) .BR pfsoutppm (1) .BR pfsinpfm (1) .SH BUGS pfsoutpfm may store floating point numbers incorrectly on big-endian machines. Please report bugs and comments on implementation to the discussion group http://groups.google.com/group/pfstools pfstools-1.8.5/src/fileformat/pfsoutjpeghdr.cpp0000664000175000017500000001777510332620703016645 00000000000000/** * @brief Write files in JPEG-HDR format * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Jan Otop, * * $Id: pfsoutjpeghdr.cpp,v 1.4 2005/11/04 08:54:27 rafm Exp $ */ #include #include #include #include #include #include extern "C" { #include } #define PROG_NAME "pfsoutjpeghdr" #define PFMEOL "\x0a" class QuietException { }; #define min(x,y) ( (x)<(y) ? (x) : (y) ) void printHelp() { fprintf( stderr, PROG_NAME " [--quality] [--correct] [--verbose] [--help]\n" "See man page for more information.\n" ); } void writeHDRJPEGGray( FILE *fh, int width, int height, float *Y, short quality, JHCorrMethod correction ) { jpeghdr_compress_struct jhinf; struct jpeg_error_mgr jerr; float *image; jhinf.cinfo.err = jpeg_std_error(&jerr); // Reassign error handling functions as desired jpeghdr_create_compress(&jhinf); jhinf.quality = quality; jhinf.correction = correction; jpeg_stdio_dest(&jhinf.cinfo, fh); image = (JHSAMPLE *)malloc(width * height * sizeof(JHSAMPLE)*3); for(int i=0;igetTags()->getString("LUMINANCE"); if( luminanceTag!=NULL && 0==strcmp(luminanceTag,"DISPLAY") ) { static bool show_once = false; if( !show_once ) { std::cerr << PROG_NAME << " warning: " << "display profiled content written to an HDR output" << std::endl; show_once=true; } } pfs::FrameFile ff = it.getNextFrameFile(); if( ff.fh == NULL ) { pfsio.freeFrame( frame ); break; // No more frames } VERBOSE_STR << "writing file (HDR) '" << ff.fileName << "'" << std::endl; pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X != NULL ) { // Has color pfs::Channel *R= NULL, *G = NULL, *B = NULL; // for clarity of the code R = X; G = Y; B = Z; pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, R, G, B ); writeHDRJPEGRGB(ff.fh, frame->getWidth(), frame->getHeight(), R->getRawData(), G->getRawData(), B->getRawData(), quality, correction, alpha, beta ); } else { Y = frame->getChannel( "Y" ); if( Y == NULL ) throw pfs::Exception( "Can not find color or grayscale channels in the pfs stream" ); writeHDRJPEGGray( ff.fh, frame->getWidth(), frame->getHeight(), Y->getRawData(), quality, correction ); } it.closeFrameFile( ff ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { writeFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/fileformat/pfsoutjpeghdr.10000664000175000017500000000441310401343566016212 00000000000000.TH "pfsoutjpeghdr" 1 .SH NAME pfsoutjpeghdr \- Write images or frames in JPEG-HDR format .SH SYNOPSIS .B pfsoutjpeghdr ( [--linear] [--quality ] [--correction ] [--frames ]) [...] .SH DESCRIPTION Use this command to write JPEG file with HDR extension. This software makes use of the High Dynamic Range Imaging Library from Sunnybrook Technologies Inc. (c) Sunnybrook Inc. 2005 .SH OPTIONS .TP .B \--quality , -q The \fI--quality\fR setting controls the overall compression/quality trade-off, with 100 being the maximum setting, producing the lowest losses and the largest output files. Quality settings below 70 may result in significant image degradation, and should be avoided in critical applications. Default: --quality=90 .TP .B \--correction , -c The \fI--correction\fR setting controls the algorithm used during downsampling of the HDR ratio image data. The default \fBprecorrect\fR option compensates for resampling errors by adjusting the tone-mapped image to maximize the accuracy of the HDR result. This option may sometimes induce modest halo artifacts in the tone-mapped image at lower quality settings. If the tone-mapped (backwards compatible) image is more important than the HDR version, the \fBpostcorrect\fR option may be used, instead. To avoid all artifacts from HDR resampling, specify the \fBfullsamp\fR option. This will result in slightly larger image files. Default: --correction=precorrect .TP .B \--alpha , -a ; --beta , -b The \fI--alpha\fR and \fI--beta\fR settings control color desaturation during tone-mapping, which will also permits super-saturated colors to pass through safely. (See the appendix of the paper by Ward and Simmons cited below for details.) Use --alpha < 1 to desaturate colors and --beta > 1 to enhance color saturation contrast. Any input color space will be converted to the standard YCC color space of JPEG, based on the CCIR-709 (sRGB) primaries. Default: --alpha=1, --beta=1. .SH EXAMPLES .TP pfsin memorial.hdr | pfsoutjpeghdr memorial.jpeg .SH BUGS Please report bugs and comments to Rafal Mantiuk . .SH "SEE ALSO" .BR pfsinjpeghdr (1) .BR "Subband Encoding of High Dynamic Range Imagery" by Ward and Simmons (www.anyhere.com/gward/papers/apgv04) pfstools-1.8.5/src/fileformat/pfsin.in0000755000175000017500000001212111652211626014707 00000000000000#!@BASH_PATH@ ############################################################ # Read any image and write pfs stream to the standard output ############################################################ if test -z "$1" || test "$1" = "--help"; then cat < [...] Recognized file formats and extensions: Radiance RGBE - .pic, .hdr TIFF (incl. LogLuv) - .tiff, .tif PNM, PPM - .ppm, .pnm JPEG - .jpeg, .jpg PNG - .png PFS - .pfs OpenEXR - .exr PFM - .pfm DPX - .dpx GIF - .gif BMP - .bmp EPS - .eps hdrgen - .hdrgen (multi-exposure sequence, see pfscalibration) Canon 350D RAW - .cr2 (and other camera RAW formats recognized by dcraw) See the man page for more information. EOF exit 1 fi #Arguments used for all images passed to pfsout global_arguments="" if test -n "$1"; then while test "${1:0:1}" = "-"; do #Handle options that require a parameter for par_opt in "--frames" "-f" "--absolute" "-a"; do if test "$1" = $par_opt; then if test -z "$2"; then echo >&2 "Required parameter missing after $par_opt" exit 1; fi global_arguments="$global_arguments $1" shift break; fi done global_arguments="$global_arguments $1" shift done fi while test "$1"; do extension="${1##*.}" file_pattern="$1" # Handle common arguments arguments extra_arguments=""; if test -n "$2"; then while test "${2:0:1}" = "-"; do #Handle options that require a parameter for par_opt in "--frames" "-f" "--absolute" "-a"; do if test "$2" = $par_opt; then if test -z "$3"; then echo >&2 "Required parameter missing after $par_opt" exit 1; fi extra_arguments="$extra_arguments $2" shift break; fi done extra_arguments="$extra_arguments $2" shift done fi case "$extension" in ("hdr"|"HDR"|"pic"|"PIC") pfsinrgbe "$file_pattern" $global_arguments $extra_arguments ;; ("ppm"|"PPM"|"pnm"|"PNM"|"pgm"|"PGM") pfsinppm "$file_pattern" $global_arguments $extra_arguments ;; ("tif"|"TIF"|"tiff"|"TIFF") ## Use internal pfsintiff if possible, if not - ImageMagick if which pfsintiff >/dev/null; then pfsintiff "$file_pattern" $global_arguments $extra_arguments elif which pfsinimgmagick >/dev/null; then pfsinimgmagick "$file_pattern" $global_arguments $extra_arguments else echo 1>&2 "$extension files unsupported. Compile pfstools with ImageMagick or libtiff." exit 1 fi ;; ("exr"|"EXR") pfsinexr "$file_pattern" $global_arguments $extra_arguments ;; ("pfm"|"PFM") pfsinpfm "$file_pattern" $global_arguments $extra_arguments ;; ("jpg"|"JPG"|"jpeg"|"JPEG") ## Use ImageMagick if possible, if not - netpbm if which pfsinimgmagick >/dev/null; then pfsinimgmagick "$file_pattern" $global_arguments $extra_arguments elif which jpegtopnm >/dev/null; then jpegtopnm "$file_pattern" | pfsinppm - $global_arguments $extra_arguments else echo 1>&2 "$extension files unsupported. Compile pfstools with ImageMagick or NetPBM." exit 1 fi ;; ("png"|"PNG") ## Use ImageMagick if possible, if not - netpbm if which pfsinimgmagick >/dev/null; then pfsinimgmagick "$file_pattern" $global_arguments $extra_arguments elif which pngtopnm >/dev/null; then pngtopnm "$file_pattern" | pfsinppm - $global_arguments $extra_arguments else echo 1>&2 "$extension files unsupported. Compile pfstools with ImageMagick or NetPBM." exit 1 fi ;; ("dpx"|"DPX"|"gif"|"GIF"|"bmp"|"BMP"|"eps"|"EPS") pfsinimgmagick "$file_pattern" $global_arguments $extra_arguments ;; ("pfs"|"PFS") cat "$file_pattern" | pfstag --set "FILE_NAME=${file_pattern}" ;; ("hdrgen"|"HDRGEN") pfsinhdrgen "$file_pattern" $global_arguments $extra_arguments ;; (*) if dcraw -i "$file_pattern" > /dev/null 2>&1; then pfsindcraw "$file_pattern" $global_arguments $extra_arguments else echo 1>&2 "Unknown extension: $extension" exit 1 fi ;; esac shift done pfstools-1.8.5/src/filter/0002755000175000017500000000000011652214415012456 500000000000000pfstools-1.8.5/src/filter/pfscut.10000664000175000017500000000366410470124537013777 00000000000000.TH "pfscut" 1 .SH NAME pfscut \- Extract a rectangle out of a frame in PFS stream .SH SYNOPSIS .B pfscut [--left ] [--right ] [--top ] [--bottom ] [--width ] [--height ] [--help] [x_ul y_ul x_br y_br] .SH DESCRIPTION Extract a rectangle out of each frame in PFS stream. You can either specify x and y coordinates of upper left and lower right corner (the coordinates start with 0 and rise in the left-to-right and up-to-botton directions) or give a combination of the options listed below. .SH OPTIONS .TP --left , -l Number of columns to be cut out from the left edge of an image. .TP --right , -r Number of columns to be cut out from the right edge of an image. .TP --top , -t Number of rows to be cut out from the top edge of an image. .TP --bottom , -b Number of rows to be cut out from the bottom edge of an image. .TP --width , -W Width of an output image. Note that --width can be mixed with either --left or --right option. .TP --height , -H Height of an output image. Note that --height can be mixed with either --top or --bottom option. .TP --help, -h Print a list of commandline options. .SH EXAMPLES .TP pfsin image.hdr | pfscut --left 20 --top 5 | pfsout out.hdr Cut out 20 columns from the left and 5 rows from the top edge of image.hdr and save frame as out.hdr. .TP pfsin image.hdr | pfscut --left 20 --width 400 | pfsout out.hdr Cut out 20 columns from the left edge of image.hdr, and create output image 400 pixels in width. .TP pfsin image.hdr | pfscut 0 0 511 511 | pfsout out.hdr Cut left-upper part of the image of the size 512x512 (note that coordinates start with 0 and 512 is the last row/column that is included in the resulting image). .TP .SH SEE ALSO .BR pfsin (1) .BR pfsout (1) .SH BUGS Please report bugs and comments to Dorota Zdrojewska . pfstools-1.8.5/src/filter/pfspanoramic.10000664000175000017500000000523110254027366015147 00000000000000.TH "pfspanoramic" 1 .SH NAME pfspanoramic \- Perform projective transformations of spherical images .SH SYNOPSIS .B pfspanoramic + [--width ] [--height ] [--oversample ] [--interpolate] [--xrotate ] [--yrotate ] [--zrotate ] .SH DESCRIPTION Transform spherical maps between various projections. Currently .BI polar (latitude-longitude), .BI angular (light probe), .BI mirrorball and .BI cylindrical are supported. The syntax for specifying the transformation is .RI \| source_projection \|+\| target_projection \|, where .RI \| source_projection \| is the current mapping that source image uses and .RI \| target_projection \| is the projection you'd like it to be transformed to. If the projection has some optional parameters, you can specify them with syntax: //...+//... As of now only .BI angular supports a parameter - .BI angle - which defines how many degrees from the viewing direction the projection should cover, e.g. angular+angular/angle=180 converts angular image to show only half of a hemisphere around the viewing direction. .SH OPTIONS .TP --width , -w .TP --height , -h Make the target image respectively pixels wide and/or high. If only one is specified, the other is computed from the target projection's typical W/H ratio. If neither is specified, the width is taken from the source image and height is computed as above. .TP --oversample , -o Oversample each target pixel x times, improving quality in areas that are scaled down with respect to the source image. Reasonable values are 2 to 5, while setting it higher may make the reprojection unbearably slow. .TP --interpolate, -i Use bilinear interpolation when sampling the source image. Increases quality in magnified areas. .TP --xrotate , -x Rotate the spherical image degrees around X axis. .TP --yrotate , -y Rotate the spherical image degrees around Y axis. .TP --zrotate , -z Rotate the spherical image degrees around Z axis. .SH EXAMPLES .TP pfsin grace_probe.hdr | pfspanoramic angular+polar -i -o 3 -y 90 -w 500 | pfsout grace.hdr Transform grace angular map to polar (latitude-longitude) projection applying bilinear interpolation and 3x3 oversampling, while rotating it by 90 degrees around Y axis. The image will be resized to 500x250 pixels (as the polar projection has 2:1 width-to-height ratio) and finally saved in grace.hdr. .SH "SEE ALSO" .BR pfsin (1) .BR pfsout (1) .SH BUGS Please report bugs and comments to Miloslaw Smyk . pfstools-1.8.5/src/filter/pfsextractchannels.cpp0000664000175000017500000000717110254027366017013 00000000000000/** * @brief Extract selected channels from pfs stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsextractchannels.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include #include #include #define PROG_NAME "pfsextractchannels" class QuietException { }; void printHelp() { fprintf( stderr, PROG_NAME " channel_name [Channel_name...] [--help]\n" "See man page for more information.\n" ); } static void errorCheck( bool condition, char *string ) { if( !condition ) { fprintf( stderr, PROG_NAME " error: %s\n", string ); throw QuietException(); } } struct ltstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; } }; void extractChannels( int argc, char* argv[] ) { pfs::DOMIO pfsio; static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { NULL, 0, NULL, 0 } }; std::set keepChannels; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "h", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case '?': throw QuietException(); case ':': throw QuietException(); } } errorCheck( optind < argc, "At least one channel must be specified" ); for( ;optind < argc; optind++ ) keepChannels.insert( argv[optind] ); while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames { // Check if the listed channels exist std::set::iterator it; for( it = keepChannels.begin(); it != keepChannels.end(); it++ ) if( frame->getChannel( *it ) == NULL ) { fprintf( stderr, PROG_NAME " error: Channel %s does not exist\n", *it ); throw QuietException(); } } { // Remoe not listed channels pfs::ChannelIterator *it = frame->getChannels(); while( it->hasNext() ) { pfs::Channel *channel = it->getNext(); if( keepChannels.find(channel->getName() ) == keepChannels.end() ) frame->removeChannel( channel ); } } pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { extractChannels( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfspad.cpp0000775000175000017500000001760310736434641014400 00000000000000/** * @brief Add borders to images in PFS stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Dorota Zdrojewska, * */ #include #include #include #include #include #define PROG_NAME "pfspad" #define UNSP INT_MAX #define MIN 0 #define MAX 1 #define SIZE 2 #define X 0 #define Y 1 #define Z 2 using namespace std; class QuietException { }; static struct option cmdLineOptions[] = { {"help", no_argument, NULL, 'h'}, {"left", required_argument, NULL, 'l'}, {"right", required_argument, NULL, 'r'}, {"top", required_argument, NULL, 't'}, {"bottom", required_argument, NULL, 'b'}, {"width", required_argument, NULL, 'W'}, {"height", required_argument, NULL, 'H'}, {"R", required_argument, NULL, 'R'}, {"G", required_argument, NULL, 'G'}, {"B", required_argument, NULL, 'B'}, {"Y", required_argument, NULL, 'Y'}, {NULL, 0, NULL, 0} }; void printHelp() { fprintf(stderr, PROG_NAME ":\n" "\t[--left ]\n" "\t[--right ]\n" "\t[--top ]\n" "\t[--bottom ]\n" "\t[--width ]\n" "\t[--height \n" "\t[--R \n" "\t[--G \n" "\t[--B \n" "\t[--Y \n" "\t[--help]\n" "See man page for more information.\n"); } void calcBorders (int min, int max, int size, int inSize, int flag, int *out) { if (min<0 || max<0) throw pfs::Exception("You cannot add negative number of pixels"); if (sizemax) ? max : val; return out; } void pfspad (int argc, char* argv[]) { pfs::DOMIO pfsio; int left=UNSP, right=UNSP, top=UNSP, bottom=UNSP, //size of borders (in pixels) width=UNSP, height=UNSP; // size of an output image float R=1e-4, G=1e-4, B=1e-4, luminance=1.0; // color of borders in RGB or luminance mode float XYZ[3]; bool optLuminanceMode=false, RGBMode=false; int optionIndex=0; while (1) { int c=getopt_long(argc, argv, "hl:r:t:b:W:H:R:G:B:Y:", cmdLineOptions, &optionIndex); if(c==-1) break; switch(c) { case 'h': printHelp(); throw QuietException(); break; case 'l': left=atoi(optarg); break; case 'r': right=atoi(optarg); break; case 't': top=atoi(optarg); break; case 'b': bottom=atoi(optarg); break; case 'W': width=atoi(optarg); if (width<=0) throw pfs::Exception("Size of an output image cannot be negative or equal to 0"); break; case 'H': height=atoi(optarg); if (height<=0) throw pfs::Exception("Size of an output image cannot be negative or equal to 0"); break; case 'R': R=atof(optarg); RGBMode=true; if(R<=(1e-4)) R=1e-4; break; case 'G': G=atof(optarg); RGBMode=true; if(G<=(1e-4)) G=1e-4; break; case 'B': B=atof(optarg); RGBMode=true; if(B<=(1e-4)) B=1e-4; break; case 'Y': luminance=atof(optarg); optLuminanceMode = true; if(luminance<=(1e-4)) luminance=1e-4; break; } } if(optLuminanceMode && !RGBMode) { R=1; G=1; B=1; } //transform RGB colors to YXZ color space and multiply by luminance XYZ[X]=luminance*(0.4124*R + 0.3576*G + 0.1805*B); XYZ[Y]=luminance*(0.2126*R + 0.7152*G + 0.0722*B); XYZ[Z]=luminance*(0.0193*R + 0.1192*G + 0.9505*B); XYZ[X]=clamp(XYZ[X],1e-4,100000000.0); XYZ[Y]=clamp(XYZ[Y],1e-4,100000000.0); XYZ[Z]=clamp(XYZ[Z],1e-4,100000000.0); pfs::Channel *inX, *inY, *inZ, *outX, *outY, *outZ; while (1) { pfs::Frame *inFrame = pfsio.readFrame(stdin); if (inFrame==NULL) break; // no more frames inFrame->getXYZChannels(inX, inY, inZ); int inWidth=inFrame->getWidth(); int inHeight=inFrame->getHeight(); //calculate borders to add int leftRight[3], topBottom[3]; calcBorders(left, right, width, inWidth, 1, leftRight); calcBorders(top, bottom, height, inHeight, 0, topBottom); int lCol=leftRight[MIN]; int rCol=leftRight[MAX]; int tRow=topBottom[MIN]; int bRow=topBottom[MAX]; int outWidth=leftRight[SIZE]; int outHeight=topBottom[SIZE]; pfs::Frame *outFrame = pfsio.createFrame(outWidth, outHeight); if (inX != NULL) { //XYZ mode outFrame->createXYZChannels(outX, outY, outZ); for (int i=0; i=tRow && i<=bRow && j>=lCol && j<=rCol) { (*outX)(j, i)=(*inX)(j-lCol,i-tRow); (*outY)(j, i)=(*inY)(j-lCol,i-tRow); (*outZ)(j, i)=(*inZ)(j-lCol,i-tRow); } else { (*outX)(j, i)=XYZ[X]; (*outY)(j, i)=XYZ[Y]; (*outZ)(j, i)=XYZ[Z]; } } else if (inY=inFrame->getChannel("Y")) { // only luminance outY=outFrame->createChannel("Y"); for (int i=0; i=tRow && i<=bRow && j>=lCol && j<=rCol) (*outY)(j, i)=(*inY)(j-lCol,i-tRow); else (*outY)(j, i)=luminance; } else throw pfs::Exception("Missing X, Y, Z channels in the PFS stream"); pfs::copyTags(inFrame, outFrame); pfsio.writeFrame(outFrame, stdout); pfsio.freeFrame(inFrame); pfsio.freeFrame(outFrame); } } int main (int argc, char* argv[]) { try { pfspad(argc, argv); } catch (pfs::Exception ex) { fprintf (stderr, PROG_NAME " error: %s\n", ex.getMessage()); return EXIT_FAILURE; } catch (QuietException ex) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfsdisplayfunction.10000664000175000017500000001103411026307540016400 00000000000000.TH "pfsdisplayfunction" 1 .SH NAME pfsdisplayfunction \- Apply display function to color or gray-scale images .SH SYNOPSIS .B pfsdisplayfunction [\fB--display-function\fR <\fIdf-spec\fR>] [--\fBto-pixels\fR | --\fBto-luminance\fR] [--\fBhelp\fR] [--\fBverbose\fR] .SH DESCRIPTION Use this command to convert pixel values to luminance / radiance units displayed on a monitor or to perform inverse conversion. This command is useful in combination with the HDR-VDP to convert LDR images to luminance maps representing images shown on a particular display. The display function specification is identical to the specification used in the \fIpfstmo_mantiuk08\fR tone mapping operator (from the pfstmo package). .PP If neither --\fBto-luminance\fR nor --\fBto-pixels\fR option is specified, the appropriate conversion direction will be deducted from the LUMINANCE tag in the pfs stream. .SH OPTIONS .TP --\fBto-luminance\fR, -\fBl\fR Convert pixel values to absolute luminance / radiance units. For RGB images the same display function is applied in each color channel. .TP --\fBto-pixels\fR, -\fBp\fR Convert absolute luminance / radiance units to pixel values. For RGB images the same display function is applied in each color channel. .TP \fB--display-function\fR <\fIdf-spec\fR>, \fB-d\fR <\fIdf-spec\fR> The display function describes how output luminance of a display changes with pixel values. If no parameter is given, the command assumes \fB-df\ pd=lcd\fR (see \fIPre-defined display\fR below). There are several ways to specify the display function: .TP \fIGamma-gain-black-ambient display model\fR .IP g=:l=:b=:k=:a=[:n=] .IP Gamma-gain-black-ambient model can approximate a range of displays and is a compact way to specify a display function. It assumes that a display function has the following form: .IP L_d(I) = (l-b)*I^gamma + b + k/pi*a .IP The parameters are as follows: .RS .PD 0 .TP 5 \fBg\fR - gamma or exponent of a display function (default 2.2, usually from 1.8 to 2.8) .TP 5 \fBl\fR - peak luminance of a display in cd/m^2 (default 100, from 80 for CRTs to 500 or more for newer displays) .TP 5 \fBb\fR - black level, which is luminance of a black pixel when the display is on (default 1, usually from 0.3 to 1 cd/m^2) .TP 5 \fBk\fR - reflectivity of a screen (assuming that it is diffuse) (default 0.01, usually about 0.01 (1%) for LCD displays, more for CRTs) .TP 5 \fBa\fR - ambient illumination in lux. Typical values are: .RS .IP 50\ lux Family living room (dim, \fBdefault\fR) .IP 400\ lux A brightly lit office .IP 32000\ lux Sunlight on an average day (min.) .IP 100000\ lux Sunlight on an average day (max.) .RE .RE .PD .TP \fIPre-defined display\fR .IP \fBpd\fR=\fI\fI .IP Use pre-defined display type. This options are for convenience only and they do not mean to accurately model the response of a particular display. The following \fIdisplay type\fRs are recognized: .RS .TP \fBlcd_office\fR (g=2.2, l=100, b=0.8, k=0.01, a=400 ) lcd set to "office" mode seen in bright environment .PD 0 .TP \fBlcd\fR (g=2.2, l=200, b=0.8, k=0.01, a=60 ) typical lcd seen in dim environment (\fBdefault\fR) .TP \fBlcd_bright\fR (g=2.6, l=500, b=0.5, k=0.01, a=10 ) newer LCD TV seen in dark environment .TP \fBcrt\fR (g=2.2, l=80, b=1, k=0.02, a=60 ) CRT monitor seen in dim environment .PD .RE .IP The parameters in the parenthesis are the same as for the gamma-gain-black-ambient model explained above. .TP \fILookup-table\fR .IP \fBlut\fR=\fI\fI .IP This is the most accurate specification of the display response function, but requires measuring it with a luminance meter. The lookup table should account also for ambient light, so that it is recommended to use the luminance meter that can measure screen luminance from a distance, such as Minolta LS-100 (as opposed to those that use rubber tube touching a display that eliminates the influence of ambient light). The must be a comma-separated text file in a format (CSV) with two columns: first column represents pixel values (from 0.0 to 1.0) and the second physical luminance in cd/m^2. Both the pixel value and the luminance should increase in each raw. .SH EXAMPLES .TP pfsin barbara.jpg | pfsdisplayfunction -l -d pd:crt -v | pfsout barbara_crt.hdr .IP Convert barbara.jpg image from pixel values to a luminance map of the image shown on a CRT monitor and store the map as an HDR image. .SH "SEE ALSO" .BR pfsgamma (1) .BR pfstmo_mantiuk08 (1) .SH BUGS Please report bugs and comments to the pfstools discussion group (http://groups.google.com/group/pfstools). pfstools-1.8.5/src/filter/pfssize.cpp0000664000175000017500000002734711140175756014610 00000000000000/** * @brief Resize images in PFS stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfssize.cpp,v 1.4 2009/01/29 00:44:30 rafm Exp $ */ #include #include #include #include #include #include #include "config.h" #define PROG_NAME "pfssize" #define ROUNDING_ERROR 0.000001 class QuietException { }; class ResampleFilter { public: /** * Size of the filter in samples. */ virtual float getSize() = 0; /** * Get value of the filter for x. x is always positive. */ virtual float getValue( const float x ) = 0; virtual ~ResampleFilter() { } }; void resize( const pfs::Array2D *src, pfs::Array2D *dest ); void resampleMitchell( const pfs::Array2D *in, pfs::Array2D *out ); void resampleArray( const pfs::Array2D *in, pfs::Array2D *out, ResampleFilter *filter ); inline float max( float a, float b ) { return a > b ? a : b; } inline float min( float a, float b ) { return a < b ? a : b; } // --------- Filters -------- class MitchellFilter : public ResampleFilter { public: float getSize() { return 2; } float getValue( const float x ) { const float B = 0.3333f, C = 0.3333f; const float x2 = x*x; if( x < 1 ) return 1.f/6.f * ( (12-9*B-6*C)*x2*x + (-18+12*B+6*C)*x2 + (6-2*B) ); if( x >=1 && x < 2 ) return 1.f/6.f * ( (-B-6*C)*x2*x + (6*B + 30*C)*x2 + (-12*B-48*C)*x + (8*B+24*C) ); return 0; } }; class LinearFilter : public ResampleFilter { public: float getSize() { return 1; } float getValue( const float x ) { if( x < 1 ) return 1 - x; return 0; } }; class BoxFilter : public ResampleFilter { public: float getSize() { return 0.5; } float getValue( const float x ) { return 1; } }; void printHelp() { fprintf( stderr, PROG_NAME " [--x ] [--y ] [--ratio ] [--verbose] [--help]\n" "See man page for more information.\n" ); } static void errorCheck( bool condition, const char *string ) { if( !condition ) { fprintf( stderr, PROG_NAME " error: %s\n", string ); throw QuietException(); } } static int getIntParam( const char *str, const char *paramName ) { char *endp; int val = strtol( optarg, &endp, 10 ); if( endp == optarg ) { std::ostringstream oss; oss << "Bad value for " << paramName << " argument"; throw pfs::Exception( oss.str().c_str() ); } return val; } static float getFloatParam( const char *str, const char *paramName ) { char *endp; float val = strtof( optarg, &endp ); if( endp == optarg ) { std::ostringstream oss; oss << "Bad value for " << paramName << " argument"; throw pfs::Exception( oss.str().c_str() ); } return val; } void resizeFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; float ratio = -1; int xSize = -1; int ySize = -1; int minX = -1; int maxX = -1; int minY = -1; int maxY = -1; bool verbose = false; ResampleFilter *filter = NULL; static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "x", required_argument, NULL, 'x' }, { "y", required_argument, NULL, 'y' }, { "maxx", required_argument, NULL, '1' }, { "maxy", required_argument, NULL, '2' }, { "minx", required_argument, NULL, '3' }, { "miny", required_argument, NULL, '4' }, { "ratio", required_argument, NULL, 'r' }, { "filter", required_argument, NULL, 'f' }, { NULL, 0, NULL, 0 } }; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "x:y:r:f:", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'x': xSize = getIntParam( optarg, "x" ); break; case 'y': ySize = getIntParam( optarg, "y" ); break; case 'r': ratio = getFloatParam( optarg, "ratio" ); break; case '1': maxX = getIntParam( optarg, "maxx" ); break; case '2': maxY = getIntParam( optarg, "maxy" ); break; case '3': minX = getIntParam( optarg, "minx" ); break; case '4': minY = getIntParam( optarg, "miny" ); break; case 'f': if( !strcasecmp( optarg, "LINEAR" ) ) { filter = new LinearFilter(); } else if( !strcasecmp( optarg, "MITCHELL" ) ) { filter = new MitchellFilter(); } else if( !strcasecmp( optarg, "BOX" ) ) { filter = new BoxFilter(); } else { throw pfs::Exception( "Unknown filter. Possible values: LINEAR, BOX, MITCHELL" ); } break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( filter == NULL ) filter = new LinearFilter(); bool isMinMax = (minX!=-1) || (maxX!=-1) || (minY!=-1) || (maxY!=-1); errorCheck( (minX==-1 || maxX == -1 || minX <= maxX) && (minY==-1 || maxY==-1 || minY <= maxY), "Min value must be lower than max value" ); errorCheck( (ratio != -1) ^ (xSize != -1 || ySize != -1) ^ isMinMax, "Specify either size or ratio or min/max sizes" ); errorCheck( ratio == -1 || ratio > 0 , "Wrong scaling ratio" ); // bool firstFrame = true; pfs::Frame *resizedFrame = NULL; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); // pfs::Channel *dX, *dY, *dZ; // if( firstFrame ) { int new_x, new_y; if( ratio != -1 ) { new_x = (int)(frame->getWidth()*ratio); new_y = (int)(frame->getHeight()*ratio); } else { if( isMinMax ) { // Min/max sizes given new_x = frame->getWidth(); new_y = frame->getHeight(); float mm_ratio = (float)new_x/(float)new_y; if( minX != -1 && new_x < minX ) { new_x = minX; new_y = (int)((float)new_x/mm_ratio); } if( minY != -1 && new_y < minY ) { new_y = minY; new_x = (int)((float)new_y*mm_ratio); } if( maxX != -1 && new_x > maxX ) { new_x = maxX; new_y = (int)((float)new_x/mm_ratio); } if( maxY != -1 && new_y > maxY ) { new_y = maxY; new_x = (int)((float)new_y*mm_ratio); } } else { // Size given new_x = xSize; new_y = ySize; if( new_x == -1 ) new_x = (int)((float)frame->getWidth() * (float)ySize / (float)frame->getHeight()); else if( new_y == -1 ) new_y = (int)((float)frame->getHeight() * (float)xSize / (float)frame->getWidth()); } } errorCheck( new_x > 0 && new_y > 0 && new_x <= 65536 && new_y <= 65536, "Wrong frame size" ); errorCheck( ((frame->getWidth() <= new_x) && (frame->getHeight() <= new_y)) || ((frame->getWidth() >= new_x) && (frame->getHeight() >= new_y)), "Can upsample / downsample image only in both dimensions simultaneously" ); if( verbose ) fprintf( stderr, "New size: %d x %d \n", new_x, new_y ); resizedFrame = pfsio.createFrame( new_x, new_y ); // firstFrame = false; // } pfs::ChannelIterator *it = frame->getChannels(); while( it->hasNext() ) { pfs::Channel *originalCh = it->getNext(); pfs::Channel *newCh = resizedFrame->createChannel( originalCh->getName() ); resampleArray( originalCh, newCh, filter ); } pfs::copyTags( frame, resizedFrame ); pfsio.writeFrame( resizedFrame, stdout ); pfsio.freeFrame( frame ); } pfsio.freeFrame( resizedFrame ); delete filter; } void upsampleArray( const pfs::Array2D *in, pfs::Array2D *out, ResampleFilter *filter ) { float dx = (float)in->getCols() / (float)out->getCols(); float dy = (float)in->getRows() / (float)out->getRows(); float pad; float filterSamplingX = max( modff( dx, &pad ), 0.01f ); float filterSamplingY = max( modff( dy, &pad ), 0.01f ); const int outRows = out->getRows(); const int outCols = out->getCols(); const float inRows = (float)in->getRows(); const float inCols = (float)in->getCols(); const float filterSize = filter->getSize(); // TODO: possible optimization: create lookup table for the filter float sx, sy; int x, y; for( y = 0, sy = -0.5f + dy/2; y < outRows; y++, sy += dy ) for( x = 0, sx = -0.5f + dx/2; x < outCols; x++, sx += dx ) { float pixVal = 0; float weight = 0; for( float ix = max( 0, ceilf( sx-filterSize ) ); ix <= min( floorf(sx+filterSize), inCols-1 ); ix++ ) for( float iy = max( 0, ceilf( sy-filterSize ) ); iy <= min( floorf( sy+filterSize), inRows-1 ); iy++ ) { float fx = fabs( sx - ix ); float fy = fabs( sy - iy ); const float fval = filter->getValue( fx )*filter->getValue( fy ); pixVal += (*in)( (int)ix, (int)iy ) * fval; weight += fval; } if( weight == 0 ) { fprintf( stderr, "%g %g %g %g\n", sx, sy, dx, dy ); } // assert( weight != 0 ); (*out)(x,y) = pixVal / weight; } } void downsampleArray( const pfs::Array2D *in, pfs::Array2D *out ) { const float inRows = (float)in->getRows(); const float inCols = (float)in->getCols(); const int outRows = out->getRows(); const int outCols = out->getCols(); const float dx = (float)in->getCols() / (float)out->getCols(); const float dy = (float)in->getRows() / (float)out->getRows(); const float filterSize = 0.5; float sx, sy; int x, y; for( y = 0, sy = dy/2-0.5f; y < outRows; y++, sy += dy ) for( x = 0, sx = dx/2-0.5f; x < outCols; x++, sx += dx ) { float pixVal = 0; float w = 0; for( float ix = max( 0, ceilf( sx-dx*filterSize ) ); ix <= min( floorf( sx+dx*filterSize ), inCols-1 ); ix++ ) for( float iy = max( 0, ceilf( sy-dx*filterSize ) ); iy <= min( floorf( sy+dx*filterSize), inRows-1 ); iy++ ) { pixVal += (*in)( (int)ix, (int)iy ); w += 1; } (*out)(x,y) = pixVal/w; } } void resampleArray( const pfs::Array2D *in, pfs::Array2D *out, ResampleFilter *filter ) { if( in->getCols() == out->getCols() && in->getRows() == out->getRows() ) pfs::copyArray( in, out ); else if( in->getCols() < out->getCols() || in->getRows() < out->getRows() ) upsampleArray( in, out, filter ); else downsampleArray( in, out ); } int main( int argc, char* argv[] ) { try { resizeFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfstag.10000664000175000017500000000225410754047722013756 00000000000000.TH "pfstag" 1 .SH NAME pfstag \- Set or remove tags to/from pfs stream .SH SYNOPSIS .B pfstag [--set [channel:]name=value] [--remove [channel:]name] .SH DESCRIPTION Use this command to set or remove tags from the pfs-stream. Tags are used to add additional information to pfs frames and they are in the format: 'name=value'. To learn more about tags, read 'Specification of the PFS File Format'. Tags are set/removed to/from all pfs frames in the stream. Note that currently only OpenEXR file format supports tags. .SH OPTIONS .TP --set [channel:]name=value], -s [channel:]name=value], --add [channel:]name=value] Change existing or add a new tag of the given name. If no channel is given, tags are added to the frame. .TP --remove [channel:]name], -r [channel:]name] Remove tag of the given name. Ignore if the tag does not exist. If no channel is given, tags are removed from the frame. .SH EXAMPLES .TP pfsin memorial.hdr | pfstag --add "EXTRA_INFO=foo" | pfsout memorial_ei.exr Add tag "EXTRA_INFO=foo" to the memorial image and save it as memorial_ei.exr. .SH "SEE ALSO" .BR pfsin (1) .BR pfsout (1) .SH BUGS Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/filter/pfsflip.10000664000175000017500000000155410254027366014134 00000000000000.TH "pfsflip" 1 .SH NAME pfsflip \- Flip images horizontally and/or vertically. .SH SYNOPSIS .B pfsflip [--h] [--v] [--help] .SH DESCRIPTION Use this command to flip images from a stream of pfs. The --h option results in a horizontal exchange, and the --v option results in a vertical exchange. Both options may be applied, which is equivalent to rotation of the image 180 degrees. .SH OPTIONS .TP --h, -h Flip the image horizontally. .TP --v, -v Flip the image vertically. .SH EXAMPLES .TP pfsin memorial.hdr | pfsflip -h -v | pfsout memorial_gc.hdr Flip memorial image horizontally and vertically (rotate the image 180 degrees) and save to memorial_gc.hdr. .SH "NOTES" Notice that either --h or --v must be specified. .SH "SEE ALSO" .BR pfsin(1) .BR pfsout(1) .BR pfsrotate(1) .SH BUGS Please report bugs and comments to Alexander Efremov . pfstools-1.8.5/src/filter/pfsabsolute.10000664000175000017500000000360610254027366015020 00000000000000.TH "pfsabsolute" 1 .SH NAME pfsabsolute \- Convert luminance in images to absolute measure .SH SYNOPSIS .B pfsabsolute [] [--verbose] [--help] .SH DESCRIPTION \fBpfsabsolute\fR applies all necessary operations to convert an image from relative luminance (tag LUMINANCE is RELATIVE) or display-dependent luma (tag LUMINANCE is DISPLAY) to absolute luminance values. When the luminance in an image is absolute (tag LUMINANCE set to ABSOLUTE), the Y channel represents physical luminance in cd/m^2. Absolute luminance levels are useful for some tone mapping algorithms and also for image or video compression. The argument \fB\fR denotes the level of luminance that relative luminance \fB\fR should be rescaled to. The luminance is in fact multiplied by the ratio /. \fB\fR is normally relative luminance checked with pfsview in the spot where the absolute luminance \fB\fR is measured, known or guessed. If \fB\fR is omitted, the value 1 is assumed, so \fB\fR is just a scaling factor. In case if display-depended luma (tag LUMINANCE is DISPLAY), the inverse gamma correction is applied (assuming sRGB color space). In such case \fB\fR is usually the maximum luminance of a display (e.g. 80 cd/m^2). This command always sets LUMINANCE tag to ABSOLUTE. .SH EXAMPLES .TP pfsin memorial.hdr | pfsabsolute 20 0.04 | pfsview Multiply luminance in memorial image, so that relative luminance 0.04 becomes 20 cd/m^2. Normally, the value 0.04 is check using pfsview in the spot, where the absolute luminance (which equals in this case 20 cd/m^2) is known. .TP pfsin lena.png | pfsabsolute 80 | pfsview Convert lena image from sRGB color space to absolute XYZ, assuming maximum luminance of the monitor 80 cd/m^2. .SH "SEE ALSO" .BR pfsgamma (1) .BR pfsinppm (1) .SH BUGS Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/filter/pfsgamma.10000664000175000017500000000377311026307540014262 00000000000000.TH "pfsgamma" 1 .SH NAME pfsgamma \- Apply gamma correction to color or gray-scale images .SH SYNOPSIS .B pfsgamma [--\fBgamma\fR | --\fBinverse-gamma\fR ] [--\fBmul\fR ] .SH DESCRIPTION Use this command to gamma correct a stream of pfs images. Gamma correction is equivalent to raising value of R, G and B (or Y for gray-scale images) channels to 1/gamma power. More information on gamma correction can be found at: .PP http://www.poynton.com/notes/colour_and_gamma/GammaFAQ.html .PP This command can work on color images, in which case XYZ channels are transformed to RGB space, then they are gamma corrected before they are converted back to XYZ. For gray-scale images (only Y channel and XZ missing) gamma correction is applied only to Y channel. .PP Data can be multiplied by an optional multiplier \fBbefore\fR gamma correction. .PP Note: gamma correction will set the 'LUMINANCE' tag to 'DISPLAY' thus cancelling any sRGB correction when saving to LDR files (like PPM, TIFF). This will also cause a warning message when saving to HDR files, because the intensities after gamma correction are not linearly related to luminance any more. .SH OPTIONS .TP --\fBgamma\fR , -\fBg\fR Perform gamma correction (input^(1/gamma)). This can be used to convert images from relative luminance or radiance to pixel values. Default value: 1.0 .TP --\fBinverse-gamma\fR , -\fBi\fR Perform inverse gamma correction (input^(gamma)). This can be used to convert images from pixel values to relative radiance or luminance. .TP --\fBmul\fR , -\fBm\fR Multiply data by this value before gamma correction. Default value: 1 .SH EXAMPLES .TP pfsin memorial.hdr | pfsgamma -g 1.8 -m 10 | pfsout memorial_gc.ppm .IP Multiply memorial image by 10, gamma correct it and save to memorial_gc.ppm. .SH "SEE ALSO" .BR pfsin (1) .BR pfsout (1) .BR pfsdisplayfunction (1) .SH BUGS Please report bugs and comments to the pfstools discussion group (http://groups.google.com/group/pfstools). pfstools-1.8.5/src/filter/display_function.cpp0000664000175000017500000001661011417303446016462 00000000000000/** * @brief Display Adaptive TMO * * From: * Rafal Mantiuk, Scott Daly, Louis Kerofsky. * Display Adaptive Tone Mapping. * To appear in: ACM Transactions on Graphics (Proc. of SIGGRAPH'08) 27 (3) * http://www.mpi-inf.mpg.de/resources/hdr/datmo/ * * This file is a part of PFSTMO package. * ---------------------------------------------------------------------- * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: display_function.cpp,v 1.2 2010/07/14 09:45:10 rafm Exp $ */ #include #include #include #include #include #include "display_function.h" static void removeCommandLineArg( int &argc, char* argv[], int firstArgToRemove, int numArgsToRemove ); // ========== GGBA Display Function ============== DisplayFunctionGGBA::DisplayFunctionGGBA( float gamma, float L_max, float L_black, float E_amb, float screen_refl ) { init( gamma, L_max, L_black, E_amb, screen_refl ); } void DisplayFunctionGGBA::init( float gamma, float L_max, float L_black, float E_amb, float screen_refl ) { this->gamma = gamma; this->L_max = L_max; this->L_black = L_black; this->E_amb = E_amb; this->screen_refl = screen_refl; this->L_offset = L_black + screen_refl/M_PI*E_amb; } DisplayFunctionGGBA::DisplayFunctionGGBA( const char *predefined ) { if( !strcasecmp( predefined, "lcd_office" ) ) { init( 2.2f, 100, 0.8, 400, 0.01 ); } else if( !strcasecmp( predefined, "lcd" ) ) { init( 2.2f, 200, 0.8, 60, 0.01 ); } else if( !strcasecmp( predefined, "lcd_bright" ) ) { init( 2.6f, 500, 0.5, 10, 0.01 ); } else if( !strcasecmp( predefined, "crt" ) ) { init( 2.2f, 80, 1, 60, 0.02 ); } else { throw pfs::Exception( "Unknown display type. Recognized types: lcd_office, lcd, lcd_bright, crt." ); } } void DisplayFunctionGGBA::print( FILE *fh ) { fprintf( fh, "Display function: gamma-gain-black-ambient\n" ); fprintf( fh, " gamma = %g\t L_max = %g\t L_black = %g\n", (double)gamma, (double)L_max, (double)L_black ); fprintf( fh, " E_amb = %g\t k = %g\n", (double)E_amb, (double)screen_refl ); } float DisplayFunctionGGBA::inv_display( float L ) { if( L < L_offset ) L = L_offset; if( L > (L_offset+L_max) ) L = L_offset + L_max; return powf( (L - L_offset)/(L_max-L_black), 1/gamma ); } float DisplayFunctionGGBA::display( float pix ) { if( pix < 0 ) pix = 0; if( pix > 1 ) pix = 1; return pow( pix, gamma ) * (L_max-L_black) + L_offset; } // ========== LUT Display Function ============== static const size_t max_lut_size = 4096; DisplayFunctionLUT::DisplayFunctionLUT( const char *file_name ) : pix_lut( NULL ), L_lut( NULL ) { FILE *fh = fopen( file_name, "r" ); if( fh == NULL ) throw pfs::Exception( "Cannot open lookup-table file" ); L_lut = new float[max_lut_size]; pix_lut = new float[max_lut_size]; const size_t max_line = 100; char buf[max_line]; int i = 0; while( fgets( buf, max_line, fh ) != NULL ) { float p_buf, L_buf; if( sscanf( buf, "%f%*[ ,;]%f\n", &p_buf, &L_buf ) != 2 ) continue; if( p_buf < 0 || p_buf > 1 ) throw pfs::Exception( "Improper LUT: pixel values must be from 0 to 1" ); if( L_buf <= 0 ) throw pfs::Exception( "Improper LUT: luminance must be greater than 0" ); L_lut[i] = log10( L_buf ); pix_lut[i] = p_buf; i++; if( i >= max_lut_size ) throw pfs::Exception( "LUT too large (more than 4096 entries)" ); } lut_size = i; if( pix_lut[0] != 0 || pix_lut[lut_size-1]!= 1 ) throw pfs::Exception( "The first and last LUT entries for pixel value should be 0 and 1" ); } DisplayFunctionLUT::~DisplayFunctionLUT() { delete []pix_lut; delete []L_lut; } inline float bin_search_interp( float x, const float *lut_x, const float *lut_y, const int lutSize ) { if( x <= lut_x[0] ) return lut_y[0]; if( x >= lut_x[lutSize-1] ) return lut_y[lutSize-1]; size_t l = 0, r = lutSize; while( true ) { size_t m = (l+r)/2; if( m == l ) break; if( x < lut_x[m] ) r = m; else l = m; } return lut_y[l] + (lut_y[l+1]-lut_y[l])*(x-lut_x[l])/(lut_x[l+1]-lut_x[l]); } float DisplayFunctionLUT::inv_display( float L ) { return bin_search_interp( log10( L ), L_lut, pix_lut, lut_size ); } float DisplayFunctionLUT::display( float pix ) { return pow( 10, bin_search_interp( pix, pix_lut, L_lut, lut_size ) ); } void DisplayFunctionLUT::print( FILE *fh ) { fprintf( fh, "Display function: lookup-table\n" ); fprintf( fh, " L_min = %g \tL_max = %g\n", (double)pow( 10, L_lut[0] ), (double)pow( 10, L_lut[lut_size-1] ) ); } // ========== Command line parsing ============== DisplayFunction *createDisplayFunctionFromArgs( int &argc, char* argv[] ) { DisplayFunction *df = 0; for( int i=1 ; i= argc ) throw pfs::Exception( "missing display function specification" ); float gamma = 2.2f, L_max = 100.f, L_black = 1.f, k = 0.01, E_amb = 50; bool GGBA_model = true; char *token; token = strtok( argv[i+1], ":" ); while( token != NULL ) { if( !strncmp( token, "pd=", 3 ) ) { df = new DisplayFunctionGGBA( token+3 ); GGBA_model = false; break; } else if( !strncmp( token, "lut=", 4 ) ) { df = new DisplayFunctionLUT( token+4 ); GGBA_model = false; break; } else if( !strncmp( token, "g=", 2 ) ) { gamma = strtod( token+2, NULL ); } else if( !strncmp( token, "l=", 2 ) ) { L_max = strtod( token+2, NULL ); } else if( !strncmp( token, "b=", 2 ) ) { L_black = strtod( token+2, NULL ); } else if( !strncmp( token, "k=", 2 ) ) { k = strtod( token+2, NULL ); } else if( !strncmp( token, "a=", 2 ) ) { E_amb = strtod( token+2, NULL ); } else { throw pfs::Exception( "Bad display type specification" ); } token = strtok( NULL, ":" ); } if( GGBA_model ) df = new DisplayFunctionGGBA( gamma, L_max, L_black, E_amb, k ); removeCommandLineArg( argc, argv, i, 2 ); break; } } return df; } static void removeCommandLineArg( int &argc, char* argv[], int firstArgToRemove, int numArgsToRemove ) { assert( firstArgToRemove+numArgsToRemove <= argc ); if( argc-firstArgToRemove-numArgsToRemove > 0 ) { for( int i = firstArgToRemove; i < argc-numArgsToRemove; i++ ) argv[i] = argv[i+numArgsToRemove]; } argc -= numArgsToRemove; } pfstools-1.8.5/src/filter/pfscat.10000775000175000017500000000274210254027366013754 00000000000000.TH "pfscat" 1 .SH NAME pfscat \- Concatenate frames in PFS stream .SH SYNOPSIS .B pfscat [--horizontal] [--vertical] [-j ] [-R ] [-G ] [-B ] [-Y ] [--help] image1.pfs image2.pfs ... .SH DESCRIPTION Read number of frames as input, stitch them either horizontally or vertically, and produce single frame as output. If frames are not all the same size they are justified with each other - by default they are centered, but can also be flushed with a specified edge. .SH OPTIONS .TP --horizontal, -H Stitch frames horizontally. .TP --vertical, -V Stitch frames vertically. .TP -j Specify justification of input frames. Predefined types are: min, max, center. .TP -R , -G , -B Color of an extra space in a resulting image. Default color is black, and if some of the components is not specified, its value is set to 0.0. .TP -Y Color of an extra space in luminance mode. .TP --help, -h Print a list of commandline options. .SH EXAMPLES .TP pfsinmulti anim1_%04d.hdr anim2_%04d.hdr -- pfscat @1 @2 --vertical Stitch two hdr animations in vertical alignment. 'pfscat' is taken as an argument by 'pfsinmulti', therefore it must be preceded with '--'. Number of @1 @2 ... @n arguments must be the same as number of animations to combine. .SH NOTES Note that either --horizontal or --vertical option must be specified. .SH SEE ALSO .BR pfsin (1) .BR pfsout (1) .SH BUGS Please report bugs and comments to Dorota Zdrojewska . pfstools-1.8.5/src/filter/pfsclamp.cpp0000664000175000017500000001345610332140256014713 00000000000000/** * @brief Clamp values of X, Y, Z channels in PFS stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsclamp.cpp,v 1.2 2005/11/02 13:35:42 rafm Exp $ */ #include #include #include #include #include #include #include #define PROG_NAME "pfsclamp" class QuietException { }; void percentile(const pfs::Array2D *I, float& percMin, float& percMax ) { int size = I->getRows() * I->getCols(); std::vector vI; for( int i=0 ; igetRows()*array->getCols(); if( opt_percentile ) percentile(array,min,max); float minval=min; float maxval=max; if( opt_zeromode ) minval = maxval = 0.0f; for( int index = 0; index < imgSize ; index++ ) { float &v = (*array)(index); if( v < min ) v = minval; else if( v > max ) v = maxval; if( !finite(v) ) v = maxval; } } void printHelp() { fprintf( stderr, PROG_NAME " [--min ] [--max ] [--verbose] [--help]\n" "See man page for more information.\n" ); } void clampFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; float clampMin = 0.0001; // default: 10^-4 float clampMax = 100000000; // default: 10^8 bool verbose = false; bool opt_percentile = false; bool opt_zeromode = false; bool opt_rgbmode = false; static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "percentile", no_argument, NULL, 'p' }, { "zero", no_argument, NULL, 'z' }, { "rgb", no_argument, NULL, 'r' }, { "min", required_argument, NULL, 'n' }, { "max", required_argument, NULL, 'x' }, { NULL, 0, NULL, 0 } }; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "hvpz", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'p': opt_percentile = true; break; case 'z': opt_zeromode = true; break; case 'r': opt_rgbmode = true; break; case 'n': clampMin = (float)strtod( optarg, NULL ); break; case 'x': clampMax = (float)strtod( optarg, NULL ); break; case '?': throw QuietException(); case ':': throw QuietException(); } } // check if clamping parameters make sense if( opt_percentile ) { clampMin = (clampMin>1e-3) ? clampMin : 1e-3; clampMax = (clampMax<1) ? clampMax : 0.999f; if( clampMin >= clampMax ) throw pfs::Exception("incorrect clamping range for percentile mode"); } else { clampMin = (clampMin>1e-4) ? clampMin : 1e-4; clampMax = (clampMax<1e8) ? clampMax : 1e8; if( clampMin >= clampMax ) throw pfs::Exception("incorrect clamping range"); } if( verbose ) { if( opt_rgbmode ) fprintf(stderr, "Clamping in RGB color space.\n"); if( opt_zeromode ) fprintf(stderr, "Values out of clamp range will be set to zero.\n"); if( opt_percentile ) fprintf( stderr, "Clamping channels to [%g, %g] percentile.\n", clampMin, clampMax ); else fprintf( stderr, "Clamping channels to [%g, %g] range.\n", clampMin, clampMax ); } while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X != NULL ) { // Color, XYZ if( opt_rgbmode ) pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, X, Y, Z ); clamp( X, clampMin, clampMax, opt_percentile, opt_zeromode ); clamp( Y, clampMin, clampMax, opt_percentile, opt_zeromode ); clamp( Z, clampMin, clampMax, opt_percentile, opt_zeromode ); if( opt_rgbmode ) pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); } else if( (Y = frame->getChannel( "Y" )) != NULL ) { clamp( Y, clampMin, clampMax, opt_percentile, opt_zeromode ); } else throw pfs::Exception( "Missing X, Y, Z channels in the PFS stream" ); pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { clampFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfsflip.cpp0000664000175000017500000001004310254027366014547 00000000000000/** * @brief Flip images in PFS stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk, * Alexander Efremov * * 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 * ---------------------------------------------------------------------- * * @author Alexander Efremov, * * $Id: pfsflip.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include #include #include #define PROG_NAME "pfsflip" class QuietException { }; void flipArray( const pfs::Array2D *in, pfs::Array2D *out, bool h, bool v ); void printHelp() { fprintf( stderr, PROG_NAME " [-h] [-v] [--help]\n" "See man page for more information.\n" ); } void flipFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; static struct option cmdLineOptions[] = { { "help", no_argument, NULL, '1' }, { "h", no_argument, NULL, 'h' }, { "v", no_argument, NULL, 'v' }, { NULL, 0, NULL, 0 } }; bool h = false; bool v = false; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "hv", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case '1': printHelp(); throw QuietException(); case 'h': h = true; break; case 'v': v = true; break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( (!h) & (!v) ) throw pfs::Exception( "Either --h or --v must be specified" ); bool firstFrame = true; pfs::Frame *resizedFrame = NULL; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); pfs::Channel *dX, *dY, *dZ; if( firstFrame ) { int xSize = frame->getWidth(); int ySize = frame->getHeight(); resizedFrame = pfsio.createFrame( xSize, ySize ); firstFrame = false; } pfs::ChannelIterator *it = frame->getChannels(); while( it->hasNext() ) { pfs::Channel *originalCh = it->getNext(); pfs::Channel *newCh = resizedFrame->createChannel( originalCh->getName() ); flipArray( originalCh, newCh, h, v ); } pfs::copyTags( frame, resizedFrame ); pfsio.writeFrame( resizedFrame, stdout ); pfsio.freeFrame( frame ); } pfsio.freeFrame( resizedFrame ); } void flipArray(const pfs::Array2D *in, pfs::Array2D *out, bool h, bool v ) { int outRows = out->getRows(); int outCols = out->getCols(); if( h & v ) { for( int i=0; i] [--max ] [--percentile] [--zero] [--rgb] .SH DESCRIPTION Use this command to clamp values of luminance and color channels to be within the specified range. I.e. if a value in the channel is above the specified maximum or below specified minimum, set the value to either minimum or maximum. The command operates directly on XYZ channels. .SH OPTIONS .TP --min Lower bound for clamping. Default value: 0.0001 (10^-4) .TP --max Upper bound for clamping. Default value: 100000000 (10^8) .TP --percentile, -p Treat given min and max values as a percentile. .TP --zero, -z Set values out of clamping range to zero, instead of setting to specified maximum and minimum. .TP --rgb Perform clamping in RGB space. .SH EXAMPLES .TP pfsin memorial.hdr | pfsclamp | pfsout memorial_cl.hdr Remove possible out-of-range values, for examples zeros, from memorial image. .TP pfsin memorial.hdr | pfsclamp --max 0.95 -p | pfsout memorial_cl.hdr Remove 5% of the brightest pixels from the original image. .SH "SEE ALSO" .BR pfsin (1) .BR pfsout (1) .SH BUGS Please report bugs and comments to Rafal Mantiuk and Grzegorz Krawczyk . pfstools-1.8.5/src/filter/pfsgamma.cpp0000664000175000017500000001251511043640745014704 00000000000000/** * @brief Apply gamma correction the the pfs stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsgamma.cpp,v 1.3 2008/07/29 16:14:29 rafm Exp $ */ #include #include #include #include #include #include #include #define PROG_NAME "pfsgamma" class QuietException { }; void applyGamma( pfs::Array2D *array, const float exponent, const float multiplier ); void printHelp() { fprintf( stderr, PROG_NAME " [--gamma | --inverse-gamma ] [--mul ] [--verbose] [--help]\n" "See man page for more information.\n" ); } void applyGammaOnFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; float gamma = 1.0f; bool opt_setgamma = false; float multiplier = 1; bool verbose = false; static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "gamma", required_argument, NULL, 'g' }, { "inverse-gamma", required_argument, NULL, 'i' }, { "mul", required_argument, NULL, 'm' }, { NULL, 0, NULL, 0 } }; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "m:g:i:hv", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'g': gamma = (float)strtod( optarg, NULL ); opt_setgamma = true; break; case 'i': gamma = 1/(float)strtod( optarg, NULL ); opt_setgamma = true; break; case 'm': multiplier = (float)strtod( optarg, NULL ); break; case '?': throw QuietException(); case ':': throw QuietException(); } } VERBOSE_STR << "multiplier: " << multiplier << " gamma: " << gamma << std::endl; if( gamma > 1.0f ) VERBOSE_STR << "luminance content will be changed to 'display'" << std::endl; bool first_frame = true; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames if( first_frame ) { const char *lum_type = frame->getTags()->getString("LUMINANCE"); if( lum_type ) { if( !strcmp( lum_type, "DISPLAY" ) && gamma > 1.0f ) std::cerr << PROG_NAME " warning: applying gamma correction to a display referred image" << std::endl; if( !strcmp( lum_type, "RELATIVE" ) && gamma < 1.0f ) std::cerr << PROG_NAME " warning: applying inverse gamma correction to a linear luminance or radiance image" << std::endl; if( !strcmp( lum_type, "ABSOLUTE" ) && multiplier == 1 ) std::cerr << PROG_NAME " warning: an image should be normalized to 0-1 before applying gamma correction" << std::endl; } } pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X != NULL ) { // Color, XYZ pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, X, Y, Z ); // At this point (X,Y,Z) = (R,G,B) applyGamma( X, 1/gamma, multiplier ); applyGamma( Y, 1/gamma, multiplier ); applyGamma( Z, 1/gamma, multiplier ); pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); // At this point (X,Y,Z) = (X,Y,Z) } else if( (Y = frame->getChannel( "Y" )) != NULL ) { // Luminance only applyGamma( Y, 1/gamma, multiplier ); } else throw pfs::Exception( "Missing X, Y, Z channels in the PFS stream" ); if( opt_setgamma && gamma > 1.0f ) frame->getTags()->setString("LUMINANCE", "DISPLAY"); else if( opt_setgamma && gamma < 1.0f ) frame->getTags()->setString("LUMINANCE", "RELATIVE"); first_frame = false; pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } void applyGamma( pfs::Array2D *array, const float exponent, const float multiplier ) { int imgSize = array->getRows()*array->getCols(); for( int index = 0; index < imgSize ; index++ ) { float &v = (*array)(index); if( v < 0 ) v = 0; v = powf( v*multiplier, exponent ); } } int main( int argc, char* argv[] ) { try { applyGammaOnFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfsextractchannels.10000664000175000017500000000077410254027366016373 00000000000000.TH "pfsextractchannels" 1 .SH NAME pfsextractchannels \- Extract selected channels from the stream .SH SYNOPSIS .B pfsextractchannels [ ...] .SH DESCRIPTION Removes all channels from the pfs stream that are not listed in arguments. .SH EXAMPLES .TP pfsin memorial.hdr | pfsextractchannels Y | pfsview View luminance channel of the memorial image. .SH "SEE ALSO" .BR pfsin (1) .BR pfsout (1) .SH BUGS Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/filter/pfscat.cpp0000775000175000017500000002477110736434641014407 00000000000000/** * @brief Concatenate frames in PFS stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Dorota Zdrojewska, * */ #include #include #include #include #include #include #define PROG_NAME "pfscat" #define UNSP INT_MAX #define HORIZONTAL 0 #define VERTICAL 1 #define MIN 0 #define MAX 1 #define PREV_MIN 2 #define PREV_MAX 3 #define X 0 #define Y 1 #define Z 2 using namespace std; enum just {J_MIN, J_MAX, J_CENTER}; class QuietException { }; static struct option cmdLineOptions[] = { {"help", no_argument, NULL, 'h'}, {"horizontal", no_argument, NULL, 'H'}, {"vertical", no_argument, NULL, 'V'}, {"justify", required_argument, NULL, 'j'}, {"R", required_argument, NULL, 'R'}, {"G", required_argument, NULL, 'G'}, {"B", required_argument, NULL, 'B'}, {"Y", required_argument, NULL, 'Y'}, {NULL, 0, NULL, 0} }; void printHelp() { fprintf( stderr, PROG_NAME ": \n" "\t[--vertical]\n" "\t[--horizontal]\n" "\t[-j ]\n" "\t[-R ]\n" "\t[-G ]\n" "\t[-B ]\n" "\t[-Y ]\n" "\t[--help]\n" "See man page for more information.\n"); } void justification (enum just just, int inSize, int prevSize, int outSize, int *out) { switch (just) { case J_CENTER: if(inSizemax) ? max : val; return out; } void pfscat (int argc, char* argv[]) { pfs::DOMIO pfsio; static const char optString[] = "hHVj:R:G:B:Y:"; enum just just=J_CENTER; // type of justification int alignment=UNSP; //vertical or horizontal alignment of frames in output image float R=1e-4, G=1e-4, B=1e-4, luminance=1.0; // background color in RGB or luminance mode float XYZ[3]; bool optLuminanceMode=false, RGB=false, optLuminance=false; bool pipes = true; int optionIndex=0; while (1) { int c=getopt_long(argc, argv,optString, cmdLineOptions, &optionIndex); if(c==-1) break; switch(c) { case 'h': printHelp(); throw QuietException(); break; case 'H': if (alignment==VERTICAL) throw pfs::Exception("You cannot specify both horizontal and vertical alignment"); else alignment=HORIZONTAL; break; case 'V': if (alignment==HORIZONTAL) throw pfs::Exception("You cannot specify both horizontal and vertical alignment"); else alignment=VERTICAL; break; case 'j': if (!strcmp(optarg,"min")) just=J_MIN; else if (!strcmp(optarg,"max")) just=J_MAX; else if (!strcmp(optarg,"center")) just=J_CENTER; else throw pfs::Exception("Unknown type of justification. Accepted types: 'min', 'max' or 'center')"); break; case 'R': R=atof(optarg); if(R<=(1e-4)) R=1e-4; RGB=true; break; case 'G': G=atof(optarg); if(G<=(1e-4)) G=1e-4; RGB=true; break; case 'B': B=atof(optarg); if(B<=(1e-4)) B=1e-4; RGB=true; break; case 'Y': luminance=atof(optarg); if(luminance<=(1e-4)) luminance=1e-4; optLuminance=true; break; } } if (alignment==UNSP) throw pfs::Exception("You must specify an alignment - --horizontal or --vertical option"); pfs::FrameFileIterator it ( argc, argv, "rb", NULL, NULL, optString, cmdLineOptions); int pipe_no = 0; pfs::FrameFile * ff; ff = (pfs::FrameFile *) malloc ((pipe_no+1) * sizeof(pfs::FrameFile)); while (1) { ff[pipe_no] = it.getNextFrameFile(); if (ff[pipe_no].fh == NULL) break; // no more files pipe_no++; ff=(pfs::FrameFile *) realloc(ff, (pipe_no+1)*sizeof(pfs::FrameFile)); } if(pipe_no == 0) { // no named pipes pipe_no = 1; pipes = false; } //color transformation if(optLuminance && !RGB) { R=1; G=1; B=1; } XYZ[X]=luminance*(0.4124*R + 0.3576*G + 0.1805*B); XYZ[Y]=luminance*(0.2126*R + 0.7152*G + 0.0722*B); XYZ[Z]=luminance*(0.0193*R + 0.1192*G + 0.9505*B); for (int i=0; i<3; i++) XYZ[i]=clamp(XYZ[i], 1e-4, 100000000.0); bool finish = false; int frame_no=0; int tRow=0, bRow=0, lCol=0, rCol=0, prevtRow=0, prevbRow=0, prevlCol=0, prevrCol=0; int inWidth=0, inHeight=0, outWidth=0, outHeight=0, prevWidth=0, prevHeight=0; pfs::Frame *inFrame, *outFrame, *prevFrame; pfs::Channel *inX, *inY, *inZ, *outX, *outY, *outZ, *prevX, *prevY, *prevZ; while (1) { if(pipes) { inWidth=0; inHeight=0; outWidth=0; outHeight=0; prevWidth=0; prevHeight=0; } for (int i=0; igetXYZChannels(inX, inY, inZ); inWidth=inFrame->getWidth(); inHeight=inFrame->getHeight(); if (frame_no) { // save previous frame prevWidth=outWidth; prevHeight=outHeight; prevFrame=pfsio.createFrame(prevWidth, prevHeight); if (!optLuminanceMode) prevFrame->createXYZChannels(prevX, prevY, prevZ); else prevY=prevFrame->createChannel("Y"); int size=prevWidth*prevHeight; for (int i=0; ioutWidth) outWidth=inWidth; outHeight+=inHeight; justification (just, inWidth, prevWidth, outWidth, leftRight); lCol=leftRight[MIN]; rCol=leftRight[MAX]; tRow=outHeight-inHeight; bRow=outHeight-1; prevlCol=leftRight[PREV_MIN]; prevrCol=leftRight[PREV_MAX]; prevtRow=0; prevbRow=prevHeight-1; } else if (alignment==HORIZONTAL) { outWidth+=inWidth; if(inHeight>outHeight) outHeight=inHeight; justification (just, inHeight, prevHeight, outHeight, topBottom); lCol=outWidth-inWidth; rCol=outWidth-1; tRow=topBottom[MIN]; bRow=topBottom[MAX]; prevlCol=0; prevrCol=prevWidth-1; prevtRow=topBottom[PREV_MIN]; prevbRow=topBottom[PREV_MAX]; } if(inX != NULL) { //XYZ mode if (frame_no==0) optLuminanceMode=false; // first frame if(!optLuminanceMode) { outFrame = pfsio.createFrame(outWidth, outHeight); outFrame->createXYZChannels(outX, outY, outZ); for (int i=0; i=tRow && i<=bRow && j>=lCol && j<=rCol) { (*outX)(j,i)=(*inX)(j-lCol,i-tRow); (*outY)(j,i)=(*inY)(j-lCol,i-tRow); (*outZ)(j,i)=(*inZ)(j-lCol,i-tRow); } else if (i>=prevtRow && i<=prevbRow && j>=prevlCol && j<=prevrCol) { (*outX)(j,i)=(*prevX)(j-prevlCol,i-prevtRow); (*outY)(j,i)=(*prevY)(j-prevlCol,i-prevtRow); (*outZ)(j,i)=(*prevZ)(j-prevlCol,i-prevtRow); } else { (*outX)(j, i)=XYZ[X]; (*outY)(j, i)=XYZ[Y]; (*outZ)(j, i)=XYZ[Z]; } } } else { outFrame = pfsio.createFrame(prevWidth, prevHeight); outY=outFrame->createChannel("Y"); int size=prevWidth*prevHeight; for (int i=0; igetChannel("Y")) {// luminance mode if (frame_no==0) optLuminanceMode=true; // first frame if (optLuminanceMode) { outFrame = pfsio.createFrame(outWidth, outHeight); outY=outFrame->createChannel("Y"); for (int i=0; i=tRow && i<=bRow && j>=lCol && j<=rCol) (*outY)(j,i)=(*inY)(j-lCol,i-tRow); else if (i>=prevtRow && i<=prevbRow && j>=prevlCol && j<=prevrCol) (*outY)(j,i)=(*prevY)(j-prevlCol,i-prevtRow); else (*outY)(j, i)=luminance; } } else { outFrame = pfsio.createFrame(prevWidth, prevHeight); outFrame->createXYZChannels(outX, outY, outZ); int size=prevWidth*prevHeight; for (int i=0; i * * $Id: pfsrotate.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include #include #include #define PROG_NAME "pfsrotate" class QuietException { }; void rotateArray( const pfs::Array2D *in, pfs::Array2D *out, bool clockwise ); void printHelp() { fprintf( stderr, PROG_NAME " [-r] [--help]\n" "See man page for more information.\n" ); } void rotateFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "r", no_argument, NULL, 'r' }, { NULL, 0, NULL, 0 } }; bool clockwise = true; int xSize = -1; int ySize = -1; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "r", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'r': clockwise = false; break; case '?': throw QuietException(); case ':': throw QuietException(); } } bool firstFrame = true; pfs::Frame *resizedFrame = NULL; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); pfs::Channel *dX, *dY, *dZ; if( firstFrame ) { xSize = frame->getHeight(); ySize = frame->getWidth(); resizedFrame = pfsio.createFrame( xSize, ySize ); firstFrame = false; } pfs::ChannelIterator *it = frame->getChannels(); while( it->hasNext() ) { pfs::Channel *originalCh = it->getNext(); pfs::Channel *newCh = resizedFrame->createChannel( originalCh->getName() ); rotateArray( originalCh, newCh, clockwise ); } pfs::copyTags( frame, resizedFrame ); pfsio.writeFrame( resizedFrame, stdout ); pfsio.freeFrame( frame ); } pfsio.freeFrame( resizedFrame ); } void rotateArray(const pfs::Array2D *in, pfs::Array2D *out, bool clockwise) { int outRows = out->getRows(); int outCols = out->getCols(); for( int i=0; i * * $Id: pfsabsolute.cpp,v 1.3 2006/08/14 16:48:31 rafm Exp $ */ #include #include #include #include #include #include #include #define PROG_NAME "pfsabsolute" class QuietException { }; inline void multiplyArray(pfs::Array2D *z, const pfs::Array2D *x, const float y) { assert( x->getRows() == z->getRows() ); assert( x->getCols() == z->getCols() ); if( y == 1.0f ) return; const int elements = x->getRows()*x->getCols(); for( int i = 0; i < elements; i++ ) (*z)(i) = (*x)(i) * y; } void printHelp() { fprintf( stderr, PROG_NAME " [] [--verbose] [--help]\n" "See man page for more information.\n" ); } void applyAbsoluteOnFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; float destY = 1.0f; float srcY = 1.0f; bool verbose = false; static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { NULL, 0, NULL, 0 } }; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( optind == argc ) throw pfs::Exception( "Destination luminance level must be specified" ); if( optind < (argc - 2) ) throw pfs::Exception( "Too many arguments" ); destY = strtof( argv[optind++], NULL ); if( optind != argc ) srcY = strtof( argv[optind++], NULL ); VERBOSE_STR << "rescale luminance to: " << destY << std::endl; if( srcY != 1.0f ) VERBOSE_STR << "from: " << srcY << std::endl; float multY = destY/srcY; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames const char *lumType = frame->getTags()->getString( "LUMINANCE" ); if( lumType != NULL && !strcmp( lumType, "ABSOLUTE" ) ) { VERBOSE_STR << "luminance is already absolute, skipping frame."; } else { pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X != NULL ) { // Color, XYZ if( lumType != NULL && !strcmp( lumType, "DISPLAY" ) ) { VERBOSE_STR << "converting from display-referred to linear luminance."; pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, X, Y, Z ); pfs::transformColorSpace( pfs::CS_SRGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); } multiplyArray( X, X, multY ); multiplyArray( Y, Y, multY ); multiplyArray( Z, Z, multY ); } else if( (Y = frame->getChannel( "Y" )) != NULL ) { // Luminance only if( lumType != NULL && !strcmp( lumType, "DISPLAY" ) ) throw pfs::Exception( PROG_NAME ": Cannot handle gray-level display-referred images." ); multiplyArray( Y, Y, multY ); } else throw pfs::Exception( "Missing color channels in the PFS stream" ); frame->getTags()->setString("LUMINANCE", "ABSOLUTE"); } pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { applyAbsoluteOnFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfspanoramic.cpp0000664000175000017500000005152311337222007015566 00000000000000/** * @brief Perform projective transformations of spherical images * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Miloslaw Smyk, * * $Id: pfspanoramic.cpp,v 1.4 2010/02/18 11:27:03 rafm Exp $ */ #include #include #include #include #include #include #include #define PROG_NAME "pfspanoramic" using namespace std; class QuietException { }; const double EPSILON=1e-7; static void errorCheck( bool condition, const char *string ) { if( !condition ) { fprintf( stderr, PROG_NAME " error: %s\n", string ); throw QuietException(); } } class Vector3D { public: double x, y, z; Vector3D(double phi, double theta) { x = cos(phi) * sin(theta); y = sin(phi) * sin(theta); z = cos(theta); } Vector3D(double x, double y, double z) { this->x = x; this->y = y; this->z = z; normalize(); } double magnitude(void) { return sqrt( x * x + y * y + z * z ); } void normalize(void) { double len = magnitude(); x = x / len; y = y / len; z = z / len; } double dot(Vector3D *v) { return x * v->x + y * v->y + z * v->z; } //TODO: optimize rotations by precomputing sines and cosines Vector3D rotateX(double angle) { angle *= (M_PI / 180); double c = cos(angle); double s = sin(angle); double y2 = c * y + -s * z; double z2 = s * y + c * z; y = y2; z = z2; } Vector3D rotateY(double angle) { angle *= (M_PI / 180); double c = cos(angle); double s = sin(angle); double x2 = c * x + s * z; double z2 = -s * x + c * z; x = x2; z = z2; } Vector3D rotateZ(double angle) { angle *= (M_PI / 180); double c = cos(angle); double s = sin(angle); double x2 = c * x + -s * y; double y2 = s * x + c * y; x = x2; y = y2; } }; class Point2D { public: double x, y; Point2D(double x, double y) { this->x = x; this->y = y; } }; class Projection { protected: const char *name; public: virtual Vector3D *uvToDirection(double u, double v) = 0; virtual Point2D *directionToUV(Vector3D *direction) = 0; virtual bool isValidPixel(double u, double v) = 0; virtual double getSizeRatio(void) = 0; virtual ~Projection() { } virtual void setOptions(char *opts) { } virtual const char *getName(void) { return name; } }; //class Projection; typedef Projection*(*ProjectionCreator)(void); class ProjectionFactory { static ProjectionFactory singleton; ProjectionFactory(bool init) { } public: map projections; static void registerProjection(const char *name, ProjectionCreator ptr) { singleton.projections[ string( name ) ] = ptr; } static Projection *getProjection(char *name) { char *opts; if(opts = strchr(name, '/')) { *opts++ = '\0'; } ProjectionCreator projectionCreator = singleton.projections.find(string(name))->second; if(projectionCreator != NULL) { Projection *projection = projectionCreator(); if(opts != NULL) projection->setOptions(opts); return projection; } else return NULL; } //FIXME: Lame. Should return an iterator over the names. No time for this now. :/ static void listProjectionNames(void) { map::iterator i = singleton.projections.begin(); while(i != singleton.projections.end()) { fprintf( stderr, "%s\n", (*i).first.c_str()); i++; } } }; ProjectionFactory ProjectionFactory::singleton = true; class MirrorBallProjection : public Projection { static MirrorBallProjection singleton; MirrorBallProjection(bool initialization) { name = "mirrorball"; if(initialization) ProjectionFactory::registerProjection(name, this->create); } public: static Projection* create() { return new MirrorBallProjection(false); } const char *getName(void) { return name; } double getSizeRatio(void) { return 1; } bool isValidPixel(double u, double v) { // check if we are not in a boundary region (outside a circle) if((u - 0.5) * (u - 0.5) + (v - 0.5) * (v - 0.5) > 0.25) return false; else return true; } Vector3D* uvToDirection(double u, double v) { u = 2 * u - 1; v = 2 * v - 1; double phi = atan2( v, u ); double theta = 2 * asin( sqrt( u * u + v * v ) ); Vector3D *direction = new Vector3D(phi, theta); double t; direction->y = -direction->y; return direction; } Point2D* directionToUV(Vector3D *direction) { double u, v; direction->y = -direction->y; if(fabs(direction->x) > 0 || fabs(direction->y) > 0) { double distance = sqrt(direction->x * direction->x + direction->y * direction->y); double r = 0.5 * (sin(acos(direction->z) / 2)) / distance; u = direction->x * r + 0.5; v = direction->y * r + 0.5; } else { u = v = 0.5; } return new Point2D(u, v); } }; class AngularProjection : public Projection { static AngularProjection singleton; double totalAngle; AngularProjection(bool initialization) { name = "angular"; if(initialization) ProjectionFactory::registerProjection(name, this->create); } public: static Projection* create() { AngularProjection *p = new AngularProjection(false); p->totalAngle = 360; return (Projection *)p; } void setOptions(char *opts) { char *delimiter; static const char *OPTION_ANGLE = "angle"; while(*opts) { //fprintf(stderr,"option: %s\n", opts); //if(delimiter = strchr(name, '/')) //*delimiter++ = '\0'; if(strncmp(opts, OPTION_ANGLE, strlen(OPTION_ANGLE)) == 0) { totalAngle = strtod(opts + strlen(OPTION_ANGLE) + 1, &delimiter); // fprintf(stderr,"angle: %g\n", totalAngle); if(0 >= totalAngle || totalAngle > 360) { fprintf( stderr, PROG_NAME " error: angular projection: angle must be in (0,360] degrees range.\n" ); throw QuietException(); } } else { fprintf( stderr, PROG_NAME " error: angular projection: unknown option: %s\n", opts ); throw QuietException(); } opts = delimiter + 1; } } const char *getName(void) { return name; } double getSizeRatio(void) { return 1; } bool isValidPixel(double u, double v) { // check if we are not in a boundary region (outside a circle) if((u - 0.5) * (u - 0.5) + (v - 0.5) * (v - 0.5) > 0.25) return false; else return true; } Vector3D* uvToDirection(double u, double v) { u = 2 * u - 1; v = 2 * v - 1; u *= totalAngle / 360; v *= totalAngle / 360; double phi = atan2( v, u ); double theta = M_PI * sqrt( u * u + v * v ); Vector3D *direction = new Vector3D(phi, theta); double t; direction->y = -direction->y; return direction; } Point2D* directionToUV(Vector3D *direction) { double u, v; direction->y = -direction->y; if(fabs(direction->x) > 0 || fabs(direction->y) > 0) { double distance = sqrt(direction->x * direction->x + direction->y * direction->y); double r = (1 / (2 * M_PI)) * acos(direction->z) / distance; u = direction->x * r + 0.5; v = direction->y * r + 0.5; } else { u = v = 0.5; } return new Point2D(u, v); } }; class CylindricalProjection : public Projection { Vector3D *pole; Vector3D *equator; Vector3D *cross; static CylindricalProjection singleton; CylindricalProjection(bool initialization) { name = "cylindrical"; if(initialization) ProjectionFactory::registerProjection(name, this->create); pole = new Vector3D(0, 1, 0); equator = new Vector3D(0, 0, -1); cross = new Vector3D(1, 0, 0); } public: static Projection* create() { return new CylindricalProjection(false); } ~CylindricalProjection() { delete pole; delete equator; delete cross; } double getSizeRatio(void) { return 2; } bool isValidPixel(double u, double v) { return true; } Vector3D* uvToDirection(double u, double v) { u = 0.75 - u; u *= M_PI * 2; v = acos( 1 - 2 * v ); Vector3D *direction = new Vector3D(u, v); double temp = direction->z; direction->z = direction->y; direction->y = temp; return direction; } Point2D* directionToUV(Vector3D *direction) { double u, v; double lat = direction->dot(pole); v = ( 1 - lat ) / 2; if(v < EPSILON || fabs(1 - v) < EPSILON) u = 0; else { double ratio = equator->dot( direction ) / sin( acos( lat ) ); if(ratio < -1) ratio = -1; else if(ratio > 1) ratio = 1; double lon = acos(ratio) / (2 * M_PI); if(cross->dot(direction) < 0) u = lon; else u = 1 - lon; if(u == 1) u = 0; if(v == 1) v = 0; } // if ( 0 > v || v >= 1 ) fprintf(stderr, "u: %f (%f,%f,%f)\n", v, direction->x, direction->y, direction->z); // assert ( -0. <= u && u < 1 ); // assert ( -0. <= v && v < 1 ); return new Point2D(u, v); } }; class PolarProjection : public Projection { Vector3D *pole; Vector3D *equator; Vector3D *cross; static PolarProjection singleton; PolarProjection(bool initialization) { name = "polar"; if(initialization) ProjectionFactory::registerProjection(name, this->create); pole = new Vector3D(0, 1, 0); equator = new Vector3D(0, 0, -1); cross = new Vector3D(1, 0, 0); } public: static Projection* create() { return new PolarProjection(false); } ~PolarProjection() { delete pole; delete equator; delete cross; } double getSizeRatio(void) { return 2; } bool isValidPixel(double u, double v) { return true; } Vector3D* uvToDirection(double u, double v) { u = 0.75 - u; u *= M_PI * 2; v *= M_PI; Vector3D *direction = new Vector3D(u, v); double temp = direction->z; direction->z = direction->y; direction->y = temp; return direction; } Point2D* directionToUV(Vector3D *direction) { double u, v; double lat = acos(direction->dot(pole)); v = lat * M_1_PI; if(v < EPSILON || fabs(1 - v) < EPSILON) u = 0; else { double ratio = equator->dot(direction) / sin(lat); if(ratio < -1) ratio = -1; else if(ratio > 1) ratio = 1; double lon = acos(ratio) / (2 * M_PI); if(cross->dot(direction) < 0) u = lon; else u = 1 - lon; if(u == 1) u = 0; if(v == 1) v = 0; } // if ( 0 > v || v >= 1 ) fprintf(stderr, "u: %f (%f,%f,%f)\n", v, direction->x, direction->y, direction->z); // assert ( -0. <= u && u < 1 ); // assert ( -0. <= v && v < 1 ); return new Point2D(u, v); } }; PolarProjection PolarProjection::singleton = true; CylindricalProjection CylindricalProjection::singleton = true; AngularProjection AngularProjection::singleton = true; MirrorBallProjection MirrorBallProjection::singleton = true; class TransformInfo { public: double xRotate; double yRotate; double zRotate; int oversampleFactor; bool interpolate; Projection *srcProjection; Projection *dstProjection; TransformInfo() { xRotate = yRotate = zRotate = 0; oversampleFactor = 1; interpolate = false; srcProjection = dstProjection = NULL; } }; void transformArray( const pfs::Array2D *in, pfs::Array2D *out, TransformInfo *transformInfo); void printHelp() { fprintf( stderr, PROG_NAME " + [--width ] [--height ] [--oversample ] [--interpolate] [--xrotate ] [--yrotate ] [--zrotate ] [--verbose] [--help]\n" "See man page for more information.\n" ); } void panoramic( int argc, char* argv[] ) { pfs::DOMIO pfsio; // default parameters int xSize = -1; int ySize = -1; bool verbose = false; TransformInfo transformInfo; static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'e' }, { "verbose", no_argument, NULL, 'v' }, { "width", required_argument, NULL, 'w' }, { "height", required_argument, NULL, 'h' }, { "oversample", required_argument, NULL, 'o' }, { "interpolate", no_argument, NULL, 'i' }, { "xrotate", required_argument, NULL, 'x' }, { "yrotate", required_argument, NULL, 'y' }, { "zrotate", required_argument, NULL, 'z' }, { NULL, 0, NULL, 0 } }; int optionIndex = 0; while( true ) { int c = getopt_long( argc, argv, "w:h:o:ix:y:z:", cmdLineOptions, &optionIndex ); if( c == -1 ) break; switch( c ) { case 'e': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'w': xSize = strtol( optarg, NULL, 10 ); break; case 'h': ySize = strtol( optarg, NULL, 10 ); break; case 'o': transformInfo.oversampleFactor = strtol( optarg, NULL, 10 ); break; case 'i': transformInfo.interpolate = true; break; case 'x': transformInfo.xRotate = strtod( optarg, NULL ); break; case 'y': transformInfo.yRotate = strtod( optarg, NULL ); break; case 'z': transformInfo.zRotate = strtod( optarg, NULL ); break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( optind < argc ) { bool set = false; while( optind < argc ) { char *destination; if( set || ( destination = strchr( argv[optind], '+' ) ) == NULL ) { fprintf( stderr, PROG_NAME " error: unknown parameter: %s\n", argv[optind]); throw QuietException(); } // replace 'plus' sign with a string terminator, // thus separating input and output filter names. *destination++ = '\0'; transformInfo.srcProjection = ProjectionFactory::getProjection( argv[optind] ); transformInfo.dstProjection = ProjectionFactory::getProjection( destination ); set = true; optind++; } } if( transformInfo.srcProjection == NULL || transformInfo.dstProjection == NULL ) { fprintf( stderr, PROG_NAME " error: unknown projection. Possible values:\n" ); ProjectionFactory::listProjectionNames(); throw QuietException(); } errorCheck(transformInfo.oversampleFactor > 0, "Oversample factor must be > 0"); if( verbose ) { fprintf( stderr, PROG_NAME ": reprojecting %s to %s", transformInfo.srcProjection->getName(), transformInfo.dstProjection->getName() ); if( transformInfo.interpolate == true ) fprintf( stderr, " with bilinear interpolation" ); if(transformInfo.oversampleFactor > 1) { if( transformInfo.interpolate == true ) fprintf( stderr, " and" ); else fprintf( stderr, " with" ); fprintf( stderr, " %dx%d oversampling", transformInfo.oversampleFactor, transformInfo.oversampleFactor ); } if( transformInfo.xRotate != 0 || transformInfo.yRotate != 0 || transformInfo.zRotate != 0 ) { fprintf( stderr, ", while rotating by %f, %f and %f degrees around X, Y and Z respectively", transformInfo.xRotate, transformInfo.yRotate, transformInfo.zRotate); } fprintf( stderr, ".\n"); } pfs::Frame *transformedFrame = NULL; bool firstFrame = true; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); pfs::Channel *dX, *dY, *dZ; if(xSize == -1 && ySize == -1) { xSize = frame->getWidth(); ySize = (int)(xSize / transformInfo.dstProjection->getSizeRatio()); } else { if(xSize == -1) xSize = (int)(ySize * transformInfo.dstProjection->getSizeRatio()); if(ySize == -1) ySize = (int)(xSize / transformInfo.dstProjection->getSizeRatio()); } if( firstFrame ) { transformedFrame = pfsio.createFrame( xSize, ySize ); firstFrame = false; } pfs::ChannelIterator *it = frame->getChannels(); while( it->hasNext() ) { pfs::Channel *originalCh = it->getNext(); pfs::Channel *newCh = transformedFrame->createChannel( originalCh->getName() ); //TODO: major optimization: transform all channels in one go. transformArray( originalCh, newCh, &transformInfo ); } pfs::copyTags( frame, transformedFrame ); pfsio.writeFrame( transformedFrame, stdout ); pfsio.freeFrame( frame ); } pfsio.freeFrame( transformedFrame ); delete transformInfo.dstProjection; delete transformInfo.srcProjection; } void transformArray( const pfs::Array2D *in, pfs::Array2D *out, TransformInfo *transformInfo ) { const double delta = 1. / transformInfo->oversampleFactor; const double offset = 0.5 / transformInfo->oversampleFactor; const double scaler = 1. / ( transformInfo->oversampleFactor * transformInfo->oversampleFactor ); const int outRows = out->getRows(); const int outCols = out->getCols(); const int inRows = in->getRows(); const int inCols = in->getCols(); for( int y = 0; y < outRows; y++ ) for( int x = 0; x < outCols; x++ ) { double pixVal = 0; if( transformInfo->dstProjection->isValidPixel(( x + 0.5 ) / outCols, ( y + 0.5 ) / outCols ) == true ) { for( double sy = 0, oy = 0; oy < transformInfo->oversampleFactor; sy += delta, oy++ ) for( double sx = 0, ox = 0; ox < transformInfo->oversampleFactor; sx += delta, ox++ ) { Vector3D *direction = transformInfo->dstProjection->uvToDirection( ( x + offset + sx ) / outCols, ( y + offset + sy ) / outRows ); if(direction == NULL) continue; // angles below are negated, because we want to rotate // the environment around us, not us within the environment. if( transformInfo->xRotate != 0 ) direction->rotateX( -transformInfo->xRotate ); if( transformInfo->yRotate != 0 ) direction->rotateY( -transformInfo->yRotate ); if( transformInfo->zRotate != 0 ) direction->rotateZ( -transformInfo->zRotate ); Point2D *p = transformInfo->srcProjection->directionToUV( direction ); p->x *= inCols; p->y *= inRows; if( transformInfo->interpolate == true ) { int ix = (int)floor( p->x ); int iy = (int)floor( p->y ); double i = p->x - ix; double j = p->y - iy; // compute pixel weights for interpolation double w1 = i * j; double w2 = (1 - i) * j; double w3 = (1 - i) * (1 - j); double w4 = i * (1 - j); int dx = ix + 1; if(dx >= inCols) dx = inCols - 1; int dy = iy + 1; if(dy >= inRows) dy = inRows - 1; pixVal += w3 * (*in)(ix, iy) + w4 * (*in)(dx, iy) + w1 * (*in)(dx, dy) + w2 * (*in)(ix, dy); } else { int ix = (int)floor(p->x + 0.5); int iy = (int)floor(p->y + 0.5); if(ix >= inCols) ix = inCols - 1; if(iy >= inRows) iy = inRows - 1; pixVal += (*in)(ix, iy); } delete direction; delete p; (*out)(x,y) = pixVal * scaler; } } } } int main( int argc, char* argv[] ) { try { panoramic( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfstag.cpp0000664000175000017500000001172010254027366014373 00000000000000/** * @brief Add/Remove tags to frames in pfs stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfstag.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include #include #include #include #include using namespace std; #define PROG_NAME "pfstag" class QuietException { }; void printHelp() { fprintf( stderr, PROG_NAME " [--set \"[channel:]name=value\"] [--remove \"[channel:]name]\" [--verbose] [--help]\n" "See man page for more information.\n" ); } struct TagOperation { bool remove; string name, value; string channel; }; typedef list ListOfTags; TagOperation parseTagOperation( const char *tag, bool remove ) { TagOperation tagop; const char *equalSign = strstr( tag, "=" ); const char *colonSign = strstr( tag, ":" ); if( remove ) equalSign = tag + strlen( tag ); if( colonSign > equalSign || colonSign == tag ) colonSign = NULL; // ":" only before "=" if( !remove && (equalSign == NULL ) ) // = sign missing throw pfs::Exception( "Tag must contain '=' sign" ); if( (colonSign == NULL && equalSign == tag) || (colonSign != NULL && (equalSign-colonSign) <= 1 ) ) throw pfs::Exception( "Missing tag name" ); tagop.name = colonSign == NULL ? string( tag, (equalSign-tag) ) : string( colonSign+1, (equalSign-colonSign-1) ); if( !remove ) tagop.value = string( equalSign+1 ); // No channel -> frame tag if( colonSign != NULL ) tagop.channel = string( tag, (colonSign-tag) ); tagop.remove = remove; return tagop; } void setTagsOnFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; ListOfTags setTags; bool verbose = false; static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "add", required_argument, NULL, 's' }, { "set", required_argument, NULL, 's' }, { "remove", required_argument, NULL, 'r' }, { NULL, 0, NULL, 0 } }; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "m:g:s:r:", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 's': setTags.push_back( parseTagOperation( optarg, false ) ); break; case 'r': setTags.push_back( parseTagOperation( optarg, true ) ); break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( verbose ) { ListOfTags::iterator it; for( it = setTags.begin(); it != setTags.end(); it++ ) { TagOperation &tagop = *it; if( tagop.remove ) cerr << PROG_NAME ": remove tag '" << tagop.name << "'\n"; else cerr << PROG_NAME ": set tag '" << tagop.name << "' to '" << tagop.value << "'\n"; } } while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames ListOfTags::iterator it; for( it = setTags.begin(); it != setTags.end(); it++ ) { TagOperation &tagop = *it; pfs::TagContainer *tags; if( tagop.channel.empty() ) tags = frame->getTags(); else { pfs::Channel *channel = frame->getChannel( tagop.channel.c_str() ); if( channel == NULL ) throw pfs::Exception( "Channel not found" ); tags = channel->getTags(); } if( tagop.remove ) tags->removeTag( tagop.name.c_str() ); else tags->setString( tagop.name.c_str(), tagop.value.c_str() ); } pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } int main( int argc, char* argv[] ) { try { setTagsOnFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfspad.10000775000175000017500000000355110254027366013750 00000000000000.TH "pfspad" 1 .SH NAME pfspad \- Add borders to a frame in PFS stream .SH SYNOPSIS .B pfspad [--left ] [--right ] [--top ] [--bottom ] [--width ] [--height ] [--R ] [--G ] [--B ] [--Y ] [--help] .SH DESCRIPTION Add borders to each frame in PFS stream. User specifies size of left, right, top and bottom border or size of an output image. Color of borders can be specified as well. .SH OPTIONS .TP --left , -l Width in pixels of the left border. .TP --right , -r Width in pixels of the right border. .TP --top , -t Height in pixels of the top border. .TP --bottom , -b Height in pixels of the bottom border. .TP --width , -W Width of an output image. Note that --width can be mixed with either --left or --right option. .TP --height , -H Height of an output image. Note that --height can be mixed with either --top or --bottom option. .TP --R , -R , --G , -G , --B , -B Color of borders in RGB mode. Default color is black, and if some of the components is not specified, its value is set to 0.0. .TP --Y , -Y Color of borders in luminance mode. .TP --help, -h Print a list of commandline options. .SH EXAMPLES .TP pfsin image.hdr | pfspad --left 50 --bottom 20 | pfsout out.hdr Add 50 columns to the left and 20 rows to the bottom side of image.hdr. Color of borders is default black. .TP pfsin image.hdr | pfspad --top 20 --height 500 --width 400 --R 1.0 | pfsout out.hdr Add 20 rows to the top side of image.hdr and create output image out.hdr 500 pixels in height and 400 pixels in width. Color of borders is set to red. .SH SEE ALSO .BR pfsin (1) .BR pfsout (1) .SH BUGS Please report bugs and comments to Dorota Zdrojewska . pfstools-1.8.5/src/filter/pfsrotate.10000664000175000017500000000160410254027366014474 00000000000000.TH "pfsrotate" 1 .SH NAME pfsrotate \- Rotate images 90 degrees. .SH SYNOPSIS .B pfsrotate [--r] [--help] .SH DESCRIPTION Use this command to rotate images from a stream of pfs. This command is useful for output on hardcopy devices with aspect ratios opposite to the input image. By default, the image is rotated clockwise. The --r option may be used to rotate the image counter-clockwise instead. .SH OPTIONS .TP --r, -r Rotate the image counter-clockwise instead of clockwise. .SH EXAMPLES .TP pfsin memorial.hdr | pfsrotate -r | pfsout memorial_gc.hdr Rotate memorial image 90 degrees counter-clockwise and save to memorial_gc.hdr. .SH "NOTES" To rotate an image 180 degrees, use .BR pfsflip (1) with both the --h and --v options specified. .SH "SEE ALSO" .BR pfsin(1) .BR pfsout(1) .BR pfsflip(1) .SH BUGS Please report bugs and comments to Alexander Efremov . pfstools-1.8.5/src/filter/Makefile.am0000664000175000017500000000164011210154476014433 00000000000000### bin_PROGRAMS = pfsgamma pfsclamp pfstag pfssize pfsextractchannels pfspanoramic \ pfsrotate pfsflip pfscut pfspad pfscat pfsabsolute pfsdisplayfunction man_MANS = pfsgamma.1 pfsclamp.1 pfstag.1 pfssize.1 pfsextractchannels.1 \ pfspanoramic.1 pfsrotate.1 pfsflip.1 pfscut.1 pfspad.1 pfscat.1 \ pfsabsolute.1 pfsdisplayfunction.1 EXTRA_DIST = $(man_MANS) pfsclamp_SOURCES = pfsclamp.cpp pfstag_SOURCES = pfstag.cpp pfsgamma_SOURCES = pfsgamma.cpp pfsdisplayfunction_SOURCES = pfsdisplayfunction.cpp display_function.cpp display_function.h pfssize_SOURCES = pfssize.cpp pfspanoramic_SOURCES = pfspanoramic.cpp pfsextractchannels_SOURCES = pfsextractchannels.cpp pfsrotate_SOURCES = pfsrotate.cpp pfsflip_SOURCES = pfsflip.cpp pfscut_SOURCES = pfscut.cpp pfspad_SOURCES = pfspad.cpp pfscat_SOURCES = pfscat.cpp pfsabsolute_SOURCES = pfsabsolute.cpp LIBS += ../pfs/libpfs-1.2.la INCLUDES = -I${srcdir}/../pfs pfstools-1.8.5/src/filter/Makefile.in0000644000175000017500000006340711652214375014460 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = pfsgamma$(EXEEXT) pfsclamp$(EXEEXT) pfstag$(EXEEXT) \ pfssize$(EXEEXT) pfsextractchannels$(EXEEXT) \ pfspanoramic$(EXEEXT) pfsrotate$(EXEEXT) pfsflip$(EXEEXT) \ pfscut$(EXEEXT) pfspad$(EXEEXT) pfscat$(EXEEXT) \ pfsabsolute$(EXEEXT) pfsdisplayfunction$(EXEEXT) subdir = src/filter DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am_pfsabsolute_OBJECTS = pfsabsolute.$(OBJEXT) pfsabsolute_OBJECTS = $(am_pfsabsolute_OBJECTS) pfsabsolute_LDADD = $(LDADD) am_pfscat_OBJECTS = pfscat.$(OBJEXT) pfscat_OBJECTS = $(am_pfscat_OBJECTS) pfscat_LDADD = $(LDADD) am_pfsclamp_OBJECTS = pfsclamp.$(OBJEXT) pfsclamp_OBJECTS = $(am_pfsclamp_OBJECTS) pfsclamp_LDADD = $(LDADD) am_pfscut_OBJECTS = pfscut.$(OBJEXT) pfscut_OBJECTS = $(am_pfscut_OBJECTS) pfscut_LDADD = $(LDADD) am_pfsdisplayfunction_OBJECTS = pfsdisplayfunction.$(OBJEXT) \ display_function.$(OBJEXT) pfsdisplayfunction_OBJECTS = $(am_pfsdisplayfunction_OBJECTS) pfsdisplayfunction_LDADD = $(LDADD) am_pfsextractchannels_OBJECTS = pfsextractchannels.$(OBJEXT) pfsextractchannels_OBJECTS = $(am_pfsextractchannels_OBJECTS) pfsextractchannels_LDADD = $(LDADD) am_pfsflip_OBJECTS = pfsflip.$(OBJEXT) pfsflip_OBJECTS = $(am_pfsflip_OBJECTS) pfsflip_LDADD = $(LDADD) am_pfsgamma_OBJECTS = pfsgamma.$(OBJEXT) pfsgamma_OBJECTS = $(am_pfsgamma_OBJECTS) pfsgamma_LDADD = $(LDADD) am_pfspad_OBJECTS = pfspad.$(OBJEXT) pfspad_OBJECTS = $(am_pfspad_OBJECTS) pfspad_LDADD = $(LDADD) am_pfspanoramic_OBJECTS = pfspanoramic.$(OBJEXT) pfspanoramic_OBJECTS = $(am_pfspanoramic_OBJECTS) pfspanoramic_LDADD = $(LDADD) am_pfsrotate_OBJECTS = pfsrotate.$(OBJEXT) pfsrotate_OBJECTS = $(am_pfsrotate_OBJECTS) pfsrotate_LDADD = $(LDADD) am_pfssize_OBJECTS = pfssize.$(OBJEXT) pfssize_OBJECTS = $(am_pfssize_OBJECTS) pfssize_LDADD = $(LDADD) am_pfstag_OBJECTS = pfstag.$(OBJEXT) pfstag_OBJECTS = $(am_pfstag_OBJECTS) pfstag_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(pfsabsolute_SOURCES) $(pfscat_SOURCES) $(pfsclamp_SOURCES) \ $(pfscut_SOURCES) $(pfsdisplayfunction_SOURCES) \ $(pfsextractchannels_SOURCES) $(pfsflip_SOURCES) \ $(pfsgamma_SOURCES) $(pfspad_SOURCES) $(pfspanoramic_SOURCES) \ $(pfsrotate_SOURCES) $(pfssize_SOURCES) $(pfstag_SOURCES) DIST_SOURCES = $(pfsabsolute_SOURCES) $(pfscat_SOURCES) \ $(pfsclamp_SOURCES) $(pfscut_SOURCES) \ $(pfsdisplayfunction_SOURCES) $(pfsextractchannels_SOURCES) \ $(pfsflip_SOURCES) $(pfsgamma_SOURCES) $(pfspad_SOURCES) \ $(pfspanoramic_SOURCES) $(pfsrotate_SOURCES) \ $(pfssize_SOURCES) $(pfstag_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ ../pfs/libpfs-1.2.la LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = pfsgamma.1 pfsclamp.1 pfstag.1 pfssize.1 pfsextractchannels.1 \ pfspanoramic.1 pfsrotate.1 pfsflip.1 pfscut.1 pfspad.1 pfscat.1 \ pfsabsolute.1 pfsdisplayfunction.1 EXTRA_DIST = $(man_MANS) pfsclamp_SOURCES = pfsclamp.cpp pfstag_SOURCES = pfstag.cpp pfsgamma_SOURCES = pfsgamma.cpp pfsdisplayfunction_SOURCES = pfsdisplayfunction.cpp display_function.cpp display_function.h pfssize_SOURCES = pfssize.cpp pfspanoramic_SOURCES = pfspanoramic.cpp pfsextractchannels_SOURCES = pfsextractchannels.cpp pfsrotate_SOURCES = pfsrotate.cpp pfsflip_SOURCES = pfsflip.cpp pfscut_SOURCES = pfscut.cpp pfspad_SOURCES = pfspad.cpp pfscat_SOURCES = pfscat.cpp pfsabsolute_SOURCES = pfsabsolute.cpp INCLUDES = -I${srcdir}/../pfs all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/filter/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/filter/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pfsabsolute$(EXEEXT): $(pfsabsolute_OBJECTS) $(pfsabsolute_DEPENDENCIES) @rm -f pfsabsolute$(EXEEXT) $(CXXLINK) $(pfsabsolute_OBJECTS) $(pfsabsolute_LDADD) $(LIBS) pfscat$(EXEEXT): $(pfscat_OBJECTS) $(pfscat_DEPENDENCIES) @rm -f pfscat$(EXEEXT) $(CXXLINK) $(pfscat_OBJECTS) $(pfscat_LDADD) $(LIBS) pfsclamp$(EXEEXT): $(pfsclamp_OBJECTS) $(pfsclamp_DEPENDENCIES) @rm -f pfsclamp$(EXEEXT) $(CXXLINK) $(pfsclamp_OBJECTS) $(pfsclamp_LDADD) $(LIBS) pfscut$(EXEEXT): $(pfscut_OBJECTS) $(pfscut_DEPENDENCIES) @rm -f pfscut$(EXEEXT) $(CXXLINK) $(pfscut_OBJECTS) $(pfscut_LDADD) $(LIBS) pfsdisplayfunction$(EXEEXT): $(pfsdisplayfunction_OBJECTS) $(pfsdisplayfunction_DEPENDENCIES) @rm -f pfsdisplayfunction$(EXEEXT) $(CXXLINK) $(pfsdisplayfunction_OBJECTS) $(pfsdisplayfunction_LDADD) $(LIBS) pfsextractchannels$(EXEEXT): $(pfsextractchannels_OBJECTS) $(pfsextractchannels_DEPENDENCIES) @rm -f pfsextractchannels$(EXEEXT) $(CXXLINK) $(pfsextractchannels_OBJECTS) $(pfsextractchannels_LDADD) $(LIBS) pfsflip$(EXEEXT): $(pfsflip_OBJECTS) $(pfsflip_DEPENDENCIES) @rm -f pfsflip$(EXEEXT) $(CXXLINK) $(pfsflip_OBJECTS) $(pfsflip_LDADD) $(LIBS) pfsgamma$(EXEEXT): $(pfsgamma_OBJECTS) $(pfsgamma_DEPENDENCIES) @rm -f pfsgamma$(EXEEXT) $(CXXLINK) $(pfsgamma_OBJECTS) $(pfsgamma_LDADD) $(LIBS) pfspad$(EXEEXT): $(pfspad_OBJECTS) $(pfspad_DEPENDENCIES) @rm -f pfspad$(EXEEXT) $(CXXLINK) $(pfspad_OBJECTS) $(pfspad_LDADD) $(LIBS) pfspanoramic$(EXEEXT): $(pfspanoramic_OBJECTS) $(pfspanoramic_DEPENDENCIES) @rm -f pfspanoramic$(EXEEXT) $(CXXLINK) $(pfspanoramic_OBJECTS) $(pfspanoramic_LDADD) $(LIBS) pfsrotate$(EXEEXT): $(pfsrotate_OBJECTS) $(pfsrotate_DEPENDENCIES) @rm -f pfsrotate$(EXEEXT) $(CXXLINK) $(pfsrotate_OBJECTS) $(pfsrotate_LDADD) $(LIBS) pfssize$(EXEEXT): $(pfssize_OBJECTS) $(pfssize_DEPENDENCIES) @rm -f pfssize$(EXEEXT) $(CXXLINK) $(pfssize_OBJECTS) $(pfssize_LDADD) $(LIBS) pfstag$(EXEEXT): $(pfstag_OBJECTS) $(pfstag_DEPENDENCIES) @rm -f pfstag$(EXEEXT) $(CXXLINK) $(pfstag_OBJECTS) $(pfstag_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/display_function.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsabsolute.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfscat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsclamp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfscut.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsdisplayfunction.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsextractchannels.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsflip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsgamma.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfspad.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfspanoramic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsrotate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfssize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfstag.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-man \ uninstall-man1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/src/filter/pfscut.cpp0000664000175000017500000001667010736434641014427 00000000000000/** * @brief Cut a rectangle out of images in PFS stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Dorota Zdrojewska, * */ #include #include #include #include #include #define PROG_NAME "pfscut" #define UNSP INT_MAX #define MIN 0 #define MAX 1 #define SIZE 2 using namespace std; class QuietException { }; static struct option cmdLineOptions[] = { {"help", no_argument, NULL, 'h'}, {"left", required_argument, NULL, 'l'}, {"right", required_argument, NULL, 'r'}, {"top", required_argument, NULL, 't'}, {"bottom", required_argument, NULL, 'b'}, {"width", required_argument, NULL, 'W'}, {"height", required_argument, NULL, 'H'}, {NULL, 0, NULL, 0} }; void printHelp() { fprintf( stderr, PROG_NAME ": \n" "\t[--left ]\n" "\t[--right ]\n" "\t[--top ]\n" "\t[--bottom ]\n" "\t[--width ]\n" "\t[--height ]\n" "\t[--help]\n" "\t[x_ul y_ul x_br y_br]\n" "See man page for more information.\n"); } void calcBorders(int min, int max, int size, int inSize, int flag, int* out) { if (min<0 || max<0) throw pfs::Exception("You cannot cut negative number of pixels"); if (min>=inSize && min!=UNSP) throw pfs::Exception("You cannot cut number of pixels greater than size of an image"); if (max>=inSize && max!=UNSP) throw pfs::Exception("You cannot cut number of pixels greater than size of an image"); if (size>inSize && size!=UNSP) throw pfs::Exception("You cannot specify size greater than size of an input image"); if (min!=UNSP && max!=UNSP && size!=UNSP) if (flag) throw pfs::Exception("You cannot specify all width, left and right options"); else throw pfs::Exception("You cannot specify all height, top and bottom options"); if (min!=UNSP && max!=UNSP && size==UNSP) { if((min+max)>=inSize) if (flag) throw pfs::Exception("Too large value for left or right option"); else throw pfs::Exception("Too large value for top or bottom option"); out[MIN]=min; out[MAX]=inSize-max-1; out[SIZE]=inSize-min-max; } if (min!=UNSP && max==UNSP && size==UNSP) { out[MIN]=min; out[MAX]=inSize-1; out[SIZE]=inSize-min; } if (min==UNSP && max!=UNSP && size==UNSP) { out[MIN]=0; out[MAX]=inSize-max-1; out[SIZE]=inSize-max; } if (min!=UNSP && max==UNSP && size!=UNSP) { if((min+max)>inSize) if(flag) throw pfs::Exception("Too large value for left or width option"); else throw pfs::Exception("Too large value for top or height option"); out[MIN]=min; out[MAX]=size+min-1; out[SIZE]=size; } if (min==UNSP && max!=UNSP && size!=UNSP) { if((max+size)>inSize) if(flag) throw pfs::Exception("Too large value for right or width option"); else throw pfs::Exception("Too large value for bottom or height option"); out[MIN]=inSize-max-size; out[MAX]=inSize-max-1; out[SIZE]=size; } if (min==UNSP && max==UNSP && size!=UNSP) { int diff=inSize-size; out[MIN]=diff/2; out[MAX]=inSize-(diff/2)-1; if(diff%2) out[MAX]--; out[SIZE]=size; } if (min==UNSP && max==UNSP && size==UNSP) { out[MIN]=0; out[MAX]=inSize-1; out[SIZE]=inSize; } } void pfscut (int argc, char* argv[]) { pfs::DOMIO pfsio; //numbers of pixels to cut from each border of an image int left=UNSP, right=UNSP, top=UNSP, bottom=UNSP; int width=UNSP, height=UNSP; //size of an output image int x_ul=UNSP, y_ul=UNSP, x_br=UNSP, y_br=UNSP; int optionIndex=0; while (1) { int c=getopt_long(argc, argv, "hl:r:t:b:W:H:", cmdLineOptions, &optionIndex); if(c==-1) break; switch(c) { case 'h': printHelp(); throw QuietException(); break; case 'l': left=atoi(optarg); break; case 'r': right=atoi(optarg); break; case 't': top=atoi(optarg); break; case 'b': bottom=atoi(optarg); break; case 'W': width=atoi(optarg); if (width<=0) throw pfs::Exception("Size of an output image cannot be negative or equal to 0"); break; case 'H': height=atoi(optarg); if (height<=0) throw pfs::Exception("Size of an output image cannot be negative or equal to 0"); break; } } if( optind != argc ) { if( optind != (argc - 4) ) throw pfs::Exception( "You must specify x and y coordinates of both upper left and lower right corner" ); x_ul = strtol( argv[optind++], NULL, 10 ); y_ul = strtol( argv[optind++], NULL, 10 ); x_br = strtol( argv[optind++], NULL, 10 ); y_br = strtol( argv[optind++], NULL, 10 ); } while (1) { pfs::Frame *inFrame = pfsio.readFrame(stdin); if (inFrame==NULL) break; // no more frames int inWidth=inFrame->getWidth(); int inHeight=inFrame->getHeight(); int leftRight[3], topBottom[3]; if( x_ul != UNSP ) { leftRight[MIN] = x_ul; leftRight[MAX] = x_br; leftRight[SIZE] = x_br - x_ul + 1; topBottom[MIN] = y_ul; topBottom[MAX] = y_br; topBottom[SIZE] = y_br - y_ul + 1; } else { //calculate edge columns and rows of an input image to be in an output image calcBorders(left, right, width, inWidth, 1, leftRight); calcBorders(top, bottom, height, inHeight, 0, topBottom); } if( topBottom[SIZE] < 1 || leftRight[SIZE] < 1 ) throw pfs::Exception( "The resulting image has zero or negative size" ); if( topBottom[MIN] < 0 || leftRight[MIN] < 0 || topBottom[MAX] >= inHeight || leftRight[MAX] >= inWidth ) throw pfs::Exception( "The specified coordinates are outsize the image boundaries" ); int lCol=leftRight[MIN]; int rCol=leftRight[MAX]; int tRow=topBottom[MIN]; int bRow=topBottom[MAX]; int outWidth=leftRight[SIZE]; int outHeight=topBottom[SIZE]; pfs::Frame *outFrame = pfsio.createFrame(outWidth, outHeight); pfs::ChannelIterator *it = inFrame->getChannels(); while (it->hasNext()) { pfs::Channel *inCh = it->getNext(); pfs::Channel *outCh = outFrame->createChannel(inCh->getName()); for (int i=tRow; i<=bRow; i++) for (int j=lCol; j<=rCol; j++) (*outCh)(j-lCol, i-tRow)=(*inCh)(j,i); } pfs::copyTags(inFrame, outFrame); pfsio.writeFrame(outFrame, stdout); pfsio.freeFrame(inFrame); pfsio.freeFrame(outFrame); } } int main (int argc, char* argv[]) { try { pfscut(argc, argv); } catch (pfs::Exception ex) { fprintf (stderr, PROG_NAME " error: %s\n", ex.getMessage()); return EXIT_FAILURE; } catch (QuietException ex) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfsdisplayfunction.cpp0000664000175000017500000001305111043640745017031 00000000000000/** * @brief Apply display function or inverse display function the the pfs stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsdisplayfunction.cpp,v 1.2 2008/07/29 16:14:29 rafm Exp $ */ #include #include #include #include #include #include #include #include "display_function.h" #define PROG_NAME "pfsdisplayfunction" class QuietException { }; void applyDisplayFunction( pfs::Array2D *array, DisplayFunction *df, int model_dir ); void printHelp() { fprintf( stderr, PROG_NAME " [--gamma | --inverse-gamma ] [--mul ] [--verbose] [--help]\n" "See man page for more information.\n" ); } void processFrames( int argc, char* argv[] ) { pfs::DOMIO pfsio; DisplayFunction *df = NULL; bool verbose = false; int model_dir = 0; // -1 to-pixels; 1 to-luminance; 0 unspecified df = createDisplayFunctionFromArgs( argc, argv ); if( df == NULL ) df = new DisplayFunctionGGBA( "lcd" ); static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "to-pixels", no_argument, NULL, 'p' }, { "to-luminance", no_argument, NULL, 'l' }, { NULL, 0, NULL, 0 } }; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "hvpl", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'l': model_dir = 1; break; case 'p': model_dir = -1; break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( verbose ) { df->print( stderr ); } bool first_frame = true; while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) break; // No more frames if( first_frame ) { const char *lum_type = frame->getTags()->getString("LUMINANCE"); if( lum_type ) { if( model_dir == 0 ) { // Determine model direction from the LUMINANCE tag if( !strcmp( lum_type, "DISPLAY" ) ) model_dir = 1; else if( !strcmp( lum_type, "ABSOLUTE" ) ) model_dir = -1; } if( !strcmp( lum_type, "DISPLAY" ) && model_dir == -1 ) std::cerr << PROG_NAME " warning: applying inverse display function to a display referred image" << std::endl; if( !strcmp( lum_type, "ABSOLUTE" ) && model_dir == 1 ) std::cerr << PROG_NAME " warning: applying display function to a linear luminance or radiance image" << std::endl; if( !strcmp( lum_type, "RELATIVE" ) ) std::cerr << PROG_NAME " warning: input image should be in absolute luminance / radiance units" << std::endl; } } if( model_dir == 0 ) throw pfs::Exception( "specify --to-pixels or --to-luminance mapping" ); pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); if( X != NULL ) { // Color, XYZ pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, X, Y, Z ); // At this point (X,Y,Z) = (R,G,B) applyDisplayFunction( X, df, model_dir ); applyDisplayFunction( Y, df, model_dir ); applyDisplayFunction( Z, df, model_dir ); pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); // At this point (X,Y,Z) = (X,Y,Z) } else if( (Y = frame->getChannel( "Y" )) != NULL ) { // Luminance only applyDisplayFunction( Y, df, model_dir ); } else throw pfs::Exception( "Missing X, Y, Z channels in the PFS stream" ); if( model_dir == -1 ) frame->getTags()->setString("LUMINANCE", "DISPLAY"); else if( model_dir == 1 ) frame->getTags()->setString("LUMINANCE", "ABSOLUTE"); first_frame = false; pfsio.writeFrame( frame, stdout ); pfsio.freeFrame( frame ); } } void applyDisplayFunction( pfs::Array2D *array, DisplayFunction *df, int model_dir ) { int imgSize = array->getRows()*array->getCols(); for( int index = 0; index < imgSize ; index++ ) { float &v = (*array)(index); if( model_dir == -1 ) v = df->inv_display( v ); else v = df->display( v ); } } int main( int argc, char* argv[] ) { try { processFrames( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/filter/pfssize.10000664000175000017500000000376010720544167014156 00000000000000.TH "pfssize" 1 .SH NAME pfssize \- Resize frames .SH SYNOPSIS .B pfssize [--x ] [--y ] [--ratio ] [--maxx ] [--maxy ] [--minx ] [--miny ] [--filter ] .SH DESCRIPTION Resize all frames and all channels in the stream. Note that resampling is done on each channel as it is - for color images resampling is usually done in linear (not gamma corrected) XYZ color space. .SH OPTIONS .TP --x , -x New x resolution in pixels. .TP --y , -y New y resolution in pixels. .TP --ratio , -r Resize both width and height using the given ratio. Ratio equal 1 is the original size, lower than 1 makes the frames smaller and greater than 1, enlarges the frames. .TP --minx , --miny Make sure that the resulting image has at least width and/or height. Cannot be used in combination with -x, -y and --ratio. .TP --maxx , --maxy Make sure that the resulting image has at most width and/or height. Cannot be used in combination with -x, -y and --ratio. .TP --filter , -f Use filter for upsampling (on downsampling, box filter is always used). Available filters: .B BOX Box filter. This is the fastest and the filter, but it also causes visible aliasing artifacts. .B LINEAR (deafult) Bi-linear filter. .B MITCHELL Mitchell filter. From \fIMitchell and Netravali, Reconstruction Filters in Computer Graphics,In Computer Graphics, vol. 22 (4) 1988\fR. Since the filter contains negative parts, it may cause halo artifacts and it may result in negative values for HDR images. .SH EXAMPLES .TP pfsin memorial.hdr | pfssize -r 0.25 | pfsout memorial_small.hdr Lower the resolution of memorial.hdr four times. .SH "SEE ALSO" .BR pfsin (1) .BR pfsout (1) .SH BUGS Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/filter/display_function.h0000664000175000017500000000503411026307540016120 00000000000000/** * @brief Display Adaptive TMO * * From: * Rafal Mantiuk, Scott Daly, Louis Kerofsky. * Display Adaptive Tone Mapping. * To appear in: ACM Transactions on Graphics (Proc. of SIGGRAPH'08) 27 (3) * http://www.mpi-inf.mpg.de/resources/hdr/datmo/ * * This file is a part of PFSTMO package. * ---------------------------------------------------------------------- * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: display_function.h,v 1.1 2008/06/18 22:42:40 rafm Exp $ */ #ifndef DISPLAY_FUNCTION_H #define DISPLAY_FUNCTION_H #include class DisplayFunction { public: /** Convert input luminance (cd/m^2) to pixel value (0-1) */ virtual float inv_display( float L ) = 0; /** Convert pixel value (0-1) to input luminance (cd/m^2) */ virtual float display( float pix ) = 0; virtual void print( FILE *fh ) = 0; virtual ~DisplayFunction() { } }; /** * Gamma Gain Black and Ambient display model */ class DisplayFunctionGGBA : public DisplayFunction { float gamma, L_max, L_offset, L_black, E_amb, screen_refl; public: DisplayFunctionGGBA( float gamma, float L_max, float L_black, float E_amb, float screen_refl ); DisplayFunctionGGBA( const char *predefined ); float inv_display( float L ); float display( float pix ); void print( FILE *fh ); private: void init( float gamma, float L_max, float L_black, float E_amb, float screen_refl ); }; class DisplayFunctionLUT : public DisplayFunction { float *pix_lut, *L_lut; size_t lut_size; public: DisplayFunctionLUT( const char *file_name ); ~DisplayFunctionLUT(); float inv_display( float L ); float display( float pix ); void print( FILE *fh ); }; DisplayFunction *createDisplayFunctionFromArgs( int &argc, char* argv[] ); #endif pfstools-1.8.5/src/pfs/0002755000175000017500000000000011652214413011757 500000000000000pfstools-1.8.5/src/pfs/array2d.h0000664000175000017500000002003710254027367013425 00000000000000/** * @file * @brief PFS library - general 2d array interface * * All pfs::Array2D classes are part of pfs library. However, to * lessen coupling of the code with pfs library, Array2D classes are * declared in this separate file. Therefore it is possible to write * the code that implements or uses Array2D interface while it has no * knowledge of other pfs library classes. * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: array2d.h,v 1.1 2005/06/15 13:36:55 rafm Exp $ */ #ifndef Array2D_H #define Array2D_H #include namespace pfs { /** * @brief Interface for 2 dimensional array of floats. * * This is a thin interface of classes that hold 2 dimensional arrays * of floats. The interface lets to access all types of arrays in the * same way, regardless how data is really stored (row major, column * major, 2D array, array of pointers, etc.). It also simplifies * indexing. * * See also implementing classes. */ class Array2D { public: /** * Get number of columns or, in case of an image, width. */ virtual int getCols() const = 0; /** * Get number of rows or, in case of an image, height. */ virtual int getRows() const = 0; /** * Access an element of the array for reading and * writing. Whether the given row and column are checked against * array bounds depends on an implementing class. * * Note, that if an Array2D object is passed as a pointer (what * is usually the case), to access its elements, you have to use * somewhat strange syntax: (*array)(row, column). * * @param col number of a column (x) within the range 0..(getCols()-1) * @param row number of a row (y) within the range 0..(getRows()-1) */ virtual float& operator()( int col, int row ) = 0; /** * Access an element of the array for reading. Whether the given * row and column are checked against array bounds depends on an * implementing class. * * Note, that if an Array2D object is passed as a pointer (what * is usually the case), to access its elements, you have to use * somewhat strange syntax: (*array)(row, column). * * @param col number of a column (x) within the range 0..(getCols()-1) * @param row number of a row (y) within the range 0..(getRows()-1) */ virtual const float& operator()( int col, int row ) const = 0; /** * Access an element of the array for reading and writing. This * is probably faster way of accessing elements than * operator(col, row). However there is no guarantee on the * order of elements as it usually depends on an implementing * class. The only assumption that can be make is that there are * exactly columns*rows elements and they are all unique. * * Whether the given index is checked against array bounds * depends on an implementing class. * * Note, that if an Array2D object is passed as a pointer (what * is usually the case), to access its elements, you have to use * somewhat strange syntax: (*array)(index). * * @param index index of an element within the range 0..(getCols()*getRows()-1) */ virtual float& operator()( int index ) = 0; /** * Access an element of the array for reading. This * is probably faster way of accessing elements than * operator(col, row). However there is no guarantee on the * order of elements as it usually depends on an implementing * class. The only assumption that can be make is that there are * exactly columns*rows elements and they are all unique. * * Whether the given index is checked against array bounds * depends on an implementing class. * * Note, that if an Array2D object is passed as a pointer (what * is usually the case), to access its elements, you have to use * somewhat strange syntax: (*array)(index). * * @param index index of an element within the range 0..(getCols()*getRows()-1) */ virtual const float& operator()( int index ) const = 0; /** * Each implementing class should provide its own destructor. */ virtual ~Array2D() { } }; /** * @brief Two dimensional array of floats * * Holds 2D data in column-major oder. Allows easy indexing * and retrieving array dimensions. */ class Array2DImpl: public Array2D { float *data; int cols, rows; public: Array2DImpl( int cols, int rows ) : cols( cols ), rows( rows ) { data = new float[cols*rows]; } ~Array2DImpl() { delete[] data; } inline int getCols() const { return cols; } inline int getRows() const { return rows; } inline float& operator()( int col, int row ) { assert( col >= 0 && col < cols ); assert( row >= 0 && row < rows ); return data[ col+row*cols ]; } inline const float& operator()( int col, int row ) const { assert( col >= 0 && col < cols ); assert( row >= 0 && row < rows ); return data[ col+row*cols ]; } inline float& operator()( int index ) { assert( index >= 0 && index < rows*cols ); return data[index]; } inline const float& operator()( int index ) const { assert( index >= 0 && index <= rows*cols ); return data[index]; } float* getRawData() { return data; } }; /** * Copy data from one Array2D to another. Dimensions of the arrays must be the same. * * @param from array to copy from * @param to array to copy to */ inline void copyArray(const Array2D *from, Array2D *to) { assert( from->getRows() == to->getRows() ); assert( from->getCols() == to->getCols() ); const int elements = from->getRows()*from->getCols(); for( int i = 0; i < elements; i++ ) (*to)(i) = (*from)(i); } /** * Set all elements of the array to a give value. * * @param array array to modify * @param value all elements of the array will be set to this value */ inline void setArray(Array2D *array, const float value ) { const int elements = array->getRows()*array->getCols(); for( int i = 0; i < elements; i++ ) (*array)(i) = value; } /** * Perform element-by-element multiplication: z = x * y. z can be the same as x or y. * * @param z array where the result is stored * @param x first element of the multiplication * @param y second element of the multiplication */ inline void multiplyArray(Array2D *z, const Array2D *x, const Array2D *y) { assert( x->getRows() == y->getRows() ); assert( x->getCols() == y->getCols() ); assert( x->getRows() == z->getRows() ); assert( x->getCols() == z->getCols() ); const int elements = x->getRows()*x->getCols(); for( int i = 0; i < elements; i++ ) (*z)(i) = (*x)(i) * (*y)(i); } } #endif pfstools-1.8.5/src/pfs/colorspace.cpp0000664000175000017500000002510010647352025014540 00000000000000/** * @brief PFS library - color space transformations * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: colorspace.cpp,v 1.6 2007/07/18 08:49:25 rafm Exp $ */ #include #include "pfs.h" #include #include #include namespace pfs { //--- 7 digits approximation of precise values static const float rgb2xyzD65Mat[3][3] = { { 0.412424f, 0.357579f, 0.180464f }, { 0.212656f, 0.715158f, 0.072186f }, { 0.019332f, 0.119193f, 0.950444f } }; static const float xyz2rgbD65Mat[3][3] = { { 3.240708, -1.537259, -0.498570 }, { -0.969257, 1.875995, 0.041555 }, { 0.055636, -0.203996, 1.057069 } }; // //--- precise values for matrix convertion (above float precission) // static const float rgb2xyzD65Mat[3][3] = // { { 0.412424, 0.357579, 0.180464 }, // { 0.212656, 0.715158, 0.0721856 }, // { 0.0193324, 0.119193, 0.950444 } }; // static const float xyz2rgbD65Mat[3][3] = // { { 3.24071, -1.53726, -0.498571 }, // { -0.969258, 1.87599, 0.0415557 }, // { 0.0556352, -0.203996, 1.05707 } }; // //--- original values which lead to mean sq error of above 3 for green channel // static const float rgb2xyzD65Mat[3][3] = // { { 0.4124f, 0.3576f, 0.1805f }, // { 0.2126f, 0.7152f, 0.0722f }, // { 0.0193f, 0.1192f, 0.9505f } }; // static const float xyz2rgbD65Mat[3][3] = // { { 3.2406f, -1.5372f, -0.4986f }, // { -0.9689f, 1.8758f, 0.0415f }, // { 0.0557f, -0.2040f, 1.0570f } }; static void multiplyByMatrix( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3, const float mat[3][3] ) { int imgSize = inC1->getRows()*inC1->getCols(); for( int index = 0; index < imgSize ; index++ ) { const float x1 = (*inC1)(index), x2 = (*inC2)(index), x3 = (*inC3)(index); float &y1 = (*outC1)(index), &y2 = (*outC2)(index), &y3 = (*outC3)(index); y1 = mat[0][0]*x1 + mat[0][1]*x2 + mat[0][2]*x3; y2 = mat[1][0]*x1 + mat[1][1]*x2 + mat[1][2]*x3; y3 = mat[2][0]*x1 + mat[2][1]*x2 + mat[2][2]*x3; } } //----------------------------------------------------------- // sRGB conversion functions //----------------------------------------------------------- static inline float clamp( const float v, const float min, const float max ) { if( v < min ) return min; if( v > max ) return max; return v; } static void transformSRGB2XYZ( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3 ) { int imgSize = inC1->getRows()*inC1->getCols(); for( int index = 0; index < imgSize ; index++ ) { float r = (*inC1)(index), g = (*inC2)(index), b = (*inC3)(index); float &x = (*outC1)(index), &y = (*outC2)(index), &z = (*outC3)(index); r = clamp( r, 0, 1 ); g = clamp( g, 0, 1 ); b = clamp( b, 0, 1 ); x = (r <= 0.04045 ? r / 12.92f : powf( (r + 0.055f) / 1.055f, 2.4f ) ); y = (g <= 0.04045 ? g / 12.92f : powf( (g + 0.055f) / 1.055f, 2.4f ) ); z = (b <= 0.04045 ? b / 12.92f : powf( (b + 0.055f) / 1.055f, 2.4f ) ); } multiplyByMatrix( outC1, outC2, outC3, outC1, outC2, outC3, rgb2xyzD65Mat ); } static void transformXYZ2SRGB( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3 ) { multiplyByMatrix( outC1, outC2, outC3, outC1, outC2, outC3, xyz2rgbD65Mat ); int imgSize = inC1->getRows()*inC1->getCols(); for( int index = 0; index < imgSize ; index++ ) { float r = (*inC1)(index), g = (*inC2)(index), b = (*inC3)(index); float &o_r = (*outC1)(index), &o_g = (*outC2)(index), &o_b = (*outC3)(index); r = clamp( r, 0, 1 ); g = clamp( g, 0, 1 ); b = clamp( b, 0, 1 ); o_r = (r <= 0.0031308 ? r *= 12.92f : 1.055f * powf( r, 1./2.4 ) - 0.055); o_g = (g <= 0.0031308 ? g *= 12.92f : 1.055f * powf( g, 1./2.4 ) - 0.055); o_b = (b <= 0.0031308 ? b *= 12.92f : 1.055f * powf( b, 1./2.4 ) - 0.055); } } static void transformXYZ2Yuv( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3 ) { int imgSize = inC1->getRows()*inC1->getCols(); for( int index = 0; index < imgSize ; index++ ) { const float &X = (*inC1)(index), Y = (*inC2)(index), &Z = (*inC3)(index); float &outY = (*outC1)(index), &u = (*outC2)(index), &v = (*outC3)(index); float x = X/(X+Y+Z); float y = Y/(X+Y+Z); // assert((4.f*nx / (-2.f*nx + 12.f*ny + 3.f)) <= 0.62 ); // assert( (9.f*ny / (-2.f*nx + 12.f*ny + 3.f)) <= 0.62 ); u = 4.f*x / (-2.f*x + 12.f*y + 3.f); v = 9.f*y / (-2.f*x + 12.f*y + 3.f); outY = Y; } } static void transformYuv2XYZ( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3 ) { int imgSize = inC1->getRows()*inC1->getCols(); for( int index = 0; index < imgSize ; index++ ) { const float Y = (*inC1)(index), &u = (*inC2)(index), &v = (*inC3)(index); float &X = (*outC1)(index), &outY = (*outC2)(index), &Z = (*outC3)(index); float x = 9.f*u / (6.f*u - 16.f*v + 12.f); float y = 4.f*v / (6.f*u - 16.f*v + 12.f); X = x/y * Y; Z = (1.f-x-y)/y * Y; outY = Y; } } static void transformYxy2XYZ( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3 ) { int imgSize = inC1->getRows()*inC1->getCols(); for( int index = 0; index < imgSize ; index++ ) { const float Y = (*inC1)(index), x = (*inC2)(index), y = (*inC3)(index); float &X = (*outC1)(index), &outY = (*outC2)(index), &Z = (*outC3)(index); X = x/y * Y; Z = (1.f-x-y)/y * Y; outY = Y; } } static void transformXYZ2Yxy( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3 ) { int imgSize = inC1->getRows()*inC1->getCols(); for( int index = 0; index < imgSize ; index++ ) { const float X = (*inC1)(index), Y = (*inC2)(index), Z = (*inC3)(index); float &outY = (*outC1)(index), &x = (*outC2)(index), &y = (*outC3)(index); x = X/(X+Y+Z); y = Y/(X+Y+Z); outY = Y; } } static void transformRGB2XYZ( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3 ) { multiplyByMatrix( inC1, inC2, inC3, outC1, outC2, outC3, rgb2xyzD65Mat ); } static void transformXYZ2RGB( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3 ) { multiplyByMatrix( inC1, inC2, inC3, outC1, outC2, outC3, xyz2rgbD65Mat ); } typedef void(*CSTransformFunc)( const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, Array2D *outC1, Array2D *outC2, Array2D *outC3 ); struct CSTransEdge { CSTransEdge *next; ColorSpace srcCS; ColorSpace destCS; CSTransformFunc func; }; CSTransEdge TN_XYZRGB = { NULL, CS_XYZ, CS_RGB, transformXYZ2RGB }; CSTransEdge TN_XYZYUV = { &TN_XYZRGB, CS_XYZ, CS_YUV, transformXYZ2Yuv }; CSTransEdge TN_XYZYxy = { &TN_XYZYUV, CS_XYZ, CS_Yxy, transformXYZ2Yxy }; CSTransEdge TN_XYZSRGB = { &TN_XYZYxy, CS_XYZ, CS_SRGB, transformXYZ2SRGB }; CSTransEdge TN_RGBXYZ = { NULL, CS_RGB, CS_XYZ, transformRGB2XYZ }; CSTransEdge TN_SRGBXYZ = { NULL, CS_SRGB, CS_XYZ, transformSRGB2XYZ }; CSTransEdge TN_YUV2XYZ = { NULL, CS_YUV, CS_XYZ, transformYuv2XYZ }; CSTransEdge TN_Yxy2XYZ = { NULL, CS_Yxy, CS_XYZ, transformYxy2XYZ }; CSTransEdge *CSTransGraph[] = { &TN_XYZSRGB, &TN_RGBXYZ, &TN_SRGBXYZ, &TN_YUV2XYZ, &TN_Yxy2XYZ }; void transformColorSpace( ColorSpace inCS, const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, ColorSpace outCS, Array2D *outC1, Array2D *outC2, Array2D *outC3 ) { assert( inC1->getCols() == inC2->getCols() && inC2->getCols() == inC3->getCols() && inC3->getCols() == outC1->getCols() && outC1->getCols() == outC2->getCols() && outC2->getCols() == outC3->getCols() ); assert( inC1->getRows() == inC2->getRows() && inC2->getRows() == inC3->getRows() && inC3->getRows() == outC1->getRows() && outC1->getRows() == outC2->getRows() && outC2->getRows() == outC3->getRows() ); CSTransEdge *gotByEdge[ CS_LAST ] = { NULL }; // Breadth First Search std::list bfsList; bfsList.push_back( inCS ); bool found = false; while( !bfsList.empty() ) { ColorSpace node = bfsList.front(); bfsList.pop_front(); // std::cerr << "Graph Node: " << node << "\n"; if( node == outCS ) { found = true; break; } for( CSTransEdge *edge = CSTransGraph[node]; edge != NULL; edge = edge->next ) { if( edge->destCS != inCS && gotByEdge[ edge->destCS ] == NULL ) { bfsList.push_back( edge->destCS ); gotByEdge[ edge->destCS ] = edge; } } } if( !found ) { // TODO: All transforms should be supported throw Exception( "Not supported color tranform" ); } else { // Reverse path std::list step; ColorSpace currentNode = outCS; while( currentNode != inCS ) { // std::cerr << "edge: " << gotByEdge[ currentNode ]->srcCS << " -- " // << gotByEdge[ currentNode ]->destCS << "\n"; step.push_front( gotByEdge[ currentNode ] ); currentNode = gotByEdge[ currentNode ]->srcCS; } // Execute path std::list::iterator it; for( it = step.begin(); it != step.end(); it++ ) { // std::cerr << "edge: " << (*it)->srcCS << " -- " // << (*it)->destCS << "\n"; if( it == step.begin() ) (*it)->func( inC1, inC2, inC3, outC1, outC2, outC3 ); else (*it)->func( outC1, outC2, outC3, outC1, outC2, outC3 ); } } } } pfstools-1.8.5/src/pfs/pfs.h0000664000175000017500000004573010401354014012642 00000000000000/** * @file * @brief PFS library - core API interfaces * * Classes for reading and writing a stream of PFS frames. * * Note on the design of pfs library API: pfs library API makes * extensive usage of interfaces - classes that have only virtual * methods. This way no private fields are visible for the client * programs. Everything that is private is hidden in .cpp file rather * than the header .h. For example, pfs library uses STL to store some * internal data, but no STL class can be found the header file * pfs.h. Such design should hopefully give less problems when * extending and updating the library. * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfs.h,v 1.2 2006/03/01 17:21:16 rafm Exp $ */ #ifndef PFS_H #define PFS_H #include #include #include "array2d.h" struct option; /** * All classes and function from PFS library reside in pfs namespace. */ namespace pfs { /** * Utility class that keeps pointer and deletes pointed object * when the class is deleted. * * Note that it is not a full implementation of the smart pointer * and memory management is not fool proof. You should never store * this object as a global variable or a field of a class. These * objects should be used only as local variables. */ template class SelfDestructPtr { T *ptr; mutable bool itsOwn; public: explicit SelfDestructPtr( T *ptr = 0 ): ptr(ptr), itsOwn(ptr!=0) { } SelfDestructPtr( const SelfDestructPtr& r ) : itsOwn(r.itsOwn), ptr(r.release()) {} SelfDestructPtr& operator=( const SelfDestructPtr& r ) { if (&r != this) { if (ptr != r.ptr) { if( itsOwn ) delete ptr; itsOwn = r.itsOwn; } else if( r.itsOwn ) itsOwn = true; ptr = r.release(); } return *this; } ~SelfDestructPtr() { if( itsOwn ) delete ptr; } bool operator==( const SelfDestructPtr &x ) const { return *(ptr) == *(x.ptr); } bool operator!=( const SelfDestructPtr &x ) const { return *(ptr) != *(x.ptr); } T& operator*() const {return *ptr;} T* operator->() const {return ptr;} T* get() const {return ptr;} T* release() const {itsOwn = false; return ptr;} }; /** * Iterator that allows to get the list of available tags in a * TagContainer. */ class TagIterator { public: /** * Get next item on the list. * * @return name of the tag */ virtual const char *getNext() = 0; /** * Returns true if there is still an item left on the list. */ virtual bool hasNext() const = 0; }; typedef SelfDestructPtr TagIteratorPtr; /** * TagContainer interface allows to read and modify tags. A tag is "name"="value" pair. */ class TagContainer { public: /** * Get a string tag of the name tagName from the TagContainer. * @param tagName name of the tag to retrieve * @return tag value or NULL if tag was not found */ virtual const char* getString( const char *tagName ) = 0; /** * Set or add a string tag of the name tagName. * @param tagName name of the tag to add or set * @param tagValue value of the tag */ virtual void setString( const char *tagName, const char *tagValue ) = 0; /** * Removes (if exists) a tag of the name tagName from the TagContainer. * @param tagName name of the tag to remove */ virtual void removeTag( const char *tagName ) = 0; /** * Use TagIterator to iterate over all tags in the TagContainer. * TagIteratorPtr is a smart pointer, which destructs * TagIterator when TagIteratorPtr is destructed. Use -> * operator to access TagIterator members from a TagIteratorPtr * object. * * To iterate over all tags, use the following code: * * pfs::TagIteratorPtr it( frame->getTags()->getIterator() ); * while( it->hasNext() ) { * const char *tagName = it->getNext(); * //Do something * } * */ virtual TagIteratorPtr getIterator() const = 0; }; /** * Channel interface represents a 2D rectangular array with * associated tags. */ class Channel : public Array2D { public: /** * Gets width of the channel (in pixels). * This is a synonym for Array2D::getCols(). */ int getWidth() const { return getCols(); } /** * Gets height of the channel (in pixels). * This is a synonym for Array2D::getRows(). */ virtual int getHeight() const { return getRows(); } /** * Gets name of the channel. */ virtual const char *getName() const = 0; /** * Returns TagContainer that can be used to access or modify * tags associated with this Channel object. */ virtual TagContainer *getTags() = 0; /** * For performance reasons, the channels can be accessed as a * table of float values. Data is given in row-major order, i.e. * it is indexed data[x+y*width]. If performance is not crucial, * use Array2D interface instead. * * @return a table of floats of the size width*height */ virtual float *getRawData() = 0; }; /** * Iterator that allows to get the list of available channels in a frame. */ class ChannelIterator { public: /** * Get next item on the list. */ virtual Channel *getNext() = 0; /** * Returns true if there is still an item left on the list. */ virtual bool hasNext() const = 0; }; typedef SelfDestructPtr ChannelIteratorPtr; /** * Interface representing a single PFS frame. Frame may contain 0 * or more channels (e.g. color XYZ, depth channel, alpha * channnel). All the channels are of the same size. Frame can * also contain additional information in tags (see getTags). */ class Frame { public: /** * Gets width of the channels (in pixels). */ virtual int getWidth() const = 0; /** * Gets height of the channels (in pixels). */ virtual int getHeight() const = 0; /** * Gets color channels in XYZ color space. May return NULLs * if such channels do not exist. Values assigned to * X, Y, Z are always either all NULLs or valid pointers to * channels. * * @param X [out] a pointer to store X channel in * @param Y [out] a pointer to store Y channel in * @param Z [out] a pointer to store Z channel in */ virtual void getXYZChannels( Channel* &X, Channel* &Y, Channel* &Z ) = 0; /** * Creates color channels in XYZ color space. If such channels * already exists, returns existing channels, rather than * creating new ones. Note, that nothing can be assumed about * the content of each channel. * * @param X [out] a pointer to store X channel in * @param Y [out] a pointer to store Y channel in * @param Z [out] a pointer to store Z channel in */ virtual void createXYZChannels( Channel* &X, Channel* &Y, Channel* &Z ) = 0; /** * Gets a named channel. * * @param name [in] name of the channel. Name must be 8 or less * character long. * @return channel or NULL if the channel does not exist */ virtual Channel* getChannel( const char *name ) = 0; /** * Creates a named channel. If the channel already exists, returns * existing channel. * * Note that new channels should be created only for the first * frame. The channels should not changes for the subsequent * frames of a sequence. * * @param name [in] name of the channel. Name must be 8 or less * character long. * @return existing or newly created channel */ virtual Channel* createChannel( const char *name ) = 0; /** * Removes a channel. It is safe to remove the channel pointed by * the ChannelIterator. * * @param channel [in] channel that should be removed. */ virtual void removeChannel( Channel *channel ) = 0; /** * DEPRECIATED!!! Use getIterator instead. * * Returns iterator for all available channels. * * Note that only one iterator for particular frame can be used at * a time. This method returns each time the same data structure, * so the iterator from previous call is lost after the call. The * iterator MUST NOT be deleted after use. * * Object ChannelIterator MUST NOT be freed. It's responsibility * of a Frame object. */ virtual ChannelIterator *getChannels() = 0; /** * Use ChannelIterator to iterate over all Channels in the Frame. * ChannelIteratorPtr is a smart pointer, which destructs * ChannelIterator when ChannelIteratorPtr is destructed. Use -> * operator to access ChannelIterator members from a * ChannelIteratorPtr object. * * To iterate over all channels, use the following code: * * pfs::ChannelIteratorPtr it( frame->getChannelIterator() ); * while( it->hasNext() ) { * pfs::Channel *ch = cit->getNext(); * //Do whatever is needed * } * */ virtual ChannelIteratorPtr getChannelIterator() = 0; /** * Returns TagContainer that can be used to access or modify * tags associated with this Frame object. */ virtual TagContainer *getTags() = 0; virtual ~Frame() = 0; }; /** * Copy all tags from both the frame and its channels to the * destination frame. If there is no corresponding destination * channel for a source channel, the tags from that source channel * will not be copied. Note, that all tags in the destination * channel will be removed before copying. Therefore after this * operation, the destination will contain exactly the same tags as * the source. */ void copyTags( Frame *from, Frame *to ); /** * Copy all tags from one container into another. Note, that all * tags in the destination channel will be removed before * copying. Therefore after this operation, the destination will * contain exactly the same tags as the source. */ void copyTags( const TagContainer *from, TagContainer *to ); class DOMIOImpl; /** * Reading and writing frames in PFS format from/to streams. */ class DOMIO { DOMIOImpl *impl; public: DOMIO(); ~DOMIO(); /** * Creates a frame that can be latter written to the stream * using writeFrame method. This method and readFrame are the * only way to create Frame objects. * * Note: Frame object must be released with freeFrame methods * as soon as it is no longer needed. Otherwise the * application will run out of memory. * * @param width width of the frame to create * @param height height of the frame to create * @return Frame object that can be modified and written back to PFS * stream using writeFrame method */ Frame *createFrame( int width, int height ); /** * Read PFS frame from the input Stream. This method and * createFrame are the only way to create Frame objects. * * Note: Frame object must be released with freeFrame methods * as soon as it is no longer needed. Otherwise the * application will run out of memory. * * @param inputStream read frame from that stream * @return Frame object that contains PFS frame read from * the stream. NULL if there are no more frames. */ Frame *readFrame( FILE *inputStream ); /** * Writes Frame object to outputStream in PFS format. * * @param frame Frame object to be written. This object * must be created with readFrame or createFrame method. * @param outputStream write frame to that stream */ void writeFrame( Frame *frame, FILE *outputStream ); /** * Deallocated memory allocated with createFrame or readFrame. Must * be called as soon as frame is not needed. Pointer to a frame is * invalid after this method call. * * @param frame Frame object to be freed */ void freeFrame( Frame *frame ); }; /** * A pair of a file name and file handler, returned from * FrameFileIterator. */ struct FrameFile { FrameFile( FILE *fh, const char* fileName ): fh(fh), fileName( fileName ) { } /** * File handler. */ FILE *fh; /** * File name. */ const char *fileName; }; class FrameFileIteratorImpl; /** * Utility class that can be used to iterate over file names * specified as command line arguments. It can handle patterns, * like frame%04d.hdr, where %04d is replaced with specified * range of frame numbers. * */ class FrameFileIterator { FrameFileIteratorImpl *impl; public: /** * Creates new iterator over frame files. Command line * arguments are parsed and all recognized arguments are * removed. * * @param argc argument count passed to program's main function. * @param argv argument values passed to program's main function. * @param fopenMode mode used to fopen frame files, usually "rb" or "wb" * @param fileNamePrefix each frame pattern must be preceded * with this string (for example "-i'). If NULL, every argument that * does not start with "-" is treated as a frame pattern. * @param stdinout if set, treat '-' file name specially and instead * of opening a named file, use filedescriptor passed as this parameter. * It should be used to get or write data to stdin / stdout. * @param optstring parameter string passed to getopt() * function. When optstring != NULL, FrameFileIterator will skip * all parameters and their required arguments. Optional * arguments are not handled. * @param getopt_long parameter structure passed to getopt_long() * function. When getopt_long != NULL, FrameFileIterator will skip * all parameters and their required arguments. Optional * arguments are not handled. * @throws CommandLineException on bad syntax of command line options */ FrameFileIterator( int &argc, char* argv[], const char *fopenMode, const char *fileNamePrefix = NULL, FILE *stdinout = NULL, const char *optstring = NULL, const struct option *getopt_long = NULL ); ~FrameFileIterator(); /** * Get the file handle FILE* and file name for the next * frame. Note that fileName string is valid until next * call to getNextFrameFile or closeFrameFile. * * When file handle is no longer needed, closeFileFile * should be called. * * @return file handle FILE* and file name of the next frame. * Returns file handle == NULL if there are no more frames. * * @throws Exception if the file is not found */ FrameFile getNextFrameFile( ); /** * Close file openned with getNextFrameFile. * * @param frameFile FrameFile object returned from getNextFrameFile */ void closeFrameFile( FrameFile &frameFile ); static void printUsage( FILE *out, const char *progName ); }; /// This enum is used to specify color spaces for transformColorSpace function enum ColorSpace { CS_XYZ = 0, ///< Absolute XYZ space, reference white - D65, Y is calibrated luminance in cd/m^2 CS_RGB, ///< Absolute XYZ space, reference white - D65 CS_SRGB, ///< sRGB color space for LDR images (see ///www.srgb.com). The possible pixel values ///for R, G and B channel should be within ///range 0-1 (the values above or below this ///range will be clamped). Peak luminance ///level of the display is 80cd/m^2. CS_YUV, ///< Perceptually uniform u and v color coordinates, Y is calibrated luminance in cd/m^2 CS_Yxy, ///< Luminance and normalized chromacities (x=X/(X+Y+Z), y=Y/(X+Y+Z)) CS_LAST ///< For internal purposes only }; /** * Transform color channels from one color space into * another. Input and output channels may point to the same data * for in-memory transform. * * @param inCS input color space * @param inC1 first color channel of the input image * @param inC2 second color channel of the input image * @param inC3 third color channel of the input image * @param outCS output color space * @param outC1 first color channel of the output image * @param outC2 second color channel of the output image * @param outC3 third color channel of the output image */ void transformColorSpace( ColorSpace inCS, const Array2D *inC1, const Array2D *inC2, const Array2D *inC3, ColorSpace outCS, Array2D *outC1, Array2D *outC2, Array2D *outC3 ); /** * General exception class used to throw exceptions from pfs library. */ class Exception { char msg[1024]; public: /** * Creates a new exception. * * @param message description of the cause for the * exception. The copy of the message string is made, so it can * be freed after creating Exception. */ Exception( const char* const message ) { strcpy( msg, message ); } ~Exception() {}; /** * Returns the description of the problem. * * @return text description of the cause for the exception */ const char* getMessage() { return msg; } }; /** * Exception class used to throw exceptions from FileFileIterator class. */ class CommandLineException: public Exception { public: CommandLineException( const char* const message ): Exception( message ) { } }; } #endif pfstools-1.8.5/src/pfs/pfs.cpp0000664000175000017500000004113011417303373013175 00000000000000/** * @brief PFS library - core API interfaces * * Classes for reading and writing a stream of PFS frames. * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfs.cpp,v 1.12 2010/07/04 10:12:55 rafm Exp $ */ #if !defined(_MSC_VER) && !defined(_MATLAB_VER) #include #endif #if defined(_MSC_VER) || defined(__CYGWIN__) #include #define HAVE_SETMODE #endif #include #include #include #include #include #include #include #include "pfs.h" #define PFSEOL "\x0a" #define PFSEOLCH '\x0a' #define MAX_RES 65535 #define MAX_CHANNEL_NAME 32 #define MAX_TAG_STRING 1024 #define MAX_CHANNEL_COUNT 1024 using namespace std; namespace pfs { const char *PFSFILEID="PFS1\x0a"; //------------------------------------------------------------------------------ // TagContainer implementation //------------------------------------------------------------------------------ typedef list TagList; class TagIteratorImpl: public TagIterator { TagList::const_iterator it; const TagList &tagList; string tagName; public: TagIteratorImpl( const TagList &tagList ) : tagList( tagList ) { it = tagList.begin(); } /** * Get next item on the list. */ const char *getNext() { const string &tag = *(it++); size_t equalSign = tag.find( '=' ); assert( equalSign != -1 ); tagName = string( tag, 0, equalSign ); return tagName.c_str(); } /** * Returns true if there is still an item left on the list. */ bool hasNext() const { return it != tagList.end(); } }; class TagContainerImpl: public TagContainer { public: private: TagList tagList; public: // ~TagContainerImpl() // { // tagList.clear(); // } TagList::const_iterator tagsBegin() const { return tagList.begin(); } TagList::const_iterator tagsEnd() const { return tagList.end(); } int getSize() const { return (int)tagList.size(); } void appendTagEOL( const char *tagValue ) { assert( tagValue[strlen( tagValue ) -1] == PFSEOLCH ); tagList.push_back( string( tagValue, strlen( tagValue ) -1 ) ); } void appendTag( const string &tagValue ) { tagList.push_back( tagValue ); } TagList::iterator findTag( const char *tagName ) { size_t tagNameLen = strlen( tagName ); TagList::iterator it; for( it = tagList.begin(); it != tagList.end(); it++ ) { if( !memcmp( tagName, it->c_str(), tagNameLen ) ) break; // Found } return it; } void setTag( const char *tagName, const char *tagValue ) { string tagVal( tagName ); tagVal += "="; tagVal += tagValue; TagList::iterator element = findTag( tagName ); if( element == tagList.end() ) { // Does not exist tagList.push_back( tagVal ); } else { // Already exist *element = tagVal; } } const char *getTag( const char *tagName ) { TagList::iterator element = findTag( tagName ); if( element == tagList.end() ) return NULL; string::size_type equalSign = element->find( '=' ); assert( equalSign != string::npos ); return element->c_str() + equalSign + 1; } //Implementation of TagContainer const char* getString( const char *tagName ) { return getTag( tagName ); } void setString( const char *tagName, const char *tagValue ) { setTag( tagName, tagValue ); } void removeTag( const char *tagName ) { TagList::iterator element = findTag( tagName ); if( element != tagList.end() ) tagList.erase( element ); } TagIteratorPtr getIterator() const { return TagIteratorPtr( new TagIteratorImpl( tagList ) ); } void removeAllTags() { tagList.clear(); } }; void copyTags( const TagContainer *from, TagContainer *to ) { TagContainerImpl *f = (TagContainerImpl*)from; TagContainerImpl *t = (TagContainerImpl*)to; t->removeAllTags(); TagList::const_iterator it; for( it = f->tagsBegin(); it != f->tagsEnd(); it++ ) { t->appendTag( *it ); } } void copyTags( Frame *from, Frame *to ) { copyTags( from->getTags(), to->getTags() ); pfs::ChannelIterator *it = from->getChannels(); while( it->hasNext() ) { pfs::Channel *fromCh = it->getNext(); pfs::Channel *toCh = to->getChannel( fromCh->getName() ); if( toCh == NULL ) // Skip if there is no corresponding channel continue; copyTags( fromCh->getTags(), toCh->getTags() ); } } //------------------------------------------------------------------------------ // Channel implementation //------------------------------------------------------------------------------ class DOMIOImpl; class ChannelImpl: public Channel { int width, height; float *data; const char *name; protected: friend class DOMIOImpl; TagContainerImpl *tags; public: ChannelImpl( int width, int height, const char *n_name ) : width( width ), height( height ) { data = new float[width*height]; tags = new TagContainerImpl(); name = strdup( n_name ); } virtual ~ChannelImpl() { delete tags; delete[] data; free( (void*)name ); } // Channel implementation TagContainer *getTags() { return tags; } float *getRawData() { return data; } //Array2D implementation virtual int getCols() const { return width; } virtual int getRows() const { return height; } virtual const char *getName() const { return name; } inline float& operator()( int x, int y ) { assert( x >= 0 && x < width ); assert( y >= 0 && y < height ); return data[ x+y*width ]; } inline const float& operator()( int x, int y ) const { assert( x >= 0 && x < width ); assert( y >= 0 && y < height ); return data[ x+y*width ]; } inline float& operator()( int rowMajorIndex ) { assert( rowMajorIndex < width*height ); assert( rowMajorIndex >= 0 ); return data[ rowMajorIndex ]; } inline const float& operator()( int rowMajorIndex ) const { assert( rowMajorIndex < width*height ); assert( rowMajorIndex >= 0 ); return data[ rowMajorIndex ]; } }; //------------------------------------------------------------------------------ // Map of channels //------------------------------------------------------------------------------ struct str_cmp: public std::binary_function { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; } }; typedef std::map ChannelMap; //------------------------------------------------------------------------------ // Channel Iterator implementation //----------------------------------------------------------------------------- class ChannelIteratorImpl: public ChannelIterator { ChannelMap::iterator it; ChannelMap *cm; public: ChannelIteratorImpl( ChannelMap *cm ) : cm(cm) { reset(); } void reset() { it = cm->begin(); } Channel *getNext() { if( !hasNext() ) return NULL; return (it++)->second; } bool hasNext() const { return it != cm->end(); } }; //------------------------------------------------------------------------------ // Frame implementation //------------------------------------------------------------------------------ //A pure virtual destructor Frame::~Frame() {} class FrameImpl: public Frame { int width, height; protected: friend class DOMIOImpl; TagContainerImpl *tags; // enum ChannelID { CH_X = 0, CH_Y, CH_Z, CH_ALPHA, CH_DEPTH, CH_AUXLUM, CH_COUNT }; // static const char* const channelStrID[CH_COUNT]; ChannelMap channel; ChannelIteratorImpl channelIterator; public: FrameImpl( int width, int height ): width( width ), height( height ), channelIterator( &channel ) { tags = new TagContainerImpl(); } ~FrameImpl() { delete tags; ChannelMap::iterator it; for( it = channel.begin(); it != channel.end(); ) { Channel *ch = it->second; ChannelMap::iterator itToDelete = it; // Nasty trick because hashmap // elements point to string that is // freed by the channel it++; channel.erase( itToDelete ); delete ch; } } virtual int getWidth() const { return width; } virtual int getHeight() const { return height; } virtual void getXYZChannels( Channel* &X, Channel* &Y, Channel* &Z ) { if( channel.find("X") == channel.end() || channel.find("Y") == channel.end() || channel.find("Z") == channel.end() ) { X = Y = Z = NULL; } else { X = channel["X"]; Y = channel["Y"]; Z = channel["Z"]; } } virtual void createXYZChannels( Channel* &X, Channel* &Y, Channel* &Z ) { X = createChannel("X"); Y = createChannel("Y"); Z = createChannel("Z"); } Channel* getChannel( const char *name ) { ChannelMap::iterator it = channel.find(name); if( it == channel.end() ) return NULL; else return it->second; } Channel *createChannel( const char *name ) { ChannelImpl *ch; if( channel.find(name) == channel.end() ) { ch = new ChannelImpl( width, height, name ); channel.insert( pair(ch->getName(), ch) ); } else ch = channel[name]; return ch; } void removeChannel( Channel *ch ) { assert( ch != NULL ); ChannelMap::iterator it = channel.find( ch->getName() ); assert( it != channel.end() && it->second == ch ); channel.erase( it ); delete ch; } ChannelIterator *getChannels() { channelIterator.reset(); return &channelIterator; } ChannelIteratorPtr getChannelIterator() { return ChannelIteratorPtr( new ChannelIteratorImpl( &channel ) ); } TagContainer *getTags() { return tags; } }; static void readTags( TagContainerImpl *tags, FILE *in ) { int readItems; int tagCount; readItems = fscanf( in, "%d" PFSEOL, &tagCount ); if( readItems != 1 || tagCount < 0 || tagCount > 1024 ) throw Exception( "Corrupted PFS tag section: missing or wrong number of tags" ); char buf[MAX_TAG_STRING+1]; for( int i = 0; i < tagCount; i++ ) { char *read = fgets( buf, MAX_TAG_STRING, in ); if( read == NULL ) throw Exception( "Corrupted PFS tag section: missing tag" ); char *equalSign = strstr( buf, "=" ); if( equalSign == NULL ) throw Exception( "Corrupted PFS tag section ('=' sign missing)" ); tags->appendTagEOL( buf ); } } static void writeTags( const TagContainerImpl *tags, FILE *out ) { TagList::const_iterator it; fprintf( out, "%d" PFSEOL, tags->getSize() ); for( it = tags->tagsBegin(); it != tags->tagsEnd(); it++ ) { fprintf( out, (const char*)(it->c_str()) ); fprintf( out, PFSEOL ); } } //------------------------------------------------------------------------------ // pfs IO //------------------------------------------------------------------------------ class DOMIOImpl { public: Frame *readFrame( FILE *inputStream ) { assert( inputStream != NULL ); #ifdef HAVE_SETMODE // Needed under MS windows (text translation IO for stdin/out) int old_mode = setmode( fileno( inputStream ), _O_BINARY ); #endif size_t read; char buf[5]; read = fread( buf, 1, 5, inputStream ); if( read == 0 ) return NULL; // EOF if( memcmp( buf, PFSFILEID, 5 ) ) throw Exception( "Incorrect PFS file header" ); int width, height, channelCount; read = fscanf( inputStream, "%d %d" PFSEOL, &width, &height ); if( read != 2 || width <= 0 || width > MAX_RES || height <= 0 || height > MAX_RES ) throw Exception( "Corrupted PFS file: missing or wrong 'width', 'height' tags" ); read = fscanf( inputStream, "%d" PFSEOL, &channelCount ); if( read != 1 || channelCount < 0 || channelCount > MAX_CHANNEL_COUNT ) throw Exception( "Corrupted PFS file: missing or wrong 'channelCount' tag" ); FrameImpl *frame = (FrameImpl*)createFrame( width, height ); readTags( frame->tags, inputStream ); //Read channel IDs and tags // FrameImpl::ChannelID *channelID = new FrameImpl::ChannelID[channelCount]; list orderedChannel; for( int i = 0; i < channelCount; i++ ) { char channelName[MAX_CHANNEL_NAME+1], *rs; rs = fgets( channelName, MAX_CHANNEL_NAME, inputStream ); if( rs == NULL ) throw Exception( "Corrupted PFS file: missing channel name" ); size_t len = strlen( channelName ); // fprintf( stderr, "s = '%s' len = %d\n", channelName, len ); if( len < 1 || channelName[len-1] != PFSEOLCH ) throw Exception( "Corrupted PFS file: bad channel name" ); channelName[len-1] = 0; ChannelImpl *ch = (ChannelImpl*)frame->createChannel( channelName ); readTags( ch->tags, inputStream ); orderedChannel.push_back( ch ); } read = fread( buf, 1, 4, inputStream ); if( read == 0 || memcmp( buf, "ENDH", 4 ) ) throw Exception( "Corrupted PFS file: missing end of header (ENDH) token" ); //Read channels list::iterator it; for( it = orderedChannel.begin(); it != orderedChannel.end(); it++ ) { ChannelImpl *ch = *it; int size = frame->getWidth()*frame->getHeight(); read = fread( ch->getRawData(), sizeof( float ), size, inputStream ); if( read != size ) throw Exception( "Corrupted PFS file: missing channel data" ); } #ifdef HAVE_SETMODE setmode( fileno( inputStream ), old_mode ); #endif return frame; } Frame *createFrame( int width, int height ) { /* if( lastFrame != NULL && lastFrame->width() == width && lastFrame->height() == height ) { // Reuse last frame return lastFrame; } else delete lastFrame;*/ Frame *frame = new FrameImpl( width, height ); if( frame == NULL ) throw Exception( "Out of memory" ); return frame; } void writeFrame( Frame *frame, FILE *outputStream ) { assert( outputStream != NULL ); assert( frame != NULL ); #ifdef HAVE_SETMODE // Needed under MS windows (text translation IO for stdin/out) int old_mode = setmode( fileno( outputStream ), _O_BINARY ); #endif FrameImpl *frameImpl = (FrameImpl*)frame; fwrite( PFSFILEID, 1, 5, outputStream ); // Write header ID fprintf( outputStream, "%d %d" PFSEOL, (int)frame->getWidth(), (int)frame->getHeight() ); fprintf( outputStream, "%d" PFSEOL, (int)frameImpl->channel.size() ); writeTags( frameImpl->tags, outputStream ); //Write channel IDs and tags for( ChannelMap::iterator it = frameImpl->channel.begin(); it != frameImpl->channel.end(); it++ ) { fprintf( outputStream, "%s" PFSEOL, it->second->getName() ); writeTags( it->second->tags, outputStream ); } fprintf( outputStream, "ENDH"); //Write channels { for( ChannelMap::iterator it = frameImpl->channel.begin(); it != frameImpl->channel.end(); it++ ) { int size = frame->getWidth()*frame->getHeight(); fwrite( it->second->getRawData(), sizeof( float ), size, outputStream ); } } //Very important for pfsoutavi !!! fflush(outputStream); #ifdef HAVE_SETMODE setmode( fileno( outputStream ), old_mode ); #endif } void freeFrame( Frame *frame ) { delete frame; } }; DOMIO::DOMIO() { impl = new DOMIOImpl(); } DOMIO::~DOMIO() { delete impl; } Frame *DOMIO::createFrame( int width, int height ) { return impl->createFrame( width, height ); } Frame *DOMIO::readFrame( FILE *inputStream ) { return impl->readFrame( inputStream ); } void DOMIO::writeFrame( Frame *frame, FILE *outputStream ) { impl->writeFrame( frame, outputStream ); } void DOMIO::freeFrame( Frame *frame ) { impl->freeFrame( frame ); } }; pfstools-1.8.5/src/pfs/pfs.pc.in0000664000175000017500000000036110254027367013427 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: PFS Description: PFS graphic file reading and writting Requires: Version: @PACKAGE_VERSION@ Libs: -L${libdir} -lpfs-1.2 Cflags: -I${includedir}/pfs-1.2 pfstools-1.8.5/src/pfs/pfsutils.cpp0000664000175000017500000002356510504603536014272 00000000000000/** * @brief PFS library - additional utilities * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsutils.cpp,v 1.4 2006/09/21 21:42:54 rafm Exp $ */ #include #include "pfs.h" #include #include #include #define MAX_FRAME 99999 using namespace std; namespace pfs { static void removeCommandLineArg( int &argc, char* argv[], int firstArgToRemove, int numArgsToRemove = 1 ); static void parseFrameRange( const char *rangeString, int &firstFrame, int &lastFrame, int &everyNthFrame ); struct FilePattern { const char *pattern; int firstFrame; int lastFrame; bool skipMissingFrames; int everyNthFrame; int currentFrame; bool isPattern; FILE *stdinout; // Use this fh if "-" found istead of file name FilePattern( const char *pattern, FILE *n_stdinout ): pattern( pattern ), firstFrame( 0 ), lastFrame( MAX_FRAME ), skipMissingFrames( false ), currentFrame( 0 ), everyNthFrame( 1 ) { isPattern = strstr( pattern, "%" ) != NULL; if( !strcmp( pattern, "-" ) ) stdinout = n_stdinout; else stdinout = NULL; } }; class FrameFileIteratorImpl { char *pattern; const char *fopenMode; char fileName[1024]; FILE *stdinout; typedef list PatternList; PatternList patternList; PatternList::iterator currentPattern; public: FrameFileIteratorImpl( int &argc, char* argv[], const char *fopenMode, const char *fileNamePrefix, FILE *stdinout, const char *optstring, const struct option *getopt_long ) : fopenMode( fopenMode ), stdinout( stdinout ) { PatternList::pointer lastPattern = NULL; for( int i=1 ; i= argc ) throw CommandLineException( "Missing frame range after '--frame' switch" ); if( lastPattern == NULL ) throw CommandLineException( "File pattern must be specified before '--frame' switch" ); parseFrameRange( argv[i+1], lastPattern->firstFrame, lastPattern->lastFrame, lastPattern->everyNthFrame ); lastPattern->currentFrame = lastPattern->firstFrame; removeCommandLineArg( argc, argv, i, 2 ); } else if( fileNamePrefix != NULL && !strcmp( argv[i], fileNamePrefix ) ) { if( i+1 >= argc ) throw CommandLineException( "Missing file name" ); patternList.push_back( FilePattern( argv[i+1], stdinout ) ); lastPattern = &patternList.back(); removeCommandLineArg( argc, argv, i, 2 ); } else if( !strcmp( argv[i], "--skip-missing" ) ) { if( lastPattern == NULL ) throw CommandLineException( "File pattern must be specified before '--skip-missing' switch" ); lastPattern->skipMissingFrames = true; removeCommandLineArg( argc, argv, i, 1 ); } else if( fileNamePrefix == NULL && ( argv[i][0] != '-' || !strcmp( argv[i], "-" )) ) { patternList.push_back( FilePattern( argv[i], stdinout ) ); lastPattern = &patternList.back(); removeCommandLineArg( argc, argv, i, 1 ); } else { bool optionProcessed = false; if( getopt_long != NULL && !strncmp( argv[i], "--", 2 ) ) { // Make sure that option parameters are processed properly const struct option *opt = getopt_long; while( opt->name != NULL ) { if( !strncmp( argv[i]+2, opt->name, strlen(opt->name) ) ) { if( opt->has_arg == required_argument ) { if( argv[i][strlen(opt->name)+2] == '=' ) { // --long=arg i++; optionProcessed = true; break; } else { // --long arg i += 2; optionProcessed = true; break; } } else if( opt->has_arg == no_argument ) { i += 1; optionProcessed = true; break; } else throw CommandLineException( "Internal error: FrameFileIterator can handle only required_argument and no_argument options" ); } opt++; } } if( !optionProcessed && optstring != NULL && argv[i][0] == '-' ) { for( const char *opt = optstring; *opt != 0; opt++ ) { if( argv[i][1] == *opt ) { if( *(opt+1) == ':' ) { i += 2; } else { i += 1; } optionProcessed = true; break; } } } if( !optionProcessed ) i++; } } currentPattern = patternList.begin(); } FrameFile getNextFrameFile( ) { while( currentPattern != patternList.end() ) { int skippedFrames = 0; do { if( currentPattern->currentFrame > currentPattern->lastFrame ) break; if( currentPattern->isPattern ) sprintf( fileName, currentPattern->pattern, currentPattern->currentFrame ); else { // Single file, not a pattern strcpy( fileName, currentPattern->pattern ); if( currentPattern->stdinout == NULL ) { //Force to step to next pattern in the list, but not for stdin/out currentPattern->currentFrame = currentPattern->lastFrame; } } FILE *fh; if( currentPattern->stdinout != NULL ) fh = currentPattern->stdinout; else fh = fopen( fileName, fopenMode ); currentPattern->currentFrame += currentPattern->everyNthFrame; if( fh != NULL ) return FrameFile( fh, fileName ); if( !currentPattern->isPattern || (currentPattern->currentFrame-currentPattern->everyNthFrame) == currentPattern->firstFrame ) { char msg[1024]; sprintf( msg, "Can not open file '%s'", fileName ); throw pfs::Exception( msg ); } skippedFrames++; } while( currentPattern->skipMissingFrames && skippedFrames < 10 ); currentPattern++; } return FrameFile( NULL, NULL ); } void closeFrameFile( FrameFile &frameFile ) { if( frameFile.fh != NULL && frameFile.fh != stdinout ) fclose( frameFile.fh ); frameFile.fh = NULL; } }; FrameFileIterator::FrameFileIterator( int &argc, char* argv[], const char *fopenMode, const char *fileNamePrefix, FILE *stdinout, const char *optstring, const struct option *getopt_long ) { impl = new FrameFileIteratorImpl( argc, argv, fopenMode, fileNamePrefix, stdinout, optstring, getopt_long ); } FrameFileIterator::~FrameFileIterator() { delete impl; } FrameFile FrameFileIterator::getNextFrameFile( ) { return impl->getNextFrameFile(); } void FrameFileIterator::closeFrameFile( FrameFile &frameFile ) { return impl->closeFrameFile( frameFile ); } void FrameFileIterator::printUsage( FILE *out, const char *progName ) { fprintf( out, "Usage: %s [switches] [--frames ] [--skip-missing] []...\n\n" " can contain '%%d' to process a sequence of frames. To insert leading zeros use '%%0Nd', where n is a number of zeros. Any number of s can be given in a command line. They are processed one after another. Switches --frames and --skip-missing always refer to the last \n" "\nSwitches:\n" " --frames : range of frame numbers to process. Range is given Octave range format, e.g. 10:2:100, to process every second frame, starting from 10 and stopping at 100\n" " --skip-missing : skip up to 10 consequtive frames if there are missing\n", progName ); } static void parseFrameRange( const char *rangeString, int &firstFrame, int &lastFrame, int &everyNthFrame ) { firstFrame = 0; lastFrame = MAX_FRAME; everyNthFrame = 1; char *nextToken; int l1 = strtol( rangeString, &nextToken, 10 ); if( nextToken != rangeString ) firstFrame = l1; if( nextToken[0] != ':' ) throw CommandLineException( "Missing ':' in the frame range specification" ); nextToken++; char *currentToken = nextToken; int l2 = strtol( currentToken, &nextToken, 10 ); if( currentToken != nextToken ) lastFrame = l2; if( nextToken[0] == ':' ) { everyNthFrame = lastFrame; lastFrame = MAX_FRAME; nextToken++; currentToken = nextToken; int l3 = strtol( currentToken, &nextToken, 10 ); if( currentToken != nextToken ) lastFrame = l3; } } static void removeCommandLineArg( int &argc, char* argv[], int firstArgToRemove, int numArgsToRemove ) { assert( firstArgToRemove+numArgsToRemove <= argc ); if( argc-firstArgToRemove-numArgsToRemove > 0 ) { for( int i = firstArgToRemove; i < argc-numArgsToRemove; i++ ) argv[i] = argv[i+numArgsToRemove]; } argc -= numArgsToRemove; } } pfstools-1.8.5/src/pfs/Makefile.am0000664000175000017500000000062710567322113013741 00000000000000### lib_LTLIBRARIES = libpfs-1.2.la noinst_LIBRARIES = libpfs.a # removes automake conflict libpfs_a_CXXFLAGS = $(AM_CXXFLAGS) -fPIC libpfs_a_SOURCES = pfs.cpp pfsutils.cpp colorspace.cpp libpfs_1_2_la_SOURCES = pfs.cpp pfsutils.cpp colorspace.cpp library_includedir=$(includedir)/pfs-1.2 library_include_HEADERS = pfs.h array2d.h #INCLUDES = pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = pfs.pc pfstools-1.8.5/src/pfs/Makefile.in0000644000175000017500000006264411652214376013766 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ### VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/pfs DIST_COMMON = $(library_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/pfs.pc.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = pfs.pc CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libpfs_a_AR = $(AR) $(ARFLAGS) libpfs_a_LIBADD = am_libpfs_a_OBJECTS = libpfs_a-pfs.$(OBJEXT) \ libpfs_a-pfsutils.$(OBJEXT) libpfs_a-colorspace.$(OBJEXT) libpfs_a_OBJECTS = $(am_libpfs_a_OBJECTS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ "$(DESTDIR)$(library_includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libpfs_1_2_la_LIBADD = am_libpfs_1_2_la_OBJECTS = pfs.lo pfsutils.lo colorspace.lo libpfs_1_2_la_OBJECTS = $(am_libpfs_1_2_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(libpfs_a_SOURCES) $(libpfs_1_2_la_SOURCES) DIST_SOURCES = $(libpfs_a_SOURCES) $(libpfs_1_2_la_SOURCES) DATA = $(pkgconfig_DATA) HEADERS = $(library_include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ lib_LTLIBRARIES = libpfs-1.2.la noinst_LIBRARIES = libpfs.a # removes automake conflict libpfs_a_CXXFLAGS = $(AM_CXXFLAGS) -fPIC libpfs_a_SOURCES = pfs.cpp pfsutils.cpp colorspace.cpp libpfs_1_2_la_SOURCES = pfs.cpp pfsutils.cpp colorspace.cpp library_includedir = $(includedir)/pfs-1.2 library_include_HEADERS = pfs.h array2d.h #INCLUDES = pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = pfs.pc all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/pfs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/pfs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): pfs.pc: $(top_builddir)/config.status $(srcdir)/pfs.pc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libpfs.a: $(libpfs_a_OBJECTS) $(libpfs_a_DEPENDENCIES) -rm -f libpfs.a $(libpfs_a_AR) libpfs.a $(libpfs_a_OBJECTS) $(libpfs_a_LIBADD) $(RANLIB) libpfs.a install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libpfs-1.2.la: $(libpfs_1_2_la_OBJECTS) $(libpfs_1_2_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libpfs_1_2_la_OBJECTS) $(libpfs_1_2_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorspace.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpfs_a-colorspace.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpfs_a-pfs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpfs_a-pfsutils.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsutils.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< libpfs_a-pfs.o: pfs.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -MT libpfs_a-pfs.o -MD -MP -MF $(DEPDIR)/libpfs_a-pfs.Tpo -c -o libpfs_a-pfs.o `test -f 'pfs.cpp' || echo '$(srcdir)/'`pfs.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libpfs_a-pfs.Tpo $(DEPDIR)/libpfs_a-pfs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pfs.cpp' object='libpfs_a-pfs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -c -o libpfs_a-pfs.o `test -f 'pfs.cpp' || echo '$(srcdir)/'`pfs.cpp libpfs_a-pfs.obj: pfs.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -MT libpfs_a-pfs.obj -MD -MP -MF $(DEPDIR)/libpfs_a-pfs.Tpo -c -o libpfs_a-pfs.obj `if test -f 'pfs.cpp'; then $(CYGPATH_W) 'pfs.cpp'; else $(CYGPATH_W) '$(srcdir)/pfs.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libpfs_a-pfs.Tpo $(DEPDIR)/libpfs_a-pfs.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pfs.cpp' object='libpfs_a-pfs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -c -o libpfs_a-pfs.obj `if test -f 'pfs.cpp'; then $(CYGPATH_W) 'pfs.cpp'; else $(CYGPATH_W) '$(srcdir)/pfs.cpp'; fi` libpfs_a-pfsutils.o: pfsutils.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -MT libpfs_a-pfsutils.o -MD -MP -MF $(DEPDIR)/libpfs_a-pfsutils.Tpo -c -o libpfs_a-pfsutils.o `test -f 'pfsutils.cpp' || echo '$(srcdir)/'`pfsutils.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libpfs_a-pfsutils.Tpo $(DEPDIR)/libpfs_a-pfsutils.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pfsutils.cpp' object='libpfs_a-pfsutils.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -c -o libpfs_a-pfsutils.o `test -f 'pfsutils.cpp' || echo '$(srcdir)/'`pfsutils.cpp libpfs_a-pfsutils.obj: pfsutils.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -MT libpfs_a-pfsutils.obj -MD -MP -MF $(DEPDIR)/libpfs_a-pfsutils.Tpo -c -o libpfs_a-pfsutils.obj `if test -f 'pfsutils.cpp'; then $(CYGPATH_W) 'pfsutils.cpp'; else $(CYGPATH_W) '$(srcdir)/pfsutils.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libpfs_a-pfsutils.Tpo $(DEPDIR)/libpfs_a-pfsutils.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='pfsutils.cpp' object='libpfs_a-pfsutils.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -c -o libpfs_a-pfsutils.obj `if test -f 'pfsutils.cpp'; then $(CYGPATH_W) 'pfsutils.cpp'; else $(CYGPATH_W) '$(srcdir)/pfsutils.cpp'; fi` libpfs_a-colorspace.o: colorspace.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -MT libpfs_a-colorspace.o -MD -MP -MF $(DEPDIR)/libpfs_a-colorspace.Tpo -c -o libpfs_a-colorspace.o `test -f 'colorspace.cpp' || echo '$(srcdir)/'`colorspace.cpp @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libpfs_a-colorspace.Tpo $(DEPDIR)/libpfs_a-colorspace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='colorspace.cpp' object='libpfs_a-colorspace.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -c -o libpfs_a-colorspace.o `test -f 'colorspace.cpp' || echo '$(srcdir)/'`colorspace.cpp libpfs_a-colorspace.obj: colorspace.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -MT libpfs_a-colorspace.obj -MD -MP -MF $(DEPDIR)/libpfs_a-colorspace.Tpo -c -o libpfs_a-colorspace.obj `if test -f 'colorspace.cpp'; then $(CYGPATH_W) 'colorspace.cpp'; else $(CYGPATH_W) '$(srcdir)/colorspace.cpp'; fi` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/libpfs_a-colorspace.Tpo $(DEPDIR)/libpfs_a-colorspace.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='colorspace.cpp' object='libpfs_a-colorspace.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpfs_a_CXXFLAGS) $(CXXFLAGS) -c -o libpfs_a-colorspace.obj `if test -f 'colorspace.cpp'; then $(CYGPATH_W) 'colorspace.cpp'; else $(CYGPATH_W) '$(srcdir)/colorspace.cpp'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files install-library_includeHEADERS: $(library_include_HEADERS) @$(NORMAL_INSTALL) test -z "$(library_includedir)" || $(MKDIR_P) "$(DESTDIR)$(library_includedir)" @list='$(library_include_HEADERS)'; test -n "$(library_includedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(library_includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(library_includedir)" || exit $$?; \ done uninstall-library_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(library_include_HEADERS)'; test -n "$(library_includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(library_includedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(library_includedir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(library_includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-library_includeHEADERS install-pkgconfigDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES \ uninstall-library_includeHEADERS uninstall-pkgconfigDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLIBRARIES ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES \ install-library_includeHEADERS install-man install-pdf \ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-libLTLIBRARIES uninstall-library_includeHEADERS \ uninstall-pkgconfigDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/src/hdrhtml/0002755000175000017500000000000011652214417012635 500000000000000pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/0002755000175000017500000000000011652214417017177 500000000000000pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_page_templ.html0000664000175000017500000002550511405167443023655 00000000000000 @title@ @image_htmlcode@ pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_assets/0002755000175000017500000000000011652214417022223 500000000000000pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_assets/hdr_viewer.css0000664000175000017500000000363111405167443025020 00000000000000/* optional: full page styling with dark background */ body { background-color: #1A1C1F; font-family: sans-serif, Helvetica Narrow; color: CDCDCD; } a { color: #FF5020; text-decoration: none; } a:hover { color: #FF5020; text-decoration: underline; } /* required: HDR-Viewer styling, adjust as needed */ .hdr_viewer { background-color: #000; -moz-border-radius: 8px; -webkit-border-radius: 8px; padding: 4px 6px 4px 6px; margin: 10px; font-family: sans-serif; } .hdr_viewport { position: relative; margin: 3px 0px 3px 0px; } .hdr_controller { position: relative; height: 36px; margin: 2px 0px 2px 0px; overflow: hidden; } .knob { position: absolute; height: 36px; opacity: 0.3; filter: alpha(opacity = 30); background: #FFFFFF center center url('slider-black.png') no-repeat; cursor: pointer; -moz-border-radius: 3px; -webkit-border-radius: 3px; } div.knob:hover { background-color: #FF5020; opacity: 0.7; filter: alpha(opacity = 70); } .label { color: white; font-family: Florence, cursive; width: 110px; padding: 5px 10px 5px 10px; } .labelnumber { text-align: right; display: inline-block; width: 50px; } .hdr_help { position: absolute; right: 6px; top: 8px; opacity: 0.5; filter: alpha(opacity = 50); width: 22px; height: 22px; background: top left url('information.png') no-repeat; cursor: pointer; } div.hdr_help:hover { background: top left url('information-red.png') no-repeat; opacity: 1; } .hdr_instructions { color: #FFF; background-color: #000; } .spinner { position: absolute; opacity: 0.9; filter: alpha(opacity=90); z-index: 999; background: #000; } .spinner-img { background: url('loading-spinner.gif') no-repeat; width: 31px; height: 31px; margin: 0 auto; } pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_assets/loading-spinner.gif0000664000175000017500000000506011405167443025726 00000000000000GIF89aõÿÿÿ,,,BBBPPP\\\"""FFFddd&&&TTT^^^NNN222VVV***ÈÈÈØØØ®®®:::ŽŽŽlll¨¨¨–––¸¸¸888¶¶¶ÌÌÌ!þCreated with ajaxload.info!ù !ÿ NETSCAPE2.0,ÿ@€pH €bÁ$Ĩtx@$®W@e»å8>S©‚€-k¹\Œ'<\0Êf4Ä`𸜠/yXg{w Q o X h Ddƒ a†eTy›vkyBVevCp“y¡¶CyFp¿QpGpPÆCpHp¬Í«pIp’ÔpJÚÍØßÜeÒß ÖXÌÔϧÄßÈe½ÔÁp²X´ŒáÒ%䀪ia6½ÂŽÑ'_S$äjtÕEYÊ<Š´MÁƒzhŠò‡¢*AY š‚¥I8€Ø¸q‰’ÁJ6c½¬ˆÐN8/Àúf‰sîÙ !ù ,ÿ@€pH ÀP Ĩtx@$®WöŠ8L§ «'ŠïpÁ0gÝ ÆB hÀewã»Øßóf! Q mx[  [ Dbd jx••Biti££BV[tC­fžµC¹c¯ÀC¹gcÉD¹cªÑ¹cÙ¼¹áÙÞ[àÙcL×å cMÏåcNÇå’[O¾ÙfPba™•lB¨-N¥ª•ÆŒ!šÞtú "†Þ`QÄÈ$}`ÒГ“Ì™bJ,{Ô°q Gȓܠ‰Våä˜ .åxI²¤É:A!ù ,ÿ@€pH ÀP Ĩtx@$®WöŠ8L§ «'ŠïpÁ0gÝ ÆB hÀewã»ØßófusD mx[  [e iCbd j‡XT•jif^V[tCž[f›®CfFc¸Q‘[Gc¿DcHc¤Æ cIcŒÆBcJÓÓÑØ´ÞÞËÜßÞ—XÅØæ½Øî µc·¿îŪXXýòÐÁ!F¹JÓÏ—t‡4qòÀ†C ½Á’hQ£GÁ²xá!J@cPJ Áà‹8*±ìQÃ&9 !b2ƒÆX•”cºp£u$É’&Oè!ù ,ÿ@€pH ÀP Ĩtx@$®WöŠ8L§ «'ŠïpÁ0gÝ ÆB hÀewã»ØßófusD mx[  [e iCbd j‡XT•jif^V[tCž[f›®CfFc¸Q‘[Gc¿DcHc¤Æ cIcŒÆBcJÓÓÑØÖËÜÎ[MÄÜÈ[N½ÜÁXO¶ÓºcPªX¬¿°c³£®€WP¸ôFÓ— :TjH¡7X-¢u!ƒ† ^¡¥@ICbôÅ"C† ÃædJŒ ¸ ãeJ ÿ~Uc3#¸A¢„‚ Š© !ù ,ÿ@€pH ÀP Ĩtx@$®WöŠ8L§ «'ŠïpÁ0gÝ ÆB hÀewã»ØßófusD mx[  [e iCbd j‡XT•jif^V[tCž[f›®CfFc¸Q‘[Gc¿DcHc¤Æ cIcŒÆBcJÓÓÑØÖËÜÎ[MÄÜÈ[N½ÜÁXO¶ÓºcPªX¬¿°c³®¦cP¸”¥B¾tút%ÔB+HÔáG$]¡¥‰ C#èKˆ(GnÙ£†” Un¤Æ˜d¢ùõÁ‡”ùNC†Á…%MžÐ !ù ,ÿ@€pH ÀP Ĩtx@$®WöŠ8L§ «'ŠïpÁ0gÝ ÆB hÀewã»ØßófusD mx[  [e iCbd j‡XT•jif^V[tCž[f›®CfFc¸Q‘[Gc¿DcHc¤Æ cIcŒÆBcJÓÓÛÛPØÕ[ÜÛØÎ[äçÈ[bíØÁXí׿ºc ph×ÁÃ/XcfpÀ+ScP}`ÇM‹&Nž…âÄ6@‰5z„ï¥( B³RRƒARìÀi‰e63áÈyx‰¥4ƪø”… ›$J˜8ñö%!ù ,ÿ@€pH ÀP Ĩtx@$®WöŠ8L§ «'ŠïpÁ0gÝ ÆB hÀewãËåÍcusD   [e iBˆˆZjx[C››—jif^¨tC¢[²J¶Cf ²ÁD“[š¨ÊDc²ÒC c²PÚcÀâÊcŽâäc«ÒÜ[McæÔ¤cæÌXOf>I6Š•-&(Ã5f€€à ”à1dx%êO©mmFaYÔèQ$"-EY°çE2 I±çå•=jØÔ„#ÇV7/ÑH«"¨¡EmF(aâ$Ü— !ù ,ÿ@€pH|$0 ÀP ĨTøqp*X, Áå"Ó©“-o»]‚""; // delete the next two lines if you prefer plain decimal display for fractional EV values ev_label = ev_label.replace(/\.3/, " 1/3"); ev_label = ev_label.replace(/\.7/, " 2/3"); $(hdr_image.base_name + "_exp_text").innerHTML = ev_label; } function change_exp( hdr_image, exp_change ) { hdr_active_image = hdr_image; hdr_image.exposure = hdr_image.exposure + exp_change; // clamp to exposure limits if( hdr_image.exposure > hdr_image.f8_stops*8 ) { hdr_image.exposure = hdr_image.f8_stops*8; } else if( hdr_image.exposure < 0 ) { hdr_image.exposure = 0; } exp_cur = Math.floor(hdr_image.exposure / 8); exp_shar = exp_cur + 1; exp_blend = Math.round((hdr_image.exposure - exp_cur*8)*hdr_image.f_step_res); // blend each image accordingly var i; for( i = 0; i < hdr_image.basis; i++ ) { var img_obj = $(hdr_image.base_name+"_"+i); img_obj.set('src', hdr_image.image_dir + hdr_image.base_name + "_"+exp_cur+"_" + (i+1) + ".jpg"); img_obj.setStyle('opacity', cf[exp_blend][i]); } for( i = 0; i < hdr_image.shared_basis; i++ ) { var img_obj = $(hdr_image.base_name+"_"+(i+hdr_image.basis)); img_obj.set('src',hdr_image.image_dir + hdr_image.base_name + "_"+exp_shar+"_" + (i+1) + ".jpg"); img_obj.setStyle( 'opacity', cf[exp_blend][i+hdr_image.basis] ); } update_exp_text( hdr_image, hdr_image.exposure ); } // keyboartd events function hdr_onkeydown(e) { var hdr_image = hdr_active_image; var keynum; if( hdr_image == null ) return; var hdrnum = hdr_names.indexOf(hdr_image.base_name); if(window.event) { // IE keynum = window.event.keyCode; if( keynum == 189 ) hdr_slider[hdrnum].set(hdr_image.exposure*10 - 10); if( keynum == 187 ) hdr_slider[hdrnum].set(hdr_image.exposure*10 + 10); } else if(e.which) { // Netscape/Firefox/Opera keynum = e.which; if( keynum == 109 ) hdr_slider[hdrnum].set(hdr_image.exposure*10 - 10); if( keynum == 61 ) hdr_slider[hdrnum].set(hdr_image.exposure*10 + 10); } } // ---------------------------------------- // This must be called from within the HTML // ---------------------------------------- // - injects images into viewport // - binds slider to EV // - binds mousewheel to slider // Called once from each "hdr_viewer" div // inject images into HTML function insert_hdr_image( hdr_image ) { hdr_viewport = $(hdr_image.base_name+'_viewport'); hdr_viewer = hdr_viewport.getParent('div.hdr_viewer'); // preload images var preloading = new Array(); var k = 0; for( i = 0; i < hdr_image.f8_stops; i++ ) { for( j = 0; j < hdr_image.basis; j++ ) { preloading[k] = ""+hdr_image.image_dir + hdr_image.base_name + "_"+i+"_" + (j+1) + ".jpg"; k = k + 1; } } preloading[k] = ""+hdr_image.image_dir + hdr_image.base_name + "_"+hdr_image.f8_stops+"_1.jpg"; // for showing the AJAX spinning circle swap the next line with the block below new Asset.images(preloading); // var loadspinner = new Spinner(hdr_viewer).show('noFX'); // var myImages = new Asset.images(preloading, { // onComplete: function(){ // loadspinner.destroy(); // } // }); // enumerate all instances to remember the name hdrcount = hdrcount + 1; hdr_names[hdrcount] = ""+hdr_image.base_name; var injection = ""; for( i = 0; i < hdr_image.basis + hdr_image.shared_basis; i++ ) { injection += "\n"; } // also inject a hidden help viewer injection += ""; hdr_viewport.set('html',injection); // link help viewer to help buttom var help_view = $(hdr_image.base_name+'_help_view').fade('hide');; $(hdr_image.base_name+'_help').addEvent('click', function() { if(help_view.getStyle('opacity') == 0) help_view.fade(0.85); else help_view.fade('out'); }); help_view.addEvent('click', function() { help_view.fade('out'); }); // initialize mootools slider hist_left = Math.round((-hdr_image.hist_start)*hdr_image.pix_per_fstop); var el = $(hdr_image.base_name+'_dr_ctrl'); el.style.left = Math.round(hist_left) + "px"; el.style.width = Math.round(hdr_image.hist_width-hist_left) + "px"; el.getElement('.knob').style.width = hdr_image.pix_per_fstop*8 + "px"; var EVrange = (hdr_image.hist_width-hist_left)/hdr_image.pix_per_fstop-7.7; var slider = new Slider(el, el.getElement('.knob'), { steps: EVrange*hdr_image.f_step_res, range: [0,EVrange*10], onChange: function(value) { change_exp( hdr_image, value/10 - hdr_image.exposure); } }).set(hdr_image.exposure*10); // clone this slider into an array for keyboard access hdr_slider[hdrcount] = slider; // link active hdr image to rollover on the current image hdr_viewer.addEvent('mouseenter', function() { hdr_active_image = hdr_image; // suppress accidental selection of individual images or text noselect = true; }); // link the mousewheel to the slider hdr_viewer.addEvent('mousewheel', function(e) { e.stop(); // prevent the mousewheel from scrolling the page. noselect = true; slider.set((hdr_image.exposure + e.wheel/2)*10); }); // restore outside text to be selectable hdr_viewer.addEvent('mouseleave', function() { noselect = false; }); } pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_assets/slider-black.png0000664000175000017500000000051311405167443025206 00000000000000‰PNG  IHDR(^Ý\ÝtEXtSoftwareAdobe ImageReadyqÉe<íIDATxÚì—Q ƒ0 †çö´c v›Gr$ÁÛÃ×,BÊ\m×´¶ÚAÿ[M>ø Ä/5W£€ ¨€Úø ô‚w=¿McK¼S:ʼôÌá·[ðEy(FšŒÜ#; Ñ‰ŽÄšˆ´Km¹EÚC€.9ƒÚ}€¿t–ôj·%:Kn´¯¥:K~i_Ø®Ü䯩¥><–b¨@1¸¯ëINx¶xÍ´”éÀ‰g%/j(¸¨aÏ¢–jOÜèÌu,¸´Çzuæ>· áÜ‚#Î-—öP‰túõŸDðßß Ù zTø“ŒkIEND®B`‚pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_assets/mootools-1.2.4.js0000664000175000017500000026043311405167443025026 00000000000000//MooTools, , My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2009 Valerio Proietti, , MIT Style License. var MooTools={version:"1.2.4",build:"0d9113241a90b9cd5643b926795852a2026710d4"};var Native=function(k){k=k||{};var a=k.name;var i=k.legacy;var b=k.protect; var c=k.implement;var h=k.generics;var f=k.initialize;var g=k.afterImplement||function(){};var d=f||i;h=h!==false;d.constructor=Native;d.$family={name:"native"}; if(i&&f){d.prototype=i.prototype;}d.prototype.constructor=d;if(a){var e=a.toLowerCase();d.prototype.$family={name:e};Native.typize(d,e);}var j=function(n,l,o,m){if(!b||m||!n.prototype[l]){n.prototype[l]=o; }if(h){Native.genericize(n,l,b);}g.call(n,l,o);return n;};d.alias=function(n,l,p){if(typeof n=="string"){var o=this.prototype[n];if((n=o)){return j(this,l,n,p); }}for(var m in n){this.alias(m,n[m],l);}return this;};d.implement=function(m,l,o){if(typeof m=="string"){return j(this,m,l,o);}for(var n in m){j(this,n,m[n],l); }return this;};if(c){d.implement(c);}return d;};Native.genericize=function(b,c,a){if((!a||!b[c])&&typeof b.prototype[c]=="function"){b[c]=function(){var d=Array.prototype.slice.call(arguments); return b.prototype[c].apply(d.shift(),d);};}};Native.implement=function(d,c){for(var b=0,a=d.length;b-1:this.indexOf(a)>-1;},trim:function(){return this.replace(/^\s+|\s+$/g,"");},clean:function(){return this.replace(/\s+/g," ").trim(); },camelCase:function(){return this.replace(/-\D/g,function(a){return a.charAt(1).toUpperCase();});},hyphenate:function(){return this.replace(/[A-Z]/g,function(a){return("-"+a.charAt(0).toLowerCase()); });},capitalize:function(){return this.replace(/\b[a-z]/g,function(a){return a.toUpperCase();});},escapeRegExp:function(){return this.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1"); },toInt:function(a){return parseInt(this,a||10);},toFloat:function(){return parseFloat(this);},hexToRgb:function(b){var a=this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/); return(a)?a.slice(1).hexToRgb(b):null;},rgbToHex:function(b){var a=this.match(/\d{1,3}/g);return(a)?a.rgbToHex(b):null;},stripScripts:function(b){var a=""; var c=this.replace(/]*>([\s\S]*?)<\/script>/gi,function(){a+=arguments[1]+"\n";return"";});if(b===true){$exec(a);}else{if($type(b)=="function"){b(a,c); }}return c;},substitute:function(a,b){return this.replace(b||(/\\?\{([^{}]+)\}/g),function(d,c){if(d.charAt(0)=="\\"){return d.slice(1);}return(a[c]!=undefined)?a[c]:""; });}});Hash.implement({has:Object.prototype.hasOwnProperty,keyOf:function(b){for(var a in this){if(this.hasOwnProperty(a)&&this[a]===b){return a;}}return null; },hasValue:function(a){return(Hash.keyOf(this,a)!==null);},extend:function(a){Hash.each(a||{},function(c,b){Hash.set(this,b,c);},this);return this;},combine:function(a){Hash.each(a||{},function(c,b){Hash.include(this,b,c); },this);return this;},erase:function(a){if(this.hasOwnProperty(a)){delete this[a];}return this;},get:function(a){return(this.hasOwnProperty(a))?this[a]:null; },set:function(a,b){if(!this[a]||this.hasOwnProperty(a)){this[a]=b;}return this;},empty:function(){Hash.each(this,function(b,a){delete this[a];},this); return this;},include:function(a,b){if(this[a]==undefined){this[a]=b;}return this;},map:function(b,c){var a=new Hash;Hash.each(this,function(e,d){a.set(d,b.call(c,e,d,this)); },this);return a;},filter:function(b,c){var a=new Hash;Hash.each(this,function(e,d){if(b.call(c,e,d,this)){a.set(d,e);}},this);return a;},every:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&!b.call(c,this[a],a)){return false; }}return true;},some:function(b,c){for(var a in this){if(this.hasOwnProperty(a)&&b.call(c,this[a],a)){return true;}}return false;},getKeys:function(){var a=[]; Hash.each(this,function(c,b){a.push(b);});return a;},getValues:function(){var a=[];Hash.each(this,function(b){a.push(b);});return a;},toQueryString:function(a){var b=[]; Hash.each(this,function(f,e){if(a){e=a+"["+e+"]";}var d;switch($type(f)){case"object":d=Hash.toQueryString(f,e);break;case"array":var c={};f.each(function(h,g){c[g]=h; });d=Hash.toQueryString(c,e);break;default:d=e+"="+encodeURIComponent(f);}if(f!=undefined){b.push(d);}});return b.join("&");}});Hash.alias({keyOf:"indexOf",hasValue:"contains"}); var Event=new Native({name:"Event",initialize:function(a,f){f=f||window;var k=f.document;a=a||f.event;if(a.$extended){return a;}this.$extended=true;var j=a.type; var g=a.target||a.srcElement;while(g&&g.nodeType==3){g=g.parentNode;}if(j.test(/key/)){var b=a.which||a.keyCode;var m=Event.Keys.keyOf(b);if(j=="keydown"){var d=b-111; if(d>0&&d<13){m="f"+d;}}m=m||String.fromCharCode(b).toLowerCase();}else{if(j.match(/(click|mouse|menu)/i)){k=(!k.compatMode||k.compatMode=="CSS1Compat")?k.html:k.body; var i={x:a.pageX||a.clientX+k.scrollLeft,y:a.pageY||a.clientY+k.scrollTop};var c={x:(a.pageX)?a.pageX-f.pageXOffset:a.clientX,y:(a.pageY)?a.pageY-f.pageYOffset:a.clientY}; if(j.match(/DOMMouseScroll|mousewheel/)){var h=(a.wheelDelta)?a.wheelDelta/120:-(a.detail||0)/3;}var e=(a.which==3)||(a.button==2);var l=null;if(j.match(/over|out/)){switch(j){case"mouseover":l=a.relatedTarget||a.fromElement; break;case"mouseout":l=a.relatedTarget||a.toElement;}if(!(function(){while(l&&l.nodeType==3){l=l.parentNode;}return true;}).create({attempt:Browser.Engine.gecko})()){l=false; }}}}return $extend(this,{event:a,type:j,page:i,client:c,rightClick:e,wheel:h,relatedTarget:l,target:g,code:b,key:m,shift:a.shiftKey,control:a.ctrlKey,alt:a.altKey,meta:a.metaKey}); }});Event.Keys=new Hash({enter:13,up:38,down:40,left:37,right:39,esc:27,space:32,backspace:8,tab:9,"delete":46});Event.implement({stop:function(){return this.stopPropagation().preventDefault(); },stopPropagation:function(){if(this.event.stopPropagation){this.event.stopPropagation();}else{this.event.cancelBubble=true;}return this;},preventDefault:function(){if(this.event.preventDefault){this.event.preventDefault(); }else{this.event.returnValue=false;}return this;}});function Class(b){if(b instanceof Function){b={initialize:b};}var a=function(){Object.reset(this);if(a._prototyping){return this; }this._current=$empty;var c=(this.initialize)?this.initialize.apply(this,arguments):this;delete this._current;delete this.caller;return c;}.extend(this); a.implement(b);a.constructor=Class;a.prototype.constructor=a;return a;}Function.prototype.protect=function(){this._protected=true;return this;};Object.reset=function(a,c){if(c==null){for(var e in a){Object.reset(a,e); }return a;}delete a[c];switch($type(a[c])){case"object":var d=function(){};d.prototype=a[c];var b=new d;a[c]=Object.reset(b);break;case"array":a[c]=$unlink(a[c]); break;}return a;};new Native({name:"Class",initialize:Class}).extend({instantiate:function(b){b._prototyping=true;var a=new b;delete b._prototyping;return a; },wrap:function(a,b,c){if(c._origin){c=c._origin;}return function(){if(c._protected&&this._current==null){throw new Error('The method "'+b+'" cannot be called.'); }var e=this.caller,f=this._current;this.caller=f;this._current=arguments.callee;var d=c.apply(this,arguments);this._current=f;this.caller=e;return d;}.extend({_owner:a,_origin:c,_name:b}); }});Class.implement({implement:function(a,d){if($type(a)=="object"){for(var e in a){this.implement(e,a[e]);}return this;}var f=Class.Mutators[a];if(f){d=f.call(this,d); if(d==null){return this;}}var c=this.prototype;switch($type(d)){case"function":if(d._hidden){return this;}c[a]=Class.wrap(this,a,d);break;case"object":var b=c[a]; if($type(b)=="object"){$mixin(b,d);}else{c[a]=$unlink(d);}break;case"array":c[a]=$unlink(d);break;default:c[a]=d;}return this;}});Class.Mutators={Extends:function(a){this.parent=a; this.prototype=Class.instantiate(a);this.implement("parent",function(){var b=this.caller._name,c=this.caller._owner.parent.prototype[b];if(!c){throw new Error('The method "'+b+'" has no parent.'); }return c.apply(this,arguments);}.protect());},Implements:function(a){$splat(a).each(function(b){if(b instanceof Function){b=Class.instantiate(b);}this.implement(b); },this);}};var Chain=new Class({$chain:[],chain:function(){this.$chain.extend(Array.flatten(arguments));return this;},callChain:function(){return(this.$chain.length)?this.$chain.shift().apply(this,arguments):false; },clearChain:function(){this.$chain.empty();return this;}});var Events=new Class({$events:{},addEvent:function(c,b,a){c=Events.removeOn(c);if(b!=$empty){this.$events[c]=this.$events[c]||[]; this.$events[c].include(b);if(a){b.internal=true;}}return this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this;},fireEvent:function(c,b,a){c=Events.removeOn(c); if(!this.$events||!this.$events[c]){return this;}this.$events[c].each(function(d){d.create({bind:this,delay:a,"arguments":b})();},this);return this;},removeEvent:function(b,a){b=Events.removeOn(b); if(!this.$events[b]){return this;}if(!a.internal){this.$events[b].erase(a);}return this;},removeEvents:function(c){var d;if($type(c)=="object"){for(d in c){this.removeEvent(d,c[d]); }return this;}if(c){c=Events.removeOn(c);}for(d in this.$events){if(c&&c!=d){continue;}var b=this.$events[d];for(var a=b.length;a--;a){this.removeEvent(d,b[a]); }}return this;}});Events.removeOn=function(a){return a.replace(/^on([A-Z])/,function(b,c){return c.toLowerCase();});};var Options=new Class({setOptions:function(){this.options=$merge.run([this.options].extend(arguments)); if(!this.addEvent){return this;}for(var a in this.options){if($type(this.options[a])!="function"||!(/^on[A-Z]/).test(a)){continue;}this.addEvent(a,this.options[a]); delete this.options[a];}return this;}});var Element=new Native({name:"Element",legacy:window.Element,initialize:function(a,b){var c=Element.Constructors.get(a); if(c){return c(b);}if(typeof a=="string"){return document.newElement(a,b);}return document.id(a).set(b);},afterImplement:function(a,b){Element.Prototype[a]=b; if(Array[a]){return;}Elements.implement(a,function(){var c=[],g=true;for(var e=0,d=this.length;e";}return document.id(this.createElement(a)).set(b);},newTextNode:function(a){return this.createTextNode(a); },getDocument:function(){return this;},getWindow:function(){return this.window;},id:(function(){var a={string:function(d,c,b){d=b.getElementById(d);return(d)?a.element(d,c):null; },element:function(b,e){$uid(b);if(!e&&!b.$family&&!(/^object|embed$/i).test(b.tagName)){var c=Element.Prototype;for(var d in c){b[d]=c[d];}}return b;},object:function(c,d,b){if(c.toElement){return a.element(c.toElement(b),d); }return null;}};a.textnode=a.whitespace=a.window=a.document=$arguments(0);return function(c,e,d){if(c&&c.$family&&c.uid){return c;}var b=$type(c);return(a[b])?a[b](c,e,d||document):null; };})()});if(window.$==null){Window.implement({$:function(a,b){return document.id(a,b,this.document);}});}Window.implement({$$:function(a){if(arguments.length==1&&typeof a=="string"){return this.document.getElements(a); }var f=[];var c=Array.flatten(arguments);for(var d=0,b=c.length;d1);a.each(function(e){var f=this.getElementsByTagName(e.trim());(b)?c.extend(f):c=f; },this);return new Elements(c,{ddup:b,cash:!d});}});(function(){var h={},f={};var i={input:"checked",option:"selected",textarea:(Browser.Engine.webkit&&Browser.Engine.version<420)?"innerHTML":"value"}; var c=function(l){return(f[l]||(f[l]={}));};var g=function(n,l){if(!n){return;}var m=n.uid;if(Browser.Engine.trident){if(n.clearAttributes){var q=l&&n.cloneNode(false); n.clearAttributes();if(q){n.mergeAttributes(q);}}else{if(n.removeEvents){n.removeEvents();}}if((/object/i).test(n.tagName)){for(var o in n){if(typeof n[o]=="function"){n[o]=$empty; }}Element.dispose(n);}}if(!m){return;}h[m]=f[m]=null;};var d=function(){Hash.each(h,g);if(Browser.Engine.trident){$A(document.getElementsByTagName("object")).each(g); }if(window.CollectGarbage){CollectGarbage();}h=f=null;};var j=function(n,l,s,m,p,r){var o=n[s||l];var q=[];while(o){if(o.nodeType==1&&(!m||Element.match(o,m))){if(!p){return document.id(o,r); }q.push(o);}o=o[l];}return(p)?new Elements(q,{ddup:false,cash:!r}):null;};var e={html:"innerHTML","class":"className","for":"htmlFor",defaultValue:"defaultValue",text:(Browser.Engine.trident||(Browser.Engine.webkit&&Browser.Engine.version<420))?"innerText":"textContent"}; var b=["compact","nowrap","ismap","declare","noshade","checked","disabled","readonly","multiple","selected","noresize","defer"];var k=["value","type","defaultValue","accessKey","cellPadding","cellSpacing","colSpan","frameBorder","maxLength","readOnly","rowSpan","tabIndex","useMap"]; b=b.associate(b);Hash.extend(e,b);Hash.extend(e,k.associate(k.map(String.toLowerCase)));var a={before:function(m,l){if(l.parentNode){l.parentNode.insertBefore(m,l); }},after:function(m,l){if(!l.parentNode){return;}var n=l.nextSibling;(n)?l.parentNode.insertBefore(m,n):l.parentNode.appendChild(m);},bottom:function(m,l){l.appendChild(m); },top:function(m,l){var n=l.firstChild;(n)?l.insertBefore(m,n):l.appendChild(m);}};a.inside=a.bottom;Hash.each(a,function(l,m){m=m.capitalize();Element.implement("inject"+m,function(n){l(this,document.id(n,true)); return this;});Element.implement("grab"+m,function(n){l(document.id(n,true),this);return this;});});Element.implement({set:function(o,m){switch($type(o)){case"object":for(var n in o){this.set(n,o[n]); }break;case"string":var l=Element.Properties.get(o);(l&&l.set)?l.set.apply(this,Array.slice(arguments,1)):this.setProperty(o,m);}return this;},get:function(m){var l=Element.Properties.get(m); return(l&&l.get)?l.get.apply(this,Array.slice(arguments,1)):this.getProperty(m);},erase:function(m){var l=Element.Properties.get(m);(l&&l.erase)?l.erase.apply(this):this.removeProperty(m); return this;},setProperty:function(m,n){var l=e[m];if(n==undefined){return this.removeProperty(m);}if(l&&b[m]){n=!!n;}(l)?this[l]=n:this.setAttribute(m,""+n); return this;},setProperties:function(l){for(var m in l){this.setProperty(m,l[m]);}return this;},getProperty:function(m){var l=e[m];var n=(l)?this[l]:this.getAttribute(m,2); return(b[m])?!!n:(l)?n:n||null;},getProperties:function(){var l=$A(arguments);return l.map(this.getProperty,this).associate(l);},removeProperty:function(m){var l=e[m]; (l)?this[l]=(l&&b[m])?false:"":this.removeAttribute(m);return this;},removeProperties:function(){Array.each(arguments,this.removeProperty,this);return this; },hasClass:function(l){return this.className.contains(l," ");},addClass:function(l){if(!this.hasClass(l)){this.className=(this.className+" "+l).clean(); }return this;},removeClass:function(l){this.className=this.className.replace(new RegExp("(^|\\s)"+l+"(?:\\s|$)"),"$1");return this;},toggleClass:function(l){return this.hasClass(l)?this.removeClass(l):this.addClass(l); },adopt:function(){Array.flatten(arguments).each(function(l){l=document.id(l,true);if(l){this.appendChild(l);}},this);return this;},appendText:function(m,l){return this.grab(this.getDocument().newTextNode(m),l); },grab:function(m,l){a[l||"bottom"](document.id(m,true),this);return this;},inject:function(m,l){a[l||"bottom"](this,document.id(m,true));return this;},replaces:function(l){l=document.id(l,true); l.parentNode.replaceChild(this,l);return this;},wraps:function(m,l){m=document.id(m,true);return this.replaces(m).grab(m,l);},getPrevious:function(l,m){return j(this,"previousSibling",null,l,false,m); },getAllPrevious:function(l,m){return j(this,"previousSibling",null,l,true,m);},getNext:function(l,m){return j(this,"nextSibling",null,l,false,m);},getAllNext:function(l,m){return j(this,"nextSibling",null,l,true,m); },getFirst:function(l,m){return j(this,"nextSibling","firstChild",l,false,m);},getLast:function(l,m){return j(this,"previousSibling","lastChild",l,false,m); },getParent:function(l,m){return j(this,"parentNode",null,l,false,m);},getParents:function(l,m){return j(this,"parentNode",null,l,true,m);},getSiblings:function(l,m){return this.getParent().getChildren(l,m).erase(this); },getChildren:function(l,m){return j(this,"nextSibling","firstChild",l,true,m);},getWindow:function(){return this.ownerDocument.window;},getDocument:function(){return this.ownerDocument; },getElementById:function(o,n){var m=this.ownerDocument.getElementById(o);if(!m){return null;}for(var l=m.parentNode;l!=this;l=l.parentNode){if(!l){return null; }}return document.id(m,n);},getSelected:function(){return new Elements($A(this.options).filter(function(l){return l.selected;}));},getComputedStyle:function(m){if(this.currentStyle){return this.currentStyle[m.camelCase()]; }var l=this.getDocument().defaultView.getComputedStyle(this,null);return(l)?l.getPropertyValue([m.hyphenate()]):null;},toQueryString:function(){var l=[]; this.getElements("input, select, textarea",true).each(function(m){if(!m.name||m.disabled||m.type=="submit"||m.type=="reset"||m.type=="file"){return;}var n=(m.tagName.toLowerCase()=="select")?Element.getSelected(m).map(function(o){return o.value; }):((m.type=="radio"||m.type=="checkbox")&&!m.checked)?null:m.value;$splat(n).each(function(o){if(typeof o!="undefined"){l.push(m.name+"="+encodeURIComponent(o)); }});});return l.join("&");},clone:function(o,l){o=o!==false;var r=this.cloneNode(o);var n=function(v,u){if(!l){v.removeAttribute("id");}if(Browser.Engine.trident){v.clearAttributes(); v.mergeAttributes(u);v.removeAttribute("uid");if(v.options){var w=v.options,s=u.options;for(var t=w.length;t--;){w[t].selected=s[t].selected;}}}var x=i[u.tagName.toLowerCase()]; if(x&&u[x]){v[x]=u[x];}};if(o){var p=r.getElementsByTagName("*"),q=this.getElementsByTagName("*");for(var m=p.length;m--;){n(p[m],q[m]);}}n(r,this);return document.id(r); },destroy:function(){Element.empty(this);Element.dispose(this);g(this,true);return null;},empty:function(){$A(this.childNodes).each(function(l){Element.destroy(l); });return this;},dispose:function(){return(this.parentNode)?this.parentNode.removeChild(this):this;},hasChild:function(l){l=document.id(l,true);if(!l){return false; }if(Browser.Engine.webkit&&Browser.Engine.version<420){return $A(this.getElementsByTagName(l.tagName)).contains(l);}return(this.contains)?(this!=l&&this.contains(l)):!!(this.compareDocumentPosition(l)&16); },match:function(l){return(!l||(l==this)||(Element.get(this,"tag")==l));}});Native.implement([Element,Window,Document],{addListener:function(o,n){if(o=="unload"){var l=n,m=this; n=function(){m.removeListener("unload",n);l();};}else{h[this.uid]=this;}if(this.addEventListener){this.addEventListener(o,n,false);}else{this.attachEvent("on"+o,n); }return this;},removeListener:function(m,l){if(this.removeEventListener){this.removeEventListener(m,l,false);}else{this.detachEvent("on"+m,l);}return this; },retrieve:function(m,l){var o=c(this.uid),n=o[m];if(l!=undefined&&n==undefined){n=o[m]=l;}return $pick(n);},store:function(m,l){var n=c(this.uid);n[m]=l; return this;},eliminate:function(l){var m=c(this.uid);delete m[l];return this;}});window.addListener("unload",d);})();Element.Properties=new Hash;Element.Properties.style={set:function(a){this.style.cssText=a; },get:function(){return this.style.cssText;},erase:function(){this.style.cssText="";}};Element.Properties.tag={get:function(){return this.tagName.toLowerCase(); }};Element.Properties.html=(function(){var c=document.createElement("div");var a={table:[1,"","
"],select:[1,""],tbody:[2,"","
"],tr:[3,"","
"]}; a.thead=a.tfoot=a.tbody;var b={set:function(){var e=Array.flatten(arguments).join("");var f=Browser.Engine.trident&&a[this.get("tag")];if(f){var g=c;g.innerHTML=f[1]+e+f[2]; for(var d=f[0];d--;){g=g.firstChild;}this.empty().adopt(g.childNodes);}else{this.innerHTML=e;}}};b.erase=b.set;return b;})();if(Browser.Engine.webkit&&Browser.Engine.version<420){Element.Properties.text={get:function(){if(this.innerText){return this.innerText; }var a=this.ownerDocument.newElement("div",{html:this.innerHTML}).inject(this.ownerDocument.body);var b=a.innerText;a.destroy();return b;}};}Element.Properties.events={set:function(a){this.addEvents(a); }};Native.implement([Element,Window,Document],{addEvent:function(e,g){var h=this.retrieve("events",{});h[e]=h[e]||{keys:[],values:[]};if(h[e].keys.contains(g)){return this; }h[e].keys.push(g);var f=e,a=Element.Events.get(e),c=g,i=this;if(a){if(a.onAdd){a.onAdd.call(this,g);}if(a.condition){c=function(j){if(a.condition.call(this,j)){return g.call(this,j); }return true;};}f=a.base||f;}var d=function(){return g.call(i);};var b=Element.NativeEvents[f];if(b){if(b==2){d=function(j){j=new Event(j,i.getWindow()); if(c.call(i,j)===false){j.stop();}};}this.addListener(f,d);}h[e].values.push(d);return this;},removeEvent:function(c,b){var a=this.retrieve("events");if(!a||!a[c]){return this; }var f=a[c].keys.indexOf(b);if(f==-1){return this;}a[c].keys.splice(f,1);var e=a[c].values.splice(f,1)[0];var d=Element.Events.get(c);if(d){if(d.onRemove){d.onRemove.call(this,b); }c=d.base||c;}return(Element.NativeEvents[c])?this.removeListener(c,e):this;},addEvents:function(a){for(var b in a){this.addEvent(b,a[b]);}return this; },removeEvents:function(a){var c;if($type(a)=="object"){for(c in a){this.removeEvent(c,a[c]);}return this;}var b=this.retrieve("events");if(!b){return this; }if(!a){for(c in b){this.removeEvents(c);}this.eliminate("events");}else{if(b[a]){while(b[a].keys[0]){this.removeEvent(a,b[a].keys[0]);}b[a]=null;}}return this; },fireEvent:function(d,b,a){var c=this.retrieve("events");if(!c||!c[d]){return this;}c[d].keys.each(function(e){e.create({bind:this,delay:a,"arguments":b})(); },this);return this;},cloneEvents:function(d,a){d=document.id(d);var c=d.retrieve("events");if(!c){return this;}if(!a){for(var b in c){this.cloneEvents(d,b); }}else{if(c[a]){c[a].keys.each(function(e){this.addEvent(a,e);},this);}}return this;}});Element.NativeEvents={click:2,dblclick:2,mouseup:2,mousedown:2,contextmenu:2,mousewheel:2,DOMMouseScroll:2,mouseover:2,mouseout:2,mousemove:2,selectstart:2,selectend:2,keydown:2,keypress:2,keyup:2,focus:2,blur:2,change:2,reset:2,select:2,submit:2,load:1,unload:1,beforeunload:2,resize:1,move:1,DOMContentLoaded:1,readystatechange:1,error:1,abort:1,scroll:1}; (function(){var a=function(b){var c=b.relatedTarget;if(c==undefined){return true;}if(c===false){return false;}return($type(this)!="document"&&c!=this&&c.prefix!="xul"&&!this.hasChild(c)); };Element.Events=new Hash({mouseenter:{base:"mouseover",condition:a},mouseleave:{base:"mouseout",condition:a},mousewheel:{base:(Browser.Engine.gecko)?"DOMMouseScroll":"mousewheel"}}); })();Element.Properties.styles={set:function(a){this.setStyles(a);}};Element.Properties.opacity={set:function(a,b){if(!b){if(a==0){if(this.style.visibility!="hidden"){this.style.visibility="hidden"; }}else{if(this.style.visibility!="visible"){this.style.visibility="visible";}}}if(!this.currentStyle||!this.currentStyle.hasLayout){this.style.zoom=1;}if(Browser.Engine.trident){this.style.filter=(a==1)?"":"alpha(opacity="+a*100+")"; }this.style.opacity=a;this.store("opacity",a);},get:function(){return this.retrieve("opacity",1);}};Element.implement({setOpacity:function(a){return this.set("opacity",a,true); },getOpacity:function(){return this.get("opacity");},setStyle:function(b,a){switch(b){case"opacity":return this.set("opacity",parseFloat(a));case"float":b=(Browser.Engine.trident)?"styleFloat":"cssFloat"; }b=b.camelCase();if($type(a)!="string"){var c=(Element.Styles.get(b)||"@").split(" ");a=$splat(a).map(function(e,d){if(!c[d]){return"";}return($type(e)=="number")?c[d].replace("@",Math.round(e)):e; }).join(" ");}else{if(a==String(Number(a))){a=Math.round(a);}}this.style[b]=a;return this;},getStyle:function(g){switch(g){case"opacity":return this.get("opacity"); case"float":g=(Browser.Engine.trident)?"styleFloat":"cssFloat";}g=g.camelCase();var a=this.style[g];if(!$chk(a)){a=[];for(var f in Element.ShortStyles){if(g!=f){continue; }for(var e in Element.ShortStyles[f]){a.push(this.getStyle(e));}return a.join(" ");}a=this.getComputedStyle(g);}if(a){a=String(a);var c=a.match(/rgba?\([\d\s,]+\)/); if(c){a=a.replace(c[0],c[0].rgbToHex());}}if(Browser.Engine.presto||(Browser.Engine.trident&&!$chk(parseInt(a,10)))){if(g.test(/^(height|width)$/)){var b=(g=="width")?["left","right"]:["top","bottom"],d=0; b.each(function(h){d+=this.getStyle("border-"+h+"-width").toInt()+this.getStyle("padding-"+h).toInt();},this);return this["offset"+g.capitalize()]-d+"px"; }if((Browser.Engine.presto)&&String(a).test("px")){return a;}if(g.test(/(border(.+)Width|margin|padding)/)){return"0px";}}return a;},setStyles:function(b){for(var a in b){this.setStyle(a,b[a]); }return this;},getStyles:function(){var a={};Array.flatten(arguments).each(function(b){a[b]=this.getStyle(b);},this);return a;}});Element.Styles=new Hash({left:"@px",top:"@px",bottom:"@px",right:"@px",width:"@px",height:"@px",maxWidth:"@px",maxHeight:"@px",minWidth:"@px",minHeight:"@px",backgroundColor:"rgb(@, @, @)",backgroundPosition:"@px @px",color:"rgb(@, @, @)",fontSize:"@px",letterSpacing:"@px",lineHeight:"@px",clip:"rect(@px @px @px @px)",margin:"@px @px @px @px",padding:"@px @px @px @px",border:"@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)",borderWidth:"@px @px @px @px",borderStyle:"@ @ @ @",borderColor:"rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)",zIndex:"@",zoom:"@",fontWeight:"@",textIndent:"@px",opacity:"@"}); Element.ShortStyles={margin:{},padding:{},border:{},borderWidth:{},borderStyle:{},borderColor:{}};["Top","Right","Bottom","Left"].each(function(g){var f=Element.ShortStyles; var b=Element.Styles;["margin","padding"].each(function(h){var i=h+g;f[h][i]=b[i]="@px";});var e="border"+g;f.border[e]=b[e]="@px @ rgb(@, @, @)";var d=e+"Width",a=e+"Style",c=e+"Color"; f[e]={};f.borderWidth[d]=f[e][d]=b[d]="@px";f.borderStyle[a]=f[e][a]=b[a]="@";f.borderColor[c]=f[e][c]=b[c]="rgb(@, @, @)";});(function(){Element.implement({scrollTo:function(h,i){if(b(this)){this.getWindow().scrollTo(h,i); }else{this.scrollLeft=h;this.scrollTop=i;}return this;},getSize:function(){if(b(this)){return this.getWindow().getSize();}return{x:this.offsetWidth,y:this.offsetHeight}; },getScrollSize:function(){if(b(this)){return this.getWindow().getScrollSize();}return{x:this.scrollWidth,y:this.scrollHeight};},getScroll:function(){if(b(this)){return this.getWindow().getScroll(); }return{x:this.scrollLeft,y:this.scrollTop};},getScrolls:function(){var i=this,h={x:0,y:0};while(i&&!b(i)){h.x+=i.scrollLeft;h.y+=i.scrollTop;i=i.parentNode; }return h;},getOffsetParent:function(){var h=this;if(b(h)){return null;}if(!Browser.Engine.trident){return h.offsetParent;}while((h=h.parentNode)&&!b(h)){if(d(h,"position")!="static"){return h; }}return null;},getOffsets:function(){if(this.getBoundingClientRect){var j=this.getBoundingClientRect(),m=document.id(this.getDocument().documentElement),p=m.getScroll(),k=this.getScrolls(),i=this.getScroll(),h=(d(this,"position")=="fixed"); return{x:j.left.toInt()+k.x-i.x+((h)?0:p.x)-m.clientLeft,y:j.top.toInt()+k.y-i.y+((h)?0:p.y)-m.clientTop};}var l=this,n={x:0,y:0};if(b(this)){return n; }while(l&&!b(l)){n.x+=l.offsetLeft;n.y+=l.offsetTop;if(Browser.Engine.gecko){if(!f(l)){n.x+=c(l);n.y+=g(l);}var o=l.parentNode;if(o&&d(o,"overflow")!="visible"){n.x+=c(o); n.y+=g(o);}}else{if(l!=this&&Browser.Engine.webkit){n.x+=c(l);n.y+=g(l);}}l=l.offsetParent;}if(Browser.Engine.gecko&&!f(this)){n.x-=c(this);n.y-=g(this); }return n;},getPosition:function(k){if(b(this)){return{x:0,y:0};}var l=this.getOffsets(),i=this.getScrolls();var h={x:l.x-i.x,y:l.y-i.y};var j=(k&&(k=document.id(k)))?k.getPosition():{x:0,y:0}; return{x:h.x-j.x,y:h.y-j.y};},getCoordinates:function(j){if(b(this)){return this.getWindow().getCoordinates();}var h=this.getPosition(j),i=this.getSize(); var k={left:h.x,top:h.y,width:i.x,height:i.y};k.right=k.left+k.width;k.bottom=k.top+k.height;return k;},computePosition:function(h){return{left:h.x-e(this,"margin-left"),top:h.y-e(this,"margin-top")}; },setPosition:function(h){return this.setStyles(this.computePosition(h));}});Native.implement([Document,Window],{getSize:function(){if(Browser.Engine.presto||Browser.Engine.webkit){var i=this.getWindow(); return{x:i.innerWidth,y:i.innerHeight};}var h=a(this);return{x:h.clientWidth,y:h.clientHeight};},getScroll:function(){var i=this.getWindow(),h=a(this); return{x:i.pageXOffset||h.scrollLeft,y:i.pageYOffset||h.scrollTop};},getScrollSize:function(){var i=a(this),h=this.getSize();return{x:Math.max(i.scrollWidth,h.x),y:Math.max(i.scrollHeight,h.y)}; },getPosition:function(){return{x:0,y:0};},getCoordinates:function(){var h=this.getSize();return{top:0,left:0,bottom:h.y,right:h.x,height:h.y,width:h.x}; }});var d=Element.getComputedStyle;function e(h,i){return d(h,i).toInt()||0;}function f(h){return d(h,"-moz-box-sizing")=="border-box";}function g(h){return e(h,"border-top-width"); }function c(h){return e(h,"border-left-width");}function b(h){return(/^(?:body|html)$/i).test(h.tagName);}function a(h){var i=h.getDocument();return(!i.compatMode||i.compatMode=="CSS1Compat")?i.html:i.body; }})();Element.alias("setPosition","position");Native.implement([Window,Document,Element],{getHeight:function(){return this.getSize().y;},getWidth:function(){return this.getSize().x; },getScrollTop:function(){return this.getScroll().y;},getScrollLeft:function(){return this.getScroll().x;},getScrollHeight:function(){return this.getScrollSize().y; },getScrollWidth:function(){return this.getScrollSize().x;},getTop:function(){return this.getPosition().y;},getLeft:function(){return this.getPosition().x; }});Native.implement([Document,Element],{getElements:function(h,g){h=h.split(",");var c,e={};for(var d=0,b=h.length;d1),cash:!g});}});Element.implement({match:function(b){if(!b||(b==this)){return true; }var d=Selectors.Utils.parseTagAndID(b);var a=d[0],e=d[1];if(!Selectors.Filters.byID(this,e)||!Selectors.Filters.byTag(this,a)){return false;}var c=Selectors.Utils.parseSelector(b); return(c)?Selectors.Utils.filter(this,c,{}):true;}});var Selectors={Cache:{nth:{},parsed:{}}};Selectors.RegExps={id:(/#([\w-]+)/),tag:(/^(\w+|\*)/),quick:(/^(\w+|\*)$/),splitter:(/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),combined:(/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)}; Selectors.Utils={chk:function(b,c){if(!c){return true;}var a=$uid(b);if(!c[a]){return c[a]=true;}return false;},parseNthArgument:function(h){if(Selectors.Cache.nth[h]){return Selectors.Cache.nth[h]; }var e=h.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);if(!e){return false;}var g=parseInt(e[1],10);var d=(g||g===0)?g:1;var f=e[2]||false;var c=parseInt(e[3],10)||0; if(d!=0){c--;while(c<1){c+=d;}while(c>=d){c-=d;}}else{d=c;f="index";}switch(f){case"n":e={a:d,b:c,special:"n"};break;case"odd":e={a:2,b:0,special:"n"}; break;case"even":e={a:2,b:1,special:"n"};break;case"first":e={a:0,special:"index"};break;case"last":e={special:"last-child"};break;case"only":e={special:"only-child"}; break;default:e={a:(d-1),special:"index"};}return Selectors.Cache.nth[h]=e;},parseSelector:function(e){if(Selectors.Cache.parsed[e]){return Selectors.Cache.parsed[e]; }var d,h={classes:[],pseudos:[],attributes:[]};while((d=Selectors.RegExps.combined.exec(e))){var i=d[1],g=d[2],f=d[3],b=d[5],c=d[6],j=d[7];if(i){h.classes.push(i); }else{if(c){var a=Selectors.Pseudo.get(c);if(a){h.pseudos.push({parser:a,argument:j});}else{h.attributes.push({name:c,operator:"=",value:j});}}else{if(g){h.attributes.push({name:g,operator:f,value:b}); }}}}if(!h.classes.length){delete h.classes;}if(!h.attributes.length){delete h.attributes;}if(!h.pseudos.length){delete h.pseudos;}if(!h.classes&&!h.attributes&&!h.pseudos){h=null; }return Selectors.Cache.parsed[e]=h;},parseTagAndID:function(b){var a=b.match(Selectors.RegExps.tag);var c=b.match(Selectors.RegExps.id);return[(a)?a[1]:"*",(c)?c[1]:false]; },filter:function(f,c,e){var d;if(c.classes){for(d=c.classes.length;d--;d){var g=c.classes[d];if(!Selectors.Filters.byClass(f,g)){return false;}}}if(c.attributes){for(d=c.attributes.length; d--;d){var b=c.attributes[d];if(!Selectors.Filters.byAttribute(f,b.name,b.operator,b.value)){return false;}}}if(c.pseudos){for(d=c.pseudos.length;d--;d){var a=c.pseudos[d]; if(!Selectors.Filters.byPseudo(f,a.parser,a.argument,e)){return false;}}}return true;},getByTagAndID:function(b,a,d){if(d){var c=(b.getElementById)?b.getElementById(d,true):Element.getElementById(b,d,true); return(c&&Selectors.Filters.byTag(c,a))?[c]:[];}else{return b.getElementsByTagName(a);}},search:function(o,h,t){var b=[];var c=h.trim().replace(Selectors.RegExps.splitter,function(k,j,i){b.push(j); return":)"+i;}).split(":)");var p,e,A;for(var z=0,v=c.length;z":function(h,g,j,a,f){var c=Selectors.Utils.getByTagAndID(g,j,a);for(var e=0,d=c.length;ea){return false;}}return(c==a);},even:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n+1",a); },odd:function(b,a){return Selectors.Pseudo["nth-child"].call(this,"2n",a);},selected:function(){return this.selected;},enabled:function(){return(this.disabled===false); }});Element.Events.domready={onAdd:function(a){if(Browser.loaded){a.call(this);}}};(function(){var b=function(){if(Browser.loaded){return;}Browser.loaded=true; window.fireEvent("domready");document.fireEvent("domready");};window.addEvent("load",b);if(Browser.Engine.trident){var a=document.createElement("div"); (function(){($try(function(){a.doScroll();return document.id(a).inject(document.body).set("html","temp").dispose();}))?b():arguments.callee.delay(50);})(); }else{if(Browser.Engine.webkit&&Browser.Engine.version<525){(function(){(["loaded","complete"].contains(document.readyState))?b():arguments.callee.delay(50); })();}else{document.addEvent("DOMContentLoaded",b);}}})();var JSON=new Hash(this.JSON&&{stringify:JSON.stringify,parse:JSON.parse}).extend({$specialChars:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},$replaceChars:function(a){return JSON.$specialChars[a]||"\\u00"+Math.floor(a.charCodeAt()/16).toString(16)+(a.charCodeAt()%16).toString(16); },encode:function(b){switch($type(b)){case"string":return'"'+b.replace(/[\x00-\x1f\\"]/g,JSON.$replaceChars)+'"';case"array":return"["+String(b.map(JSON.encode).clean())+"]"; case"object":case"hash":var a=[];Hash.each(b,function(e,d){var c=JSON.encode(e);if(c){a.push(JSON.encode(d)+":"+c);}});return"{"+a+"}";case"number":case"boolean":return String(b); case false:return"null";}return null;},decode:function(string,secure){if($type(string)!="string"||!string.length){return null;}if(secure&&!(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g,"@").replace(/"[^"\\\n\r]*"/g,""))){return null; }return eval("("+string+")");}});Native.implement([Hash,Array,String,Number],{toJSON:function(){return JSON.encode(this);}});var Cookie=new Class({Implements:Options,options:{path:false,domain:false,duration:false,secure:false,document:document},initialize:function(b,a){this.key=b; this.setOptions(a);},write:function(b){b=encodeURIComponent(b);if(this.options.domain){b+="; domain="+this.options.domain;}if(this.options.path){b+="; path="+this.options.path; }if(this.options.duration){var a=new Date();a.setTime(a.getTime()+this.options.duration*24*60*60*1000);b+="; expires="+a.toGMTString();}if(this.options.secure){b+="; secure"; }this.options.document.cookie=this.key+"="+b;return this;},read:function(){var a=this.options.document.cookie.match("(?:^|;)\\s*"+this.key.escapeRegExp()+"=([^;]*)"); return(a)?decodeURIComponent(a[1]):null;},dispose:function(){new Cookie(this.key,$merge(this.options,{duration:-1})).write("");return this;}});Cookie.write=function(b,c,a){return new Cookie(b,a).write(c); };Cookie.read=function(a){return new Cookie(a).read();};Cookie.dispose=function(b,a){return new Cookie(b,a).dispose();};var Swiff=new Class({Implements:[Options],options:{id:null,height:1,width:1,container:null,properties:{},params:{quality:"high",allowScriptAccess:"always",wMode:"transparent",swLiveConnect:true},callBacks:{},vars:{}},toElement:function(){return this.object; },initialize:function(l,m){this.instance="Swiff_"+$time();this.setOptions(m);m=this.options;var b=this.id=m.id||this.instance;var a=document.id(m.container); Swiff.CallBacks[this.instance]={};var e=m.params,g=m.vars,f=m.callBacks;var h=$extend({height:m.height,width:m.width},m.properties);var k=this;for(var d in f){Swiff.CallBacks[this.instance][d]=(function(n){return function(){return n.apply(k.object,arguments); };})(f[d]);g[d]="Swiff.CallBacks."+this.instance+"."+d;}e.flashVars=Hash.toQueryString(g);if(Browser.Engine.trident){h.classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"; e.movie=l;}else{h.type="application/x-shockwave-flash";h.data=l;}var j=''; }}j+="";this.object=((a)?a.empty():new Element("div")).set("html",j).firstChild;},replaces:function(a){a=document.id(a,true);a.parentNode.replaceChild(this.toElement(),a); return this;},inject:function(a){document.id(a,true).appendChild(this.toElement());return this;},remote:function(){return Swiff.remote.apply(Swiff,[this.toElement()].extend(arguments)); }});Swiff.CallBacks={};Swiff.remote=function(obj,fn){var rs=obj.CallFunction(''+__flash__argumentsToXML(arguments,2)+""); return eval(rs);};var Fx=new Class({Implements:[Chain,Events,Options],options:{fps:50,unit:false,duration:500,link:"ignore"},initialize:function(a){this.subject=this.subject||this; this.setOptions(a);this.options.duration=Fx.Durations[this.options.duration]||this.options.duration.toInt();var b=this.options.wait;if(b===false){this.options.link="cancel"; }},getTransition:function(){return function(a){return -(Math.cos(Math.PI*a)-1)/2;};},step:function(){var a=$time();if(a=(7-4*d)/11){e=c*c-Math.pow((11-6*d-11*f)/4,2); break;}}return e;},Elastic:function(b,a){return Math.pow(2,10*--b)*Math.cos(20*b*Math.PI*(a[0]||1)/3);}});["Quad","Cubic","Quart","Quint"].each(function(b,a){Fx.Transitions[b]=new Fx.Transition(function(c){return Math.pow(c,[a+2]); });});var Request=new Class({Implements:[Chain,Events,Options],options:{url:"",data:"",headers:{"X-Requested-With":"XMLHttpRequest",Accept:"text/javascript, text/html, application/xml, text/xml, */*"},async:true,format:false,method:"post",link:"ignore",isSuccess:null,emulation:true,urlEncoded:true,encoding:"utf-8",evalScripts:false,evalResponse:false,noCache:false},initialize:function(a){this.xhr=new Browser.Request(); this.setOptions(a);this.options.isSuccess=this.options.isSuccess||this.isSuccess;this.headers=new Hash(this.options.headers);},onStateChange:function(){if(this.xhr.readyState!=4||!this.running){return; }this.running=false;this.status=0;$try(function(){this.status=this.xhr.status;}.bind(this));this.xhr.onreadystatechange=$empty;if(this.options.isSuccess.call(this,this.status)){this.response={text:this.xhr.responseText,xml:this.xhr.responseXML}; this.success(this.response.text,this.response.xml);}else{this.response={text:null,xml:null};this.failure();}},isSuccess:function(){return((this.status>=200)&&(this.status<300)); },processScripts:function(a){if(this.options.evalResponse||(/(ecma|java)script/).test(this.getHeader("Content-type"))){return $exec(a);}return a.stripScripts(this.options.evalScripts); },success:function(b,a){this.onSuccess(this.processScripts(b),a);},onSuccess:function(){this.fireEvent("complete",arguments).fireEvent("success",arguments).callChain(); },failure:function(){this.onFailure();},onFailure:function(){this.fireEvent("complete").fireEvent("failure",this.xhr);},setHeader:function(a,b){this.headers.set(a,b); return this;},getHeader:function(a){return $try(function(){return this.xhr.getResponseHeader(a);}.bind(this));},check:function(){if(!this.running){return true; }switch(this.options.link){case"cancel":this.cancel();return true;case"chain":this.chain(this.caller.bind(this,arguments));return false;}return false;},send:function(k){if(!this.check(k)){return this; }this.running=true;var i=$type(k);if(i=="string"||i=="element"){k={data:k};}var d=this.options;k=$extend({data:d.data,url:d.url,method:d.method},k);var g=k.data,b=String(k.url),a=k.method.toLowerCase(); switch($type(g)){case"element":g=document.id(g).toQueryString();break;case"object":case"hash":g=Hash.toQueryString(g);}if(this.options.format){var j="format="+this.options.format; g=(g)?j+"&"+g:j;}if(this.options.emulation&&!["get","post"].contains(a)){var h="_method="+a;g=(g)?h+"&"+g:h;a="post";}if(this.options.urlEncoded&&a=="post"){var c=(this.options.encoding)?"; charset="+this.options.encoding:""; this.headers.set("Content-type","application/x-www-form-urlencoded"+c);}if(this.options.noCache){var f="noCache="+new Date().getTime();g=(g)?f+"&"+g:f; }var e=b.lastIndexOf("/");if(e>-1&&(e=b.indexOf("#"))>-1){b=b.substr(0,e);}if(g&&a=="get"){b=b+(b.contains("?")?"&":"?")+g;g=null;}this.xhr.open(a.toUpperCase(),b,this.options.async); this.xhr.onreadystatechange=this.onStateChange.bind(this);this.headers.each(function(m,l){try{this.xhr.setRequestHeader(l,m);}catch(n){this.fireEvent("exception",[l,m]); }},this);this.fireEvent("request");this.xhr.send(g);if(!this.options.async){this.onStateChange();}return this;},cancel:function(){if(!this.running){return this; }this.running=false;this.xhr.abort();this.xhr.onreadystatechange=$empty;this.xhr=new Browser.Request();this.fireEvent("cancel");return this;}});(function(){var a={}; ["get","post","put","delete","GET","POST","PUT","DELETE"].each(function(b){a[b]=function(){var c=Array.link(arguments,{url:String.type,data:$defined}); return this.send($extend(c,{method:b}));};});Request.implement(a);})();Element.Properties.send={set:function(a){var b=this.retrieve("send");if(b){b.cancel(); }return this.eliminate("send").store("send:options",$extend({data:this,link:"cancel",method:this.get("method")||"post",url:this.get("action")},a));},get:function(a){if(a||!this.retrieve("send")){if(a||!this.retrieve("send:options")){this.set("send",a); }this.store("send",new Request(this.retrieve("send:options")));}return this.retrieve("send");}};Element.implement({send:function(a){var b=this.get("send"); b.send({data:this,url:a||b.options.url});return this;}});Request.HTML=new Class({Extends:Request,options:{update:false,append:false,evalScripts:true,filter:false},processHTML:function(c){var b=c.match(/]*>([\s\S]*?)<\/body>/i); c=(b)?b[1]:c;var a=new Element("div");return $try(function(){var d=""+c+"",g;if(Browser.Engine.trident){g=new ActiveXObject("Microsoft.XMLDOM"); g.async=false;g.loadXML(d);}else{g=new DOMParser().parseFromString(d,"text/xml");}d=g.getElementsByTagName("root")[0];if(!d){return null;}for(var f=0,e=d.childNodes.length; f. Copyright (c) 2006-2009 Aaron Newton , Valerio Proietti & the MooTools team , MIT Style License. MooTools.More={version:"1.2.4.4",build:"6f6057dc645fdb7547689183b2311063bd653ddf"};Class.refactor=function(b,a){$each(a,function(e,d){var c=b.prototype[d]; if(c&&(c=c._origin)&&typeof e=="function"){b.implement(d,function(){var f=this.previous;this.previous=c;var g=e.apply(this,arguments);this.previous=f;return g; });}else{b.implement(d,e);}});return b;};Class.Mutators.Binds=function(a){return a;};Class.Mutators.initialize=function(a){return function(){$splat(this.Binds).each(function(b){var c=this[b]; if(c){this[b]=c.bind(this);}},this);return a.apply(this,arguments);};};Class.Occlude=new Class({occlude:function(c,b){b=document.id(b||this.element);var a=b.retrieve(c||this.property); if(a&&!$defined(this.occluded)){return this.occluded=a;}this.occluded=false;b.store(c||this.property,this);return this.occluded;}});Element.implement({measure:function(e){var g=function(h){return !!(!h||h.offsetHeight||h.offsetWidth); };if(g(this)){return e.apply(this);}var d=this.getParent(),f=[],b=[];while(!g(d)&&d!=document.body){b.push(d.expose());d=d.getParent();}var c=this.expose(); var a=e.apply(this);c();b.each(function(h){h();});return a;},expose:function(){if(this.getStyle("display")!="none"){return $empty;}var a=this.style.cssText; this.setStyles({display:"block",position:"absolute",visibility:"hidden"});return function(){this.style.cssText=a;}.bind(this);},getDimensions:function(a){a=$merge({computeSize:false},a); var f={};var d=function(g,e){return(e.computeSize)?g.getComputedSize(e):g.getSize();};var b=this.getParent("body");if(b&&this.getStyle("display")=="none"){f=this.measure(function(){return d(this,a); });}else{if(b){try{f=d(this,a);}catch(c){}}else{f={x:0,y:0};}}return $chk(f.x)?$extend(f,{width:f.x,height:f.y}):$extend(f,{x:f.width,y:f.height});},getComputedSize:function(a){a=$merge({styles:["padding","border"],plains:{height:["top","bottom"],width:["left","right"]},mode:"both"},a); var c={width:0,height:0};switch(a.mode){case"vertical":delete c.width;delete a.plains.width;break;case"horizontal":delete c.height;delete a.plains.height; break;}var b=[];$each(a.plains,function(g,f){g.each(function(h){a.styles.each(function(i){b.push((i=="border")?i+"-"+h+"-width":i+"-"+h);});});});var e={}; b.each(function(f){e[f]=this.getComputedStyle(f);},this);var d=[];$each(a.plains,function(g,f){var h=f.capitalize();c["total"+h]=c["computed"+h]=0;g.each(function(i){c["computed"+i.capitalize()]=0; b.each(function(k,j){if(k.test(i)){e[k]=e[k].toInt()||0;c["total"+h]=c["total"+h]+e[k];c["computed"+i.capitalize()]=c["computed"+i.capitalize()]+e[k];}if(k.test(i)&&f!=k&&(k.test("border")||k.test("padding"))&&!d.contains(k)){d.push(k); c["computed"+h]=c["computed"+h]-e[k];}});});});["Width","Height"].each(function(g){var f=g.toLowerCase();if(!$chk(c[f])){return;}c[f]=c[f]+this["offset"+g]+c["computed"+g]; c["total"+g]=c[f]+c["total"+g];delete c["computed"+g];},this);return $extend(e,c);}});(function(){var a=Element.prototype.position;Element.implement({position:function(g){if(g&&($defined(g.x)||$defined(g.y))){return a?a.apply(this,arguments):this; }$each(g||{},function(u,t){if(!$defined(u)){delete g[t];}});g=$merge({relativeTo:document.body,position:{x:"center",y:"center"},edge:false,offset:{x:0,y:0},returnPos:false,relFixedPosition:false,ignoreMargins:false,ignoreScroll:false,allowNegative:false},g); var r={x:0,y:0},e=false;var c=this.measure(function(){return document.id(this.getOffsetParent());});if(c&&c!=this.getDocument().body){r=c.measure(function(){return this.getPosition(); });e=c!=document.id(g.relativeTo);g.offset.x=g.offset.x-r.x;g.offset.y=g.offset.y-r.y;}var s=function(t){if($type(t)!="string"){return t;}t=t.toLowerCase(); var u={};if(t.test("left")){u.x="left";}else{if(t.test("right")){u.x="right";}else{u.x="center";}}if(t.test("upper")||t.test("top")){u.y="top";}else{if(t.test("bottom")){u.y="bottom"; }else{u.y="center";}}return u;};g.edge=s(g.edge);g.position=s(g.position);if(!g.edge){if(g.position.x=="center"&&g.position.y=="center"){g.edge={x:"center",y:"center"}; }else{g.edge={x:"left",y:"top"};}}this.setStyle("position","absolute");var f=document.id(g.relativeTo)||document.body,d=f==document.body?window.getScroll():f.getPosition(),l=d.y,h=d.x; var n=this.getDimensions({computeSize:true,styles:["padding","border","margin"]});var j={},o=g.offset.y,q=g.offset.x,k=window.getSize();switch(g.position.x){case"left":j.x=h+q; break;case"right":j.x=h+q+f.offsetWidth;break;default:j.x=h+((f==document.body?k.x:f.offsetWidth)/2)+q;break;}switch(g.position.y){case"top":j.y=l+o;break; case"bottom":j.y=l+o+f.offsetHeight;break;default:j.y=l+((f==document.body?k.y:f.offsetHeight)/2)+o;break;}if(g.edge){var b={};switch(g.edge.x){case"left":b.x=0; break;case"right":b.x=-n.x-n.computedRight-n.computedLeft;break;default:b.x=-(n.totalWidth/2);break;}switch(g.edge.y){case"top":b.y=0;break;case"bottom":b.y=-n.y-n.computedTop-n.computedBottom; break;default:b.y=-(n.totalHeight/2);break;}j.x+=b.x;j.y+=b.y;}j={left:((j.x>=0||e||g.allowNegative)?j.x:0).toInt(),top:((j.y>=0||e||g.allowNegative)?j.y:0).toInt()}; var i={left:"x",top:"y"};["minimum","maximum"].each(function(t){["left","top"].each(function(u){var v=g[t]?g[t][i[u]]:null;if(v!=null&&j[u]this.options.snap){this.cancel();this.document.addEvents({mousemove:this.bound.drag,mouseup:this.bound.stop});this.fireEvent("start",[this.element,a]).fireEvent("snap",this.element); }},drag:function(a){if(this.options.preventDefault){a.preventDefault();}this.mouse.now=a.page;for(var b in this.options.modifiers){if(!this.options.modifiers[b]){continue; }this.value.now[b]=this.mouse.now[b]-this.mouse.pos[b];if(this.options.invert){this.value.now[b]*=-1;}if(this.options.limit&&this.limit[b]){if($chk(this.limit[b][1])&&(this.value.now[b]>this.limit[b][1])){this.value.now[b]=this.limit[b][1]; }else{if($chk(this.limit[b][0])&&(this.value.now[b]0)^(a0)^(a>this.max))){a=this.max;}this.step=Math.round(a);this.checkStep();this.fireEvent("tick",this.toPosition(this.step));this.end();return this; },clickedElement:function(c){if(this.isDragging||c.target==this.knob){return;}var b=this.range<0?-1:1;var a=c.page[this.axis]-this.element.getPosition()[this.axis]-this.half; a=a.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();this.fireEvent("tick",a); this.end();},scrolledElement:function(a){var b=(this.options.mode=="horizontal")?(a.wheel<0):(a.wheel>0);this.set(b?this.step-this.stepSize:this.step+this.stepSize); a.stop();},draggedKnob:function(){var b=this.range<0?-1:1;var a=this.drag.value.now[this.axis];a=a.limit(-this.options.offset,this.full-this.options.offset); this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step; this.fireEvent("change",this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+""); }},toStep:function(a){var b=(a+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(b-=b%this.stepSize):b;},toPosition:function(a){return(this.full*Math.abs(this.min-a))/(this.steps*this.stepSize)-this.options.offset; }});var Asset={javascript:function(f,d){d=$extend({onload:$empty,document:document,check:$lambda(true)},d);if(d.onLoad){d.onload=d.onLoad;}var b=new Element("script",{src:f,type:"text/javascript"}); var e=d.onload.bind(b),a=d.check,g=d.document;delete d.onload;delete d.check;delete d.document;b.addEvents({load:e,readystatechange:function(){if(["loaded","complete"].contains(this.readyState)){e(); }}}).set(d);if(Browser.Engine.webkit419){var c=(function(){if(!$try(a)){return;}$clear(c);e();}).periodical(50);}return b.inject(g.head);},css:function(b,a){return new Element("link",$merge({rel:"stylesheet",media:"screen",type:"text/css",href:b},a)).inject(document.head); },image:function(c,b){b=$merge({onload:$empty,onabort:$empty,onerror:$empty},b);var d=new Image();var a=document.id(d)||new Element("img");["load","abort","error"].each(function(e){var g="on"+e; var f=e.capitalize();if(b["on"+f]){b[g]=b["on"+f];}var h=b[g];delete b[g];d[g]=function(){if(!d){return;}if(!a.parentNode){a.width=d.width;a.height=d.height; }d=d.onload=d.onabort=d.onerror=null;h.delay(1,a,a);a.fireEvent(e,a,1);};});d.src=a.src=c;if(d&&d.complete){d.onload.delay(1);}return a.set(b);},images:function(d,c){c=$merge({onComplete:$empty,onProgress:$empty,onError:$empty,properties:{}},c); d=$splat(d);var a=[];var b=0;return new Elements(d.map(function(e){return Asset.image(e,$extend(c.properties,{onload:function(){c.onProgress.call(this,b,d.indexOf(e)); b++;if(b==d.length){c.onComplete();}},onerror:function(){c.onError.call(this,b,d.indexOf(e));b++;if(b==d.length){c.onComplete();}}}));}));}};var IframeShim=new Class({Implements:[Options,Events,Class.Occlude],options:{className:"iframeShim",src:'javascript:false;document.write("");',display:false,zIndex:null,margin:0,offset:{x:0,y:0},browsers:(Browser.Engine.trident4||(Browser.Engine.gecko&&!Browser.Engine.gecko19&&Browser.Platform.mac))},property:"IframeShim",initialize:function(b,a){this.element=document.id(b); if(this.occlude()){return this.occluded;}this.setOptions(a);this.makeShim();return this;},makeShim:function(){if(this.options.browsers){var c=this.element.getStyle("zIndex").toInt(); if(!c){c=1;var b=this.element.getStyle("position");if(b=="static"||!b){this.element.setStyle("position","relative");}this.element.setStyle("zIndex",c); }c=($chk(this.options.zIndex)&&c>this.options.zIndex)?this.options.zIndex:c-1;if(c<0){c=1;}this.shim=new Element("iframe",{src:this.options.src,scrolling:"no",frameborder:0,styles:{zIndex:c,position:"absolute",border:"none",filter:"progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)"},"class":this.options.className}).store("IframeShim",this); var a=(function(){this.shim.inject(this.element,"after");this[this.options.display?"show":"hide"]();this.fireEvent("inject");}).bind(this);if(!IframeShim.ready){window.addEvent("load",a); }else{a();}}else{this.position=this.hide=this.show=this.dispose=$lambda(this);}},position:function(){if(!IframeShim.ready||!this.shim){return this;}var a=this.element.measure(function(){return this.getSize(); });if(this.options.margin!=undefined){a.x=a.x-(this.options.margin*2);a.y=a.y-(this.options.margin*2);this.options.offset.x+=this.options.margin;this.options.offset.y+=this.options.margin; }this.shim.set({width:a.x,height:a.y}).position({relativeTo:this.element,offset:this.options.offset});return this;},hide:function(){if(this.shim){this.shim.setStyle("display","none"); }return this;},show:function(){if(this.shim){this.shim.setStyle("display","block");}return this.position();},dispose:function(){if(this.shim){this.shim.dispose(); }return this;},destroy:function(){if(this.shim){this.shim.destroy();}return this;}});window.addEvent("load",function(){IframeShim.ready=true;});var Mask=new Class({Implements:[Options,Events],Binds:["position"],options:{style:{},"class":"mask",maskMargins:false,useIframeShim:true,iframeShimOptions:{}},initialize:function(b,a){this.target=document.id(b)||document.id(document.body); this.target.store("Mask",this);this.setOptions(a);this.render();this.inject();},render:function(){this.element=new Element("div",{"class":this.options["class"],id:this.options.id||"mask-"+$time(),styles:$merge(this.options.style,{display:"none"}),events:{click:function(){this.fireEvent("click"); if(this.options.hideOnClick){this.hide();}}.bind(this)}});this.hidden=true;},toElement:function(){return this.element;},inject:function(b,a){a=a||this.options.inject?this.options.inject.where:""||this.target==document.body?"inside":"after"; b=b||this.options.inject?this.options.inject.target:""||this.target;this.element.inject(b,a);if(this.options.useIframeShim){this.shim=new IframeShim(this.element,this.options.iframeShimOptions); this.addEvents({show:this.shim.show.bind(this.shim),hide:this.shim.hide.bind(this.shim),destroy:this.shim.destroy.bind(this.shim)});}},position:function(){this.resize(this.options.width,this.options.height); this.element.position({relativeTo:this.target,position:"topLeft",ignoreMargins:!this.options.maskMargins,ignoreScroll:this.target==document.body});return this; },resize:function(a,e){var b={styles:["padding","border"]};if(this.options.maskMargins){b.styles.push("margin");}var d=this.target.getComputedSize(b);if(this.target==document.body){var c=window.getSize(); if(d.totalHeightàÔµ|·±ÎÜnÒl~Œ«Àpå'®u#P€+È%Æç4¶ ¹N¯AöŠÍ"šÓÐÖƤêƒ[*¡5*ZÓ8 ªNÙ’ÖÎè´ª9ÔiE;A§‘v6’Nmí}À1—zæéžA  0XKRÊôvv'K°õájê]¾^¤¡§ø2ÚcùÁ8õʨ·ô{еö:;‰+íƒ:Möb[Ú¿ê´ñ5£«]J§­/jUíÒ:‡*ôÿÅ> øçï pŽKC'ßBIEND®B`‚pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_assets/information.png0000664000175000017500000000240611405167443025202 00000000000000‰PNG  IHDR‰ îiCCPICC Profilex…TÏkAþ6n©Ð"Zk²x"IY«hEÔ6ýbk Û¶Ed3IÖn6ëî&µ¥ˆäâÑ*ÞEí¡ÿ€zðd/J…ZE(Þ«(b¡-ñÍnL¶¥êÀÎ~óÞ7ï}ovß rÒ4õ€ä ÇR¢il|BjüˆŽ¢ A4%UÛìN$Aƒsù{çØz[VÃ{ûw²w­šÒ¶š„ý@àGšÙ*°ïq Yˆ<ß¡)ÇtßãØòì9NyxÁµ+=ÄY"|@5-ÎM¸SÍ%Ó@ƒH8”õqR>œ×‹”×infÆÈ½O¦»Ìî«b¡œNö½ô~N³Þ>Â! ­?F¸žõŒÕ?âaá¤æÄ†=5ôø`·©ø5Â_M'¢TqÙ. ñ˜®ýVòJ‚p8Êda€sZHO×Lnøº‡}&ׯâwVQáygÞÔÝïEÚ¯0  š HPEa˜°P@†<14²r?#«“{2u$j»tbD±A{6Ü=·Q¤Ý<þ("q”Cµ’üAþ*¯ÉOåyùË\°ØV÷”­›šºòà;Å噹×ÓÈãsM^|•Ôv“WG–¬yz¼šì?ìW—1æ‚5Äs°ûñ-_•Ì—)ŒÅãUóêK„uZ17ߟl;=â.Ï.µÖs­‰‹7V›—gýjHû“æUùO^õñügÍÄcâ)1&vŠç!‰—Å.ñ’ØK« â`mÇ•†)Òm‘ú$Õ``š¼õ/]?[x½F õQ”ÌÒT‰÷Â*d4¹oúÛÇüä÷ŠçŸ(/làÈ™ºmSqï¡e¥ns®¿Ñ}ð¶nk£~8üX<«­R5Ÿ ¼v‡zè)˜Ó––Í9R‡,Ÿ“ºéÊbRÌPÛCRR×%×eK³™UbévØ™Ón¡9B÷ħJe“ú¯ñ°ý°Rùù¬RÙ~NÖ—úoÀ¼ýEÀx‹‰ÓIDAT8”¿+…QǽºÊ€¥2ˆÑl0`“ÁÀ"›ÝH•Ád²H)ð×rI ˆH!¹>ßÛ9õz<~<õ¹çœçÇ÷}Þ÷žs’¢_,ŸÏ·n„êvÇxž$I6¬ÿ7 Ô ëƒWHÛ‹ èûS¤˜ƒð,‹SÈô åÖ¸Âê`~²Uz`%̤’TS÷Mç|*ÉN?pŒÅ"æÃ&a>Æ #Án°ßÊÔä÷qtA?˜ j»£X†Å¦I°Ë#‹°o6ÖÒÈñÓúç<»Ã9 ú¾z°¾ßx&¶bÚl‚ÚB»_.YNA T°÷Þáùx&& VAÆÉØÃ7p­843´kî˜4ª<¡˜;ÀDÝMÐYìJ¾ú˜àêðÞ ÄNaI1º+gÐéPgÒ¸W07àÙ Ý݆@+c<{‰ø¤‘“à‚µËrÒò†àåkÒV¡ ‡"»±u¤ÊB\[fFA{Òšj{ bñ‡=zkøJƒ Îð\€g_^(²—Ã#•³0 ÛžJðù—Cª“íë{zÊQ®}ÅWÂ}$êÕ+¦Ï®æòýxÁ&i!;§P[¥bÚBl¥›ןáæwà0÷IEND®B`‚pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_assets/mouse2touch.js0000664000175000017500000000200711405167443024757 00000000000000/* --- description: A MooTools plugin that automatically map mouse events to touch events license: MIT-style authors: - Chi Wai Lau (http://tabqwert.com) - Scott Kyle (http://appden.com) requires: - core/1.2.4: '*' provides: [Mouse2Touch] ... */ if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) { (function() { try { document.createEvent("TouchEvent"); } catch(e) { return; } ['touchstart', 'touchmove', 'touchend'].each(function(type){ Element.NativeEvents[type] = 2; }); var mapping = { 'mousedown': 'touchstart', 'mousemove': 'touchmove', 'mouseup': 'touchend' }; var condition = function(event) { var touch = event.event.changedTouches[0]; event.page = { x: touch.pageX, y: touch.pageY }; return true; }; for (var e in mapping) { Element.Events[e] = { base: mapping[e], condition: condition }; } })(); } pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_assets/information-red.png0000664000175000017500000000106611405167443025753 00000000000000‰PNG  IHDR‰ tEXtSoftwareAdobe ImageReadyqÉe<ØIDATxÚ„•M(DQǽif” 5RLjd¡dcA“|l|,,°±akV(% IReE(e#v–6ÔäkRCŠ2ÌÔPSãêÿêºÞ}Ný÷Ýsÿ÷ÜsÏ=Ï* …Š\¬ÔƒJŽßÀ¸3-ð¾÷ƒIÐ j€_™{`é =Ú¸ ¬0ÀèT±ø}`Ÿ¾U&Á …¢ Ø!êCÐÚÀ7ŠrMÐIpD )(€cp¥ÌE¸öW{Á„ËåX`Œ—Q¦´yY»N=Ñr¥[Ü‚Yæ®E›÷SÃ+baÛÞÁXåqK™³._ÑK„RˆÕO`ø@9È3YÃæ¢Á€¡ÏÀèdí‰5€V—šx]ò6Ì覕¨ä[­ÛÓ’Ó<Žn>^Ä6Çe`Ðá1Ø&i™L‚WƒÓ/C¬ t€Oƒ¯h$=|N—_`G9‰Ôá5Ød¡ë& C]9ÍáÜ+‚²ñ èf¡«–£FÞÎÇ ˆiN%·ŒxžH·5Š,¥ÊßUÞs–Ž)–N!wR^£àE´Û—óø?OÑ>æ˜S.î mƒJƒ ²„ľIÜÔ`­~R*uJ•HÁiÁÄhª‰“MÆIEND®B`‚pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_image_templ_slider-above.html0000664000175000017500000000175211405167443026455 00000000000000
 
 
 
pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_image_templ.html0000664000175000017500000000173611405167443024023 00000000000000
 
 
 
pfstools-1.8.5/src/hdrhtml/hdrhtml_hdrlabs_templ/hdrhtml_page_templ_short.html0000664000175000017500000000251411405167443025067 00000000000000 @title@ @image_htmlcode@ pfstools-1.8.5/src/hdrhtml/hdrhtml.cpp0000664000175000017500000006314411156030423014723 00000000000000/** * @brief Create a web page with an HDR viewer * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2009 Rafal Mantiuk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: hdrhtml.cpp,v 1.6 2009/03/11 21:45:55 rafm Exp $ */ #include "hdrhtml.h" #include #include #include #include #include #include #include #include // This is to get rid of warnings due to double defines from Magick++ #undef PACKAGE #undef PACKAGE_BUGREPORT #undef PACKAGE_NAME #undef PACKAGE_STRING #undef PACKAGE_TARNAME #undef PACKAGE_VERSION #undef VERSION #include // ================================================ // Parameters controllig the web page // ================================================ const int f_step_res = 3; // How many steps per f-stop (do not change) const int pix_per_fstop = 25; // Distance in pixels between f-stops shown on the histogram const char *hdrhtml_version = "1.0"; // Version of the HDRHTML code // ================================================ // Histogram // ================================================ template class Histogram { public: T *x; // Bin centers size_t *n; // No of items in a bin size_t bins; Histogram() : x( NULL ), n( NULL ) { } ~Histogram() { free(); } void free() { delete []x; delete []n; bins = 0; } void compute( const T *data, size_t d_size, int bins = 30, T min_val = 1, T max_val = -1, bool reject_outofrange = true ) { assert( bins > 0 ); free(); this->bins = bins; if( min_val > max_val ) // missing min/max info { min_val = numeric_limits::max(); max_val = numeric_limits::min(); for( int k=0; k < d_size; k++ ) { if( data[k] > max_val ) max_val = data[k]; if( data[k] < min_val ) min_val = data[k]; } } x = new T[bins]; n = new size_t[bins]; T delta = (max_val-min_val) / (float)bins; // width of a single bin // T *e = new T[bins+1]; // bin edges // for( int k=0; k <= bins; k++ ) { // e[k] = min_val + (float)k * delta; // } for( int k=0; k < bins; k++ ) { x[k] = min_val + (float)k * delta + delta/2; n[k] = 0; } if( reject_outofrange ) { for( int k=0; k < d_size; k++ ) { int ind = floor( (data[k]-min_val) / (max_val-min_val) * (float)bins ); if( ind < 0 ) continue; if( ind >= bins ) continue; n[ind]++; } } else { for( int k=0; k < d_size; k++ ) { int ind = floor( (data[k]-min_val) / (max_val-min_val) * (float)bins ); if( ind < 0 ) { n[0]++; continue; } if( ind >= bins ) { n[bins-1]++; continue; } n[ind]++; } } } }; // ================================================ // Lookup table // ================================================ /** * Lookup table on a uniform array & interpolation * * x_i must be at least two elements * y_i must be initialized after creating an object */ class UniformArrayLUT { const float *x_i; size_t lut_size; float delta; bool own_y_i; public: float *y_i; UniformArrayLUT( size_t lut_size, const float *x_i, float *y_i = NULL ) : x_i( x_i ), lut_size( lut_size ), delta( x_i[1]-x_i[0] ) { if( y_i == NULL ) { this->y_i = new float[lut_size]; own_y_i = true; } else { this->y_i = y_i; own_y_i = false; } } UniformArrayLUT() : x_i( 0 ), y_i(0), lut_size( 0 ), delta( 0. ) {} UniformArrayLUT(const UniformArrayLUT& other) : x_i( other.x_i ), lut_size( other.lut_size ), delta( other.delta ) { this->y_i = new float[lut_size]; own_y_i = true; memcpy(this->y_i, other.y_i, lut_size * sizeof(float)); } UniformArrayLUT& operator = (const UniformArrayLUT& other) { this->lut_size = other.lut_size; this->delta = other.delta; this->x_i = other.x_i; this->y_i = new float[lut_size]; own_y_i = true; memcpy(this->y_i, other.y_i, lut_size * sizeof(float)); } ~UniformArrayLUT() { if( own_y_i ) delete []y_i; } float interp( float x ) { const float ind_f = (x - x_i[0])/delta; const size_t ind_low = (size_t)(ind_f); const size_t ind_hi = (size_t)ceil(ind_f); if( (ind_f < 0) ) // Out of range checks return y_i[0]; if( (ind_hi >= lut_size) ) return y_i[lut_size-1]; if( (ind_low == ind_hi) ) return y_i[ind_low]; // No interpolation necessary return y_i[ind_low] + (y_i[ind_hi]-y_i[ind_low])*(ind_f-(float)ind_low); // Interpolation } }; template inline T clamp( T x, T min, T max ) { if( x < min ) return min; if( x > max ) return max; return x; } /** * Lookup table on an arbitrary array * * x_i must be at least two elements * y_i must be initialized after creating an object */ template class ArrayLUT { const Tx *x_i; size_t lut_size; bool own_y_i; public: Ty *y_i; ArrayLUT( size_t lut_size, const Tx *x_i, Ty *y_i = NULL ) : x_i( x_i ), lut_size( lut_size ) { assert( lut_size > 0 ); if( y_i == NULL ) { this->y_i = new Ty[lut_size]; own_y_i = true; } else { this->y_i = y_i; own_y_i = false; } } ArrayLUT() : x_i( 0 ), y_i(0), lut_size( 0 ) {} ArrayLUT(const ArrayLUT& other) : x_i( other.x_i ), lut_size( other.lut_size ) { this->y_i = new Ty[lut_size]; own_y_i = true; memcpy(this->y_i, other.y_i, lut_size * sizeof(Ty)); } ArrayLUT& operator = (const ArrayLUT& other) { this->lut_size = other.lut_size; this->x_i = other.x_i; this->y_i = new Ty[lut_size]; own_y_i = true; memcpy(this->y_i, other.y_i, lut_size * sizeof(Ty)); } ~ArrayLUT() { if( own_y_i ) delete []y_i; } Ty interp( Tx x ) { if( (x <= x_i[0]) ) // Out of range checks return y_i[0]; if( (x >= x_i[lut_size-1]) ) return y_i[lut_size-1]; // binary search size_t l = 0, r = lut_size-1; while( true ) { size_t m = (l+r)/2; if( m == l ) break; if( x < x_i[m] ) r = m; else l = m; } float alpha = (x - x_i[l])/(x_i[r]-x_i[l]); return y_i[l] + (Ty)(alpha * (y_i[r]-y_i[l])); } }; // ================================================ // Percentiles // ================================================ /** * Compute prctiles using image cummulative histogram, which is less * accurate method but much faster than sorting. */ template class Percentiles { Histogram hist; const size_t bin_n; size_t d_size; public: /** * @param data - table with samples * @param d_size - number of samples */ Percentiles( const T *data, size_t d_size ) : bin_n( 1000 ), d_size( d_size ) // Accuracy 0.1 prctile { hist.compute( data, d_size, bin_n, 1, -1, false ); // Compute cummulative histogram for( int k = 1; k < bin_n; k++ ) hist.n[k] += hist.n[k-1]; // cerr << "d_size: " << d_size << " hist.n: " << hist.n[bin_n-1] << "\n"; assert( hist.n[bin_n-1] == d_size ); } T prctile( double p ) { ArrayLUT lut( hist.bins, hist.n, hist.x ); return lut.interp( (size_t)(p*(double)d_size/100.) ); } }; // ================================================ // Text template file utils // ================================================ typedef void (*replace_callback)( ostream &out, void *user_data, const char *parameter ); class ReplacePattern { public: const char* pattern; std::string replace_with; replace_callback callback; void *user_data; ReplacePattern( const char* pattern, std::string replace_with ) : pattern( pattern ), replace_with( replace_with ), callback( NULL ) { } ReplacePattern( const char* pattern, float replace_with_num ) : pattern( pattern ), callback( NULL ) { std::ostringstream num_str; num_str << replace_with_num; replace_with = num_str.str(); } ReplacePattern( const char* pattern, int replace_with_num ) : pattern( pattern ), callback( NULL ) { std::ostringstream num_str; num_str << replace_with_num; replace_with = num_str.str(); } ReplacePattern( const char* pattern, replace_callback callback, void *user_data = NULL ) : pattern( pattern ), callback( callback ), user_data( user_data ) { } ReplacePattern() : pattern( NULL ), callback( NULL ) { } virtual void write_replacement( ostream &out, const char *parameter = NULL ) { if( callback != NULL ) callback( out, user_data, parameter ); else out << replace_with; } }; void create_from_template( std::ostream &outfs, const char *template_file_name, ReplacePattern *pattern_list ) { std::ifstream infs( template_file_name ); if( !infs.good() ) { std::ostringstream error_message; error_message << "Cannot open '" << template_file_name << "' for reading"; throw pfs::Exception( error_message.str().c_str() ); } const int MAX_LINE_LENGTH = 2048; // int lines = 0; while( true ) { char line[MAX_LINE_LENGTH]; infs.getline( line, MAX_LINE_LENGTH ); if( !infs.good() ) break; std::string line_str( line ); int pos = 0; while( true ) { int find_pos = line_str.find_first_of( '@', pos ); if( find_pos == std::string::npos ) { outfs << line_str.substr( pos, std::string::npos ); break; } bool replaced = false; int end_marker = line_str.find_first_of( "@[", find_pos+1 ); if( end_marker != std::string::npos ) { for( int k = 0; pattern_list[k].pattern != NULL; k++ ) { if( line_str.compare( find_pos+1, end_marker-find_pos-1, pattern_list[k].pattern ) == 0 ) { outfs << line_str.substr( pos, find_pos-pos ); std::string parameter; if( line_str[end_marker] == '[' ) { int param_endmarker = line_str.find_first_of( ']', end_marker+1 ); if( param_endmarker == std::string::npos ) throw pfs::Exception( "Non-closed bracker in the replacement keyword" ); parameter = line_str.substr( end_marker+1, param_endmarker-end_marker-1 ); end_marker = param_endmarker+1; } pattern_list[k].write_replacement( outfs, parameter.empty() ? NULL : parameter.c_str() ); pos = end_marker + 1; replaced = true; break; } } } if( !replaced ) { outfs << line_str.substr( pos, find_pos-pos+1 ); pos = find_pos+1; } } outfs << "\n"; } } void create_from_template( const char *output_file_name, const char *template_file_name, ReplacePattern *pattern_list ) { std::ofstream outfs( output_file_name ); if( !outfs.good() ) { std::ostringstream error_message; error_message << "Cannot open '" << output_file_name << "' for writing"; throw pfs::Exception( error_message.str().c_str() ); } create_from_template( outfs, template_file_name, pattern_list ); } // ================================================ // Read and parse CVS files // ================================================ class CSVTable { public: float **data; int columns, rows; CSVTable() : data( NULL ) { } ~CSVTable() { free(); } void free() { if( data == NULL ) return; for( int k = 0; k < columns; k++ ) delete [] data[k]; delete []data; data = NULL; } void read( const char *file_name, int columns ) { free(); this->columns = columns; std::ifstream ifs( file_name ); if( !ifs.is_open() ) { std::string full_message( "Cannot open file: " ); full_message += file_name; throw pfs::Exception( full_message.c_str() ); } std::list value_list; const int MAX_LINE_LENGTH = 1024; int lines = 0; while( 1 ) { char line[MAX_LINE_LENGTH]; ifs.getline( line, MAX_LINE_LENGTH ); if( !ifs.good() ) break; std::string line_str( line ); int pos = 0; for( int k=0; k < columns; k++ ) { // Skip white spaces while( line_str[pos] == ' ' || line_str[pos] == '\t' ) pos++; int new_pos = line_str.find_first_of( ',', pos ); int len; if( new_pos == std::string::npos ) { if( k != columns-1 ) { std::string full_message( "Missing column data in the file: " ); full_message += file_name; throw pfs::Exception( full_message.c_str() ); } len = std::string::npos; } else len = new_pos-pos; float value; if( len == 0 ) { value = numeric_limits::quiet_NaN(); } else { std::string token = line_str.substr( pos, len ); const char *str_beg = token.c_str(); char *str_end; // cerr << "token: " << str_beg << "\n"; value = strtof( str_beg, &str_end ); if( str_beg == str_end ) { std::ostringstream error_message; error_message << "Error parsing line " << lines+1 << " of " << file_name << "\n"; throw pfs::Exception( error_message.str().c_str() ); } } value_list.push_back( value ); pos = new_pos+1; } lines++; } float **table = new float*[columns]; for( int c=0; c < columns; c++ ) table[c] = new float[lines]; for( int l=0; l < lines; l++ ) for( int c=0; c < columns; c++ ) { table[c][l] = value_list.front(); value_list.pop_front(); } data = table; this->rows = lines; } }; // ================================================ // HDR HTML code // ================================================ void HDRHTMLSet::add_image( int width, int height, float *R, float *G, float *B, float *Y, const char *base_name, int quality ) { const int pixels = width*height; const int basis_no = quality; // Load LUT for the basis tone-curves std::ostringstream lut_filename; lut_filename << PKG_DATADIR "/hdrhtml_t_b" << basis_no+1 << ".csv"; CSVTable basis_table; basis_table.read( lut_filename.str().c_str(), basis_no+1 ); // Transform the first row (luminance factors) to the log domain for( int k = 0; k < basis_table.rows; k++ ) basis_table.data[0][k] = log2f( basis_table.data[0][k] ); // Fix zero and negative values in the image, convert to log2 space, find min and max values float img_min = numeric_limits::max(); float img_max = numeric_limits::min(); { float *arrays[] = { R, G, B, Y }; int k; for( k = 0; k < 4; k++ ) { float *x = arrays[k]; float min_val = numeric_limits::max(), max_val = numeric_limits::min(); for( int i=0; i < pixels; i++ ) { if( x[i] < min_val && x[i] > 0) min_val = x[i]; if( x[i] > max_val ) max_val = x[i]; } img_max = std::max( img_max, log2f(max_val) ); img_min = std::min( img_min, log2f(min_val) ); for( int i=0; i < pixels; i++ ) { if( x[i] < min_val ) x[i] = log2f(min_val); else x[i] = log2f(x[i]); } } } Percentiles prc( Y, pixels ); img_min = prc.prctile( 0.1 ); img_max = prc.prctile( 99.9 ); img_min -= 4; // give extra room for brightenning // how many 8-fstop segments we need to cover the DR int f8_stops = ceil((img_max-img_min)/8); // start with this f-stop float l_start = img_min + (img_max-img_min-f8_stops*8)/2; float l_med = prc.prctile( 50 ); float best_exp = round(l_med-l_start-4); // pix_per_fstop = 25; // % generate image histogram const int hist_height = 36; int hist_width = width; // float hist_img_sz = [36 size(img,2)]; float hist_fstops = hist_width / pix_per_fstop; float hist_start = (img_max-img_min-hist_fstops)/2; { Histogram hist; hist.compute( Y, pixels, hist_width, img_min+hist_start, img_min+hist_start+hist_fstops ); unsigned short *hist_buffer = new unsigned short[hist_width*hist_height*3]; float hist_n_max = -1; for( int k = 0; k < hist_width; k++ ) hist_n_max = std::max( hist_n_max, (float)hist.n[k] ); for( int k = 0; k < hist_width; k++ ) { float top = hist_height - round((float)hist.n[k]/hist_n_max * hist_height); for( int r = 0; r < hist_height; r++ ) { hist_buffer[(r*hist_width+k)*3+0] = 0; hist_buffer[(r*hist_width+k)*3+1] = (r>=top ? (1<<16) -1 : 0); hist_buffer[(r*hist_width+k)*3+2] = 0; } } // tick_fstops = (floor(hist_l(end))-ceil(hist_l(1))); // ticks = round((ceil(hist_l(1))-hist_l(1))*pix_per_fstop) + (1:tick_fstops)*pix_per_fstop; // hist_img(1:5,ticks,1:2) = 0.5; // hist_img(end-4:end,ticks,1:2) = 0.5; // plot_name = sprintf( '%s_hist.png', base_name ); // imwrite( hist_img, plot_name ); Magick::Image hist_image( hist_width, hist_height, "RGB", Magick::ShortPixel, hist_buffer ); std::ostringstream img_filename; if( image_dir != NULL ) img_filename << image_dir << "/"; img_filename << base_name << "_hist.png"; std::cerr << "Writing: " << img_filename.str() << "\n"; hist_image.write( img_filename.str().c_str() ); delete []hist_buffer; } // generate basis images unsigned short *imgBuffer = new unsigned short[pixels*3]; for( int k=1; k <= f8_stops+1; k++ ) { float max_value = (float)numeric_limits::max(); //(1<<16) -1; float exp_multip = log2f(1/powf( 2, l_start + k*8 )); int max_basis = basis_no; if( k == f8_stops+1 ) // Do only one shared basis for the last 8-fstop segment max_basis = 1; for( int b=0; b < max_basis; b++ ) { UniformArrayLUT basis_lut( basis_table.rows, basis_table.data[0], basis_table.data[b+1] ); int i = 0; for( int pix = 0; pix < pixels; pix++ ) { float rgb[3]; rgb[0] = R[pix]; rgb[1] = G[pix]; rgb[2] = B[pix]; for( int c=0; c < 3; c++ ) { float exposure_comp_v = rgb[c] + exp_multip; float v = (basis_lut.interp(exposure_comp_v)*max_value); imgBuffer[i++] = (unsigned short)(basis_lut.interp(exposure_comp_v)*max_value); } } Magick::Image imImage( width, height, "RGB", Magick::ShortPixel, imgBuffer ); std::ostringstream img_filename; if( image_dir != NULL ) img_filename << image_dir << "/"; img_filename << base_name << '_' << k-1 << '_' << b+1 << ".jpg"; std::cerr << "Writing: " << img_filename.str() << "\n"; imImage.write( img_filename.str().c_str() ); } } delete [] imgBuffer; HDRHTMLImage new_image( base_name, width, height ); new_image.hist_width = hist_width; new_image.f8_stops = f8_stops; new_image.f_step_res = f_step_res; new_image.basis = basis_no; new_image.shared_basis = 1; new_image.pix_per_fstop = pix_per_fstop; new_image.hist_start = hist_start; new_image.hist_width = hist_width; new_image.best_exp = best_exp; image_list.push_back( new_image ); } void print_image_objects( ostream &out, void *user_data, const char *parameter ); void print_cf_table( ostream &out, void *user_data, const char *parameter ); void print_image_htmlcode( ostream &out, void *user_data, const char *parameter ); void HDRHTMLSet::generate_webpage( const char *page_template, const char *image_template, const char *object_output, const char *html_output) { if( image_list.empty() ) return; std::ostringstream out_file_name; if( page_name == NULL ) out_file_name << image_list.front().base_name << ".html"; else out_file_name << page_name; // Load the table of the opacity coeffcients std::ostringstream lut_filename; lut_filename << PKG_DATADIR "/hdrhtml_c_b" << image_list.front().basis+1 << ".csv"; CSVTable coeff_table; coeff_table.read( lut_filename.str().c_str(), image_list.front().basis+1 ); ReplacePattern replace_list[] = { ReplacePattern( "cf_array_def", print_cf_table, &coeff_table ), ReplacePattern( "hdr_img_def", print_image_objects, this ), ReplacePattern( "image_htmlcode", print_image_htmlcode, this ), ReplacePattern( "title", page_name == NULL ? "HDRHTML viewer" : page_name ), ReplacePattern( "version", hdrhtml_version ), ReplacePattern() }; this->image_template = image_template; create_from_template( out_file_name.str().c_str(), page_template, replace_list ); if( object_output != NULL ) { std::ofstream oofs( object_output ); if( !oofs.good() ) { std::ostringstream error_message; error_message << "Cannot open '" << object_output << "' for writing"; throw pfs::Exception( error_message.str().c_str() ); } print_image_objects( oofs, this, NULL ); } if( html_output != NULL ) { std::ofstream hofs( html_output ); if( !hofs.good() ) { std::ostringstream error_message; error_message << "Cannot open '" << html_output << "' for writing"; throw pfs::Exception( error_message.str().c_str() ); } print_image_htmlcode( hofs, this, NULL ); } } void print_image_objects( ostream &out, void *user_data, const char *parameter ) { HDRHTMLSet *hdrhtml_set = (HDRHTMLSet*)user_data; list::iterator it; for( it = hdrhtml_set->image_list.begin(); it != hdrhtml_set->image_list.end(); it++ ) { std::string obj_name( "hdr_" ); obj_name.append( it->base_name ); out << obj_name << " = new Object();\n"; out << obj_name << ".width = " << it->width << ";\n"; out << obj_name << ".height = " << it->height << ";\n"; out << obj_name << ".f8_stops = " << it->f8_stops << ";\n"; out << obj_name << ".f_step_res = " << it->f_step_res << ";\n"; out << obj_name << ".base_name = \"" << it->base_name << "\";\n"; if( hdrhtml_set->image_dir==NULL ) out << obj_name << ".image_dir = \"\";\n"; else out << obj_name << ".image_dir = \"" << hdrhtml_set->image_dir << "/\";\n"; out << obj_name << ".basis = " << it->basis << ";\n"; out << obj_name << ".shared_basis = " << it->shared_basis << ";\n"; out << obj_name << ".pix_per_fstop = " << it->pix_per_fstop << ";\n"; out << obj_name << ".hist_start = " << it->hist_start << ";\n"; out << obj_name << ".hist_width = " << it->hist_width << ";\n"; out << obj_name << ".exposure = " << it->best_exp << ";\n"; out << obj_name << ".best_exp = " << it->best_exp << ";\n\n"; } } void print_image_htmlcode( ostream &out, HDRHTMLSet *hdrhtml_set, const HDRHTMLImage &it ) { std::string obj_name( "hdr_" ); obj_name.append( it.base_name ); std::ostringstream img_dir; if( hdrhtml_set->image_dir != NULL ) img_dir << hdrhtml_set->image_dir << "/"; ReplacePattern replace_list[] = { ReplacePattern( "hdr_img_width", it.width ), ReplacePattern( "hdr_img_height", it.height ), ReplacePattern( "img_dir", img_dir.str() ), ReplacePattern( "hist_width", it.hist_width ), ReplacePattern( "base_name", it.base_name ), ReplacePattern( "help_mark_pos", it.hist_width-12 ), ReplacePattern( "hdr_img_object", obj_name ), ReplacePattern( "version", hdrhtml_version ), ReplacePattern() }; create_from_template( out, hdrhtml_set->image_template, replace_list ); } void print_image_htmlcode( ostream &out, void *user_data, const char *parameter ) { HDRHTMLSet *hdrhtml_set = (HDRHTMLSet*)user_data; if( parameter != NULL ) { list::iterator it; for( it = hdrhtml_set->image_list.begin(); it != hdrhtml_set->image_list.end(); it++ ) { if( it->base_name.compare( parameter ) == 0 ) break; } if( it == hdrhtml_set->image_list.end() ) std::cerr << "Warning: image '" << parameter << "' not found\n"; print_image_htmlcode( out, hdrhtml_set, *it ); } else { list::iterator it; for( it = hdrhtml_set->image_list.begin(); it != hdrhtml_set->image_list.end(); it++ ) { print_image_htmlcode( out, hdrhtml_set, *it ); } } } void print_cf_table( ostream &out, void *user_data, const char *parameter ) { CSVTable *cf = (CSVTable*)user_data; out << "var cf = new Array(\n"; for( int b=0; b < cf->rows; b++ ) { out << " new Array("; for( int ex=0; ex < cf->columns; ex++ ) { out << ' ' << cf->data[ex][b]; if( ex != cf->columns-1 ) out << ','; } out << ')'; if( b != cf->rows-1 ) out << ','; out << "\n"; } out << ");\n"; } pfstools-1.8.5/src/hdrhtml/pfsouthdrhtml.10000664000175000017500000001406711406630662015553 00000000000000.TH "pfsouthdrhtml" 1 .SH NAME pfsouthdrhtml \- Create a web page with an HDR viewer .SH SYNOPSIS \fBpfsouthdrhtml\fR [] [\fB--quality\fR <1-5>] [\fB--image-dir\fR ] [\fB--page-template\fR ] [\fB--image-template\fR ] [\fB--object-output\fR ] [\fB--html-output\fR ] .SH DESCRIPTION The command creates in the current directory an HTML web page containing multi-exposure HDR viewer. The multi-exposure viewer displays a portion of the available dynamic range with minimum contrast distortions and provides a slider control to move the dynamic range window towards brighter or darker tones. The interface is very similar to \fIpfsview\fR, which is a pfstools application for displaying HDR images. The web page employs only JavaScript and CSS opacity property and does not require Java applets or the Flash plugin. Note that because this techniques encodes 20-60 exposures using only few images, the displayed exposures may not be identical to the exposures that are shown in pfsview. For examples and more information, visit .PP \fIhttp://pfstools.sourceforge.net/hdrhtml/\fR. .PP \fI\fR specifies the file name, of the web page to be generated. If \fI\fR is missing, the file name of the first image with .html extension will be used. .PP The command can take as input several images and put them all on the same web page. For each image, its file name (from the FILE_NAME tag in the pfsstrem) without extension and a leading path will be used as a name for all JavaScript variables corresponding to that image. If the filename contains illegal characters (such as space, '-', '[', etc), these will be converted to '_'. .TP \fB--quality\fR <1-5>, \fB-q\fR <1-5> Quality of the interpolated exposures, from the worst (1) to the best (5). The default is 2, which is sufficient for most applications. Higher quality will introduce less distortions in the brightest and the darkest tones, but will also generate more images. More images means that there is more data that needs to be transferred to the web-browser, making HDR viewer less responsive. .TP \fB--image-dir\fR , \fB-d\fR Specify where to store the resulting image files. Links to images in HTML will be updated accordingly. This must be a relative path and the directory must exist. Useful to avoid clutter in the current directory. .TP \fB--page-template\fR , \fB-p\fR , \fB--image-template\fR , \fB-i\fR Replaces the template files used to generate an HTML web page. The template files contain all HTML and JaveScript code with special keywords (@keyword@) that are replaced with image specific data, such as width, height, image base name, etc. The default template files can be found in \fIINSTALL_DIR/share/pfstools/hdrhtml_default_templ/hdrhtml_*_templ.html\fR. There is an alternative template bundled with pfstools in the hdrhtml_hdrlabs_templ directory, which contains many improvements and looks much better but requires additional asset files. The example at the end of this manual shows how to use alternative template. More details on how to design own templates can be found in \fBTEMPLATE FILE FORMAT\fR below. .TP \fB--object-output\fR , \fB-o\fR Store JavaScript objects (\fIhdr_\fR) associated with each image in a separate file. This is useful if you want to script creating HTML pages. .TP \fB--html-output\fR , \fB-l\fR Store HTML code that shows HDRHTML viewer for each image in a separate file. This is useful if you want to script creating HTML pages. .SH TEMPLATE FILE FORMAT pfsouthdrhtml uses two template files \fIhdrhtml_page_templ.html\fR and \fIhdrhtml_image_templ.html\fR, located in \fIINSTALL_DIR/share/pfstools/\fR, to generate a web page with an HDR HTML viewer. The 'page' file contains the HTML of the entire web page and the 'image' file is used to paste a viewer code for a single image. You can replace one or both these templates with your own using \fB--page-template\fR and \fB--image-template\fR options. .PP Each template contains HTML code with additional keywords surrounded by @ marks (@keyword@), which are replaced with HDR HTML specific code. Most of the keywords are self explanatory, therefore only the most important are described below. .TP @hdr_img_def@ JavaScript objects that must be put in the 'body' section before any images. These define all the parameters needed to control HDR HTML viewer. .TP @cf_array_def@ Pre-computed array of opacity coefficients. The same array is used for all images that use the same quality setting. Currently only one such array could be used per web-page, so images generated with different quality setting cannot be mixed on a single web page. .TP @image_htmlcode@ or @image_htmlcode[base_name]@ Inserts HTML code of all images or a single image with the base_name (name with no file extension) specified as a parameter. This should be put where HDR HTML viewer should be located. .SH EXAMPLES .TP pfsin memorial.hdr | pfshdrhtml memorial_church Generates a web page memorial_church.html with a set of images memorial_church_*.jpg in the current directory. .TP pfsin ~/hdr_images/*.exr | pfssize --maxx 512 --maxy 512 | pfsouthdrhtml hdr_images Generate a web page with all OpenEXR images from ~/hdr_images/. The images are resized so that they are not larger than 512x512. .TP templ_dir=$INST_DIR/share/pfstools/hdrhtml_hdrlabs_templ/; pfsin img1.hdr img2.exr | pfssize -r 0.2 | pfsouthdrhtml -p ${templ_dir}/hdrhtml_page_templ.html -i ${templ_dir}/hdrhtml_image_templ.html test.html && cp -r ${templ_dir}/hdrhtml_assets ./ The commands above will use an improved template from hdrlabs.com instead of the default one. Note that this template requires html_assets directory to be copied manually to the destination directory. Replace $INST_DIR with the directory where pfstools is installed (/usr/local by default). .SH "SEE ALSO" .BR pfsin (1) .BR pfsout (1) .SH BUGS Please report bugs and comments to the discussion group http://groups.google.com/group/pfstools pfstools-1.8.5/src/hdrhtml/hdrhtml_t_b4.csv0000664000175000017500000000171511140151755015645 000000000000000.0078125,0,0,0 0.0099575,0.043298,5.3555e-22,0 0.012691,0.068233,5.24e-22,0 0.016176,0.099217,3.7926e-22,0 0.020617,0.13105,1.5847e-22,0 0.026278,0.16193,9.295e-23,0 0.033493,0.19249,1.0223e-22,0 0.042689,0.22187,0.0067226,0 0.054409,0.24216,0.035882,0 0.069348,0.26569,0.063736,0 0.088388,0.2928,0.095934,0 0.11266,0.32552,0.12706,0 0.14359,0.36657,0.15933,0 0.18301,0.41682,0.19143,0 0.23326,0.48389,0.21451,0.018561 0.2973,0.56838,0.23449,0.047253 0.37893,0.65793,0.25599,0.078825 0.48297,0.74446,0.28194,0.11068 0.61557,0.83468,0.31458,0.14454 0.78458,0.91545,0.35677,0.17699 1,0.9877,0.40835,0.20735 1.2746,1,0.49517,0.21996 1.6245,1,0.58843,0.23782 2.0705,1,0.68195,0.25835 2.639,1,0.77954,0.28525 3.3636,1,0.86504,0.32097 4.2871,1,0.94003,0.36756 5.4642,1,1,0.43014 6.9644,1,1,0.51864 8.8766,1,1,0.61233 11.314,1,1,0.71075 14.42,1,1,0.80082 18.379,1,1,0.88543 23.425,1,1,0.9645 29.857,1,1,1 38.055,1,1,1 48.503,1,1,1 61.82,1,1,1 78.793,1,1,1 100.43,1,1,1 128,1,1,1 pfstools-1.8.5/src/hdrhtml/pfsouthdrhtml.cpp0000664000175000017500000001507011406630662016170 00000000000000/** * @brief Create a web page with an HDR viewer * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2009 Rafal Mantiuk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsouthdrhtml.cpp,v 1.5 2010/06/13 14:45:55 rafm Exp $ */ #include "hdrhtml.h" #include #include #include #include #include #include #include #define PROG_NAME "pfsouthdrhtml" class QuietException { }; #define min(x,y) ( (x)<(y) ? (x) : (y) ) void printHelp() { fprintf( stderr, PROG_NAME " [] [--quality <1-5>] [--image-dir ] [--page-template ] [--image-template ] [--object-output ] [--html-output ] [--verbose] [--help]\n" "See the manual page for more information.\n" ); } void generate_hdrhtml( int argc, char* argv[] ) { bool verbose = false; int quality = 2; // Parse command line parameters static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { "quality", required_argument, NULL, 'q' }, { "image-dir", required_argument, NULL, 'd' }, { "object-output", required_argument, NULL, 'o' }, { "html-output", required_argument, NULL, 'l' }, { "page-template", required_argument, NULL, 'p' }, { "image-template", required_argument, NULL, 'i' }, { NULL, 0, NULL, 0 } }; static const char optstring[] = "q:hvd:o:l:p:i:"; const char *page_name = NULL; const char *image_dir = NULL; const char *object_output = NULL; const char *html_output = NULL; const char *page_template = PKG_DATADIR "/hdrhtml_default_templ/hdrhtml_page_templ.html"; const char *image_template = PKG_DATADIR "/hdrhtml_default_templ/hdrhtml_image_templ.html"; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, optstring, cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': printHelp(); throw QuietException(); case 'v': verbose = true; break; case 'q': quality = strtol( optarg, NULL, 10 ); if( quality < 1 || quality > 5 ) throw pfs::Exception( "The quality must be between 1 (worst) and 5 (best)." ); break; case 'd': image_dir = optarg; break; case 'o': object_output = optarg; break; case 'p': page_template = optarg; break; case 'i': image_template = optarg; break; case 'l': html_output = optarg; break; case '?': throw QuietException(); case ':': throw QuietException(); } } if( optind < argc ) { page_name = argv[optind++]; } if( optind < argc ) { throw pfs::Exception( "Too many parameters." ); } pfs::DOMIO pfsio; bool first_frame = true; HDRHTMLSet image_set( page_name, image_dir ); while( true ) { pfs::Frame *frame = pfsio.readFrame( stdin ); if( frame == NULL ) { break; // No more frames } // Get RGB color channels pfs::Channel *R= NULL, *B = NULL; // for clarity of the code pfs::Channel *Y; pfs::Array2DImpl G( frame->getWidth(), frame->getHeight() ); { pfs::Channel *X, *Z; frame->getXYZChannels( X, Y, Z ); if( X != NULL ) { // Has color R = X; B = Z; pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, R, &G, B ); } else { // Monochromatic Y = frame->getChannel( "Y" ); if( Y == NULL ) throw pfs::Exception( "Missing color and luminance information in one of the input frames." ); R = Y; pfs::copyArray( Y, &G ); B = Y; } } // Get base_name if needed std::string base_name; { const char *filename = frame->getTags()->getString( "FILE_NAME" ); if( filename == NULL ) { if( first_frame && page_name != NULL ) base_name = page_name; else { if( first_frame ) throw pfs::Exception( "Specify page name if FILE_NAME information in missing in the pfsstream" ); else throw pfs::Exception( "Cannot handle multiple images if FILE_NAME information in missing in the pfsstream" ); } } else { std::string tmp_str( filename ); // Remove extension int dot_pos = tmp_str.find_last_of( '.' ); if( dot_pos != std::string::npos & dot_pos > 0 ) tmp_str = tmp_str.substr( 0, dot_pos ); // Remove path int slash_pos = tmp_str.find_last_of( "/\\" ); if( slash_pos != std::string::npos ) tmp_str = tmp_str.substr( slash_pos+1, std::string::npos ); // Substitute invalid characters while( true ) { int invalid_pos = tmp_str.find_last_of( "-! #@()[]{}`." ); if( invalid_pos == std::string::npos ) break; tmp_str.replace( invalid_pos, 1, 1, '_' ); } base_name = tmp_str; } } std::cerr << "Adding image " << base_name << " to the web page\n"; image_set.add_image( frame->getWidth(), frame->getHeight(), R->getRawData(), G.getRawData(), B->getRawData(), Y->getRawData(), base_name.c_str(), quality ); pfsio.freeFrame( frame ); first_frame = false; } image_set.generate_webpage( page_template, image_template, object_output, html_output ); } int main( int argc, char* argv[] ) { try { generate_hdrhtml( argc, argv ); } catch( pfs::Exception ex ) { fprintf( stderr, PROG_NAME " error: %s\n", ex.getMessage() ); return EXIT_FAILURE; } catch( QuietException ex ) { return EXIT_FAILURE; } return EXIT_SUCCESS; } pfstools-1.8.5/src/hdrhtml/hdrhtml_c_b4.csv0000664000175000017500000000171711140151755015626 000000000000001.000000, 0.000000, 0.000000, 0.000000 1.000000, 0.107779, 0.000000, 0.000000 1.000000, 0.225141, 0.000000, 0.000000 1.000000, 0.346138, 0.000000, 0.000000 1.000000, 0.468157, 0.000000, 0.000000 1.000000, 0.588770, 0.000000, 0.000000 1.000000, 0.705845, 0.000000, 0.000000 1.000000, 0.817590, 0.000000, 0.000000 1.000000, 0.900184, 0.035347, 0.000000 1.000000, 0.949359, 0.116636, 0.000000 1.000000, 0.986104, 0.215020, 0.000000 0.939311, 1.000000, 0.330480, 0.000000 0.984719, 1.000000, 0.453535, 0.000000 0.983375, 1.000000, 0.575528, 0.000000 0.982920, 1.000000, 0.694216, 0.000000 0.981837, 1.000000, 0.807719, 0.000000 0.973294, 1.000000, 0.894052, 0.033054 1.000000, 0.944328, 0.946046, 0.117524 1.000000, 0.613026, 0.985231, 0.220520 0.824505, 0.830313, 1.000000, 0.340765 0.822916, 0.826307, 1.000000, 0.471029 0.828063, 0.831705, 1.000000, 0.600446 0.803956, 0.831663, 1.000000, 0.726575 0.734713, 0.805514, 1.000000, 0.847311 0.109163, 0.305546, 0.885145, 0.956582 pfstools-1.8.5/src/hdrhtml/hdrhtml_c_b3.csv0000664000175000017500000000132511140151755015620 000000000000001.000000, 0.004753, 0.000806 1.000000, 0.077796, 0.000000 1.000000, 0.153789, 0.000000 1.000000, 0.232821, 0.000000 1.000000, 0.313796, 0.000000 1.000000, 0.395649, 0.000000 1.000000, 0.477428, 0.000000 1.000000, 0.558251, 0.000000 1.000000, 0.637553, 0.000000 1.000000, 0.714245, 0.000000 1.000000, 0.787620, 0.000000 1.000000, 0.857177, 0.000000 1.000000, 0.897915, 0.045207 1.000000, 0.931794, 0.101116 1.000000, 0.960051, 0.165419 0.828804, 1.000000, 0.230594 0.824994, 1.000000, 0.314135 0.815345, 1.000000, 0.399492 0.807275, 1.000000, 0.484852 0.792214, 1.000000, 0.569285 0.820934, 1.000000, 0.651947 0.888018, 1.000000, 0.732082 0.932047, 1.000000, 0.809024 1.000000, 0.930768, 0.886016 0.674939, 0.597552, 0.947762 pfstools-1.8.5/src/hdrhtml/hdrhtml_default_templ/0002755000175000017500000000000011652214416017203 500000000000000pfstools-1.8.5/src/hdrhtml/hdrhtml_default_templ/hdrhtml_page_templ.html0000664000175000017500000002220411405167443023653 00000000000000 @title@ @image_htmlcode@ pfstools-1.8.5/src/hdrhtml/hdrhtml_default_templ/hdrhtml_image_templ.html0000664000175000017500000000267411405167443024032 00000000000000
1
?
pfstools-1.8.5/src/hdrhtml/hdrhtml_t_b2.csv0000664000175000017500000000100011140151755015626 000000000000000.0078125,0 0.0099575,0 0.012691,0 0.016176,0.034072 0.020617,0.072078 0.026278,0.11268 0.033493,0.15532 0.042689,0.20165 0.054409,0.24921 0.069348,0.29912 0.088388,0.35227 0.11266,0.40442 0.14359,0.45943 0.18301,0.51602 0.23326,0.57033 0.2973,0.62743 0.37893,0.68417 0.48297,0.73784 0.61557,0.79391 0.78458,0.84724 1,0.89681 1.2746,0.93968 1.6245,0.97889 2.0705,1 2.639,1 3.3636,1 4.2871,1 5.4642,1 6.9644,1 8.8766,1 11.314,1 14.42,1 18.379,1 23.425,1 29.857,1 38.055,1 48.503,1 61.82,1 78.793,1 100.43,1 128,1 pfstools-1.8.5/src/hdrhtml/hdrhtml_t_b5.csv0000664000175000017500000000230611140151755015643 000000000000000.0078125,0,0,0,0 0.0099575,0.046825,0,0,0 0.012691,0.071986,1.3855e-21,0,1.3404e-21 0.016176,0.1037,1.8408e-21,0,4.4849e-21 0.020617,0.13616,8.0301e-22,0,3.2708e-21 0.026278,0.16633,0.007471,0,3.1119e-21 0.033493,0.1947,0.032949,0,3.1648e-21 0.042689,0.22529,0.058851,0,3.0057e-21 0.054409,0.253,0.094366,0,2.6424e-21 0.069348,0.2829,0.12843,0,1.5325e-22 0.088388,0.31506,0.16299,0.0037173,0 0.11266,0.3466,0.18855,0.03263,0 0.14359,0.38407,0.21578,0.061727,0 0.18301,0.42874,0.2435,0.093971,0 0.23326,0.48464,0.26963,0.12885,0 0.2973,0.55177,0.29885,0.16477,0.0031392 0.37893,0.64391,0.32942,0.19135,0.033828 0.48297,0.73599,0.36529,0.21705,0.063574 0.61557,0.83329,0.40955,0.24375,0.098502 0.78458,0.92083,0.46476,0.27055,0.13365 1,0.99702,0.53092,0.2982,0.16758 1.2746,1,0.63416,0.32596,0.19102 1.6245,1,0.73977,0.35658,0.22051 2.0705,1,0.83777,0.39756,0.24813 2.639,1,0.92953,0.45196,0.27761 3.3636,1,1,0.52151,0.30659 4.2871,1,1,0.62457,0.33166 5.4642,1,1,0.73619,0.36229 6.9644,1,1,0.83644,0.40322 8.8766,1,1,0.92453,0.45727 11.314,1,1,1,0.52709 14.42,1,1,1,0.62724 18.379,1,1,1,0.73253 23.425,1,1,1,0.83977 29.857,1,1,1,0.92215 38.055,1,1,1,1 48.503,1,1,1,1 61.82,1,1,1,1 78.793,1,1,1,1 100.43,1,1,1,1 128,1,1,1,1 pfstools-1.8.5/src/hdrhtml/hdrhtml_t_b3.csv0000664000175000017500000000144311140151755015642 000000000000000.0078125,0,0 0.0099575,0.04108,3.708e-20 0.012691,0.047823,5.4321e-20 0.016176,0.065391,5.9717e-20 0.020617,0.083157,5.6894e-20 0.026278,0.10398,6.3196e-20 0.033493,0.12791,6.3889e-20 0.042689,0.1563,6.041e-20 0.054409,0.19097,5.6943e-20 0.069348,0.23139,5.4626e-20 0.088388,0.2763,0.010773 0.11266,0.32933,0.021906 0.14359,0.39697,0.033063 0.18301,0.46994,0.045095 0.23326,0.54158,0.061894 0.2973,0.61753,0.082825 0.37893,0.69394,0.10713 0.48297,0.76558,0.13532 0.61557,0.83936,0.1691 0.78458,0.90635,0.20897 1,0.96558,0.25482 1.2746,1,0.30533 1.6245,1,0.37926 2.0705,1,0.45322 2.639,1,0.53436 3.3636,1,0.61317 4.2871,1,0.69167 5.4642,1,0.77153 6.9644,1,0.84026 8.8766,1,0.90374 11.314,1,0.96351 14.42,1,1 18.379,1,1 23.425,1,1 29.857,1,1 38.055,1,1 48.503,1,1 61.82,1,1 78.793,1,1 100.43,1,1 128,1,1 pfstools-1.8.5/src/hdrhtml/Makefile.am0000664000175000017500000000141611406634264014616 00000000000000### # bin_PROGRAMS = pfsouthdrhtml pfsouthdrhtml_SOURCES = pfsouthdrhtml.cpp hdrhtml.cpp hdrhtml.h man_MANS = pfsouthdrhtml.1 dist_pkgdata_DATA = hdrhtml_c_b2.csv hdrhtml_t_b2.csv hdrhtml_c_b3.csv hdrhtml_t_b3.csv \ hdrhtml_c_b4.csv hdrhtml_t_b4.csv hdrhtml_c_b5.csv hdrhtml_t_b5.csv nobase_dist_pkgdata_DATA = hdrhtml_default_templ/hdrhtml_page_templ.html hdrhtml_default_templ/hdrhtml_image_templ.html \ hdrhtml_hdrlabs_templ/hdrhtml_assets/hdr_viewer.css hdrhtml_hdrlabs_templ/hdrhtml_assets/*.png \ hdrhtml_hdrlabs_templ/hdrhtml_assets/*.gif hdrhtml_hdrlabs_templ/hdrhtml_assets/*.js hdrhtml_hdrlabs_templ/*.html EXTRA_DIST = $(man_MANS) LIBS += ../pfs/libpfs-1.2.la $(IMAGEMAGICK_LIBS) INCLUDES = -I${srcdir}/../pfs $(IMAGEMAGICK_CFLAGS) pfstools-1.8.5/src/hdrhtml/hdrhtml_c_b2.csv0000664000175000017500000000073311140151755015621 000000000000001.000000, 0.000000 1.000000, 0.029169 1.000000, 0.063614 1.000000, 0.100425 1.000000, 0.139501 1.000000, 0.180528 1.000000, 0.223219 1.000000, 0.267228 1.000000, 0.312396 1.000000, 0.358571 1.000000, 0.405153 1.000000, 0.451895 1.000000, 0.498571 1.000000, 0.544955 1.000000, 0.590843 1.000000, 0.636067 1.000000, 0.680764 1.000000, 0.724061 1.000000, 0.766052 1.000000, 0.806596 1.000000, 0.845547 1.000000, 0.882793 1.000000, 0.918213 1.000000, 0.951773 0.985495, 0.983571 pfstools-1.8.5/src/hdrhtml/Makefile.in0000644000175000017500000005643511652214375014640 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = pfsouthdrhtml$(EXEEXT) subdir = src/hdrhtml DIST_COMMON = $(dist_pkgdata_DATA) $(nobase_dist_pkgdata_DATA) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgdatadir)" PROGRAMS = $(bin_PROGRAMS) am_pfsouthdrhtml_OBJECTS = pfsouthdrhtml.$(OBJEXT) hdrhtml.$(OBJEXT) pfsouthdrhtml_OBJECTS = $(am_pfsouthdrhtml_OBJECTS) pfsouthdrhtml_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(pfsouthdrhtml_SOURCES) DIST_SOURCES = $(pfsouthdrhtml_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) DATA = $(dist_pkgdata_DATA) $(nobase_dist_pkgdata_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ ../pfs/libpfs-1.2.la $(IMAGEMAGICK_LIBS) LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pfsouthdrhtml_SOURCES = pfsouthdrhtml.cpp hdrhtml.cpp hdrhtml.h man_MANS = pfsouthdrhtml.1 dist_pkgdata_DATA = hdrhtml_c_b2.csv hdrhtml_t_b2.csv hdrhtml_c_b3.csv hdrhtml_t_b3.csv \ hdrhtml_c_b4.csv hdrhtml_t_b4.csv hdrhtml_c_b5.csv hdrhtml_t_b5.csv nobase_dist_pkgdata_DATA = hdrhtml_default_templ/hdrhtml_page_templ.html hdrhtml_default_templ/hdrhtml_image_templ.html \ hdrhtml_hdrlabs_templ/hdrhtml_assets/hdr_viewer.css hdrhtml_hdrlabs_templ/hdrhtml_assets/*.png \ hdrhtml_hdrlabs_templ/hdrhtml_assets/*.gif hdrhtml_hdrlabs_templ/hdrhtml_assets/*.js hdrhtml_hdrlabs_templ/*.html EXTRA_DIST = $(man_MANS) INCLUDES = -I${srcdir}/../pfs $(IMAGEMAGICK_CFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/hdrhtml/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/hdrhtml/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pfsouthdrhtml$(EXEEXT): $(pfsouthdrhtml_OBJECTS) $(pfsouthdrhtml_DEPENDENCIES) @rm -f pfsouthdrhtml$(EXEEXT) $(CXXLINK) $(pfsouthdrhtml_OBJECTS) $(pfsouthdrhtml_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hdrhtml.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsouthdrhtml.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files install-nobase_dist_pkgdataDATA: $(nobase_dist_pkgdata_DATA) @$(NORMAL_INSTALL) test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" @list='$(nobase_dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ $(am__nobase_list) | while read dir files; do \ xfiles=; for file in $$files; do \ if test -f "$$file"; then xfiles="$$xfiles $$file"; \ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \ test -z "$$xfiles" || { \ test "x$$dir" = x. || { \ echo "$(MKDIR_P) '$(DESTDIR)$(pkgdatadir)/$$dir'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)/$$dir"; }; \ echo " $(INSTALL_DATA) $$xfiles '$(DESTDIR)$(pkgdatadir)/$$dir'"; \ $(INSTALL_DATA) $$xfiles "$(DESTDIR)$(pkgdatadir)/$$dir" || exit $$?; }; \ done uninstall-nobase_dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(nobase_dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_pkgdataDATA install-man \ install-nobase_dist_pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_pkgdataDATA \ uninstall-man uninstall-nobase_dist_pkgdataDATA uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am \ install-dist_pkgdataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-nobase_dist_pkgdataDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-dist_pkgdataDATA uninstall-man uninstall-man1 \ uninstall-nobase_dist_pkgdataDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/src/hdrhtml/hdrhtml.h0000664000175000017500000000414711143231577014377 00000000000000/** * @brief Create a web page with an HDR viewer * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2009 Rafal Mantiuk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: hdrhtml.h,v 1.3 2009/02/07 07:08:47 rafm Exp $ */ #ifndef HDRHTML_H #define HDRHTML_H #include #include class HDRHTMLImage { public: std::string base_name; int width, height; int f8_stops; int f_step_res; int basis; int shared_basis; int pix_per_fstop; float hist_start; int hist_width; float exposure; float best_exp; HDRHTMLImage( const char *base_name, int width, int height ) : base_name( base_name ), width( width ), height( height ) { } }; class HDRHTMLSet { const char *page_name; public: const char *image_dir; const char *image_template; std::list image_list; HDRHTMLSet( const char *page_name, const char *image_dir = NULL ) : page_name( page_name ), image_dir( image_dir ) { } void add_image( int width, int height, float *R, float *G, float *B, float *Y, const char *base_name, int quality ); void generate_webpage( const char *page_template, const char *image_template, const char *object_output = NULL, const char *html_output = NULL); }; #endif pfstools-1.8.5/src/hdrhtml/hdrhtml_c_b5.csv0000664000175000017500000000231111140151755015616 000000000000001.000000, 0.004941, 0.000000, 0.000000, 0.000000 1.000000, 0.157191, 0.000000, 0.000000, 0.000000 1.000000, 0.316501, 0.000000, 0.000000, 0.000000 1.000000, 0.477850, 0.000000, 0.000000, 0.000000 1.000000, 0.636794, 0.000000, 0.000000, 0.000000 1.000000, 0.789464, 0.000000, 0.000000, 0.000000 1.000000, 0.891700, 0.056136, 0.000000, 0.000000 1.000000, 0.954463, 0.164808, 0.000000, 0.000000 0.995961, 1.000000, 0.298554, 0.000000, 0.000000 0.992357, 1.000000, 0.460134, 0.000000, 0.000000 0.992921, 1.000000, 0.619440, 0.000000, 0.000000 0.993587, 1.000000, 0.772463, 0.000000, 0.000000 0.994573, 1.000000, 0.874541, 0.057581, 0.000000 1.000000, 0.951017, 0.939871, 0.167569, 0.000000 1.000000, 0.328929, 0.988487, 0.302869, 0.000000 0.844179, 0.878493, 1.000000, 0.459841, 0.000000 0.804767, 0.851381, 1.000000, 0.623223, 0.000000 0.793615, 0.861199, 1.000000, 0.780415, 0.000000 0.750195, 0.823210, 1.000000, 0.887745, 0.056321 0.702168, 0.777604, 1.000000, 0.951909, 0.171740 0.563097, 0.610780, 0.754127, 1.000000, 0.312939 0.538779, 0.594761, 0.695918, 1.000000, 0.483468 0.413003, 0.469412, 0.564120, 1.000000, 0.652870 0.195722, 0.274036, 0.417979, 1.000000, 0.816901 0.095966, 0.000000, 0.000000, 0.911089, 0.966808 pfstools-1.8.5/src/pfsglview/0002755000175000017500000000000011652214416013200 500000000000000pfstools-1.8.5/src/pfsglview/histogram.h0000775000175000017500000000270110530315731015265 00000000000000#ifndef HISTOGRAM_H #define HISTOGRAM_H #include "rmglwin.h" enum SelectedBar { NONE, LEFT_BAR, RIGHT_BAR, WHOLE_SLIDER }; class Histogram : public RMGLWin { private: int xPos, yPos; int width, height; int* frequencyValues; GLfloat* backgroundColor; float frequencyMax; float sliderPosMin, sliderPosMax; // luminance volues for start and end of slider float lumMin, lumMax; float logLumMin, logLumMax; SelectedBar selectionState; private: void drawBackground(); void drawScale(); void drawStatistic(); void drawSlider(); public: Histogram( int xPos, int yPos, int width, int height); ~Histogram(); void computeFrequency(const pfs::Array2D *image); void drawHistogram(); float getHighFrequency() const; float getMaxFrequency() const; int getWidth( void); int getHeight( void); int getBackgroundWidth(void); int getBackgroundHeight(void); float getLumMin(); float getLumMax(); float pos2lum( float pos); float lum2pos( float lum); void computeLumRange( float& min, float& max); void processSliderSelection(int xCoord, int yCoord); int setSliderSelectionState(SelectedBar newState); SelectedBar getSliderSelectionState(); void setSliderPosMin( float pos); float getSliderPosMin(void); void setSliderPosMax( float pos); float getSliderPosMax(void); void setSliderPosMinMax( float min, float max); void resetFrequencyMax(void); void redraw(void); }; #endif pfstools-1.8.5/src/pfsglview/winstat.h0000775000175000017500000000122510527564503014772 00000000000000 #include "rmglwin.h" class WinStat : public RMGLWin { private: int pixelX; int pixelY; int colR, colG, colB; float lumMax; const char* mappingMode; int frameNo; const char* channel; int rawPosX, rawPosY; float rawX, rawY, rawZ; bool bZoom; public: //WinStat( int posX, int posY, int width, int height); WinStat(); ~WinStat(); void redraw(void); void setPixelData( int xx, int yy, int r, int g, int b); void setMaxFreq(float val); void setMapping(const char*); void setFrameNo(int no); void setChannel(const char* ch) ; void setRawData(int x, int y, float X, float Y, float Z); void setBZoom(bool bb); }; pfstools-1.8.5/src/pfsglview/rmglwin.h0000775000175000017500000000104510571575734014767 00000000000000 #ifndef __RMGLWIN_H #define __RMGLWIN_H class RMGLWin { private: GLint param[4]; protected: int flag; int winPosX; int winPosY; int winWidth; int winHeight; GLfloat* winBackgroundColor; void redraw(void); int redrawStart(void); void redrawEnd(void); public: RMGLWin(); ~RMGLWin(); void setWinPos( int posX, int posY); void setWinSize( int width, int height); int getWinHeight(); void setFlag(int bb); int getFlag(void); int processSelection(int xCoord, int yCoord); }; #endif pfstools-1.8.5/src/pfsglview/pfsglview.10000664000175000017500000000632010633252521015206 00000000000000.TH "pfsglview" 1 .SH NAME pfsglview \- Viewer for high-dynamic range images in pfs format .SH SYNOPSIS .B pfsglview [--h] [--v] .SH DESCRIPTION pfsview is a OpenGL/GLUT application for viewing high-dynamic range images. It expects pfs stream on the standard input and displays the frames in that stream one by one. .SH DYNAMIC RANGE WINDOW To show high-dynamic range data on a low-dynamic range monitor, pfsglview uses concept of a dynamic range window. The dynamic range window is the highest and lowest value that should be mapped to black and white pixel. Values above or below the window are clipped (see clipping methods below). The dynamic range window is displayed in pfsglview as a blue area on the dynamic range scale (second toolbox from the top). The window can be moved, shrunk and expended using a mouse or a keyboard. .SH ZOOMING AND PANNING To zoom image, the mouse can be dragged in vertical direction with the left button pressed. Pressing [space] button or pressing left mouse button above the statistic window (left-bottom corner) changes from zooming to panning modes and vice versa. To pan image, the mouse can be dragged in vertical and horizontal directions with the left button pressed. .SH POPUP MENU OPTIONS .TP .B Zoom reset Set default zoom parameters. .TP .B Zoom in Increase image (mouse dragging with left button pressed). .TP .B Zoom out Decrease image (mouse dragging with left button pressed). .TP .B Increase exposure Move dynamic range window into higher luminance values. .TP .B Decrease exposure Move dynamic range window into lover luminance values. .TP .B Extend dynamic range Extend dynamic range window. .TP .B Shrink dynamic range Shrink dynamic range window .TP .B Low dynamic range Set dynamic range window to <-1,1> range (log scale). .TP .B Fit to dynamic range Set dynamic range windo to minimum and maximum luminance of a given image. .TP .B Choose channel Change image data channel. .TP .B Mapping method Change mapping method (see below for details). .TP .B Next frame Display next image from the pipe. .TP .B Previous frame Display previous image from the pipe. .TP .B Histogram Switch on/off histogram window. .TP .B Info Switch on/off info window. .TP .B Save&Quit Send the visible LDR image (8-bits) to stdout and quit pfsglview. .SH MAPPING METHODS High-dynamic range data are usually better visualized using non-linear scale, for example a logarithmic or a power function. pfsglview offers several such scales, shown in \fIpopup\fR menu. Gray-scale values for each mapping method are computed by the formulas: \fBLINEAR\fR: y = (x-min)/(max-min) \fBGAMMA\fR: y = [ (x-min)/(max-min) ]^gamma \fBLOGARITHMIC\fR: y = (log10(x)-log10(min))/(log10(max)-log10(min)) where \fIy\fR is the gray-scale value after mapping, \fIx\fR is an input HDR value, \fImin\fR and \fImax\fR are lower and upper bounds of the dynamic range window. .SH EXAMPLES .TP pfsin memorial.hdr | pfsglview See the memorial image. .TP pfsin memorial.hdr | pfsglview | pfsout memorial.jpg See the memorial image and save the clipped (8-bits) version to memorial.jpg (\fISave&Quit\fR option from popup menu should be activated). .SH "SEE ALSO" .BR pfsin (1) Please report bugs and comments to Radoslaw Mantiuk . pfstools-1.8.5/src/pfsglview/histogram.cpp0000775000175000017500000002644410625017411015631 00000000000000/** * @brief PFS library - additional utilities * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2006 Radoslaw Mantiuk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * * */ #include #include #include #include #include "glenv.h" #include "pfs.h" #include "rmglwin.h" #include "histogram.h" #define SIDE_BAR 5 #define BOTTOM_BAR 14 #define SCALE_BAR 10 #define MIN_LUM 0.000001f #define MAX_LUM 100000000.0f /** * @param xPos starting x position of histogram * @param yPos starting y position of histogram * @param width width of histogram (in points/pixels), the number of bins is equal to this value * @param height height of histogram (in points/pixels) */ Histogram::Histogram( int xPos, int yPos, int width, int height) : RMGLWin() { this->xPos = xPos; this->yPos = yPos; this->width = width - SIDE_BAR*2; this->height = height - BOTTOM_BAR; // background color backgroundColor = new float[3]; for(int i=0; i<3; i++) backgroundColor[i] = 1.0f; frequencyMax = -1; sliderPosMin = 0; sliderPosMax = 0; this->lumMin = MIN_LUM; this->lumMax = MAX_LUM; logLumMin = log10(lumMin); logLumMax = log10(lumMax); selectionState = NONE; } Histogram::~Histogram() { delete [] frequencyValues; delete [] backgroundColor; } /** Redraw window */ void Histogram::redraw(void) { RMGLWin::redrawStart(); drawHistogram(); drawScale(); drawStatistic(); drawSlider(); RMGLWin::redrawEnd(); } /** Draws histogram. */ void Histogram::drawHistogram() { if(frequencyValues == NULL) return; if( frequencyMax == -1) frequencyMax = getHighFrequency(); // not max but high to remove very large picks (e.g. near very light bins) int offsetX = SIDE_BAR; int offsetY = height / 4; glColor3f(1.0f, 0.0f, 0.0f); float barHeight = 0; for(int lum = 0; lum< width; lum++) { float hh = frequencyValues[lum] / frequencyMax; if( hh > 1) hh = 1; barHeight = (float)height * hh; if( barHeight > 0 && barHeight < 1.0) barHeight = 1.0; if(barHeight > 0) glRectf(offsetX + lum, offsetY, offsetX+lum + 1, offsetY + barHeight); } } /** Draws background */ void Histogram::drawBackground() { glColor3fv(backgroundColor); glRectf( xPos/2, yPos, width + SIDE_BAR*2 + xPos/2, yPos - height - BOTTOM_BAR - SCALE_BAR); } /** Draws scale */ void Histogram::drawScale() { glColor3f(0.1f, 0.1f, 0.1f); float pos; int offsetX = SIDE_BAR; int offsetY = height / 4;//yPos - height; int k1 = 0; for( int i = (int)logLumMin; i <= (int)logLumMax; i++) { pos = lum2pos( pow(10, (float)i)) * (float)width; glRectf( offsetX + pos, offsetY, offsetX + pos + 1, offsetY + height/2); if( i < 0) { glRasterPos2f( offsetX + pos - 5, offsetY - 10); glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, '-'); glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, '6' - (k1++)); } else { glRasterPos2f( offsetX + pos - 2, offsetY - 10); glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, '0' + i); } } glRectf( offsetX, offsetY, offsetX+pos + 1, offsetY-1); } /** Draws statistic of a current image. */ void Histogram::drawStatistic() { int offsetX = winWidth - 130; int offsetY = height ; glRasterPos2f( offsetX, offsetY); char ss[200]; sprintf( ss, "logLum.:<%.3f, %.3f>" , log10(pos2lum(sliderPosMin)), log10(pos2lum(sliderPosMax))); int len = (int) strlen(ss); for (int i = 0; i < len; i++) { glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, ss[i]); } } /** Draws slider */ void Histogram::drawSlider() { float minValue = width * sliderPosMin; float maxValue = width * sliderPosMax; int sliderHeight = height; int offsetX = SIDE_BAR; int offsetY = height + height/4 ; glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glColor4f(0.2f, 0.2f, 0.5f, 0.3f); glLoadName(WHOLE_SLIDER); glBegin(GL_QUADS); glVertex3f(offsetX + minValue, offsetY, -0.5f); glVertex3f(offsetX + minValue, offsetY - sliderHeight, -0.5f); glVertex3f(offsetX + maxValue, offsetY - sliderHeight, -0.5f); glVertex3f(offsetX + maxValue, offsetY, -0.5f); glEnd(); glColor4f(0.7f, 0.7f, 0.8f, 0.5f); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); glTranslatef(offsetX + minValue, offsetY - sliderHeight/2, 0.0f); glRotatef(-90.0f, 0.0f, 1.0f, 0.0f); glLoadName(LEFT_BAR); glutSolidCone(sliderHeight/2, sliderHeight/3.0, 2, 2); glPopMatrix(); glPushMatrix(); glLoadIdentity(); glTranslatef(offsetX + maxValue, offsetY - sliderHeight/2, 0.0f); glRotatef(90.0f, 0.0f, 1.0f, 0.0f); glLoadName(RIGHT_BAR); glutSolidCone(sliderHeight/2, sliderHeight/3.0, 2, 2); glPopMatrix(); glDisable(GL_BLEND); } /** Creates histogram. Histogram will have 'width' bins. */ void Histogram::computeFrequency(const pfs::Array2D *image) { const int size = image->getRows()*image->getCols(); frequencyValues = new int[width]; for( int i = 0; i < width; i++ ) frequencyValues[i] = 0; for( int i = 0; i < size; i++ ) { float val = (*image)(i); if( val <= 0 || val > lumMax) { //fprintf( stderr, "WARNING: pixel luminance out of range (Histogram::computeFrequency())\n"); continue; } val = log10(val); // Calculate frequency value index in table: <0, with> int index = (int)((val - logLumMin) / (logLumMax - logLumMin) * (float)width); if( index > width || index < 0 ) continue; if( index == width ) index = width - 1; // Increase the counter of this value frequencyValues[index] += 1; } } /** Computes the maximum frequency in an image based on histogram data. */ float Histogram::getMaxFrequency() const { int maxFreq = -1; for( int i = 0; i < width; i++ ) { if( frequencyValues[i] > maxFreq ) { maxFreq = frequencyValues[i]; } } return maxFreq; } /** Returns frequence of the bin = max_bin - PERCENTIL * number_of_bins. Very light and very dark bins * are not taken into consideration in this computations. It allows to skip very dark (black) and/or * very light (white) pixels which can cover large areas of an image and lower the height of histogram for remaining * pixels (undesirable situation: flat histogram with one large pick for very light bin). */ float Histogram::getHighFrequency() const { std::vector vec; for( int i = 0; i < width; i++ ) { vec.push_back((float)frequencyValues[i]); } std::sort(vec.begin(), vec.end()); #define PERCENTIL 0.99 float highFreq = vec[(int)((float)vec.size() * PERCENTIL)]; // returns high frequency only if max frequency is 3 or more times higher float maxFreq = getMaxFrequency(); if( (3*highFreq) > maxFreq) return maxFreq; else return highFreq; } /** Converts horizontal position in the histogram into luminance value. The position must be in range <0,1>. */ float Histogram::pos2lum( float pos) { if( pos < 0) pos = 0; if( pos > 1) pos = 1; return pow( 10, pos * (logLumMax - logLumMin) + logLumMin); } /** Converts luminance value into position in range <0,1>. */ float Histogram::lum2pos( float lum) { if( lum < lumMin) lum = lumMin; if( lum > lumMax) lum = lumMax; return (log10(lum) - logLumMin) / (logLumMax - logLumMin); } /** Computes initial position of the slider. The calculation are based on the shape of histogram. */ #define FREQUENCY_EDGE 0.2 void Histogram::computeLumRange( float& min, float& max) { float maxFreq = getHighFrequency(); float freq; for( int i = 0; i < width; i++) { freq = frequencyValues[i] / maxFreq; if( freq > FREQUENCY_EDGE && freq < 1.0){ min = pos2lum((float)i / (float)width); break; } } for( int i = (width-1); i >=0; i--) { freq = frequencyValues[i] / maxFreq; if( freq > FREQUENCY_EDGE && freq < 1.0){ max = pos2lum((float)i / (float)width); break; } } } /** Returns width of the histogram in pixels */ int Histogram::getWidth(void) { return width; } int Histogram::getHeight(void) { return height; } int Histogram::getBackgroundWidth(void) { return (width + SIDE_BAR*2); } int Histogram::getBackgroundHeight(void) { return (height + BOTTOM_BAR); } float Histogram::getLumMin(void) { return lumMin; } float Histogram::getLumMax(void) { return lumMax; } void Histogram::setSliderPosMin( float pos) { if( pos > sliderPosMax) pos = sliderPosMax; if( pos < 0) pos = 0; sliderPosMin = pos; } float Histogram::getSliderPosMin(void) { return sliderPosMin; } void Histogram::setSliderPosMax( float pos) { if( pos < sliderPosMin) pos = sliderPosMin; if( pos > 1.0) pos = 1.0; sliderPosMax = pos; } float Histogram::getSliderPosMax(void) { return sliderPosMax; } void Histogram::setSliderPosMinMax( float min, float max) { if( min < 0) min = 0; if( max < 0) max = 0; if( min > 1.0) min = 0; if( max > 1.0) max = 1.0; if( min > max) min = max; sliderPosMin = min; sliderPosMax = max; } /** Checks what part of slider was touched. */ void Histogram::processSliderSelection(int xCoord, int yCoord) { redrawStart(); // Hits counter and viewport martix GLint hits, viewp[4]; // Get actual viewport glGetIntegerv(GL_VIEWPORT, viewp); #define BUFFER_SIZE 64 // Table for selection buffer data GLuint selectionBuffer[BUFFER_SIZE]; // Prepare selection buffer glSelectBuffer(BUFFER_SIZE, selectionBuffer); // Change rendering mode glRenderMode(GL_SELECT); // Initializes the Name Stack glInitNames(); // Push 0 (at least one entry) Onto the Stack glPushName(NONE); // Set new projection matrix as a box around xPos, yPos glLoadIdentity(); int hh = glutGet(GLUT_WINDOW_HEIGHT); // Picking matrix at position xCoord, windowSize - yCoord (fliped window Y axis) // and size of 4 units in depth gluPickMatrix(xCoord, hh - yCoord, 4, 4, viewp); glOrtho(0.0f, viewp[2], 0.0f, viewp[3], -10.0f, 10.0f); // last 1.0 -1.0 it's enough drawSlider(); // draw only picked parts hits = glRenderMode(GL_RENDER); if(hits > 0) { for(int i=3; i < BUFFER_SIZE; i+=4) { switch(selectionBuffer[i]) { case 1 :selectionState = LEFT_BAR; break; case 2 :selectionState = RIGHT_BAR; break; case 3 :selectionState = WHOLE_SLIDER; break; default:selectionState = NONE; break; } if(selectionState != NONE) break; } } redrawEnd(); } int Histogram::setSliderSelectionState(SelectedBar newState) { if(newState == LEFT_BAR || newState == RIGHT_BAR || newState == WHOLE_SLIDER || newState == NONE) { selectionState = newState; return (int)selectionState; } else return -1; } SelectedBar Histogram::getSliderSelectionState() { return selectionState; } void Histogram::resetFrequencyMax(void) { frequencyMax = -1; } pfstools-1.8.5/src/pfsglview/rmglwin.cpp0000775000175000017500000000715410527564503015322 00000000000000/** * @brief PFS library - additional utilities * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2006 Radoslaw Mantiuk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * * */ #include #include "glenv.h" #include "rmglwin.h" RMGLWin::RMGLWin() { flag = GL_TRUE; winPosX = 10; winPosY = 10; winWidth = 100; winHeight = 40; // background color winBackgroundColor = new float[4]; for(int i=0; i<3; i++) winBackgroundColor[i] = 1.0f; winBackgroundColor[3] = 0.8f; } RMGLWin::~RMGLWin() { delete [] winBackgroundColor; } void RMGLWin::redraw(void) { if( flag == GL_FALSE) return; // draw background glEnable(GL_BLEND); glColor4fv(winBackgroundColor); glRecti( 0, 0, winWidth, winHeight); glDisable(GL_BLEND); } int RMGLWin::redrawStart(void) { if( flag == GL_FALSE) return 1; glGetIntegerv( GL_VIEWPORT, param); // remember old vieport glMatrixMode(GL_MODELVIEW); glPushMatrix(); //glLoadIdentity(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glViewport( winPosX, winPosY, winWidth, winHeight); glOrtho( 0, winWidth, 0, winHeight, -1.0f, 1.0f); redraw(); return 0; } void RMGLWin::redrawEnd(void) { if( flag == GL_FALSE) return; glMatrixMode(GL_PROJECTION); glPopMatrix(); glViewport( param[0], param[1], param[2], param[3]); // restore viewport glMatrixMode(GL_MODELVIEW); glPopMatrix(); } void RMGLWin::setWinPos( int posX, int posY) { winPosX = posX; winPosY = posY; } void RMGLWin::setWinSize( int width, int height) { winWidth = width; winHeight = height; } int RMGLWin::getWinHeight() { return winHeight; } void RMGLWin::setFlag(int bb) { flag = bb; } int RMGLWin::getFlag(void) { return flag; } int RMGLWin::processSelection(int xCoord, int yCoord) { if( flag == GL_FALSE) return 1; redrawStart(); // Hits counter and viewport martix GLint hits, viewp[4]; // Get actual viewport glGetIntegerv(GL_VIEWPORT, viewp); #define BUFFER_SIZE 64 // Table for selection buffer data GLuint selectionBuffer[BUFFER_SIZE]; // Prepare selection buffer glSelectBuffer(BUFFER_SIZE, selectionBuffer); // Change rendering mode glRenderMode(GL_SELECT); // Initializes the Name Stack glInitNames(); // Push 0 (at least one entry) Onto the Stack glPushName(0); // Set new projection matrix as a box around xPos, yPos glLoadIdentity(); int hh = glutGet(GLUT_WINDOW_HEIGHT); // Picking matrix at position xCoord, windowSize - yCoord (fliped window Y axis) // and size of 4 units in depth gluPickMatrix(xCoord, hh - yCoord, 4, 4, viewp); glOrtho(0.0f, viewp[2], 0.0f, viewp[3], -10.0f, 10.0f); // last 1.0 -1.0 it's enough redraw(); // draw only picked parts int ret = 0; hits = glRenderMode(GL_RENDER); if(hits > 0) { ret = 1; } redrawEnd(); return ret; } pfstools-1.8.5/src/pfsglview/winstat.cpp0000775000175000017500000000576410535537345015344 00000000000000/** * @brief PFS library - additional utilities * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2006 Radoslaw Mantiuk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * * @author Radoslaw Mantiuk, * */ #include #include #include "glenv.h" #include "winstat.h" WinStat::WinStat() : RMGLWin() { colR = -1; colG = -1; colB = -1; frameNo = -1; channel = ""; rawPosX = -1; bZoom = true; } WinStat::~WinStat() { } void WinStat::redraw(void) { if( RMGLWin::redrawStart()) return; char ss[200]; glColor3f( 0.0f, 0.0f, 0.0f); glRasterPos2f( 5.0f, 29.0f); if( frameNo != -1) { sprintf( ss, "Frame: %d", frameNo); for (int i = 0; i < (int) strlen(ss); i++) glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, ss[i]); } //sprintf( ss, "Max freq: %.0f %s", lumMax, mappingMode); char szoom[10]; if( bZoom == true) strcpy( szoom, "ZOOM"); else strcpy( szoom, "PAN"); sprintf( ss, " %s %s %s", mappingMode, channel, szoom); for (int i = 0; i < (int) strlen(ss); i++) glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, ss[i]); glRasterPos2f( 5.0f, 17.0f); if( colR >= 0) { sprintf( ss, "screen: %d,%d : %d,%d,%d", pixelX, pixelY, colR, colG, colB); for (int i = 0; i < (int) strlen(ss); i++) glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, ss[i]); } glRasterPos2f( 5.0f, 5.0f); if( rawPosX >=0) { sprintf( ss, "data: %d,%d : %.6f,%.6f,%.6f", rawPosX, rawPosY, rawX, rawY, rawZ); for (int i = 0; i < (int) strlen(ss); i++) glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, ss[i]); } RMGLWin::redrawEnd(); } void WinStat::setPixelData( int x, int y, int r, int g, int b) { pixelX = x; pixelY = y; colR = r; colB = b; colG = g; } void WinStat::setMaxFreq(float val) { lumMax = val; } void WinStat::setMapping(const char* sval) { mappingMode = sval; } void WinStat::setFrameNo(int no) { frameNo = no; } void WinStat::setChannel(const char* ch) { channel = ch; } void WinStat::setRawData( int x, int y, float X, float Y, float Z) { rawPosX = x; rawPosY = y; rawX = X; rawY = Y; rawZ = Z; } void WinStat::setBZoom(bool bb) { bZoom = bb; } pfstools-1.8.5/src/pfsglview/picture_io.h0000775000175000017500000000516511043640746015450 00000000000000#ifndef PICTUREIO_H #define PICTUREIO_H #include #include #define MAX_FRAMES_IN_MEMORY 10 class pfs::Frame; enum LumMappingMethod { MAP_LINEAR, MAP_GAMMA1_4, MAP_GAMMA1_8, MAP_GAMMA2_2, MAP_GAMMA2_6, MAP_LOGARITHMIC, MAP_REINHARD }; static const char* lumMappingName[] = { // must be consistent with LumMappingMethod "Linear", "Gamma 1.4", "Gamma 1.8", "Gamma 2.2", "Gamma 2.6", "Logarithmic", "Photographic" }; class PictureIO { private: pfs::Frame *pfsFrame; int width; int height; const char *currentFileName; const char *visibleChannel; pfs::Array2D *chR, *chG, *chB; std::list frameList; std::list::iterator currentFrame; int frameNo; unsigned char* data; LumMappingMethod imageMappingMethod; float minLuminance, maxLuminance; public: const char* CHANNEL_XYZ; const char* CHANNEL_X; const char* CHANNEL_Y; const char* CHANNEL_Z; PictureIO(LumMappingMethod mappingMethod, float minLuminance, float maxLumuminance); ~PictureIO(); void gotoNextFrame(); void gotoPreviousFrame(); void changeMapping( LumMappingMethod mappingMethod, float minLum, float maxLum); void changeMapping( float minLum, float maxLum); void changeMapping( LumMappingMethod mappingMethod); void changeMapping( void); void setMinLum( float val); void setMaxLum( float val); unsigned char* getImageData( void); void setMappingMethod( LumMappingMethod val); LumMappingMethod getMappingMethod( void); const pfs::Array2D* getPrimaryChannel(); int loadPicture(const char* location, int width, int height); const char *getCurrentFileName(); const char *getVisibleChannel(); void setVisibleChannel(const char *channel); pfs::Frame *getFrame(); void setFrame(pfs::Frame *pfsFrame, const char *channel); int save(void); int getWidth(); int getHeight(); int getPixel(int ch, int c, int r); int getPixelR(int x, int y); int getPixelG(int x, int y); int getPixelB(int x, int y); float getLumMin(void); float getLumMax(void); float computeLumMin(void); float computeLumMax(void); int getFrameNo(void); float getDynamicRange(void); std::vector getChannelNames(); int getRawData( int x, int y, float& XX, float& YY, float& ZZ); private: bool hasColorChannels( pfs::Frame *frame ); void updateMapping( void); inline int binarySearchPixels( float lum, const float *lumMap, const int lumSize); float getInverseMapping( LumMappingMethod mappingMethod, float v, float minValue, float maxValue ); bool readNextFrame(); }; class PFSglViewException { }; #endif pfstools-1.8.5/src/pfsglview/pfsglview.cpp0000775000175000017500000005227010535537345015653 00000000000000/** * @brief PFS library - additional utilities * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2006 Radoslaw Mantiuk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * * */ #include #include #include #include #include #include "glenv.h" #include "picture_io.h" #include "histogram.h" #include "winstat.h" #define PROG_NAME "pfsGLview" GLint win, mainMenu, mappingSubmenu, channelSubmenu, mouse=0; // for holding menu and window ids PictureIO* bitmap; Histogram* histogram; WinStat* winStat; GLboolean firstTime = true; bool verbose = false; enum MenuIds { MENU_SEPARATOR, MENU_NONE, MENU_HISTOGRAM, MENU_MONITOR_LUM, MENU_MAX_LUM, MENU_EXIT, MENU_MAPPING_LINEAR, MENU_MAPPING_LOG, MENU_MAPPING_GAMMA_1_4, MENU_MAPPING_GAMMA_1_8, MENU_MAPPING_GAMMA_2_2, MENU_MAPPING_GAMMA_2_6, MENU_SAVE, MENU_CHANNEL_XYZ, MENU_CHANNEL_X, MENU_CHANNEL_Y, MENU_CHANNEL_Z, MENU_CHANNEL, MENU_INFO, MENU_FRAME_NEXT, MENU_FRAME_PREVIOUS, MENU_HIST_RIGHT, MENU_HIST_LEFT, MENU_HIST_INCREASE, MENU_HIST_DECREASE, MENU_ZOOM_IN, MENU_ZOOM_OUT, MENU_ZOOM_RESET }; #define MENU_CHANNEL_SHIFT 100 #define INIT_MIN_LUM 0.1f #define INIT_MAX_LUM 1.0f #define X_BAR 8 #define Y_BAR 8 #define WINDOW_POS_X 60 #define WINDOW_POS_Y 100 #define WINDOW_SIZE_X 800 #define WINDOW_SIZE_Y 600 #define WINSTAT_WIDTH 300 #define WINSTAT_HEIGHT 45 #define WINSTAT_POS_X 20 #define WINSTAT_POS_Y 10 #define HISTOGRAM_HEIGHT 70 #define HISTOGRAM_WIDTH 400 #define ZOOM_SCALE_MIN 0.1f #define ZOOM_SCALE_MAX 20.0f #define ZOOM_SCALE_STEP 0.005f #define ZOOM_MOVE_STEP 2.0f #define MONITOR_LUM_MIN 0.01f #define MONITOR_LUM_MAX 1.0f #define SLIDER_STEP 5 #define PAN_STEP 10 void resetWindow( int& size1, int& size2); void resetHistogram(void); void loadPicture(); void sliderMoveMax( int shift); void sliderMoveMin( int shift); void setWindowTitle( void); //============================================ struct ZOOM { float scale; float scale_default; int x; int y; int vX, vY, vSizeX, vSizeY; int prevX, prevY; bool pan; } szoom; struct VIEWPORT { GLint xPos,yPos; GLsizei xSize, ySize; } viewport; /** */ void zoomReset(void) { szoom.scale = szoom.scale_default; szoom.x = 0; szoom.y = 0; szoom.prevX = -1; szoom.prevY = -1; szoom.pan = false; } void zoomIncrease(void) { szoom.scale += 0.1f; } void zoomDecrease(void) { szoom.scale -= 0.1f; if(szoom.scale <= 0) szoom.scale = 0.1; } void redrawWinStat(void) { winStat->setMapping( lumMappingName[bitmap->getMappingMethod()]); winStat->setMaxFreq( histogram->getMaxFrequency()); winStat->setFrameNo( bitmap->getFrameNo()); winStat->setChannel( bitmap->getVisibleChannel()); winStat->setPixelData( 0, 0, -1, -1, -1); winStat->setBZoom( !szoom.pan); } void redrawHistogram(void) { histogram->setSliderPosMinMax( histogram->lum2pos(bitmap->getLumMin()) , histogram->lum2pos(bitmap->getLumMax())); } /** Change mapping or redraw after changing luminance range. */ void changeMapping( float lumMin, float lumMax) { // update slider histogram->setSliderPosMinMax( histogram->lum2pos(lumMin), histogram->lum2pos(lumMax)); bitmap->changeMapping( lumMin, lumMax); } void sliderMoveMax( int shift) { histogram->setSliderPosMax( histogram->getSliderPosMax() + (float)shift / histogram->getWidth()); bitmap->setMaxLum( histogram->pos2lum(histogram->getSliderPosMax())); } void sliderMoveMin( int shift) { histogram->setSliderPosMin( histogram->getSliderPosMin() + (float)shift / histogram->getWidth()); bitmap->setMinLum( histogram->pos2lum(histogram->getSliderPosMin())); } /** Main display routine */ void display(void) { glClear(GL_COLOR_BUFFER_BIT); // If the picture was loaded we need to rescale it to window size if(bitmap != NULL) { GLint viewp[4]; glGetIntegerv( GL_VIEWPORT, viewp); glPixelStorei(GL_UNPACK_ALIGNMENT, 4); int winWidth = glutGet(GLUT_WINDOW_WIDTH); int winHeight = glutGet(GLUT_WINDOW_HEIGHT); szoom.vX = (int)(winWidth/2 - ((bitmap->getWidth() - szoom.x) * szoom.scale)/2); szoom.vY = (int)(winHeight/2 + ((bitmap->getHeight() + szoom.y) * szoom.scale)/2 - HISTOGRAM_HEIGHT/2); szoom.vSizeX = (int)(bitmap->getWidth() * szoom.scale); szoom.vSizeY = (int)(bitmap->getHeight() * szoom.scale); glViewport( szoom.vX, szoom.vY, szoom.vSizeX, szoom.vSizeY); glEnable( GL_SCISSOR_TEST); glScissor( X_BAR/2, Y_BAR/2 , winWidth - X_BAR, winHeight - Y_BAR - HISTOGRAM_HEIGHT - Y_BAR/2); glPixelZoom( szoom.scale, -szoom.scale); glRasterPos2i( 0, 0); glDrawPixels(bitmap->getWidth(), bitmap->getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, bitmap->getImageData() ); glViewport( viewp[0], viewp[1], viewp[2], viewp[3]); glDisable( GL_SCISSOR_TEST); } // Histogram drawing (and slider) if(histogram->getFlag() == GL_TRUE) { if(histogram != NULL) { histogram->redraw(); } } winStat->redraw(); glMatrixMode(GL_COLOR); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glFlush(); glutSwapBuffers(); } /** Resizes main window. */ void resizeWindow(int width, int height) { // keep aspect of an input bitmap float ratio = (float)bitmap->getHeight() / (float)bitmap->getWidth(); szoom.scale = 1.0f; // default scale coefficient if( ratio > 1.0f) { // vertical width = (int)((height - Y_BAR - HISTOGRAM_HEIGHT) / ratio); if( width < (HISTOGRAM_WIDTH+X_BAR)) { width = HISTOGRAM_WIDTH+X_BAR; } if( (bitmap->getHeight() + Y_BAR + HISTOGRAM_HEIGHT) > height) szoom.scale = (float)(height - Y_BAR - HISTOGRAM_HEIGHT) / (float)bitmap->getHeight(); } else { // horizontal height = (int)((width + X_BAR) * ratio) + HISTOGRAM_HEIGHT; if( (bitmap->getWidth() + X_BAR) > width) szoom.scale = (float)(width - X_BAR) / (float)bitmap->getWidth(); } szoom.scale_default = szoom.scale; #ifdef __APPLE__ // "Think different" for OS/X :) glutReshapeWindow(width, height); #endif glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0f, width, 0.0f, height, -10.0f, 10.0f); // last 1.0 -1.0 it's enough glMatrixMode(GL_MODELVIEW); viewport.ySize = height; viewport.xSize = width; histogram->setWinPos( X_BAR/2, glutGet(GLUT_WINDOW_HEIGHT) - Y_BAR/2 - histogram->getWinHeight()); glutPostRedisplay(); } /** Menu listener */ void menuListener(int menuId) { int sizeX, sizeY; switch(menuId) { case MENU_ZOOM_IN: zoomIncrease(); break; case MENU_ZOOM_OUT: zoomDecrease(); break; case MENU_ZOOM_RESET: zoomReset(); break; case MENU_HIST_RIGHT: sliderMoveMin( SLIDER_STEP); sliderMoveMax( SLIDER_STEP); bitmap->changeMapping(); break; case MENU_HIST_LEFT: sliderMoveMin( -SLIDER_STEP); sliderMoveMax( -SLIDER_STEP); bitmap->changeMapping(); break; case MENU_HIST_INCREASE: sliderMoveMin( -SLIDER_STEP); sliderMoveMax( SLIDER_STEP); bitmap->changeMapping(); break; case MENU_HIST_DECREASE: sliderMoveMin( SLIDER_STEP); sliderMoveMax( -SLIDER_STEP); bitmap->changeMapping(); break; case MENU_FRAME_NEXT: bitmap->gotoNextFrame(); resetWindow( sizeX, sizeY); setWindowTitle(); resetHistogram(); redrawHistogram(); redrawWinStat(); resizeWindow( sizeX, sizeY); break; case MENU_FRAME_PREVIOUS: bitmap->gotoPreviousFrame(); resetWindow( sizeX, sizeY); setWindowTitle(); resetHistogram(); redrawHistogram(); redrawWinStat(); resizeWindow( sizeX, sizeY); break; case MENU_HISTOGRAM : histogram->setFlag( !histogram->getFlag()); break; case MENU_INFO: winStat->setFlag( !winStat->getFlag()); break; case MENU_MONITOR_LUM : bitmap->changeMapping( MONITOR_LUM_MIN, MONITOR_LUM_MAX); redrawHistogram(); break; case MENU_MAX_LUM : float min, max; min = bitmap->computeLumMin(); max = bitmap->computeLumMax(); bitmap->changeMapping( min, max); redrawHistogram(); break; case MENU_MAPPING_LINEAR: bitmap->changeMapping( MAP_LINEAR); redrawWinStat(); break; case MENU_MAPPING_GAMMA_1_4: bitmap->changeMapping( MAP_GAMMA1_4); redrawWinStat(); break; case MENU_MAPPING_GAMMA_1_8: bitmap->changeMapping( MAP_GAMMA1_8); redrawWinStat(); break; case MENU_MAPPING_GAMMA_2_2: bitmap->changeMapping( MAP_GAMMA2_2); redrawWinStat(); break; case MENU_MAPPING_GAMMA_2_6: bitmap->changeMapping( MAP_GAMMA2_6); redrawWinStat(); break; case MENU_MAPPING_LOG: bitmap->changeMapping( MAP_LOGARITHMIC); redrawWinStat(); break; case MENU_CHANNEL_XYZ: bitmap->setVisibleChannel( bitmap->CHANNEL_XYZ); bitmap->changeMapping(); resetHistogram(); redrawHistogram(); redrawWinStat(); break; case MENU_CHANNEL_X: bitmap->setVisibleChannel( bitmap->CHANNEL_X); bitmap->changeMapping(); resetHistogram(); redrawHistogram(); redrawWinStat(); break; case MENU_CHANNEL_Y: bitmap->setVisibleChannel( bitmap->CHANNEL_Y); bitmap->changeMapping(); resetHistogram(); redrawHistogram(); redrawWinStat(); break; case MENU_CHANNEL_Z: bitmap->setVisibleChannel( bitmap->CHANNEL_Z); bitmap->changeMapping(); resetHistogram(); redrawHistogram(); redrawWinStat(); break; case MENU_SAVE: // save current bitmap data (8-bits RGB) to stdout bitmap->save(); exit(0); break; case MENU_EXIT: exit(0); break; } glutPostRedisplay(); } /** Mouse listener */ int cursorPosX = -1; void mouseListener(int button, int state, int x, int y) { cursorPosX = x; // required for mouse motion listener // trig slider if( histogram->getFlag() == GL_TRUE && button == GLUT_LEFT_BUTTON && state == GLUT_DOWN && histogram->getSliderSelectionState() == NONE) { histogram->processSliderSelection(x, y); } // slider was moved, the bitmap should be recalculated if( histogram->getFlag() == GL_TRUE && button == GLUT_LEFT_BUTTON && state == GLUT_UP && histogram->getSliderSelectionState() != NONE) { bitmap->changeMapping(); histogram->setSliderSelectionState(NONE); } // reset cursor position (for zooming) if(button == GLUT_LEFT_BUTTON && state == GLUT_UP) { szoom.prevX = -1; szoom.prevY = -1; glutSetCursor(GLUT_CURSOR_INHERIT); } if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { if( winStat->processSelection( x, y)) szoom.pan = !szoom.pan; redrawWinStat(); } glutPostRedisplay(); } void mouseMotionListener(int x, int y) { if(histogram->getFlag() == GL_TRUE) // slider { int selectionState = histogram->getSliderSelectionState(); switch(selectionState) { case LEFT_BAR: sliderMoveMin( x - cursorPosX); cursorPosX = x; glutSetCursor(GLUT_CURSOR_LEFT_SIDE); break; case RIGHT_BAR: sliderMoveMax( x - cursorPosX); cursorPosX = x; glutSetCursor(GLUT_CURSOR_RIGHT_SIDE); break; case WHOLE_SLIDER: sliderMoveMin( x - cursorPosX); sliderMoveMax( x - cursorPosX); cursorPosX = x; glutSetCursor(GLUT_CURSOR_LEFT_RIGHT); break; } } // zooming if( y > (HISTOGRAM_HEIGHT + Y_BAR)) { if( szoom.prevX != -1){ if( szoom.pan) { float dd = ZOOM_MOVE_STEP / szoom.scale; szoom.x += (int)((x - szoom.prevX) * dd); szoom.y += (int)((szoom.prevY - y) * dd); } else { float dd = ZOOM_SCALE_STEP * szoom.scale; szoom.scale += ( szoom.prevY - y) * dd; if( szoom.scale < ZOOM_SCALE_MIN) szoom.scale = ZOOM_SCALE_MIN; if( szoom.scale > ZOOM_SCALE_MAX) szoom.scale = ZOOM_SCALE_MAX; } } szoom.prevX = x; szoom.prevY = y; } glutPostRedisplay(); } /** Mouse passive listener. */ void mousePassiveMotionListener(int x, int y) { // show bitmap pixel position and value int xPos, yPos; xPos = x - szoom.vX; yPos = y - (glutGet(GLUT_WINDOW_HEIGHT) - szoom.vY) - 3; int xx = (int)( xPos / szoom.scale); int yy = (int)( yPos / szoom.scale); float X, Y, Z; if(!bitmap->getRawData( xx, yy, X, Y, Z)) winStat->setRawData( xx, yy, X, Y, Z); else winStat->setRawData( -1, 0, 0, 0, 0); // show screen (display) pixel position and value float val; glReadPixels( x, glutGet(GLUT_WINDOW_HEIGHT) - y, 1, 1, GL_RED, GL_FLOAT, &val); int r = (int)(val * 255); glReadPixels( x, glutGet(GLUT_WINDOW_HEIGHT) - y, 1, 1, GL_GREEN, GL_FLOAT, &val); int g = (int)(val * 255); glReadPixels( x, glutGet(GLUT_WINDOW_HEIGHT) - y, 1, 1, GL_BLUE, GL_FLOAT, &val); int b = (int)(val * 255); winStat->setPixelData( x, y, r, g, b); glutPostRedisplay(); } /** Keyboard listener. */ void keyListener(unsigned char key, int x, int y) { int menuFuncId = 0; switch (key) { case '.': menuFuncId = MENU_ZOOM_IN; break; case ',': menuFuncId = MENU_ZOOM_OUT; break; case 'r': case 'R': menuFuncId = MENU_ZOOM_RESET; break; case '=': menuFuncId = MENU_HIST_RIGHT;break; case '-': menuFuncId = MENU_HIST_LEFT; break; case ']': menuFuncId = MENU_HIST_INCREASE; break; case '[': menuFuncId = MENU_HIST_DECREASE; break; case 'h': menuFuncId = MENU_HISTOGRAM; break; case 'i': menuFuncId = MENU_INFO; break; case 12: menuFuncId = MENU_MONITOR_LUM; break; case '\\': menuFuncId = MENU_MAX_LUM; break; case '1': menuFuncId = MENU_MAPPING_GAMMA_1_4; break; case '2': menuFuncId = MENU_MAPPING_GAMMA_1_8; break; case '3': menuFuncId = MENU_MAPPING_GAMMA_2_2; break; case '4': menuFuncId = MENU_MAPPING_GAMMA_2_6; break; case 'L': case 'l': menuFuncId = MENU_MAPPING_LINEAR; break; case 'O': case 'o': menuFuncId = MENU_MAPPING_LOG; break; case 'n': menuFuncId = MENU_FRAME_NEXT; break; case 'p': menuFuncId = MENU_FRAME_PREVIOUS; break; case ' ': szoom.pan = !szoom.pan; redrawWinStat(); szoom.prevX = -1; szoom.prevY = -1; menuFuncId = MENU_NONE; break; case 'q': case 'Q': case 27: exit(0); break; } menuListener(menuFuncId); } void specialKeyListener(int key, int x, int y) { switch (key) { case GLUT_KEY_LEFT : szoom.x += PAN_STEP; glutPostRedisplay(); break; case GLUT_KEY_RIGHT: szoom.x -= PAN_STEP; glutPostRedisplay(); break; case GLUT_KEY_UP: szoom.y -= PAN_STEP; glutPostRedisplay(); break; case GLUT_KEY_DOWN : szoom.y += PAN_STEP; glutPostRedisplay(); break; } //glutPostRedisplay(); } /** Loads the bitmap from disk. Display an error message if it doesn't load... */ void loadPicture() { bitmap = new PictureIO(MAP_GAMMA2_2, INIT_MIN_LUM, INIT_MAX_LUM); } /** */ void resetHistogram(void) { // histogram histogram->resetFrequencyMax(); histogram->computeFrequency(bitmap->getPrimaryChannel()); float min, max; histogram->computeLumRange( min, max); // starting luminance range on the slider (computed based on the histogram shape) // mapping method bitmap->changeMapping( min, max); //bitmap->getDynamicRange(); } /** Adjusting viewport size to image resolution. */ void resetWindow( int& size1, int& size2) { size1 = WINDOW_SIZE_X; size2 = WINDOW_SIZE_Y; if(bitmap->getWidth() == 0) return; float ratio = (float)bitmap->getHeight() / (float)bitmap->getWidth(); if( ratio < 1) { // horizontal if( bitmap->getWidth() > WINDOW_SIZE_X) { size1 = WINDOW_SIZE_X + X_BAR; size2 = (int)(WINDOW_SIZE_X * ratio) + Y_BAR ; } else { if( bitmap->getWidth() < histogram->getBackgroundWidth()) { // scale up size1 = histogram->getBackgroundWidth() + X_BAR; size2 = (int)(histogram->getBackgroundWidth() * ratio) + Y_BAR; } else { size1 = bitmap->getWidth() + X_BAR; size2 = (int)(bitmap->getWidth() * ratio) + Y_BAR; } } } else { // vertical if( bitmap->getHeight() > WINDOW_SIZE_Y) { size1 = (int)(WINDOW_SIZE_Y * 1.0 / ratio) + X_BAR; size2 = WINDOW_SIZE_Y + Y_BAR; } else { float sizeX = bitmap->getHeight() * 1.0 / ratio; if( sizeX < histogram->getBackgroundWidth()) { // scale up size1 = (int)(WINDOW_SIZE_Y * 1.0 / ratio) + X_BAR; size2 = WINDOW_SIZE_Y + Y_BAR; } else { size1 = (int)(bitmap->getHeight() * 1.0 / ratio) + X_BAR; size2 = bitmap->getHeight() + Y_BAR; } } } } /** Changes main window title. */ void setWindowTitle( void) { // set window title char title[2000]; sprintf(title, "PFS GLview v.1.2 %s %dx%d", bitmap->getCurrentFileName(), bitmap->getWidth(), bitmap->getHeight()); glutSetWindowTitle(title); } /** Parses command line. */ int pfsglview( int argc, char* argv[]) { static struct option cmdLineOptions[] = { { "help", no_argument, NULL, 'h' }, { "verbose", no_argument, NULL, 'v' }, { NULL, 0, NULL, 0 } }; int optionIndex = 0; while( 1 ) { int c = getopt_long (argc, argv, "hv", cmdLineOptions, &optionIndex); if( c == -1 ) break; switch( c ) { case 'h': fprintf( stderr, "pfsglview [--verbose] [--help]\nHigh dynamic range image viewer. Use within pfstools pipe (e.g. pfsin image.hdr | pfsglview).\n"); return 1; case 'v': verbose = true; break; } } return 0; } /** Main routine. */ int main( int argc, char* argv[] ) { if( pfsglview( argc, argv )) return 1; loadPicture(); histogram = new Histogram(X_BAR, viewport.ySize-Y_BAR/2, HISTOGRAM_WIDTH, HISTOGRAM_HEIGHT); winStat = new WinStat(); zoomReset(); glutInit(&argc, argv); glutInitWindowPosition( WINDOW_POS_X, WINDOW_POS_Y); //int sizeX, sizeY; //resetWindow( sizeX, sizeY); //glutInitWindowSize( sizeX, sizeY); glutInitWindowSize( WINDOW_SIZE_X, WINDOW_SIZE_Y); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); win = glutCreateWindow("PFS GLview v.1.2.1"); histogram->setWinPos( X_BAR/2, glutGet(GLUT_WINDOW_HEIGHT) - Y_BAR/2 - histogram->getWinHeight()); histogram->setWinSize( HISTOGRAM_WIDTH, HISTOGRAM_HEIGHT); winStat->setWinPos( WINSTAT_POS_X, WINSTAT_POS_Y); winStat->setWinSize( WINSTAT_WIDTH, WINSTAT_HEIGHT); setWindowTitle(); resetHistogram(); // compute histogram for a given image redrawHistogram(); redrawWinStat(); // popup menu mappingSubmenu = glutCreateMenu(menuListener); glutAddMenuEntry("Gamma 1.4 (1)", MENU_MAPPING_GAMMA_1_4); glutAddMenuEntry("Gamma 1.8 (2)", MENU_MAPPING_GAMMA_1_8); glutAddMenuEntry("Gamma 2.2 (3)", MENU_MAPPING_GAMMA_2_2); glutAddMenuEntry("Gamma 2.6 (4)", MENU_MAPPING_GAMMA_2_6); glutAddMenuEntry("Linear (L)", MENU_MAPPING_LINEAR); glutAddMenuEntry("Logarithmic (O)", MENU_MAPPING_LOG); //glutAddMenuEntry("Reinhard", 17); channelSubmenu = glutCreateMenu(menuListener); glutAddMenuEntry("XYZ", MENU_CHANNEL_XYZ); //std::vector vec = bitmap->getChannelNames(); //for(int i = 0; i < vec.size(); i ++) // glutAddMenuEntry(vec[i], MENU_CHANNEL+MENU_CHANNEL_SHIFT+i); glutAddMenuEntry("X", MENU_CHANNEL_X); glutAddMenuEntry("Y", MENU_CHANNEL_Y); glutAddMenuEntry("Z", MENU_CHANNEL_Z); mainMenu = glutCreateMenu(menuListener); glutAddMenuEntry("Zoom reset (r)", MENU_ZOOM_RESET); glutAddMenuEntry("Zoom in (.)", MENU_ZOOM_IN); glutAddMenuEntry("Zoom out (,)", MENU_ZOOM_OUT); glutAddMenuEntry("",MENU_SEPARATOR); glutAddMenuEntry("Increase exposure (=)", MENU_HIST_RIGHT); glutAddMenuEntry("Decrease exposure (-)", MENU_HIST_LEFT); glutAddMenuEntry("Extend dynamic range (])", MENU_HIST_INCREASE); glutAddMenuEntry("Shrink dynamic range ([)", MENU_HIST_DECREASE); glutAddMenuEntry("Low dynamic range (Ctrl-L)", MENU_MONITOR_LUM); glutAddMenuEntry("Fit to dynamic range (\\)", MENU_MAX_LUM); glutAddMenuEntry("",MENU_SEPARATOR); glutAddSubMenu("Choose channel", channelSubmenu); glutAddSubMenu("Mapping method", mappingSubmenu); glutAddMenuEntry("",MENU_SEPARATOR); glutAddMenuEntry("Next frame (n)", MENU_FRAME_NEXT); glutAddMenuEntry("Previous frame (p)", MENU_FRAME_PREVIOUS); glutAddMenuEntry("",MENU_SEPARATOR); glutAddMenuEntry("Histogram (h)", MENU_HISTOGRAM); glutAddMenuEntry("Info (i)", MENU_INFO); glutAddMenuEntry("",MENU_SEPARATOR); glutAddMenuEntry("Save&Quit", MENU_SAVE); glutAddMenuEntry("Quit (Q or Esc)", MENU_EXIT); glutAttachMenu(GLUT_RIGHT_BUTTON); // viewport GLint viewportSize[4]; glGetIntegerv(GL_VIEWPORT, viewportSize); viewport.xPos = viewportSize[0]; viewport.yPos = viewportSize[1]; viewport.xSize = viewportSize[2]; viewport.ySize = viewportSize[3]; // mouse listeners glClearColor(0.3f, 0.3f, 0.3f, 1.0f); glutMouseFunc(mouseListener); glutMotionFunc(mouseMotionListener); glutPassiveMotionFunc( mousePassiveMotionListener); // keyboard listeners glutKeyboardFunc(keyListener); glutSpecialFunc(specialKeyListener); glutDisplayFunc(display); glutReshapeFunc(resizeWindow); glutMainLoop(); return 0; } pfstools-1.8.5/src/pfsglview/glenv.h0000775000175000017500000000043710525160413014406 00000000000000 #ifndef __GLENV_H #define __GLENV_H #ifdef __APPLE__ // "Think different" for OS/X :) #include "GLUT/glut.h" #include "OPENGL/gl.h" #include "OPENGL/glu.h" #include "OPENGL/glext.h" #else #include "GL/glut.h" #include "GL/gl.h" #include "GL/glu.h" #include "GL/glext.h" #endif #endif pfstools-1.8.5/src/pfsglview/picture_io.cpp0000775000175000017500000003257310530315731015777 00000000000000/** * @brief PFS library - additional utilities * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2006 Radoslaw Mantiuk * * 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.1 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 * Lesser 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 * ---------------------------------------------------------------------- * */ #include #include #include #include #include #include #include "picture_io.h" //#define DEBUG #define min(x,y) ( (x)<(y) ? (x) : (y) ) #define max(x,y) ( (x)>(y) ? (x) : (y) ) #define PIXEL_ALIGMENT 4 // number of bytes occupied by one pixel extern bool verbose; inline int clamp( int val, int min, int max) { if( val < min ) return min; if( val > max ) return max; return val; } PictureIO::PictureIO(LumMappingMethod mappingMethod, float minLum, float maxLum) { currentFrame = frameList.end(); visibleChannel = CHANNEL_XYZ; imageMappingMethod = mappingMethod; minLuminance = minLum; maxLuminance = maxLum; pfsFrame = NULL; // current (active) pfsframe frameNo = 0; chR = chG = chB = NULL; CHANNEL_XYZ = "XYZ"; CHANNEL_X = "X"; CHANNEL_Y = "Y"; CHANNEL_Z = "Z"; try { if( !readNextFrame() ) throw PFSglViewException(); else frameNo++; } catch( pfs::Exception ex ) { throw PFSglViewException(); } } PictureIO::~PictureIO() { delete pfsFrame; delete data; delete chR; delete chG; delete chB; } /** */ void PictureIO::setFrame(pfs::Frame *frame, const char *channel) { if( frame == NULL) return; // only XYZ channels are taken into consideration if( channel != "XYZ" && channel != "X00" && channel != "0Y0" && channel != "00Z" ) { if(verbose) fprintf( stderr, "WARNING: wrong channel (PictureIO::setFrame())\n"); return; } if(pfsFrame != frame) { pfsFrame = frame; currentFileName = frame->getTags()->getString("FILE_NAME"); } visibleChannel = channel; pfs::Channel *X, *Y, *Z; pfsFrame->getXYZChannels( X, Y, Z ); if( X == NULL) { if(verbose) fprintf(stderr, "WARNING: No color channel avaible (PictureIO::setFrame())\n"); return; } width = X->getCols(); height = X->getRows(); data = new unsigned char[width*height*PIXEL_ALIGMENT]; chR = new pfs::Array2DImpl( width, height); chG = new pfs::Array2DImpl( width, height); chB = new pfs::Array2DImpl( width, height); pfs::transformColorSpace( pfs::CS_XYZ, X, Y, Z, pfs::CS_RGB, chR, chG, chB); updateMapping(); } void PictureIO::updateMapping( void) { #define LUMSIZE 256 int rows = chR->getRows(); int cols = chR->getCols(); int lumSize = 257+1; // +1 - for lower bound float lumPixFloor[lumSize]; for( int p = 1; p <= LUMSIZE+1; p++ ) { float p_left = ((float)p - 1.f)/255.f; // Should be -1.5f, but we don't want negative nums lumPixFloor[p] = getInverseMapping( imageMappingMethod, p_left, minLuminance, maxLuminance ); } int index = 0; pfs::Array2D* ch = NULL; if( visibleChannel != CHANNEL_XYZ) { if( visibleChannel == CHANNEL_X) ch = chR; else if( visibleChannel == CHANNEL_Y) ch = chG; else if( visibleChannel == CHANNEL_Z) ch = chB; } for( int r = 0; r < rows; r++) for( int c = 0; c < cols; c++) { // Color channels int pr, pg, pb; if( visibleChannel == CHANNEL_XYZ) { pr = binarySearchPixels( (*chR)(c, r), lumPixFloor, lumSize ); pg = binarySearchPixels( (*chG)(c, r), lumPixFloor, lumSize ); pb = binarySearchPixels( (*chB)(c, r), lumPixFloor, lumSize ); pr = clamp( pr, 1, 256 ); pg = clamp( pg, 1, 256 ); pb = clamp( pb, 1, 256 ); } else { pr = binarySearchPixels( (*ch)(c, r), lumPixFloor, lumSize ); pr = clamp( pr, 1, 256 ); pg = pr; pb = pr; } index = r * (cols * PIXEL_ALIGMENT) + c * PIXEL_ALIGMENT; data[index] = pr - 1; data[index + 1] = pg - 1; data[index + 2] = pb - 1; } } /** Changes mapping method. */ void PictureIO::changeMapping( LumMappingMethod mappingMethod, float minLum, float maxLum) { if( imageMappingMethod == mappingMethod && minLum == minLuminance && maxLum == maxLuminance) return; imageMappingMethod = mappingMethod; minLuminance = minLum; maxLuminance = maxLum; updateMapping(); } void PictureIO::changeMapping( LumMappingMethod mappingMethod) { if( imageMappingMethod == mappingMethod) return; imageMappingMethod = mappingMethod; updateMapping(); } void PictureIO::changeMapping( float minLum, float maxLum) { if( minLum == minLuminance && maxLum == maxLuminance) return; minLuminance = minLum; maxLuminance = maxLum; updateMapping(); } void PictureIO::changeMapping( void) { updateMapping(); } /** * Searching for the closest pixel index (m) of a given luminance (lum) in the luminance * mapping table - lumMap. */ inline int PictureIO::binarySearchPixels( float lum, const float *lumMap, const int lumSize ) { int l = 0, r = lumSize; while( true ) { int m = (l+r)/2; if( m == l ) break; if( lum < lumMap[m] ) r = m; else l = m; } return l; } /** * Searching for the closest pixel index (m) of a given luminance (lum) in the luminance * mapping table - lumMap. */ float PictureIO::getInverseMapping( LumMappingMethod mappingMethod, float v, float minValue, float maxValue ) { switch( mappingMethod ) { case MAP_GAMMA1_4: return powf( v, 1.4 )*(maxValue-minValue) + minValue; case MAP_GAMMA1_8: return powf( v, 1.8 )*(maxValue-minValue) + minValue; case MAP_GAMMA2_2: return powf( v, 2.2 )*(maxValue-minValue) + minValue; case MAP_GAMMA2_6: return powf( v, 2.6 )*(maxValue-minValue) + minValue; case MAP_LINEAR: return v*(maxValue-minValue) + minValue; case MAP_LOGARITHMIC: return powf( 10, v * (log10f(maxValue) - log10f(minValue)) + log10f( minValue ) ); default: assert(0); return 0; } } /** * GUI action -> goto next frame * handle error and eof of frame */ void PictureIO::gotoNextFrame() { try { if(readNextFrame()) frameNo++; } catch( pfs::Exception ex ) { // Display message and keep the old frame fprintf(stderr, "pfsGLview error - exiting\n"); exit(-1); } } void PictureIO::gotoPreviousFrame() { currentFrame++; if( currentFrame == frameList.end() ) { currentFrame--; //fprintf(stderr, "No more frames in buffer (buffer holds max 5 frames)\n"); return; } setFrame( *currentFrame, CHANNEL_XYZ); frameNo--; } bool PictureIO::hasColorChannels( pfs::Frame *frame ) { if( frame == NULL ) frame = pfsFrame; assert( frame != NULL ); pfs::Channel *X, *Y, *Z; frame->getXYZChannels( X, Y, Z ); return ( X != NULL ); } const pfs::Array2D* PictureIO::getPrimaryChannel(void) { assert( pfsFrame != NULL ); if( visibleChannel == CHANNEL_XYZ ) { pfs::Channel *X, *Y, *Z; pfsFrame->getXYZChannels( X, Y, Z ); return Y; } else { return pfsFrame->getChannel( visibleChannel ); } } int PictureIO::getWidth() { return width; } int PictureIO::getHeight() { return height; } int PictureIO::getPixel(int ch, int c, int r) { if( c < 0 || c >= width || r < 0 || r >= height) { //fprintf( stderr, "WARNING: pixel position out of range (PictureIO::getPixel())\n"); return -1; } int index = r * (width * PIXEL_ALIGMENT) + c * PIXEL_ALIGMENT; return (int)data[index + ch]; } int PictureIO::getPixelR(int c, int r) { return getPixel(0, c, r); } int PictureIO::getPixelG(int c, int r) { return getPixel(1, c, r); } int PictureIO::getPixelB(int c, int r) { return getPixel(2, c, r); } int PictureIO::getRawData( int x, int y, float& XX, float& YY, float& ZZ) { if( x < 0 || y < 0 || x >=width || y >= height || pfsFrame == NULL) { if(verbose) fprintf( stderr, "WARNING: wrong pixel coordinates (PictureIO::getRawData())\n"); return 1; } pfs::Channel *X, *Y, *Z; pfsFrame->getXYZChannels( X, Y, Z ); if( X == NULL) { if(verbose) fprintf(stderr, "WARNING: No color channel avaible (PictureIO::getRawData())\n"); return 1; } XX = (*X)( x,y); YY = (*Y)( x,y); ZZ = (*Z)( x,y); return 0; } const char *PictureIO::getCurrentFileName() { return currentFileName; } const char *PictureIO::getVisibleChannel() { return visibleChannel; } void PictureIO::setVisibleChannel(const char *channel) { if( channel == CHANNEL_XYZ || channel == CHANNEL_X || channel == CHANNEL_Y || channel == CHANNEL_Z) visibleChannel = channel; else if(verbose) fprintf( stderr, "WARNING: wrong channel name (%s) (PictureIO::setVisibleChannel())\n", channel); } pfs::Frame *PictureIO::getFrame() { return pfsFrame; } /** Saves bitmap data to stdout in pfstools format. */ // gamma correction for MAC #define GAMMA_CORRECTION 1.8f int PictureIO::save(void){ pfs::DOMIO io; pfs::Frame* frame = io.createFrame( width, height); pfs::Channel *X = frame->createChannel( "X"); pfs::Channel *Y = frame->createChannel( "Y"); pfs::Channel *Z = frame->createChannel( "Z"); frame->createXYZChannels( X, Y, Z); for(int j = 0; j < (width * height); j++){ (*X)(j) = powf((float)data[j*PIXEL_ALIGMENT] / 256.0f, GAMMA_CORRECTION); (*Y)(j) = powf((float)data[j*PIXEL_ALIGMENT+ 1] / 256.0f, GAMMA_CORRECTION); (*Z)(j) = powf((float)data[j*PIXEL_ALIGMENT + 2] / 256.0f, GAMMA_CORRECTION); } pfs::transformColorSpace( pfs::CS_RGB, X, Y, Z, pfs::CS_XYZ, X, Y, Z ); io.writeFrame( frame, stdout ); io.freeFrame( frame ); return 0; } /** Returns minimum luminance. */ float PictureIO::computeLumMin(void) { float valMin = 1e30; const pfs::Array2D* image = getPrimaryChannel(); const int size = image->getRows()*image->getCols(); for( int i = 0; i < size; i++ ) { float val = (*image)(i); if( val < valMin) valMin = val; } return valMin; } /** Returns maximum luminance. */ float PictureIO::computeLumMax(void) { float valMax = -1e30; const pfs::Array2D* image = getPrimaryChannel(); const int size = image->getRows()*image->getCols(); for( int i = 0; i < size; i++ ) { float val = (*image)(i); if( val > valMax) valMax = val; } return valMax; } /** Returns maximum luminance. */ float PictureIO::getLumMax(void) { return maxLuminance; } float PictureIO::getLumMin(void) { return minLuminance; } /** * Load next frame from the stream. * @return false if there are no more frames */ bool PictureIO::readNextFrame() { if( currentFrame != frameList.begin() ) { currentFrame--; setFrame( *currentFrame, "XYZ" ); return true; } if( frameList.size() == MAX_FRAMES_IN_MEMORY ) { #ifdef DEBUG fprintf(stderr, "No memory for the next frame.\n"); #endif return false; } pfs::DOMIO pfsCtx; pfs::Frame *newFrame; #ifdef DEBUG fprintf(stderr, "Reading PFS Frame\n"); #endif newFrame = pfsCtx.readFrame( stdin ); if( newFrame == NULL ) { #ifdef DEBUG fprintf(stderr, "No more frames\n"); #endif return false; // No more frames } frameList.push_front( newFrame ); currentFrame = frameList.begin(); setFrame( newFrame, "XYZ" ); #ifdef DEBUG fprintf(stderr, "Number of frames: %d\n", frameList.size()); #endif return true; } /** Returns current frame number. */ int PictureIO::getFrameNo(void) { return frameNo; } /** */ float PictureIO::getDynamicRange(void) { float valMin = computeLumMin(); float valMax = computeLumMax(); unsigned int max = (unsigned int)pow( 2, 32); printf(" lumMax:%f lumMin:%f max:%d dr:%f\n", valMax, valMin, max, log10(valMax/valMin)); const pfs::Array2D* image = getPrimaryChannel(); int size = image->getRows() * image->getCols(); float fval; unsigned int val; std::vector vec; for( int i = 0; i < size; i++ ) { fval = (*image)(i); fval /= valMax; val = (unsigned int)(fval * max); vec.push_back(val); } std::sort(vec.begin(), vec.end()); printf("size: %d\n", vec.size()); val = vec[0]; std::vector svec; svec.push_back(val); for( int i = 1; i < vec.size(); i++) { if( vec[i] != val) { svec.push_back(vec[i]); val = vec[i]; } } float dr = svec[ svec.size()-1] / svec[0]; printf("min:%ld max:%ld svec size: %d dr:%f\n", vec[0], vec[ vec.size()-1], svec.size(), log10(dr)); return valMax; } /** */ std::vector PictureIO::getChannelNames() { std::vector vec; if( pfsFrame == NULL) return vec; pfs::ChannelIterator *it = pfsFrame->getChannels(); while(it->hasNext() ) vec.push_back( it->getNext()->getName()); return vec; } /** */ void PictureIO::setMinLum( float val) { minLuminance = val; } /** */ void PictureIO::setMaxLum( float val) { maxLuminance = val; } /** */ void PictureIO::setMappingMethod( LumMappingMethod val) { imageMappingMethod = val; } /** */ LumMappingMethod PictureIO::getMappingMethod( void) { return imageMappingMethod; } /** */ unsigned char* PictureIO::getImageData( void) { return data; } pfstools-1.8.5/src/pfsglview/Makefile.am0000664000175000017500000000046111010121657015145 00000000000000### bin_PROGRAMS = pfsglview man_MANS = pfsglview.1 EXTRA_DIST = $(man_MANS) pfsglview_SOURCES = pfsglview.cpp histogram.cpp histogram.h picture_io.cpp picture_io.h rmglwin.cpp rmglwin.h winstat.cpp winstat.h glenv.h LIBS += ../pfs/libpfs-1.2.la $(GL_LIBS) INCLUDES = -I${srcdir}/../pfs $(GL_CFLAGS) pfstools-1.8.5/src/pfsglview/Makefile.in0000644000175000017500000005133111652214376015173 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = pfsglview$(EXEEXT) subdir = src/pfsglview DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" PROGRAMS = $(bin_PROGRAMS) am_pfsglview_OBJECTS = pfsglview.$(OBJEXT) histogram.$(OBJEXT) \ picture_io.$(OBJEXT) rmglwin.$(OBJEXT) winstat.$(OBJEXT) pfsglview_OBJECTS = $(am_pfsglview_OBJECTS) pfsglview_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(pfsglview_SOURCES) DIST_SOURCES = $(pfsglview_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ ../pfs/libpfs-1.2.la $(GL_LIBS) LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = pfsglview.1 EXTRA_DIST = $(man_MANS) pfsglview_SOURCES = pfsglview.cpp histogram.cpp histogram.h picture_io.cpp picture_io.h rmglwin.cpp rmglwin.h winstat.cpp winstat.h glenv.h INCLUDES = -I${srcdir}/../pfs $(GL_CFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/pfsglview/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/pfsglview/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pfsglview$(EXEEXT): $(pfsglview_OBJECTS) $(pfsglview_DEPENDENCIES) @rm -f pfsglview$(EXEEXT) $(CXXLINK) $(pfsglview_OBJECTS) $(pfsglview_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/histogram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfsglview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/picture_io.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmglwin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/winstat.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-man \ uninstall-man1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/src/octave/0002755000175000017500000000000011652214415012452 500000000000000pfstools-1.8.5/src/octave/pfsopen_help.h0000664000175000017500000000270611406633326015235 00000000000000 "Open pfs stream for reading or writing. pfs is an interchange format for high dynamic range images (see http://pfstools.sourceforge.net).\n" "\n" "usage: pfs_struct = pfsopen( fileName );\n" " pfs_struct = pfsopen( fileName, rows, columns );\n" " pfs_struct = pfsopen( fileName, [ rows columns ] );\n" " \n" " fileName - name of the file to read or write. \"stdin\" or \"stdout\" for standard input and output\n" " rows - height of images to write\n" " columns - width of images to write\n" "\n" "The first usage of pfsopen opens pfs stream for reading; the second and third for writing. Use pfsget or pfsput to read or write frames or single images. You must close pfs stream with pfsclose. The stream will not be closed when pfs_struct is deleted (for example with 'clear pfs_struct').\n" "\n" "pfs_struct is a structure that contains the following fields:\n" " EOF - set to 1 if there are no more frames; 0 otherwise\n" " FH - file handle of the file. For internal pruposes, do not use\n" " MODE - file open mode: R - for reading, W - for writing\n" " columns, rows - dimensions of each channel in the stream\n" " channels - structure that contains channels represented as real matrices\n" " tags - structure that contains tags represented as strings\n" " channelTags - structure that contains a structure for each channel, which contains tags. The format of the latter structure is the same as for 'tags' field.\n" " \n" ; pfstools-1.8.5/src/octave/pfsread_help.h0000664000175000017500000000113211406633316015176 00000000000000 "DEPRECIATED! Use pfsopen/pfsget/pfsclose instead\n" "Read selected PFS channels from stdin.\n" "\n" "usage: [C1 C2 ...] = pfsread( fileName, c1n, c2n, ...);\n" " fileName - name of the file to read, or \"stdin\" for standard input\n" " c1n - name of the first channel\n" " c2n - name of the second channel\n" " C1 - matrix with the first channel\n" " C2 - matrix with the second channel\n" " \n" "Channel names are case sensitive\n" "\n" "Returns \"EOF\" strings instead of matrices if there are no more frames. Note the function can read multiple frames only from the stdin\n" ; pfstools-1.8.5/src/octave/pfsget.cpp0000664000175000017500000001174410254027366014401 00000000000000/** * @brief Read frame from pfs stream in GNU Octave * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsget.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include //#include "../../config.h" // conflicts with config.h from octave distribution #include #include #define SCRIPT_NAME "pfsget" static const char *helpString = #include "pfsget_help.h" DEFUN_DLD( pfsget, args, , helpString) { octave_value_list retval; int nargin = args.length(); if( nargin != 1 || !args(0).is_map() ) { error( SCRIPT_NAME ": Improper usage!"); return retval; } Octave_map pfsStream = args(0).map_value(); Octave_map::const_iterator itFH = pfsStream.seek( "FH" ); if( itFH == pfsStream.end() || !pfsStream.contents( itFH )(0).is_real_scalar() ) { error( SCRIPT_NAME ": FH field missing in the structure or it has wrong type"); return retval; } FILE *fh = (FILE*)((long)(pfsStream.contents( itFH )(0).double_value())); Octave_map::const_iterator itMode = pfsStream.seek( "MODE" ); if( itMode == pfsStream.end() || !pfsStream.contents( itMode )(0).is_string() ) { error( SCRIPT_NAME ": MODE field missing in the structure or it has wrong type"); return retval; } if( pfsStream.contents( itMode )(0).string_value() != "R" ) { error( SCRIPT_NAME ": Can not read from stream open for writing." ); return retval; } pfsStream.del( "channels" ); pfsStream.del( "tags" ); pfsStream.del( "channelTags" ); try { pfs::DOMIO ctx; pfs::Frame *frame = ctx.readFrame( fh ); if( frame == NULL ) { // No more frames pfsStream.assign( "EOF", octave_value(true) ); } else { // Not EOF // Set width and height { pfsStream.assign( "columns", octave_value(frame->getWidth()) ); pfsStream.assign( "rows", octave_value(frame->getHeight()) ); } // Add channels as matrices to pfs stream struct { Octave_map channels; pfs::ChannelIteratorPtr cit( frame->getChannelIterator() ); while( cit->hasNext() ) { pfs::Channel *ch = cit->getNext(); Matrix mat( ch->getRows(), ch->getCols() ); int index = 0; for( int r = 0; r < ch->getRows(); r++ ) // Copy channel data to Octave matrix for( int c = 0; c < ch->getCols(); c++ ) { mat(r,c) = (*ch)(index++); } channels.assign( ch->getName(), mat ); } pfsStream.assign( "channels", channels ); } //Add tags { Octave_map tags; pfs::TagIteratorPtr it( frame->getTags()->getIterator() ); while( it->hasNext() ) { const char *tagName = it->getNext(); tags.assign( tagName, octave_value( frame->getTags()->getString( tagName )) ); } pfsStream.assign( "tags", tags ); Octave_map channelTagList; //Copy all channel tags pfs::ChannelIteratorPtr cit( frame->getChannelIterator() ); while( cit->hasNext() ) { pfs::Channel *ch = cit->getNext(); Octave_map channelTags; pfs::TagIteratorPtr tit( ch->getTags()->getIterator() ); while( tit->hasNext() ) { const char *tagName = tit->getNext(); channelTags.assign( tagName, octave_value(ch->getTags()->getString( tagName )) ); } channelTagList.assign( ch->getName(), channelTags ); } pfsStream.assign( "channelTags", channelTagList ); } } ctx.freeFrame( frame ); } catch( pfs::Exception ex ) { char error_message[100]; sprintf( error_message, "%s: %s", SCRIPT_NAME, ex.getMessage() ); error( error_message ); } // if( fh != stdin ) fclose( fh ); retval.append(pfsStream); return retval; } pfstools-1.8.5/src/octave/pfsview_rgb.m0000664000175000017500000000215410254027366015073 00000000000000function pfsview_rgb( R, G, B, window_min, window_max ) ## Shows high-dynamic range RGB image using pfsview ## ## Usage: pfsview( R, G, B[, min, max] ) ## R, G, B - red, green and blue color channels, given as linear ## window_min - minimum luminance to show (in log10 units) ## window_max - maksimum luminance to show (in log10 units) ## response function if( !is_matrix(R) || !is_matrix(G) || !is_matrix(B) || \ any(size(R) != size(G)) || any(size(G) != size(B)) ) error( "pfsview_rgb: matrices of the equal size expected as an arguments" ); endif [X Y Z] = pfstransform_colorspace( "RGB", R, G, B, "XYZ" ); hdr_name = tmpnam(); pfswrite( hdr_name, "X", X, "Y", Y, "Z", Z ); rm = sprintf ("rm -f %s", hdr_name); if( exist( "window_min" ) && exist( "window_max" ) ) minmax_window = sprintf( "--window_min %g --window_max %g ", \ window_min, window_max ); else minmax_window = ""; endif pfsv = sprintf ("pfsview %s <%s", minmax_window, hdr_name); system (sprintf ("( %s && %s ) > /dev/null 2>&1 &", pfsv, rm)); endfunction pfstools-1.8.5/src/octave/pfsclose.help0000664000175000017500000000021510254027366015064 00000000000000Close pfs stream. See also help for pfsopen function. usage: pfsclose( pfs_struct ); pfs_struct - structure returned by pfsopen or pfsget pfstools-1.8.5/src/octave/pfs_close_frames.m0000664000175000017500000000057110437060322016061 00000000000000function pfs_close_frames( pfs_struct ) ## Close pfs stream opened with pfs_open_frames. Removes all temporary ## files. ## ## usage: pfs_close_frames( pfs_struct ) ## if( !isfield( pfs_struct, "fid" ) ) error( "pfs_close_frames: pfs_struct wasn't opened with pfs_open_frames\n" ); endif pfsclose( pfs_struct ); fclose( pfs_struct.fid ); endfunction pfstools-1.8.5/src/octave/pfsstat.10000664000175000017500000000271110406235134014136 00000000000000.TH "pfsstat" 1 .SH NAME pfsstat \- Show frame / image statistics .SH SYNOPSIS .B pfsstat .SH DESCRIPTION This command will show a short text statistic on each image in the pfs stream. In the statistics you can find: .TP \fBFile\fR - name of the input file .TP \fBWidth, Height\fR - image dimensions .TP \fBMinimum\fR - minimum luminance of an image(*), given in linear units (relative luminance in cd/m^2) and logarithmic units .TP \fBMaximum\fR - maximum luminance of an image(*) .TP \fBAverage\fR - average luminance of an image(*) .TP \fBMean\fR - mean luminance of an image(*) .PP (*) Before min, max, average, median and dynamic range is computed, the following processing is performed on an image: 1) negative and zero values are replaced with the smallest positive value (to compute logarithms); 2) the image is low-pass filtered. The low-pass filtering removes few very dark or very bright pixels that can significantly influence estimation of the dynamic range. The percentile, instead of a low-pass filter, is sometimes used for the same purpose. However, a low-pass filter is preferred to the percentile in pfstools since, taking into account the processing that is happening in the human visual system, low-frequency band filter is more plausible. .PP Note: This command requires GNU Octave. .SH EXAMPLES .TP pfsin memorial.hdr | pfsstat .PP Show statistics for the memorial image. .SH BUGS Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/octave/pfsstat0000775000175000017500000000633710333663564014025 00000000000000#!/usr/bin/octave -q # # This file is a part of PFSTOOLS package. # ---------------------------------------------------------------------- # Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk # # 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 # ---------------------------------------------------------------------- # # @author Rafal Mantiuk, # # $Id: pfsstat,v 1.2 2005/11/07 14:40:52 rafm Exp $ # # See man page for more information pin = pfsopen( "stdin" ); #fprintf( stderr, "l = %d\n", length( argv ) ); if( length( argv ) != 0 ) error( "Expecting no parameters" ); endif firstFrame = true; while( true ) pin = pfsget( pin ); if( pin.EOF == true ) # Are there any more frames break; endif ## Low pass filter to eliminate influence of high frequencies on ## the statistic kernel = gausswin( 30, 2.2 ); ##*gausswin( 30, 2.2 )'; kernel = kernel / sum( kernel(:) ); ## Separate filtering for rows and cols fy = conv2( pin.channels.Y, kernel, 'same' ); fy = conv2( fy, kernel', 'same' ); ## Remove zero and negative values - set them to smalles possitive value min_positive = min( vec( fy + (fy<=0)*1000 ) ); fy = fy .* (fy >= min_positive) + min_positive .* (fy < min_positive); ## Work in log domain lfy = log10(fy); ## Calculate statistics minimum = min( vec( lfy ) ); maximum = max( vec( lfy ) ); dynamic_range = maximum - minimum; s_average = mean( vec( lfy ) ); s_median = median( vec( lfy ) ); if( !firstFrame ) fprintf( stderr, "======================\n" ); endif if( isfield( pin.tags, "FILE_NAME" ) ) fprintf( stderr, "File: %s\n", pin.tags.FILE_NAME ); endif if( isfield( pin.tags, "LUMINANCE" ) ) fprintf( stderr, "Luminance profile: %s\n", pin.tags.LUMINANCE ); endif fprintf( stderr, "Width: %d Height: %d\n", pin.columns, pin.rows ); fprintf( stderr, "Dynamic Range: \t%g [log_10]\t 1:%g [lin]\t %g [dB]\n", \ dynamic_range, 10^dynamic_range, \ round(20*dynamic_range) ); fprintf( stderr, "Minimum: \t%g [log_10]\t %g [lin]\n", \ minimum, 10^minimum ); fprintf( stderr, "Maximum: \t%g [log_10]\t %g [lin]\n", \ maximum, 10^maximum ); fprintf( stderr, "Log average: \t%g [log_10]\t %g [lin]\n", \ s_average, 10^s_average ); fprintf( stderr, "Median: \t%g [log_10]\t %g [lin]\n", \ s_median, 10^s_median ); firstFrame = false; endwhile pfsclose( pin ); pfstools-1.8.5/src/octave/pfsoctavergb.10000664000175000017500000000152210406235134015136 00000000000000.TH "pfsoctavergb" 1 .SH NAME pfsoctavergb \- Process red, green and blue channels in pfs stream using Octave .SH SYNOPSIS .B pfsoctavergb .SH DESCRIPTION Use this command to execute a GNU Octave program on red, green and blue channels of each frame in the pfs stream. \fIoctave_program\fR must be given in quotation marks ("") and must not produce any output (it can output to stderr, not to stdout). Red, green and blue color channels are available in \fIoctave_program\fR as \fBR\fR, \fBG\fR and \fBB\fR matrices. .PP Note: This command requires GNU Octave. .SH EXAMPLES .TP pfsinrgbe frames_%04d.hdr | pfsoctavergb "R = R.^2; G = G.^2; B = B.^2;" | pfsview .PP Expand the dynamic range of a sequence of frames and show the result with pfsview. .SH BUGS Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/octave/pfsopen.help0000664000175000017500000000253310254027366014725 00000000000000Open pfs stream for reading or writing. pfs is an interchange format for high dynamic range images (see http://pfstools.sourceforge.net). usage: pfs_struct = pfsopen( fileName ); pfs_struct = pfsopen( fileName, rows, columns ); pfs_struct = pfsopen( fileName, [ rows columns ] ); fileName - name of the file to read or write. \"stdin\" or \"stdout\" for standard input and output rows - height of images to write columns - width of images to write The first usage of pfsopen opens pfs stream for reading; the second and third for writing. Use pfsget or pfsput to read or write frames or single images. You must close pfs stream with pfsclose. The stream will not be closed when pfs_struct is deleted (for example with 'clear pfs_struct'). pfs_struct is a structure that contains the following fields: EOF - set to 1 if there are no more frames; 0 otherwise FH - file handle of the file. For internal pruposes, do not use MODE - file open mode: R - for reading, W - for writing columns, rows - dimensions of each channel in the stream channels - structure that contains channels represented as real matrices tags - structure that contains tags represented as strings channelTags - structure that contains a structure for each channel, which contains tags. The format of the latter structure is the same as for 'tags' field. pfstools-1.8.5/src/octave/pfs_open_frames.m0000664000175000017500000000265510437060322015722 00000000000000function pfs_struct = pfs_open_frames( filePattern, frameSize ) ## Open frames / image in one of the suppoted formats for reading or ## writing. Reading or writting frames is donw with pfsput or pfsget. ## ## usage: pfs_struct = pfs_open_frames( filePattern, size ) ## pfs_struct = pfs_open_frames( filePattern ) ## ## This command is equivalent to pfsopen, but can handle files in any ## format supported by pfstools. 'filePattern' can specify files, ## frames, including '--frames' and '--skip-missing', similarly as ## 'pfsin' / 'pfsout' commands. You can pass also additional options, ## like --compression=RLE for exr files in filePattern. ## All option that take an argument (except --frames) must given in ## the form --option=value, that is without a space between an ## option and its argument. ## ## pfs_close_frames should be used instead of pfs_close to close pfsstream. ## doWrite = exist( "frameSize" ); try if( doWrite ) execStr = sprintf( "pfsout %s", filePattern ); fid = popen( execStr, "w" ); pfs_struct = pfsopen( fid, frameSize ); pfs_struct.fid = fid; else execStr = sprintf( "pfsin %s", filePattern ); fid = popen( execStr, "r" ); pfs_struct = pfsopen( fid ); pfs_struct.fid = fid; endif catch fclose( pfs_struct.fid ); error( [ "pfs_open_frames: " __error_text__ ] ); end_try_catch endfunction pfstools-1.8.5/src/octave/pfsread.help0000664000175000017500000000102710254027366014674 00000000000000DEPRECIATED! Use pfsopen/pfsget/pfsclose instead Read selected PFS channels from stdin. usage: [C1 C2 ...] = pfsread( fileName, c1n, c2n, ...); fileName - name of the file to read, or \"stdin\" for standard input c1n - name of the first channel c2n - name of the second channel C1 - matrix with the first channel C2 - matrix with the second channel Channel names are case sensitive Returns \"EOF\" strings instead of matrices if there are no more frames. Note the function can read multiple frames only from the stdin pfstools-1.8.5/src/octave/pfs_write_rgb.m0000664000175000017500000000127410437060322015404 00000000000000function pfs_write_rgb( fileName, R, G, B ) ## Write an hdr image file (formats accepted by pfsout). You can ## specify additional options in fileName, such as ## "--compression=PXR24" for OpenEXR files. Check manual pages of ## pfsout* commands for the list of available options. ## ## pfs_write_rgb( fileName, R, G, B ) unwind_protect fid = popen( sprintf( "pfsout %s", fileName ), "w" ); pfs = pfsopen( fid, size( R ) ); [pfs.channels.X pfs.channels.Y pfs.channels.Z] = \ pfstransform_colorspace( "RGB", R, G, B, "XYZ" ); pfsput( pfs ); unwind_protect_cleanup pfsclose( pfs ); fclose( fid ); end_unwind_protect endfunction pfstools-1.8.5/src/octave/pfstransform_colorspace.help0000664000175000017500000000066310254027366020213 00000000000000Tranform between color spaces using pfs library. usage: [C1 C2 C2] = pfstranform_colorspace( inCSname, c1, c2, c3, outCSname ); inCSname - name of the input color space c - matrix with n-th channel of input color space C - matrix with n-th channel of output color space outCSname - name of the output color space Recognized color space names: 'XYZ', 'RGB', 'sRGB', 'YUV', 'Yxy'. Color space names are case insensitive. pfstools-1.8.5/src/octave/pfs_read_luminance.m0000664000175000017500000000117010437060322016361 00000000000000function Y = pfs_read_luminance( fileName ) ## Read hdr image file (formats accepted by pfsin) and return ## luminance channel Y. ## ## Y = hdr_read_luminance( fileName ) ## Check if file exists fid = fopen( fileName, "rb" ); if( fid == -1 ) error( sprintf( "pfs_read_luminance: File '%s' does not exist", fileName ) ); endif fclose( fid ); unwind_protect fid = popen( sprintf( "pfsin %s", fileName ), "r" ); pin = pfsopen( fid ); pin = pfsget( pin ); Y = pin.channels.Y; unwind_protect_cleanup pfsclose( pin ); fclose( fid ); end_unwind_protect endfunction pfstools-1.8.5/src/octave/pfs_read_xyz.m0000664000175000017500000000123310437060322015240 00000000000000function [X Y Z] = pfs_read_xyz( fileName ) ## Read hdr image file (formats accepted by pfsin) and return X, Y, ## and Z color channels. ## ## [X Y Z] = hdr_read_rgb( fileName ) ## Check if file exists fid = fopen( fileName, "rb" ); if( fid == -1 ) error( sprintf( "pfs_read_xyz: File '%s' does not exist", fileName ) ); endif fclose( fid ); unwind_protect fid = popen( sprintf( "pfsin %s", fileName ), "r" ); pin = pfsopen( fid ); pin = pfsget( pin ); X = pin.channels.X; Y = pin.channels.Y; Z = pin.channels.Z; unwind_protect_cleanup pfsclose( pin ); fclose( fid ); end_unwind_protect pfstools-1.8.5/src/octave/pfswrite.cpp0000664000175000017500000000720010254027366014744 00000000000000/** * @brief GNU Octave wrapper - write matrices as channels to the PFS stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfswrite.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include #define SCRIPT_NAME "pfswrite" static const char *helpString = #include "pfswrite_help.h" DEFUN_DLD( pfswrite, args, , helpString) { octave_value_list retval; int nargin = args.length(); if( nargin < 3 ) { error( SCRIPT_NAME ": Improper usage!"); return retval; } // Check params if( !args(0).is_string() ) { error( SCRIPT_NAME ": expected file name as the first argument!"); return retval; } for( int i = 1; i < nargin; i += 2 ) if( (i+1) >= nargin || !args(i).is_string() || !args(i+1).is_real_matrix() ) { error( SCRIPT_NAME ": expected (channelName, matrix) pair argument!"); return retval; } FILE *fh; const char *fileName = args(0).string_value().c_str(); if( !strcasecmp( "stdout", fileName ) ) fh = stdout; else { fh = fopen( fileName, "ab" ); if( fh == NULL ) { error( SCRIPT_NAME ": cannot open file for writting!"); return retval; } } try { pfs::DOMIO ctx; pfs::Frame *frame = NULL; int rows, cols; for( int i = 1; i < nargin; i += 2 ) { Matrix mat(args(i+1).matrix_value()); if( frame == NULL ) { // Fist channel frame = ctx.createFrame(mat.cols(), mat.rows()); rows = mat.rows(); cols = mat.cols(); } else if( mat.rows() != rows || mat.cols() != cols ) { // If size of this and the first channel differ error( SCRIPT_NAME ": all matrices must be of the same size"); continue; } const char *channelName = args(i).string_value().c_str(); pfs::Channel *channel = frame->createChannel( channelName ); int index = 0; for( int r = 0; r < channel->getRows(); r++ ) // Copy octave matrix to channel for( int c = 0; c < channel->getCols(); c++ ) { (*channel)(index++) = mat(r,c); } } ctx.writeFrame( frame, fh ); ctx.freeFrame( frame ); } catch( pfs::Exception ex ) { char error_message[100]; sprintf( error_message, "%s: %s", SCRIPT_NAME, ex.getMessage() ); error( error_message ); } if( fh != stdout ) fclose( fh ); return retval; } pfstools-1.8.5/src/octave/pfsput.cpp0000664000175000017500000001611310410220335014406 00000000000000/** * @brief Write frame to pfs stream in GNU Octave * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsput.cpp,v 1.2 2006/03/22 10:03:09 rafm Exp $ */ #include #include #include #include //#include "../../config.h" // conflicts with config.h from octave distribution #include #include #define SCRIPT_NAME "pfsput" static const char *helpString = #include "pfsput_help.h" DEFUN_DLD( pfsput, args, , helpString) { octave_value_list retval; int nargin = args.length(); if( nargin != 1 || !args(0).is_map() ) { error( SCRIPT_NAME ": Improper usage!"); return retval; } Octave_map pfsStream = args(0).map_value(); Octave_map::const_iterator itFH = pfsStream.seek( "FH" ); if( itFH == pfsStream.end() || !pfsStream.contents( itFH )(0).is_real_scalar() ) { error( SCRIPT_NAME ": FH field missing in the structure or it has wrong type"); return retval; } FILE *fh = (FILE*)((long)(pfsStream.contents( itFH )(0).double_value())); // Check mode { Octave_map::const_iterator itMode = pfsStream.seek( "MODE" ); if( itMode == pfsStream.end() || !pfsStream.contents( itMode )(0).is_string() ) { error( SCRIPT_NAME ": MODE field missing in the structure or it has wrong type"); return retval; } if( pfsStream.contents( itMode )(0).string_value() != "W" ) { error( SCRIPT_NAME ": Can not write to the stream that is open for reading." ); return retval; } } // Get width & height int width, height; { Octave_map::const_iterator itCols = pfsStream.seek( "columns" ); Octave_map::const_iterator itRows = pfsStream.seek( "rows" ); if( itCols == pfsStream.end() || itRows == pfsStream.end() || !pfsStream.contents( itCols )(0).is_real_scalar() || !pfsStream.contents( itRows )(0).is_real_scalar() ) { error( SCRIPT_NAME ": 'rows' and 'columns' fields missing in the structure or it have wrong type"); return retval; } width = (int)pfsStream.contents( itCols )(0).double_value(); height = (int)pfsStream.contents( itRows )(0).double_value(); } // Get channels Octave_map channels; { Octave_map::const_iterator itChannels = pfsStream.seek( "channels" ); if( itChannels == pfsStream.end() || !pfsStream.contents( itChannels )(0).is_map() ) { error( SCRIPT_NAME ": 'channels' field missing in the structure or it has wrong type"); return retval; } channels = pfsStream.contents( itChannels )(0).map_value(); } try { pfs::DOMIO ctx; pfs::Frame *frame = ctx.createFrame( width, height ); // For each channel in the 'channels' map for( Octave_map::iterator itCh = channels.begin(); itCh != channels.end(); itCh++ ) { std::string channelName = channels.key(itCh); if( !channels.contents( itCh )(0).is_real_matrix() ) { throw pfs::Exception( "all channels must be given as real matrices" ); } Matrix channelData = channels.contents( itCh )(0).matrix_value(); if( channelData.rows() != height || channelData.columns() != width ) { throw pfs::Exception( "size of the channel must be the same as given in pfsopen" ); } pfs::Channel *pfsChannel = frame->createChannel( channelName.c_str() ); // Copy matrix to pfs::Channel int index = 0; for( int r = 0; r < pfsChannel->getRows(); r++ ) for( int c = 0; c < pfsChannel->getCols(); c++ ) { (*pfsChannel)(index++) = channelData(r,c); } } // Copy frame tags { Octave_map::const_iterator itTags = pfsStream.seek( "tags" ); if( itTags != pfsStream.end() ) { if( !pfsStream.contents( itTags )(0).is_map() ) { throw pfs::Exception( "'tags' field must be a structure" ); } Octave_map tags = pfsStream.contents( itTags )(0).map_value(); for( Octave_map::iterator itTag = tags.begin(); itTag != tags.end(); itTag++ ) { std::string tagName = tags.key(itTag); if( !tags.contents( itTag )(0).is_string() ) throw pfs::Exception( "all tags must be given as strings" ); std::string tagValue = tags.contents( itTag )(0).string_value(); frame->getTags()->setString( tagName.c_str(), tagValue.c_str() ); } } } // Copy channel tags { Octave_map::const_iterator itChTags = pfsStream.seek( "channelTags" ); if( itChTags != pfsStream.end() ) { if( !pfsStream.contents( itChTags )(0).is_map() ) { throw pfs::Exception( "'channelTags' field must be a structure" ); } Octave_map tagChannels = pfsStream.contents( itChTags )(0).map_value(); for( Octave_map::iterator itCh = tagChannels.begin(); itCh != tagChannels.end(); itCh++ ) { std::string channelName = tagChannels.key(itCh); if( !tagChannels.contents( itCh )(0).is_map() ) { throw pfs::Exception( "each channelTags file must be a structure" ); } pfs::Channel *pfsChannel = frame->getChannel( channelName.c_str() ); if( pfsChannel == NULL ) { throw pfs::Exception( "can not set channel tag if channel is missing" ); } Octave_map tags = tagChannels.contents( itCh )(0).map_value(); for( Octave_map::iterator itTag = tags.begin(); itTag != tags.end(); itTag++ ) { std::string tagName = tags.key(itTag); if( !tags.contents( itTag )(0).is_string() ) throw pfs::Exception( "all channel tags must be given as strings" ); std::string tagValue = tags.contents( itTag )(0).string_value(); pfsChannel->getTags()->setString( tagName.c_str(), tagValue.c_str() ); } } } } ctx.writeFrame( frame, fh ); ctx.freeFrame( frame ); } catch( pfs::Exception ex ) { char error_message[100]; sprintf( error_message, "%s: %s", SCRIPT_NAME, ex.getMessage() ); error( error_message ); } return retval; } pfstools-1.8.5/src/octave/pfstransform_colorspace_help.h0000664000175000017500000000074711406633323020521 00000000000000 "Tranform between color spaces using pfs library.\n" "\n" "usage: [C1 C2 C2] = pfstranform_colorspace( inCSname, c1, c2, c3, outCSname );\n" " inCSname - name of the input color space\n" " c - matrix with n-th channel of input color space\n" " C - matrix with n-th channel of output color space\n" " outCSname - name of the output color space\n" "\n" "Recognized color space names: 'XYZ', 'RGB', 'sRGB', 'YUV', 'Yxy'.\n" "Color space names are case insensitive.\n" ; pfstools-1.8.5/src/octave/pfswrite.help0000664000175000017500000000063110254027366015113 00000000000000DEPRECIATED! Use pfsopen/pfsput/pfsclose instead Write matrices as channels in PFS format to stdout. usage: pfswrite( fileName, c1n, C1, c2n, C2, ...); fileName - name of the file to write, or \"stdout\" for standard output c1n - name of the first channel C1 - matrix with the first channel c2n - name of the second channel C2 - matrix with the second channel Channel names are case sensitive pfstools-1.8.5/src/octave/pfs_read_rgb.m0000664000175000017500000000137510437060322015167 00000000000000function [R G B] = pfs_read_rgb( fileName ) ## Read hdr image file (formats accepted by pfsin) and return R, G, ## and B color channels. ## ## [R G B] = hdr_read_rgb( fileName ) ## Check if file exists fid = fopen( fileName, "rb" ); if( fid == -1 ) error( sprintf( "pfs_read_rgb: File '%s' does not exist", fileName ) ); endif fclose( fid ); unwind_protect fid = popen( sprintf( "pfsin %s", fileName ), "r" ); pin = pfsopen( fid ); pin = pfsget( pin ); [R G B] = pfstransform_colorspace( "XYZ", pin.channels.X, pin.channels.Y, pin.channels.Z, \ "RGB" ); unwind_protect_cleanup pfsclose( pin ); fclose( fid ); end_unwind_protect endfunction pfstools-1.8.5/src/octave/pfsclose.cpp0000664000175000017500000000424110254027366014721 00000000000000/** * @brief Close pfs stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsclose.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include //#include "../../config.h" // conflicts with config.h from octave distribution #include #include #define SCRIPT_NAME "pfsclose" static const char *helpString = #include "pfsclose_help.h" DEFUN_DLD( pfsclose, args, , helpString ) { octave_value_list retval; int nargin = args.length(); // Get arguments and check if they are legal if( nargin != 1 || !args(0).is_map() ) { error( SCRIPT_NAME ": Improper usage!"); return retval; } Octave_map pfsStream = args(0).map_value(); Octave_map::const_iterator itFH = pfsStream.seek( "FH" ); if( itFH == pfsStream.end() || !pfsStream.contents( itFH )(0).is_real_scalar() ) { error( SCRIPT_NAME ": FH field missing in the structure or it has wrong type"); return retval; } FILE *fh = (FILE*)((long)(pfsStream.contents( itFH )(0).double_value())); // close file if not stdin or stdout if( fh != stdin && fh != stdout ) fclose( fh ); return retval; } pfstools-1.8.5/src/octave/pfsoctavelum0000664000175000017500000000435011010116374015020 00000000000000#!/usr/bin/octave -q # # This file is a part of PFSTOOLS package. # ---------------------------------------------------------------------- # Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk # # 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 # ---------------------------------------------------------------------- # # @author Rafal Mantiuk, # # $Id: pfsoctavelum,v 1.2 2008/05/06 18:01:32 rafm Exp $ # # See man page for more information pin = pfsopen( "stdin" ); #fprintf( stderr, "l = %d\n", length( argv ) ); if( length( argv ) != 1 ) error( "Expecting exactly one parameter with octave code to be execuded" ); endif command = argv(){1}; ## Add missing ';' if( command(length(command)) != ";" ) command = [ command ";" ]; endif firstFrame = true; while( true ) pin = pfsget( pin ); if( pin.EOF == true ) # Are there any more frames break; endif if( firstFrame ) ## The dimensions are know only after loading the first frame pout = pfsopen( "stdout", pin.rows, pin.columns ); firstFrame = false; endif ## Copy channels and tags from the source to destination stream pout.channels = pin.channels; pout.tags = pin.tags; pout.channelTags = pin.channelTags; [Y _x _y] = pfstransform_colorspace( "XYZ", pout.channels.X, \ pout.channels.Y, pout.channels.Z, "Yxy" ); eval( command ); [pout.channels.X pout.channels.Y pout.channels.Z] = \ pfstransform_colorspace( "Yxy", Y, _x, _y, "XYZ" ); pfsput( pout ); endwhile pfsclose( pin ); if( exist( "pout" ) != 0 ) pfsclose( pout ); endif pfstools-1.8.5/src/octave/pfsview_list.m0000664000175000017500000000121510254027366015271 00000000000000function pfsview_list( M, idx ) ## Shows list of high-dynamic range matrices using pfsview ## ## Usage: pfsview_list( list, idx ) ## list - list of channels ## idx - vector of list indexes to show (optional) if !exist("idx") idx = 1:length(M); endif execStr = "pfswrite( hdr_name"; for i=idx chStr = sprintf( ", \"ch%d\",real(nth(M,%d))", i, i ); execStr = [ execStr chStr ]; endfor execStr = strcat( execStr, " );" ); hdr_name = tmpnam(); eval( execStr ); xv = sprintf ("pfsview <%s", hdr_name); rm = sprintf ("rm -f %s", hdr_name); system (sprintf ("( %s && %s ) > /dev/null 2>&1 &", xv, rm)); endfunction pfstools-1.8.5/src/octave/pfsopen.cpp0000664000175000017500000001101211010116374014534 00000000000000/** * @brief Open pfs stream for reading or writting in GNU Octave * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsopen.cpp,v 1.5 2008/05/06 18:01:32 rafm Exp $ */ #include #include #include //#include "../../config.h" // conflicts with config.h from octave distribution #include #include #include #define SCRIPT_NAME "pfsopen" static const char *helpString = #include "pfsopen_help.h" DEFUN_DLD( pfsopen, args, , helpString) { octave_value_list retval; int nargin = args.length(); // Get arguments and check if they are legal if( nargin < 1 || nargin > 3 ) { error( SCRIPT_NAME ": Improper usage!"); return retval; } if( !args(0).is_string() && !args(0).is_real_scalar() ) { error( SCRIPT_NAME ": expected file name or file descriptor as the first argument!"); // file descriptors are represented as integers (stored as doubles) in Octave 3.0 return retval; } int width, height; bool writeMode = false; if( nargin == 3 ) { if( !args(1).is_real_scalar() || !args(2).is_real_scalar() ) { error( SCRIPT_NAME ": expected frame dimmensions as argument 2 and 3"); return retval; } height = (int)args(1).double_value(); width = (int)args(2).double_value(); writeMode = true; } if( nargin == 2 ) { if( !args(1).is_real_matrix() ) { error( SCRIPT_NAME ": expected matrix as argument 2"); return retval; } Matrix dim = args(1).matrix_value(); if( dim.rows() != 1 || dim.columns() != 2 ) { error( SCRIPT_NAME ": expected 1x2 matrix with frame size as argument 2"); return retval; } height = (int)dim(0,0); width = (int)dim(0,1); writeMode = true; } if( writeMode && (width < 1 || height < 1 || width > 65535 || height > 65535 ) ) { error( SCRIPT_NAME ": Illegal frame size"); return retval; } // Open file for reading or writing FILE *fh; if( args(0).is_string() ) { // File name given const char *fileName = args(0).string_value().c_str(); if( writeMode ) { if( !strcasecmp( "stdout", fileName ) ) fh = stdout; else { fh = fopen( fileName, "wb" ); if( fh == NULL ) { error( SCRIPT_NAME ": cannot open file for writing!"); return retval; } } } else { if( !strcasecmp( "stdin", fileName ) ) fh = stdin; else { fh = fopen( fileName, "rb" ); if( fh == NULL ) { error( SCRIPT_NAME ": cannot open file for reading!"); return retval; } } } } else { // File descriptor given int fd = dup( (int) args(0).scalar_value() ); if( writeMode ) { fh = fdopen( fd, "wb" ); if( fh == NULL ) { error( SCRIPT_NAME ": cannot open file for writing!"); return retval; } } else { fh = fdopen( fd, "rb" ); if( fh == NULL ) { error( SCRIPT_NAME ": cannot open file for reading!"); return retval; } } } Octave_map pfsStream; pfsStream.assign( "FH", octave_value((double)((long)fh)) ); pfsStream.assign( "MODE", writeMode ? octave_value("W") : octave_value("R") ); pfsStream.assign( "EOF", octave_value(false) ); if( writeMode ) { pfsStream.assign( "columns", octave_value(width) ); pfsStream.assign( "rows", octave_value(height) ); Octave_map channels; pfsStream.assign( "channels", octave_value(channels) ); } retval.append(pfsStream); return retval; } pfstools-1.8.5/src/octave/pfsget_help.h0000664000175000017500000000043411406633330015042 00000000000000 "Read next frame from the pfs stream. See also help for pfsopen function.\n" "\n" "usage: new_pfs_struct = pfsget( pfs_struct );\n" " pfs_struct - the structure returned by pfsopen or pfsget\n" " new_pfs_struct - new structure with new fields containing channels and tags\n" ; pfstools-1.8.5/src/octave/pfsput_help.h0000664000175000017500000000111611406633333015074 00000000000000 "Write frame to the pfs stream. See also help for pfsopen function.\n" "\n" "usage: pfsput( pfs_struct );\n" " pfs_struct - the structure returned by pfsopen. The stream must be open for writing\n" "\n" "Typical usage:\n" "\n" "## Create you image \n" "Y = ones( 512, 512 );\n" "Y(256,:) = 10;\n" "\n" "## Create pfs stream for writing\n" "pout = pfsopen( \"output.pfs\", size( Y ) );\n" "\n" "## Add channels\n" "pout.channels.Y = Y;\n" "\n" "## Write frame. You can 'put' multiple frames.\n" "pfsput( pout );\n" "\n" "##Close stream\n" "pfsclose( pout )\n" "\n" ; pfstools-1.8.5/src/octave/pfsclose_help.h0000664000175000017500000000024311406633335015373 00000000000000 "Close pfs stream. See also help for pfsopen function.\n" "\n" "usage: pfsclose( pfs_struct );\n" " pfs_struct - structure returned by pfsopen or pfsget\n" ; pfstools-1.8.5/src/octave/pfsget.help0000664000175000017500000000040110254027366014533 00000000000000Read next frame from the pfs stream. See also help for pfsopen function. usage: new_pfs_struct = pfsget( pfs_struct ); pfs_struct - the structure returned by pfsopen or pfsget new_pfs_struct - new structure with new fields containing channels and tags pfstools-1.8.5/src/octave/pfsread.cpp0000664000175000017500000000670710254027366014540 00000000000000/** * @brief GNU Octave wrapper - read selected channels from the PFS stream * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfsread.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include // conflicts with config.h from octave distribution #include #include #define SCRIPT_NAME "pfsread" static const char *helpString = #include "pfsread_help.h" DEFUN_DLD( pfsread, args, , helpString) { octave_value_list retval; int nargin = args.length(); if( nargin < 1 ) { error( SCRIPT_NAME ": Improper usage!"); return retval; } if( !args(0).is_string() ) { error( SCRIPT_NAME ": expected file name as the first argument!"); return retval; } FILE *fh; const char *fileName = args(0).string_value().c_str(); if( !strcasecmp( "stdin", fileName ) ) fh = stdin; else { fh = fopen( fileName, "rb" ); if( fh == NULL ) { error( SCRIPT_NAME ": cannot open file for reading!"); return retval; } } try { pfs::DOMIO ctx; pfs::Frame *frame = ctx.readFrame( fh ); if( frame == NULL ) { // No more frames for( int i = 0; i < nargin; i++ ) retval(i) = std::string( "EOF" ); return retval; } for( int i = 1; i < nargin; i++ ) { if( !args(i).is_string() ) { error( SCRIPT_NAME ": expected string argument!"); break; } const char *channelName = args(i).string_value().c_str(); pfs::Channel *channel = frame->getChannel( channelName ); if( channel == NULL ) { error( SCRIPT_NAME ": channel not found!"); break; } Matrix mat( channel->getRows(), channel->getCols() ); int index = 0; for( int r = 0; r < channel->getRows(); r++ ) // Copy channel data to Octave matrix for( int c = 0; c < channel->getCols(); c++ ) { mat(r,c) = (*channel)(index++); } retval(i-1) = mat; } ctx.freeFrame( frame ); } catch( pfs::Exception ex ) { char error_message[100]; sprintf( error_message, "%s: %s", SCRIPT_NAME, ex.getMessage() ); error( error_message ); } if( fh != stdin ) fclose( fh ); return retval; } pfstools-1.8.5/src/octave/pfsoctavergb0000664000175000017500000000434411010116374015000 00000000000000#!/usr/bin/octave -q # # This file is a part of PFSTOOLS package. # ---------------------------------------------------------------------- # Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk # # 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 # ---------------------------------------------------------------------- # # @author Rafal Mantiuk, # # $Id: pfsoctavergb,v 1.2 2008/05/06 18:01:32 rafm Exp $ # # See man page for more information pin = pfsopen( "stdin" ); #fprintf( stderr, "l = %d\n", length( argv ) ); if( length( argv ) != 1 ) error( "Expecting exactly one parameter with octave code to be execuded" ); endif command = argv(){1}; ## Add missing ';' if( command(length(command)) != ";" ) command = [ command ";" ]; endif firstFrame = true; while( true ) pin = pfsget( pin ); if( pin.EOF == true ) # Are there any more frames break; endif if( firstFrame ) ## The dimensions are know only after loading the first frame pout = pfsopen( "stdout", pin.rows, pin.columns ); firstFrame = false; endif ## Copy channels and tags from the source to destination stream pout.channels = pin.channels; pout.tags = pin.tags; pout.channelTags = pin.channelTags; [R G B] = pfstransform_colorspace( "XYZ", pout.channels.X, \ pout.channels.Y, pout.channels.Z, "RGB" ); eval( command ); [pout.channels.X pout.channels.Y pout.channels.Z] = \ pfstransform_colorspace( "RGB", R, G, B, "XYZ" ); pfsput( pout ); endwhile pfsclose( pin ); if( exist( "pout" ) != 0 ) pfsclose( pout ); endif pfstools-1.8.5/src/octave/pfswrite_help.h0000664000175000017500000000072211406633321015415 00000000000000 "DEPRECIATED! Use pfsopen/pfsput/pfsclose instead\n" "Write matrices as channels in PFS format to stdout.\n" "\n" "usage: pfswrite( fileName, c1n, C1, c2n, C2, ...);\n" " fileName - name of the file to write, or \"stdout\" for standard output\n" " c1n - name of the first channel\n" " C1 - matrix with the first channel\n" " c2n - name of the second channel\n" " C2 - matrix with the second channel\n" " \n" "Channel names are case sensitive\n" ; pfstools-1.8.5/src/octave/pfssize.m0000664000175000017500000000363110254027366014242 00000000000000function varargout = pfssize( n_rows, n_cols, varargin ) ## Resizes the set of matrices using pfssize. All matrices must be ## of the same size. ## ## Usage: [rchannel [,rchannel...]] = pfssize( rows, cols, [filter], channel [,channel...] ) ## n_rows - number of rows of the destination matrix ## n_cols - number of columns of the destination matrix ## filter - a string with the name of the filter to use. Recognized ## names: BOX, LINEAR, MITCHEL ## channel - a real matrix ## rchannel - resized matrix if( !isscalar( n_rows ) || !isscalar( n_cols ) ) error( "pfssize: bad arguments" ); return endif execStr = "pfswrite( hdr_in_name"; filter_type = "LINEAR"; channel_num = 1; for i=1:length( varargin ) if( ischar( varargin{i} ) ) filter_type = varargin{i}; continue; elseif( !ismatrix(varargin{i}) || !isreal(varargin{i}) ) error( "pfssize: each channel must be a matrix of real-valued numbers" ); return endif chStr = sprintf( ", \"ch%d\", varargin{%d}", channel_num++, i ); execStr = [ execStr chStr ]; endfor execStr = strcat( execStr, " );" ); hdr_in_name = tmpnam(); hdr_out_name = tmpnam(); eval( execStr ); cmd = sprintf ("pfssize -x %d -y %d --filter %s <%s >%s", \ n_cols, n_rows, filter_type, hdr_in_name, hdr_out_name ); system( cmd ); execStr = "pfsread( hdr_out_name"; retStr = "["; channel_num = 1; for i=1:length( varargin ) if( ischar( varargin{i} ) ) continue; endif if( channel_num!=1 ) separator = ", "; else separator = ""; endif retStr = [ retStr separator sprintf( "varargout{%d} ", channel_num ) ]; execStr = [ execStr sprintf( ", \"ch%d\"", channel_num++ ) ]; endfor retStr = [ retStr "] = " ]; execStr = [ retStr execStr " );" ]; eval( execStr ); unlink( hdr_in_name ); unlink( hdr_out_name ); endfunction pfstools-1.8.5/src/octave/Makefile.am0000664000175000017500000000222411406633312014424 00000000000000octdir = $(OCTAVE_OCT_DIR) mdir = $(OCTAVE_M_DIR) linked_oct_files = pfsread.oct pfswrite.oct pfstransform_colorspace.oct \ pfsopen.oct pfsget.oct pfsput.oct pfsclose.oct h_files = octave_util.h m_oct_files = pfsview.m pfsview_rgb.m pfsview_list.m \ pfs_read_rgb.m pfs_read_xyz.m pfs_read_luminance.m \ pfs_write_rgb.m pfssize.m pfs_open_frames.m pfs_close_frames.m help_files = pfsopen.help pfsclose.help pfsget.help pfsput.help \ pfsread.help pfswrite.help pfstransform_colorspace.help help_h_files = $(help_files:.help=_help.h) oct_SCRIPTS = $(linked_oct_files) m_SCRIPTS = $(m_oct_files) bin_SCRIPTS = pfsoctavelum pfsoctavergb pfsstat man_MANS = pfsoctavelum.1 pfsoctavergb.1 pfsstat.1 CCFILES = \ $(linked_oct_files:.oct=.cpp) EXTRA_DIST = $(m_oct_files) $(CCFILES) $(h_files) \ $(help_files) $(help_h_files) $(man_MANS) $(bin_SCRIPTS) %.oct: %.cpp %_help.h echo $(find %.help.h, $(help_files)) $(MKOCTFILE) -v -s -I. -I$(top_srcdir)/src/pfs/ $(LIBS) -L../pfs/ -lpfs $< -o $@ %_help.h: %.help awk ' { print "\t\"" $$0 "\\n\""; } END { print ";" } ' <$< >$@ clean: rm -f *.oct *.o *core .PHONY: clean pfstools-1.8.5/src/octave/Makefile.in0000644000175000017500000004626311652214376014456 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/octave DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(mdir)" \ "$(DESTDIR)$(octdir)" "$(DESTDIR)$(man1dir)" SCRIPTS = $(bin_SCRIPTS) $(m_SCRIPTS) $(oct_SCRIPTS) SOURCES = DIST_SOURCES = man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ octdir = $(OCTAVE_OCT_DIR) mdir = $(OCTAVE_M_DIR) linked_oct_files = pfsread.oct pfswrite.oct pfstransform_colorspace.oct \ pfsopen.oct pfsget.oct pfsput.oct pfsclose.oct h_files = octave_util.h m_oct_files = pfsview.m pfsview_rgb.m pfsview_list.m \ pfs_read_rgb.m pfs_read_xyz.m pfs_read_luminance.m \ pfs_write_rgb.m pfssize.m pfs_open_frames.m pfs_close_frames.m help_files = pfsopen.help pfsclose.help pfsget.help pfsput.help \ pfsread.help pfswrite.help pfstransform_colorspace.help help_h_files = $(help_files:.help=_help.h) oct_SCRIPTS = $(linked_oct_files) m_SCRIPTS = $(m_oct_files) bin_SCRIPTS = pfsoctavelum pfsoctavergb pfsstat man_MANS = pfsoctavelum.1 pfsoctavergb.1 pfsstat.1 CCFILES = \ $(linked_oct_files:.oct=.cpp) EXTRA_DIST = $(m_oct_files) $(CCFILES) $(h_files) \ $(help_files) $(help_h_files) $(man_MANS) $(bin_SCRIPTS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/octave/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/octave/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files install-mSCRIPTS: $(m_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(mdir)" || $(MKDIR_P) "$(DESTDIR)$(mdir)" @list='$(m_SCRIPTS)'; test -n "$(mdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(mdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(mdir)$$dir" || exit $$?; \ } \ ; done uninstall-mSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(m_SCRIPTS)'; test -n "$(mdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(mdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(mdir)" && rm -f $$files install-octSCRIPTS: $(oct_SCRIPTS) @$(NORMAL_INSTALL) test -z "$(octdir)" || $(MKDIR_P) "$(DESTDIR)$(octdir)" @list='$(oct_SCRIPTS)'; test -n "$(octdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(octdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(octdir)$$dir" || exit $$?; \ } \ ; done uninstall-octSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(oct_SCRIPTS)'; test -n "$(octdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(octdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(octdir)" && rm -f $$files mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(mdir)" "$(DESTDIR)$(octdir)" "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-mSCRIPTS install-man install-octSCRIPTS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-mSCRIPTS uninstall-man \ uninstall-octSCRIPTS uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binSCRIPTS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-mSCRIPTS \ install-man install-man1 install-octSCRIPTS install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-binSCRIPTS uninstall-mSCRIPTS uninstall-man \ uninstall-man1 uninstall-octSCRIPTS %.oct: %.cpp %_help.h echo $(find %.help.h, $(help_files)) $(MKOCTFILE) -v -s -I. -I$(top_srcdir)/src/pfs/ $(LIBS) -L../pfs/ -lpfs $< -o $@ %_help.h: %.help awk ' { print "\t\"" $$0 "\\n\""; } END { print ";" } ' <$< >$@ clean: rm -f *.oct *.o *core .PHONY: clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/src/octave/octave_util.h0000664000175000017500000000332310254027366015066 00000000000000#ifndef OCTAVE_UTIL_H #define OCTAVE_UTIL_H /** * @brief Utility functions for interfacing pfs::Array2D with Octave * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: octave_util.h,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include inline void copy( const Matrix &in, pfs::Array2D *out ) { int index = 0; for( int r = 0; r < in.rows(); r++ ) for( int c = 0; c < in.cols(); c++ ) { (*out)(index++) = (float)in(r,c); } } inline void copy( const pfs::Array2D *in, Matrix &out ) { int index = 0; for( int r = 0; r < in->getRows(); r++ ) for( int c = 0; c < in->getCols(); c++ ) { out(r,c) = (double)(*in)(index++); } } #endif pfstools-1.8.5/src/octave/pfstransform_colorspace.cpp0000664000175000017500000000663610254027366020053 00000000000000/** * @brief GNU Octave wrapper - tranform between color spaces using pfs library * * This file is a part of PFSTOOLS package. * ---------------------------------------------------------------------- * Copyright (C) 2003,2004 Rafal Mantiuk and Grzegorz Krawczyk * * 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 * ---------------------------------------------------------------------- * * @author Rafal Mantiuk, * * $Id: pfstransform_colorspace.cpp,v 1.1 2005/06/15 13:36:54 rafm Exp $ */ #include #include #include #include #include "octave_util.h" static pfs::ColorSpace findColorSpace( const char *name ); #define SCRIPT_NAME "pfstransform_colorspace" static const char *helpString = #include "pfstransform_colorspace_help.h" DEFUN_DLD( pfstransform_colorspace, args, , helpString) { octave_value_list retval; int nargin = args.length(); if( nargin != 5 || !args(0).is_string() || !args(1).is_real_matrix() || !args(2).is_real_matrix() || !args(3).is_real_matrix() || !args(4).is_string() ) { error( SCRIPT_NAME ": Improper usage!"); return retval; } try { pfs::ColorSpace inCS = findColorSpace( args(0).string_value().c_str() ); pfs::ColorSpace outCS = findColorSpace( args(4).string_value().c_str() ); const int rows = args(1).matrix_value().rows(), cols = args(1).matrix_value().cols(); pfs::Array2DImpl c1Buf( cols, rows ), c2Buf( cols, rows ), c3Buf( cols, rows ); copy( args(1).matrix_value(), &c1Buf ); copy( args(2).matrix_value(), &c2Buf ); copy( args(3).matrix_value(), &c3Buf ); pfs::transformColorSpace( inCS, &c1Buf, &c2Buf, &c3Buf, outCS, &c1Buf, &c2Buf, &c3Buf ); Matrix c1 = Matrix( rows, cols ); Matrix c2 = Matrix( rows, cols ); Matrix c3 = Matrix( rows, cols ); copy( &c1Buf, c1 ); copy( &c2Buf, c2 ); copy( &c3Buf, c3 ); retval(0) = c1; retval(1) = c2; retval(2) = c3; } catch( pfs::Exception ex ) { char error_message[100]; sprintf( error_message, "%s: %s", SCRIPT_NAME, ex.getMessage() ); error( error_message ); } return retval; } static pfs::ColorSpace findColorSpace( const char *name ) { if( !strcasecmp( name, "XYZ" ) ) return pfs::CS_XYZ; else if( !strcasecmp( name, "RGB" ) ) return pfs::CS_RGB; else if( !strcasecmp( name, "SRGB" ) ) return pfs::CS_SRGB; else if( !strcasecmp( name, "YUV" ) ) return pfs::CS_YUV; else if( !strcasecmp( name, "YXY" ) ) return pfs::CS_Yxy; throw pfs::Exception( "Not recognized color space" ); } pfstools-1.8.5/src/octave/pfsoctavelum.10000664000175000017500000000153110406235134015161 00000000000000.TH "pfsoctavelum" 1 .SH NAME pfsoctavelum \- Process luminance in pfs stream using Octave .SH SYNOPSIS .B pfsoctavelum .SH DESCRIPTION Use this command to execute a GNU Octave program on luminance channel of each frame in the pfs stream. \fIoctave_program\fR must be given in quotation marks ("") and must not produce any output (it can output to stderr, not to stdout). Color channels are scaled proportionaly to the luminance channel. Luminance channel is represented by matrix \fIY\fR. .PP Note: This command requires GNU Octave. .SH EXAMPLES .TP pfsinrgbe frames_%04d.hdr | pfsoctavelum "Y = conv2( Y, gaussian( 10, 1/5 )*gaussian( 10, 1/5 )', 'same' );" | pfsview .PP Blur the sequence of frames with gaussian blur and show the result with pfsview. .SH BUGS Please report bugs and comments to Rafal Mantiuk . pfstools-1.8.5/src/octave/pfsput.help0000664000175000017500000000073110254027366014572 00000000000000Write frame to the pfs stream. See also help for pfsopen function. usage: pfsput( pfs_struct ); pfs_struct - the structure returned by pfsopen. The stream must be open for writing Typical usage: ## Create you image Y = ones( 512, 512 ); Y(256,:) = 10; ## Create pfs stream for writing pout = pfsopen( \"output.pfs\", size( Y ) ); ## Add channels pout.channels.Y = Y; ## Write frame. You can 'put' multiple frames. pfsput( pout ); ##Close stream pfsclose( pout ) pfstools-1.8.5/src/octave/pfsview.m0000664000175000017500000000407410410221637014233 00000000000000function pfsview( varargin ) ## Shows set of high-dynamic range matrices using pfsview ## ## Usage: pfsview( ["title",] channel [,"channel name"], ... ) ## ## title - (optional) a title to be displayed in the title bar of pfsview ## channel - a real matrix, or a cell array of real matrixes ## channel name - (optional) name for the channel given as next argument C = varargin{1}; width = -1; height = -1; title = "Octave"; n = 1; for i=1:length( varargin ) if iscell(varargin{i}) C = varargin{i}; width = columns( C{1} ); height = rows( C{1} ); for j=1:length(C) ch_name = sprintf( "ch%d", n++ ); if( !exist( "channels" ) ) channels = struct( ch_name, C{j} ); else channels = setfield( channels, ch_name, C{j} ); endif endfor elseif( ismatrix( varargin{i} ) ) ch_name = sprintf( "ch%d", n++ ); if( !exist( "channels" ) ) channels = struct( ch_name, varargin{i} ); else channels = setfield( channels, ch_name, varargin{i} ); endif width = columns( varargin{i} ); height = rows( varargin{i} ); elseif( ischar( varargin{i} ) ) if( i == 1 ) title = varargin{i}; else if( !exist( "channels" ) || !exist( "ch_name" ) ) error( "channel_name argument must follow channel argument" ); else channels = setfield( channels, varargin{i}, \ getfield( channels, ch_name ) ); channels = rmfield( channels, ch_name ); clear ch_name; endif endif endif endfor hdr_name = tmpnam(); pfsout = pfsopen( hdr_name, height, width ); pfsout.channels = channels; pfsout.tags.FILE_NAME = title; ## This should go after 'system' call, but it is so fifo seems to be ## not initialized for reading pfsput( pfsout ); xv = sprintf ("pfsview <%s", hdr_name); rm = sprintf ("rm -f %s", hdr_name); system (sprintf ("( %s && %s ) > /dev/null 2>&1 &", xv, rm)); pfsclose( pfsout ); endfunction pfstools-1.8.5/src/Makefile.am0000664000175000017500000000050411140151755013143 00000000000000### if OCTAVE_SUPPORT OCTAVE_DIR = octave endif if QT_SUPPORT QT_DIR = pfsview endif if GL_SUPPORT GL_DIR = pfsglview endif if MATLAB_SUPPORT MATLAB_DIR = matlab endif if IMAGEMAGICK_SUPPORT HDRHTML_DIR = hdrhtml endif SUBDIRS = pfs fileformat filter $(OCTAVE_DIR) $(QT_DIR) $(GL_DIR) $(MATLAB_DIR) $(HDRHTML_DIR) pfstools-1.8.5/src/Makefile.in0000644000175000017500000004265511652214375013175 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = pfs fileformat filter octave pfsview pfsglview matlab \ hdrhtml DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ### @OCTAVE_SUPPORT_TRUE@OCTAVE_DIR = octave @QT_SUPPORT_TRUE@QT_DIR = pfsview @GL_SUPPORT_TRUE@GL_DIR = pfsglview @MATLAB_SUPPORT_TRUE@MATLAB_DIR = matlab @IMAGEMAGICK_SUPPORT_TRUE@HDRHTML_DIR = hdrhtml SUBDIRS = pfs fileformat filter $(OCTAVE_DIR) $(QT_DIR) $(GL_DIR) $(MATLAB_DIR) $(HDRHTML_DIR) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ ctags ctags-recursive distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/missing0000755000175000017500000002623311500011217011710 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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, 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, see . # 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pfstools-1.8.5/Makefile.am0000664000175000017500000000022011406631206012346 00000000000000if PDFLATEX_SUPPORT DOC_DIR = doc endif ACLOCAL_AMFLAGS=-I m4 EXTRA_DIST = README.OSX README.Cygwin README.matlab SUBDIRS = src $(DOC_DIR) pfstools-1.8.5/depcomp0000755000175000017500000004426711500011217011675 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free # Software Foundation, Inc. # 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, 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, see . # 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 Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u="sed s,\\\\\\\\,/,g" depmode=msvisualcpp fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pfstools-1.8.5/Makefile.in0000644000175000017500000005542711652214376012410 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ TODO config.guess config.sub depcomp install-sh ltmain.sh \ missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = src doc DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_PATH = @BASH_PATH@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDAL_LIBS = @GDAL_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GREP = @GREP@ IMAGEMAGICK_CFLAGS = @IMAGEMAGICK_CFLAGS@ IMAGEMAGICK_LIBS = @IMAGEMAGICK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEGHDR_LIBS = @JPEGHDR_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MEX = @MEX@ MEX_DIR = @MEX_DIR@ MEX_EXT = @MEX_EXT@ MKDIR_P = @MKDIR_P@ MKOCTFILE = @MKOCTFILE@ MOC = @MOC@ NETPBM_CFLAGS = @NETPBM_CFLAGS@ NETPBM_LIBS = @NETPBM_LIBS@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OCTAVE_M_DIR = @OCTAVE_M_DIR@ OCTAVE_OCT_DIR = @OCTAVE_OCT_DIR@ OPENEXR_CFLAGS = @OPENEXR_CFLAGS@ OPENEXR_LIBS = @OPENEXR_LIBS@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PDFLATEX = @PDFLATEX@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ PKG_DATADIR = @PKG_DATADIR@ QT_CFLAGS = @QT_CFLAGS@ QT_LIBS = @QT_LIBS@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TIFF_LIBS = @TIFF_LIBS@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @PDFLATEX_SUPPORT_TRUE@DOC_DIR = doc ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = README.OSX README.Cygwin README.matlab SUBDIRS = src $(DOC_DIR) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-generic distclean-hdr \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: pfstools-1.8.5/README.Cygwin0000664000175000017500000000534510740415555012455 00000000000000pfstools can be compiled under Windows only from the cygwin environment. You can download cygwin from: http://www.cygwin.com/ To compile pfstools under cygwin you need at least the following packages: autoconf (*) automake1.9 (*) cvs (*) openssh (*) gcc-core (***) gcc-g++ (***) gcc-gcc (***) libtool1.5 (*) libbz2 make pkgconfig (****) (*) needed only when compiling from CVS and not needed for the tar distribution Other packages that are needed to enable certain functionality: doxygen libMagick-devel jpeg libnetpbm-devel libnetpbm10 libpng12 libpng12-devel libtiff-devel libxml2-devel readline octave octave-headers tetex tetex-base tetex-bin qt3 (**) qt3-bin (**) qt3-devel (**) OpenGL (*5) OpenEXR library must be build from sources since no cygwin package is available. Sources can be downloaded from http://www.openexr.com/. The directory containing OpenEXR.pc should be exported to the PKG_CONFIG_PATH environment variable. For example: export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:$PKG_CONFIG_PATH Newer version of the listed packages should also work. (**) qt3 is needed to build pfsview. Since qt3 for cygwin is not always working as it should, compilation of pfsview under windows is sometimes problematic. pfsview compiles with the recent version of qt3 (tested on 01.03.2007). If fonts are displayed improperly, make sure that both a font sever and font packages are installed. QT support is detected by pkg-config. If some libraries are missing on linking, make sure that the following packages are installed: XFree86-lib-compat xorg-x11-devel minires-devel You need an X server client, such as XThinPro, XConnectPro or X-Win32, to run qt applications under cygwin. (***) When compiled using g++ 3.4.4, the .oct scripts files crash Octave. To make the Octave bindings working, choose g++ 3.3.3 when configuring cygwin. The problem might be fixed in the newer g++/Octave releases. (****) When pkg-config tests fail, even though everything is installed, try setting PKG_CONFIG environment variable to the path where pkg-config is located: export PKG_CONFIG=/usr/bin/pkg-config. From our experience, cygwin development packages (-dev) get often broken and some dependencies are missing. If this is your case and you do no need the functionality that causes the problem, try disabling it with --disable-feature option. If you need certain functionality that fails to compile, look for problem at the cygwin mailing list archives. (*5) OpenGL is needed to build pfsglview. Please assure that w32api package is installed and that opengl32.dll and glut32.dll are present in Windows directory (if not, OpenGL and GLUT should be installed under MS Windows (not only in Cygwin)). To configure and compile, follow the procedure from the README file. pfstools-1.8.5/COPYING0000664000175000017500000006347610254027365011400 00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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.1 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 Lesser 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 Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! pfstools-1.8.5/configure.ac0000644000175000017500000005114211652214363012613 00000000000000dnl dnl Initialization part dnl AC_INIT([pfstools],[1.8.5]) AM_INIT_AUTOMAKE AC_CONFIG_HEADERS([config.h]) AC_LANG(C++) # perform tests in C++ language AC_PROG_CXX LT_INIT AC_PROG_LIBTOOL AC_CONFIG_MACRO_DIR([m4]) dnl dnl Templates for autoheader defines dnl AH_TEMPLATE([DEBUG], [Define as 1 when compiling in debug mode ]) dnl dnl Internal Debug dnl AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug],[Enable debug symbols and asserts]), [if test "$enable_debug" = "yes" ; then temp_CXXFLAGS=`echo $CXXFLAGS | sed "s/-O./ /; s/-g//"` CXXFLAGS="-g $temp_CXXFLAGS" AC_DEFINE([DEBUG]) fi], [enable_debug="no" temp_CXXFLAGS=`echo $CXXFLAGS | sed "s/-O./ /; s/-g//"` CXXFLAGS="-O3 $temp_CXXFLAGS" AC_DEFINE(NDEBUG, 1, [Disable assertion checks]) ]) ########################################################### # system detection and configuration dnl Compile NetPBM code? AC_ARG_ENABLE(netpbm, AS_HELP_STRING([--disable-netpbm],[Do not compile programs that use NETPBM (NetPBM) library]), [if test "$enable_netpbm" = "no" ; then do_netpbm="no" else if test "$enable_netpbm" = "yes" ; then do_netpbm="yes" fi fi], [do_netpbm="yes"]) dnl Compile OpenEXR code? AC_ARG_ENABLE(openexr, AS_HELP_STRING([--disable-openexr],[Do not compile programs that use OpenEXR library]), [if test "$enable_openexr" = "no" ; then do_openexr="no" else if test "$enable_openexr" = "yes" ; then do_openexr="yes" fi fi], [do_openexr="yes"]) dnl Compile TIFF code? AC_ARG_ENABLE(tiff, AS_HELP_STRING([--disable-tiff],[Do not compile programs that use TIFF library]), [if test "$enable_tiff" = "no" ; then do_tiff="no" else if test "$enable_tiff" = "yes" ; then do_tiff="yes" fi fi], [do_tiff="yes"]) dnl Compile QT code? AC_ARG_ENABLE(qt, AS_HELP_STRING([--disable-qt],[Do not compile programs that use QT library]), [if test "$enable_qt" = "no" ; then do_qt="no" else if test "$enable_qt" = "yes" ; then do_qt="yes" fi fi], [do_qt="yes"]) dnl Compile JPEG-HDR code? AC_ARG_ENABLE(jpeghdr, AS_HELP_STRING([--disable-jpeghdr],[Do not compile programs that use JPEGHDR library]), [if test "$enable_jpeghdr" = "no" ; then do_jpeghdr="no" else if test "$enable_jpeghdr" = "yes" ; then do_jpeghdr="yes" fi fi], [do_jpeghdr="yes"]) dnl Compile ImageMagic++ code? AC_ARG_ENABLE(imagemagick, AS_HELP_STRING([--disable-imagemagick],[Do not compile programs that use ImageMagick library]), [if test "$enable_imagemagick" = "no" ; then do_imagemagick="no" else if test "$enable_imagemagick" = "yes" ; then do_imagemagick="yes" fi fi], [do_imagemagick="yes"]) dnl Compile Octave code? AC_ARG_ENABLE(octave, AS_HELP_STRING([--disable-octave],[Do not compile octave interface functions]), [if test "$enable_octave" = "no" ; then do_octave="no" else if test "$enable_octave" = "yes" ; then do_octave="yes" fi fi], [do_octave="yes"]) dnl Compile OpenGL code? AC_ARG_ENABLE(opengl, AS_HELP_STRING([--disable-opengl],[Do not compile opengl code (pfsglview)]), [if test "$enable_opengl" = "no" ; then do_opengl="no" else if test "$enable_opengl" = "yes" ; then do_opengl="yes" fi fi], [do_opengl="yes"]) dnl Compile Matlab code? AC_ARG_ENABLE(matlab, AS_HELP_STRING([--disable-matlab],[Do not compile matlab files]), [if test "$enable_matlab" = "no" ; then do_matlab="no" else if test "$enable_matlab" = "yes" ; then do_matlab="yes" fi fi], [do_matlab="yes"]) dnl Compile GDAL code? AC_ARG_ENABLE(gdal, AS_HELP_STRING([--disable-gdal],[Do not compile programs that use GDAL library]), [if test "$enable_gdal" = "no" ; then do_gdal="no" else if test "$enable_gdal" = "yes" ; then do_gdal="yes" fi fi], [do_gdal="yes"]) dnl dnl Checking for libraries dnl if test "$do_netpbm" = "yes"; then dnl Check for libnetpbm-10 (Debian) AC_CHECK_LIB(netpbm, pm_init, [AC_DEFINE( HAVE_LIBNETPPM,1, [Define this if you have the libnetpbm libraries]) NETPBM_LIBS="-lnetpbm" NETPBM_CFLAGS="" netpbm_support="yes"],[netpbm_support="no"]) if test "$netpbm_support" = "no"; then dnl Check for libnetpbm (sf.net) AC_CHECK_LIB(ppm, ppm_init, [AC_DEFINE( HAVE_LIBNETPPM,1, [Define this if you have the libppm libraries]) NETPBM_LIBS="-lppm" NETPBM_CFLAGS="" netpbm_support="yes"],[netpbm_support="no"],) fi if test "$netpbm_support" = "yes"; then dnl Search for the header files AC_MSG_CHECKING([for NetPBM header files]) CPATH_NO_COLON=`echo $CPATH | sed -e "s/:/ /g"` for DIR in ${prefix}/include /usr/local/include/ /usr/include /opt/local/include $CPATH_NO_COLON; do test -d "$DIR" && NETPBM_PPMH=`find $DIR -name ppm.h` if test -n "$NETPBM_PPMH"; then NETPBM_CFLAGS="-I ${NETPBM_PPMH%%ppm.h}" AC_MSG_RESULT([yes]) break fi done if test -z "$NETPBM_CFLAGS"; then netpbm_support="no" AC_MSG_RESULT([no]) fi fi else netpbm_support="no" fi dnl Check for ImageMagick++ if test "$do_imagemagick" = "yes"; then PKG_CHECK_MODULES(IMAGEMAGICK, ImageMagick++ >= 6.0, [AC_DEFINE( HAVE_LIBIMAGEMAGICK, 1, [ImageMagick library used for reading/writing images.]) imagemagick_support="yes"],[ imagemagick_support="no"]) else imagemagick_support="no" fi if test "$do_tiff" = "yes"; then AC_CHECK_LIB(tiff, TIFFOpen, [AC_DEFINE( HAVE_LIBTIFF,1, [Define this if you have the libtiff libraries]) TIFF_LIBS="-ltiff" tiff_support="yes"],[tiff_support="no"],) else tiff_support="no" fi if test "$do_jpeghdr" = "yes"; then AC_CHECK_LIB(jpeghdr, jpeghdr_CreateDecompress, [AC_DEFINE( HAVE_LIBJPEGHDR,1, [Define this if you have the libjpeghdr libraries]) JPEGHDR_LIBS="-lhdr -ljpeghdr -ljpeg -lm" jpeghdr_support="yes"],[jpeghdr_support="no"], -lhdr -ljpeg -lm) else jpeghdr_support="no" fi AC_ARG_WITH(exrdir, [ --with-openexrdir path where exr include files are installed], openexr_incpath=$withval) if test "$do_openexr" = "yes"; then #Check first using pkg-config PKG_CHECK_MODULES(OPENEXR, OpenEXR >= 1.0, [AC_DEFINE( HAVE_LIBOPENEXR, 1, [OpenEXR libraries, optional, used in io routines.]) openexr_support="yes"],[ AC_MSG_WARN( $OPENEXR_PKG_ERRORS ) dnl Locate OpenEXR includes AC_MSG_CHECKING([for OpenEXR header files]) CPATH_NO_COLON=`echo $CPATH | sed -e "s/:/ /g"` for DIR in ${prefix}/include /usr/local/include /usr/include /opt/local/include $CPATH_NO_COLON; do test -d "$DIR" && openexr_incpath=`find $DIR -name ImfRgbaFile.h` if test -n "$openexr_incpath"; then openexr_incpath="${openexr_incpath%%ImfRgbaFile.h}" AC_MSG_RESULT([yes]) break fi done if test -z "$openexr_incpath"; then openexr_support="no" AC_MSG_RESULT([no]) fi #if not found TMP_LIBS="$LIBS" TMP_CXXFLAGS="$CXXFLAGS" OPENEXR_LIBS="-lImath -lIlmImf -lHalf -lIex -lz" OPENEXR_CFLAGS="-I$openexr_incpath" LIBS="$OPENEXR_LIBS $LIBS" CXXFLAGS="$CXXFLAGS $OPENEXR_CFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include using namespace Imf; using namespace Imath;]], [[RgbaInputFile file("bzdet");]])],[AC_DEFINE( HAVE_LIBOPENEXR, 1, [OpenEXR libraries, optional, used in io routines.]) AC_MSG_RESULT([yes]); openexr_support="yes"],[AC_MSG_RESULT([no]); openexr_support="no"]) LIBS=$TMP_LIBS CXXFLAGS=$TMP_CXXFLAGS ]) #end of PKG_CHECK_MODULES else openexr_support="no" fi ## QT library check AC_ARG_WITH([qtdir], [ --with-qtdir=DIR Qt installation directory [default=$QTDIR]], QTDIR=$withval) AC_ARG_WITH([qtinclude], [ --with-qtinclude=DIR Qt include directory (overwrites qtdir)], QTINCLUDE=$withval) AC_ARG_WITH([qtlibs], [ --with-qtlibs=DIR Qt library directory (overwrites qtdir)], QTLIBS=$withval) if test "$do_qt" = "yes"; then ##If no QTDIR specified, try pkg-config #if test x"$QTDIR" = x && test x"$QTINCLUDE" = x && test x"$QTLIBS" = x ; then PKG_CHECK_MODULES(QT, QtGui, [AC_DEFINE( HAVE_LIBQT, 1, [QT libraries, optional, used in pfsview.]) QT_SUPPORT="yes" ],[ #if pkg-config fails AC_MSG_WARN( $QT_PKG_ERRORS ) pfs_CHECK_QT # QT_SUPPORT="no" ]) #end of PKG_CHECK_MODULES #else ## Check QT using the specified QTDIR # pfs_CHECK_QT #fi ## Look for MOC if test -z "$QTDIR"; then MOC="moc-qt4" else MOC="$QTDIR/bin/moc" fi AC_ARG_WITH(moc, [ --with-moc Qt meta object compiler], [ MOC=$withval ]) AC_PATH_PROG(MOC, $MOC) test -z "$MOC" && ( AC_MSG_WARN([no QT meta object compiler (moc) found in the path]); QT_SUPPORT="no" ) else QT_SUPPORT="no" fi if test "$do_opengl" = "yes"; then # Checks for OpenGL under given operating system, # adds operating system specific flags and libs. case "$host_os" in [[cC]][[yY]][[gG]][[wW]][[iI]][[nN]]|mingw32|mks|cygwin) AC_DEFINE( WIN32, 1, [Windows compilation.]) AC_MSG_CHECKING([for OpenGL]) AC_COMPILE_IFELSE( AC_LANG_PROGRAM([[ #include #include ]],[[glEnd();]]), [AC_DEFINE( HAVE_LIBOPENGL, 1, [OpenGL libraries are required.]) GL_LIBS="-L/usr/local/lib -lglut32 -lglu32 -lopengl32 -lgdi32" GL_CFLAGS="-I/usr/local/include -DCYGWIN -DWIN32 -D_WIN32 -DGLEW_STATIC" gl_support="yes" AC_MSG_RESULT([yes])], [AC_MSG_WARN( [OpenGL test failed. pfsglview will not be compiled] ) gl_support="no" ]) ;; darwin*) AC_DEFINE( HAVE_LIBOPENGL, 1, [OpenGL libraries are required.]) GL_LIBS="$LIBS -framework GLUT -framework OpenGL -framework Cocoa" gl_support="yes" ;; *) AC_CHECK_LIB(GL, glDisable, [ AC_CHECK_LIB(glut, glutInit, AC_DEFINE( HAVE_LIBOPENGL, 1, [OpenGL libraries are required.]) GL_LIBS="$LIBS -lglut -lGLU -lGL -lpthread" gl_support="yes", AC_MSG_WARN( [GLUT library not found. pfsglview will not be compiled] ) gl_support="no" ) ], [AC_MSG_WARN( [OpenGL test failed. pfsglview will not be compiled] ) gl_support="no"] ,) ;; esac else gl_support="no" fi dnl Is Mac OS - needed for pfsview case "$host_os" in darwin*) AM_CONDITIONAL(MAC_OS, true) ;; *) AM_CONDITIONAL(MAC_OS, false) ;; esac dnl Check for MATLAB MEX=mex MEX_EXT="" AC_ARG_WITH(mex, [ --with-mex MATLAB compiler command], MEX=$withval) if test "${prefix}" = "NONE"; then MEX_DIR=`eval echo "/usr/local/share/${PACKAGE}/pfstools_matlab"` else first_pass=`eval echo "${datadir}/${PACKAGE}/pfstools_matlab"` MEX_DIR=`eval echo "$first_pass"` fi dnl AC_DEFINE_UNQUOTED( [PCG_DATADIR], "$PCG_DATADIR", [Directory where data files are located.]) AC_ARG_WITH(mex-dir, [ --with-mex-dir path for MATLAB files], MEX_DIR=$withval) matlab_support="no"; if test "$do_matlab" = "yes"; then AC_PATH_PROG(MEX, $MEX) if test -n "$MEX" && $MEX -v 2>/dev/null | grep MATLAB >/dev/null; then MATLAB_ROOT=`matlab -e 2>/dev/null | grep '^MATLAB=' | sed -e 's/MATLAB=//'`; MEX_EXT=`"$MATLAB_ROOT/bin/mexext" 2>/dev/null`; if test -z "$MEX_EXT"; then AC_MSG_WARN([unable to determine mex extension, defaulting to mexglx]) MEX_EXT="mexglx"; fi matlab_support="yes"; else if test -n "$MEX"; then AC_MSG_WARN([mex script does not seem to come from matlab (could be Octave mex script). Pass the path to matlab mex using --with-mex option.]) else AC_MSG_WARN([no matlab mex found in the path]) fi fi fi dnl Check for GDAL if test "$do_gdal" = "yes"; then AC_CHECK_LIB(gdal, GDALAllRegister, [AC_DEFINE( HAVE_LIBGDAL,1, [Define this if you have the GDAL library]) GDAL_LIBS="-lgdal" gdal_support="yes"],[gdal_support="no"],) else gdal_support="no" fi # Add define pointing to data directory (for lookup tables, etc.) if test "${prefix}" = "NONE"; then PKG_DATADIR=`eval echo "/usr/local/share/${PACKAGE}"` else first_pass=`eval echo "${datadir}/${PACKAGE}"` PKG_DATADIR=`eval echo "$first_pass"` fi AC_DEFINE_UNQUOTED( [PKG_DATADIR], "$PKG_DATADIR", [Directory where data files are located.]) AC_SUBST(PKG_DATADIR) dnl dnl Check for bash executable dnl AC_ARG_WITH(bash, [ --with-bash location of the bash shell, needed for some pfs* scripts], [ BASH_PATH=$withval ]) test -z "$BASH_PATH" && BASH_PATH="bash" AC_PATH_PROG(BASH_PATH, $BASH_PATH) test -z "$BASH_PATH" && ( AC_MSG_WARN([no bash shell found in the path, some programs may fail to run]); BASH_PATH="/bin/bash" ) dnl dnl Autoheader defines dnl AH_BOTTOM([/* Output stream for debug messages. */ #ifdef DEBUG #define DEBUG_STR cerr #else #define DEBUG_STR if(1); else cerr #endif /* Output stream for verbose messages */ #define VERBOSE_STR if(verbose) std::cerr << PROG_NAME << ": " ]) ## TODO: check by compiling a simple program if it is necessary AH_BOTTOM([/* On some systems iostream, string etc are in 'std' namespace */ using namespace std; ]) ##AC_PREFIX_DEFAULT("$HOME/local") AC_SUBST(NETPBM_LIBS) AC_SUBST(NETPBM_CFLAGS) AC_SUBST(TIFF_LIBS) AC_SUBST(OPENEXR_LIBS) AC_SUBST(OPENEXR_CFLAGS) AC_SUBST(IMAGEMAGICK_LIBS) AC_SUBST(IMAGEMAGICK_CFLAGS) AC_SUBST(JPEGHDR_LIBS) AC_SUBST(GDAL_LIBS) AC_SUBST(QT_LIBS) AC_SUBST(QT_CFLAGS) AC_SUBST(GL_LIBS) AC_SUBST(GL_CFLAGS) AC_SUBST(MOC) AC_SUBST(CFLAGS) AC_SUBST(PACKAGE_VERSION) AC_SUBST(MEX) AC_SUBST(MEX_DIR) AC_SUBST(MEX_EXT) AC_SUBST(BASH_PATH) #QT_PATH=$qtpath #AC_SUBST(QT_PATH) if test "$do_octave" = "yes"; then #Check for octave #oct_version="2.1.35" oct_version="" AC_ARG_WITH(oct-version, [ --with-oct-version Octave version, default empty, example: '2.1.35'], [ oct_version=$withval ]) if test -n "$oct_version"; then oct_version="-${oct_version}"; fi OCTAVE_OCT_DIR=`octave-config${oct_version} --oct-site-dir` OCTAVE_OCT_DIR=${OCTAVE_OCT_DIR:+${OCTAVE_OCT_DIR}/pfstools} OCTAVE_M_DIR=`octave-config${oct_version} --m-site-dir` OCTAVE_M_DIR=${OCTAVE_M_DIR:+${OCTAVE_M_DIR}/pfstools} AC_ARG_WITH(octave-dir, [ --with-octave-dir where Octave's .oct and .m files should be installed], [ OCTAVE_OCT_DIR=$withval; OCTAVE_M_DIR=$withval ]) AC_ARG_WITH(octave-m-dir, [ --with-octave-m-dir where Octave's .m files should be installed], [ OCTAVE_M_DIR=$withval ]) AC_ARG_WITH(octave-oct-dir, [ --with-octave-oct-dir where Octave's .oct files should be installed], [ OCTAVE_OCT_DIR=$withval ]) test -z "$OCTAVE_OCT_DIR" && AC_MSG_WARN([no path for .oct files specified]) test -z "$OCTAVE_M_DIR" && AC_MSG_WARN([no path for .m files specified]) MKOCTFILE="mkoctfile${oct_version}" AC_ARG_WITH(mkoctfile, [ --with-mkoctfile mkoctfile command], [ MKOCTFILE=$withval ]) AC_PATH_PROG(MKOCTFILE, $MKOCTFILE) test -z "$MKOCTFILE" && AC_MSG_WARN([no mkoctfile found in the path]) if test -z "$MKOCTFILE" || test -z "$OCTAVE_OCT_DIR" || test -z "$OCTAVE_M_DIR"; then octave_support="no" AC_MSG_WARN([Octave support disabled]) else octave_support="yes" fi else # do_octave == yes octave_support="no" fi AC_PATH_PROG(PDFLATEX, [pdflatex]) test -z "$PDFLATEX" && AC_MSG_WARN([pdflatex not found in the path]) AM_CONDITIONAL(OCTAVE_SUPPORT, test "$octave_support" = "yes" ) AM_CONDITIONAL(PPM_SUPPORT, test "$netpbm_support" = "yes" ) AM_CONDITIONAL(OPENEXR_SUPPORT, test "$openexr_support" = "yes" ) AM_CONDITIONAL(TIFF_SUPPORT, test "$tiff_support" = "yes" ) AM_CONDITIONAL(JPEGHDR_SUPPORT, test "$jpeghdr_support" = "yes" ) AM_CONDITIONAL(IMAGEMAGICK_SUPPORT, test "$imagemagick_support" = "yes" ) AM_CONDITIONAL(QT_SUPPORT, test "$QT_SUPPORT" = "yes" ) AM_CONDITIONAL(PDFLATEX_SUPPORT, test -n "$PDFLATEX" ) AM_CONDITIONAL(GL_SUPPORT, test "$gl_support" = "yes" ) AM_CONDITIONAL(MATLAB_SUPPORT, test "$matlab_support" = "yes" ) AM_CONDITIONAL(GDAL_SUPPORT, test "$gdal_support" = "yes" ) AC_SUBST(MKOCTFILE) AC_SUBST(OCTAVE_M_DIR) AC_SUBST(OCTAVE_OCT_DIR) AC_CONFIG_FILES([ Makefile ]) AC_CONFIG_FILES([ src/Makefile ]) AC_CONFIG_FILES([ src/pfs/Makefile ]) AC_CONFIG_FILES([ src/pfs/pfs.pc ]) AC_CONFIG_FILES([ src/fileformat/Makefile ]) AC_CONFIG_FILES([ src/filter/Makefile ]) AC_CONFIG_FILES([ src/octave/Makefile ]) AC_CONFIG_FILES([ src/pfsview/Makefile ]) AC_CONFIG_FILES([ src/pfsglview/Makefile ]) AC_CONFIG_FILES([ src/matlab/Makefile ]) AC_CONFIG_FILES([ doc/Makefile ]) AC_CONFIG_FILES([ src/fileformat/pfsin ]) AC_CONFIG_FILES([ src/fileformat/pfsout ]) AC_CONFIG_FILES([ src/fileformat/pfsindcraw ]) AC_CONFIG_FILES([ src/fileformat/pfsinmulti ]) AC_CONFIG_FILES([ src/pfsview/pfsv ]) AC_CONFIG_FILES([ src/hdrhtml/Makefile ]) AC_OUTPUT AC_MSG_RESULT([ pfstools is now configured for ${host} Source directory: $srcdir Installation prefix: $prefix C++ compiler: $CXX $XTRA_CXXFLAGS $WARN_CXXFLAGS $CXXFLAGS Data directory: $PKG_DATADIR Bash shell: $BASH_PATH Octave $octave_support octave-m-dir: $OCTAVE_M_DIR octave-oct-dir: $OCTAVE_OCT_DIR mkoctfile: $MKOCTFILE Matlab $matlab_support matlab-dir: $MEX_DIR mex: $MEX NetPBM $netpbm_support]) if test "x$netpbm_support" = "xyes" ; then AC_MSG_RESULT([ LIBS: $NETPBM_LIBS]) AC_MSG_RESULT([ CFLAGS: $NETPBM_CFLAGS]) else AC_MSG_RESULT([ The following command(s) WILL NOT be compiled: pfsinppm pfsoutppm]) fi AC_MSG_RESULT([ TIFF $tiff_support]) if test "x$tiff_support" = "xyes" ; then AC_MSG_RESULT([ LIBS: $TIFF_LIBS]) else AC_MSG_RESULT([ The following command(s) WILL NOT be compiled: pfsintiff pfsouttiff]) fi AC_MSG_RESULT([ OpenEXR $openexr_support]) if test "x$openexr_support" = "xyes" ; then AC_MSG_RESULT([ CFLAGS: $OPENEXR_CFLAGS LIBS: $OPENEXR_LIBS]) else AC_MSG_RESULT([ The following command(s) WILL NOT be compiled: pfsinexr pfsoutexr]) fi AC_MSG_RESULT([ ImageMagick++ $imagemagick_support]) if test "x$imagemagick_support" = "xyes" ; then AC_MSG_RESULT([ CFLAGS: $IMAGEMAGICK_CFLAGS LIBS: $IMAGEMAGICK_LIBS]) else AC_MSG_RESULT([ The following command(s) WILL NOT be compiled: pfsinimgmagick pfsoutimgmagick pfsouthdrhtml]) fi AC_MSG_RESULT([ JPEG-HDR $jpeghdr_support]) if test "x$jpeghdr_support" = "xyes" ; then AC_MSG_RESULT([ LIBS: $JPEGHDR_LIBS]) else AC_MSG_RESULT([ The following command(s) WILL NOT be compiled: pfsinjpeghdr pfsoutjpeghdr]) fi AC_MSG_RESULT([ GDAL $gdal_support]) if test "x$gdal_support" = "xyes" ; then AC_MSG_RESULT([ LIBS: $GDAL_LIBS ]) else AC_MSG_RESULT([ The following command(s) WILL NOT be compiled: pfsingdal]) fi AC_MSG_RESULT([ QT $QT_SUPPORT]) if test "x$QT_SUPPORT" = "xyes" ; then AC_MSG_RESULT([ QTDIR: $QTDIR CFLAGS: $QT_CFLAGS LIBS: $QT_LIBS MOC: $MOC ]) else AC_MSG_RESULT([ The following command(s) WILL NOT be compiled: pfsview pfsv]) fi AC_MSG_RESULT([ OpenGL $gl_support]) if test "x$gl_support" = "xyes" ; then AC_MSG_RESULT([ CFLAGS: $GL_CFLAGS LIBS: $GL_LIBS ]) else AC_MSG_RESULT([ The following command(s) WILL NOT be compiled: pfsglview]) fi AC_MSG_RESULT([ Debug mode $enable_debug $HINTS ]) if test "$QT_SUPPORT" = "no"; then AC_MSG_RESULT([ * To enable QT support, try specifying either --with-qtdir, or a triple --with-qtinclude, --with-qtlibs, --with-moc. ]) fi pfstools-1.8.5/README.matlab0000775000175000017500000000737711151364230012455 00000000000000 Matlab interface to pfstools can be found in src/matlab. It contains both .m and mex functions, which need to be compiled before can be used. Once pfstools is properly installed, you can browse help: doc pfstools_matlab or cd doc ./Contents.m If you have problems running some functions, you can execute (from matlab): pfs_test_shell to diagnose for common problems. Follow the instructions below to install matlab interface to pfstools. Linux installation =================== * Run './configure' then 'make install' as for ordinary installation 'configure' script may fail to detect matlab support. The most common problem is missing or wrong matlab "mex" compiler in the PATH. On some Linux distributions matlab "mex" command can be replaced with octave mex command . In such case, you have to explicitly specify mex path by passing --with-mex= to the 'configure' script. * Add directory INSTALLDIR/share/pfstools/pfstools_matlab to matlab path (File->Set Path). Windows installation =================== Under Windows you have to invoke NMAKE file manually. From ordinary DOS shell (not cygwin), cd to src/matlab, then execute: (path to your matlab instalation)/matlab/R2006b/bin/mex.bat -setup mex.bat will ask to choose a configuration. Choose the one compatible with your Visual Studio installation. then execute: NMAKE -f Makefile.win32 We tested compilation on Win32 with VS C++ compiler. cygwin and pfstools must be installed. Then include this directory in matlab's path (File/SetPath in maltab IDE menu). You may need to modify pfs_shell() function that should return the command line for executing 'bash' from DOS shell. Many matlab pfs_* functions need to execute shell functions, for example pfsin. To make sure that they can be executed from matlab, all environmental variables must be set. Currently this is done by the pfs_shell function, which extends command line so that pfs* commands are executed from bash (assuming that bash sets all necessary environmental variables in .bashrc). If bash is not your default shell, you may need to change this. Good luck. If no good-luck, then below is a loosely written trouble shooting: 1. From matlab, execute 'pfs_test_shell'. The function will perform a few tests for the most common pfstools/matlab setup problems and will suggest the most likely solution. 2. You can select a compiler for mex files using "mex -setup" If you have more than one compiler, for instance you owe a Visual Studio, then try various compilers. Sometimes things work with VC 8.0, but not with VC 6.0, and sometimes the other way around. 3. If you want to compile with Visual Studio, use the "Visual Studio 200X Command Prompt" DOS shell. Especially if "nmake" doesn't seem to be on your system. 4. All supplied Mex files do not depend on any library. So if you have a problem within Matlab which looks like "The specified module could not be found." it's not related to shared libraries. But it maybe related to incompatible Visual Studio libraries, see point 1. 5. If you got everything running and type "pfsview(my_image)" and nothing shows up: Check if X-Win32 or other X server is running, type "pfs_shell" in Matlab and check if path is correct (and possibly adjust the path in pfs_shell.m). Add a line to $HOME/.bash_login containing "export DISPLAY=127.0.0.1:0" 6. Under Windows, if your Cygwin installation is not in c:\cygwin set Windows global variable: CYGWIN_HOME='c:\MyDirectory\cygwin' Of course, c:\MyDirectory should be replaced with a right path. Known problems: * Under Windows shell window flashes each time pfsput / pfsget command is executed * pfs channel tags are not written to a pfs-stream. Not channel specific tags are written properly * Some file handles may not be closed properly
" + "

HDR HTML Viewer

" + "v1.0 (C) 2008 Rafal Mantiuk | pfsTools
" + "v1.7 mod 2010 Christian Bloch | HDR Labs
" + "
  • Change exposure by sliding the dynamic range window left and right. Or just use the scroll wheel.
  • " + "
  • Press \"-\" and \"=\" keys to change exposure by 1 f-stop.
  • " + "
  • The green plot represents the HDR histogram. EV value is given in f-stops (log2 units) " + "relative to the inital exposure.
  • " + "
  • The exposure window / slider encompasses 8 f-stops.
  • " + "