hdf5/0000755000175100001440000000000011562517271011125 5ustar hornikusershdf5/DESCRIPTION0000644000175100001440000000045511562522533012634 0ustar hornikusersPackage: hdf5 Version: 1.6.10 Title: HDF5 Author: Marcus G. Daniels mdaniels@lanl.gov Maintainer: Marcus G. Daniels Description: Interface to the NCSA HDF5 library License: GPL (>= 2) Packaged: 2011-05-11 14:35:37 UTC; felipe Repository: CRAN Date/Publication: 2011-05-11 15:03:55 hdf5/NAMESPACE0000644000175100001440000000004611562350774012347 0ustar hornikusersexport(hdf5load,hdf5save,hdf5cleanup) hdf5/cleanup0000755000175100001440000000003211562350774012500 0ustar hornikusers#!/bin/sh rm -f config.* hdf5/ChangeLog0000644000175100001440000000452511562517123012701 0ustar hornikusers2011-05-11 Felipe Barriga Richards * DESCRIPTION (Version): Bump. 2009-01-11 Marcus G. Daniels * configure.win: Use R_PACKAGE_DIR instead of DPKG. * DESCRIPTION (Version): Bump. 2008-11-16 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2008-06-15 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2007-04-16 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2007-04-14 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2005-05-06 Marcus G. Daniels * configure.win: New files. Copies HDF5 and dependent DLLs to library/hdf5/libs. 2005-05-05 Marcus G. Daniels * NAMESPACE: Dropped useDynLib. Will now explicitly dynload modules. DESCRIPTION: Bump version. 2002-03-01 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2002-03-01 Philippe Grosjean * win_readme.txt added to explain how to compile and install the libraries in Windows * Other changes in man and src 2001-12-14 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2001-08-06 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2001-06-25 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2001-04-12 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2001-04-10 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2001-04-09 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2001-04-04 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2001-03-31 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2001-03-11 Marcus G. Daniels * DESCRIPTION (Version): Bump. 2001-02-03 Marcus G. Daniels * DESCRIPTION (Maintainer): Add. (Version): Bump. 2000-08-19 Marcus G. Daniels * DESCRIPTION (Package): Bump. 2000-07-20 Marcus G. Daniels * DESCRIPTION (Package): Bump. 2000-07-16 Marcus G. Daniels * DESCRIPTION (Package): Bump. 2000-01-27 * configure.in: Add HDF5_PERS_SOFT check. hdf5/win_readme.txt0000644000175100001440000000230311562350774014001 0ustar hornikusershdf5 R package - Windows Read Me: --------------------------------- To compile and then use the hdf5 library, you need the Windows binary of the hdf5 library available at: http://hdf.ncsa.uiuc.edu. We tested it with the Windows binary version 1.4.3. Download the zip package and unzip it somewhere (for instance, in c:\temp; this dir will be called hereunder). 1) Compilation of the library: ------------------------------ - Unzip the current source files of the library in \src\hdf5, if it is not already done. - Copy hdf5dll.dll from \5-143-win\c\release\dll to \src\hdf5\src - Copy \5-143-win\c\release\include to \src\hdf5\src\include (all files in this dir) - Now you should compile successfully as usually with Rcmd INSTALL %R_HOME%\src\hdf5 - You can zip the dir \library\hdf5 for making installable Windows binary package 2) Installation of the hdf5 library: ------------------------------------ You cannot run function in this package if you do not put the corresponding hdf5dll.dll in your path... WARNING: using a different version of the dll than the one that was used for compilation could crash R! hdf5/configure.win0000644000175100001440000000054711562350774013636 0ustar hornikusers#!/bin/sh if test -z "$HDF5"; then HDF5=$HOME/hdf5-support fi if test -z "$R_PACKAGE_DIR" ; then R_PACKAGE_DIR=$DPKG fi mkdir $R_PACKAGE_DIR/libs #cp $HDF5/hdf5dll.dll $R_PACKAGE_DIR/libs #cp $HDF5/szlibdll.dll $R_PACKAGE_DIR/libs #cp $HDF5/zlib1.dll $R_PACKAGE_DIR/libs cp $HDF5/cyghdf5-0.dll $R_PACKAGE_DIR/libs cp $HDF5/mgwz.dll $R_PACKAGE_DIR/libs hdf5/configure0000755000175100001440000030751211562350774013047 0ustar hornikusers#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59. # # Copyright (C) 2003 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 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= ac_unique_file="DESCRIPTION" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT ZLIBCPPFLAGS ZLIBLDFLAGS HDF5CPPFLAGS HDF5LDFLAGS LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "enable_$ac_feature='$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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=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 ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && 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'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | 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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS # # 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 this package 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-zlib=DIR Use zlib installed in DIR --with-hdf5=DIR Use HDF5 installed in DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF Copyright (C) 2003 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 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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=. echo "PATH: $as_dir" done } >&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_sep= 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 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 `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 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 { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$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" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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 echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl 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 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.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. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$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 echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 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 -std1. */ int osf4_cc_array ['\x00' == 0 ? 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext 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 # Check whether --with-zlib or --without-zlib was given. if test "${with_zlib+set}" = set; then withval="$with_zlib" fi; if test -n "$with_zlib"; then ZLIBLDFLAGS=-L${with_zlib}/lib ZLIBCPPFLAGS=-I${with_zlib}/include fi # Check whether --with-hdf5 or --without-hdf5 was given. if test "${with_hdf5+set}" = set; then withval="$with_hdf5" fi; if test -n "$with_hdf5"; then HDF5LDFLAGS="-L${with_hdf5}/lib" if test `uname -s` != "Darwin"; then HDF5LDFLAGS="-Wl,-rpath,${with_hdf5}/lib" fi HDF5CPPFLAGS=-I${with_hdf5}/include fi LIBS=-lm CPPFLAGS="$ZLIBCPPFLAGS $HDF5CPPFLAGS $CPPFLAGS" LDFLAGS="$HDF5LDFLAGS $ZLIBLDFLAGS $LDFLAGS" echo "$as_me:$LINENO: checking for library containing inflate" >&5 echo $ECHO_N "checking for library containing inflate... $ECHO_C" >&6 if test "${ac_cv_search_inflate+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_inflate=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char inflate (); int main () { inflate (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_inflate="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_inflate" = no; then for ac_lib in z; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char inflate (); int main () { inflate (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_inflate="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_inflate" >&5 echo "${ECHO_T}$ac_cv_search_inflate" >&6 if test "$ac_cv_search_inflate" != no; then test "$ac_cv_search_inflate" = "none required" || LIBS="$ac_cv_search_inflate $LIBS" have_zlib=yes else have_zlib=no fi echo "$as_me:$LINENO: checking for library containing H5open" >&5 echo $ECHO_N "checking for library containing H5open... $ECHO_C" >&6 if test "${ac_cv_search_H5open+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_func_search_save_LIBS=$LIBS ac_cv_search_H5open=no cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char H5open (); int main () { H5open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_H5open="none required" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$ac_cv_search_H5open" = no; then for ac_lib in hdf5; do LIBS="-l$ac_lib $ac_func_search_save_LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char H5open (); int main () { H5open (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_search_H5open="-l$ac_lib" break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi LIBS=$ac_func_search_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_search_H5open" >&5 echo "${ECHO_T}$ac_cv_search_H5open" >&6 if test "$ac_cv_search_H5open" != no; then test "$ac_cv_search_H5open" = "none required" || LIBS="$ac_cv_search_H5open $LIBS" have_hdf5=yes else have_hdf5=no fi if test $have_zlib = no; then { { echo "$as_me:$LINENO: error: Can't find zlib" >&5 echo "$as_me: error: Can't find zlib" >&2;} { (exit 1); exit 1; }; } fi if test "$have_hdf5" = yes; then echo "$as_me:$LINENO: checking for sufficiently new HDF5" >&5 echo $ECHO_N "checking for sufficiently new HDF5... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { H5T_pers_t convtype = H5T_PERS_SOFT; H5Tclose ((hid_t) 0); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then have_hdf5=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 have_hdf5=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext echo "$as_me:$LINENO: result: $have_hdf5" >&5 echo "${ECHO_T}$have_hdf5" >&6 fi if test $have_hdf5 = no; then { { echo "$as_me:$LINENO: error: Can't find HDF5" >&5 echo "$as_me: error: Can't find HDF5" >&2;} { (exit 1); exit 1; }; } fi ac_config_files="$ac_config_files src/Makevars" 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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!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" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then we branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. cat >confdef2opt.sed <<\_ACEOF t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g p _ACEOF # We use echo to avoid assuming a particular line-breaking character. # The extra dot is to prevent the shell from consuming trailing # line-breaks from the sub-command output. A line-break within # single-quotes doesn't work because, if this script is created in a # platform that uses two characters for line-breaks (e.g., DOS), tr # would break. ac_LF_and_DOT=`echo; echo .` DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # 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 # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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 { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by $as_me, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -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 --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; 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 if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "src/Makevars" ) CONFIG_FILES="$CONFIG_FILES src/Makevars" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@ZLIBCPPFLAGS@,$ZLIBCPPFLAGS,;t t s,@ZLIBLDFLAGS@,$ZLIBLDFLAGS,;t t s,@HDF5CPPFLAGS@,$HDF5CPPFLAGS,;t t s,@HDF5LDFLAGS@,$HDF5LDFLAGS,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi hdf5/man/0000755000175100001440000000000011562350774011703 5ustar hornikusershdf5/man/hdf5.Rd0000644000175100001440000001001311562515231013002 0ustar hornikusers\name{hdf5} \title{Interface to the HDF5 Library} \alias{hdf5save} \alias{hdf5load} \alias{hdf5cleanup} % added by Ph. Grosjean % synopsis added with hdf5cleanup to avoid warning on undocumented function % added by Ph. Grosjean (phgrosjean@sciviews.org) - 01/03/2002 \synopsis{ hdf5save(fileout, ...) hdf5load(file, load = TRUE, verbosity = 0, tidy = FALSE, dataset = "") hdf5cleanup(fid) } \usage{ hdf5save(fileout, \dots) hdf5load(file, load = TRUE, verbosity = 0, tidy = FALSE, dataset = "") } \arguments{ \item{fileout}{the name of the file in which the objects will be stored.} \item{\dots}{the names of the objects to be saved.} % This is the original instructions for "load", but they don't % describe what happens. % \item{load}{a logical value. If \code{FALSE}, a character vector % containing the names of the objects in the file is returned. % If \code{TRUE} (the default), the objects are returned as the % components of a named list.} \item{file}{The name of an HDF5 file to be read in.} \item{load}{A logical value. If \code{FALSE}, the objects are returned as the components of a named list. If \code{TRUE} (the default), the objects are loaded as individual variables with their own names -- the function returns nothing in this case.} \item{verbosity}{An integer controlling the verbosity. With \code{verbosity = 0} (the default) the hdf5 file is loaded quietly. With \code{verbosity = 1} names of groups and datasets are printed as they are encountered -- this can be reassuring if you have a large file which is taking a while to load. Greater values of verbosity produce more messages which are probably only useful for debugging.} \item{tidy}{A logical value. If \code{FALSE} (the default), the names of the \R objects will be the same as the HDF5 groups and datasets. HDF5 names can contain various characters which are not permissible in \R variable names (e.g. +, -, \_, space, etc.). If \code{tidy = TRUE}, then all these characters are converted to ".". Also if The first character will also be converted to "." if it is a digit. This is clearly not foolproof as "foo+" and "foo-" will both be tidied to "foo.". Also if the name is a reserved word (e.g. 'C', 'c', 'D', etc) an undercore will be appended at the end of the word (e.g. 'C' will be 'C_').} \item{dataset}{The name of the dataset to load. If you don't specify this parameter or you set it to \code{dataset = ""} (the default) all datasets will be loaded.} } \description{ \code{hdf5save} and \code{hdf5load} provide an experimental interface to the NCSA HDF5 library. } \details{ \code{hdf5save} writes a representation of \R objects to the specified file in a form which can be read by software which understands the HDF5 format. The objects can be read back from the file at a later date by using the function \code{hdf5load}. Not all \R types are supported and it probably doesn't make sense to put some of them into an HDF file (e.g. closures). However, lists, strings, vectors, matrices, and higher-dimensional arrays work. Lists map to HDF groups. Vectors and matrices map to datasets. This capability is only available on machines which have the HDF5 library, version 1.2 or higher (freely available from the reference below). } \author{Marcus G. Daniels \email{mgd@swarm.org}, Hugh C. Pumphrey \email{H.C.Pumphrey@ed.ac.uk}, Philippe Grosjean \email{phgrosjean@sciviews.org}, Felipe Barriga Richards \email{spam@felipebarriga.cl}} \references{\url{http://hdf.ncsa.uiuc.edu}} \seealso{ \code{\link[base]{save}}, \code{\link[base]{load}} } \examples{ (m <- cbind(A = 1, diag(4))) ll <- list(a=1:10, b=letters[1:8]); l2 <- list(C="c", l=ll); PP <- pi D <- list(a=1:10) q <- list(b=10:1) hdf5save("ex1.hdf", "m","PP","ll","l2", "D", "q") rm(m,PP,ll,l2,D,q) # and reload them: hdf5load("ex1.hdf",verbosity=3, tidy = TRUE) m # read from "ex1.hdf"; buglet: dimnames dropped str(ll) str(l2) str(D_) mean(q_$b) } \keyword{file} hdf5/src/0000755000175100001440000000000011562517271011714 5ustar hornikusershdf5/src/hdf5.c0000644000175100001440000014556711562350774012733 0ustar hornikusers/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1998-2003 Marcus G. Daniels * * 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 */ #define USE_RINTERNALS #include #include #include #include #include #define H5_USE_16_API #include #include // isalpha #include // abort #define STRING2REF_CONV "string->ref" #define REF2STRING_CONV "ref->string" /* FIXME: should really use SEXP R_RowNamesSymbol : */ #define ROWNAMES "row.names" #define MAX_ROWNAMES_COUNT 100000 #if R_VERSION < R_Version(2, 3, 0) #define warningcall Rf_warningcall void warningcall (SEXP call, const char *format, ...); #define errorcall Rf_errorcall void errorcall (SEXP call, const char *format, ...); #endif /* global variables */ int hdf5_global_verbosity = 3; int hdf5_global_nametidy = 0; int hdf5_global_attrcnt; const char *specificDataset; #if ((H5_VERS_MAJOR > 1) || (H5_VERS_MAJOR == 1 && H5_VERS_MINOR > 6) || (H5_VERS_MAJOR == 1 && H5_VERS_MINOR == 6 && H5_VERS_RELEASE >= 3)) && 1 #define count_size_t size_t #else #define count_size_t hsize_t #endif void nametidy (char *name) { /* This function operates on a string to remove any chars regarded by R as not suitable for a variable name i.e. the first char must be alpha or . and the rest can also be digits */ unsigned i; if (!isalpha (name[0]) && name[0] !='.') name[0] = '.'; for (i = 1; i < strlen (name); i++) if(!isalnum (name[i]) && name[i] !='.') name[i] = '.'; if (strlen(name) == 1) { if ( (name[0] == 'D') || (name[0] == 'T') || (name[0] == 'C') || (name[0] == 'F') || (name[0] == 'I') || (name[0] == 'q') || (name[0] == 't') || (name[0] == 'c')) { sprintf(name, "%s_", name); } } } static herr_t ref_string (hid_t sid, hid_t did, H5T_cdata_t *cdata, count_size_t count, size_t stride, size_t bkg_stride, void *buf, void *bkg, hid_t dset_xfer_plid) { if (cdata->command == H5T_CONV_CONV) { char *srcbuf[count]; char *destbuf = buf; char **recptr = srcbuf; size_t i; size_t maxlen = H5Tget_size (did); memcpy (srcbuf, buf, sizeof (srcbuf)); for (i = 0; i < count; i++) { strncpy (destbuf, *recptr, maxlen); recptr++; destbuf += maxlen; } } return 0; } static herr_t string_ref (hid_t sid, hid_t did, H5T_cdata_t *cdata, count_size_t count, size_t stride, size_t bkg_stride, void *buf, void *bkg, hid_t dset_xfer_plid) { if (cdata->command == H5T_CONV_CONV) { size_t size = H5Tget_size (sid); char srcbuf[size * count], *srcptr = srcbuf; char cstring[size+1]; size_t i; /* `count' is the number of strings in the array. size is the number of chars in each string. HDF5 string arrays are not ragged, so there is one value of size for all the elements of the dataset */ if (hdf5_global_verbosity > 1) Rprintf ("in string_ref: count=%d, size=%d srcbf=%d\n", (int) count,(int) size, sizeof(srcbuf)); /* Copy the whole array of strings from buf to srcbuf */ memcpy (srcbuf, buf, sizeof (srcbuf)); /* now copy the strings into an R string array, one at a time */ for (i = 0; i < count; i++) { char **ptr = &(((char **) buf)[i]); /* The next lines are necessary to ensure that each element of the array is null-terminated. HDF5 files can contain arrays of Fortran strings which are space-padded, not null-terminated */ strncpy (cstring, srcptr, size); cstring[size]='\0'; *ptr = Calloc (strlen (cstring) + 1, char); if (!*ptr) abort (); strcpy (*ptr, cstring); srcptr += size; } if (hdf5_global_verbosity > 1) Rprintf ("leaving string_ref\n"); } return 0; } struct permute_info { SEXP call; int writeflag; SEXPTYPE type; unsigned rank; hsize_t *dims; hssize_t *coord; hid_t dataset; hid_t memtid; hid_t space; long tmpcnt; void *buf; void *tmpbuf; }; static void permute (struct permute_info *pinfo, unsigned dimnum) { /* With large datasets, a great deal too much time (sometimes a * quasi-infinite amount!) was spent in this function. This was * because it was reading the dataset one element at a time. HCP * changed this so that the data is read in one go into tmpbuf * _before_ permute is called. permute then rearranges it.*/ hssize_t i; if (dimnum < pinfo->rank) { for (i = 0; i < pinfo->dims[dimnum]; i++) { pinfo->coord[dimnum] = i; permute (pinfo, dimnum + 1); } } else { unsigned offset, mult; offset = pinfo->coord[0]; mult = 1; for (i = 1; i < pinfo->rank; i++) { mult *= pinfo->dims[i - 1]; offset += pinfo->coord[i] * mult; } switch (pinfo->type) { case STRSXP: { if (pinfo->writeflag) { const char **tmpaddr; tmpaddr = &((const char **) pinfo->tmpbuf)[pinfo->tmpcnt]; *tmpaddr = CHAR (STRING_ELT (pinfo->buf, offset)); } else { char *ptr = ((char **) pinfo->tmpbuf)[pinfo->tmpcnt]; SET_STRING_ELT (pinfo->buf, offset, mkChar (ptr)); } } break; case VECSXP: abort (); break; case REALSXP: { double *pointaddr, *tmpaddr; pointaddr = &((double *) pinfo->buf)[offset]; tmpaddr = &((double *) pinfo->tmpbuf)[pinfo->tmpcnt]; if (pinfo->writeflag) *tmpaddr = *pointaddr; else *pointaddr = *tmpaddr; } break; case INTSXP: { int *pointaddr, *tmpaddr; pointaddr = &((int *) pinfo->buf)[offset]; tmpaddr = &((int * ) pinfo->tmpbuf)[pinfo->tmpcnt]; if (pinfo->writeflag) *tmpaddr = *pointaddr; else *pointaddr = *tmpaddr; } break; case LGLSXP: { int *pointaddr; unsigned char *tmpaddr; pointaddr = &((int *) pinfo->buf)[offset]; tmpaddr = &((unsigned char *) pinfo->tmpbuf)[pinfo->tmpcnt]; if (pinfo->writeflag) *tmpaddr = *pointaddr; else *pointaddr = *tmpaddr; } break; default: errorcall (pinfo->call, "No support for R type: %d", pinfo->type); /*pointaddr = &offset; unreached; -Wall */ } pinfo->tmpcnt++; } return ; } /* end of permute */ static hid_t make_sexp_ref_type (SEXP call) { hid_t memtid; if ((memtid = H5Tcopy (H5T_STD_REF_OBJ)) < 0) errorcall (call, "Unable to copy H5T_STD_REF_OBJ"); #if 0 if (H5Tset_size (memtid, sizeof (SEXPREC *)) < 0) errorcall (call, "unable to set size of reference type"); #endif return memtid; } static hid_t get_string_type (SEXP call, SEXP vec) { hid_t stid; unsigned vecpos; size_t maxstrlen = 0; int vlen = LENGTH (vec); for (vecpos = 0; vecpos < vlen; vecpos++) { const char *str = CHAR (STRING_ELT (vec, vecpos)); size_t len = strlen (str); if (len > maxstrlen) maxstrlen = len; } if ((stid = H5Tcopy (H5T_C_S1)) < 0) errorcall (call, "Cannot copy string type"); if (H5Tset_size (stid, maxstrlen + 1) < 0) errorcall (call, "Cannot set size of string type"); return stid; } static hid_t make_boolean_type (SEXP call) { hid_t tid; if ((tid = H5Tcopy (H5T_NATIVE_UINT)) < 0) errorcall (call, "Cannot copy unsigned integer type"); if (H5Tset_precision (tid, 1) < 0) errorcall (call, "Cannot set precision of boolean type"); if (H5Tset_size (tid, 1) < 0) errorcall (call, "Cannot set size of boolean type"); return tid; } static void load_scalar (SEXP call, hid_t dataset, hid_t space, SEXP obj) { SEXPTYPE type = TYPEOF (obj); void *buf; hid_t tid, memtid; if ((tid = H5Dget_type (dataset)) < 0) errorcall (call, "Unable to get type for dataset"); if (H5Tget_class (tid) == H5T_COMPOUND) errorcall (call, "Not equipped to load compound scalar"); switch (type) { case STRSXP: { size_t size = H5Tget_size (tid); if (sizeof (char *) > size) size = sizeof (char *); memtid = make_sexp_ref_type (call); buf = R_chk_calloc (1, size * 2); } break; case REALSXP: memtid = H5T_NATIVE_DOUBLE; buf = REAL (obj); break; case INTSXP: memtid = H5T_NATIVE_INT; buf = INTEGER (obj); break; case LGLSXP: memtid = make_boolean_type (call); buf = LOGICAL (obj); break; default: errorcall (call, "Can't get type for R type: %d (IO)", type); /* unreached (-Wall): */ memtid = tid; buf = &tid; } if (H5Dread (dataset, memtid, space, space, H5P_DEFAULT, buf) < 0) errorcall (call, "Unable to read dataset"); if (type == STRSXP) { SET_STRING_ELT (obj, 0, mkChar (buf)); R_chk_free (buf); } if (type == LGLSXP) if (H5Tclose (memtid) < 0) errorcall (call, "can't close boolean type"); } static void vector_io (SEXP call, int writeflag, hid_t dataset, hid_t space, SEXP obj) { int rank = H5Sget_simple_extent_ndims (space); hsize_t dims[rank], maxdims[rank]; /* WARNING: Don't make bufsize a hsize_t. If you do this, then bufsize=-1 ; if(bufsize>0) is (ludicrously) regarded as true. We therefore make bufsize a long and cast it to a hsize_t when we pass it to a HDF5 routine. There are known weirdnesses regarding hsize_t and gcc which may be a compiler bug and this is probably another example. */ long bufsize = 0; SEXPTYPE type = TYPEOF (obj); hid_t memtid, tid, plist; void *buf; void *tmpbuf = NULL; long n_elements,i; if (hdf5_global_verbosity > 3) Rprintf ("in vector_io: rank=%d\n",rank); if ((tid = H5Dget_type (dataset)) < 0) errorcall (call, "Unable to get type for dataset"); if (H5Sget_simple_extent_dims (space, dims, maxdims) < 0) errorcall (call, "Unable to get dimensions of space"); /* calculate the total number of elements in the dataset */ n_elements = 1; for (i = 0; i < rank; i++) { if (hdf5_global_verbosity > 3) Rprintf ("in vector_io:size %d = %d into n_elements..",i,dims[i]); n_elements = n_elements * dims[i]; if (hdf5_global_verbosity > 3) Rprintf ("....=%d\n ",n_elements); } switch (type) { case STRSXP: { size_t size; memtid = make_sexp_ref_type (call); buf = obj; if (!writeflag) { size = H5Tget_size (tid); if (sizeof (char *) > size) size = sizeof (char *); bufsize = n_elements * size; /* this accomplishes two things: 1) it avoids buffer-too-small errors from HDF5 for small strings 2) it ensures that the string set is read in one pass, and the string vector fully populated (as opposed to several reads that fill only half of it. */ bufsize *= 2; tmpbuf = Calloc (bufsize, char); } else { tmpbuf = Calloc (n_elements, char *); bufsize = -1; } if (!tmpbuf) abort (); } break; case REALSXP: memtid = H5T_NATIVE_DOUBLE; buf = REAL (obj); tmpbuf = R_alloc (n_elements, sizeof (double)); bufsize = n_elements * sizeof (double); break; case INTSXP: memtid = H5T_NATIVE_INT; buf = INTEGER (obj); tmpbuf = R_alloc (n_elements, sizeof (int)); bufsize = n_elements * sizeof (int); break; case LGLSXP: memtid = make_boolean_type (call); buf = LOGICAL (obj); tmpbuf = R_alloc (n_elements, sizeof (unsigned char)); bufsize = n_elements * sizeof (unsigned char); break; default: errorcall (call, "Can't get type for R type: %d (IO)", type); /* unreached (-Wall): */ memtid = tid; buf = &tid; } /* set type conversion buffer size in property list . In most circs, you don't have to do this, but if you have an array with dims a x b x c x d x .... and b x c x d x ..... adds up to > 1MB then HDF5 will barf. */ if (bufsize > 0) { if (hdf5_global_verbosity > 2) Rprintf ("Setting buffer size in plist\n"); plist = H5Pcreate(H5P_DATASET_XFER); if (H5Pset_buffer (plist, ((hsize_t) bufsize), NULL, NULL) < 0) errorcall (call,"Unable to set buffer size in property list"); } else { if (hdf5_global_verbosity > 2) Rprintf ("Using default transfer plist\n"); plist = H5P_DEFAULT; } /* Read data into temporary buffer before permuting it */ if (!writeflag) { if (hdf5_global_verbosity > 2) Rprintf ("About to read with bufsize = %d\n",bufsize); if (H5Dread (dataset, memtid, H5S_ALL, H5S_ALL, plist, tmpbuf) < 0) errorcall (call, "Unable to read dataset"); if (hdf5_global_verbosity > 2) Rprintf (" Done read\n"); } if (hdf5_global_verbosity > 2) Rprintf ("in vector_io: permuting\n"); { struct permute_info pinfo; hssize_t coord[rank]; pinfo.call = call; pinfo.writeflag = writeflag; pinfo.type = type; pinfo.rank = rank; pinfo.coord = coord; pinfo.dims = dims; pinfo.dataset = dataset; pinfo.memtid = memtid; pinfo.space = space; pinfo.buf = buf; pinfo.tmpbuf = tmpbuf; pinfo.tmpcnt = 0; /* The grinding slowness happened inside this call to permute() and was caused quite specifically by calling H5Dread() with a dataset size of 1 for every element of the dataset. The fix I have applied is to have an o/p buffer tmpbuf as big as obj that we do the read/write to/from and use permute to transfer data from tmpbuf to buf. If we read directly into buf the indices get scrambled. Whatever permute does to them is necessary.*/ permute (&pinfo, 0); if (writeflag) { if (hdf5_global_verbosity > 2) Rprintf ("About to write\n"); if (H5Dwrite (dataset, memtid, H5S_ALL, H5S_ALL, plist, tmpbuf) < 0) errorcall (call, "Unable to write dataset"); if (hdf5_global_verbosity > 2) Rprintf ("About to write\n"); } else { if (type == STRSXP) Free (tmpbuf); } } if (hdf5_global_verbosity > 2) Rprintf ("in vector_io: tidying\n"); if (bufsize > 0) { if (H5Pclose(plist) < 0) errorcall (call, "Unable to close plist"); } if (type == STRSXP || type == LGLSXP) { if (H5Tclose (memtid) < 0) errorcall (call, "Unable to close reference type"); } } static void hdf5_save_attributes (SEXP call, hid_t loc_id, SEXP val) { SEXP l; for (l = ATTRIB (val); l != R_NilValue; l = CDR (l)) { SEXP attr = CAR (l); SEXPTYPE type = TYPEOF (attr); const char *name = CHAR (PRINTNAME (TAG (l))); void *buf; hid_t tid, memtid; hid_t sid, aid; unsigned count = LENGTH (attr); /*SEXPREC *stringptrs[count];*/ if (TAG (l) == R_RowNamesSymbol || TAG (l) == R_ClassSymbol || TAG (l) == R_NamesSymbol || TAG (l) == R_DimNamesSymbol) continue; { hsize_t dims[1]; dims[0] = count; if ((sid = H5Screate_simple (1, dims, NULL)) < 0) errorcall (call, "unable to create vector space for attribute `%s'", name); } if (type == STRSXP) { unsigned i; memtid = make_sexp_ref_type (call); tid = get_string_type (call, attr); buf = Calloc (count, const char *); for (i = 0; i < count; i++) ((const char **) buf)[i] = CHAR (STRING_ELT (attr, i)); } else if (type == LGLSXP) { memtid = make_boolean_type (call); tid = make_boolean_type (call); buf = LOGICAL (attr); } else if (type == INTSXP) { memtid = H5T_NATIVE_INT; tid = H5T_NATIVE_INT; buf = INTEGER (attr); } else if (type == REALSXP) { memtid = H5T_NATIVE_DOUBLE; tid = H5T_NATIVE_DOUBLE; buf = REAL (attr); } else abort (); if ((aid = H5Acreate (loc_id, name, tid, sid, H5P_DEFAULT)) < 0) errorcall (call, "unable to create attribute `%s'", name); if (H5Awrite (aid, memtid, buf) < 0) errorcall (call, "unable to write attribute `%s'", name); if (H5Aclose (aid) < 0) errorcall (call, "unable to close attribute `%s'", name); if (type == STRSXP || type == LGLSXP) { if (type == STRSXP) Free (buf); if (H5Tclose (memtid) < 0) errorcall (call, "unable to close string reference type `%s'", name); if (H5Tclose (tid) < 0) errorcall (call, "unable to close output type `%s'", name); } if (H5Sclose (sid) < 0) errorcall (call, "unable to close space for attribute `%s'", name); } } static void hdf5_write_vector (SEXP call, hid_t id, const char *symname, SEXP val) { unsigned i, rank; SEXP dimvec; hid_t space, dataset; SEXPTYPE type = TYPEOF (val); hid_t tid; dimvec = getAttrib (val, R_DimSymbol); rank = (dimvec == R_NilValue) ? 1 : LENGTH (dimvec); { hsize_t dims[rank]; if (rank > 1) for (i = 0; i < rank; i++) dims[i] = INTEGER (dimvec)[i]; else dims[0] = length(val); if ((space = H5Screate_simple (rank, dims, NULL)) < 0) errorcall (call, "Unable to create file dataspace"); if (type == STRSXP) tid = get_string_type (call, val); else if (type == LGLSXP) tid = make_boolean_type (call); else if (type == INTSXP) tid = H5T_NATIVE_INT; else if (type == REALSXP) tid = H5T_NATIVE_DOUBLE; else { errorcall (call, "Can't get type for R type: %d (Creating)", type); tid = H5T_NATIVE_INT;/*unreached; -Wall*/ } if ((dataset = H5Dcreate (id, symname, tid, space, H5P_DEFAULT)) < 0) errorcall (call, "Unable to create dataset"); vector_io (call, TRUE, dataset, space, val); hdf5_save_attributes (call, dataset, val); if (type == LGLSXP || type == STRSXP) if (H5Tclose (tid) < 0) errorcall (call, "Unable to close type"); if (H5Dclose (dataset) < 0) errorcall (call, "Unable to close dataset"); if (H5Sclose (space) < 0) errorcall (call, "Unable to close space"); } } static void hdf5_write_string (SEXP call, hid_t fid, const char *symname, const char *str) { hid_t stringtype; hid_t dataset; hid_t dataspace; dataspace = H5Screate (H5S_SCALAR); stringtype = H5Tcopy (H5T_C_S1); H5Tset_size (stringtype, strlen (str) + 1); if ((dataset = H5Dcreate (fid, symname, stringtype, dataspace, H5P_DEFAULT)) < 0) errorcall (call, "Unable to create dataset"); if (H5Dwrite (dataset, stringtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, str) < 0) errorcall (call, "Unable to write dataset"); H5Dclose (dataset); H5Sclose (dataspace); H5Tclose (stringtype); } static unsigned align (unsigned offset, unsigned alignto) { #if 0 unsigned mask = alignto - 1; if ((offset & mask) == 0) return offset; else return (offset + alignto) & ~mask; #else return offset; #endif } static void create_rownames_dataset_attribute (SEXP call, hid_t dataset, SEXP rownames) { unsigned rowcount = LENGTH (rownames); hid_t stringtid = get_string_type (call, rownames); hid_t rtid = make_sexp_ref_type (call); hid_t rnattrib, rndataspace; hsize_t dims[1]; const char **buf = Calloc (rowcount, const char *); unsigned i; dims[0] = rowcount; for (i = 0; i < rowcount; i++) buf[i] = CHAR (STRING_ELT (rownames, i)); if ((rndataspace = H5Screate_simple (1, dims, NULL)) < 0) errorcall (call, "Unable to create row names vector space"); if ((rnattrib = H5Acreate (dataset, ROWNAMES, stringtid, rndataspace, H5P_DEFAULT)) < 0) errorcall (call, "unable to create row names dataset"); if (H5Awrite (rnattrib, rtid, buf) < 0) errorcall (call, "unable to write row names dataset"); if (H5Aclose (rnattrib) < 0) errorcall (call, "unable to close row names dataset"); if (H5Sclose (rndataspace) < 0) errorcall (call, "unable to close row names dataspace"); if (H5Tclose (stringtid) < 0) errorcall (call, "unable to close row names string type"); if (H5Tclose (rtid) < 0) errorcall (call, "unable to close reference type"); Free (buf); } static void hdf5_save_object (SEXP call, hid_t fid, const char *symname, SEXP val) { if (isFrame (val)) { unsigned colcount = length (val), pos; size_t offsets[colcount]; hid_t hdftypes[colcount]; hid_t hdfbooltype; size_t size = 0; hdfbooltype = make_boolean_type (call); for (pos = 0; pos < colcount; pos++) { SEXPTYPE type = TYPEOF (VECTOR_ELT (val, pos)); switch (type) { case REALSXP: hdftypes[pos] = H5T_NATIVE_DOUBLE; break; case INTSXP: hdftypes[pos] = H5T_NATIVE_INT; break; case STRSXP: hdftypes[pos] = get_string_type (call, VECTOR_ELT (val, pos)); break; case LGLSXP: hdftypes[pos] = make_boolean_type (call); break; default: errorcall (call, "No support for converting R type: %d to HDF5", type); break; } if (H5Tget_class (hdftypes[pos]) == H5T_STRING) size = align (size, 8); else size = align (size, H5Tget_size (hdftypes[pos])); offsets[pos] = size; size += H5Tget_size (hdftypes[pos]); } size = align (size, H5Tget_size (hdftypes[0])); { hid_t ctid; hid_t dataset; hid_t dataspace; unsigned rowcount = length (VECTOR_ELT (val, 0)); { hsize_t dims[1]; dims[0] = rowcount; if ((dataspace = H5Screate_simple (1, dims, NULL)) < 0) errorcall (call, "Unable to create dataframe vector space"); } { SEXP colnames = getAttrib (val, R_NamesSymbol); if ((ctid = H5Tcreate (H5T_COMPOUND, size)) < 0) errorcall (call, "unable to create compound type"); for (pos = 0; pos < colcount; pos++) if (H5Tinsert (ctid, CHAR (STRING_ELT (colnames, pos)), offsets[pos], hdftypes[pos]) < 0) errorcall (call, "unable to insert type into compound type"); } if (H5Tpack (ctid) < 0) errorcall (call, "Unable to pack type"); if (H5Tlock (ctid) < 0) errorcall (call, "Unable to lock type"); if ((dataset = H5Dcreate (fid, symname, ctid, dataspace, H5P_DEFAULT)) < 0) errorcall (call, "unable to create dataframe dataset"); { unsigned ri; unsigned char buf[rowcount][size]; for (ri = 0; ri < rowcount; ri++) for (pos = 0; pos < colcount; pos++) { SEXP item = VECTOR_ELT (val, pos); SEXPTYPE type = TYPEOF (item); void *ptr = &buf[ri][offsets[pos]]; switch (type) { case REALSXP: memcpy (ptr, &REAL (item)[ri], sizeof (double)); break; case INTSXP: memcpy (ptr, &INTEGER (item)[ri], sizeof (int)); break; case STRSXP: { SEXP stritem = STRING_ELT (item, ri); memset (ptr, 0, H5Tget_size (hdftypes[pos])); strcpy ((char *)ptr, CHAR (stritem)); } break; case LGLSXP: *(unsigned char *) ptr = LOGICAL (item)[ri]; break; default: abort (); } } if (H5Dwrite (dataset, ctid, dataspace, dataspace, H5P_DEFAULT, buf) < 0) errorcall (call, "Unable to write dataframe"); } hdf5_save_attributes (call, dataset, val); if (rowcount < MAX_ROWNAMES_COUNT || MAX_ROWNAMES_COUNT == 0) { SEXP rownames = getAttrib (val, R_RowNamesSymbol); if (rownames != R_NilValue && isString (rownames)) create_rownames_dataset_attribute (call, dataset, rownames); } if (H5Dclose (dataset) < 0) errorcall (call, "Cannot close dataset"); if (H5Sclose (dataspace) < 0) errorcall (call, "Cannot close dataspace"); } for (pos = 0; pos < colcount; pos++) if (H5Tget_class (hdftypes[pos]) == H5T_STRING) if (H5Tclose (hdftypes[pos]) < 0) errorcall (call, "Cannot close string type"); if (H5Tclose (hdfbooltype) < 0) errorcall (call, "Cannot close boolean type"); } else if (isNull (val)) { hid_t gid; if ((gid = H5Gcreate (fid, symname, 0)) < 0) errorcall (call, "unable to create group"); if (H5Gclose (gid) < 0) errorcall (call, "unable to close group"); } else { SEXPTYPE type = TYPEOF (val); switch (type) { case LGLSXP: case INTSXP: case REALSXP: case STRSXP: hdf5_write_vector (call, fid, symname, val); break; case LISTSXP: case VECSXP: { unsigned len = length (val); hid_t gid; unsigned pos; char buf[(sizeof (pos) * 8 / 3 + 1) + 1]; if ((gid = H5Gcreate (fid, symname, len * 8)) < 0) errorcall (call, "unable to create group"); if (type == LISTSXP) { SEXP l; for (l = val, pos = 0; l != R_NilValue; l = CDR (l), pos++) { SEXP s = CAR (l); if (!isNull (TAG (l))) hdf5_save_object (call, gid, CHAR (PRINTNAME (TAG (l))), s); else { sprintf (buf, "%u", pos); hdf5_save_object (call, gid, buf, s); } } } else { for (pos = 0; pos < len; pos++) { SEXP s = VECTOR_ELT (val, pos); SEXP names = getAttrib (val, R_NamesSymbol); if (!isNull (names)) hdf5_save_object (call, gid, CHAR (STRING_ELT (names, pos)), s); else { sprintf (buf, "%u", pos); hdf5_save_object (call, gid, buf, s); } } } hdf5_save_attributes (call, gid, val); if (H5Gclose (gid) < 0) errorcall (call, "unable to close group"); } break; case SYMSXP: { const char *pn = CHAR (PRINTNAME (val)); hdf5_write_string (call, fid, symname, pn); } break; default: errorcall (call, "unhandled type: %d", type); break; } } } void setup_onexit (hid_t fid, SEXP env) { eval (lang2 (install ("on.exit"), lang2 (install ("hdf5cleanup"), ScalarInteger (fid))), env); } SEXP do_hdf5cleanup (SEXP args) { SEXP call, env; hid_t fid; args = CDR (args); call = CAR (args); args = CDR (args); env = CAR (args); args = CDR (args); if (TYPEOF (CAR (args)) != INTSXP) abort (); fid = (hid_t) INTEGER (CAR (args))[0]; H5Tunregister (H5T_PERS_SOFT, STRING2REF_CONV, -1, -1, string_ref); H5Tunregister (H5T_PERS_SOFT, REF2STRING_CONV, -1, -1, ref_string); if (H5Fclose (fid) < 0) errorcall (call, "unable to close HDF file"); return R_NilValue; } SEXP do_hdf5save (SEXP args) { int i, nobjs; const char *path; hid_t fid; SEXP s, env, call, names, sym; args = CDR (args); call = CAR (args); args = CDR (args); env = CAR (args); args = CDR (args); if (TYPEOF (CAR (args)) != STRSXP) errorcall (call, "first argument must be a pathname"); path = CHAR (STRING_ELT (CAR (args), 0)); H5dont_atexit (); if (H5Tregister (H5T_PERS_SOFT, REF2STRING_CONV, H5T_STD_REF_OBJ, H5T_C_S1, ref_string) < 0) errorcall (call, "Unable to register ref->string converter"); if ((fid = H5Fcreate (path, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) errorcall (call, "unable to create HDF file: %s", path); setup_onexit (fid, env); names = args = CDR (args); nobjs = length (names); if (nobjs < 1) errorcall (call, "no objects to save"); for (i = 0; i < nobjs; i++) { if (TYPEOF (CAR (names)) != STRSXP) errorcall (call, "expecting a symbol name"); { const char *name = CHAR (STRING_ELT (CAR (names), 0)); PROTECT (sym = install (name)); PROTECT (s = findVar (sym, env)); if (s == R_UnboundValue) errorcall (call, "symbol `%s' has no value", name); hdf5_save_object(call, fid, name, s); UNPROTECT(2); names = CDR (names); } } return names; } struct hdf5_iterate_info { SEXP call; void (*add) (struct hdf5_iterate_info *, const char *, SEXP); SEXP env; SEXP ret; }; static void add_to_list (struct hdf5_iterate_info *iinfo, const char *name, SEXP obj) { SEXP pair; char newname[strlen(name)+16]; memset(newname, '\0', strlen(name)+16); strcpy (newname,name); if (hdf5_global_nametidy) { if (hdf5_global_verbosity > 1) Rprintf(" Tidying name %s ", newname); nametidy (newname); } PROTECT (pair = CONS (obj, CDR (iinfo->ret))); TAG (pair) = install ((char *) newname); SETCDR (iinfo->ret, pair); UNPROTECT (1); if (hdf5_global_verbosity > 1 && hdf5_global_nametidy) Rprintf (".. to %s \n ",newname); if (hdf5_global_verbosity > 2) Rprintf ("Adding `%s' to list\n", newname); } static SEXP collect (SEXP call, hid_t id, H5G_iterate_t iterate_func, SEXP env) { struct hdf5_iterate_info iinfo; iinfo.call = call; iinfo.add = add_to_list; PROTECT (iinfo.ret = CONS (R_NilValue, R_NilValue)); iinfo.env = env; if (H5Giterate (id, ".", NULL, iterate_func, &iinfo) < 0) errorcall (call, "unable to collect HDF group"); UNPROTECT (1); return CDR (iinfo.ret); } static void load_rownames_dataset_attribute (SEXP call, hid_t dataset, SEXP vec) { hid_t rnattrib, rnspace, rntid; unsigned rowcount; SEXP rownames; H5E_auto_t errfunc; void *client_data; H5Eset_auto (NULL, NULL); rnattrib = H5Aopen_name (dataset, ROWNAMES); H5Eget_auto (&errfunc, &client_data); H5Eset_auto (errfunc, client_data); if (rnattrib < 0) { hid_t space; unsigned rank; if ((space = H5Dget_space (dataset)) < 0) errorcall (call, "unable to get dataset space"); if (H5Sis_simple (space) != TRUE) errorcall (call, "space not simple"); if ((rank = H5Sget_simple_extent_ndims (space)) < 0) errorcall (call, "unable to get space rank"); if (rank != 1) errorcall (call, "rank not 1"); { hsize_t dims[rank]; hsize_t maxdims[rank]; if (H5Sget_simple_extent_dims (space, dims, maxdims) < 0) errorcall (call, "unable to get space extent"); rowcount = dims[0]; } { SEXP rownames; PROTECT (rownames = allocVector (INTSXP, 2)); INTEGER(rownames)[0] = NA_INTEGER; INTEGER(rownames)[1] = rowcount; setAttrib (vec, R_RowNamesSymbol, rownames); UNPROTECT (1); } if (H5Sclose (space) < 0) errorcall (call, "unable to close dataset space"); return; } if ((rnspace = H5Aget_space (rnattrib)) < 0) errorcall (call, "could not get space for rownames attribute"); if ((rntid = H5Aget_type (rnattrib)) < 0) errorcall (call, "could not get element type of rownames attribute"); if (H5Sget_simple_extent_ndims (rnspace) != 1) errorcall (call, "rownames space should be of rank 1"); { hsize_t dims[1], maxdims[1]; if (H5Sget_simple_extent_dims (rnspace, dims, maxdims)< 0) errorcall (call, "can't get attribute space dims"); rowcount = dims[0]; } PROTECT (rownames = allocVector (STRSXP, rowcount)); { size_t insize = H5Tget_size (rntid); size_t outsize = sizeof (const char *); size_t size = (insize > outsize ? insize: outsize); const char **strptrs = (const char **) R_chk_calloc (rowcount, size * 2); unsigned ri; hid_t rtid = make_sexp_ref_type (call); if (H5Aread (rnattrib, rtid, strptrs) < 0) errorcall (call, "can't read rownames"); for (ri = 0; ri < rowcount; ri++) SET_STRING_ELT (rownames, ri, mkChar (strptrs [ri])); if (H5Tclose (rtid) < 0) errorcall (call, "can't close close reference type"); R_chk_free (strptrs); } setAttrib (vec, R_RowNamesSymbol, rownames); UNPROTECT (1); if (H5Sclose (rnspace) < 0) errorcall (call, "unable to close row name space"); if (H5Tclose (rntid) < 0) errorcall (call, "unable to close row name type"); if (H5Aclose (rnattrib) < 0) errorcall (call, "unable to close row name attribute"); } struct hdf5_attribute_info { SEXP call; SEXP obj; const char *name; }; /*static*/ herr_t hdf5_process_attribute (hid_t loc_id, const char *attrName, void *data) { struct hdf5_attribute_info *ainfo = data; hid_t aid, sid, tid; H5T_class_t class; size_t tid_size; char newname[strlen(attrName) +16]; memset(newname, '\0', strlen(attrName)+16); if (strcmp (attrName, ROWNAMES) == 0) { if (hdf5_global_verbosity > 1) Rprintf ("Skipping attribute %s\n", attrName); return 0; } hdf5_global_attrcnt++; if (hdf5_global_verbosity > 1) Rprintf ("Processing attribute %d called %s\n", hdf5_global_attrcnt,attrName); if ((aid = H5Aopen_name (loc_id, attrName)) < 0) errorcall (ainfo->call, "could not open attribute `%s'", attrName); if ((sid = H5Aget_space (aid)) < 0) errorcall (ainfo->call, "could not open space of attribute `%s'", attrName); if ((tid = H5Aget_type (aid)) < 0) errorcall (ainfo->call, "could not get type of attribute `%s'", attrName); if ((tid_size = H5Tget_size (tid)) < 0) errorcall (ainfo->call, "could not get size of attribute `%s' tid", attrName); if ((class = H5Tget_class (tid)) < 0) errorcall (ainfo->call, "could not get type class of attribute `%s'", attrName); { int rank,r_rank; if ((rank = H5Sget_simple_extent_ndims (sid)) < 0) errorcall (ainfo->call, "could not get rank of attribute space `%s'", attrName); if (hdf5_global_verbosity > 1) Rprintf ("attribute %s has rank %d \n",attrName,rank); if (rank == 0) r_rank = 1; else r_rank = rank; { hsize_t dims[r_rank]; if(rank == 1) { if (H5Sget_simple_extent_dims (sid, dims, NULL) < 0) errorcall (ainfo->call, "could not get extent of attribute space `%s'", attrName); } else { /* scalar, but we'll pretend it is a vector of length 1 */ dims[0] = 1; if (hdf5_global_verbosity > 2) Rprintf ("Rank 0 attribute treated as rank 1 size 1\n"); } if (r_rank == 1) { unsigned count = dims[0]; SEXPTYPE type; hid_t memtid; SEXP vec; void *buf; switch (class) { case H5T_INTEGER: if (tid_size == 1) { memtid = make_boolean_type (ainfo->call); type = LGLSXP; } else { memtid = H5Tcopy (H5T_NATIVE_INT); type = INTSXP; } break; case H5T_FLOAT: type = REALSXP; memtid = H5Tcopy (H5T_NATIVE_DOUBLE); break; case H5T_STRING: type = STRSXP; if (hdf5_global_verbosity > 2) Rprintf ("Attribute is a string\n"); memtid = make_sexp_ref_type (ainfo->call); break; default: warningcall (ainfo->call, "skipping attribute `%s' due to type", attrName); goto done; } PROTECT (vec = allocVector (type, count)); switch (class) { case H5T_INTEGER: if (tid_size == 1) buf = LOGICAL (vec); else buf = INTEGER (vec); break; case H5T_FLOAT: buf = REAL (vec); break; case H5T_STRING: { const char **ptr; size_t insize = H5Tget_size (tid); size_t outsize = sizeof (const char *); size_t size = insize > outsize ? insize : outsize; ptr = (const char **) R_chk_calloc (count, size * 2); buf = ptr; } break; default: abort (); } if (H5Aread (aid, memtid, buf) < 0) errorcall (ainfo->call, "unable to read attribute `%s'", attrName); if (class == H5T_STRING) { const char **ptr = buf; unsigned i; for (i = 0; i < count; i++) SET_STRING_ELT (vec, i, mkChar (ptr[i])); R_chk_free (buf); } if (hdf5_global_verbosity > 2) Rprintf ("string length of new name =%d\n",strlen(attrName)+1); strcpy(newname,attrName); if (hdf5_global_nametidy) { if (hdf5_global_verbosity > 1) Rprintf (" Tidying attribute name %s ",newname); nametidy (newname); if (hdf5_global_verbosity > 1) Rprintf("....to %s\n",newname); } if (!isNull (ainfo->obj)) setAttrib (ainfo->obj, install ((char *) newname), vec); UNPROTECT (1); if (H5Tclose (memtid) < 0) errorcall (ainfo->call, "unable to close reference type in attribute `%s'", attrName); } else warningcall (ainfo->call, "skipping attribute `%s' due to rank", attrName); } } done: if (H5Sclose (sid) < 0) errorcall (ainfo->call, "unable to close attribute `%s' space", attrName); if (H5Tclose (tid) < 0) errorcall (ainfo->call, "unable to close attribute `%s' type", attrName); if (H5Aclose (aid) < 0) errorcall (ainfo->call, "unable to close attribute `%s'", attrName); if (hdf5_global_verbosity > 1) Rprintf ("Done processing attribute %s\n",attrName); if (hdf5_global_attrcnt > 100) { Rprintf ("WTF? More than 100 attributes? \n"); return ((herr_t) 99); /* and here we sometimes get a seggie. Why?*/ } else return 0; } static void hdf5_load_attributes (SEXP call, hid_t id, SEXP obj, const char *name) { unsigned *idx = NULL; struct hdf5_attribute_info ainfo; herr_t retval; ainfo.call = call; ainfo.obj = obj; ainfo.name = name; hdf5_global_attrcnt = 0; retval = H5Aiterate (id, idx, hdf5_process_attribute, &ainfo); if (retval < 0) errorcall (call, "unable to iterate over attributes"); } static herr_t hdf5_process_object (hid_t id, const char *name, void *client_data) { struct hdf5_iterate_info *iinfo = client_data; H5G_stat_t statbuf; if (hdf5_global_verbosity > 0) Rprintf ("Processing object: %s ...",name); if ( (specificDataset != NULL) && (strcmp(name, specificDataset) != 0) ) { Rprintf (" is not going to be processed (Searching for %s) \n", specificDataset); return 0; } if (H5Gget_objinfo (id, name, 1, &statbuf) < 0) errorcall (iinfo->call, "Cannot query object `%s'", name); if (statbuf.type == H5G_GROUP) { SEXP l; hid_t gid = H5Gopen (id, name); if (hdf5_global_verbosity > 0) Rprintf ("... which is a Group \n"); if (gid < 0) errorcall (iinfo->call, "unable to open group `%s'", name); PROTECT (l = PairToVectorList (collect (iinfo->call, gid, hdf5_process_object, iinfo->env))); if (hdf5_global_verbosity > 2) Rprintf ("Adding `%s'\n", name); iinfo->add (iinfo, name, l); hdf5_load_attributes (iinfo->call, gid, l, name); UNPROTECT (1); if (H5Gclose (gid) < 0) errorcall (iinfo->call, "unable to close group"); if (hdf5_global_verbosity > 0) Rprintf ("... Done group %s \n",name); } else if (statbuf.type == H5G_DATASET) { hid_t dataset, space, tid; int rank; SEXPTYPE type = NILSXP; if (hdf5_global_verbosity > 0) Rprintf ("... its a dataset..."); if ((dataset = H5Dopen (id, name)) < 0) errorcall (iinfo->call, "unable to load dataset `%s'", name); if (hdf5_global_verbosity > 1) Rprintf ("Dataset has ID%d\n",dataset); if ((tid = H5Dget_type (dataset)) < 0) errorcall (iinfo->call, "unable to get dataset type"); if (hdf5_global_verbosity > 1) Rprintf ("Dataset has tid %d\n",tid); switch (H5Tget_class (tid)) { case H5T_INTEGER: if (H5Tget_precision (tid) == 1) type = LGLSXP; else type = INTSXP; break; case H5T_FLOAT: type = REALSXP; break; case H5T_STRING: type = STRSXP; break; case H5T_COMPOUND: type = VECSXP; break; default: errorcall (iinfo->call, "can't handle hdf type %d", tid); break; } if ((space = H5Dget_space (dataset)) < 0) errorcall (iinfo->call, "unable to get dataset space"); if (hdf5_global_verbosity > 1) Rprintf ("Dataset has space id %d\n", space); if (H5Sis_simple (space) != TRUE) errorcall (iinfo->call, "space not simple"); if ((rank = H5Sget_simple_extent_ndims (space)) < 0) errorcall (iinfo->call, "unable to get space rank"); if (hdf5_global_verbosity > 1) Rprintf ("Dataset has rank %d\n",rank); if (rank == 0) { SEXP obj; if (hdf5_global_verbosity > 2) Rprintf ("Loading scalar\n"); PROTECT (obj = allocVector (type, 1)); load_scalar (iinfo->call, dataset, space, obj); iinfo->add (iinfo, name, obj); hdf5_load_attributes (iinfo->call, dataset, obj, name); UNPROTECT (1); } else { hsize_t dims[rank]; hsize_t maxdims[rank]; if (H5Sget_simple_extent_dims (space, dims, maxdims) < 0) errorcall (iinfo->call, "unable to get space extent"); if (hdf5_global_verbosity > 1) { hsize_t irank; Rprintf ("Dataset has dims/maxdims:"); for (irank = 0; irank < rank; irank++) Rprintf (" %d ",dims[irank]); Rprintf ("/"); for (irank = 0;irank < rank; irank++) Rprintf (" %d ",maxdims[irank]); Rprintf ("\n"); } if (type == VECSXP && rank == 1) { unsigned colcount = H5Tget_nmembers (tid), ci; SEXP vec; size_t size = H5Tget_size (tid); unsigned ri, rowcount = dims[0]; char *buf = (char *) R_chk_calloc (rowcount, size * 2); hid_t rtid = make_sexp_ref_type (iinfo->call); SEXP names; if (hdf5_global_verbosity > 2) { Rprintf ("Dataset has type = VECSXP and rank 1\n"); Rprintf ("Reading...\n"); } if (H5Dread (dataset, tid, space, space, H5P_DEFAULT, buf) < 0) errorcall (iinfo->call, "can't read compound data vector"); if (hdf5_global_verbosity > 2) Rprintf ("....done\n"); PROTECT (vec = allocVector (VECSXP, colcount)); PROTECT (names = allocVector (STRSXP, colcount)); for (ci = 0; ci < colcount; ci++) { hid_t ctid = H5Tget_member_type (tid, ci); H5T_class_t class = H5Tget_class (ctid); size_t csize = H5Tget_size (ctid); size_t coffset = H5Tget_member_offset (tid, ci); unsigned char itembuf[size]; /* for overrun */ #define ASSIGN(val) SET_VECTOR_ELT (vec,ci,PROTECT(val)) #define VECLOOP(vectype, vecref, dtid) \ { \ size_t dsize = H5Tget_size (dtid); \ for (ri = 0; ri < rowcount; ri++) \ { \ memcpy (itembuf, buf + ri * size + coffset, csize); \ if (H5Tconvert (ctid, dtid, 1, itembuf, NULL, H5P_DEFAULT) < 0) \ errorcall (iinfo->call, "type conversion failed"); \ memcpy (&vecref (VECTOR_ELT (vec,ci))[ri], itembuf, dsize); \ } \ } #define STRVECLOOP(vectype, dtid) \ { \ for (ri = 0; ri < rowcount; ri++) \ { \ memcpy (itembuf, buf + ri * size + coffset, csize); \ if (H5Tconvert (ctid, dtid, 1, itembuf, NULL, H5P_DEFAULT) < 0) \ errorcall (iinfo->call, "type conversion failed"); \ SET_STRING_ELT (VECTOR_ELT (vec,ci), ri, mkChar (*(const char **) itembuf)); \ } \ } { char *colname = H5Tget_member_name (tid, ci); if (colname) SET_STRING_ELT (names, ci, mkChar (colname)); free (colname); } switch (class) { case H5T_INTEGER: { if (csize == 1) { ASSIGN (allocVector (LGLSXP, rowcount)); VECLOOP (LGLSXP, LOGICAL, H5T_NATIVE_INT); } else { ASSIGN (allocVector (INTSXP, rowcount)); VECLOOP (INTSXP, INTEGER, H5T_NATIVE_INT); } } break; case H5T_FLOAT: ASSIGN (allocVector (REALSXP, rowcount)); VECLOOP (REALSXP, REAL, H5T_NATIVE_DOUBLE); break; case H5T_STRING: ASSIGN (allocVector (STRSXP, rowcount)); STRVECLOOP (STRSXP, rtid); break; default: errorcall (iinfo->call, "can't handle hdf class %d", class); } if (H5Tclose (ctid) < 0) errorcall (iinfo->call, "could not close member type"); } UNPROTECT (colcount); load_rownames_dataset_attribute (iinfo->call, dataset, vec); setAttrib (vec, R_NamesSymbol, names); UNPROTECT (1); setAttrib (vec, R_ClassSymbol, mkString ("data.frame")); iinfo->add (iinfo, name, vec); hdf5_load_attributes (iinfo->call, dataset, vec, name); UNPROTECT (1); if (H5Tclose (rtid) < 0) errorcall (iinfo->call, "could not close reference type"); R_chk_free (buf); } else { SEXP obj; if (rank == 1) { if (hdf5_global_verbosity > 2) Rprintf ("Allocating vector with rank=%d dim=%d\n", rank,dims[0]); PROTECT (obj = allocVector (type, dims[0])); } else if (rank == 2) { if (hdf5_global_verbosity > 2) Rprintf ("Allocating matrix with rank=%d dim=%d %d\n", rank,dims[0],dims[1]); PROTECT (obj = allocMatrix (type, dims[0], dims[1])); } else { SEXP dimsvector; hsize_t irank; if (hdf5_global_verbosity > 2) Rprintf ("Allocating array with rank=%d dims:", rank); PROTECT (dimsvector = allocVector (INTSXP, rank)); for (irank = 0; irank < rank; irank++) { if (hdf5_global_verbosity > 1) Rprintf(" %d ", dims[irank]); INTEGER(dimsvector)[irank] = dims[irank]; } if (hdf5_global_verbosity > 2) Rprintf ("\n"); if (hdf5_global_verbosity > 2) Rprintf ("about to do actual allocation\n"); PROTECT (obj = allocArray (type, dimsvector)); if (hdf5_global_verbosity > 2) Rprintf ("done allocation -- unprotecting\n"); UNPROTECT (2); if (hdf5_global_verbosity > 2) Rprintf ("done unprotecting -- re-protecting obj\n"); PROTECT (obj); if (hdf5_global_verbosity > 2) Rprintf ("done re-protecting\n"); } if (hdf5_global_verbosity > 2) Rprintf ("calling vector_io. Hangs here with big datsets\n"); vector_io (iinfo->call, FALSE, dataset, space, obj); if (hdf5_global_verbosity > 2) Rprintf ("Phew. Done it. calling iinfo->add\n"); iinfo->add (iinfo, name, obj); if (hdf5_global_verbosity > 2) { Rprintf ("Rank > 1 or not VECSXP\n"); Rprintf ("Calling hdf5_load_attributes \n"); } hdf5_load_attributes (iinfo->call, dataset, obj, name); if (hdf5_global_verbosity > 2) Rprintf ("back from hdf5_load_attributes \n"); UNPROTECT (1); } } if (H5Sclose (space) < 0) errorcall (iinfo->call, "unable to close dataspace"); if (H5Tclose (tid) < 0) errorcall (iinfo->call, "unable to close datatype"); if (H5Dclose (dataset) < 0) errorcall (iinfo->call, "unable to close dataset"); if (hdf5_global_verbosity > 0) Rprintf ("...Finished dataset \n"); } else errorcall (iinfo->call, "no support for HDF object type: %d", statbuf.type); return 0; } static void add_to_symbol_table (struct hdf5_iterate_info *iinfo, const char *name, SEXP obj) { char newname[strlen(name)+16]; memset(newname, '\0', strlen(name)+16); strcpy(newname,name); if(hdf5_global_nametidy) { if (hdf5_global_verbosity > 1) Rprintf("Tidying name %s ",newname); nametidy (newname); } setVar (install ((char *)newname), obj, iinfo->env); if (hdf5_global_verbosity > 1 && hdf5_global_nametidy) Rprintf (".. to %s \n ",newname); } SEXP do_hdf5load (SEXP args) { const char *path; specificDataset = NULL; hid_t fid; int restore_syms; struct hdf5_iterate_info iinfo; SEXP call, env; args = CDR (args); call = CAR (args); args = CDR (args); env = CAR (args); args = CDR (args); if (!isValidString(CAR(args))) errorcall (call, "first argument must be a pathname\n"); if (TYPEOF (CADR (args)) != LGLSXP) errorcall (call, "second argument must be a logical vector"); path = CHAR (STRING_ELT (CAR(args), 0)); restore_syms = INTEGER (CADR(args))[0]; hdf5_global_verbosity = INTEGER (CADDR (args))[0]; if (hdf5_global_verbosity > 2) Rprintf ("hdf5_global_verbosity=%d load=%d\n", hdf5_global_verbosity, restore_syms); hdf5_global_nametidy = INTEGER (CADDDR (args))[0]; H5dont_atexit (); args = CDR (args); args = CDR (args); args = CDR (args); args = CDR (args); if (isValidString(CAR(args))) { specificDataset = CHAR (STRING_ELT (CAR(args), 0)); if (strlen(specificDataset) == 0) specificDataset = NULL; } if ((fid = H5Fopen (path, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) errorcall (call, "unable to open HDF file: %s", path); setup_onexit (fid, env); if (H5Tregister (H5T_PERS_SOFT, STRING2REF_CONV, H5T_C_S1, H5T_STD_REF_OBJ, string_ref) < 0) errorcall (call, "Unable to register string->ref converter"); iinfo.call = call; iinfo.add = restore_syms ? add_to_symbol_table : add_to_list; iinfo.env = env; PROTECT (iinfo.ret = CONS (R_NilValue, R_NilValue)); if (H5Giterate (fid, "/", NULL, hdf5_process_object, &iinfo) < 0) errorcall (call, "unable to iterate over HDF file: %s", path); UNPROTECT (1); return CDR (iinfo.ret); } hdf5/src/ChangeLog0000644000175100001440000001315211562516550013467 0ustar hornikusers2011-05-11 Felipe Barriga Richards * hdf5.c: Added support to load a single dataset * hdf5.c: Fix some replacements on TIDY (dataset with namd 'C', 'D', etc fails. Now it appends an underscore (e.g. 'D' => 'D_'). * hdf5.Rd: Documented the new feature. Added an example that uses it. * hdf5.R: Added support for the new feature (argument) 2008-11-16 Marcus G. Daniels * hdf5.c (permute): Remove diagnostic. Thanks to Nathaniel Smith for the report. * hdf5.c (permute): Use const char ** to avoid warning. (do_hdf5save): Likewise. 2008-06-15 Marcus G. Daniels * hdf5.c: Define H5_USE_16_API. Include ctype.h and stdlib.h. Thanks to George N. White III. 2007-04-14 Marcus G. Daniels * hdf5.c: Always use hsize_t for count_size_t. (string_ref): Use signed char for srcbuf, cstring. (permute_info): Use hsize_t for dims. (get_string_type): Use strlen to get length. Rename outer len to vlen. (hdf5_save_object): Don't call create_rownames_dataset_attribute unless rownames has strings in it. (load_rownames_dataset_attribute): Don't create stringified integer rownames if row names attribute not found in HDF5 file. Set special NA_INTEGER with rowcount instead. (hdf5_process_object): Always call load_rownames_dataset_attribute without regard to row count. 2006-08-07 Marcus G. Daniels * hdf5.c (STRVECLOOP): New macro. 2006-05-31 Marcus G. Daniels * hdf5.c (VECLOOP, ASSIGN): Bug fixes for vector assignments. 2005-05-12 Marcus G. Daniels * hdf5.c: Removed C++ style comments. Prior changes throughout for write barrier and string vectors. Removing various compilation warnings. 2003-09-17 Marcus G. Daniels * hdf5.c: include Rmath.h instead of R_ext/Mathlib.h. 2002-03-01 Philippe Grosjean * added libhdf5.def and a modified version of Makevars.win to allow compilation of the dll in Windows (thanks to Prof. Brian D. Ripley for providing these files! Read Win_ReadMe.txt for instructions on how to add required files from the hdf5 libraries to compile succesfully on Windows. 2001-12-14 Marcus G. Daniels * hdf5.c (make_sexp_ref_type): Disable assignment of size. 2001-07-12 Hugh Pumphrey * hdf5.c (hdf5_process_attribute): fixed bug in diagnostic that caused occasional segfaults. 2001-06-25 Marcus G. Daniels * hdf5.c: Initialize nametidy and verbosity. (permute): Handle logicals in a portable way. (Bug existed prior to Hugh's last few changes.) 2001-05-18 Hugh Pumphrey * hdf5.c (string_ref): Fixed so it works with Fortran space-padded strings, even if there is an array of more than one string. 2001-05-15 Hugh Pumphrey * hdf5.c (vector_io)(permute): Re-written to read HDF5 datasets with a single call. Increases speed a great deal for large datasets. (add_to_symbol_table) Fixed bug so it _really_ uses nametidy. 2001-05-01 Hugh Pumphrey * hdf5.c (hdf5_process_attribute): fixed bug I introduced for rank 1 attributes. 2001-04-26 Hugh Pumphrey * hdf5.c (hdf5_process_attribute): Now works for attributes of rank 0. (nametidy) Added to convert HDF5 names to R variable names (add_to_list)(add_to_symbol_table) Now use nametidy. 2001-04-12 Marcus G. Daniels * hdf5.c (make_boolean_type): New function. (load_scalar, vector_io, hdf5_save_attributes, hdf5_write_vector, (hdf5_save_object, hdf5_process_attribute): Use it. Use LOGICAL in these places instead of INTEGER. Handle drop of boolean type and use LGLSXP in VECLOOP as appropriate. 2001-04-10 Marcus G. Daniels * hdf5.c (load_rownames_dataset_attribute): Close the space, type, and attribute as appropriate. Close rtid. (hdf5_process_object): Free the member name. (hdf5_process_object): Close ctid and rtid. 2001-04-09 * hdf5.c (add_to_list): Set CDR of iinfo->ret to append. (collect): Setup pair for appending into. Don't copy when finished. (add_to_return_list): Remove. (do_hdf5load): Setup pair for appending into and use add_to_list, not add_to_return_list. 2001-04-05 * hdf5.c (hdf5_save_object): Create an empty group on null values. 2001-03-31 Marcus G. Daniels * hdf5.c (string_ref, ref_string): Handle HDF5 1.2.2 and >= HDF5 1.4.0. 2001-03-11 Marcus G. Daniels * hdf5.c (string_ref, ref_string): Use hsize_t for count. (HDF5 1.4) (do_hdf5cleanup): Bug fix. Both thanks to Hugh Pumphrey. (load_scalar): Add. (hdf5_process_object): Use it. 2001-02-03 Marcus G. Daniels * hdf5.c (errorcall): Add macro and declaration. (hdf5_global_verbosity): New global. (hdf5_process_attribute, hdf5_process_object, do_hdf5load): Use it. Add many messages. (hdf5_process_object): Support n-dimensional arrays. (do_hdf5load): Set hdf5_global_verbosity. 2000-08-19 Marcus G. Daniels * hdf5.c: Use SET_STRING_ELT, STRING_ELT, VECTOR_ELT, and STRING_PTR as appropriate (for R 1.2). 2000-07-20 Marcus G. Daniels * hdf5.c (ref_string, string_ref): Add bkg_stride argument per HDF5 1.2.2. 2000-07-16 Marcus G. Daniels * hdf5.c (load_rownames_dataset_attribute): Create row names on the fly if absent. 2000-01-28 * hdf5.c: Declare warningcall. (do_hdf5cleanup): Return R_NilValue. hdf5/src/Makevars.win0000644000175100001440000000011411562350774014203 0ustar hornikusersPKG_CPPFLAGS = -I$(HDF5)/include -D_HDF5USEDLL_ PKG_LIBS = -L$(HDF5) -lhdf5 hdf5/src/Makevars0000644000175100001440000000011411562350774013407 0ustar hornikusersSHLIB = hdf5.so OBJS = hdf5.o PKG_CPPFLAGS = PKG_LIBS = -lhdf5 -lz -lm hdf5/src/Makevars.in0000644000175100001440000000020211562350774014012 0ustar hornikusersSHLIB = hdf5.so OBJS = hdf5.o PKG_CPPFLAGS = @ZLIBCPPFLAGS@ @HDF5CPPFLAGS@ PKG_LIBS = @HDF5LDFLAGS@ @ZLIBLDFLAGS@ -lhdf5 -lz -lm hdf5/INDEX0000644000175100001440000000006611562350774011724 0ustar hornikusershdf5 Interface to the HDF5 Library hdf5/configure.in0000644000175100001440000000227211562350774013444 0ustar hornikusersAC_INIT(DESCRIPTION) AC_PROG_CC AC_ARG_WITH(zlib, [ --with-zlib=DIR Use zlib installed in DIR]) if test -n "$with_zlib"; then ZLIBLDFLAGS=-L${with_zlib}/lib ZLIBCPPFLAGS=-I${with_zlib}/include fi AC_ARG_WITH(hdf5, [ --with-hdf5=DIR Use HDF5 installed in DIR]) if test -n "$with_hdf5"; then HDF5LDFLAGS="-L${with_hdf5}/lib" if test `uname -s` != "Darwin"; then HDF5LDFLAGS="-Wl,-rpath,${with_hdf5}/lib" fi HDF5CPPFLAGS=-I${with_hdf5}/include fi LIBS=-lm CPPFLAGS="$ZLIBCPPFLAGS $HDF5CPPFLAGS $CPPFLAGS" LDFLAGS="$HDF5LDFLAGS $ZLIBLDFLAGS $LDFLAGS" AC_SEARCH_LIBS(inflate, z, have_zlib=yes, have_zlib=no) AC_SEARCH_LIBS(H5open, hdf5, have_hdf5=yes, have_hdf5=no) if test $have_zlib = no; then AC_MSG_ERROR(Can't find zlib) fi if test "$have_hdf5" = yes; then AC_MSG_CHECKING(for sufficiently new HDF5) AC_TRY_LINK([#include ], [ H5T_pers_t convtype = H5T_PERS_SOFT; H5Tclose ((hid_t) 0);], have_hdf5=yes, have_hdf5=no) AC_MSG_RESULT($have_hdf5) fi if test $have_hdf5 = no; then AC_MSG_ERROR(Can't find HDF5) fi AC_SUBST(ZLIBCPPFLAGS) AC_SUBST(ZLIBLDFLAGS) AC_SUBST(HDF5CPPFLAGS) AC_SUBST(HDF5LDFLAGS) AC_OUTPUT(src/Makevars) hdf5/R/0000755000175100001440000000000011562350774011331 5ustar hornikusershdf5/R/windows/0000755000175100001440000000000011562350774013023 5ustar hornikusershdf5/R/windows/zzz.R0000644000175100001440000000057211562350774014007 0ustar hornikusers.noGenerics <- TRUE .onLoad <- function(lib, pkg) { opath <- Sys.getenv("PATH") libbin <- file.path(R.home(), "library/hdf5/libs") if(!exists("Sys.setenv")) Sys.setenv <- Sys.putenv Sys.setenv(PATH=paste(libbin, opath, sep=";")) library.dynam("hdf5", pkg, lib) Sys.setenv(PATH=opath) } .onUnload <- function (libpath) { library.dynam.unload("hdf5", libpath) } hdf5/R/unix/0000755000175100001440000000000011562350774012314 5ustar hornikusershdf5/R/unix/zzz.R0000644000175100001440000000025011562350774013271 0ustar hornikusers.noGenerics <- TRUE .onLoad <- function (lib, pkg) { library.dynam("hdf5", pkg, lib) } .onUnload <- function (libpath) { library.dynam.unload("hdf5", libpath) } hdf5/R/hdf5.R0000644000175100001440000000116011562350774012300 0ustar hornikusers"hdf5load" <- function (file, load = TRUE, verbosity = 0, tidy = FALSE, dataset = "") { call <- sys.call() .External("do_hdf5load", call, sys.frame(sys.parent()), file, load, as.integer (verbosity), as.logical(tidy), dataset, PACKAGE="hdf5") } "hdf5save" <- function (fileout, ...) { call <- sys.call() invisible(.External("do_hdf5save", call, sys.frame(sys.parent()), fileout, ..., PACKAGE="hdf5")) } "hdf5cleanup" <- function (fid) { call <- sys.call() invisible(.External("do_hdf5cleanup", call, sys.frame(sys.parent()), fid, PACKAGE="hdf5")) }