file-5.46/000775 023540 023540 00000000000 14721636376 014150 5ustar00christoschristos000000 000000 file-5.46/m4/000775 023540 023540 00000000000 14721636373 014465 5ustar00christoschristos000000 000000 file-5.46/Makefile.am000664 023540 023540 00000000542 14136541662 016176 0ustar00christoschristos000000 000000 ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = MAINT RELEASE-PROCEDURE README.DEVELOPER README.md \ m4/visibility.m4 SUBDIRS = src magic tests doc python # This variable must have 'exec' in its name, in order to be installed # by 'install-exec' target (instead of default 'install-data') pkgconfigexecdir = $(libdir)/pkgconfig pkgconfigexec_DATA = libmagic.pc file-5.46/configure000775 023540 023540 00002040417 14721422720 016051 0ustar00christoschristos000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.72 for file 5.46. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: christos@astron.com about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='file' PACKAGE_TARNAME='file' PACKAGE_VERSION='5.46' PACKAGE_STRING='file 5.46' PACKAGE_BUGREPORT='christos@astron.com' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_func_c_list= enable_year2038=yes ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS IS_CROSS_COMPILE_FALSE IS_CROSS_COMPILE_TRUE LIBOBJS HAVE_VISIBILITY CFLAG_VISIBILITY LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR DLLTOOL OBJDUMP FILECMD NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED LIBTOOL LN_S am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC WARNINGS FSECT5_FALSE FSECT5_TRUE fsect pkgdatadir MINGW_FALSE MINGW_TRUE MINGW host_os host_vendor host_cpu host build_os build_vendor build_cpu build AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_elf enable_elf_core enable_zlib enable_bzlib enable_xzlib enable_zstdlib enable_lzlib enable_lrziplib enable_libseccomp enable_fsect_man5 enable_dependency_tracking enable_static with_pic enable_shared enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock enable_largefile enable_warnings enable_year2038 ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS LT_SYS_LIBRARY_PATH' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures file 5.46 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/file] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of file 5.46:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-elf disable builtin ELF support --disable-elf-core disable ELF core file support --disable-zlib disable zlib compression support [default=auto] --disable-bzlib disable bz2lib compression support [default=auto] --disable-xzlib disable liblzma/xz compression support [default=auto] --disable-zstdlib disable zstdlib compression support [default=auto] --disable-lzlib disable liblz (lzip) compression support [default=auto] --disable-lrziplib disable liblrzip (lrzip) compression support [default=auto] --disable-libseccomp disable libseccomp sandboxing [default=auto] --enable-fsect-man5 enable file formats in man section 5 --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-static[=PKGS] build static libraries [default=no] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-largefile omit support for large files --disable-warnings disable compiler warnings --disable-year2038 don't support timestamps after 2038 Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory LT_SYS_LIBRARY_PATH User-defined run-time library search path. Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF file configure 5.46 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that # executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: program exited with status $ac_status" >&5 printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status ;; esac fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (void); below. */ #include #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (void); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main (void) { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) eval "$3=yes" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- # Tries to find if the field MEMBER exists in type AGGR, after including # INCLUDES, setting cache variable VAR accordingly. ac_fn_c_check_member () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 printf %s "checking for $2.$3... " >&6; } if eval test \${$4+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $5 int main (void) { static $2 ac_aggr; if (sizeof ac_aggr.$3) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$4=yes" else case e in #( e) eval "$4=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$4 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member # ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR # ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. ac_fn_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 printf %s "checking whether $as_decl_name is declared... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` eval ac_save_FLAGS=\$$6 as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval $6=\$ac_save_FLAGS ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_check_decl # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 printf %s "checking for uint$2_t... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if eval test \"x\$"$3"\" = x"no" then : else case e in #( e) break ;; esac fi done ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t # ac_fn_c_find_intX_t LINENO BITS VAR # ----------------------------------- # Finds a signed integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_intX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 printf %s "checking for int$2_t... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in int$2_t 'int' 'long int' \ 'long long int' 'short int' 'signed char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main (void) { static int test_array [1 - 2 * !(0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default enum { N = $2 / 2 - 1 }; int main (void) { static int test_array [1 - 2 * !(($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) case $ac_type in #( int$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if eval test \"x\$"$3"\" = x"no" then : else case e in #( e) break ;; esac fi done ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_intX_t ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by file $as_me 5.46, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (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; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* 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 do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H" as_fn_append ac_func_c_list " getpagesize HAVE_GETPAGESIZE" as_fn_append ac_header_c_list " vfork.h vfork_h HAVE_VFORK_H" as_fn_append ac_func_c_list " fork HAVE_FORK" as_fn_append ac_func_c_list " vfork HAVE_VFORK" # Auxiliary files required by this configure script. ac_aux_files="ltmain.sh compile config.guess config.sub missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in #( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in #( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='file' VERSION='5.46' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in #( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ac_config_headers="$ac_config_headers config.h" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for builtin ELF support" >&5 printf %s "checking for builtin ELF support... " >&6; } # Check whether --enable-elf was given. if test ${enable_elf+y} then : enableval=$enable_elf; if test "${enableval}" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define BUILTIN_ELF 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else case e in #( e) # enable by default { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define BUILTIN_ELF 1" >>confdefs.h ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ELF core file support" >&5 printf %s "checking for ELF core file support... " >&6; } # Check whether --enable-elf-core was given. if test ${enable_elf_core+y} then : enableval=$enable_elf_core; if test "${enableval}" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define ELFCORE 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else case e in #( e) # enable by default { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } printf "%s\n" "#define ELFCORE 1" >>confdefs.h ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zlib support" >&5 printf %s "checking for zlib support... " >&6; } # Check whether --enable-zlib was given. if test ${enable_zlib+y} then : enableval=$enable_zlib; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_zlib" >&5 printf "%s\n" "$enable_zlib" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bzlib support" >&5 printf %s "checking for bzlib support... " >&6; } # Check whether --enable-bzlib was given. if test ${enable_bzlib+y} then : enableval=$enable_bzlib; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_bzlib" >&5 printf "%s\n" "$enable_bzlib" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for xzlib support" >&5 printf %s "checking for xzlib support... " >&6; } # Check whether --enable-xzlib was given. if test ${enable_xzlib+y} then : enableval=$enable_xzlib; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_xzlib" >&5 printf "%s\n" "$enable_xzlib" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zstdlib support" >&5 printf %s "checking for zstdlib support... " >&6; } # Check whether --enable-zstdlib was given. if test ${enable_zstdlib+y} then : enableval=$enable_zstdlib; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_zstdlib" >&5 printf "%s\n" "$enable_zstdlib" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lzlib support" >&5 printf %s "checking for lzlib support... " >&6; } # Check whether --enable-lzlib was given. if test ${enable_lzlib+y} then : enableval=$enable_lzlib; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lzlib" >&5 printf "%s\n" "$enable_lzlib" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lrziplib support" >&5 printf %s "checking for lrziplib support... " >&6; } # Check whether --enable-lrziplib was given. if test ${enable_lrziplib+y} then : enableval=$enable_lrziplib; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_lrziplib" >&5 printf "%s\n" "$enable_lrziplib" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libseccomp support" >&5 printf %s "checking for libseccomp support... " >&6; } # Check whether --enable-libseccomp was given. if test ${enable_libseccomp+y} then : enableval=$enable_libseccomp; fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_libseccomp" >&5 printf "%s\n" "$enable_libseccomp" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file formats in man section 5" >&5 printf %s "checking for file formats in man section 5... " >&6; } # Check whether --enable-fsect-man5 was given. if test ${enable_fsect_man5+y} then : enableval=$enable_fsect_man5; if test "${enableval}" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fsect=5 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fsect=4 fi else case e in #( e) # disable by default { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fsect=4 ;; esac fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac case "$host_os" in mingw32*) MINGW=1 ;; *) MINGW=0 ;; esac if test "$MINGW" = 1; then MINGW_TRUE= MINGW_FALSE='#' else MINGW_TRUE='#' MINGW_FALSE= fi pkgdatadir='$(datadir)/misc' if test x$fsect = x5; then FSECT5_TRUE= FSECT5_FALSE='#' else FSECT5_TRUE='#' FSECT5_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_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" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; 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 ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else case e in #( e) ac_cv_safe_to_define___extensions__=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "#define _MINIX 1" >>confdefs.h printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h else case e in #( e) MINIX= ;; esac fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 printf %s "checking whether byte ordering is bigendian... " >&6; } if test ${ac_cv_c_bigendian+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_c_bigendian=unknown # See if we're dealing with a universal compiler. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; _ACEOF if ac_fn_c_try_compile "$LINENO" then : # Check for potential -arch flags. It is not universal unless # there are at least two -arch flags with different values. ac_arch= ac_prev= for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do if test -n "$ac_prev"; then case $ac_word in i?86 | x86_64 | ppc | ppc64) if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then ac_arch=$ac_word else ac_cv_c_bigendian=universal break fi ;; esac ac_prev= elif test "x$ac_word" = "x-arch"; then ac_prev=arch fi done fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test $ac_cv_c_bigendian = unknown; then # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \\ && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \\ && LITTLE_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else case e in #( e) ac_cv_c_bigendian=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : # It does; now see whether it defined to _BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { #ifndef _BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_bigendian=yes else case e in #( e) ac_cv_c_bigendian=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_c_bigendian = unknown; then # Compile a test program. if test "$cross_compiling" = yes then : # Try to guess by grepping values from an object file. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ unsigned short int ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; unsigned short int ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; int use_ascii (int i) { return ascii_mm[i] + ascii_ii[i]; } unsigned short int ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; unsigned short int ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; int use_ebcdic (int i) { return ebcdic_mm[i] + ebcdic_ii[i]; } int main (int argc, char **argv) { /* Intimidate the compiler so that it does not optimize the arrays away. */ char *p = argv[0]; ascii_mm[1] = *p++; ebcdic_mm[1] = *p++; ascii_ii[1] = *p++; ebcdic_ii[1] = *p++; return use_ascii (argc) == use_ebcdic (*p); } _ACEOF if ac_fn_c_try_link "$LINENO" then : if grep BIGenDianSyS conftest$ac_exeext >/dev/null; then ac_cv_c_bigendian=yes fi if grep LiTTleEnDian conftest$ac_exeext >/dev/null ; then if test "$ac_cv_c_bigendian" = unknown; then ac_cv_c_bigendian=no else # finding both strings is unlikely to happen, but who knows? ac_cv_c_bigendian=unknown fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* Are we little or big endian? From Harbison&Steele. */ union { long int l; char c[sizeof (long int)]; } u; u.l = 1; return u.c[sizeof (long int) - 1] == 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_bigendian=no else case e in #( e) ac_cv_c_bigendian=yes ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 printf "%s\n" "$ac_cv_c_bigendian" >&6; } case $ac_cv_c_bigendian in #( yes) printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h ;; #( no) ;; #( universal) printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi case `pwd` in *\ * | *\ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.7' macro_revision='2.4.7' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 printf "%s\n" "printf" >&6; } ;; print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 printf "%s\n" "print -r" >&6; } ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 printf "%s\n" "cat" >&6; } ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 printf %s "checking for grep that handles long lines and -e... " >&6; } if test ${ac_cv_path_GREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in grep ggrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in #( *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 printf "%s\n" "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 printf %s "checking for egrep... " >&6; } if test ${ac_cv_path_EGREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in egrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in #( *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 printf "%s\n" "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" EGREP_TRADITIONAL=$EGREP ac_cv_path_EGREP_TRADITIONAL=$EGREP { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 else case e in #( e) if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in fgrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in #( *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else case e in #( e) with_gnu_ld=no ;; esac fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else case e in #( e) # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DUMPBIN+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 printf "%s\n" "$DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DUMPBIN+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 else case e in #( e) i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 else case e in #( e) case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 printf %s "checking how to convert $build file names to toolchain format... " >&6; } if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 else case e in #( e) #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ld_reload_flag='-r' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args. set dummy ${ac_tool_prefix}file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FILECMD+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$FILECMD"; then ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FILECMD="${ac_tool_prefix}file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FILECMD=$ac_cv_prog_FILECMD if test -n "$FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5 printf "%s\n" "$FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_FILECMD"; then ac_ct_FILECMD=$FILECMD # Extract the first word of "file", so it can be a program name with args. set dummy file; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FILECMD+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_FILECMD"; then ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FILECMD="file" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD if test -n "$ac_ct_FILECMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5 printf "%s\n" "$ac_ct_FILECMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_FILECMD" = x; then FILECMD=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FILECMD=$ac_ct_FILECMD fi else FILECMD="$ac_cv_prog_FILECMD" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OBJDUMP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OBJDUMP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DLLTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DLLTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AR=$ac_cv_prog_AR if test -n "$AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 printf "%s\n" "$AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_AR+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 printf "%s\n" "$ac_ct_AR" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 printf "%s\n" "$RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_RANLIB+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 printf "%s\n" "$ac_ct_RANLIB" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 printf %s "checking command to parse $NM output from $compiler object... " >&6; } if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 else case e in #( e) # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ;; esac fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 printf "%s\n" "failed" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf "%s\n" "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test ${with_sysroot+y} then : withval=$with_sysroot; else case e in #( e) with_sysroot=no ;; esac fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 printf "%s\n" "${lt_sysroot:-no}" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 else case e in #( e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in dd do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 else case e in #( e) printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test ${enable_libtool_lock+y} then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes else case e in #( e) lt_cv_cc_needs_belf=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 printf "%s\n" "$MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_DSYMUTIL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 printf "%s\n" "$DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_DSYMUTIL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NMEDIT+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 printf "%s\n" "$NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NMEDIT+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 printf "%s\n" "$ac_ct_NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_LIPO+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 printf "%s\n" "$LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_LIPO+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 printf "%s\n" "$ac_ct_LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 printf "%s\n" "$OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 printf "%s\n" "$ac_ct_OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_OTOOL64+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 printf "%s\n" "$OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_OTOOL64+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 printf "%s\n" "$ac_ct_OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes else case e in #( e) lt_cv_ld_exported_symbols_list=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5 $AR $AR_FLAGS libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[012],*|,*powerpc*-darwin[5-8]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes then : printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi # Set options # Check whether --enable-static was given. if test ${enable_static+y} then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) enable_static=no ;; esac fi # Check whether --with-pic was given. if test ${with_pic+y} then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) pic_mode=yes ;; esac fi enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test ${enable_shared+y} then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) enable_shared=yes ;; esac fi # Check whether --enable-fast-install was given. if test ${enable_fast_install+y} then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else case e in #( e) enable_fast_install=yes ;; esac fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test ${with_aix_soname+y} then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else case e in #( e) if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_with_aix_soname=aix ;; esac fi with_aix_soname=$lt_cv_with_aix_soname ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 else case e in #( e) rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else case e in #( e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else case e in #( e) case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi ;; esac fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else case e in #( e) save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else case e in #( e) lt_cv_irix_exported_symbol=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes file_list_spec='@' ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 else case e in #( e) $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else case e in #( e) lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir ;; esac fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else case e in #( e) ac_cv_lib_dl_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else case e in #( e) lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; esac fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 printf %s "checking for shl_load in -ldld... " >&6; } if test ${ac_cv_lib_dld_shl_load+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char shl_load (void); int main (void) { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_shl_load=yes else case e in #( e) ac_cv_lib_dld_shl_load=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes then : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else case e in #( e) ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 printf %s "checking for dlopen in -ldl... " >&6; } if test ${ac_cv_lib_dl_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dl_dlopen=yes else case e in #( e) ac_cv_lib_dl_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dlopen (void); int main (void) { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_svld_dlopen=yes else case e in #( e) ac_cv_lib_svld_dlopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char dld_link (void); int main (void) { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes else case e in #( e) ac_cv_lib_dld_dld_link=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi ;; esac fi ;; esac fi ;; esac fi ;; esac fi ;; esac fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 else case e in #( e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 printf %s "checking whether a statically linked program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 else case e in #( e) if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } if test -z "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi fi # Report what library types will actually be built { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf "%s\n" "$can_build_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf "%s\n" "$enable_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf "%s\n" "$enable_static" >&6; } 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 CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else case e in #( e) gl_cv_cc_vis_werror=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else case e in #( e) gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else case e in #( e) gl_cv_cc_visibility=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mkdev_h" = xyes then : printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h fi if test $ac_cv_header_sys_mkdev_h = no; then ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" if test "x$ac_cv_header_sys_sysmacros_h" = xyes then : printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 printf %s "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if test ${ac_cv_header_sys_wait_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main (void) { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_sys_wait_h=yes else case e in #( e) ac_cv_header_sys_wait_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 printf "%s\n" "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes then : printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default" if test "x$ac_cv_header_fcntl_h" = xyes then : printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_inttypes_h" = xyes then : printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes then : printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "byteswap.h" "ac_cv_header_byteswap_h" "$ac_includes_default" if test "x$ac_cv_header_byteswap_h" = xyes then : printf "%s\n" "#define HAVE_BYTESWAP_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "spawn.h" "ac_cv_header_spawn_h" "$ac_includes_default" if test "x$ac_cv_header_spawn_h" = xyes then : printf "%s\n" "#define HAVE_SPAWN_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "utime.h" "ac_cv_header_utime_h" "$ac_includes_default" if test "x$ac_cv_header_utime_h" = xyes then : printf "%s\n" "#define HAVE_UTIME_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" if test "x$ac_cv_header_wchar_h" = xyes then : printf "%s\n" "#define HAVE_WCHAR_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default" if test "x$ac_cv_header_wctype_h" = xyes then : printf "%s\n" "#define HAVE_WCTYPE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes then : printf "%s\n" "#define HAVE_GETOPT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "err.h" "ac_cv_header_err_h" "$ac_includes_default" if test "x$ac_cv_header_err_h" = xyes then : printf "%s\n" "#define HAVE_ERR_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "xlocale.h" "ac_cv_header_xlocale_h" "$ac_includes_default" if test "x$ac_cv_header_xlocale_h" = xyes then : printf "%s\n" "#define HAVE_XLOCALE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/bswap.h" "ac_cv_header_sys_bswap_h" "$ac_includes_default" if test "x$ac_cv_header_sys_bswap_h" = xyes then : printf "%s\n" "#define HAVE_SYS_BSWAP_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mman_h" = xyes then : printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default" if test "x$ac_cv_header_sys_stat_h" = xyes then : printf "%s\n" "#define HAVE_SYS_STAT_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default" if test "x$ac_cv_header_sys_types_h" = xyes then : printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/utime.h" "ac_cv_header_sys_utime_h" "$ac_includes_default" if test "x$ac_cv_header_sys_utime_h" = xyes then : printf "%s\n" "#define HAVE_SYS_UTIME_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" if test "x$ac_cv_header_sys_time_h" = xyes then : printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" if test "x$ac_cv_header_sys_sysmacros_h" = xyes then : printf "%s\n" "#define HAVE_SYS_SYSMACROS_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" if test "x$ac_cv_header_sys_ioctl_h" = xyes then : printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h fi if test "$enable_zlib" != "no"; then ac_fn_c_check_header_compile "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes then : printf "%s\n" "#define HAVE_ZLIB_H 1" >>confdefs.h fi fi if test "$enable_bzlib" != "no"; then ac_fn_c_check_header_compile "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "$ac_includes_default" if test "x$ac_cv_header_bzlib_h" = xyes then : printf "%s\n" "#define HAVE_BZLIB_H 1" >>confdefs.h fi fi if test "$enable_xzlib" != "no"; then ac_fn_c_check_header_compile "$LINENO" "lzma.h" "ac_cv_header_lzma_h" "$ac_includes_default" if test "x$ac_cv_header_lzma_h" = xyes then : printf "%s\n" "#define HAVE_LZMA_H 1" >>confdefs.h fi fi if test "$enable_zstdlib" != "no"; then ac_fn_c_check_header_compile "$LINENO" "zstd.h" "ac_cv_header_zstd_h" "$ac_includes_default" if test "x$ac_cv_header_zstd_h" = xyes then : printf "%s\n" "#define HAVE_ZSTD_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "zstd_errors.h" "ac_cv_header_zstd_errors_h" "$ac_includes_default" if test "x$ac_cv_header_zstd_errors_h" = xyes then : printf "%s\n" "#define HAVE_ZSTD_ERRORS_H 1" >>confdefs.h fi fi if test "$enable_lzlib" != "no"; then ac_fn_c_check_header_compile "$LINENO" "lzlib.h" "ac_cv_header_lzlib_h" "$ac_includes_default" if test "x$ac_cv_header_lzlib_h" = xyes then : printf "%s\n" "#define HAVE_LZLIB_H 1" >>confdefs.h fi fi if test "$enable_lrziplib" != "no"; then ac_fn_c_check_header_compile "$LINENO" "Lrzip.h" "ac_cv_header_Lrzip_h" "$ac_includes_default" if test "x$ac_cv_header_Lrzip_h" = xyes then : printf "%s\n" "#define HAVE_LRZIP_H 1" >>confdefs.h fi fi ac_fn_c_check_type "$LINENO" "sig_t" "ac_cv_type_sig_t" "#include " if test "x$ac_cv_type_sig_t" = xyes then : printf "%s\n" "#define HAVE_SIG_T 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : else case e in #( e) printf "%s\n" "#define off_t long int" >>confdefs.h ;; esac fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes then : else case e in #( e) printf "%s\n" "#define size_t unsigned int" >>confdefs.h ;; esac fi ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default" if test "x$ac_cv_member_struct_stat_st_rdev" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_RDEV 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct tm" "tm_gmtoff" "ac_cv_member_struct_tm_tm_gmtoff" "#include " if test "x$ac_cv_member_struct_tm_tm_gmtoff" = xyes then : printf "%s\n" "#define HAVE_STRUCT_TM_TM_GMTOFF 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test ${ac_cv_struct_tm+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm=time.h else case e in #( e) ac_cv_struct_tm=sys/time.h ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 printf "%s\n" "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } if test ${ac_cv_c_undeclared_builtin_options+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CFLAGS=$CFLAGS ac_cv_c_undeclared_builtin_options='cannot detect' for ac_arg in '' -fno-builtin; do CFLAGS="$ac_save_CFLAGS $ac_arg" # This test program should *not* compile successfully. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { (void) strchr; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) # This test program should compile successfully. # No library function is consistently available on # freestanding implementations, so test against a dummy # declaration. Include always-available headers on the # off chance that they somehow elicit warnings. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include extern void ac_decl (int, char *); int main (void) { (void) ac_decl (0, (char *) 0); (void) ac_decl; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_arg" = x then : ac_cv_c_undeclared_builtin_options='none needed' else case e in #( e) ac_cv_c_undeclared_builtin_options=$ac_arg ;; esac fi break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done CFLAGS=$ac_save_CFLAGS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } case $ac_cv_c_undeclared_builtin_options in #( 'cannot detect') : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot make $CC report undeclared builtins See 'config.log' for more details" "$LINENO" 5; } ;; #( 'none needed') : ac_c_undeclared_builtin_options='' ;; #( *) : ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; esac ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include #include <$ac_cv_struct_tm> " if test "x$ac_cv_member_struct_tm_tm_zone" = xyes then : printf "%s\n" "#define HAVE_STRUCT_TM_TM_ZONE 1" >>confdefs.h fi if test "$ac_cv_member_struct_tm_tm_zone" = yes; then printf "%s\n" "#define HAVE_TM_ZONE 1" >>confdefs.h else ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if !HAVE_DECL_TZNAME extern char *tzname[]; #endif int main (void) { return tzname[0][0]; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes else case e in #( e) ac_cv_var_tzname=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } if test $ac_cv_var_tzname = yes; then printf "%s\n" "#define HAVE_TZNAME 1" >>confdefs.h fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tm_zone in struct tm" >&5 printf %s "checking for tm_zone in struct tm... " >&6; } if test ${ac_cv_struct_tm_zone+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_cv_struct_tm> int main (void) { struct tm tm; tm.tm_zone; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm_zone=yes else case e in #( e) ac_cv_struct_tm_zone=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm_zone" >&5 printf "%s\n" "$ac_cv_struct_tm_zone" >&6; } if test "$ac_cv_struct_tm_zone" = yes; then printf "%s\n" "#define HAVE_TM_ZONE 1" >>confdefs.h fi # On SGI, apparently tzname is a #define, but that's ok, AC_CHECK_DECL will # consider it declared and we won't give our own extern. ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { #if !HAVE_DECL_TZNAME extern char *tzname[]; #endif return tzname[0][0]; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes else case e in #( e) ac_cv_var_tzname=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } if test $ac_cv_var_tzname = yes; then printf "%s\n" "#define HAVE_TZNAME 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tm_isdst in struct tm" >&5 printf %s "checking for tm_isdst in struct tm... " >&6; } if test ${ac_cv_struct_tm_isdst+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_cv_struct_tm> int main (void) { struct tm tm; tm.tm_isdst; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm_isdst=yes else case e in #( e) ac_cv_struct_tm_isdst=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm_isdst" >&5 printf "%s\n" "$ac_cv_struct_tm_isdst" >&6; } if test "$ac_cv_struct_tm_isdst" = yes; then printf "%s\n" "#define HAVE_TM_ISDST 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "daylight" "ac_cv_have_decl_daylight" "#include #include " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_daylight" = xyes then : ac_have_decl=1 else case e in #( e) ac_have_decl=0 ;; esac fi printf "%s\n" "#define HAVE_DECL_DAYLIGHT $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for daylight" >&5 printf %s "checking for daylight... " >&6; } if test ${ac_cv_var_daylight+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main (void) { #if !HAVE_DECL_DAYLIGHT extern int daylight; #endif daylight = atoi("1"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_daylight=yes else case e in #( e) ac_cv_var_daylight=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_daylight" >&5 printf "%s\n" "$ac_cv_var_daylight" >&6; } if test $ac_cv_var_daylight = yes; then printf "%s\n" "#define HAVE_DAYLIGHT 1" >>confdefs.h fi # Check whether --enable-largefile was given. if test ${enable_largefile+y} then : enableval=$enable_largefile; fi if test "$enable_largefile,$enable_year2038" != no,no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable large file support" >&5 printf %s "checking for $CC option to enable large file support... " >&6; } if test ${ac_cv_sys_largefile_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CC="$CC" ac_opt_found=no for ac_opt in "none needed" "-D_FILE_OFFSET_BITS=64" "-D_LARGE_FILES=1" "-n32"; do if test x"$ac_opt" != x"none needed" then : CC="$ac_save_CC $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef FTYPE # define FTYPE off_t #endif /* Check that FTYPE can represent 2**63 - 1 correctly. We can't simply define LARGE_FTYPE to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_FTYPE (((FTYPE) 1 << 31 << 31) - 1 + ((FTYPE) 1 << 31 << 31)) int FTYPE_is_large[(LARGE_FTYPE % 2147483629 == 721 && LARGE_FTYPE % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test x"$ac_opt" = x"none needed" then : # GNU/Linux s390x and alpha need _FILE_OFFSET_BITS=64 for wide ino_t. CC="$CC -DFTYPE=ino_t" if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) CC="$CC -D_FILE_OFFSET_BITS=64" if ac_fn_c_try_compile "$LINENO" then : ac_opt='-D_FILE_OFFSET_BITS=64' fi rm -f core conftest.err conftest.$ac_objext conftest.beam ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam fi ac_cv_sys_largefile_opts=$ac_opt ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CC="$ac_save_CC" test $ac_opt_found = yes || ac_cv_sys_largefile_opts="support not detected" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_opts" >&5 printf "%s\n" "$ac_cv_sys_largefile_opts" >&6; } ac_have_largefile=yes case $ac_cv_sys_largefile_opts in #( "none needed") : ;; #( "supported through gnulib") : ;; #( "support not detected") : ac_have_largefile=no ;; #( "-D_FILE_OFFSET_BITS=64") : printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h ;; #( "-D_LARGE_FILES=1") : printf "%s\n" "#define _LARGE_FILES 1" >>confdefs.h ;; #( "-n32") : CC="$CC -n32" ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_largefile_opts" "$LINENO" 5 ;; esac if test "$enable_year2038" != no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option for timestamps after 2038" >&5 printf %s "checking for $CC option for timestamps after 2038... " >&6; } if test ${ac_cv_sys_year2038_opts+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_CPPFLAGS="$CPPFLAGS" ac_opt_found=no for ac_opt in "none needed" "-D_TIME_BITS=64" "-D__MINGW_USE_VC2005_COMPAT" "-U_USE_32_BIT_TIME_T -D__MINGW_USE_VC2005_COMPAT"; do if test x"$ac_opt" != x"none needed" then : CPPFLAGS="$ac_save_CPPFLAGS $ac_opt" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_year2038_opts="$ac_opt" ac_opt_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test $ac_opt_found = no || break done CPPFLAGS="$ac_save_CPPFLAGS" test $ac_opt_found = yes || ac_cv_sys_year2038_opts="support not detected" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_year2038_opts" >&5 printf "%s\n" "$ac_cv_sys_year2038_opts" >&6; } ac_have_year2038=yes case $ac_cv_sys_year2038_opts in #( "none needed") : ;; #( "support not detected") : ac_have_year2038=no ;; #( "-D_TIME_BITS=64") : printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h ;; #( "-D__MINGW_USE_VC2005_COMPAT") : printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h ;; #( "-U_USE_32_BIT_TIME_T"*) : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "the 'time_t' type is currently forced to be 32-bit. It will stop working after mid-January 2038. Remove _USE_32BIT_TIME_T from the compiler flags. See 'config.log' for more details" "$LINENO" 5; } ;; #( *) : as_fn_error $? "internal error: bad value for \$ac_cv_sys_year2038_opts" "$LINENO" 5 ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for declarations of fseeko and ftello" >&5 printf %s "checking for declarations of fseeko and ftello... " >&6; } if test ${ac_cv_func_fseeko_ftello+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __hpux && !defined _LARGEFILE_SOURCE # include # if LONG_MAX >> 31 == 0 # error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++" # endif #endif #include /* for off_t */ #include int main (void) { int (*fp1) (FILE *, off_t, int) = fseeko; off_t (*fp2) (FILE *) = ftello; return fseeko (stdin, 0, 0) && fp1 (stdin, 0, 0) && ftello (stdin) >= 0 && fp2 (stdin) >= 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_func_fseeko_ftello=yes else case e in #( e) ac_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE=1" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __hpux && !defined _LARGEFILE_SOURCE # include # if LONG_MAX >> 31 == 0 # error "32-bit HP-UX 11/ia64 needs _LARGEFILE_SOURCE for fseeko in C++" # endif #endif #include /* for off_t */ #include int main (void) { int (*fp1) (FILE *, off_t, int) = fseeko; off_t (*fp2) (FILE *) = ftello; return fseeko (stdin, 0, 0) && fp1 (stdin, 0, 0) && ftello (stdin) >= 0 && fp2 (stdin) >= 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_func_fseeko_ftello="need _LARGEFILE_SOURCE" else case e in #( e) ac_cv_func_fseeko_ftello=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fseeko_ftello" >&5 printf "%s\n" "$ac_cv_func_fseeko_ftello" >&6; } if test "$ac_cv_func_fseeko_ftello" != no then : printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h fi if test "$ac_cv_func_fseeko_ftello" = "need _LARGEFILE_SOURCE" then : printf "%s\n" "#define _LARGEFILE_SOURCE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 printf %s "checking for mbstate_t... " >&6; } if test ${ac_cv_type_mbstate_t+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default # include int main (void) { mbstate_t x; return sizeof x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_type_mbstate_t=yes else case e in #( e) ac_cv_type_mbstate_t=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_mbstate_t" >&5 printf "%s\n" "$ac_cv_type_mbstate_t" >&6; } if test $ac_cv_type_mbstate_t = yes; then printf "%s\n" "#define HAVE_MBSTATE_T 1" >>confdefs.h else printf "%s\n" "#define mbstate_t int" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct option in getopt" >&5 printf %s "checking for struct option in getopt... " >&6; } if test ${ac_cv_struct_option_getopt_h+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { struct option op; op.name; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_option_getopt_h=yes else case e in #( e) ac_cv_struct_option_getopt_h=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_option_getopt_h" >&5 printf "%s\n" "$ac_cv_struct_option_getopt_h" >&6; } if test "$ac_cv_struct_option_getopt_h" = yes; then printf "%s\n" "#define HAVE_STRUCT_OPTION 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default " if test "x$ac_cv_type_pid_t" = xyes then : else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _WIN64 && !defined __CYGWIN__ LLP64 #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_pid_type='int' else case e in #( e) ac_pid_type='__int64' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h ;; esac fi ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) printf "%s\n" "#define _UINT8_T 1" >>confdefs.h printf "%s\n" "#define uint8_t $ac_cv_c_uint8_t" >>confdefs.h ;; esac ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h ;; esac ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) printf "%s\n" "#define _UINT32_T 1" >>confdefs.h printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h ;; esac ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" case $ac_cv_c_int32_t in #( no|yes) ;; #( *) printf "%s\n" "#define int32_t $ac_cv_c_int32_t" >>confdefs.h ;; esac ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" case $ac_cv_c_uint64_t in #( no|yes) ;; #( *) printf "%s\n" "#define _UINT64_T 1" >>confdefs.h printf "%s\n" "#define uint64_t $ac_cv_c_uint64_t" >>confdefs.h ;; esac ac_fn_c_find_intX_t "$LINENO" "64" "ac_cv_c_int64_t" case $ac_cv_c_int64_t in #( no|yes) ;; #( *) printf "%s\n" "#define int64_t $ac_cv_c_int64_t" >>confdefs.h ;; esac ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default" if test "x$ac_cv_type_intptr_t" = xyes then : printf "%s\n" "#define HAVE_INTPTR_T 1" >>confdefs.h else case e in #( e) for ac_type in 'int' 'long int' 'long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define intptr_t $ac_type" >>confdefs.h ac_type= fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break done ;; esac fi ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" if test "x$ac_cv_type_uintptr_t" = xyes then : printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h else case e in #( e) for ac_type in 'unsigned int' 'unsigned long int' \ 'unsigned long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define uintptr_t $ac_type" >>confdefs.h ac_type= fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break done ;; esac fi if test "$enable_year2038,$ac_have_year2038,$cross_compiling" = yes,no,no then : # If we're not cross compiling and 'touch' works with a large # timestamp, then we can presume the system supports wider time_t # *somehow* and we just weren't able to detect it. One common # case that we deliberately *don't* probe for is a system that # supports both 32- and 64-bit ABIs but only the 64-bit ABI offers # wide time_t. (It would be inappropriate for us to override an # intentional use of -m32.) Error out, demanding use of # --disable-year2038 if this is intentional. if TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null then : case `TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null` in #( *'Feb 7 2106'* | *'Feb 7 17:10'*) : { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "this system appears to support timestamps after mid-January 2038, but no mechanism for enabling wide 'time_t' was detected. Did you mean to build a 64-bit binary? (E.g., 'CC=\"${CC} -m64\"'.) To proceed with 32-bit time_t, configure with '--disable-year2038'. See 'config.log' for more details" "$LINENO" 5; } ;; #( *) : ;; esac fi fi ac_func= for ac_item in $ac_func_c_list do if test $ac_func; then ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then echo "#define $ac_item 1" >> confdefs.h fi ac_func= else ac_func=$ac_item fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 printf %s "checking for working mmap... " >&6; } if test ${ac_cv_func_mmap_fixed_mapped+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on platforms where we know the result. linux*) ac_cv_func_mmap_fixed_mapped=yes ;; # If we don't know, assume the worst. *) ac_cv_func_mmap_fixed_mapped=no ;; esac else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. */ #include #include #ifndef getpagesize /* Prefer sysconf to the legacy getpagesize function, as getpagesize has been removed from POSIX and is limited to page sizes that fit in 'int'. */ # ifdef _SC_PAGESIZE # define getpagesize() sysconf (_SC_PAGESIZE) # elif defined _SC_PAGE_SIZE # define getpagesize() sysconf (_SC_PAGE_SIZE) # elif HAVE_GETPAGESIZE int getpagesize (); # else # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif #endif int main (void) { char *data, *data2, *data3; const char *cdata2; long i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); /* 'return 8;' not currently used. */ /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); free (data); free (data3); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_mmap_fixed_mapped=yes else case e in #( e) ac_cv_func_mmap_fixed_mapped=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt if test "x$ac_cv_func_fork" = xyes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 printf %s "checking for working fork... " >&6; } if test ${ac_cv_func_fork_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : ac_cv_func_fork_works=cross else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* By R. Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_fork_works=yes else case e in #( e) ac_cv_func_fork_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 printf "%s\n" "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 printf "%s\n" "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 printf %s "checking for working vfork... " >&6; } if test ${ac_cv_func_vfork_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "$cross_compiling" = yes then : ac_cv_func_vfork_works=cross else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #include #ifdef HAVE_VFORK_H # include #endif static void do_nothing (int sig) { (void) sig; } /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void sparc_address_test (int arg) { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main (void) { pid_t parent = getpid (); pid_t child; sparc_address_test (0); /* On Solaris 2.4, changes by the child to the signal handler also munge signal handlers in the parent. To detect this, start by putting the parent's handler in a known state. */ signal (SIGTERM, SIG_DFL); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* Alter the child's signal handler. */ if (signal (SIGTERM, do_nothing) != SIG_DFL) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child munge the parent's signal handler? */ || signal (SIGTERM, SIG_DFL) != SIG_DFL /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_vfork_works=yes else case e in #( e) ac_cv_func_vfork_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 printf "%s\n" "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 printf "%s\n" "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then printf "%s\n" "#define HAVE_WORKING_VFORK 1" >>confdefs.h else printf "%s\n" "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then printf "%s\n" "#define HAVE_WORKING_FORK 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5 printf %s "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } if test ${ac_cv_func_mbrtowc+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { wchar_t wc; char const s[] = ""; size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_func_mbrtowc=yes else case e in #( e) ac_cv_func_mbrtowc=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 printf "%s\n" "$ac_cv_func_mbrtowc" >&6; } if test $ac_cv_func_mbrtowc = yes; then printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcc compiler warnings" >&5 printf %s "checking for gcc compiler warnings... " >&6; } # Check whether --enable-warnings was given. if test ${enable_warnings+y} then : enableval=$enable_warnings; if test "${enableval}" = no -o "$GCC" = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } WARNINGS= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \ -Wmissing-declarations -Wredundant-decls -Wnested-externs \ -Wsign-compare -Wreturn-type -Wswitch -Wshadow \ -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter -Wformat=2" fi else case e in #( e) if test "$GCC" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \ -Wmissing-declarations -Wredundant-decls -Wnested-externs \ -Wsign-compare -Wreturn-type -Wswitch -Wshadow \ -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter -Wformat=2" else WARNINGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi ;; esac fi ac_fn_c_check_func "$LINENO" "strndup" "ac_cv_func_strndup" if test "x$ac_cv_func_strndup" = xyes then : printf "%s\n" "#define HAVE_STRNDUP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" if test "x$ac_cv_func_mkstemp" = xyes then : printf "%s\n" "#define HAVE_MKSTEMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mkostemp" "ac_cv_func_mkostemp" if test "x$ac_cv_func_mkostemp" = xyes then : printf "%s\n" "#define HAVE_MKOSTEMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" if test "x$ac_cv_func_utimes" = xyes then : printf "%s\n" "#define HAVE_UTIMES 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "utime" "ac_cv_func_utime" if test "x$ac_cv_func_utime" = xyes then : printf "%s\n" "#define HAVE_UTIME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcwidth" "ac_cv_func_wcwidth" if test "x$ac_cv_func_wcwidth" = xyes then : printf "%s\n" "#define HAVE_WCWIDTH 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strtof" "ac_cv_func_strtof" if test "x$ac_cv_func_strtof" = xyes then : printf "%s\n" "#define HAVE_STRTOF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale" if test "x$ac_cv_func_newlocale" = xyes then : printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale" if test "x$ac_cv_func_uselocale" = xyes then : printf "%s\n" "#define HAVE_USELOCALE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "freelocale" "ac_cv_func_freelocale" if test "x$ac_cv_func_freelocale" = xyes then : printf "%s\n" "#define HAVE_FREELOCALE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "memmem" "ac_cv_func_memmem" if test "x$ac_cv_func_memmem" = xyes then : printf "%s\n" "#define HAVE_MEMMEM 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "pipe2" "ac_cv_func_pipe2" if test "x$ac_cv_func_pipe2" = xyes then : printf "%s\n" "#define HAVE_PIPE2 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "posix_spawnp" "ac_cv_func_posix_spawnp" if test "x$ac_cv_func_posix_spawnp" = xyes then : printf "%s\n" "#define HAVE_POSIX_SPAWNP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" if test "x$ac_cv_func_getopt_long" = xyes then : printf "%s\n" "#define HAVE_GETOPT_LONG 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" getopt_long.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getopt_long.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf" if test "x$ac_cv_func_asprintf" = xyes then : printf "%s\n" "#define HAVE_ASPRINTF 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" asprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS asprintf.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" if test "x$ac_cv_func_vasprintf" = xyes then : printf "%s\n" "#define HAVE_VASPRINTF 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" vasprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" if test "x$ac_cv_func_strlcpy" = xyes then : printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" strlcpy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat" if test "x$ac_cv_func_strlcat" = xyes then : printf "%s\n" "#define HAVE_STRLCAT 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" strlcat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcat.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" if test "x$ac_cv_func_getline" = xyes then : printf "%s\n" "#define HAVE_GETLINE 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" getline.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getline.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "ctime_r" "ac_cv_func_ctime_r" if test "x$ac_cv_func_ctime_r" = xyes then : printf "%s\n" "#define HAVE_CTIME_R 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" ctime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS ctime_r.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "asctime_r" "ac_cv_func_asctime_r" if test "x$ac_cv_func_asctime_r" = xyes then : printf "%s\n" "#define HAVE_ASCTIME_R 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" asctime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS asctime_r.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r" if test "x$ac_cv_func_localtime_r" = xyes then : printf "%s\n" "#define HAVE_LOCALTIME_R 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" localtime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS localtime_r.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r" if test "x$ac_cv_func_gmtime_r" = xyes then : printf "%s\n" "#define HAVE_GMTIME_R 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" gmtime_r.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS gmtime_r.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread" if test "x$ac_cv_func_pread" = xyes then : printf "%s\n" "#define HAVE_PREAD 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" pread.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS pread.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" if test "x$ac_cv_func_strcasestr" = xyes then : printf "%s\n" "#define HAVE_STRCASESTR 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" strcasestr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strcasestr.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "fmtcheck" "ac_cv_func_fmtcheck" if test "x$ac_cv_func_fmtcheck" = xyes then : printf "%s\n" "#define HAVE_FMTCHECK 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" fmtcheck.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS fmtcheck.$ac_objext" ;; esac ;; esac fi ac_fn_c_check_func "$LINENO" "dprintf" "ac_cv_func_dprintf" if test "x$ac_cv_func_dprintf" = xyes then : printf "%s\n" "#define HAVE_DPRINTF 1" >>confdefs.h else case e in #( e) case " $LIBOBJS " in *" dprintf.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS dprintf.$ac_objext" ;; esac ;; esac fi if test "$enable_zlib" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gzopen in -lz" >&5 printf %s "checking for gzopen in -lz... " >&6; } if test ${ac_cv_lib_z_gzopen+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char gzopen (void); int main (void) { return gzopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_z_gzopen=yes else case e in #( e) ac_cv_lib_z_gzopen=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_gzopen" >&5 printf "%s\n" "$ac_cv_lib_z_gzopen" >&6; } if test "x$ac_cv_lib_z_gzopen" = xyes then : printf "%s\n" "#define HAVE_LIBZ 1" >>confdefs.h LIBS="-lz $LIBS" fi fi if test "$enable_bzlib" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzCompressInit in -lbz2" >&5 printf %s "checking for BZ2_bzCompressInit in -lbz2... " >&6; } if test ${ac_cv_lib_bz2_BZ2_bzCompressInit+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lbz2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char BZ2_bzCompressInit (void); int main (void) { return BZ2_bzCompressInit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_bz2_BZ2_bzCompressInit=yes else case e in #( e) ac_cv_lib_bz2_BZ2_bzCompressInit=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzCompressInit" >&5 printf "%s\n" "$ac_cv_lib_bz2_BZ2_bzCompressInit" >&6; } if test "x$ac_cv_lib_bz2_BZ2_bzCompressInit" = xyes then : printf "%s\n" "#define HAVE_LIBBZ2 1" >>confdefs.h LIBS="-lbz2 $LIBS" fi fi if test "$enable_xzlib" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lzma_stream_decoder in -llzma" >&5 printf %s "checking for lzma_stream_decoder in -llzma... " >&6; } if test ${ac_cv_lib_lzma_lzma_stream_decoder+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-llzma $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char lzma_stream_decoder (void); int main (void) { return lzma_stream_decoder (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_lzma_lzma_stream_decoder=yes else case e in #( e) ac_cv_lib_lzma_lzma_stream_decoder=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lzma_lzma_stream_decoder" >&5 printf "%s\n" "$ac_cv_lib_lzma_lzma_stream_decoder" >&6; } if test "x$ac_cv_lib_lzma_lzma_stream_decoder" = xyes then : printf "%s\n" "#define HAVE_LIBLZMA 1" >>confdefs.h LIBS="-llzma $LIBS" fi fi if test "$enable_zstdlib" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ZSTD_createDStream in -lzstd" >&5 printf %s "checking for ZSTD_createDStream in -lzstd... " >&6; } if test ${ac_cv_lib_zstd_ZSTD_createDStream+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lzstd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char ZSTD_createDStream (void); int main (void) { return ZSTD_createDStream (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_zstd_ZSTD_createDStream=yes else case e in #( e) ac_cv_lib_zstd_ZSTD_createDStream=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zstd_ZSTD_createDStream" >&5 printf "%s\n" "$ac_cv_lib_zstd_ZSTD_createDStream" >&6; } if test "x$ac_cv_lib_zstd_ZSTD_createDStream" = xyes then : printf "%s\n" "#define HAVE_LIBZSTD 1" >>confdefs.h LIBS="-lzstd $LIBS" fi fi if test "$enable_lzlib" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LZ_decompress_open in -llz" >&5 printf %s "checking for LZ_decompress_open in -llz... " >&6; } if test ${ac_cv_lib_lz_LZ_decompress_open+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-llz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char LZ_decompress_open (void); int main (void) { return LZ_decompress_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_lz_LZ_decompress_open=yes else case e in #( e) ac_cv_lib_lz_LZ_decompress_open=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lz_LZ_decompress_open" >&5 printf "%s\n" "$ac_cv_lib_lz_LZ_decompress_open" >&6; } if test "x$ac_cv_lib_lz_LZ_decompress_open" = xyes then : printf "%s\n" "#define HAVE_LIBLZ 1" >>confdefs.h LIBS="-llz $LIBS" fi fi if test "$enable_lrziplib" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lrzip_new in -llrzip" >&5 printf %s "checking for lrzip_new in -llrzip... " >&6; } if test ${ac_cv_lib_lrzip_lrzip_new+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-llrzip $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char lrzip_new (void); int main (void) { return lrzip_new (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_lrzip_lrzip_new=yes else case e in #( e) ac_cv_lib_lrzip_lrzip_new=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lrzip_lrzip_new" >&5 printf "%s\n" "$ac_cv_lib_lrzip_lrzip_new" >&6; } if test "x$ac_cv_lib_lrzip_lrzip_new" = xyes then : printf "%s\n" "#define HAVE_LIBLRZIP 1" >>confdefs.h LIBS="-llrzip $LIBS" fi fi if test "$enable_libseccomp" != "no"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for seccomp_init in -lseccomp" >&5 printf %s "checking for seccomp_init in -lseccomp... " >&6; } if test ${ac_cv_lib_seccomp_seccomp_init+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lseccomp $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char seccomp_init (void); int main (void) { return seccomp_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_seccomp_seccomp_init=yes else case e in #( e) ac_cv_lib_seccomp_seccomp_init=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_seccomp_seccomp_init" >&5 printf "%s\n" "$ac_cv_lib_seccomp_seccomp_init" >&6; } if test "x$ac_cv_lib_seccomp_seccomp_init" = xyes then : printf "%s\n" "#define HAVE_LIBSECCOMP 1" >>confdefs.h LIBS="-lseccomp $LIBS" fi fi if test "$MINGW" = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for regexec in -lgnurx" >&5 printf %s "checking for regexec in -lgnurx... " >&6; } if test ${ac_cv_lib_gnurx_regexec+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_check_lib_save_LIBS=$LIBS LIBS="-lgnurx $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char regexec (void); int main (void) { return regexec (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_gnurx_regexec=yes else case e in #( e) ac_cv_lib_gnurx_regexec=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gnurx_regexec" >&5 printf "%s\n" "$ac_cv_lib_gnurx_regexec" >&6; } if test "x$ac_cv_lib_gnurx_regexec" = xyes then : printf "%s\n" "#define HAVE_LIBGNURX 1" >>confdefs.h LIBS="-lgnurx $LIBS" else case e in #( e) as_fn_error $? "libgnurx is required to build file(1) with MinGW" "$LINENO" 5 ;; esac fi fi if test "$cross_compiling" = yes; then IS_CROSS_COMPILE_TRUE= IS_CROSS_COMPILE_FALSE='#' else IS_CROSS_COMPILE_TRUE='#' IS_CROSS_COMPILE_FALSE= fi if test "$enable_zlib" = "yes"; then if test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" != "yesyes"; then as_fn_error $? "zlib support requested but not found" "$LINENO" 5 fi fi if test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" = "yesyes"; then printf "%s\n" "#define ZLIBSUPPORT 1" >>confdefs.h fi if test "$enable_bzlib" = "yes"; then if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" != "yesyes"; then as_fn_error $? "bzlib support requested but not found" "$LINENO" 5 fi fi if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" = "yesyes"; then printf "%s\n" "#define BZLIBSUPPORT 1" >>confdefs.h fi if test "$enable_xzlib" = "yes"; then if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" != "yesyes"; then as_fn_error $? "xzlib support requested but not found" "$LINENO" 5 fi fi if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" = "yesyes"; then printf "%s\n" "#define XZLIBSUPPORT 1" >>confdefs.h fi if test "$enable_zstdlib" = "yes"; then if test "$ac_cv_header_zstd_h$ac_cv_lib_zstd_ZSTD_createDStream" != "yesyes"; then as_fn_error $? "zstdlib support requested but not found" "$LINENO" 5 fi fi if test "$ac_cv_header_zstd_h$ac_cv_lib_zstd_ZSTD_createDStream" = "yesyes"; then printf "%s\n" "#define ZSTDLIBSUPPORT 1" >>confdefs.h fi if test "$enable_lzlib" = "yes"; then if test "$ac_cv_header_lzlib_h$ac_cv_lib_lz_LZ_decompress_open" != "yesyes"; then as_fn_error $? "lzlib support requested but not found" "$LINENO" 5 fi fi if test "$ac_cv_header_lzlib_h$ac_cv_lib_lz_LZ_decompress_open" = "yesyes"; then printf "%s\n" "#define LZLIBSUPPORT 1" >>confdefs.h fi if test "$enable_lrziplib" = "yes"; then if test "$ac_cv_header_Lrzip_h$ac_cv_lib_lrzip_lrzip_new" != "yesyes"; then as_fn_error $? "lrzip support requested but not found" "$LINENO" 5 fi fi if test "$ac_cv_header_Lrzip_h$ac_cv_lib_lrzip_lrzip_new" = "yesyes"; then printf "%s\n" "#define LRZIPLIBSUPPORT 1" >>confdefs.h fi ac_config_files="$ac_config_files Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile libmagic.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MINGW_TRUE}" && test -z "${MINGW_FALSE}"; then as_fn_error $? "conditional \"MINGW\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FSECT5_TRUE}" && test -z "${FSECT5_FALSE}"; then as_fn_error $? "conditional \"FSECT5\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi # Check whether --enable-year2038 was given. if test ${enable_year2038+y} then : enableval=$enable_year2038; fi if test -z "${IS_CROSS_COMPILE_TRUE}" && test -z "${IS_CROSS_COMPILE_FALSE}"; then as_fn_error $? "conditional \"IS_CROSS_COMPILE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by file $as_me 5.46, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ file config.status 5.46 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ FILECMD \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "magic/Makefile") CONFIG_FILES="$CONFIG_FILES magic/Makefile" ;; "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;; "libmagic.pc") CONFIG_FILES="$CONFIG_FILES libmagic.pc" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # A file(cmd) program that detects file types. FILECMD=$lt_FILECMD # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive (by configure). lt_ar_flags=$lt_ar_flags # Flags to create an archive. AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"} # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi file-5.46/acinclude.m4000664 023540 023540 00000004126 14342172767 016342 0ustar00christoschristos000000 000000 dnl from autoconf 2.13 acspecific.m4, with changes to check for daylight AC_DEFUN([AC_STRUCT_TIMEZONE_DAYLIGHT], [AC_REQUIRE([AC_STRUCT_TM])dnl AC_CACHE_CHECK([for tm_zone in struct tm], ac_cv_struct_tm_zone, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([#include #include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_zone;])], ac_cv_struct_tm_zone=yes, ac_cv_struct_tm_zone=no)]) if test "$ac_cv_struct_tm_zone" = yes; then AC_DEFINE(HAVE_TM_ZONE,1,[HAVE_TM_ZONE]) fi # On SGI, apparently tzname is a #define, but that's ok, AC_CHECK_DECL will # consider it declared and we won't give our own extern. AC_CHECK_DECLS([tzname], , , [#include ]) AC_CACHE_CHECK(for tzname, ac_cv_var_tzname, [AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include ], [[#if !HAVE_DECL_TZNAME extern char *tzname[]; #endif return tzname[0][0];]])], [ac_cv_var_tzname=yes], [ac_cv_var_tzname=no])]) if test $ac_cv_var_tzname = yes; then AC_DEFINE(HAVE_TZNAME,1,[HAVE_TZNAME]) fi AC_CACHE_CHECK([for tm_isdst in struct tm], ac_cv_struct_tm_isdst, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([#include #include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_isdst;])], ac_cv_struct_tm_isdst=yes, ac_cv_struct_tm_isdst=no)]) if test "$ac_cv_struct_tm_isdst" = yes; then AC_DEFINE(HAVE_TM_ISDST,1,[HAVE_TM_ISDST]) fi AC_CHECK_DECLS([daylight], , , [#include #include ]) AC_CACHE_CHECK(for daylight, ac_cv_var_daylight, [AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include #include ], [#if !HAVE_DECL_DAYLIGHT extern int daylight; #endif daylight = atoi("1");])], ac_cv_var_daylight=yes, ac_cv_var_daylight=no)]) if test $ac_cv_var_daylight = yes; then AC_DEFINE(HAVE_DAYLIGHT,1,[HAVE_DAYLIGHT]) fi ]) AC_DEFUN([AC_STRUCT_OPTION_GETOPT_H], [AC_CACHE_CHECK([for struct option in getopt], ac_cv_struct_option_getopt_h, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([#include ], [struct option op; op.name;])], ac_cv_struct_option_getopt_h=yes, ac_cv_struct_option_getopt_h=no)]) if test "$ac_cv_struct_option_getopt_h" = yes; then AC_DEFINE(HAVE_STRUCT_OPTION,1,[HAVE_STRUCT_OPTION]) fi ]) file-5.46/configure.ac000664 023540 023540 00000021753 14721422401 016424 0ustar00christoschristos000000 000000 dnl Process this file with autoconf to produce a configure script. AC_INIT([file],[5.46],[christos@astron.com]) AM_INIT_AUTOMAKE([subdir-objects foreign]) m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) AC_MSG_CHECKING(for builtin ELF support) AC_ARG_ENABLE(elf, [ --disable-elf disable builtin ELF support], [if test "${enableval}" = yes; then AC_MSG_RESULT(yes) AC_DEFINE([BUILTIN_ELF], 1, [Define if built-in ELF support is used]) else AC_MSG_RESULT(no) fi], [ # enable by default AC_MSG_RESULT(yes) AC_DEFINE([BUILTIN_ELF], 1, [Define in built-in ELF support is used]) ]) AC_MSG_CHECKING(for ELF core file support) AC_ARG_ENABLE(elf-core, [ --disable-elf-core disable ELF core file support], [if test "${enableval}" = yes; then AC_MSG_RESULT(yes) AC_DEFINE([ELFCORE], 1, [Define for ELF core file support]) else AC_MSG_RESULT(no) fi], [ # enable by default AC_MSG_RESULT(yes) AC_DEFINE([ELFCORE], 1, [Define for ELF core file support]) ]) AC_MSG_CHECKING(for zlib support) AC_ARG_ENABLE([zlib], [AS_HELP_STRING([--disable-zlib], [disable zlib compression support @<:@default=auto@:>@])]) AC_MSG_RESULT($enable_zlib) AC_MSG_CHECKING(for bzlib support) AC_ARG_ENABLE([bzlib], [AS_HELP_STRING([--disable-bzlib], [disable bz2lib compression support @<:@default=auto@:>@])]) AC_MSG_RESULT($enable_bzlib) AC_MSG_CHECKING(for xzlib support) AC_ARG_ENABLE([xzlib], [AS_HELP_STRING([--disable-xzlib], [disable liblzma/xz compression support @<:@default=auto@:>@])]) AC_MSG_RESULT($enable_xzlib) AC_MSG_CHECKING(for zstdlib support) AC_ARG_ENABLE([zstdlib], [AS_HELP_STRING([--disable-zstdlib], [disable zstdlib compression support @<:@default=auto@:>@])]) AC_MSG_RESULT($enable_zstdlib) AC_MSG_CHECKING(for lzlib support) AC_ARG_ENABLE([lzlib], [AS_HELP_STRING([--disable-lzlib], [disable liblz (lzip) compression support @<:@default=auto@:>@])]) AC_MSG_RESULT($enable_lzlib) AC_MSG_CHECKING(for lrziplib support) AC_ARG_ENABLE([lrziplib], [AS_HELP_STRING([--disable-lrziplib], [disable liblrzip (lrzip) compression support @<:@default=auto@:>@])]) AC_MSG_RESULT($enable_lrziplib) AC_MSG_CHECKING(for libseccomp support) AC_ARG_ENABLE([libseccomp], [AS_HELP_STRING([--disable-libseccomp], [disable libseccomp sandboxing @<:@default=auto@:>@])]) AC_MSG_RESULT($enable_libseccomp) AC_MSG_CHECKING(for file formats in man section 5) AC_ARG_ENABLE(fsect-man5, [ --enable-fsect-man5 enable file formats in man section 5], [if test "${enableval}" = yes; then AC_MSG_RESULT(yes) fsect=5 else AC_MSG_RESULT(no) fsect=4 fi], [ # disable by default AC_MSG_RESULT(no) fsect=4 ]) AC_CANONICAL_HOST case "$host_os" in mingw32*) MINGW=1 ;; *) MINGW=0 ;; esac AC_SUBST(MINGW) AM_CONDITIONAL(MINGW, test "$MINGW" = 1) AC_SUBST([pkgdatadir], ['$(datadir)/misc']) AC_SUBST(fsect) AM_CONDITIONAL(FSECT5, test x$fsect = x5) AC_SUBST(WARNINGS) dnl Checks for programs. AC_PROG_CC AC_USE_SYSTEM_EXTENSIONS AM_PROG_CC_C_O AC_C_BIGENDIAN AC_PROG_INSTALL AC_PROG_LN_S LT_INIT([disable-static pic-only]) gl_VISIBILITY dnl Checks for headers AC_HEADER_MAJOR AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(stdint.h fcntl.h inttypes.h unistd.h byteswap.h) AC_CHECK_HEADERS(spawn.h utime.h wchar.h wctype.h) AC_CHECK_HEADERS(getopt.h err.h xlocale.h) AC_CHECK_HEADERS(sys/bswap.h sys/mman.h sys/stat.h sys/types.h sys/utime.h sys/time.h sys/sysmacros.h sys/ioctl.h) if test "$enable_zlib" != "no"; then AC_CHECK_HEADERS(zlib.h) fi if test "$enable_bzlib" != "no"; then AC_CHECK_HEADERS(bzlib.h) fi if test "$enable_xzlib" != "no"; then AC_CHECK_HEADERS(lzma.h) fi if test "$enable_zstdlib" != "no"; then AC_CHECK_HEADERS(zstd.h zstd_errors.h) fi if test "$enable_lzlib" != "no"; then AC_CHECK_HEADERS(lzlib.h) fi if test "$enable_lrziplib" != "no"; then AC_CHECK_HEADERS(Lrzip.h) fi AC_CHECK_TYPE([sig_t],[AC_DEFINE([HAVE_SIG_T],1,[Have sig_t type])],,[#include ]) dnl Checks for typedefs, structures, and compiler characteristics. AC_TYPE_OFF_T AC_TYPE_SIZE_T AC_CHECK_MEMBERS([struct stat.st_rdev]) AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[#include ]) AC_STRUCT_TIMEZONE AC_STRUCT_TIMEZONE_DAYLIGHT AC_SYS_LARGEFILE AC_FUNC_FSEEKO AC_TYPE_MBSTATE_T AC_STRUCT_OPTION_GETOPT_H AC_TYPE_PID_T AC_TYPE_UINT8_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_INT32_T AC_TYPE_UINT64_T AC_TYPE_INT64_T AC_TYPE_INTPTR_T AC_TYPE_UINTPTR_T m4_ifdef([AC_SYS_YEAR2038], [AC_SYS_YEAR2038], [ # GNU libc only allows setting _TIME_BITS when FILE_OFFSET_BITS is also set. # GNU libc defines __TIMESIZE on systems where _TIME_BITS can be set. AS_IF([test X"$ac_cv_sys_file_offset_bits" = X"64"], [ AC_CHECK_DECL(__TIMESIZE, [ AC_DEFINE([_TIME_BITS], [64], [Number of bits in a timestamp, on hosts where this is settable.]) ], [], [ AC_INCLUDES_DEFAULT #include ]) ]) ]) AC_FUNC_MMAP AC_FUNC_FORK AC_FUNC_MBRTOWC AC_MSG_CHECKING(for gcc compiler warnings) AC_ARG_ENABLE(warnings, [ --disable-warnings disable compiler warnings], [if test "${enableval}" = no -o "$GCC" = no; then AC_MSG_RESULT(no) WARNINGS= else AC_MSG_RESULT(yes) WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \ -Wmissing-declarations -Wredundant-decls -Wnested-externs \ -Wsign-compare -Wreturn-type -Wswitch -Wshadow \ -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter -Wformat=2" fi], [ if test "$GCC" = yes; then AC_MSG_RESULT(yes) WARNINGS="-Wall -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith \ -Wmissing-declarations -Wredundant-decls -Wnested-externs \ -Wsign-compare -Wreturn-type -Wswitch -Wshadow \ -Wcast-qual -Wwrite-strings -Wextra -Wunused-parameter -Wformat=2" else WARNINGS= AC_MSG_RESULT(no) fi]) dnl Checks for functions AC_CHECK_FUNCS(strndup mkstemp mkostemp utimes utime wcwidth strtof newlocale uselocale freelocale memmem pipe2 posix_spawnp) dnl Provide implementation of some required functions if necessary AC_REPLACE_FUNCS(getopt_long asprintf vasprintf strlcpy strlcat getline ctime_r asctime_r localtime_r gmtime_r pread strcasestr fmtcheck dprintf) dnl Checks for libraries if test "$enable_zlib" != "no"; then AC_CHECK_LIB(z, gzopen) fi if test "$enable_bzlib" != "no"; then AC_CHECK_LIB(bz2, BZ2_bzCompressInit) fi if test "$enable_xzlib" != "no"; then AC_CHECK_LIB(lzma, lzma_stream_decoder) fi if test "$enable_zstdlib" != "no"; then AC_CHECK_LIB(zstd, ZSTD_createDStream) fi if test "$enable_lzlib" != "no"; then AC_CHECK_LIB(lz, LZ_decompress_open) fi if test "$enable_lrziplib" != "no"; then AC_CHECK_LIB(lrzip, lrzip_new) fi if test "$enable_libseccomp" != "no"; then AC_CHECK_LIB(seccomp, seccomp_init) fi if test "$MINGW" = 1; then AC_CHECK_LIB(gnurx,regexec,,AC_MSG_ERROR([libgnurx is required to build file(1) with MinGW])) fi dnl See if we are cross-compiling AM_CONDITIONAL(IS_CROSS_COMPILE, test "$cross_compiling" = yes) dnl Final sanity checks if test "$enable_zlib" = "yes"; then if test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" != "yesyes"; then AC_MSG_ERROR([zlib support requested but not found]) fi fi if test "$ac_cv_header_zlib_h$ac_cv_lib_z_gzopen" = "yesyes"; then AC_DEFINE([ZLIBSUPPORT], 1, [Enable zlib compression support]) fi if test "$enable_bzlib" = "yes"; then if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" != "yesyes"; then AC_MSG_ERROR([bzlib support requested but not found]) fi fi if test "$ac_cv_header_bzlib_h$ac_cv_lib_bz2_BZ2_bzCompressInit" = "yesyes"; then AC_DEFINE([BZLIBSUPPORT], 1, [Enable bzlib compression support]) fi if test "$enable_xzlib" = "yes"; then if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" != "yesyes"; then AC_MSG_ERROR([xzlib support requested but not found]) fi fi if test "$ac_cv_header_lzma_h$ac_cv_lib_lzma_lzma_stream_decoder" = "yesyes"; then AC_DEFINE([XZLIBSUPPORT], 1, [Enable xzlib compression support]) fi if test "$enable_zstdlib" = "yes"; then if test "$ac_cv_header_zstd_h$ac_cv_lib_zstd_ZSTD_createDStream" != "yesyes"; then AC_MSG_ERROR([zstdlib support requested but not found]) fi fi if test "$ac_cv_header_zstd_h$ac_cv_lib_zstd_ZSTD_createDStream" = "yesyes"; then AC_DEFINE([ZSTDLIBSUPPORT], 1, [Enable zstdlib compression support]) fi if test "$enable_lzlib" = "yes"; then if test "$ac_cv_header_lzlib_h$ac_cv_lib_lz_LZ_decompress_open" != "yesyes"; then AC_MSG_ERROR([lzlib support requested but not found]) fi fi if test "$ac_cv_header_lzlib_h$ac_cv_lib_lz_LZ_decompress_open" = "yesyes"; then AC_DEFINE([LZLIBSUPPORT], 1, [Enable lzlib compression support]) fi if test "$enable_lrziplib" = "yes"; then if test "$ac_cv_header_Lrzip_h$ac_cv_lib_lrzip_lrzip_new" != "yesyes"; then AC_MSG_ERROR([lrzip support requested but not found]) fi fi if test "$ac_cv_header_Lrzip_h$ac_cv_lib_lrzip_lrzip_new" = "yesyes"; then AC_DEFINE([LRZIPLIBSUPPORT], 1, [Enable lrziplib compression support]) fi AC_CONFIG_FILES([Makefile src/Makefile magic/Makefile tests/Makefile doc/Makefile python/Makefile libmagic.pc]) AC_OUTPUT file-5.46/aclocal.m4000664 023540 023540 00000123030 14721422717 015777 0ustar00christoschristos000000 000000 # generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.72],, [m4_warning([this file was generated for autoconf 2.72. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/visibility.m4]) m4_include([acinclude.m4]) file-5.46/Makefile.in000664 023540 023540 00000070164 14721422722 016211 0ustar00christoschristos000000 000000 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = libmagic.pc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgconfigexecdir)" DATA = $(pkgconfigexec_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/libmagic.pc.in AUTHORS COPYING ChangeLog INSTALL \ NEWS README.md TODO compile config.guess config.sub install-sh \ ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print pkgdatadir = @pkgdatadir@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WARNINGS = @WARNINGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fsect = @fsect@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = MAINT RELEASE-PROCEDURE README.DEVELOPER README.md \ m4/visibility.m4 SUBDIRS = src magic tests doc python # This variable must have 'exec' in its name, in order to be installed # by 'install-exec' target (instead of default 'install-data') pkgconfigexecdir = $(libdir)/pkgconfig pkgconfigexec_DATA = libmagic.pc all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 libmagic.pc: $(top_builddir)/config.status $(srcdir)/libmagic.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigexecDATA: $(pkgconfigexec_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfigexec_DATA)'; test -n "$(pkgconfigexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigexecdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigexecdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigexecdir)" || exit $$?; \ done uninstall-pkgconfigexecDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfigexec_DATA)'; test -n "$(pkgconfigexecdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigexecdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigexecdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-pkgconfigexecDATA install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigexecDATA .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip dist-zstd distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkgconfigexecDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-pkgconfigexecDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: file-5.46/config.h.in000664 023540 023540 00000035513 14721422721 016165 0ustar00christoschristos000000 000000 /* config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define in built-in ELF support is used */ #undef BUILTIN_ELF /* Enable bzlib compression support */ #undef BZLIBSUPPORT /* Define for ELF core file support */ #undef ELFCORE /* Define to 1 if you have the 'asctime_r' function. */ #undef HAVE_ASCTIME_R /* Define to 1 if you have the 'asprintf' function. */ #undef HAVE_ASPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_BYTESWAP_H /* Define to 1 if you have the header file. */ #undef HAVE_BZLIB_H /* Define to 1 if you have the 'ctime_r' function. */ #undef HAVE_CTIME_R /* HAVE_DAYLIGHT */ #undef HAVE_DAYLIGHT /* Define to 1 if you have the declaration of 'daylight', and to 0 if you don't. */ #undef HAVE_DECL_DAYLIGHT /* Define to 1 if you have the declaration of 'tzname', and to 0 if you don't. */ #undef HAVE_DECL_TZNAME /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the 'dprintf' function. */ #undef HAVE_DPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_ERR_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the 'fmtcheck' function. */ #undef HAVE_FMTCHECK /* Define to 1 if you have the 'fork' function. */ #undef HAVE_FORK /* Define to 1 if you have the 'freelocale' function. */ #undef HAVE_FREELOCALE /* Define to 1 if fseeko (and ftello) are declared in stdio.h. */ #undef HAVE_FSEEKO /* Define to 1 if you have the 'getline' function. */ #undef HAVE_GETLINE /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the 'getopt_long' function. */ #undef HAVE_GETOPT_LONG /* Define to 1 if you have the 'getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the 'gmtime_r' function. */ #undef HAVE_GMTIME_R /* Define to 1 if the system has the type 'intptr_t'. */ #undef HAVE_INTPTR_T /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the 'bz2' library (-lbz2). */ #undef HAVE_LIBBZ2 /* Define to 1 if you have the 'gnurx' library (-lgnurx). */ #undef HAVE_LIBGNURX /* Define to 1 if you have the 'lrzip' library (-llrzip). */ #undef HAVE_LIBLRZIP /* Define to 1 if you have the 'lz' library (-llz). */ #undef HAVE_LIBLZ /* Define to 1 if you have the 'lzma' library (-llzma). */ #undef HAVE_LIBLZMA /* Define to 1 if you have the 'seccomp' library (-lseccomp). */ #undef HAVE_LIBSECCOMP /* Define to 1 if you have the 'z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the 'zstd' library (-lzstd). */ #undef HAVE_LIBZSTD /* Define to 1 if you have the 'localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if you have the header file. */ #undef HAVE_LRZIP_H /* Define to 1 if you have the header file. */ #undef HAVE_LZLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_LZMA_H /* Define to 1 if mbrtowc and mbstate_t are properly declared. */ #undef HAVE_MBRTOWC /* Define to 1 if declares mbstate_t. */ #undef HAVE_MBSTATE_T /* Define to 1 if you have the 'memmem' function. */ #undef HAVE_MEMMEM /* Define to 1 if you have the header file. */ #undef HAVE_MINIX_CONFIG_H /* Define to 1 if you have the 'mkostemp' function. */ #undef HAVE_MKOSTEMP /* Define to 1 if you have the 'mkstemp' function. */ #undef HAVE_MKSTEMP /* Define to 1 if you have a working 'mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the 'newlocale' function. */ #undef HAVE_NEWLOCALE /* Define to 1 if you have the 'pipe2' function. */ #undef HAVE_PIPE2 /* Define to 1 if you have the 'posix_spawnp' function. */ #undef HAVE_POSIX_SPAWNP /* Define to 1 if you have the 'pread' function. */ #undef HAVE_PREAD /* Have sig_t type */ #undef HAVE_SIG_T /* Define to 1 if you have the header file. */ #undef HAVE_SPAWN_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the 'strcasestr' function. */ #undef HAVE_STRCASESTR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the 'strlcat' function. */ #undef HAVE_STRLCAT /* Define to 1 if you have the 'strlcpy' function. */ #undef HAVE_STRLCPY /* Define to 1 if you have the 'strndup' function. */ #undef HAVE_STRNDUP /* Define to 1 if you have the 'strtof' function. */ #undef HAVE_STRTOF /* HAVE_STRUCT_OPTION */ #undef HAVE_STRUCT_OPTION /* Define to 1 if 'st_rdev' is a member of 'struct stat'. */ #undef HAVE_STRUCT_STAT_ST_RDEV /* Define to 1 if 'tm_gmtoff' is a member of 'struct tm'. */ #undef HAVE_STRUCT_TM_TM_GMTOFF /* Define to 1 if 'tm_zone' is a member of 'struct tm'. */ #undef HAVE_STRUCT_TM_TM_ZONE /* Define to 1 if you have the header file. */ #undef HAVE_SYS_BSWAP_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SYSMACROS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UTIME_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* HAVE_TM_ISDST */ #undef HAVE_TM_ISDST /* HAVE_TM_ZONE */ #undef HAVE_TM_ZONE /* HAVE_TZNAME */ #undef HAVE_TZNAME /* Define to 1 if the system has the type 'uintptr_t'. */ #undef HAVE_UINTPTR_T /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the 'uselocale' function. */ #undef HAVE_USELOCALE /* Define to 1 if you have the 'utime' function. */ #undef HAVE_UTIME /* Define to 1 if you have the 'utimes' function. */ #undef HAVE_UTIMES /* Define to 1 if you have the header file. */ #undef HAVE_UTIME_H /* Define to 1 if you have the 'vasprintf' function. */ #undef HAVE_VASPRINTF /* Define to 1 if you have the 'vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 or 0, depending whether the compiler supports simple visibility declarations. */ #undef HAVE_VISIBILITY /* Define to 1 if you have the header file. */ #undef HAVE_WCHAR_H /* Define to 1 if you have the header file. */ #undef HAVE_WCTYPE_H /* Define to 1 if you have the 'wcwidth' function. */ #undef HAVE_WCWIDTH /* Define to 1 if 'fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if 'vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_XLOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_ZLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_ZSTD_ERRORS_H /* Define to 1 if you have the header file. */ #undef HAVE_ZSTD_H /* Enable lrziplib compression support */ #undef LRZIPLIBSUPPORT /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Enable lzlib compression support */ #undef LZLIBSUPPORT /* Define to 1 if 'major', 'minor', and 'makedev' are declared in . */ #undef MAJOR_IN_MKDEV /* Define to 1 if 'major', 'minor', and 'makedev' are declared in . */ #undef MAJOR_IN_SYSMACROS /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define to 1 if your declares 'struct tm'. */ #undef TM_IN_SYS_TIME /* Enable extensions on AIX, Interix, z/OS. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by C23 Annex F. */ #ifndef __STDC_WANT_IEC_60559_EXT__ # undef __STDC_WANT_IEC_60559_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Enable xzlib compression support */ #undef XZLIBSUPPORT /* Enable zlib compression support */ #undef ZLIBSUPPORT /* Enable zstdlib compression support */ #undef ZSTDLIBSUPPORT /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define to 1 if necessary to make fseeko visible. */ #undef _LARGEFILE_SOURCE /* Define to 1 on platforms where this makes off_t a 64-bit type. */ #undef _LARGE_FILES /* Number of bits in time_t, on hosts where this is settable. */ #undef _TIME_BITS /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT32_T /* Define for Solaris 2.5.1 so the uint64_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT64_T /* Define for Solaris 2.5.1 so the uint8_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT8_T /* Define to 1 on platforms where this makes time_t a 64-bit type. */ #undef __MINGW_USE_VC2005_COMPAT /* Define to the type of a signed integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef int32_t /* Define to the type of a signed integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef int64_t /* Define to the type of a signed integer type wide enough to hold a pointer, if such a type exists, and if the system does not define it. */ #undef intptr_t /* Define to a type if does not define. */ #undef mbstate_t /* Define to 'long int' if does not define. */ #undef off_t /* Define as a signed integer type capable of holding a process identifier. */ #undef pid_t /* Define as 'unsigned int' if doesn't define. */ #undef size_t /* Define to the type of an unsigned integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef uint16_t /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t /* Define to the type of an unsigned integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ #undef uint64_t /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t /* Define to the type of an unsigned integer type wide enough to hold a pointer, if such a type exists, and if the system does not define it. */ #undef uintptr_t /* Define as 'fork' if 'vfork' does not work. */ #undef vfork file-5.46/libmagic.pc.in000664 023540 023540 00000000352 14371230330 016625 0ustar00christoschristos000000 000000 prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libmagic Description: Magic number recognition library Version: @VERSION@ Libs: -L${libdir} -lmagic Libs.private: @LIBS@ Cflags: -I${includedir} file-5.46/AUTHORS000664 023540 023540 00000000015 14014775172 015205 0ustar00christoschristos000000 000000 See COPYING. file-5.46/COPYING000664 023540 023540 00000003161 14014775172 015175 0ustar00christoschristos000000 000000 $File: COPYING,v 1.2 2018/09/09 20:33:28 christos Exp $ Copyright (c) Ian F. Darwin 1986, 1987, 1989, 1990, 1991, 1992, 1994, 1995. Software written by Ian F. Darwin and others; maintained 1994- Christos Zoulas. This software is not subject to any export provision of the United States Department of Commerce, and may be exported to any country or planet. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice immediately at the beginning of the file, without modification, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. file-5.46/ChangeLog000664 023540 023540 00000173600 14721636073 015723 0ustar00christoschristos000000 000000 2024-11-27 14:44 Christos Zoulas * release 5.46 * Add OFFPOSITIVE 2024-11-25 13:56 Christos Zoulas * avoid leaking symbols in libmagic 2024-11-10 13:56 Christos Zoulas * PR/562: jsummers: Search/regex offsets are absolute to the beginning of the file, so adjust them by subtracting the offset that the "use" starts so that we don't double-count it. 2024-11-09 19:30 Christos Zoulas * PR/543: matshch: bump nbuf so we can get the flags into the buffer. 2024-11-02 14:34 Christos Zoulas * Add Android elf notes (enh) 2023-12-29 12:55 Christos Zoulas * Add limit for number of magic warnings allowed 2023-07-29 12:55 Christos Zoulas * check regex bounds (found by clusterfuzz) 2023-07-27 15:45 Christos Zoulas * release 5.45 2023-07-17 11:53 Christos Zoulas * PR/465: psrok1: Avoid muslc asctime_r crash 2023-05-21 13:05 Christos Zoulas * add SIMH tape format support 2023-02-09 12:50 Christos Zoulas * bump the max size of the elf section notes to be read to 128K and make it configurable 2023-01-08 1:08 Christos Zoulas * PR/415: Fix decompression with program returning empty 2022-12-26 1:47 Christos Zoulas * PR/408: fix -p with seccomp * PR/412: fix MinGW compilation 2022-12-26 12:26 Christos Zoulas * release 5.44 2022-12-14 9:24 Christos Zoulas * Handle nan's so that we don't get internal floating point exceptions when they are enabled (Vincent Mihalkovic) 2022-10-23 10:21 Christos Zoulas * PR/397: Restore the ability to process files from stdin immediately. 2022-09-20 17:12 Christos Zoulas * fixed various clustefuzz issues 2022-09-19 15:54 Christos Zoulas * Fix error detection for decompression code (Vincent Mihalkovic) 2022-09-15 13:50 Christos Zoulas * Add MAGIC_NO_COMPRESS_FORK and use it to produce a more meaningful error message if we are sandboxing. 2022-09-15 10:45 Christos Zoulas * Add built-in lzip decompression support (Michal Gorny) 2022-09-14 10:35 Christos Zoulas * Add built-in zstd decompression support (Martin Rodriguez Reboredo) 2022-09-13 14:55 Christos Zoulas * release 5.43 2022-09-10 9:17 Christos Zoulas * Add octal indirect magic (Michal Gorny) 2022-08-17 11:43 Christos Zoulas * PR/374: avoid infinite loop in non-wide code (piru) * PR/373: Obey MAGIC_CONTINUE with multiple magic files (vismarli) 2022-07-26 11:10 Christos Zoulas * Fix bug with large flist (Florian Weimer) 2022-07-07 13:21 Christos Zoulas * PR/364: Detect non-nul-terminated core filenames from QEMU (mam-ableton) 2022-07-04 15:45 Christos Zoulas * PR/359: Add support for http://ndjson.org/ (darose) * PR/362: Fix wide printing (ro-ee) * PR/358: Fix width for -f - (jpalus) * PR/356: Fix JSON constant parsing (davewhite) 2022-06-10 9:40 Christos Zoulas * release 5.42 2022-05-31 14:50 Christos Zoulas * PR/348: add missing cases to prevent file from aborting on random magic files. 2022-05-27 21:05 Christos Zoulas * PR/351: octalify filenames when not raw before printing. 2022-04-18 17:51 Christos Zoulas * fix regex cacheing bug (Dirk Mueller) * merge file_regcomp and file_regerror() to simplify the code and reduce memory requirements for storing regexes (Dirk Mueller) 2022-03-19 12:56 Christos Zoulas * cache regex (Dirk Mueller) * detect filesystem full by flushing output (Dirk Mueller) 2021-11-19 12:36 Christos Zoulas * implement running decompressor programs using posix_spawnp(2) instead of vfork(2) 2021-10-24 11:51 Christos Zoulas * Add support for msdos dates and times 2021-10-20 9:55 Christos Zoulas * use the system byte swapping functions if available (Werner Fink) 2021-10-18 11:57 Christos Zoulas * release 5.41 2021-09-23 03:51 Christos Zoulas * Avinash Sonawane: Fix tzname detection 2021-09-03 09:17 Christos Zoulas * Fix relationship tests with "search" magic, don't short circuit logic 2021-07-13 01:06 Christos Zoulas * Fix memory leak in compile mode 2021-07-01 03:51 Christos Zoulas * PR/272: kiefermat: Only set returnval = 1 when we printed something (in all cases print or !print). This simplifies the logic and fixes the issue in the PR with -k and --mime-type there was no continuation printed before the default case. 2021-06-30 13:07 Christos Zoulas * PR/270: Don't translate unprintable characters in %s magic formats when -r * PR/269: Avoid undefined behavior with clang (adding offset to NULL) 2021-05-09 18:38 Christos Zoulas * Add a new flag (f) that requires that the match is a full word, not a partial word match. * Add varint types (unused) 2021-04-19 17:17 Christos Zoulas * PR/256: mutableVoid: If the file is less than 3 bytes, use the file length to determine type * PR/259: aleksandr.v.novichkov: mime printing through indirect magic is not taken into account, use match directly so that it does. 2021-04-04 17:02 Christos Zoulas * count the total bytes found not the total byte positions in order to determine encoding (Anatol Belski) 2021-03-30 20:21 Christos Zoulas * release 5.40 2021-02-05 16:31 Christos Zoulas * PR/234: Add limit to the number of bytes to scan for encoding * PR/230: Fix /T (trim flag) for regex 2021-02-01 12:31 Christos Zoulas * PR/77: Trim trailing separator. 2020-12-17 15:44 Christos Zoulas * PR/211: Convert system read errors from corrupt ELF files into human readable error messages 2020-12-08 16:24 Christos Zoulas * fix multithreaded decompression file descriptor issue by using close-on-exec (Denys Vlasenko) 2020-06-27 11:58 Christos Zoulas * Exclude surrogate pairs from utf-8 detection (Michael Liu) 2020-06-25 12:53 Christos Zoulas * Include # to the list of ignored format chars (Werner Fink) 2020-06-14 20:02 Christos Zoulas * release 5.39 2020-06-07 20:00 Christos Zoulas * Remove unused subtype_mime (Steve Grubb) * Remove unused check in okstat (Steve Grubb) * Fix mime-type in elf binaries by making sure $x is set * Fix indirect negative offsets broken by OFFNEGATIVE * Fix GUID equality check * PR/165: Handle empty array and strings in JSON * PR/162: Add --exclude-quiet 2020-06-06 15:33 Christos Zoulas * Fix memory leak in ascmagic (Steve Grubb) 2020-06-04 00:21 Christos Zoulas * Fix string comparison length with ignore whitespace 2020-05-31 00:11 Christos Zoulas * Fix mingwin 64 compilation 2020-05-30 23:56 Christos Zoulas * PR/159: whitelist getpid needed for file_pipe2file() 2020-05-09 18:57 Christos Zoulas * Indicate negative offsets with a flag OFFNEGATIVE so that -0 works. * Introduce "offset" magic type that can be used to detect the file size, and bail on short files. * document DER better in the magic man page. 2020-03-11 21:53 Christos Zoulas * fix memory leaks (SonarQube) 2020-03-08 21:33 Christos Zoulas * fix memory leaks (SonarQube) * rewrite confusing loops (SonarQube) * fix bogus test (SonarQube) * pass a sized buffer to file_fmttime() (SonarQube) * fix memory leaks (SonarQube) 2020-02-20 15:50 Christos Zoulas * Don't allow * in printf formats, or the code itself (Christoph Biedl) * Introduce a printf output size checker to avoid DoS attacks 2020-02-17 17:22 Christos Zoulas * Avoid memory leak on error (oss-fuzz) * Check length of string on DER before derefercing and add new types * Add missing DER string (oss-fuzz) 2020-02-16 20:45 Christos Zoulas * Add missing DER types, and debugging 2020-02-13 13:10 Christos Zoulas * PR/140: Avoid abort with hand-crafted magic file (gockelhahn) * PR/139 Avoid DoS in printf with hand-crafted magic file (gockelhahn) * PR/138: Avoid crash with hand-crafted magic file (gockelhahn) 2020-02-12 17:30 Christos Zoulas * PR/136: Fix static build by adding a libmagic.pc (Fabrice Fontaine) 2019-12-24 14:16 Christos Zoulas * add guid support 2019-12-16 21:11 Christos Zoulas * release 5.38 2019-12-15 22:13 Christos Zoulas Document changes since the previous release: - Always accept -S (no sandbox) even if we don't support sandboxing - More syscalls elided for sandboxing - For ELF dynamic means having an interpreter not just PT_DYNAMIC - Check for large ELF session header offset - When saving and restoring a locale, keep the locale name in our own storage. - Add a flag to disable CSV file detection. - Don't pass NULL/0 to memset to appease sanitizers. - Avoid spurious prints when looks for extensions or apple strings in fsmagic. - Add builtin decompressors for xz and and bzip. - Add a limit for the number of CDF elements. - More checks for overflow in CDF. 2019-05-14 22:26 Christos Zoulas * release 5.37 2019-05-09 22:27 Christos Zoulas * Make sure that continuation separators are printed with -k within softmagic 2019-05-06 22:27 Christos Zoulas * Change SIGPIPE saving and restoring during compression to use sigaction(2) instead of signal(3) and cache it. (Denys Vlasenko) * Cache stat(2) calls more to reduce number of calls (Denys Vlasenko) 2019-05-06 17:25 Christos Zoulas * PR/77: Handle --mime-type and -k correctly. 2019-05-03 15:26 Christos Zoulas * Switch decompression code to use vfork() because tools like rpmdiff and rpmbuild call libmagic with large process footprints (Denys Vlasenko) 2019-04-07 14:05 Christos Zoulas * PR/75: --enable-zlib, did not work. 2019-02-27 11:54 Christos Zoulas * Improve regex efficiency (Michael Schroeder) by: 1. Prefixing regex searches with regular search for keywords where possible 2. Using memmem(3) where available 2019-02-20 10:16 Christos Zoulas * release 5.36 2019-02-19 15:30 Christos Zoulas * Fix cast to use cast macros * Add UCS-32 builtin detection (PR/61) reported by tmc 2019-02-18 18:24 Christos Zoulas * Fix stack read (PR/62) and write (PR/64) stack overflows reported by spinpx 2018-10-18 19:32 Christos Zoulas * release 5.35 2018-09-10 20:38 Christos Zoulas * Add FreeBSD ELF core file support (John Baldwin) 2018-08-20 18:40 Christos Zoulas * PR/30: Allow all parameter values to be set (don't treat 0 specially) * handle default annotations on the softmagic match instead at the end. 2018-07-25 10:17 Christos Zoulas * PR/23: Recognize JSON files 2018-07-25 10:17 Christos Zoulas * PR/18: file --mime-encoding should not print mime-type 2018-07-25 8:50 Christos Zoulas * release 5.34 2018-06-22 16:38 Christos Zoulas * Add Quad indirect offsets 2018-05-24 14:10 Christos Zoulas * Enable parsing of ELF dynamic sections to handle PIE better 2018-04-15 14:52 Christos Zoulas * release 5.33 2018-02-24 14:50 Christos Zoulas * extend the support for ${x?:} expansions for magic descriptions 2018-02-21 16:25 Christos Zoulas * add support for ${x?:} in mime types to handle pie binaries. 2017-11-03 9:23 Christos Zoulas * add support for negative offsets (offsets from the end of file) 2017-09-26 8:22 Christos Zoulas * close the file on error when writing magic (Steve Grubb) 2017-09-24 12:02 Christos Zoulas * seccomp support (Paul Moore) 2017-09-02 11:53 Christos Zoulas * release 5.32 2017-08-28 16:37 Christos Zoulas * Always reset state in {file,buffer}_apprentice (Krzysztof Wilczynski) 2017-08-27 03:55 Christos Zoulas * Fix always true condition (Thomas Jarosch) 2017-05-24 17:30 Christos Zoulas * pickier parsing of numeric values in magic files. 2017-05-23 17:55 Christos Zoulas * PR/615 add magic_getflags() 2017-05-23 13:55 Christos Zoulas * release 5.31 2017-03-17 20:32 Christos Zoulas * remove trailing spaces from magic files * refactor is_tar * better bounds checks for cdf 2017-02-10 12:24 Christos Zoulas * release 5.30 2017-02-07 23:27 Christos Zoulas * If we exceeded the offset in a search return no match (Christoph Biedl) * Be more lenient on corrupt CDF files (Christoph Biedl) 2017-02-04 16:46 Christos Zoulas * pacify ubsan sign extension (oss-fuzz/524) 2017-02-01 12:42 Christos Zoulas * off by one in cdf parsing (PR/593) * report debugging sections in elf (PR/591) 2016-11-06 10:52 Christos Zoulas * Allow @@@ in extensions * Add missing overflow check in der magic (Jonas Wagner) 2016-10-25 10:40 Christos Zoulas * release 5.29 2016-10-24 11:20 Christos Zoulas * der getlength overflow (Jonas Wagner) * multiple magic file load failure (Christoph Biedl) 2016-10-17 11:26 Christos Zoulas * CDF parsing improvements (Guy Helmer) 2016-07-20 7:26 Christos Zoulas * Add support for signed indirect offsets 2016-07-18 7:41 Christos Zoulas * cat /dev/null | file - should print empty (Christoph Biedl) 2016-07-05 15:20 Christos Zoulas * Bump string size from 64 to 96. 2016-06-13 20:20 Christos Zoulas * PR/556: Fix separators on annotations. 2016-06-13 19:40 Christos Zoulas * release 5.28 * fix leak on allocation failure 2016-06-01 1:20 Christos Zoulas * PR/555: Avoid overflow for offset > nbytes * PR/550: Segv on DER parsing: - use the correct variable for length - set offset to 0 on failure. 2016-05-13 12:00 Christos Zoulas * release 5.27 2016-04-18 9:35 Christos Zoulas * Errors comparing DER entries or computing offsets are just indications of malformed non-DER files. Don't print them. * Offset comparison was off-by-one. * Fix compression code (Werner Fink) * Put new bytes constant in the right file (not the generated one) 2016-04-16 18:34 Christos Zoulas * release 5.26 2016-03-31 13:50 Christos Zoulas * make the number of bytes read from files configurable. 2016-03-21 13:40 Christos Zoulas * Add bounds checks for DER code (discovered by Thomas Jarosch) * Change indirect recursion limit to indirect use count and bump from 15 to 50 to prevent abuse. 2016-03-13 20:39 Christos Zoulas * Add -00 which prints filename\0description\0 2016-03-01 13:28 Christos Zoulas * Fix ID3 indirect parsing 2016-01-19 10:18 Christos Zoulas * add DER parsing capability 2015-11-13 10:35 Christos Zoulas * provide dprintf(3) for the OS's that don't have it. 2015-11-11 16:25 Christos Zoulas * redo the compression code report decompression errors 2015-11-10 23:25 Christos Zoulas * REG_STARTEND code is not working as expected, delete it. 2015-11-09 16:05 Christos Zoulas * Add zlib support if we have it. 2015-11-05 11:22 Christos Zoulas * PR/492: compression forking was broken with magic_buffer. 2015-09-16 9:50 Christos Zoulas * release 5.25 2015-09-11 13:25 Christos Zoulas * add a limit to the length of regex searches 2015-09-08 9:50 Christos Zoulas * fix problems with --parameter (Christoph Biedl) 2015-07-11 10:35 Christos Zoulas * Windows fixes PR/466 (Jason Hood) 2015-07-09 10:35 Christos Zoulas * release 5.24 2015-06-11 8:52 Christos Zoulas * redo long option encoding to fix off-by-one in 5.23 2015-06-10 13:50 Christos Zoulas * release 5.23 2015-06-09 16:10 Christos Zoulas * Fix issue with regex range for magic with offset * Always return true from mget with USE (success to mget not match indication). Fixes mime evaluation after USE magic * PR/459: Don't insert magic entries to the list if there are parsing errors for them. 2015-06-03 16:00 Christos Zoulas * PR/455: Add utf-7 encoding 2015-06-03 14:30 Christos Zoulas * PR/455: Implement -Z, look inside, but don't report on compression * PR/454: Fix allocation error on bad magic. 2015-05-29 10:30 Christos Zoulas * handle MAGIC_CONTINUE everywhere, not just in softmagic 2015-05-21 14:30 Christos Zoulas * don't print descriptions for NAME types when mime. 2015-04-09 15:59 Christos Zoulas * Add --extension to list the known extensions for this file type Idea by Andrew J Roazen 2015-02-14 12:23 Christos Zoulas * Bump file search buffer size to 1M. 2015-01-09 14:35 Christos Zoulas * Fix multiple issues with date formats reported by Christoph Biedl: - T_LOCAL meaning was reversed - Arithmetic did not work Also stop adjusting daylight savings for gmt printing. 2015-01-05 13:00 Christos Zoulas * PR/411: Fix memory corruption from corrupt cdf file. 2015-01-02 15:15 Christos Zoulas * release 5.22 2015-01-01 12:01 Christos Zoulas * add indirect relative for TIFF/Exif 2014-12-16 18:10 Christos Zoulas * restructure elf note printing to avoid repeated messages * add note limit, suggested by Alexander Cherepanov 2014-12-16 16:53 Christos Zoulas * Bail out on partial pread()'s (Alexander Cherepanov) * Fix incorrect bounds check in file_printable (Alexander Cherepanov) 2014-12-11 20:01 Christos Zoulas * PR/405: ignore SIGPIPE from uncompress programs * change printable -> file_printable and use it in more places for safety * in ELF, instead of "(uses dynamic libraries)" when PT_INTERP is present print the interpreter name. 2014-12-10 20:01 Christos Zoulas * release 5.21 2014-11-27 18:40 Christos Zoulas * Allow setting more parameters from the command line. * Split name/use and indirect magic recursion limits. 2014-11-27 11:12 Christos Zoulas * Adjust ELF parameters and the default recursion level. * Allow setting the recursion level dynamically. 2014-11-24 8:55 Christos Zoulas * The following fixes resulted from Thomas Jarosch's fuzzing tests that revealed severe performance issues on pathological input: - limit number of elf program and sections processing - abort elf note processing quickly - reduce the number of recursion levels from 20 to 10 - preserve error messages in indirect magic handling This is tracked as CVE-2014-8116 and CVE-2014-8117 2014-11-12 10:30 Christos Zoulas * fix bogus free in the user buffer case. 2014-11-11 12:35 Christos Zoulas * fix out of bounds read for pascal strings * fix memory leak (not freeing the head of each mlist) 2014-11-07 10:25 Christos Zoulas * When printing strings from a file, convert them to printable on a byte by byte basis, so that we don't get issues with locale's trying to interpret random byte streams as UTF-8 and having printf error out with EILSEQ. 2014-10-17 11:48 Christos Zoulas * fix bounds in note reading (Francisco Alonso / Red Hat) 2014-10-11 15:02 Christos Zoulas * fix autoconf glue for setlocale and locale_t; some OS's have locale_t in xlocale.h 2014-10-10 15:01 Christos Zoulas * release 5.20 2014-08-17 10:01 Christos Zoulas * recognize encrypted CDF documents 2014-08-04 9:18 Christos Zoulas * add magic_load_buffers from Brooks Davis 2014-07-24 16:40 Christos Zoulas * add thumbs.db support 2014-06-12 12:28 Christos Zoulas * release 5.19 2014-06-09 9:04 Christos Zoulas * Misc buffer overruns and missing buffer size tests in cdf parsing (Francisco Alonso, Jan Kaluza) 2014-06-02 14:50 Christos Zoulas * Enforce limit of 8K on regex searches that have no limits * Allow the l modifier for regex to mean line count. Default to byte count. If line count is specified, assume a max of 80 characters per line to limit the byte count. * Don't allow conversions to be used for dates, allowing the mask field to be used as an offset. 2014-05-30 12:51 Christos Zoulas * Make the range operator limit the length of the regex search. 2014-05-14 19:23 Christos Zoulas * PR/347: Windows fixes * PR/352: Hangul word processor recognition * PR/354: Encoding irregularities in text files 2014-05-06 6:12 Christos Zoulas * Fix uninitialized title in CDF files (Jan Kaluza) 2014-05-04 14:55 Christos Zoulas * PR/351: Fix compilation of empty files 2014-04-30 17:39 Christos Zoulas * Fix integer formats: We don't specify 'l' or 'h' and 'hh' specifiers anymore, only 'll' for quads and nothing for the rest. This is so that magic writing is simpler. 2014-04-01 15:25 Christos Zoulas * PR/341: Jan Kaluza, fix memory leak * PR/342: Jan Kaluza, fix out of bounds read 2014-03-28 15:25 Christos Zoulas * Fix issue with long formats not matching fmtcheck 2014-03-26 11:25 Christos Zoulas * release 5.18 2014-03-15 17:45 Christos Zoulas * add fmtcheck(3) for those who don't have it 2014-03-14 15:12 Christos Zoulas * prevent mime entries from being attached to magic entries with no descriptions * adjust magic strength for regex type * remove superfluous ascmagic with encoding test 2014-03-06 12:01 Christos Zoulas * fix regression fix echo -ne "\012\013\014" | file -i - which printed "binary" instead of "application/octet-stream" * add size_t overflow check for magic file size 2014-02-27 16:01 Christos Zoulas * experimental support for matching with CFD CLSID 2014-02-18 13:04 Kimmo Suominen (kimmo@suominen.com) * Cache old LC_CTYPE locale before setting it to "C", so we can use it to restore LC_CTYPE instead of asking setlocale() to scan the environment variables. 2014-02-12 18:21 Christos Zoulas * Count recursion levels through indirect magic 2014-02-11 10:40 Christos Zoulas * Prevent infinite recursion on files with indirect offsets of 0 2014-01-30 21:00 Christos Zoulas * Add -E flag that makes file print filesystem errors to stderr and exit. 2014-01-08 17:20 Christos Zoulas * mime printing could print results from multiple magic entries if there were multiple matches. * in some cases overflow was not detected when computing offsets in softmagic. 2013-12-05 12:00 Christos Zoulas * use strcasestr() to for cdf strings * reset to the "C" locale while doing regex operations, or case insensitive comparisons; this is provisional 2013-11-19 20:10 Christos Zoulas * always leave magic file loaded, don't unload for magic_check, etc. * fix default encoding to binary instead of unknown which broke recently * handle empty and one byte files, less specially so that --mime-encoding does not break completely. ` 2013-11-06 14:40 Christos Zoulas * fix erroneous non-zero exit code from non-existent file and message 2013-10-29 14:25 Christos Zoulas * add CDF MSI file detection (Guy Helmer) 2013-09-03 11:56 Christos Zoulas * Don't mix errors and regular output if there was an error * in magic_descriptor() don't close the file and try to restore its position 2013-05-30 17:25 Christos Zoulas * Don't treat magic as an error if offset was past EOF (Christoph Biedl) 2013-05-28 17:25 Christos Zoulas * Fix spacing issues in softmagic and elf (Jan Kaluza) 2013-05-02 18:00 Christos Zoulas * Fix segmentation fault with multiple magic_load commands. 2013-04-22 11:20 Christos Zoulas * The way "default" was implemented was not very useful because the "if something was printed at that level" was not easily controlled by the user, and the format was bound to a string which is too restrictive. Add a "clear" for that level keyword and make "default" void. This way one can do: >>13 clear x >>13 lelong 1 foo >>13 lelong 2 bar >>13 default x >>>13 lelong x unknown %x 2013-03-25 13:20 Christos Zoulas * disallow strength setting in "name" entries 2013-03-06 21:24 Christos Zoulas * fix recursive magic separator printing 2013-02-26 19:28 Christos Zoulas * limit recursion level for mget * fix pread() related breakage in cdf * handle offsets properly in recursive "use" 2013-02-18 10:39 Christos Zoulas * add elf reading of debug info to determine if file is stripped (Jan Kaluza) * use pread() 2013-01-25 18:05 Christos Zoulas * change mime description size from 64 to 80 to accommodate OOXML. 2013-01-11 14:50 Christos Zoulas * Warn about inconsistent continuation levels. * Change fsmagic to add a space after it prints. 2013-01-10 21:00 Christos Zoulas * Make getline public so that file can link against it. Perhaps it is better to rename it, or hide it differently. Fixes builds on platforms that do not provide it. 2013-01-07 16:30 Christos Zoulas * Add SuS d{,1,2,4,8}, u{,1,2,4,8} and document what long, int, short, etc is (Guy Harris) 2013-01-06 11:20 Christos Zoulas * add magic_version function and constant * Redo memory allocation and de-allocation. (prevents double frees on non mmap platforms) * Fix bug with name/use having to do with passing found state from the parent to the child and back. 2012-12-19 8:47 Christos Zoulas * Only print elf capabilities for archs we know (Jan Kaluza) 2012-10-30 19:14 Christos Zoulas * Add "name" and "use" file types in order to look inside mach-o files. 2012-09-06 10:40 Christos Zoulas * make --version exit 0 (Matthew Schultz) * add string/T (Jan Kaluza) 2012-08-09 2:15 Christos Zoulas * add z and t modifiers for our own vasprintf * search for $HOME/.magic.mgc if it is there first * fix reads from a pipe, and preserve errno 2012-05-15 13:12 Christos Zoulas * use ctime_r, asctime_r 2012-04-06 17:18 Christos Zoulas * Fixes for indirect offsets to handle apple disk formats 2012-04-03 18:26 Christos Zoulas * Add windows date field types * More info for windows shortcuts (incomplete) 2012-02-20 17:33 Christos Zoulas * Fix CDF parsing issues found by CERT's fuzzing tool (Will Dormann) 2011-12-15 12:17 Chris Metcalf * Support Tilera architectures (tile64, tilepro, tilegx). 2011-12-16 16:33 Reuben Thomas * Add magic for /usr/bin/env Perl scripts * Weaken generic script magic to avoid clashing with language-specific magic. 2011-12-08 13:37 Reuben Thomas * Simplify if (p) free(p) to free(p). 2011-12-08 13:07 Reuben Thomas * Remove hardwired token finding (names.h), turning it into soft magic. Patterns are either anchored regexs or search/8192. English language detection and PL/1 detection have been removed as they were too fragile. -e tokens is still accepted for backwards compatibility. * Move 3ds patterns (which are commented out anyway) into autodesk (they were, oddly, in c-lang). 2011-12-06 00:16 Reuben Thomas * Tweak strength of generic hash-bang detectors to be less than specific ones. * Make an inconsistent description of Python scripts consistent. 2011-12-05 23:58 Reuben Thomas * Fix minor error in file(1). 2011-11-05 00:00 Reuben Thomas * Fix issue #150 (I hope). 2011-09-22 12:57 Christos Zoulas * Python3 binding fixes from Kelly Anderson 2011-09-20 11:32 Christos Zoulas * If a string type magic entry is marked as text or binary only match text files against text entries and binary files against binary entries. 2011-09-01 12:12 Christos Zoulas * Don't wait for any subprocess, just the one we forked. 2011-08-26 16:40 Christos Zoulas * If the application name is not set in a cdf file, try to see if it has a directory with the application name on it. 2011-08-17 14:32 Christos Zoulas * Fix ELF lseek(2) madness. Inspired by PR/134 by Jan Kaluza 2011-08-14 09:03 Christos Zoulas * Don't use variable string formats. 2011-07-12 12:32 Reuben Thomas * Fix detection of Zip files (Mantis #128). * Make some minor improvements to file(1). * Rename MIME types for filesystem objects for consistency with xdg-utils. Typically this means that application/x-foo becomes inode/foo, but some names also change slightly, e.g. application/x-character-device becomes inode/chardevice. 2011-05-10 20:57 Christos Zoulas * fix mingw compilation (Abradoks) 2011-05-10 20:57 Christos Zoulas * remove patchlevel.h * Fix read past allocated memory caused by double-incrementing a pointer in a loop (reported by Roberto Maar) 2011-03-30 15:45 Christos Zoulas * Fix cdf string buffer setting (Sven Anders) 2011-03-20 16:35 Christos Zoulas * Eliminate MAXPATHLEN and use dynamic allocation for path and file buffers. 2011-03-15 18:15 Christos Zoulas * binary tests on magic entries with masks could spuriously get converted to ascii. 2011-03-12 18:06 Reuben Thomas * Improve file.man (remove BUGS, present email addresses consistently). 2011-03-07 19:38 Christos Zoulas * add lrzip support (from Ville Skytta) 2011-02-10 16:36 Christos Zoulas * fix CDF bounds checking (Guy Helmer) 2011-02-10 12:03 Christos Zoulas * add cdf_ctime() that prints a meaningful error when time cannot be converted. 2011-02-02 20:40 Christos Zoulas * help and version output to stdout. * When matching softmagic for ascii files, don't just print the softmagic classification, keep going and print the text classification too. This fixes broken troff files when we moved them from keyword recognition to softmagic (they stopped printing "with CRLF" etc.) Reported by Doug McIlroy. 2011-01-16 19:31 Reuben Thomas * Fix two potential buffer overruns in apprentice_list. 2011-01-14 22:33 Reuben Thomas * New Python binding in pure Python. * Update libmagic(3). 2011-01-06 21:40 Reuben Thomas * Fix Python bindings (including recent Python 3 compatibility update). 2011-01-04 18:43 Reuben Thomas * magic/Makefile.am: make it easier to recover from magic build failures. * Fix pstring length specifier parsing to avoid generating invalid magic files. * Add pstring length "J" (for "JPEG") to specify that the length include itself. * Fix JPEG comment parsing at last using pstring/HJ! * Ignore section 5 man pages in doc/.cvsignore. 2010-12-22 13:12 Christos Zoulas * Add pstring/BHhLl to specify the type of the length of pascal strings. 2010-11-26 18:39 Reuben Thomas * Fix "-e soft": it was ignored when softmagic was called during asciimagic. * Improve comments and use "unsigned char" in tar.h/is_tar.c. 2010-11-05 17:26 Reuben Thomas * Make bug reporting addresses more visible. 2010-11-01 18:35 Reuben Thomas * Add tcl magic from Gustaf Neumann 2010-10-24 10:42 Christos Zoulas * Fix the whitespace comparing code (Christopher Chittleborough) 2010-10-06 21:05 Christos Zoulas * allow string/t to work (Jan Kaluza) 2010-09-20 22:11 Reuben Thomas * Apply some patches from Ubuntu and Fedora. 2010-09-20 21:16 Reuben Thomas * Apply all patches from Debian package 5.04-6 which have not already been applied and are not Debian-specific. 2010-09-20 15:24 Reuben Thomas * Minor security fix to softmagic.c (don't use untrusted string as printf format). 2010-07-21 12:20 Christos Zoulas * MINGW32 portability from LRN * Don't warn about escaping magic regex chars when we are in a regex. 2010-07-19 10:55 Christos Zoulas * Only try to print prpsinfo for core files. (Jan Kaluza) 2010-04-22 12:55 Christos Zoulas * Try more elf offsets for Debian core files. (Arnaud Giersch) 2010-02-20 15:18 Reuben Thomas * Clarify which sort of CDF we mean. 2010-02-14 22:58 Reuben Thomas * Re-jig Zip file type magic so that unsupported special Zip types (those with "mimetype" at offset 30) can be recognized. 2010-02-02 21:50 Reuben Thomas * Add support for OCF (EPUB) files (application/epub+zip) 2010-01-28 18:25 Christos Zoulas * Fix core-dump from unbound loop: https://bugzilla.redhat.com/show_bug.cgi?id=533245 2010-01-22 15:45 Christos Zoulas * print proper mime for crystal reports file * print the last summary information of a cdf document, not the first so that nested documents print the right info 2010-01-16 18:42 Charles Longeau * bring back some fixes from OpenBSD: - make gcc2 builds file - fix typos in a magic file comment 2009-11-17 18:35 Christos Zoulas * ctime/asctime can return NULL on some OS's although they should not (Toshit Antani) 2009-09-14 13:49 Christos Zoulas * Centralize magic path handling routines and remove the special-casing from file.c so that the python module for example comes up with the same magic path (Fixes ~/.magic handling) (from Gab) 2009-09-11 23:38 Reuben Thomas * When magic argument is a directory, read the files in strcmp-sorted order (fixes Debian bug #488562 and our own FIXME). 2009-09-11 13:11 Reuben Thomas * Combine overlapping epoc and psion magic files into one (epoc). * Add some more EPOC MIME types. 2009-08-19 15:55 Christos Zoulas * Fix 3 bugs (From Ian Darwin): - file_showstr could move one past the end of the array - parse_apple did not nul terminate the string in the overflow case - parse_mime truncated the wrong string in the overflow case 2009-08-12 12:28 Robert Byrnes * Include Localstuff when compiling magic. 2009-07-15 10:05 Christos Zoulas * Fix logic for including mygetopts.h * Make cdf.c compile again with debugging * Add the necessary field handling for crystal reports files to work 2009-06-23 01:34 Reuben Thomas * Stop "(if" identifying Lisp files, that's plain dumb! 2009-06-09 22:13 Reuben Thomas * Add a couple of missing MP3 MIME types. 2009-05-27 23:00 Reuben Thomas * Add full range of hash-bang tests for Python and Ruby. * Add MIME types for Python and Ruby scripts. 2009-05-13 10:44 Christos Zoulas * off by one in parsing hw capabilities in elf (Cheng Renquan) 2009-05-08 13:40 Christos Zoulas * lint fixes and more from NetBSD 2009-05-06 10:25 Christos Zoulas * Avoid null dereference in cdf code (Drew Yao) * More cdf bounds checks and overflow checks 2009-05-01 18:37 Christos Zoulas * Buffer overflow fixes from Drew Yao 2009-04-30 17:10 Christos Zoulas * Fix more cdf lossage. All the documents I have right now print the correct information. 2009-03-27 18:43 Christos Zoulas * don't print \012- separators in the same magic entry if it consists of multiple magic printing lines. 2009-03-23 10:20 Christos Zoulas * Avoid file descriptor leak in compress code from (Daniel Novotny) 2009-03-18 16:50 Christos Zoulas * Allow escaping of relation characters, so that we can say \^[A-Z] and the ^ is not eaten as a relation char. * Fix troff and fortran to their previous glory using regex. This was broken since their removel from ascmagic. 2009-03-10 16:50 Christos Zoulas * don't use strlen in strndup() (Toby Peterson) 2009-03-10 7:45 Christos Zoulas * avoid c99 syntax. 2009-02-23 15:45 Christos Zoulas * make the cdf code use the buffer first if available, and then the fd code. 2009-02-13 13:45 Christos Zoulas * look for struct option to determine if getopt.h is usable for IRIX. * sanitize cdf document strings 2009-02-04 13:25 Christos Zoulas * fix OS/2 warnings. 2008-12-12 15:50 Christos Zoulas * fix initial offset calculation for non 4K sector files * add loop limits to avoid DoS attacks by constructing looping sector references. 2008-12-03 13:05 Christos Zoulas * fix memory botches on cdf file parsing. * exit with non-zero value for any error, not just for the last file processed. 2008-11-09 20:42 Charles Longeau * Replace all str{cpy,cat} functions with strl{cpy,cat} * Ensure that strl{cpy,cat} are included in libmagic, as needed. 2008-11-06 18:18 Christos Zoulas * Handle ID3 format files. 2008-11-06 23:00 Reuben Thomas * Fix --mime, --mime-type and --mime-encoding under new scheme. * Rename "ascii" to "text" and add "encoding" test. * Return a precise ("utf-16le" or "utf-16be") MIME charset for UTF-16. * Fix error in comment caused by automatic indentation adding words! 2008-11-06 10:35 Christos Zoulas * use memchr instead of strchr because the string might not be NUL terminated (Scott MacVicar) 2008-11-03 07:31 Reuben Thomas * Fix a printf with a non-literal format string. * Fix formatting and punctuation of help for "--apple". 2008-10-30 11:00 Reuben Thomas * Correct words counts in comments of struct magic. * Fix handle_annotation to allow both Apple and MIME types to be printed, and to return correct code if MIME type is printed (1, not 0) or if there's an error (-1 not 1). * Fix output of charset for MIME type (precede with semi-colon; fixes Debian bug #501460). * Fix potential attacks via conversion specifications in magic strings. * Add a FIXME for Debian bug #488562 (magic files should be read in a defined order, by sorting the names). 2008-10-18 16:45 Christos Zoulas * Added APPLE file creator/type 2008-10-12 10:20 Christos Zoulas * Added CDF parsing 2008-10-09 16:40 Christos Zoulas * filesystem and msdos patches (Joerg Jenderek) 2008-10-09 13:20 Christos Zoulas * correct --exclude documentation issues: remove troff and fortran and rename "token" to "tokens". (Randy McMurchy) 2008-10-01 10:30 Christos Zoulas * Read ~/.magic in addition to the default magic file not instead of, as documented in the man page. 2008-09-10 21:30 Reuben Thomas * Comment out graphviz patterns, as they match too many files. 2008-08-30 12:54 Christos Zoulas * Don't eat trailing \n in magic enties. * Cast defines to allow compilation using a c++ compiler. 2008-08-25 23:56 Reuben Thomas * Add text/x-lua MIME type for Lua scripts. * Escape { in regex in graphviz patterns. 2008-07-26 00:59 Reuben Thomas * Add MIME types for special files. * Use access to give more accurate information for files that can't be opened. * Add a TODO list. 2008-07-02 11:15 Christos Zoulas * add !:strength op to adjust magic strength (experimental) 2008-06-16 21:41 Reuben Thomas * Fix automake error in configure.ac. * Add MIME type for Psion Sketch files. 2008-06-05 08:59 Christos Zoulas * Don't print warnings about bad namesize in stripped binaries with PT_NOTE is still there, and the actual note is gone (Jakub Jelinek) 2008-05-28 15:12 Robert Byrnes * magic/Magdir/elf: Note invalid byte order for little-endian SPARC32PLUS. Add SPARC V9 vendor extensions and memory model. * src/elfclass.h: Pass target machine to doshn (for Solaris hardware capabilities). * src/readelf.c (doshn): Add support for Solaris hardware/software capabilities. * src/readelf.h: Ditto. * src/vasprintf.c (dispatch): Add support for ll modifier. 2008-05-16 10:25 Christos Zoulas * Fix compiler warnings. * remove stray printf, and fix a vprintf bug. (Martin Dorey) 2008-05-06 00:13 Robert Byrnes * src/Makefile.am: Ensure that getopt_long and [v]asprintf are included in libmagic, as needed. Remove unnecessary EXTRA_DIST. * src/Makefile.in: Rerun automake. * src/vasprintf.c (dispatch): Fix variable precision bug: be sure to step past '*'. * src/vasprintf.c (core): Remove unreachable code. * src/apprentice.c (set_test_type): Add cast to avoid compiler warning. 2008-04-22 23:45 Christos Zoulas * Add magic submission guidelines (Abel Cheung) * split msdos and windows magic (Abel Cheung) 2008-04-04 11:00 Christos Zoulas * >= <= is not supported, so fix the magic and warn about it. reported by: Thien-Thi Nguyen 2008-03-27 16:16 Robert Byrnes * src/readelf.c (donote): ELF core file command name/line bug fixes and enhancements: Try larger offsets first to avoid false matches from earlier data that happen to look like strings; this primarily affected SunOS 5.x 32-bit Intel core files. Add support for command line (instead of just short name) for SunOS 5.x. Add information about NT_PSINFO for SunOS 5.x. Only trim whitespace from end of command line. 2007-02-11 01:36 Reuben Thomas * Change strength of ! from MULT to 0, as it matches almost anything (Reuben Thomas) * Debian fixes (Reuben Thomas) 2007-02-11 00:17 Reuben Thomas * Clarify UTF-8 BOM message (Reuben Thomas) * Add HTML comment to token list in names.h 2007-02-04 15:50 Christos Zoulas * Debian fixes (Reuben Thomas) 2007-02-04 11:31 Christos Zoulas * !:mime annotations in magic files (Reuben Thomas) 2007-01-29 15:35 Christos Zoulas * zero out utime/utimes structs (Gavin Atkinson) 2007-01-26 13:45 Christos Zoulas * reduce writable data from Diego "Flameeyes" Petten 2007-12-28 15:06 Christos Zoulas * strtof detection * remove bogus regex magic that could cause a DoS * better mismatch version message 2007-12-27 11:35 Christos Zoulas * bring back some fixes from OpenBSD * treat ELF dynamic objects as executables * fix gcc warnings 2007-12-01 19:55 Christos Zoulas * make sure we have zlib.h and libz to compile the builtin decompress code 2007-10-28 20:48 Christos Zoulas * float and double magic support (Behan Webster) 2007-10-28 20:48 Christos Zoulas * Convert fortran to a soft test (Reuben Thomas) 2007-10-23 5:25 Christos Zoulas * Add --with-filename, and --no-filename (Reuben Thomas) 2007-10-23 3:59 Christos Zoulas * Rest of the mime split (Reuben Thomas) * Make usage message generated from the flags so that they stay consistent (Reuben Thomas) 2007-10-20 3:06 Christos Zoulas * typo in comment, missing ifdef QUICK, remove unneeded code (Charles Longeau) 2007-10-17 3:33 Christos Zoulas * Fix problem printing -\012 in some entries * Separate magic type and encoding flags (Reuben Thomas) 2007-10-09 3:55 Christos Zoulas * configure fix for int64 and strndup (Reuben Thomas) 2007-09-26 4:45 Christos Zoulas * Add magic_descriptor() function. * Fix regression in elf reading code where the core name was not being printed. * Don't convert NUL's to spaces in {l,b}estring16 (Daniel Dawson) 2007-08-19 6:30 Christos Zoulas * Make mime format consistent so that it can be easily parsed: mimetype [charset=character-set] [encoding=encoding-mime-type] Remove spurious extra text from some MIME type printouts (mostly in is_tar). Fix one case where -i produced nothing at all (for a 1-byte file, which is now classed as application/octet-stream). Remove 7/8bit classifications, since they were arbitrary and not based on the file data. This work was done by Reuben Thomas 2007-05-24 10:00 Christos Zoulas * Fix another integer overflow (Colin Percival) 2007-03-26 13:58 Christos Zoulas * make sure that all of struct magic_set is initialized appropriately (Brett) 2007-03-25 17:44 Christos Zoulas * reset left bytes in the buffer (Dmitry V. Levin) * compilation failed with COMPILE_ONLY and ENABLE_CONDITIONALS (Peter Avalos) 2007-03-15 10:51 Christos Zoulas * fix fortran and nroff reversed tests (Dmitry V. Levin) * fix exclude option (Dmitry V. Levin) 2007-02-08 17:30 Christos Zoulas * fix integer underflow in file_printf which can lead to to exploitable heap overflow (Jean-Sebastien Guay-Lero) 2007-02-05 11:35 Christos Zoulas * make socket/pipe reading more robust 2007-01-25 16:01 Christos Zoulas * Centralize all the tests in file_buffer. * Add exclude flag. 2007-01-18 05:29 Anon Ymous * Move the "type" detection code from parse() into its own table driven routine. This avoids maintaining multiple lists in file.h. * Add an optional conditional field (ust before the type field). This code is wrapped in "#ifdef ENABLE_CONDITIONALS" as it is likely to go away. 2007-01-16 23:24 Anon Ymous * Fix an initialization bug in check_mem(). 2007-01-16 14:58 Anon Ymous * Add a "default" type to print a message if nothing previously matched at that level or since the last default at that level. This is useful for setting up switch-like statements. It can also be used to do if/else constructions without a redundant second test. * Fix the "x" special case test so that one can test for that string with "=x". * Allow "search" to search the entire buffer if the "/N" search count is missing. * Make "regex" work! It now starts its search at the specified offset and takes an (optional) "/N" line count to specify the search range; otherwise it searches to the end of the file. The match is now grabbed correctly for format strings and the offset set to the end of the match. * Add a "/s" flag to "regex" and "search" to set the offset to the start of the match. By default the offset is set to the end of the match, as it is with other tests. This is mostly useful for "regex". * Make "search", "string" and "pstring" use the same file_strncmp() routine so that they support the same flags; "bestring16" and "lestring16" call the same routine, but with flags = 0. Also add a "/C" flag (in analogy to "/c") to ignore the case on uppercase (lowercase) characters in the test string. * Strict adherence to C style string escapes. A warnings are printed when compiling. Note: previously "\a" was incorrectly translated to 'a' instead of an (i.e., BELL, typically 0x07). * Make this compile with "-Wall -Wextra" and all the warning flags used with WARNS=4 in the NetBSD source. Also make it pass lint. * Many "cleanups" and hopefully not too many new bugs! 2007-01-16 14:56 Anon Ymous * make several more files compile with gcc warnings on and also make them pass lint. 2007-01-16 14:54 Anon Ymous * fix a puts()/putc() usage goof in file.c * make file.c compile with gcc warnings and pass lint 2006-12-11 16:49 Christos Zoulas * fix byteswapping issue * report the number of bytes we tried to allocate when allocation fails * add a few missed cases in the strength routine 2006-12-08 16:32 Christos Zoulas * store and print the line number of the magic entry for debugging. * if the magic entry did not print anything, don't treat it as a match * change the magic strength algorithm to take into account the relationship op. * fix a bug in search where we could accidentally return a match. * propagate the error return from match to file_softmagic. 2006-11-25 13:35 Christos Zoulas * Don't store the current offset in the magic struct, because it needs to be restored and it was not done properly all the time. Bug found by: Arkadiusz Miskiewicz * Fix problem in the '\0' separator; and don't print it as an additional separator; print it as the only separator. 2006-11-17 10:51 Christos Zoulas * Added a -0 option to print a '\0' separator Etienne Buira 2006-10-31 15:14 Christos Zoulas * Check offset before copying (Mike Frysinger) * merge duplicated code * add quad date support * make sure that we nul terminate desc (Ryoji Kanai) * don't process elf notes multiple times * allow -z to report empty compressed files * use calloc to initialize the ascii buffers (Jos van den Oever) 2006-06-08 11:11 Christos Zoulas * QNX fixes (Mike Gorchak) * Add quad support. * FIFO checks (Dr. Werner Fink) * Linux ELF fixes (Dr. Werner Fink) * Magic format checks (Dr. Werner Fink) * Magic format function improvement (Karl Chen) 2006-05-03 11:11 Christos Zoulas * Pick up some elf changes and some constant fixes from SUSE * Identify gnu tar vs. posix tar * When keep going, don't print spurious newlines (Radek Vokal) 2006-04-01 12:02 Christos Zoulas * Use calloc instead of malloc (Mike Frysinger) * Fix configure script to detect wctypes.h (Mike Frysinger) 2006-03-02 16:06 Christos Zoulas * Print empty if the file is (Mike Frysinger) * Don't try to read past the end of the buffer (Mike Frysinger) * Sort magic entries by strength [experimental] 2005-11-29 13:26 Christos Zoulas * Use iswprint() to convert the output string. (Bastien Nocera) 2005-10-31 8:54 Christos Zoulas * Fix regression where the core info was not completely processed (Radek Vokal) 2005-10-20 11:15 Christos Zoulas * Middle Endian magic (Diomidis Spinellis) 2005-10-17 11:15 Christos Zoulas * Open with O_BINARY for CYGWIN (Corinna Vinschen) * Don't close stdin (Arkadiusz Miskiewicz) * Look for note sections in non executables. 2005-09-20 13:33 Christos Zoulas * Don't print SVR4 Style in core files multiple times (Radek Vokal) 2005-08-27 04:09 Christos Zoulas * Cygwin changes Corinna Vinschen 2005-08-18 09:53 Christos Zoulas * Remove erroreous mention of /etc/magic in the file man page This is gentoo bug 101639. (Mike Frysinger) * Cross-compile support and detection (Mike Frysinger) 2005-08-12 10:17 Christos Zoulas * Add -h flag and dereference symlinks if POSIXLY_CORRECT is set. 2005-07-29 13:57 Christos Zoulas * Avoid search and regex buffer overflows (Kelledin) 2005-07-12 11:48 Christos Zoulas * Provide stub implementations for {v,}nsprintf() for older OS's that don't have them. * Change mbstate_t autoconf detection macro from AC_MBSTATE_T to AC_TYPE_MBSTATE_T. 2005-06-25 11:48 Christos Zoulas * Dynamically allocate the string buffers and make the default read size 256K. 2005-06-01 00:00 Joerg Sonnenberger * Dragonfly ELF note support 2005-03-14 00:00 Giuliano Bertoletti * Avoid NULL pointer dereference in time conversion. 2005-03-06 00:00 Joerg Walter * Add indirect magic offset support, and search mode. 2005-01-12 00:00 Stepan Kasal * src/ascmagic.c (file_ascmagic): Fix three bugs about text files: If a CRLF text file happens to have CR at offset HOWMANY - 1 (currently 0xffff), it should not be counted as CR line terminator. If a line has length exactly MAXLINELEN, it should not yet be treated as a ``very long line'', as MAXLINELEN is ``longest sane line length''. With CRLF, the line length was not computed correctly, and even lines of length MAXLINELEN - 1 were treated as ``very long''. 2004-12-07 14:15 Christos Zoulas * bzip2 needs a lot of input buffer space on some files before it can begin uncompressing. This makes file -z fail on some bz2 files. Fix it by giving it a copy of the file descriptor to read as much as it wants if we have access to it. 2004-11-24 12:39 Christos Zoulas * Stack smash fix, and ELF more conservative reading. Jakub Bogusz 2004-11-20 18:50 Christos Zoulas * New FreeBSD version parsing code: Jon Noack * Hackish support for ucs16 strings 2004-11-13 03:07 Christos Zoulas * print the file name and line number in syntax errors. 2004 10-12 10:50 Christos Zoulas * Fix stack overwriting on 0 length strings: Tim Waugh Ned Ludd 2004-09-27 11:30 Christos Zoulas * Remove 3rd and 4th copyright clause; approved by Ian Darwin. * Fix small memory leaks; caught by: Tamas Sarlos 2004-07-24 16:33 Christos Zoulas * magic.mime update Danny Milosavljevic * FreeBSD version update Oliver Eikemeier * utime/utimes detection Ian Lance Taylor * errors reading elf magic Jakub Bogusz 2004-04-12 10:55 Christos Zoulas * make sure that magic formats match magic types during compilation * fix broken sgi magic file 2004-04-06 20:36 Christos Zoulas * detect present of mbstate_t Petter Reinholdtsen * magic fixes 2004-03-22 15:25 Christos Zoulas * Lots of mime fixes (Joerg Ostertag) * FreeBSD ELF version handling (Edwin Groothuis) * correct cleanup in all cases; don't just close the file. (Christos Zoulas) * add gettext message catalogue support (Michael Piefel) * better printout for unreadable files (Michael Piefel) * compensate for missing MAXPATHLEN (Michael Piefel) * add wide character string length computation (Michael Piefel) * Avoid infinite loops caused by bad elf alignments or name and description note sizes. Reported by (Mikael Magnusson) 2004-03-09 13:55 Christos Zoulas * Fix possible memory leak on error and add missing regfree (Dmitry V. Levin) 2003-12-23 12:12 Christos Zoulas * fix -k flag (Maciej W. Rozycki) 2003-11-18 14:10 Christos Zoulas * Try to give us much info as possible on corrupt elf files. (Willy Tarreau) * Updated python bindings (Brett Funderburg) 2003-11-11 15:03 Christos Zoulas * Include file.h first, because it includes config.h breaks largefile test macros otherwise. (Paul Eggert via Lars Hecking ) 2003-10-14 21:39 Christos Zoulas * Python bindings (Brett Funderburg) * Don't lookup past the end of the buffer (Chad Hanson) * Add MAGIC_ERROR and api on magic_errno() 2003-10-08 12:40 Christos Zoulas * handle error conditions from compile as fatal (Antti Kantee) * handle magic filename parsing sanely * more magic fixes. * fix a memory leak (Illes Marton) * describe magic file handling (Bryan Henderson) 2003-09-12 15:09 Christos Zoulas * update magic files. * remove largefile support from file.h; it breaks things on most OS's 2003-08-10 10:25 Christos Zoulas * fix unmapping'ing of mmaped files. 2003-07-10 12:03 Christos Zoulas * don't exit with -1 on error; always exit 1 (Marty Leisner) * restore utimes code. 2003-06-10 17:03 Christos Zoulas * make sure we don't access uninitialized memory. * pass lint * #ifdef __cplusplus in magic.h 2003-05-25 19:23 Christos Zoulas * rename cvs magic file to revision to deal with case insensitive filesystems. 2003-05-23 17:03 Christos Zoulas * documentation fixes from Michael Piefel * magic fixes (various) * revert basename magic in .mgc name determination * buffer protection in uncompress, signness issues, close files Maciej W. Rozycki * fix zsh magic 2003-04-04 16:59 Christos Zoulas * fix operand sort order in string. 2003-04-02 17:30 Christos Zoulas * cleanup namespace in magic.h 2003-04-02 13:50 Christos Zoulas * Magic additions (Alex Ott) * Fix bug that broke VPATH compilation (Peter Breitenlohner) 2003-03-28 16:03 Christos Zoulas * remove packed attribute from magic struct. * make the magic struct properly aligned. * bump version number of compiled files to 2. 2003-03-27 13:10 Christos Zoulas * separate tar detection and run it before softmagic. * fix reversed symlink test. * fix version printing. * make separator a string instead of a char. * update manual page and sort options. 2003-03-26 11:00 Christos Zoulas * Pass lint * make NULL in magic_file mean stdin * Fix "-" argument to file to pass NULL to magic_file * avoid pointer casts by using memcpy * rename magic_buf -> magic_buffer * keep only the first error * manual page: new sentence, new line * fix typo in api function (magic_buf -> magic_buffer) file-5.46/INSTALL000644 023540 023540 00000036332 14014775172 015177 0ustar00christoschristos000000 000000 Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. file-5.46/NEWS000664 023540 023540 00000000017 14014775172 014636 0ustar00christoschristos000000 000000 See ChangeLog. file-5.46/README.md000664 023540 023540 00000016146 14435454756 015441 0ustar00christoschristos000000 000000 ## README for file(1) Command and the libmagic(3) library ## @(#) $File: README.md,v 1.5 2023/05/28 13:59:47 christos Exp $ - Bug Tracker: - Build Status: - Download link: - E-mail: - Fuzzing link: - Home page: https://www.darwinsys.com/file/ - Mailing List archives: - Mailing List: - Public repo: - Test framework: Phone: Do not even think of telephoning me about this program. Send cash first! This is Release 5.x of Ian Darwin's (copyright but distributable) file(1) command, an implementation of the Unix File(1) command. It knows the 'magic number' of several thousands of file types. This version is the standard "file" command for Linux, *BSD, and other systems. (See "patchlevel.h" for the exact release number). The major changes for 5.x are CDF file parsing, indirect magic, name/use (recursion) and overhaul in mime and ascii encoding handling. The major feature of 4.x is the refactoring of the code into a library, and the re-write of the file command in terms of that library. The library itself, libmagic can be used by 3rd party programs that wish to identify file types without having to fork() and exec() file. The prime contributor for 4.0 was Mans Rullgard. UNIX is a trademark of UNIX System Laboratories. The prime contributor to Release 3.8 was Guy Harris, who put in megachanges including byte-order independence. The prime contributor to Release 3.0 was Christos Zoulas, who put in hundreds of lines of source code changes, including his own ANSIfication of the code (I liked my own ANSIfication better, but his (__P()) is the "Berkeley standard" way of doing it, and I wanted UCB to include the code...), his HP-like "indirection" (a feature of the HP file command, I think), and his mods that finally got the uncompress (-z) mode finished and working. This release has compiled in numerous environments; see PORTING for a list and problems. This fine freeware file(1) follows the USG (System V) model of the file command, rather than the Research (V7) version or the V7-derived 4.[23] Berkeley one. That is, the file /etc/magic contains much of the ritual information that is the source of this program's power. My version knows a little more magic (including tar archives) than System V; the /etc/magic parsing seems to be compatible with the (poorly documented) System V /etc/magic format (with one exception; see the man page). In addition, the /etc/magic file is built from a subdirectory for easier(?) maintenance. I will act as a clearinghouse for magic numbers assigned to all sorts of data files that are in reasonable circulation. Send your magic numbers, in magic(5) format please, to the maintainer, Christos Zoulas. COPYING - read this first. * `README` - read this second (you are currently reading this file). * `INSTALL` - read on how to install * `src/apprentice.c` - parses /etc/magic to learn magic * `src/apptype.c` - used for OS/2 specific application type magic * `src/ascmagic.c` - third & last set of tests, based on hardwired assumptions. * `src/asctime_r.c` - replacement for OS's that don't have it. * `src/asprintf.c` - replacement for OS's that don't have it. * `src/buffer.c` - buffer handling functions. * `src/cdf.[ch]` - parser for Microsoft Compound Document Files * `src/cdf_time.c` - time converter for CDF. * `src/compress.c` - handles decompressing files to look inside. * `src/ctime_r.c` - replacement for OS's that don't have it. * `src/der.[ch]` - parser for Distinguished Encoding Rules * `src/dprintf.c` - replacement for OS's that don't have it. * `src/elfclass.h` - common code for elf 32/64. * `src/encoding.c` - handles unicode encodings * `src/file.c` - the main program * `src/file.h` - header file * `src/file_opts.h` - list of options * `src/fmtcheck.c` - replacement for OS's that don't have it. * `src/fsmagic.c` - first set of tests the program runs, based on filesystem info * `src/funcs.c` - utilility functions * `src/getline.c` - replacement for OS's that don't have it. * `src/getopt_long.c` - replacement for OS's that don't have it. * `src/gmtime_r.c` - replacement for OS's that don't have it. * `src/is_csv.c` - knows about Comma Separated Value file format (RFC 4180). * `src/is_json.c` - knows about JavaScript Object Notation format (RFC 8259). * `src/is_simh.c` - knows about SIMH tape file format. * `src/is_tar.c, tar.h` - knows about Tape ARchive format (courtesy John Gilmore). * `src/localtime_r.c` - replacement for OS's that don't have it. * `src/magic.h.in` - source file for magic.h * `src/mygetopt.h` - replacement for OS's that don't have it. * `src/magic.c` - the libmagic api * `src/names.h` - header file for ascmagic.c * `src/pread.c` - replacement for OS's that don't have it. * `src/print.c` - print results, errors, warnings. * `src/readcdf.c` - CDF wrapper. * `src/readelf.[ch]` - Stand-alone elf parsing code. * `src/softmagic.c` - 2nd set of tests, based on /etc/magic * `src/mygetopt.h` - replacement for OS's that don't have it. * `src/strcasestr.c` - replacement for OS's that don't have it. * `src/strlcat.c` - replacement for OS's that don't have it. * `src/strlcpy.c` - replacement for OS's that don't have it. * `src/strndup.c` - replacement for OS's that don't have it. * `src/tar.h` - tar file definitions * `src/vasprintf.c` - for systems that don't have it. * `doc/file.man` - man page for the command * `doc/magic.man` - man page for the magic file, courtesy Guy Harris. Install as magic.4 on USG and magic.5 on V7 or Berkeley; cf Makefile. Magdir - directory of /etc/magic pieces ------------------------------------------------------------------------------ If you submit a new magic entry please make sure you read the following guidelines: - Initial match is preferably at least 32 bits long, and is a _unique_ match - If this is not feasible, use additional check - Match of <= 16 bits are not accepted - Delay printing string as much as possible, don't print output too early - Avoid printf arbitrary byte as string, which can be a source of crash and buffer overflow - Provide complete information with entry: * One line short summary * Optional long description * File extension, if applicable * Full name and contact method (for discussion when entry has problem) * Further reference, such as documentation of format gpg for dummies: ------------------------------------------------------------------------------ ``` $ gpg --verify file-X.YY.tar.gz.asc file-X.YY.tar.gz gpg: assuming signed data in `file-X.YY.tar.gz' gpg: Signature made WWW MMM DD HH:MM:SS YYYY ZZZ using DSA key ID KKKKKKKK ``` To download the key: ``` $ gpg --keyserver hkp://keys.gnupg.net --recv-keys KKKKKKKK ``` ------------------------------------------------------------------------------ Parts of this software were developed at SoftQuad Inc., developers of SGML/HTML/XML publishing software, in Toronto, Canada. SoftQuad was swallowed up by Corel in 2002 and does not exist any longer. file-5.46/TODO000664 023540 023540 00000004021 14014775172 014626 0ustar00christoschristos000000 000000 Most TODOs live in the TODO section of doc/file.man (i.e. file(1)). They are more visible there, so please add any further TODOs to that file, not here. More speculative material can live here. (This change was made when Reuben Thomas noticed that all the bugs listed in the BUGS section of the man page had been fixed!) --- It would be nice to simplify file considerably. For example, reimplement the apprentice and non-pattern magic methods in Python, and compile the magic patterns to a giant regex (or something similar; maybe using Ragel (http://www.complang.org/ragel/)) so that only a small amount of C is needed (because fast execution is typically only required for soft magic, not the more detailed information given by hard-wired routines). In this regard, note that hplip, which is BSD-licensed, has a magic reimplementation in Python. --- Read the kerberos magic entry for more ideas. --- Write a string merger to make magic entry sizes dynamic. Strings will be converted to offsets from the string table. --- Programming language support, we can introduce the concept of a group of rules where n rules need to match before the rule is positive. This could require structural changes to the matching code :-( 0 group 2 # require 2 matches # rule 1 >0 .... ... # rule 2 >0 .... ... --- - Merge the stat code dance in one place and keep it in one place (perhaps struct buffer). - Enable seeking around if offset > nbytes if possible (the fd is seekable). - We could use file_pipe2file more (for EOF offsets, CDF documents), but that is expensive; perhaps we should provide a way to disable it - The implementation of struct buffer needs re-thinking and more work. For example we don't always pass the fd in the child. This is not important yet as we don't have yet cases where use/indirect magic needs negative offsets. - Really the whole thing just needs here's an (offset, buffer, size) you have (filebuffer, filebuffersize &&|| fd), fill the buffer with data from offset. The buffer API should be changed to just do that. christos file-5.46/compile000755 023540 023540 00000016350 14721422722 015515 0ustar00christoschristos000000 000000 #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: file-5.46/config.guess000755 023540 023540 00000140436 14721422722 016462 0ustar00christoschristos000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2021 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2021-06-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; mipsn64eb) machine=mips64-unknown ;; mipsn64el) machine=mips64el-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earm*) arch="${UNAME_MACHINE_ARCH#e}" arch="${arch%eb}" arch="${arch%hf}" endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/v[0-9]//;s/earm/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: file-5.46/config.sub000755 023540 023540 00000104751 14721422722 016125 0ustar00christoschristos000000 000000 #! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2021 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2021-08-14' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc caes, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: file-5.46/install-sh000755 023540 023540 00000015150 14721422722 016140 0ustar00christoschristos000000 000000 #!/bin/sh # # $NetBSD: install-sh.in,v 1.6 2012/01/11 13:07:31 hans Exp $ # This script now also installs multiple files, but might choke on installing # multiple files with spaces in the file names. # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. awkprog="${AWKPROG-awk}" mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" instcmd="$cpprog" instflags="" pathcompchmodcmd="$chmodprog 755" chmodcmd="$chmodprog 755" chowncmd="" chgrpcmd="" stripcmd="" stripflags="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" msrc="" dst="" dir_arg="" suffix="" suffixfmt="" while [ x"$1" != x ]; do case $1 in -b) suffix=".old" shift continue;; -B) suffixfmt="$2" shift shift continue;; -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -m*) chmodcmd="$chmodprog ${1#-m}" shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -S) stripcmd="$stripprog" stripflags="-S $2 $stripflags" shift shift continue;; -p) instflags="-p" shift continue;; *) if [ x"$msrc" = x ] then msrc="$dst" else msrc="$msrc $dst" fi src="$dst" dst="$1" shift continue;; esac done if [ x"$dir_arg" = x ] then dstisfile="" if [ ! -d "$dst" ] then if [ x"$msrc" = x"$src" ] then dstisfile=true else echo "install: destination is not a directory" exit 1 fi fi else msrc="$msrc $dst" fi if [ x"$msrc" = x ] then echo "install: no destination specified" exit 1 fi for srcarg in $msrc; do if [ x"$dir_arg" != x ]; then dstarg="$srcarg" else dstarg="$dst" # Waiting for this to be detected by the "$instcmd $srcarg $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f "$srcarg" ] then doinst="$instcmd $instflags" elif [ -d "$srcarg" ] then echo "install: $srcarg: not a regular file" exit 1 elif [ "$srcarg" = "/dev/null" ] then doinst="$cpprog" else echo "install: $srcarg does not exist" exit 1 fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d "$dstarg" ] then dstarg="$dstarg"/`basename "$srcarg"` fi fi ## this sed command emulates the dirname command dstdir=`echo "$dstarg" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $doit $mkdirprog "${pathcomp}" if [ x"$chowncmd" != x ]; then $doit $chowncmd "${pathcomp}"; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "${pathcomp}"; else true ; fi && if [ x"$pathcompchmodcmd" != x ]; then $doit $pathcompchmodcmd "${pathcomp}"; else true ; fi else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then if [ -d "$dstarg" ]; then true else $doit $mkdirprog "$dstarg" && if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dstarg"; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dstarg"; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dstarg"; else true ; fi fi else if [ x"$dstisfile" = x ] then file=$srcarg else file=$dst fi dstfile=`basename "$file"` dstfinal="$dstdir/$dstfile" # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Make a backup file name in the proper directory. case x$suffixfmt in *%*) suffix=`echo x | $awkprog -v bname="$dstfinal" -v fmt="$suffixfmt" ' { cnt = 0; do { sfx = sprintf(fmt, cnt++); name = bname sfx; } while (system("test -f " name) == 0); print sfx; }' -`;; x) ;; *) suffix="$suffixfmt";; esac dstbackup="$dstfinal$suffix" # Move or copy the file name to the temp name $doit $doinst $srcarg "$dsttmp" && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $stripflags "$dsttmp"; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else true;fi && # Now rename the file to the real destination. if [ x"$suffix" != x ] && [ -f "$dstfinal" ] then $doit $mvcmd "$dstfinal" "$dstbackup" else $doit $rmcmd -f "$dstfinal" fi && $doit $mvcmd "$dsttmp" "$dstfinal" fi done && exit 0 file-5.46/ltmain.sh000644 023540 023540 00001212623 14721422715 015763 0ustar00christoschristos000000 000000 #! /usr/bin/env sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2019-02-19.15 # libtool (GNU libtool) 2.4.7 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.7 package_revision=2.4.7 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2019-02-19.15; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2004-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # These NLS vars are set unconditionally (bootstrap issue #24). Unset those # in case the environment reset is needed later and the $save_* variant is not # defined (see the code above). LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # func_unset VAR # -------------- # Portably unset VAR. # In some shells, an 'unset VAR' statement leaves a non-zero return # status if VAR is already unset, which might be problematic if the # statement is used at the end of a function (thus poisoning its return # value) or when 'set -e' is active (causing even a spurious abort of # the script in this case). func_unset () { { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; } } # Make sure CDPATH doesn't cause `cd` commands to output the target dir. func_unset CDPATH # Make sure ${,E,F}GREP behave sanely. func_unset GREP_OPTIONS ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin" rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin" GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. unset CP unset MV unset RM : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" # require_check_ifs_backslash # --------------------------- # Check if we can use backslash as IFS='\' separator, and set # $check_ifs_backshlash_broken to ':' or 'false'. require_check_ifs_backslash=func_require_check_ifs_backslash func_require_check_ifs_backslash () { _G_save_IFS=$IFS IFS='\' _G_check_ifs_backshlash='a\\b' for _G_i in $_G_check_ifs_backshlash do case $_G_i in a) check_ifs_backshlash_broken=false ;; '') break ;; *) check_ifs_backshlash_broken=: break ;; esac done IFS=$_G_save_IFS require_check_ifs_backslash=: } ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1+=\\ \$func_quote_arg_result" }' else func_append_quoted () { $debug_cmd func_quote_arg pretty "$2" eval "$1=\$$1\\ \$func_quote_arg_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_portable EVAL ARG # ---------------------------- # Internal function to portably implement func_quote_arg. Note that we still # keep attention to performance here so we as much as possible try to avoid # calling sed binary (so far O(N) complexity as long as func_append is O(1)). func_quote_portable () { $debug_cmd $require_check_ifs_backslash func_quote_portable_result=$2 # one-time-loop (easy break) while true do if $1; then func_quote_portable_result=`$ECHO "$2" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` break fi # Quote for eval. case $func_quote_portable_result in *[\\\`\"\$]*) # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string # contains the shell wildcard characters. case $check_ifs_backshlash_broken$func_quote_portable_result in :*|*[\[\*\?]*) func_quote_portable_result=`$ECHO "$func_quote_portable_result" \ | $SED "$sed_quote_subst"` break ;; esac func_quote_portable_old_IFS=$IFS for _G_char in '\' '`' '"' '$' do # STATE($1) PREV($2) SEPARATOR($3) set start "" "" func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy IFS=$_G_char for _G_part in $func_quote_portable_result do case $1 in quote) func_append func_quote_portable_result "$3$2" set quote "$_G_part" "\\$_G_char" ;; start) set first "" "" func_quote_portable_result= ;; first) set quote "$_G_part" "" ;; esac done done IFS=$func_quote_portable_old_IFS ;; *) ;; esac break done func_quote_portable_unquoted_result=$func_quote_portable_result case $func_quote_portable_result in # double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # many bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_portable_result=\"$func_quote_portable_result\" ;; esac } # func_quotefast_eval ARG # ----------------------- # Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG', # but optimized for speed. Result is stored in $func_quotefast_eval. if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then printf -v _GL_test_printf_tilde %q '~' if test '\~' = "$_GL_test_printf_tilde"; then func_quotefast_eval () { printf -v func_quotefast_eval_result %q "$1" } else # Broken older Bash implementations. Make those faster too if possible. func_quotefast_eval () { case $1 in '~'*) func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result ;; *) printf -v func_quotefast_eval_result %q "$1" ;; esac } fi else func_quotefast_eval () { func_quote_portable false "$1" func_quotefast_eval_result=$func_quote_portable_result } fi # func_quote_arg MODEs ARG # ------------------------ # Quote one ARG to be evaled later. MODEs argument may contain zero or more # specifiers listed below separated by ',' character. This function returns two # values: # i) func_quote_arg_result # double-quoted (when needed), suitable for a subsequent eval # ii) func_quote_arg_unquoted_result # has all characters that are still active within double # quotes backslashified. Available only if 'unquoted' is specified. # # Available modes: # ---------------- # 'eval' (default) # - escape shell special characters # 'expand' # - the same as 'eval'; but do not quote variable references # 'pretty' # - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might # be used later in func_quote to get output like: 'echo "a b"' instead # of 'echo a\ b'. This is slower than default on some shells. # 'unquoted' # - produce also $func_quote_arg_unquoted_result which does not contain # wrapping double-quotes. # # Examples for 'func_quote_arg pretty,unquoted string': # # string | *_result | *_unquoted_result # ------------+-----------------------+------------------- # " | \" | \" # a b | "a b" | a b # "a b" | "\"a b\"" | \"a b\" # * | "*" | * # z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\" # # Examples for 'func_quote_arg pretty,unquoted,expand string': # # string | *_result | *_unquoted_result # --------------+---------------------+-------------------- # z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\" func_quote_arg () { _G_quote_expand=false case ,$1, in *,expand,*) _G_quote_expand=: ;; esac case ,$1, in *,pretty,*|*,expand,*|*,unquoted,*) func_quote_portable $_G_quote_expand "$2" func_quote_arg_result=$func_quote_portable_result func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result ;; *) # Faster quote-for-eval for some shells. func_quotefast_eval "$2" func_quote_arg_result=$func_quotefast_eval_result ;; esac } # func_quote MODEs ARGs... # ------------------------ # Quote all ARGs to be evaled later and join them into single command. See # func_quote_arg's description for more info. func_quote () { $debug_cmd _G_func_quote_mode=$1 ; shift func_quote_result= while test 0 -lt $#; do func_quote_arg "$_G_func_quote_mode" "$1" if test -n "$func_quote_result"; then func_append func_quote_result " $func_quote_arg_result" else func_append func_quote_result "$func_quote_arg_result" fi shift done } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_arg pretty,expand "$_G_cmd" eval "func_notquiet $func_quote_arg_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_arg expand,pretty "$_G_cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # This is free software. There is NO warranty; not even for # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Copyright (C) 2010-2019, 2021 Bootstrap Authors # # This file is dual licensed under the terms of the MIT license # , and GPL version 2 or later # . You must apply one of # these licenses when using or redistributing this software or any of # the files within it. See the URLs above, or the file `LICENSE` # included in the Bootstrap distribution for the full license texts. # Please report bugs or propose patches to: # # Set a version string for this script. scriptversion=2019-02-19.15; # UTC ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# Copyright'. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug in processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # in the main code. A hook is just a list of function names that can be # run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of hook functions to be called by # FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_propagate_result FUNC_NAME_A FUNC_NAME_B # --------------------------------------------- # If the *_result variable of FUNC_NAME_A _is set_, assign its value to # *_result variable of FUNC_NAME_B. func_propagate_result () { $debug_cmd func_propagate_result_result=: if eval "test \"\${${1}_result+set}\" = set" then eval "${2}_result=\$${1}_result" else func_propagate_result_result=false fi } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It's assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do func_unset "${_G_hook}_result" eval $_G_hook '${1+"$@"}' func_propagate_result $_G_hook func_run_hooks if $func_propagate_result_result; then eval set dummy "$func_run_hooks_result"; shift fi done } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list from your hook function. You may remove # or edit any options that you action, and then pass back the remaining # unprocessed options in '_result', escaped # suitably for 'eval'. # # The '_result' variable is automatically unset # before your hook gets called; for best performance, only set the # *_result variable when necessary (i.e. don't call the 'func_quote' # function unnecessarily because it can be an expensive operation on some # machines). # # Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # No change in '$@' (ignored completely by this hook). Leave # # my_options_prep_result variable intact. # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # args_changed=false # # # Note that, for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: # args_changed=: # ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # args_changed=: # ;; # *) # Make sure the first unrecognised option "$_G_opt" # # is added back to "$@" in case we need it later, # # if $args_changed was set to 'true'. # set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # # # Only call 'func_quote' here if we processed at least one argument. # if $args_changed; then # func_quote eval ${1+"$@"} # my_silent_option_result=$func_quote_result # fi # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # } # func_add_hook func_validate_options my_option_validation # # You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options_finish [ARG]... # ---------------------------- # Finishing the option parse loop (call 'func_options' hooks ATM). func_options_finish () { $debug_cmd func_run_hooks func_options ${1+"$@"} func_propagate_result func_run_hooks func_options_finish } # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd _G_options_quoted=false for my_func in options_prep parse_options validate_options options_finish do func_unset func_${my_func}_result func_unset func_run_hooks_result eval func_$my_func '${1+"$@"}' func_propagate_result func_$my_func func_options if $func_propagate_result_result; then eval set dummy "$func_options_result"; shift _G_options_quoted=: fi done $_G_options_quoted || { # As we (func_options) are top-level options-parser function and # nobody quoted "$@" for us yet, we need to do it explicitly for # caller. func_quote eval ${1+"$@"} func_options_result=$func_quote_result } } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propagate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} func_propagate_result func_run_hooks func_options_prep } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd _G_parse_options_requote=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} func_propagate_result func_run_hooks func_parse_options if $func_propagate_result_result; then eval set dummy "$func_parse_options_result"; shift # Even though we may have changed "$@", we passed the "$@" array # down into the hook and it quoted it for us (because we are in # this if-branch). No need to quote it again. _G_parse_options_requote=false fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break # We expect that one of the options parsed in this function matches # and thus we remove _G_opt from "$@" and need to re-quote. _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" >&2 $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) if test $# = 0 && func_missing_arg $_G_opt; then _G_parse_options_requote=: break fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) _G_parse_options_requote=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift _G_match_parse_options=false break ;; esac if $_G_match_parse_options; then _G_parse_options_requote=: fi done if $_G_parse_options_requote; then # save modified positional parameters for caller func_quote eval ${1+"$@"} func_parse_options_result=$func_quote_result fi } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} func_propagate_result func_run_hooks func_validate_options # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables # after splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} if test "x$func_split_equals_lhs" = "x$1"; then func_split_equals_rhs= fi }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs=" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. # The version message is extracted from the calling file's header # comments, with leading '# ' stripped: # 1. First display the progname and version # 2. Followed by the header comment line matching /^# Written by / # 3. Then a blank line followed by the first following line matching # /^# Copyright / # 4. Immediately followed by any lines between the previous matches, # except lines preceding the intervening completely blank line. # For example, see the header comments of this file. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /^# Written by /!b s|^# ||; p; n :fwd2blnk /./ { n b fwd2blnk } p; n :holdwrnt s|^# || s|^# *$|| /^Copyright /!{ /./H n b holdwrnt } s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| G s|\(\n\)\n*|\1|g p; q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.7' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname (GNU libtool) 2.4.7 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= _G_rc_lt_options_prep=: # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; *) _G_rc_lt_options_prep=false ;; esac if $_G_rc_lt_options_prep; then # Pass back the list of options. func_quote eval ${1+"$@"} libtool_options_prep_result=$func_quote_result fi } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd _G_rc_lt_parse_options=false # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"} ; shift _G_match_lt_parse_options=false break ;; esac $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done if $_G_rc_lt_parse_options; then # save modified positional parameters for caller func_quote eval ${1+"$@"} libtool_parse_options_result=$func_quote_result fi } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote eval ${1+"$@"} libtool_validate_options_result=$func_quote_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_arg pretty "$libobj" test "X$libobj" != "X$func_quote_arg_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_arg pretty "$srcfile" qsrcfile=$func_quote_arg_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG -Xcompiler FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wa,FLAG -Xassembler FLAG pass linker-specific FLAG directly to the assembler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_arg pretty "$nonopt" install_prog="$func_quote_arg_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_arg pretty "$arg" func_append install_prog "$func_quote_arg_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_arg pretty "$arg" func_append install_prog " $func_quote_arg_result" if test -n "$arg2"; then func_quote_arg pretty "$arg2" fi func_append install_shared_prog " $func_quote_arg_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_arg pretty "$install_override_mode" func_append install_shared_prog " -m $func_quote_arg_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_arg expand,pretty "$relink_command" eval "func_echo $func_quote_arg_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" func_quote_arg pretty "$ECHO" qECHO=$func_quote_arg_result $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=$qECHO fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_arg pretty,unquoted "$arg" qarg=$func_quote_arg_unquoted_result func_append libtool_args " $func_quote_arg_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xassembler) func_append compiler_flags " -Xassembler $qarg" prev= func_append compile_command " -Xassembler $qarg" func_append finalize_command " -Xassembler $qarg" continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199. -pthread) case $host in *solaris2*) ;; *) case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac ;; esac continue ;; -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $func_quote_arg_result" func_append compiler_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_arg pretty "$flag" func_append arg " $wl$func_quote_arg_result" func_append compiler_flags " $wl$func_quote_arg_result" func_append linker_flags " $func_quote_arg_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xassembler) prev=xassembler continue ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC # -Wa,* Pass flags directly to the assembler -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_arg pretty "$arg" arg=$func_quote_arg_result fi ;; # Some other compiler flag. -* | +*) func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_arg pretty "$arg" arg=$func_quote_arg_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then if test -f "$inst_prefix_dir$libdir/$linklib"; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf | midnightbsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_arg expand,pretty "$cmd" eval "func_echo $func_quote_arg_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty "$var_value" relink_command="$var=$func_quote_arg_result; export $var; $relink_command" fi done func_quote eval cd "`pwd`" func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)" relink_command=$func_quote_arg_unquoted_result fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_arg pretty,unquoted "$var_value" relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command" fi done # Quote the link command for shipping. func_quote eval cd "`pwd`" relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" func_quote_arg pretty,unquoted "$relink_command" relink_command=$func_quote_arg_unquoted_result if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink" && test -n "$relink_command"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: file-5.46/missing000755 023540 023540 00000015336 14721422722 015541 0ustar00christoschristos000000 000000 #! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: file-5.46/MAINT000664 023540 023540 00000002724 14014775172 014741 0ustar00christoschristos000000 000000 $File: MAINT,v 1.10 2008/02/05 19:08:11 christos Exp $ Maintenance notes: I am continuing to maintain the file command. I welcome your help, but to make my life easier I'd like to request the following: - Do not distribute changed versions. People trying to be helpful occasionally put up their hacked versions of the file command for anonymous FTP, and people all over the world get copies of the hacked versions. Within a day or two I am getting email from around the world asking me why "my" file command won't compile!!! Needless to say this detracts from the limited time I have available to work on the actual software. Therefore I ask you again to please NOT distribute your changed version. If you need to make changes, please add a patch file next to the distribution tar, and a README file that clearly explains what you are trying to fix. Thank you for your assistance and cooperation. Code Overview This is a rough idea of the control flow from the main program: file.c main() file.c process (called for each file) printf file name magic.c magic_file() fsmagic.c file_fsmagic() (handles statbuf modes for DEV) (handles statbuf modes for executable &c. reads data from file. funcs.c: file_buffer() compress.c file_zmagic() is_tar.c file_is_tar() softmagic.c file_softmagic() match() - looks for match against main magic database ascmagic.c file_ascmagic() readelf.c file_tryelf() "unknown" Christos Zoulas (see README for email address) file-5.46/RELEASE-PROCEDURE000664 023540 023540 00000002333 14136541662 016473 0ustar00christoschristos000000 000000 # HOW TO RELEASE FILE @(#) $File: RELEASE-PROCEDURE,v 1.7 2021/10/18 16:38:25 christos Exp $ 1) Update version number in configure.ac 2) Note the new version in ChangeLog 3) Update README.md if applicable 4) Commit changes into CVS 5) Rebuild and run tests (see README.DEVELOPER) 6) Tag the release with FILEx_yy 7) Create the source tarball: make distcheck 7a) Sign the source tarball. gpg --armor --detach-sign mysoftware-0.4.tar.gz 8) Make the source tarball available on ftp 9) Add the new version to bugs.astron.com: - Click: Manage > Manage Projects > file - Scroll down to "Versions" - Click on "Edit" next to the HEAD version - Change the "Version" from HEAD to the newly released version - Change the "Date Order" to the current time - Check the "Released" box - Click on "Update Version" - Type HEAD into the box at the bottom of the version list and click on "Add and Edit Version" - Set the "Date Order" to 2030-01-01 (i.e. far in the future) - Click on "Update Version" 10) Mail an announcement to file@astron.com containing a summary of the ChangeLog changes. Historically we don't mention magic changes in the ChangeLog or the mail message, only source changes. file-5.46/src/000775 023540 023540 00000000000 14721636373 014734 5ustar00christoschristos000000 000000 file-5.46/doc/000775 023540 023540 00000000000 14721636376 014715 5ustar00christoschristos000000 000000 file-5.46/README.DEVELOPER000664 023540 023540 00000001626 14123103144 016333 0ustar00christoschristos000000 000000 # How to get started developing @(#) $File: README.DEVELOPER,v 1.9 2021/09/20 14:04:39 christos Exp $ ## Auto files After checking out the source, run the following: autoreconf -f -i make distclean # this can fail if you have not built before ./configure --disable-silent-rules make -j4 make -C tests check If you see errors, make sure you have the latest libtool and autoconf This has been tested with autoconf-2.69 and libtool-2.4.2 ## Installing dependencies If your platform doesn't have the above tools, install the following packages first. ### Debian apt-get install \ automake \ gcc \ libtool \ make \ python \ zlib1g-dev \ See also `.travis.yml`. ### Mac OS X (MacPorts) port install \ autoconf \ automake \ libtool \ ### Mac OS X (HomeBrew) brew install autoconf automake libtool Tested with: autoconf 2.69 automake 1.16.1 libtool 2.4.6 file-5.46/depcomp000755 023540 023540 00000056020 14721422722 015512 0ustar00christoschristos000000 000000 #! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: file-5.46/magic/000775 023540 023540 00000000000 14721636373 015225 5ustar00christoschristos000000 000000 file-5.46/tests/000775 023540 023540 00000000000 14721636376 015312 5ustar00christoschristos000000 000000 file-5.46/python/000775 023540 023540 00000000000 14721636402 015457 5ustar00christoschristos000000 000000 file-5.46/python/file_magic/000775 023540 023540 00000000000 14721636402 017536 5ustar00christoschristos000000 000000 file-5.46/python/Makefile.am000664 023540 023540 00000000156 14121156022 017502 0ustar00christoschristos000000 000000 EXTRA_DIST = LICENSE CHANGELOG.md README.md example.py magic.py setup.py \ tests.py file_magic/__init__.py file-5.46/python/Makefile.in000664 023540 023540 00000030106 14721422722 017522 0ustar00christoschristos000000 000000 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = python ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README.md DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgdatadir = @pkgdatadir@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WARNINGS = @WARNINGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fsect = @fsect@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = LICENSE CHANGELOG.md README.md example.py magic.py setup.py \ tests.py file_magic/__init__.py all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign python/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign python/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: file-5.46/python/README.md000664 023540 023540 00000001110 14015050431 016713 0ustar00christoschristos000000 000000 # `file-magic`: Python Bindings This library is a Python ctypes interface to `libmagic`. ## Installing You can install `file-magic` either with: python setup.py install # or easy_install . # or pip install file-magic ## Using import magic detected = magic.detect_from_filename('magic.py') print 'Detected MIME type: {}'.format(detected.mime_type) print 'Detected encoding: {}'.format(detected.encoding) print 'Detected file type name: {}'.format(detected.name) ## Developing/Contributing To run the tests: python setup.py test file-5.46/python/LICENSE000664 023540 023540 00000002630 14015050431 016451 0ustar00christoschristos000000 000000 Copyright (c) Ian F. Darwin 1986-1995. Software written by Ian F. Darwin and others; maintained 1995-present by Christos Zoulas and others. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice immediately at the beginning of the file, without modification, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. file-5.46/python/CHANGELOG.md000664 023540 023540 00000000757 14121156022 017266 0ustar00christoschristos000000 000000 # Python `file-magic` Log of Changes ## `0.4.1` - Create threadlocal objects so that the `detect_from_*` methods work properly ## `0.4.0` - Sync with current version of file: * Retain python 2 compatibility, factoring out the conversion functions. * Avoid double encoding with python3 * Restore python-2 compatibility. ## `0.3.0` - Fix `setup.py` so we can upload to PyPI - Add function `detect_from_filename` - Add function `detect_from_fobj` - Add function `detect_from_content` file-5.46/python/example.py000664 023540 023540 00000000317 14015050430 017450 0ustar00christoschristos000000 000000 #! /usr/bin/python import magic ms = magic.open(magic.NONE) ms.load() tp = ms.file("/bin/ls") print (tp) f = open("/bin/ls", "rb") buf = f.read(4096) f.close() tp = ms.buffer(buf) print (tp) ms.close() file-5.46/python/magic.py000664 023540 023540 00000024644 14304104304 017107 0ustar00christoschristos000000 000000 # coding: utf-8 ''' Python bindings for libmagic ''' import ctypes import threading from collections import namedtuple from ctypes import * from ctypes.util import find_library def _init(): """ Loads the shared library through ctypes and returns a library L{ctypes.CDLL} instance """ return ctypes.cdll.LoadLibrary(find_library('magic')) _libraries = {} _libraries['magic'] = _init() # Flag constants for open and setflags MAGIC_NONE = NONE = 0 MAGIC_DEBUG = DEBUG = 1 MAGIC_SYMLINK = SYMLINK = 2 MAGIC_COMPRESS = COMPRESS = 4 MAGIC_DEVICES = DEVICES = 8 MAGIC_MIME_TYPE = MIME_TYPE = 16 MAGIC_CONTINUE = CONTINUE = 32 MAGIC_CHECK = CHECK = 64 MAGIC_PRESERVE_ATIME = PRESERVE_ATIME = 128 MAGIC_RAW = RAW = 256 MAGIC_ERROR = ERROR = 512 MAGIC_MIME_ENCODING = MIME_ENCODING = 1024 MAGIC_MIME = MIME = 1040 # MIME_TYPE + MIME_ENCODING MAGIC_APPLE = APPLE = 2048 MAGIC_NO_CHECK_COMPRESS = NO_CHECK_COMPRESS = 4096 MAGIC_NO_CHECK_TAR = NO_CHECK_TAR = 8192 MAGIC_NO_CHECK_SOFT = NO_CHECK_SOFT = 16384 MAGIC_NO_CHECK_APPTYPE = NO_CHECK_APPTYPE = 32768 MAGIC_NO_CHECK_ELF = NO_CHECK_ELF = 65536 MAGIC_NO_CHECK_TEXT = NO_CHECK_TEXT = 131072 MAGIC_NO_CHECK_CDF = NO_CHECK_CDF = 262144 MAGIC_NO_CHECK_TOKENS = NO_CHECK_TOKENS = 1048576 MAGIC_NO_CHECK_ENCODING = NO_CHECK_ENCODING = 2097152 MAGIC_NO_CHECK_BUILTIN = NO_CHECK_BUILTIN = 4173824 MAGIC_PARAM_INDIR_MAX = PARAM_INDIR_MAX = 0 MAGIC_PARAM_NAME_MAX = PARAM_NAME_MAX = 1 MAGIC_PARAM_ELF_PHNUM_MAX = PARAM_ELF_PHNUM_MAX = 2 MAGIC_PARAM_ELF_SHNUM_MAX = PARAM_ELF_SHNUM_MAX = 3 MAGIC_PARAM_ELF_NOTES_MAX = PARAM_ELF_NOTES_MAX = 4 MAGIC_PARAM_REGEX_MAX = PARAM_REGEX_MAX = 5 MAGIC_PARAM_BYTES_MAX = PARAM_BYTES_MAX = 6 FileMagic = namedtuple('FileMagic', ('mime_type', 'encoding', 'name')) class magic_set(Structure): pass magic_set._fields_ = [] magic_t = POINTER(magic_set) _open = _libraries['magic'].magic_open _open.restype = magic_t _open.argtypes = [c_int] _close = _libraries['magic'].magic_close _close.restype = None _close.argtypes = [magic_t] _file = _libraries['magic'].magic_file _file.restype = c_char_p _file.argtypes = [magic_t, c_char_p] _descriptor = _libraries['magic'].magic_descriptor _descriptor.restype = c_char_p _descriptor.argtypes = [magic_t, c_int] _buffer = _libraries['magic'].magic_buffer _buffer.restype = c_char_p _buffer.argtypes = [magic_t, c_void_p, c_size_t] _error = _libraries['magic'].magic_error _error.restype = c_char_p _error.argtypes = [magic_t] _setflags = _libraries['magic'].magic_setflags _setflags.restype = c_int _setflags.argtypes = [magic_t, c_int] _load = _libraries['magic'].magic_load _load.restype = c_int _load.argtypes = [magic_t, c_char_p] _compile = _libraries['magic'].magic_compile _compile.restype = c_int _compile.argtypes = [magic_t, c_char_p] _check = _libraries['magic'].magic_check _check.restype = c_int _check.argtypes = [magic_t, c_char_p] _list = _libraries['magic'].magic_list _list.restype = c_int _list.argtypes = [magic_t, c_char_p] _errno = _libraries['magic'].magic_errno _errno.restype = c_int _errno.argtypes = [magic_t] _getparam = _libraries['magic'].magic_getparam _getparam.restype = c_int _getparam.argtypes = [magic_t, c_int, c_void_p] _setparam = _libraries['magic'].magic_setparam _setparam.restype = c_int _setparam.argtypes = [magic_t, c_int, c_void_p] class Magic(object): def __init__(self, ms): self._magic_t = ms def close(self): """ Closes the magic database and deallocates any resources used. """ _close(self._magic_t) @staticmethod def __tostr(s): if s is None: return None if isinstance(s, str): return s try: # keep Python 2 compatibility return str(s, 'utf-8') except TypeError: return str(s) @staticmethod def __tobytes(b): if b is None: return None if isinstance(b, bytes): return b try: # keep Python 2 compatibility return bytes(b, 'utf-8') except TypeError: return bytes(b) def file(self, filename): """ Returns a textual description of the contents of the argument passed as a filename or None if an error occurred and the MAGIC_ERROR flag is set. A call to errno() will return the numeric error code. """ return Magic.__tostr(_file(self._magic_t, Magic.__tobytes(filename))) def descriptor(self, fd): """ Returns a textual description of the contents of the argument passed as a file descriptor or None if an error occurred and the MAGIC_ERROR flag is set. A call to errno() will return the numeric error code. """ return Magic.__tostr(_descriptor(self._magic_t, fd)) def buffer(self, buf): """ Returns a textual description of the contents of the argument passed as a buffer or None if an error occurred and the MAGIC_ERROR flag is set. A call to errno() will return the numeric error code. """ return Magic.__tostr(_buffer(self._magic_t, buf, len(buf))) def error(self): """ Returns a textual explanation of the last error or None if there was no error. """ return Magic.__tostr(_error(self._magic_t)) def setflags(self, flags): """ Set flags on the magic object which determine how magic checking behaves; a bitwise OR of the flags described in libmagic(3), but without the MAGIC_ prefix. Returns -1 on systems that don't support utime(2) or utimes(2) when PRESERVE_ATIME is set. """ return _setflags(self._magic_t, flags) def load(self, filename=None): """ Must be called to load entries in the colon separated list of database files passed as argument or the default database file if no argument before any magic queries can be performed. Returns 0 on success and -1 on failure. """ return _load(self._magic_t, Magic.__tobytes(filename)) def compile(self, dbs): """ Compile entries in the colon separated list of database files passed as argument or the default database file if no argument. The compiled files created are named from the basename(1) of each file argument with ".mgc" appended to it. Returns 0 on success and -1 on failure. """ return _compile(self._magic_t, Magic.__tobytes(dbs)) def check(self, dbs): """ Check the validity of entries in the colon separated list of database files passed as argument or the default database file if no argument. Returns 0 on success and -1 on failure. """ return _check(self._magic_t, Magic.__tobytes(dbs)) def list(self, dbs): """ Check the validity of entries in the colon separated list of database files passed as argument or the default database file if no argument. Returns 0 on success and -1 on failure. """ return _list(self._magic_t, Magic.__tobytes(dbs)) def errno(self): """ Returns a numeric error code. If return value is 0, an internal magic error occurred. If return value is non-zero, the value is an OS error code. Use the errno module or os.strerror() can be used to provide detailed error information. """ return _errno(self._magic_t) def getparam(self, param): """ Returns the param value if successful and -1 if the parameter was unknown. """ v = c_int() i = _getparam(self._magic_t, param, byref(v)) if i == -1: return -1 return v.value def setparam(self, param, value): """ Returns 0 if successful and -1 if the parameter was unknown. """ v = c_int(value) return _setparam(self._magic_t, param, byref(v)) def open(flags): """ Returns a magic object on success and None on failure. Flags argument as for setflags. """ magic_t = _open(flags) if magic_t is None: return None return Magic(magic_t) # Objects used by `detect_from_` functions class error(Exception): pass class MagicDetect(object): def __init__(self): self.mime_magic = open(MAGIC_MIME) if self.mime_magic is None: raise error if self.mime_magic.load() == -1: self.mime_magic.close() self.mime_magic = None raise error self.none_magic = open(MAGIC_NONE) if self.none_magic is None: self.mime_magic.close() self.mime_magic = None raise error if self.none_magic.load() == -1: self.none_magic.close() self.none_magic = None self.mime_magic.close() self.mime_magic = None raise error def __del__(self): if self.mime_magic is not None: self.mime_magic.close() if self.none_magic is not None: self.none_magic.close() threadlocal = threading.local() def _detect_make(): v = getattr(threadlocal, "magic_instance", None) if v is None: v = MagicDetect() setattr(threadlocal, "magic_instance", v) return v def _create_filemagic(mime_detected, type_detected): try: mime_type, mime_encoding = mime_detected.split('; ') except ValueError: raise ValueError(mime_detected) return FileMagic(name=type_detected, mime_type=mime_type, encoding=mime_encoding.replace('charset=', '')) def detect_from_filename(filename): '''Detect mime type, encoding and file type from a filename Returns a `FileMagic` namedtuple. ''' x = _detect_make() return _create_filemagic(x.mime_magic.file(filename), x.none_magic.file(filename)) def detect_from_fobj(fobj): '''Detect mime type, encoding and file type from file-like object Returns a `FileMagic` namedtuple. ''' file_descriptor = fobj.fileno() x = _detect_make() return _create_filemagic(x.mime_magic.descriptor(file_descriptor), x.none_magic.descriptor(file_descriptor)) def detect_from_content(byte_content): '''Detect mime type, encoding and file type from bytes Returns a `FileMagic` namedtuple. ''' x = _detect_make() return _create_filemagic(x.mime_magic.buffer(byte_content), x.none_magic.buffer(byte_content)) file-5.46/python/setup.py000664 023540 023540 00000001470 14015050431 017157 0ustar00christoschristos000000 000000 # coding: utf-8 from __future__ import unicode_literals from setuptools import setup with open('README.md', 'r') as fh: long_description = fh.read() setup(name='file-magic', version='0.4.0', author='Reuben Thomas, Ãlvaro Justen', author_email='rrt@sc3d.org, alvarojusten@gmail.com', url='https://github.com/file/file', license='BSD', description='(official) libmagic Python bindings', long_description=long_description, long_description_content_type='text/markdown', py_modules=['magic'], test_suite='tests', classifiers = [ 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Natural Language :: English', 'Topic :: Software Development :: Libraries :: Python Modules', ]) file-5.46/python/tests.py000664 023540 023540 00000001727 14304104127 017171 0ustar00christoschristos000000 000000 # coding: utf-8 import unittest import magic class MagicTestCase(unittest.TestCase): filename = 'magic.py' expected_mime_type = 'text/x-script.python' expected_encoding = 'us-ascii' expected_name = 'Python script, ASCII text executable' def assert_result(self, result): self.assertEqual(result.mime_type, self.expected_mime_type) self.assertEqual(result.encoding, self.expected_encoding) self.assertEqual(result.name, self.expected_name) def test_detect_from_filename(self): result = magic.detect_from_filename(self.filename) self.assert_result(result) def test_detect_from_fobj(self): with open(self.filename, "rb") as fobj: result = magic.detect_from_fobj(fobj) self.assert_result(result) def test_detect_from_content(self): with open(self.filename, "rb") as fobj: result = magic.detect_from_content(fobj.read(8192)) self.assert_result(result) file-5.46/python/file_magic/__init__.py000664 023540 023540 00000000024 14015050431 021627 0ustar00christoschristos000000 000000 name = 'file_magic' file-5.46/tests/Makefile.am000664 023540 023540 00000011201 14721423047 017326 0ustar00christoschristos000000 000000 check_PROGRAMS = test test_LDADD = $(top_builddir)/src/libmagic.la test_CPPFLAGS = -I$(top_builddir)/src EXTRA_DIST = \ android-vdex-1.result \ android-vdex-1.testfile \ android-vdex-2.result \ android-vdex-2.testfile \ arj.result \ arj.testfile \ bcachefs.result \ bcachefs.testfile \ bcachefs2.result \ bcachefs2.testfile \ cl8m8ocofedso.result \ cl8m8ocofedso.testfile \ cmd1.result \ cmd1.testfile \ cmd2.result \ cmd2.testfile \ cmd3.result \ cmd3.testfile \ cmd4.result \ cmd4.testfile \ CVE-2014-1943.result \ CVE-2014-1943.testfile \ dsd64-dff.result \ dsd64-dff.testfile \ dsd64-dsf.result \ dsd64-dsf.testfile \ escapevel.result \ escapevel.testfile \ ext4.result \ ext4.testfile \ fit-map-data.result \ fit-map-data.testfile \ gedcom.result \ gedcom.testfile \ gpkg-1-zst.result \ gpkg-1-zst.testfile \ hello-racket_rkt.result \ hello-racket_rkt.testfile \ hddrawcopytool.result \ hddrawcopytool.testfile \ HWP2016.hwp.result \ HWP2016.hwp.testfile \ HWP2016.hwpx.zip.result \ HWP2016.hwpx.zip.testfile \ HWP97.hwp.result \ HWP97.hwp.testfile \ issue311docx.result \ issue311docx.testfile \ issue359xlsx.result \ issue359xlsx.testfile \ jpeg-text.result \ jpeg-text.testfile \ json1.result \ json1.testfile \ json2.result \ json2.testfile \ json3.result \ json3.testfile \ json4.result \ json4.testfile \ json5.result \ json5.testfile \ json6.result \ json6.testfile \ json7.result \ json7.testfile \ json8.result \ json8.testfile \ jsonlines1.result \ jsonlines1.testfile \ JW07022A.mp3.result \ JW07022A.mp3.testfile \ keyman-0.result \ keyman-0.testfile \ keyman-1.result \ keyman-1.testfile \ keyman-2.result \ keyman-2.testfile \ matilde.arm.result \ matilde.arm.testfile \ multiple-A.magic \ multiple-B.magic \ multiple.flags \ multiple.result \ multiple.testfile \ pcjr.result \ pcjr.testfile \ pgp-binary-key-v2-phil.result \ pgp-binary-key-v2-phil.testfile \ pgp-binary-key-v3-lutz.result \ pgp-binary-key-v3-lutz.testfile \ pgp-binary-key-v4-dsa.result \ pgp-binary-key-v4-dsa.testfile \ pgp-binary-key-v4-ecc-no-userid-secret.result \ pgp-binary-key-v4-ecc-no-userid-secret.testfile \ pgp-binary-key-v4-ecc-secret-key.result \ pgp-binary-key-v4-ecc-secret-key.testfile \ pgp-binary-key-v4-rsa-key.result \ pgp-binary-key-v4-rsa-key.testfile \ pgp-binary-key-v4-rsa-no-userid-secret.result \ pgp-binary-key-v4-rsa-no-userid-secret.testfile \ pgp-binary-key-v4-rsa-secret-key.result \ pgp-binary-key-v4-rsa-secret-key.testfile \ pnm1.result \ pnm1.testfile \ pnm2.result \ pnm2.testfile \ pnm3.result \ pnm3.testfile \ regex-eol.magic \ regex-eol.result \ regex-eol.testfile \ registry-pol.result \ registry-pol.testfile \ rpm-v3.0-bin-aarch64.result \ rpm-v3.0-bin-aarch64.testfile \ rpm-v3.0-bin-powerpc64.result \ rpm-v3.0-bin-powerpc64.testfile \ rpm-v3.0-bin-s390x.result \ rpm-v3.0-bin-s390x.testfile \ rpm-v3.0-bin-x86_64.result \ rpm-v3.0-bin-x86_64.testfile \ rpm-v3.0-src.result \ rpm-v3.0-src.testfile \ searchbug.magic \ searchbug.result \ searchbug.testfile \ uf2.result \ uf2.testfile \ utf16xmlsvg.testfile \ utf16xmlsvg.result \ xclbin.result \ xclbin.testfile \ zstd-3-skippable-frames.result \ zstd-dictionary-0.result \ zstd-dictionary-1.result \ zstd-dictionary-2.result \ zstd-skippable-frame-0.result \ zstd-skippable-frame-4.result \ zstd-skippable-frame-8.result \ zstd-skippable-frame-C.result \ zstd-v0.2-FF.result \ zstd-v0.2-FF.testfile \ zstd-v0.3-FF.result \ zstd-v0.3-FF.testfile \ zstd-v0.4-FF.result \ zstd-v0.4-FF.testfile \ zstd-v0.5-FF.result \ zstd-v0.5-FF.testfile \ zstd-v0.6-FF.result \ zstd-v0.6-FF.testfile \ zstd-v0.7-00.result \ zstd-v0.7-21.result \ zstd-v0.7-21.testfile \ zstd-v0.7-22.result \ zstd-v0.7-22.testfile \ zstd-v0.8-00.result \ zstd-v0.8-01.result \ zstd-v0.8-01.testfile \ zstd-v0.8-02.result \ zstd-v0.8-02.testfile \ zstd-v0.8-03.result \ zstd-v0.8-03.testfile \ zstd-v0.8-16.result \ zstd-v0.8-16.testfile \ zstd-v0.8-20.result \ zstd-v0.8-20.testfile \ zstd-v0.8-21.result \ zstd-v0.8-21.testfile \ zstd-v0.8-22.result \ zstd-v0.8-22.testfile \ zstd-v0.8-23.result \ zstd-v0.8-23.testfile \ zstd-v0.8-F4.result \ zstd-v0.8-F4.testfile \ zstd-v0.8-FF.result \ zstd-v0.8-FF.testfile T = $(top_srcdir)/tests check-local: set -e; \ for i in $T/*.testfile; do \ t=$${i%%.testfile}; \ echo Running test: $$t; \ m=; \ for j in $$(eval echo $${t}\*.magic); do \ if [ -f "$$j" ]; then \ if [ -z "$$m" ]; then \ m=$$j; \ else \ m=$$m:$$j; \ fi \ fi \ done; \ if [ -z "$$m" ]; then \ m=$(top_builddir)/magic/magic; \ fi; \ f=-e; \ if [ -f $${t}.flags ]; then \ f=$$f$$(cat $${t}.flags); \ fi; \ echo TZ=UTC MAGIC=$$m ./test $$f $$i $${t}.result; \ TZ=UTC MAGIC=$$m ./test $$f $$i $${t}.result; \ done file-5.46/tests/Makefile.in000664 023540 023540 00000057512 14721423131 017350 0ustar00christoschristos000000 000000 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = test$(EXEEXT) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_SOURCES = test.c test_OBJECTS = test-test.$(OBJEXT) test_DEPENDENCIES = $(top_builddir)/src/libmagic.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/test-test.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = test.c DIST_SOURCES = test.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgdatadir = @pkgdatadir@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WARNINGS = @WARNINGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fsect = @fsect@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ test_LDADD = $(top_builddir)/src/libmagic.la test_CPPFLAGS = -I$(top_builddir)/src EXTRA_DIST = \ android-vdex-1.result \ android-vdex-1.testfile \ android-vdex-2.result \ android-vdex-2.testfile \ arj.result \ arj.testfile \ bcachefs.result \ bcachefs.testfile \ bcachefs2.result \ bcachefs2.testfile \ cl8m8ocofedso.result \ cl8m8ocofedso.testfile \ cmd1.result \ cmd1.testfile \ cmd2.result \ cmd2.testfile \ cmd3.result \ cmd3.testfile \ cmd4.result \ cmd4.testfile \ CVE-2014-1943.result \ CVE-2014-1943.testfile \ dsd64-dff.result \ dsd64-dff.testfile \ dsd64-dsf.result \ dsd64-dsf.testfile \ escapevel.result \ escapevel.testfile \ ext4.result \ ext4.testfile \ fit-map-data.result \ fit-map-data.testfile \ gedcom.result \ gedcom.testfile \ gpkg-1-zst.result \ gpkg-1-zst.testfile \ hello-racket_rkt.result \ hello-racket_rkt.testfile \ hddrawcopytool.result \ hddrawcopytool.testfile \ HWP2016.hwp.result \ HWP2016.hwp.testfile \ HWP2016.hwpx.zip.result \ HWP2016.hwpx.zip.testfile \ HWP97.hwp.result \ HWP97.hwp.testfile \ issue311docx.result \ issue311docx.testfile \ issue359xlsx.result \ issue359xlsx.testfile \ jpeg-text.result \ jpeg-text.testfile \ json1.result \ json1.testfile \ json2.result \ json2.testfile \ json3.result \ json3.testfile \ json4.result \ json4.testfile \ json5.result \ json5.testfile \ json6.result \ json6.testfile \ json7.result \ json7.testfile \ json8.result \ json8.testfile \ jsonlines1.result \ jsonlines1.testfile \ JW07022A.mp3.result \ JW07022A.mp3.testfile \ keyman-0.result \ keyman-0.testfile \ keyman-1.result \ keyman-1.testfile \ keyman-2.result \ keyman-2.testfile \ matilde.arm.result \ matilde.arm.testfile \ multiple-A.magic \ multiple-B.magic \ multiple.flags \ multiple.result \ multiple.testfile \ pcjr.result \ pcjr.testfile \ pgp-binary-key-v2-phil.result \ pgp-binary-key-v2-phil.testfile \ pgp-binary-key-v3-lutz.result \ pgp-binary-key-v3-lutz.testfile \ pgp-binary-key-v4-dsa.result \ pgp-binary-key-v4-dsa.testfile \ pgp-binary-key-v4-ecc-no-userid-secret.result \ pgp-binary-key-v4-ecc-no-userid-secret.testfile \ pgp-binary-key-v4-ecc-secret-key.result \ pgp-binary-key-v4-ecc-secret-key.testfile \ pgp-binary-key-v4-rsa-key.result \ pgp-binary-key-v4-rsa-key.testfile \ pgp-binary-key-v4-rsa-no-userid-secret.result \ pgp-binary-key-v4-rsa-no-userid-secret.testfile \ pgp-binary-key-v4-rsa-secret-key.result \ pgp-binary-key-v4-rsa-secret-key.testfile \ pnm1.result \ pnm1.testfile \ pnm2.result \ pnm2.testfile \ pnm3.result \ pnm3.testfile \ regex-eol.magic \ regex-eol.result \ regex-eol.testfile \ registry-pol.result \ registry-pol.testfile \ rpm-v3.0-bin-aarch64.result \ rpm-v3.0-bin-aarch64.testfile \ rpm-v3.0-bin-powerpc64.result \ rpm-v3.0-bin-powerpc64.testfile \ rpm-v3.0-bin-s390x.result \ rpm-v3.0-bin-s390x.testfile \ rpm-v3.0-bin-x86_64.result \ rpm-v3.0-bin-x86_64.testfile \ rpm-v3.0-src.result \ rpm-v3.0-src.testfile \ searchbug.magic \ searchbug.result \ searchbug.testfile \ uf2.result \ uf2.testfile \ utf16xmlsvg.testfile \ utf16xmlsvg.result \ xclbin.result \ xclbin.testfile \ zstd-3-skippable-frames.result \ zstd-dictionary-0.result \ zstd-dictionary-1.result \ zstd-dictionary-2.result \ zstd-skippable-frame-0.result \ zstd-skippable-frame-4.result \ zstd-skippable-frame-8.result \ zstd-skippable-frame-C.result \ zstd-v0.2-FF.result \ zstd-v0.2-FF.testfile \ zstd-v0.3-FF.result \ zstd-v0.3-FF.testfile \ zstd-v0.4-FF.result \ zstd-v0.4-FF.testfile \ zstd-v0.5-FF.result \ zstd-v0.5-FF.testfile \ zstd-v0.6-FF.result \ zstd-v0.6-FF.testfile \ zstd-v0.7-00.result \ zstd-v0.7-21.result \ zstd-v0.7-21.testfile \ zstd-v0.7-22.result \ zstd-v0.7-22.testfile \ zstd-v0.8-00.result \ zstd-v0.8-01.result \ zstd-v0.8-01.testfile \ zstd-v0.8-02.result \ zstd-v0.8-02.testfile \ zstd-v0.8-03.result \ zstd-v0.8-03.testfile \ zstd-v0.8-16.result \ zstd-v0.8-16.testfile \ zstd-v0.8-20.result \ zstd-v0.8-20.testfile \ zstd-v0.8-21.result \ zstd-v0.8-21.testfile \ zstd-v0.8-22.result \ zstd-v0.8-22.testfile \ zstd-v0.8-23.result \ zstd-v0.8-23.testfile \ zstd-v0.8-F4.result \ zstd-v0.8-F4.testfile \ zstd-v0.8-FF.result \ zstd-v0.8-FF.testfile T = $(top_srcdir)/tests all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) @rm -f test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-test.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< test-test.o: test.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test-test.o -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test.c' object='test-test.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c test-test.obj: test.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test-test.obj -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test.c' object='test-test.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(test_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-local check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/test-test.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/test-test.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am \ check-local clean clean-checkPROGRAMS clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile check-local: set -e; \ for i in $T/*.testfile; do \ t=$${i%%.testfile}; \ echo Running test: $$t; \ m=; \ for j in $$(eval echo $${t}\*.magic); do \ if [ -f "$$j" ]; then \ if [ -z "$$m" ]; then \ m=$$j; \ else \ m=$$m:$$j; \ fi \ fi \ done; \ if [ -z "$$m" ]; then \ m=$(top_builddir)/magic/magic; \ fi; \ f=-e; \ if [ -f $${t}.flags ]; then \ f=$$f$$(cat $${t}.flags); \ fi; \ echo TZ=UTC MAGIC=$$m ./test $$f $$i $${t}.result; \ TZ=UTC MAGIC=$$m ./test $$f $$i $${t}.result; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: file-5.46/tests/README000664 023540 023540 00000000622 14015050417 016150 0ustar00christoschristos000000 000000 file tests ========== This directory contains tests for file. It is highly encouraged to add one each time a bug is found, and each time new magic is added. Each test consists of two files: TEST.testfile TEST.result where TEST is the base name of the test, TEST.testfile is the input, and TEST.result is the desired output from file. To add a new test just add the test files to the directory. file-5.46/tests/test.c000664 023540 023540 00000007512 14371230331 016420 0ustar00christoschristos000000 000000 /* * Copyright (c) Christos Zoulas 2003. * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include #include #include #include #include #include #include "magic.h" static const char *prog; static void * xrealloc(void *p, size_t n) { p = realloc(p, n); if (p == NULL) { (void)fprintf(stderr, "%s ERROR slurping file: %s\n", prog, strerror(errno)); exit(10); } return p; } static char * slurp(FILE *fp, size_t *final_len) { size_t len = 256; int c; char *l = xrealloc(NULL, len), *s = l; for (c = getc(fp); c != EOF; c = getc(fp)) { if (s == l + len) { s = l + len; len *= 2; l = xrealloc(l, len); } *s++ = c; } if (s != l && s[-1] == '\n') s--; if (s == l + len) { l = xrealloc(l, len + 1); s = l + len; } *s++ = '\0'; *final_len = s - l; return xrealloc(l, s - l); } int main(int argc, char **argv) { struct magic_set *ms = NULL; const char *result; size_t result_len, desired_len; char *desired = NULL; int e = EXIT_FAILURE, flags, c; FILE *fp; setenv("TZ", "UTC", 1); tzset(); prog = strrchr(argv[0], '/'); if (prog) prog++; else prog = argv[0]; if (argc == 1) return 0; flags = 0; while ((c = getopt(argc, argv, "ek")) != -1) switch (c) { case 'e': flags |= MAGIC_ERROR; break; case 'k': flags |= MAGIC_CONTINUE; break; default: goto usage; } argc -= optind; argv += optind; if (argc != 2) { usage: (void)fprintf(stderr, "Usage: %s [-ek] TEST-FILE RESULT\n", prog); goto bad; } ms = magic_open(flags); if (ms == NULL) { (void)fprintf(stderr, "%s: ERROR opening MAGIC_NONE: %s\n", prog, strerror(errno)); return e; } if (magic_load(ms, NULL) == -1) { (void)fprintf(stderr, "%s: ERROR loading with NULL file: %s\n", prog, magic_error(ms)); goto bad; } if ((result = magic_file(ms, argv[0])) == NULL) { (void)fprintf(stderr, "%s: ERROR loading file %s: %s\n", prog, argv[1], magic_error(ms)); goto bad; } fp = fopen(argv[1], "r"); if (fp == NULL) { (void)fprintf(stderr, "%s: ERROR opening `%s': %s", prog, argv[1], strerror(errno)); goto bad; } desired = slurp(fp, &desired_len); fclose(fp); (void)printf("%s: %s\n", argv[0], result); if (strcmp(result, desired) != 0) { result_len = strlen(result); (void)fprintf(stderr, "%s: ERROR: result was (len %zu)\n%s\n" "expected (len %zu)\n%s\n", prog, result_len, result, desired_len, desired); goto bad; } e = 0; bad: free(desired); if (ms) magic_close(ms); return e; } file-5.46/tests/android-vdex-1.result000664 023540 023540 00000000174 14325247002 021256 0ustar00christoschristos000000 000000 Android vdex file, verifier deps version: 021, dex section version: 002, number of dex files: 4, verifier deps size: 106328 file-5.46/tests/android-vdex-1.testfile000664 023540 023540 00000000024 14015050417 021547 0ustar00christoschristos000000 000000 vdex021002XŸfile-5.46/tests/android-vdex-2.result000664 023540 023540 00000000226 14325247002 021255 0ustar00christoschristos000000 000000 Android vdex file, being processed by dex2oat, verifier deps version: 019, dex section version: 002, number of dex files: 1, verifier deps size: 1016 file-5.46/tests/android-vdex-2.testfile000664 023540 023540 00000000024 14015050417 021550 0ustar00christoschristos000000 000000 wdex019002øfile-5.46/tests/arj.result000664 023540 023540 00000000142 14325247002 017303 0ustar00christoschristos000000 000000 ARJ archive data, v11, slash-switched, created 5 1980+48, original name: example_m0.arj, os: Unix file-5.46/tests/arj.testfile000664 023540 023540 00000000066 14202503611 017604 0ustar00christoschristos000000 000000 `ê2" Nä;åaä;åaexample_m0.arjfile-5.46/tests/bcachefs.result000664 023540 023540 00000000236 14325247002 020271 0ustar00christoschristos000000 000000 bcachefs, UUID=46bd306f-80ad-4cd0-af4f-147e7d85f393, label "Label", version 13, min version 13, device 0/UUID=72a60ede-4cb6-4374-aa70-cb38a50af5ef, 1 devices file-5.46/tests/bcachefs.testfile000664 023540 023540 00000020000 14034662315 020566 0ustar00christoschristos000000 000000 Æ…söNEÊ‚eõHºm $è,} Æ…söNEÊ‚eõHºm O*Ð¥F¯¸’¦ab’ºF½0o€­LЯO~}…ó“Label¿Å$Ët€À€ŠÆ…söNEÊ‚eõHºm r¦ÞL¶CtªpË8¥ õï@€Rár` ('&%$#"!¬€,!x€  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$½*°ä³‰`p  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ }ØçpÊSLj  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿT㥴¦/j¶Xfile-5.46/tests/bcachefs2.result000664 023540 023540 00000000250 14522200656 020352 0ustar00christoschristos000000 000000 bcachefs, UUID=4fa11b1e-75e6-4210-9167-34e1769c0fe1, label "Label", version 26, min version 26, device 0/UUID=0a3643b7-c515-47f8-a0ea-91fc38d043d1, 1 devices (unclean) file-5.46/tests/bcachefs2.testfile000664 023540 023540 00000020000 14374717167 020665 0ustar00christoschristos000000 000000 Æ…söfΩÙj`Ï€=÷ï  Æ…söfΩÙj`Ï€=÷ïÅ›G/ÅqK@³À½ì˜ùDÃO¡uæB‘g4ávœáLabel ÕNYB€Á0úd€ºÆ…söfΩÙj`Ï€=÷ï   6C·ÅGø ê‘ü8ÐCÑ@€ file-5.46/tests/cl8m8ocofedso.result000664 023540 023540 00000000145 14325247002 021207 0ustar00christoschristos000000 000000 Audio file with ID3 version 2.4.0, contains: MPEG ADTS, layer III, v1, 192 kbps, 44.1 kHz, JntStereo file-5.46/tests/cl8m8ocofedso.testfile000664 023540 023540 00000066201 14015050417 021513 0ustar00christoschristos000000 000000 ID36TIT2obama96TYER2009TENC Lavf52.2.0ÿû°dði ¤ 4€LAME3.97UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.97UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÿû²dÿði ¤ 4€UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.97UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÿû²dÿði ¤ 4€UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.97UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÿû²dÿði ¤ 4€UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.97UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÿû²dÿði ¤ 4€UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.97UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÿû²dÿði ¤ 4€UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUULAME3.97UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUÿû²dÿði ¤ 4€UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU@0 < ”ž1N5ü ³°1v’¼ Äp:zÛ|¢2ü­¿_(@ 4¦NÿÀØ’Šp„X Hº°6"Wÿð:ƒU@ÒÍ*ÿàÿ*à82÷ü ‡3Z€Ï!½~ê Õ”P4¡¿ÿ%A0 3V@Ì¡(‰tÊ(‚ÿø¸% f¤žÂ”Œ‚øåàeàŸbDKh{ÿÿÿ@‰@Ž€b(8ö‚ 6 àdEœ¢LM81?ÿÿÿÀÍ!"À„ }p1.ÀPg†€À ` „ÀÄ@`œYŒ°Â%Âx_ÿÿÿÿÿÿà`ø‡4Á~Â.˜‚šŠf\rnªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÿû²dÿ€i  %ž§Yk4ƒªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªMPš”Y‚ð«”Q„± Å“Âð "AÅÈ LÉ`ã r4 FZ`,½Ã;ܰ ¡ÁEf˜ˆZv”…ªMÁeÏjeM="F@2^„_V*¿Ô¹À Ù®B_ÿóßÿ­œF¸dP¡`–f @Ò`&† Àv"ðÀû03Aaa90CÐ 0&à0 @áüÁºÂ‰æÔÙçÆQ €±‡&$hÊ  0À§Œ*³@E(‚…‹lå e‡"HcF’0@‰Zÿû²dÿ€ ;fH{€ À)—&í4ƒ€†@p°F"LQBúM&ŠpÇ KàÌ*„ - ýL ¸D%¬Ã:…\0™Á‰Â©F@U¯­‡Ûˆ®ª’Ââ 4 -óu'ŠaˆÁ—¼I:o£@b+Æ4š(^ŒÓŠñ1tñ´VÉÃ6°É˜žÍâœS"º§¬°KuMæþ ŠJYút7ªÈÁäòèØhÌ”¨ ”k~Qž”|ºÝžåÄ?-‚•1HÁ\(Í6@,Á” #@Ê ‚à,£€°ÿû²d½úÉeʃ»Ëp ( —8ok-È4€0C°d04pP%‚@Pg1¸¦æj0<€¿¾{ú€Œ‡æDúHˆ‡–†a& ðPpè…ý5kC,p!""ŒÙŸ¹Ê˜,TzXA`XT}›µÈWeö}e&Ü•ªÀi]§5½nk-Òƒ¸ä.1¦ª„…{Ô¶uR7ï+6v€˜9:ÎQ„ipWë+ \EiOéT5ª„ÔLN¤ý" ]¶Aò~mPÈx ¢<¸`Š$Ú¿©8áCޤ mÜ¢ºíºNak,‘¶ÊU)‰SO¿VÇY·5L¬ª4Ý 0«Ñ©Ÿ·4ÄBö”Á@4‚£u×»Kd ¹”  @2–8)p$ºÓŠ(2¤_ìINÙ#L¸š,9~5wu©)Œ4KJ"Pi01Q;å$0ÄE0Òð8Ri1à$0¤1ÂQ†e‚‘¼$³3…G"!y™çU1À Ó‹ú ™€¸zW°aÀQ­ ít31²y$Åa1à#[JÅz†&- Š  2ÀXU'ÛÒÏV¼áKÜ¥W?У %pÛvuÀLlj>Í£si#ÅsæÜf"ð7VeXì‰#• ŸG5.O¢ùªvζ”1ÂS5Ò¥*f %ÝNætÐKúïrZÑ'0Pf1šÍœÊñZ‘ÇqŸºxÄ^+ƒ™2"Alâµµ@uél~·›IL= %j¤.8XÉ¥ÅÕ~Ô!#”(GEob£Y[(•Lº”©fr &èPÿû²d—Œú1fÍ›¼Ãp *Å—.s-È4€…¢·˜Œ®o‡ÛØeýqݦ$•kZÞÉ€È97 Ù‚Ð+)†iåÛŽ™ˆÈ$4Y€Ð‚¤8 Ì ƒ\ Ð2‹&Rf6—ˆÇR£Ö‹Ä“L|( ÑE` |ËE`@À â¯cDB*¢ÌÈYÆ$D¨;®“ÃB2P^fð€4!àžH¸ºq 1`+g}Ød¢‚,žpØ„íÌ¥H- @ “âd.~‚E!!ÍT‹Ð¹†X*Å:[Ó”01 éYC3²RŒ‚§ž “ÎÎ}” LÐH¡ÖCaY¤7bi‹/b„¥Á ­´…î!9uI†Nþâ³f»)e0vOòÖ_I–¦0üZŠçr]m↠hf0 /Ó/v$éÈá ¬n[!V–´¹“%¸@Ò53SDÖnPí$y•,ºiê±7 Kœ©uþk²Ý×» õêLv L WÏ”7…"ÆsÜdCÃp 8bQ*,†!vió’9Ø9Ñ4ÌÖøÌtX#ƒÜH€`i Y‹"‹žÀ âÌ‘¢Hª°ªª;ƒ Q0„ DºI‚¾@Ï·ÍLCùÊæ ‡i—;|L$(/gLåÅgT­µk-* s HË" D˜p\7B‰«¢‚–<$@zÒHF"j[]gT¸hö(Ž„»É®ƒŒ•¬3†i‚Ǻ’[’<±'ñÜyá·~MÝÿû²dpˆùeÍ‹»Ãp #ù—@îc À4€Ê,vvå%[”“Ù×’ßœ‚cq›tÛA˜Ä"óóÎÌbBý:Šáºªieé˜j³:žä¶»°þ5íׯ+§ÂU,±H•@Š h¾c¶™Ý,€°Ï G„°ð@Y $ͦI•MDðFr(‹m ÷AO>LívµRÕjT‚’6‘<´‰Õm!êTŠ\¾ˆÉ,Ü”noï8/*†QÖ£NÆAHËŸs<¹¡QVˆÈ$í#Ãcw\Eov]E3n¯’Z3ˆ¢h!‚¹Hâþ'K!1ÏdÒYÃ-ú!J‘DÕ±EB§P@T(Kp(:ø@(oó-O†bŽŽ£Ò]É—€ ˆ6Û°¶Ì£xWHv§(P¶Õs ŰqØ+v k…–áëJÀ ]‹Jªé~9ŒïòE´Å3ZïH á»åç/[¨´O‰Dݸäºr'~ i÷é%ô“¸% D@`Hbb„bŠ8äe†a ع 0J£9€¡TC‡®T@'°:FP›Î s°ZhXµšó*aìØ%n°êL—(uE4T[ÅåhBËG'Õ[å8Sí´Qå…C6‹'B®¦iÀÚ0˜¬¹UÛ2m©vT{0 GiAgÒhB–7# HÔ›"ËÍ@€i`AS 1;ÌI€¡P äF‘ã* 1yg€Lh@"ò*ËŠaÄ…O™1¤MÌRDÆ‘„&4Ä|Ëž5EŒ€sz½Õ_†Ejÿû²dw‰û9fÎS¸Óp &Ù—@MãMÀ4€C/Ñc\P ÈÑž`j›Ä†ˆèÖ3È;…"€nŠ kO™0`@#eû<<x‘‰^.b.Ø BG°qÀAð çlÅŽC!â¡`ŠEXË7>À‰´õà°²zíHØY³¢Ô ‚¨K^Ï-¾‚G©LmWÁÑ@Ac( NÀäR~Q9w7u‘³¨>˜´Kü\ŠZñ@ÍäUþ³=39 bQªäFõÉkÉ —<’XCý –_œ‹<Ðänìå˜ÌI¬»ãqrãv­YmÆç"frùkLbiÔÐ[èm ÎÍØ"” Ú—@%qkÔ½çCB J@,ˆû ×И"­áÆ‚àÊHMšôbË#4X®#(0↊<]p7 68 EBcàQaP”b„™4ÂÊ )"p»(F£"J’ÀÃ"Œ`ÃÊ*Vnñ…0€¢SÍq↠¡ÄË:[Ðæ ,X Ì1F’Þ‘#/[®(…‘ST.Ze€ ”ëË›fDÕ_EÄ–¢ Å`]} Yå¿´A„ê\ØÉR {ƒ€åÑ9¤jÓðÙ‰ƒ ú»ÄAo„Ê¥†™fR9Š#ŒðT(‹ypáv»H+SÊÂÄ<Ÿ/WLQ’PÑøð9lJߨ› Ü!õ¤ÝálÉ}*uh¸°„…€!Ä”sLøœuʇtj¬_ejZ(€mƒ‹ ,dŠ( Y Y‰~pà’št#KÌàÿû²dPùáeσoÓp $ý—B 3MÀ4€CtPÂ#2A]3*(È vB£ &æ&0™”8a‰!‰•,`ÇÇ2` ™U@ͼ£(ÜÑ,Ñš`T( É !n ™C! Là!d„`Š ÀÀKØJm „`¼¾ ¡q”« P1oSfV0@¥hI2â[QB#"É„°áeëO·Q_æX_ç±u("’F4¶‡ÙUd‹"tOU$ÕC$¡™W!‡^ž€biÆ“c2)êà"~?>`©Äc²$µÅ‡G§Äù\ø‚hcC?L@¤.Dély*Û('Oßž˜ž‰ÒÔܲÁ{w6²…6ÀY ÝA4_·¥”°Rþ´ ÒBÐ…2¨,]Ã\Ä€d¢¦ C-16#‡•™Áf)¤mÏ€Ž Z$ìÎ"ŽD`Qð Bä!D©¤Xd^@6 Ä…2¥Rš…Àç†9¨Ž‰Ý8ÄÍ[Á`Ph 0T)5D˜§F@ž \p˜B”ŽHPq0ƒ¥û3ÅÇ€`H”‹î4q.BˆÙb¥9Yeço™Ða6¯L r^~š T å+Cl³²Ö¢Ï‚6ýeˆ6La˜,ZÌ ‚«Å즥q,‚Çâ A… bP‚NÓñI`M ä(3^ó8½u™ÃSNÄâ¨Ç%Ku1+Ìì4û;rëÐûKHX+[xâE¡wÒiR+"Ëi”±S¡²˜‡eªL ²ÂBÅ‹ˆ‡ ¥˜8‚€Ÿ™–ÿû²dEƒùÚfP+LÓp %e›D 3MÀ4€‚@L É(|:Ì@$Í® ¬ h˜ †xÙÑb[ Á3Ä`„Æ53 À zs¤Hå1äM–EvjÍšÒfÑi’lA”&=9jˆ—‡8/I£J¬ÅûD°aP†9¦6Î BFÀزc @*t,U ÀÀ€š”`çƒ)½Œ @ð°á¨> è±Çå|(šl!ÝS ²Ó/°P^@À'B84˜y 5…p‘žžž@ßÞœÔ cùø7Œù!|Ñ·J0'%’Ñ_^½Î{…²Ë ÃÀ¥®,/äåÎD猤ùÇoK/Ä߆”íÇ"íqMåÌ=UZ262¹ô*°`Õ€M6`èŠDÑ—$4¤tI­ a…¦BLŽ—f*ì )´^V, ñ]šShrs@°j"8,UŠ \KÃm(‘(аQÂ'! LbvS @¨ÇÄ.ˆÆ‰4Ž€SÃLpÈ™/J¢ÛA ˜#R—Ac @x!Œ  L4,ºBCƒˆ1€Da ÄÂ4âÔ'J³ÒÀ#³/…6e@ÐÑU"Ÿ‘ &_R?m°`'jµTã f…Ö`@`¡{/ó{ÚT…æn›šËBÞpPRì¥2M4s¹§ÚÓ«¸ÈXãª0ÞRC[V]Çoœj¹a°Y\Ý<FfusJÌF¡¨›»Ì®åó Àñøœ°pên+ ÚYjfYƒ0DøvÐÚÿû²d9ù9eÑoËp %E—>.k-Ð4€y[ÔÌDB,¡Š[Ã…&Óf¥Lh3$qåÜÅ!¸Uâ‘(#32<ÎB3hø ‚’4Tq`„pƒW ã!ƒ@Ǭ]z °k”xn˜z„:¢MgŽ*ÎrdxÕĦ,”T„[q³hS!$¨!irçh,(……†E`åƒ[²Î®WñM•…3÷\±4iQ¿ ™QÖ¬â?ø Œ 3ÆhÛ£Ð`„ȾÀ¬L^9å¹׸P&  %¼RÔÀ¨7‡ 1u€Õ22‹²,b‘öÔ¼iƆe¨Ji›5!×Öca`­-¸S¸jÉØ‚E¡1¦&›0çí]³Vºµsc-–}UÚĦx_Žér©C˃âŠí±1ek—©5a†R%ç3V ÍníÐ0(úÕ&UC9-×B}#H„ hˆ<‚eKå“ /ì>ÍËb%ë5™Ü8ZN5vØ_*5ƒ/2ÛØ€sÁCMAÖZ Œq’Œ¼ @K¨"˜ÈÐ®æºÆ²—MQ>qÁ^ņ¡,õ>^åNwq¥±Xg"ñ,fâ®kOUy¾•µbR:Ì5Rä=^Ôüz¥çEœ·iwUKȈ1¦B4Ô 0´#0f=`0€ 0T‡2X^¶a¡o-Ø4€ 0¾ Ò'+e<öŒÍÁtrÕby 4õ‡Uüè"˜€ìL®$ƒ!@ý † ¾äHëâÝXëFݱ–تn&zíW#.§q‰À”…šqQÁ]Bœ´ëµØ>p„„D]‚#ÅbOKšÁ">ïêïK»¶îN8.ý+s—V£³6vdÏäôBjž/qéjl¡¦¿2kíüÅb˜ ¸)¬}ÿ–»N4û³w•Ûõ)‘ÖˆîYóunAýIf`{Ña_¢&x²hâ^ð”àDÐ<l¦T #À< Á=MXIN‡@£Ý<Œ`ú\•Že†JA¯ ,"Á‚ˆé‡˜C Ê ˜(é”e¯Cè¾Î*IŒPÜ"0@Âû“Ê ùÛO66›üf™ã:×!Çý§DŠF& €S˜á ƒ†/Z=*ö\èºÐ€š[.g­$5§t†Yï(8”ûv……ÀÌ¡ófbH¬tÉUƒ—í ›F²À†ÄîÁéì™ÎÃEyìËZ…H}î‡#/ßîåJ•kÅjÈÜKS÷­ýz˜å;„[ r ÙRõcÝlï ¼Ò‰#•C÷¯Ã1Jî %˜ 4à§t­Éœ†{ù\ã Œ9¦ŸDHŒŠ@ë¼Æ“g€ D´2P¹CZ *mJÀ`*€Ð#ì9Q´|1·`€ªÀ°††°`æÅðâðr€XÂFˆ äÉ€¤*d«C@Æ‚h!™(²ÿû°d9ŽøôeлÃp %Å—:.s-À4€@îO¯îÔ^Ëu¦¾ÝäÛ]K=ÉBkï‚[É’¨lcƨŠfò]ÉeŠöX¥Î몢ÏÛîà8ŒaI?Ž"ŽIàåÉ2gP¾œ ¤;5¸ÊoÀû¶õO;Ð …Õ‘SJ¦-Ï_‰)‹··â7~r´‰úÆBïZq"îõXeàdín£6}£u) &M>ì)•¨€²ØK Éà˜ƒý3È%±˜ÅYT<ðØƒæáP?uØ2CФ«Y0°YÁ÷3€ CuÆL2;ØŠa`†J‡u9˜Ü! ˜É , Š M•l´i–Df #Q= &@€‚â Ãƒ^³ Ø=ƒæ”˜t ˜Øj]·ÝA0hƃÓ…ÂàÓÛó L^B(½M)•¹q™{Ò´ž7 œ¿ÎK ”@¨ÜêW§RíŠÅ¡6Þ!,9s^ã ÀÄ!!»Peê_t¾¨ÜÙb¾@¤*vD@ ™q½+‘+ %vÏT¦}ÁuZ3¼ô#ª°Àmv]»±YoÓF³Öä‚¶ ˆ±=:ìIß¹l¦Þ{©ZÔ¯VâöìÌÝ¥±‡îÿÿö܆r–OŒÏCpDj·ªKZ’j× x¤ÎpÔJ?íC€Éa6!¨Mf ¦2†Ž†TDž®¨DµÅÔjâˆ*oFçÎÂ`!f˜pê ¡ó e“˜y‰³KšËá§ ØJ|"±Š– €Ì\ÈÄL ÒP XÉL $5IÏ´hÙfJŒ(ˆD`¡ÿû²d:øzeÏ ›{t  %—BnmíÀ4€Eù ††G•‰N%sRùÇUñ£Î2té4hXõ ¾u(ÅR“@Âð”„p áˆ, €$€#ÑDyŸÉËš™€Qò—5A-¤2l ׋Á9A~“zS^"ܤ^Í}¨dgRÕAÐ_Uˆx¯B@cšÍ&Ño.äÙ@®Y:YÆ cF– èX64¡9hcÖ(pªß`èÐT­±£ÆÿüÓ°©hý‘ó2åÅœà ,(J‰ mnK/ Ø-ãR¾ÜÅ Rïÿÿÿö*š4øF²3Lœ0Ocj)¶‡‰!âŽ;Òêjgð€x`ÃÌ/7˜¶©ƒgÆq‡Ñ°0 #vFD ž‘PµÂM Eƒ%z8·ðZ§….™{” [fV$>8`DbÉ tî5‰„ÑàguKûJÜ®1»£¡|Ü=ÚŒY›ÎjjO,š»Iž§Âµ5-y=VHû4éjÁ³–#:…¦Å¼b2F©ãN¢ìªÔ¡ˆÜ]~¯8m‰·geá¢ìåë4ïTwÿû²dY ÷åeÏ“›Ãt É—LmáíÀ4€²ŠÃÿÿoÿþ­Êkúü,Ür¨äôW¤ñª[ìïbQjïëm”Í{ØwþíL5,Þ¾wëËæõOrcùÁízì´•…Y±V¬Ýéå¯Ð&"îñ¹;M‰»ÅD°HĈdÆç™E‘ JˆLKLÄ^0IÿG4¦­^âKª–åLÕÀÒ«ÄÇæy»CÑk:mc43Ñ•³Êlf›Xüz¿v`²Å¥·ÿù‡—;Fp±ü…¤ÓÑy«Tm§ÉÔ™J®‰qšh'ÉfC½:ƦdY•·0R*áOº{Ï{Óq&¼}ã_0KûaЋ‚œzÂÄnAx»~†)Ø÷Šcü©_ŸÉj¿PÛÔÇ»ä%P†ƒ|ÓŠ‡× ¬HtžR'Sð±J•Ö¥*…Õ*-ÆÄl£Î,Ñý1‘ñ#Ø!&ë¾ 5VÃÏà ÜÉiiÊ@½`Z´`ÉsšÛªŠ) ó¸ð±&€ºˆF‡$QeŠ‚ï³€üÈÓû‘Ö„J!Ìap-#¯; µ2@p¾&›Þõ‹fÕÛÓõêi|:ˆ¥h@¹ê}®’j¨¨÷Ív£ÅᙈíµQ Ñ¢ÈQ+á=np£3æ&¢D¾µœÄ¤«*ÙŸÁk¨ÿO°2êyÚÞÖž x5³[ÔZ‰>y¡Jþ¶žFG‰¨îk˨ëÌ:µ-*šA2K²[×ÒŠ„@i¢™¯S¬Û__P4r]J’Þ½êú5sØ+¢ÒË“P.0™o+uK`QD¬^Ár¤ÍÌpC1@pXThÀÇÍÿû²d— öÈeÒx{p ¥—HMéíÀ4€­¡A¦ºÈZã-­UE30 p’…Ø#eÈ‘Ò bŒ×a†Ô|¥ž¢ äb¤éfB2¼eW(ÎuQô˜B•, NJ†¨¾„û†n­²5Epk?9ò±ÏÂO*¯h‚Ø©CÔÉh¥±µ©ê}ÉFÿjÄÁ޳)Îk¥ž‹ìhÒo’ñð­-ˆFš•q‹¹æl½„ð¦Æù[•æŽù®5ߪ<‘9ÀYŒÆ¢5%ØjŸInÞu"Oì»Þ&þ–¤ÆìÅÞG!³)«9bÊ&"î…,¡]àp°T£Z4ßå9˜Žp!­<© "P$Å+1¨²XˆÀ4 Õ-¡xF•iA¦BK¡{ÊÌ g€“„€ëÄ¥¨Š™B\¯¤…[¤Pp0BƇ€_„w …L͘Ä1¢ÖæepVTô”š§£ŽÔÅÿ˜imv ”?–|q_=L2BÉ#(åÒ:]·N?m­<:Ã)Ÿå€wãrzfÒILÖßFå[”Ä)îò0¦Æn~'E%Õ©¢ôí? D?1)³5ƽ¹¸o IŒ#®E‰Þ3æ»\ÓB©!ÆÎîamÒoª[ä±å«v—Ó7\H$¬Ï]蚇Ãf@e@IH8„ ”?ƒLÃVWI¨g. 5 åEŠJ‘€R…‡…é(¸åBñ4\…NfÆDá QÀ!#&lÉ20¦ÁEB VQh†£Y¡ \a@¨ì"ÿû²dðù€eP¡úÓp & •EÌkMÀ4€9q+њʿX̉ ÒáExA.Øu]9=Y©T3¨u³OÄ[E¥DœÑwI»Á„€a¦Žª) »R¹I—av·W¡Táå]¾ë ÂbÊéË0@ 7BA+žÙ e†g,fH¿”>øÒQË¥Sµ%M´­é„H!k±‹®¨œE"á*lB4Ùêõ²€Ã@Ûsi£Véúz7 ø ‚i”çlmØÆ€ÙŠÛXº»Z&à˜ lT @¦ š£`¡À!I“™Ûq¸Š™ h‰˜¸A“*™ˆP²¡‚™`aŠ!€‡Œµ$˜,ËÈ d8ÌFC‘ÃÞ"ˆÇL×I2 ˆ,Ô,v`2æK8V¼$ÁƒÀP•µÔ1P$\ëŒ(i¶¹±pëÀQÁh€D:2¤X“Åå00 0$ 锺Ÿ'‚*ÎÜ&boÔk°= Þrà%æÎ[š~LÏIVå, @¬e‰@ŽWo@ËaÞg¬­€§DAþd­b³k(˜ÏÙ<´dÕªÊa™¶+MæýÇe|g’jJ#¹[@´…ꊵ‡öÏi§ÐD 4÷Ó…i4’0(q àga¤4®»ßø~¤ú÷~á*¨ÇdÍ€ÀŸ,…íμ©¸5ÁÒÔ_"(º¯ ‰6®ÀC™ƒ¦eµˆœâLª‚šÜC׊€ x€)q£¢æA‰D2a" è<¦Q †Î"MÀBQAÒcÉ8ÀYH"2ÌÅR˜Á9 ¦!¥É ´i ú¹&ÿû²dçù’eP£Ëp "½‘B ë-È4€DÓhÙÀÂHte6,‹Êë·’Ô¶†^ÈËKÕzÜ j¶&ÙvÍN½.í¨Tf‚€ÛXfFþÓô¶\'ùÛƒ¥ò©T‰õ}ÙÍ$¾v•¬áeÙteN étªŸÅcº<¡©^ªFd5lÊh9;nµZ¹SKy~fõŠ'ëVÉÕL7 ¡‰ªÓYÞ0Aã®õ¡Ö„9‹!‹À‰`Q‡@‘ `Ð*`ˆ^aT8.+qqˆ›I™ Qš„‘£X‚)Œ$§™!”‹˜È(FQŽs!ð!œäA°7›‚ÑšƒO THl0Mœ…ÏÌÕ˜à ©ÈÌ›Í,´ÔŒÌÝT( gƒæ\K ·ÉÀ Yæ:”ä¡),a ªÀ+SŠõB.9° £?‚¨ÇyÌ&dÌ•N€"À¶‰v ;QÕ°”Eñ¹0B'-›:E3j7ùi!³ìÿPJ"Ž3Ù‹C÷£¬åÉKÙÞIa—f34àÕ‘Ã-¶OeÈo)Sc€`V™?× ]ì3I‰¿2j[°šv‹8ôÁRÈ!á…†rgZE¦µé{#”«zՃߙ c­…Éi-åÓ³BäèQ| \ƒc†öŸs>‚“!HƒP(6e(°è˜!‚€°dp"Œf`° pdÀy††v;˜FX29¸Ù(Ba³°0ŒcQHò”ÆB° `À¤ÃE›Í/+ĉ#K3$… ©(,*3ñl@x2Q(Äf³!ŒR~3éÔda` 8pÝÿû²dêú=dÌ‹»Ãv #¹}6ó È4€¤Pè!¤¿…Ä‚ZgÀhg/‡Õ|m霤`°’$,ªKYLµiȵ\ã¶ßÖÈØáøƹ-·jf>ã5h£·3mtJ‡‘Ñ‚¥ËžEòËÜ–J'(áˆ>Ý öSñy,¢3f´Ô®ÏÏç-Õ© å6¯Y©ÿÿW kHµ~Ží{\üg(vf]ùDR«¶ëK*ÓJ7fèPM gŒ ‚5L$LûƒÌ¢LLB¾CÌ  1! ŒJŒA óÁ¢×މ˜x¸˜ÆŠ…CL¼¼íÒÍ;tÑiLˆÉ M4˜y<|`¦††¢hr&æÂ´hЦ.c¢-t\„Ž-¡ÔÔŒ ß’@+&ØBmdàB02‘@C!”»O¢ÚG¶œší ÕhmÜ¡`bC\0‡ÌBˆiÌ:Pá.úÀn¶b¤Úˤ³lH‘£7>„ŽHR!(‘ÚM@â„E4Õ±nÈ¡E* ÃÀÍ/QàyZIÚ ÅµN¯ˆÊàÆÛ4bW³~6¾?ÿÿå›Rù|Î.²¶ÌªoðÅKµaì33)œ 7LÕ=•O G ÌGM×0LB€˜„ùµcÁ‘‚¡›†Ä)ƒƒñ‘!…âyŽàAP01áÌÃÀ°(ùL @f04Ç(s ,G¤åbx8¦bôI’€fH,„æA*˜¸¤bçQ°&À5šð´g°Ñ•ãÅ!s‚ ˆ802LÄG£ ±…&à Ü bâ€TØbI„Ái¨ %üeL­TD%0,¢]³[Ãÿû²dÞŽøzb΋»{t 'Q2ó À4€”Çe´Z.¨Óƒ’‹Àâ.%“Ø‚3“15¦• íò‡š´® ¦‡¨²€à& ÎÈ”XT°†¾ÖXÓç8âÒTy^ôŸg Á!Õs&e’H„zv—}¸ô¦;.hœ8õ¼-yzûï½Òåÿÿ÷$5~äª3V™‡;›¿Io XÄä?ñNj¦7¨'ÿ O¦`âÂQÄåÐXÁ'Hؤ¬Ã ¸Ø!$ÀÁŒÝRtÁ<Å1(À(L‚c!cc'1ÀÉH4¥CM .fñçò *td&R baå å 0T#-,0bÓÔe7 #%0±ƒ …Ž1“F ˜ØàÊA™™ù©‡iFi „ @Ó{Þò.Þ°ævå2•+;Ö`‰Lűe ¬›ÊèP·gMú–:æ§tÊtbCv­ªÚâ¬FFMÒÛ¬ÕÛa1U…Z°^ˆèêç÷ʽÜ~²å‰â¦+2¡Ño<É!â–[’ÿÿáöó½Òò½zý&°©Q±ÀŽˆ?Ñâ~¯›b^Ž7²Û+§Ô@;¦ãA JÌú0¥Ðáà‘ÐÈ€ó±Ì6F, EŒƒ ac0à@ÂqT ’„! 0³~° ¬ñ@2"B¡AG„Aõ³€ˆG˜xAZ-ðP¡„‚ ½ÕÓòÉà 0À̈Ó(@Ë T,3 j8ÓèûÆVªõ_°2·*ÍrŠ¡mqTÃè­3L¤Rz³ÄOÀM0¢,1XÍã”™£Ì7ŸŠwÅÁ^AÄÊD€ÿû²dá ø}cN»{p "Å@niíÈ4€égdF½}*Ž;ÅS·D,#Çš©ª)¿ A!ÖR!&9vJNd§D%°@Ä ±* H„QpÎ?¯z— t¥Oä™OÒÈt˜Çi|Q6@°³"î[y”<–(Œ£¥š0cp0@/³0д1:xc4PÔ0 -0 ;ð *˜:é‚0˜; ±0}˜?‚ € !2 ˜`¬`ÀA˜àù‡HFFSÚdʼnÖIÆ"ì\ÔD(43 ÄÀ#Ǫ́„9ˆ×ƒ- ÌnQ,A†B€Uàgü a1€´0ìc³cäË…Cˆ•Âr°LÓ© åP ¸W#.TÅð{›¤  Zyî9–©Ó™ÔåSr9‚\¡@1ÅxCÌ“4Äœ[]Bq€– F¼Œƒ¤êí½[±PÓµñ"LèqÐ0C þ/¢vT…¬E$j$5Bp!Áh‚x›Q¼®v’SÓ? PGæŽ4J5T\ŽsØÈP†—Ðà áxÓÂÀy³œ(iü§zARéåRžÇö§¨r øÃâdÑQ@Ì^ÀËØÇTÄ`HÌ#Á0`Â!ñn’ Ž‚aÁ} ä .Å¥‰i8@Á’k›Ì hYž–FL,x€X2†iâ†ÖöQV(.Œâ 䀫—u7̤¶&báD6Y3PC=H@*k¯çF‚uüi,9¤éþ¥aP°”c…ªÇnX…_!Úªxòðÿû²dõŒú8cËÜ{r !y6NííÀ4€ìo"¡g›©µGPåcn‚ñ81ö‰¹™6EQõHN™¡AXkfˆÀŸ%…#@΢„3ŽQî‡çD¥_>ßïÿÿõÄ-b#ü'Ìá¸mã]\p¤L–ózDš¼º*L¸ÙòË–Õ{о0± ¤¶2só`I2va¦0T#Cá§0H ã `¥0J CP"0aS€Q03 ƒ™dk™pb`ɞŦÉ›+f|œq‹ƒÍŒ 3¡ˆÅaã ‘B¡³‘Œ&Ž4"äÞãPà b`3A±18Ç¡3À˜ˆ˜cӡЦЙµk³xXÎia–¡ld8x‚ë’/_K‰- ü†´ä…‘+኉H¶Ðù7&€ÉÐ/ .üÃ2U1[VæÖê &w·Ü˜” ž¬L¤ŒezÊ”Êa×g7!¹?kÆB¦Î ÕDÆh¼))TuL_‡3S=:S)ÙVˆŒí@iø±Qjµ6I¶75üýÿïæ¡ÈÄì;+¥ &ZK4F榀Vä˜hšÕX‹ôÉ’FëJÜ aM­Î¢ÁÀ¸‰ŒÒ%ëák@³Ñg€Å…Påy†äÒé·­ÍPhòA5Ð’»YsÂø=îëíFþÊ¥xÌyû‹ymU©™a?{$±ó‹¬^jíŠÇpMjÙoqlªh¨1Ca„Ë\Þz7>Bÿû²dóŒúecÉÜÃp e‰<~oJ°p‘¥¢L_l¾*¹_zÀ¥”úáé`/KÈ÷ª[r¹Å80•ǪµaÌþ8‘Å9D¬£Éâ%rrè’e+Â䢀u—Š&×ÏKê­“Ú fSežùÏHO`Œ™åÆ™cê,ßöz"asmÀʽC˜O i˜Y`/˜ `a˜€"^@ ˜# €˜¬`±'`0ƒ¹§‹˜hÖnáÙˆ ær™r4btq™LæMH˜°h"Y‚ˆF1™àÚÉ›ÌTB,9!DîТª 41è©c¬¹}erÜ\& –ð´BOad50ø0xH<>"µ56 D!MRâ  On*ŸM‰ PH]Àƒ¯#îh†v¡Ð"ª:ÍÖ —Ì#óšÈ]…Ì ’°Ãÿû²dÿŒù`Æ“û{p ,1¡ Oó È4€V–왫—©¯‰¥<\¡$¶Áõ.s¼ÂˆÂ<c&{+d’¸Ä^q—HË,[µ8nÊ0×`¥n‚›4b! ŠÝ̈ºªÐ]eŸ D"Lˆ¥McCVÇ\.…[©PÛJ).î­4k Ø}Ìóýã–õãÛÿc;[í]þ°«Ä䃥…Õ0W²1åÏr1®de@ÁÅ@‰Df šÄda¹CŠÓ Žj¬1Ó Ä`¤ò)¼êVäÒÉOF¿ËÞÁS¬089NucT”¿ÑÈ›)‡_Ùˆƒ¤¤Qr€Ïó9#$ñè%Ãôø9â§ r_éÆç¦„8ÈZ€ú|¶°n+d5NÜk‡ÇÜtu TÙÿ˸}¦$8¬. (*T¬C!e»‡*½DÝÏCü¾¥-fù!Bš±šµTÿøðšU6Ü º®tàŠdÿíÒÁ\õÀ`Á‚<Â…:üÄÚ^(Ó&7Àz*üÁ¼È< Àì ÜÀh@À&pÀ=ÌÁÁnôÀ´ÁŸpIÛÄÌ6YMôæÕÌШÒÌîÃŒT*827#e5Ó#¢4rs‹H5zcž 0ƒÄ9¨ñÏÆŠil㉼HhB …3f ¦3K–ÃmŒ6ÖÓ’ä7¥¡Œœ+“0¹¡çr@‹œoÿû²dä øÚVDƒü{r $‰YOííÈ4€E+ß>7‘1*;.óùà¨BÐõ£¼¿è$/KÛÄüÓ"!@›Á ¡`$,Ò;Ò(AH¡CdˆAYHPßdi?Îj,Ü~N\ÇrQŸ-D]e»0cV !8V.Ö;”hG³ºïB›+S+±‡ÕŒÐY †Œ?׋RÕLm¡ NûŒq°òÌ @ªÌð$L@4LÀ¨ÌL&P#ŒmÌ !›à`ò©…‹&Æ7”&Jšy 9< `"ØP h€y’Æ&p"fáƒPtr™b Hb-È‚¨¼Ü/ÆbíIÛnje0†&è(b€·AÙX¢Z2Ú‡(‚Ì%ôMå½—P 1_ˆÒ³Æa Ûf_,ák·±Ú–9|É~Ú+†½žˆ» _PC5vב¬Jbõå3‡”Ò±ƒ¦[–@ÉW¾pŸæ–¾ku[ã8!„‚® â <‰ë5;tùËÒËà(jaÝvæò¼”¯\;˼­®óõ­÷,uÝïYû¼·©—´ûš¥íýD À~¨Æß!ôÃ)hÝcàÅ© 8ÁÔôÆ[PÀš¸ q"I€|ùj‰Ñ—‰GÌHY*‰š …®&*ˆÆ<ŒŠ•€Ä H HbñxŒÜ,uq…“ÄÏò‚šw£‚C¹LebùÊ jª¯0§l™FJƒú+q¦¯4œäD'RaV ¡1b3¦Öÿû²dëŽùìaC‹üÃv !5UOñëÀ4€ÐæSÙŽ+Åæ˜Î{ª’;9Ò]ájdI÷U±i4Ëkѳ†5ÆLס­¿íŬ-EÖ]j$ DòË4•wn±¨eö¿q˜ÏÊÛ;\·DàW‘f1. ó(‚ú\®·ã$¶L¢ì<,¹¼²«§øý½Õá§¹-'œýcž;ÿË=áø5ÿëœýa¯Þµ–ïÑ=nªáÕU1É(3f‡3¨|ãæä9ä<3;aÚ214càƒ0°Àn0å#À“8±ŒÜ°!'BfA‰ƒŠve†yŽÎGF¦ƒ€Æ' Ì 2h@ÁESPÈä£Lx2JàÑ!±pgØõ¸aÜráêU·i£ )Û^éÕ›vO7ò÷úbô¥Ä~_Z³Ž–+Åi ßeò—*ý…ˆ±EüþÊeЈ«Bؕˤñ¹3øÃ§Àž™k‹¢JX$ÃÐ;”ûP,Ò¾wæ^ïÊ¿æW¸Ú?4/œÏÝØ´"•ìÖ\‰ûÿ'ÂäZ†[–r·. hyêfWƳi©åÖlI™üÒ¶ ŽFuukÿ>©€¤0Å8±ÎÞìå˜ežúlÑx`Œ©Çl ÌpØÁ|LÀ`Á(-ÌÀé ÌÖÌÂs$B¦bF€.f"Ɇ"6  ¨€ƒ(9‡ˆP >`á†) ]:ÔÁ”Mæ©T¸Œ5–¹D <ì˜øÈ…‡AÌ@ Ì…H‚Ì¢{ZQÂê˜À…ËeJ´A÷Ah™° Â)Z\’ëP ¯/Lˆ¤±Øÿû²dá ø¢UDƒÜÂò &ÕWOoKÈ4€2€D¯ukz§[…¿—`¹I ´ÖÈmðaMŠ*̃—±°ˆB …ƒÌhÀ¼a @áJ ÌäÎõ;Œð|@ëO¿5Xéàfæ_‡ ªH*•Cõ“FäͪY6Ⱦòö¶, ž?@T=s<@`Sƒþ<ä T+§”âZÊc¹Ù×°0\*ƒH£,7 Sb’±02ó 0Æ0!3 à30E#p !P…0£p<` €–˜! h A` °0xÖ ²xÕ D  U…A‰€ :³Ì$!“ œÔÀAÈ‹ƒÊ ,ÑS(ª Uµ>"FF2`£&*. „`P$‚/Ùq]Âù$ºt—…AR¹úEU+{œ¡.»(ÓzÛ«-tž)ÒÖb¯òƒ5y;‹CqÛ!½uÚ‰çm³Ò¿0dµþTëNYí–ˆó¤*›ˆ”•ŒÍƒÎMN?ÒõøÏ x&q¸Ä)®µ†vû±5óͲw–ôÝ.r D&SÙÅ£N»ë^U;$u!i|_)`óù\PƒX] þ8Da:Ç€ó¨jFfc>`ü†À^á@]0` ˜#ƒ)ƒ€_D‚Ñ‚€‹q“ãÀà1æ3¤S;,8‹ãÈZ1°PhÀ44»)„‚ ˜ šOä˜É1"%•@Ɔ\eÞª–׺c L0ÔÅFLLx @h=ÊcaDõ¼EödMÚq›pR@D: @/uS^†¥4ÿû²dãùVEƒÛÃp &Q•o-À4€r@»[«)R0îmag@Qg…Ñ”¶:K.0™ca¯óPìEP– "Fü­ƒaáK:j~lDkô¬O X7Ì™õP,rÛ½ÿGåKÕ¾ÑUmTÊ\ªod™CÚ—JìQ2f ÷@ïVÁr]š®u¦Þíþ¿_žáýßþ÷ûïw­aÌ?•×Í€uÄrõYƒz³ó‘3TŠS84œ! ŒBÀ81(T Æ#F¢@PL§ÁHH™D˜g>”~aR¨ i?Ûƒ"c龑†<¨é’Vs¯FO×R,Ý_·Äd‚d š3€KÐe†<ïÉ\ ¡Ñ¡ÄÛ²qÖI¸ß;R}`Ê‘’P!Ìòœ¼å"ù€¾°“çìÇ#¹\S!‹-çyÒwÅvÛÌij†GéÄè[À‚^Qjƒà§£äðâ+”f[1ÐrÇ]ÁR®Ö3€†rq^B©& †98!e#rrW‘—4©¤xZWÆ7ûûÏÎï÷Lj&ñDå©4¥¡cž `×üÐP¿Ì[Ä Á°1D ¾¦`PCc°L0 3àU0hÑK&€€8#aˆ©‚Õ‰™âƒùϪÓ ©DÌhÁÀÆ:‘rKxÓË fƒ‹ ‚2VÕ7g%¹ƒ†‡ D`ÉÂO1QC óA”¨F¶p‹~™HÐaBIþP%LRìÍS<®ÕØ´×% ÚËüå/ IÅ@ŸKœM)ËD¡åÿû²dàŒø`^Eº{p '=½/k À4€—=»ßgÌ4Pœ`Ÿoúa³•ÌÄ›Êîòœ£Ëªú¼ö`ö”ÿµx1¢,n¯6–ý¦"ŒÉgãLoÐ+cC‰d…±æÖå.‹-@ 55 œ>”V©èÔ­ù½-Õ¼þ›tú¤”Ü¿¬õÎZµ[)Ê÷þžsÓsíîÝÊ+÷yPw/f<ž>™0,n4,’0eIàÂ"ÌFCÔ)Wɸ$¨f¥*ÕV…´‡$Õh*_ÖÛÊW4ÂdÅG¦%}r²¶D¼ƒH‚áåÜí·Õ̇[®ûÛ?J{#l-- Vݲx9„ÕpZNpáR©OÅ2ÒÁH¥$i€ é0#X«&2œÇóyF*Ĉ åü7Ä&mjÑœ\—€ÙmIŽÀèú&ˆ$¡i(ýi°">TKiž½€h º3†à’PÒ6V;nb›¸Ùœ­bžåé=ÚڣʥìUß0•ÞÆoU2«Ù³bÞÿÛ;åMãg¼  IMbcLc(ƒñ€T F ¢–ÔI´BarËØ­Nò(³DTwÑÕyŒÙ­1ØJ–y8Ï♲ÔW ’þÀhô½Ë*š!…QÖBÆK4â0Ù DB£`EôeÚ©B ÊÀ…ì͸¼‘ŽË’!‘*8eа¶XŸ0påI(JWØSúÖÖ\¹”0-š4–D–˵Øuš›3V6l«á† ¸¬b•n> >bÿû²dã ø¸pA«¯Ãp &õå5Ü4‚€kIÎÁ¢©º­PýBRpj¯wÕãCÒWÊlŠ ©º'±4ÅQPjŠ1D„T‘ÂQ5–^™à"™YòÙ^St &µˆ _ƒM»Žé§¨ªG²·~½š£ðÝû©\Á*¡ ,:+"_°Æº88ª=à8Í=±+Ѓ¦úѨ8ˆÉ–΂Ófl¹šú œ_㺠)̪J…(Ë,MÉá©«©õOÊ‘˜ñrªþŒCóô°©»ÜŸ·d]âº*Ì´™ë¼Áš ëq؃+‚`(̳ÿÿÿÿÿÿÿÿÿÿÿÿÿ,/ÐÿÿÿÿÿÿÿÿÿÿÿÿÀ¬¶ÚAΉlur{‡@89.tÀž5ì€ID!ŒX€€Oº€¶©¤ZcG€ZPþg-¢“ªyâtu$A²Éz!!,+£Il|†¥ODÔ\L˜…øBƒT„©”QÓ¨kÞ R4þ.J+½Ô%uä9]; ÿû²dã ³„Â{ À±Ôô=§€4ƒ€m'.L*Ù˜™¡—Òrä¥CYhú4ÙzõcJdòÍw´bC¦O!Ê(Ùzõí­ óèÙz­ë]bæjãÁ{¸·§2Š; ¶n¥J™QOO˜ŸO 4\ ½£çÒ§M& .­l×p^½{¨Iä:,'ÛƒŒJè°Ÿ>Þk]k[yzô¨¬º LAME3.97ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÿû²dàði ¤ 4€ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªLAME3.97ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÿû²dÿði ¤ 4€ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªLAME3.97ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÿû²dÿði ¤ 4€ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªLAME3.97ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªÿû²dÿði ¤ 4€ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªLAME3.97ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªTAGobama962009www.dvdvideosoft.comfile-5.46/tests/cmd1.result000664 023540 023540 00000000056 14320604770 017363 0ustar00christoschristos000000 000000 a /usr/bin/cmd1 script, ASCII text executable file-5.46/tests/cmd1.testfile000664 023540 023540 00000000021 14320604770 017654 0ustar00christoschristos000000 000000 #! /usr/bin/cmd1 file-5.46/tests/cmd2.result000664 023540 023540 00000000056 14320604770 017364 0ustar00christoschristos000000 000000 a /usr/bin/cmd2 script, ASCII text executable file-5.46/tests/cmd2.testfile000664 023540 023540 00000000020 14320604770 017654 0ustar00christoschristos000000 000000 #!/usr/bin/cmd2 file-5.46/tests/cmd3.result000664 023540 023540 00000000060 14320604770 017360 0ustar00christoschristos000000 000000 a /usr/bin/cmd3 script executable (binary data) file-5.46/tests/cmd3.testfile000664 023540 023540 00000000032 14320604770 017660 0ustar00christoschristos000000 000000 #!/usr/bin/cmd3  file-5.46/tests/cmd4.result000664 023540 023540 00000000060 14320604770 017361 0ustar00christoschristos000000 000000 a /usr/bin/cmd4 script executable (binary data) file-5.46/tests/cmd4.testfile000664 023540 023540 00000000033 14320604770 017662 0ustar00christoschristos000000 000000 #! /usr/bin/cmd4  file-5.46/tests/CVE-2014-1943.result000664 023540 023540 00000000036 14325247002 020130 0ustar00christoschristos000000 000000 Apple Driver Map, blocksize 0 file-5.46/tests/CVE-2014-1943.testfile000664 023540 023540 00000000005 14015050417 020423 0ustar00christoschristos000000 000000 ERfile-5.46/tests/dsd64-dff.result000664 023540 023540 00000000141 14325247002 020207 0ustar00christoschristos000000 000000 DSDIFF audio bitstream data, 1 bit, mono, "DSD 64" 2822400 Hz, no compression, ID3 version 2.0.0 file-5.46/tests/dsd64-dff.testfile000664 023540 023540 00000043002 14302627054 020517 0ustar00christoschristos000000 000000 FRM8EöDSD FVERPROPFSND FS +CHNLC CMPRDSD not compressedDSD Dði–––f™i™™Y¦¥šYe¦™™¥i™f¥še™™¦f™fff™¦iie¦i©šY™šZ©™šifš™ªff¦¦fšª™™©¦¬¦ifª²šZªª¦jʪ¥ª²Ê©ª›-+)šÌ³+)²Ì̪Ë33+-3L̳5LÓ5SKSUY-MUU¥55VfeU”Ùš–™•Uª©ª¥U›2ʪU[URªYªÕUT–ZÙ¥UI§U©•2ÕYfeYUZ©––jfªª™©ÌÌ©›3KS+--USMMeVTÖZYffffšjÊ©šk4̬ª«6e*ËUVY“SUjªZUZjÊ©«)ª­,ÌÒÌ´Õ5TÚUTͦª¥U•ªÌ¦š«*›SR³2µ5YTµU–eVeš–¥ª¦k*ª²¬«33RÔµ3YdÔÖfU™ZY¦š¦šk*ªl­+,«M-3TÕ55UYVUM¦¥™Y–šªj¥©«+)ª³+,¬²ÒÌÔÔ³LÓYc3MeeUeMY™iVU–šY–šZf™©¦š©ššk*™š¬ªšj¬Ê™ªlÒªš¦Ì¬ª™²ÌªÉjª­4¥šk,¬ªªU«K*¥™š¬ª¦Vf©²™Ueªf¥YVUU¦iLÓUU™L³4ÔÓR̬ªËK*©j¬ª–f¦Ze•™UVMMU“*̵,²ªª¦jª¦YU–VUV2³5U*™¬³)•™ii•SMV2Ê̬ªª©Y™f•”´Ó53,¦š©ªiU5YULªlÔªe™•™YM2Ó,¬©™©¥eURÌÍLªifšY•TÊËM*ªe–YYV,ª³,©fe•YL´Ë*ÊV–™VRÌ̬ªªeYVU33,ªfi™™KM,ʲ©ZYeUK,ÊÊ™¦fUS-M2Éeš™eU,Ê̬–šVYLÓS,ª–f¦iKL³LʪYZe•S32²ÊijY–M,Õ4ªªffšVRÔÒÔ«*Z™ªVSS5SJ²™ª¦©UY3U5bª–k2²SU9™•*Ë32ʪ¦Uª¦YU36U’ªÊ²³*šZ¦–™YeMYY,ÒÓLÓ*²ª¦Ì«Yiª±VMY¦eeLÕUfU+4ÕSU3,ÌÌÍM2²¬Í-,¬Ì¬¬Ì²ÒË,¬Ì´Ò³JÌÓ5KRÓ4Õ•,ÕeSU™U•eZf™™©©¦¦Ó*¦­4´ËTÔÕVU•UjÊ¥V§5T©ªÕ™U5VjZšj¬Ê³34Ö™UUj³*ªª´Ö™•5f©µ3*­5šYe©«,Í-UU©jjªÓURÕZÊÉš³VU•V¬«+4Öe™š›SMUUZË)­TÖ™š¦²ÔÖfVj­3SYši«LÓf––¬´ÕUZÊ«&µª¦j¦ÍUZªf¬ÔÙše«LÕUj«)­V™šª¬ÕYeª´ÌÕY©«LÍUiË,¬Íšl²Ê«iª²©­Y¦šª­5™fª«MU¥¥¬ÍMe™š³SUUk2«-Uj¬¦kVe™¦«M5Ujʦ¬Ù™™š›3eeVf³3M5™¦ªªÕTÖ™¦ªËMUe™™­3LÓe¦šj³LÔÕ¥–¦¬´­3e–Zfª²ÓKMVff™ª¬´´ÌÖe•Yªk*ʪÕSVTÕi©¦¦ªª¬ÕJÊÓY™Y3V›*Y–ªª«,²¦´ÔÍ4³KMe”­TÙiSM–VVSVfee3f™•UU•M™•TÍUUU’Ë-MU2«*«4ʦfjªªUUY¥•,ÌÕS,©©¬ª¥”ÖZU32³,ª¦™fYd³S,Ìšf•™”ÍL¬ª©–U™Rʲ¬eZYS,²ªY™YTª¦ª©e+L¬¦iUc*ª¦ªT¬¦ÌÉ”¬´²¦•’Êʪ™K4¬ªUSLÊ©U3MJ¥R¬ÔÌ•,¬Êª•,©²ªRf²²T²«%UU,¦TÓLÉ•T«&¦d«&e”ÌÊ¥3,ʪR²¦š¤Ê©YeLª•4ËJ–R¬¦™Y*¥e”¬ªURʦ™S)i™RÊ¥•L©ª•R©–VU*e53L©M,«%eK*¦TÌ´ªTʪ¬ªRUj¬¥)Y™eUFUUeJ¥”Íe*eMM2²”µKJ¦eK3+%US,«%YK,Ê©XÍ4Ë&U“-M*•eS52ªeVTÓJ©¥¥dÒÌʪeM¥Xɦª²UUU3J©¬ªdÕMiJʦ›*ªTÍU™RªÊ«*ªi™fUeU5UU%­M4²YšÊ²–™–šff–YVY•fVYUUYªTÔæše••Yšª•™jš«*©ªªÓXÉ«5™•MVe™ªªª«)µVe-5jÊfªªÕU-Ujj©¬«S6Y¥™ª³5USjj«-3UZªªkU6¦š¦µ6feª¬ÙefjªÚ™ej­UjšªmZfª­Tæš«6e¦›Mfjk3Zi­LÖj«YUj­Uf²¬ÍªÒÔÕ«2Öf¬Íeªmif«MY³3Uk4ͦ­5fjÕ–iµfi­M¬ÊµZ³5¦jÕVªÕ–šªë,³Mjµ™©¬Õª´Ö©ªÖª­5ZÍUf­5Z­iUª¶šÒÍVªÚffÕf«MYª«k,ª¶ªÕUª›Nk53i«5¦ª­ZÊ«6¦ÔÕfª¶iª­Uª³Ue›M¦j«Sf´µUj­5–jÍUZmSTÚÌÍfik5f™¬ÍUj­,Íj²³56ª¬ÕMfšÍTÕjª«U•e›4ÕTÙªm5-Y•ªÊ´ÓZVf¬­-MY–™ªÌ̳UZf™©ª­ULÕ5VšÊ•jªÕ4´³5UZ••VVªk*eš«-*«&ªÍM+)ªÓUJ¥¬Ô̲©©´²ªšeªªfUfVeS4Õ5K)ªªÊ™Ue•UK*Ë+%™VUY*ʲ¦ee”³2²i•eLÌÊe©ULʪ–ec*¦ª™-*¬™UTª¦–U*ª•eRª–SLÊ™“2ª¥U+&YUIVUM++&©™K%M3J©2¦i™)eY,–T³&RʪU*iUR“52ÆJ¦eUFTʱ”ªªRªYU)RÒ©dªe-*d²eTÊe2¥d¬eJÉ“*©,ª¢É™UJRš¦¥)T©™•RT–if*T©™UR’i¦UJ‹&jUJJ¬¥Y)”¬eU*¥)••RŒªÉ”²eL¦UJ¦JÉ¥2ªLÊ™S*¤ª™¦J¤Ê²ªR¥eK2S*ÉUR”ÕLÉRši™J¥2̪”©©–SM5Re2ʪSJÊULʪS+*e•JY–U*ªTÓ,ª¥Jª«)SJª¥•”²¦–eRË&–eU*²™feRª²ª•SYK,¦fi–TÌ«+2™iYYM3T´«¦k*VUVMUUeJkM4Í,¦›LË)šÊ̪šm2Êɪ¬ÕTªª®i•L³Vj¦šYšªµLÍ,ÕVjª–VµU•4ÕZ«T²ªÖ¦šª­-5j©ª­TÚ™ª«e–UªÕY–Z§Ušªj³fjÒÌÙ¦µTÖ¬³Mª³M6ª¶if›Uª­•U[Zj«3U³ifšµª­™VªÛ-3N6ª«Sª¹¬š­lÕjm5Z®k,Í[Uš­U]Vª«Z«jk5¦µZÍfj¶ËMfÕZ³V³UªÖœÓjµVÕZ²Õ«ZªÕ«5ZµªÕV«j­fkV³NkUªÕj¶©´æÕš«UÕV­U[Z²Õ–Óª¹ª³6­jÍU]VªÕ[Uª³Vµ:­VªÍ§5¦ÓZ«UmešµVµfª¶ªµi­U­YZmVµ•Z­Z­6¦µYª®´³Mjµ§-KfªêªµMšÍjª­™ª«l«-5ªÕfYªÚ¬š³V´Ó5fªÙ––ª¹©ª¬­Z«2ÒÖš¬ÓTÚªªÕYVfÌÕ5U¦«2ÍMfššlÓ5Mi™iª³MJÓUšY¦f«*ª¬Õ’¬ÔÕ™YTÕ™¥šVV–™i¥¥fY–™YUeYMTÙRÊÍ*̪jš–•U”ÓSJ©ª™¥YL´´¦šeUU,–©©e*ÊZªe,«e•LªY•JÌ™”Ó*ªK32©,²ªe3)–T²•“2ª‹*©•Š¥4´ªU&YU&–K&S,¥TÉTÒ¦T¦YJfRªU*“LÉJªU*U2©J–RÆR²UJJʪJRÌ¥T¨ª™2ÊR¥*iU*IUS*R’Ê™U$ªSJ©*T©U,’¥L™U%Q”¬¥2TªŒ™d©TUI•’”ªT¥5I’”É™2™*RY”ÉT”ªeU–RÊ“%JÆ2d̤ÊTÉ•&Lª’¥2ªRe*ªIY*¥Ie1•*Y)eJŒ¦™J”ª”É™R¤¬d̦T¥RiV1’²UReŒ™U)SJªJdÍ2É)UTª™L“L¬•R©LÌ¥TªYLª¥,iZRª“*²–S)eTÊÉ’²ªªL¦©¦T©i–M+%•U,ªe•U)¦š•S*šª©KL³2™–eURªÌÊ•™Y•UL¬´Ìª¦iªf¦eUVYYUMVTµeUMU•UMUª©KUªÔ©Yª­UUK+V¦Êª•jÙ©Y3UÍ”Ë4ÕlÊ̬Õj²¬³5šÌ̵UkMUeU­ª•™ªÚ¬ÊÌÖ›UfšªÖ¬´Õ¦«ZÊ´¶jÖj²µ:¶jšÍjZ«U[4Õ­VÍ56µj­©ªÎmU«Ušµ[UkMVµZÙ«+6Õ¬Ùš«UµUjÖͦ«fÕªµmVÓ5­lÖj¶­U­«UšÕ´êµ¬ÕjÛU[eªÖµªÙ­V­§V³jµZÖÖšs«j­kYl×6«UµZÕm[5šÕsm5ªÚ«kV­UÕkV­ZÕªÚµW9­Y­jÖµU«mUui­V¶¶fjºæ«NmV­¬Ók6­Z³ZÍjÚªµuVµ™ªÛVš­[U«5jµ­™f­mVÊÓVµÍMV­f³jÊÓmUjÖZjÕÍ¥fkV¶e™›ZÍ5i­UjÍVª¶VšµZmMVi³iªmUeªµi¦ªµZªªµVª²­5j¦Ôµ4æ³+,µffª¬²ÍU–©jšªÕ’Í5ff¦Zfª«3*ª­U2²Ó5MLÒÍ2ÓRÌË*›3*¦Zi™iUS4µ2²ff–Uc*ʦª¥J²Ë2¥UJj¬Ê”–j²¥R¦šU’ª¥c2ªVT¦ed¬¥’ÊiV2UT²¥T™SSJL©SU*T¦SJÉŒ•U)•JeR“,ªb¥J©UI+)S*L•’©L¤Ì•R’©¥1’UT™,•&L©L™)UETUJR²TU%T©T¢¨ª©JT–IRªRT™UJeJ”R™Lª‰)M*¤¢”Ë)I)Lª”J•TRYJT¢©JÆ)*T©2”¥*L¤ÉT¢©J¥%*d¥JTdÊS$©RXÉJ¨¨±”ªR’¥I“*‘J©RS&L”¥,”ª¢”•S1RJ•JeŠŠLª¥EJU*•#,•J”•K)JRÊ“J¥’UIXÉU)U%JÉR©J¥U%*©U%L¦T²T¦•R˜Ê¥UQRÉ–dªJ²YUITªšeJ•2ªšÄ©,ÕS2Jšj¥U)UUS*•R«,ª’©¬Ê–L²Ë%–e32²©e–SM2̦f¦ZYTÌÔÔÔª¬ªjÒÉ™ššÊÆVš«*ª¦k33J­4ÕYU•išªÓ++6i™ªj´ÓV–j³-5Vª³UKVµM5©©­–ª›UYªÓZj­VšÌÕmLÙ¦ÕVµTÛ3Y«ViµUµVª®k5VµZÍV[VµY«U[k,Õkª´Új¶³3[V¶š«VÖÕY›ZÚ­V«[ZmZÕ[j­§6ÍkN­[Z›jÖ­lÚ«ZÚÖ«Uv­jÚ¬ææÖ«ZÖ´êÚÙµf¶¶«6ÍZëj³›Zº®­ZÕnµZÖµuZÚµ«mZµ«k[Z³Z·kUªÖÖÕ´ëVÖª×tÖ«[Z·9ªÕ¶¶­iµ­ksY›[[Z­VÚ¶µVÖµ­U¶µkU­¬ÚÕm©Õ­lÖ­jÚÕ[Yµ[¦Ó[U­³UªÛV«V­­Uk[UmUkZ¶²ÕZºÕ¦µ6Õ³6lÕ«UÍZ§9ÍZªÚª¹³Yj­ªÕf«:sV™³Z­Uš«ZÌÌÖ­Yi«5ª«Mª¦ÍšjÓ5š²ÓU™³TÖZj­Uifj­NY•–›5MUdµªÊʲkSVUSYfe™™ª¦Zj¦ªiª™jZ™i••MVUTi­4ª¥-i•4²š–™•Lª²e•R̦e”Ì©–•J¦•UReM5,U*¥–dÉR²ªY)¦RÉU,™U%U*¤ÊfTªJ•e*e)RªTÊe%R©U%2™R”©“*Š¥*Y*Š¥)™*RRʤ¤¦UQI,©R¥©”©RRR²b¤•Ic%ERT™)”¢¤©’•)*FL©Š*JdÉ2J””©2L¤¥ªX¤¢˜±’T¨¢©2’£$¥b¢¢’©TFJ¤¥)I)U$¤¥%TŒb¥ER’Ѝ¥IIR•$¤©TRR©))FR©)$¥RÈ¥"©J©"¤¦R¤•FJ¨¤©)U$©**£%JŠJ¦JŠ’¥,T”¥Š’¥*T¤–J•IJR¥*©&*J™U)ª¥R””¦¦JŠ¥)eR¤•,¥T¨©’Ê¥*TeUJ”¦RªY*•*eRfR©e*e,¦UJ’´¬•RUULªŒªjVRÆSML©U+)©©RšfZeL¦™™eLÊ«&fUd³MJª©–¦™Y•M5U•S*uYe*Ë-eeTÓUji¥¥¦´ÌÓ3UU«*š­5–šf«5Y™ªªÙ™šªÖšj­SjµSfkUU­U¦iÕkTæfµVÕ¦ZÓk5¦³U­Z«6«UkZ«YfÚÍjmYÕ[fjÙ­WZjÕmlÖjÖÖk6««Z«kU­mVÖfÖ¶µª¶«mkU«mVÖµZëVÍjÛZºµjººÙͪÚÖ·Um›U×Z­­ZëZÖµmµœæÚÕºµµlÚÝW[U]µ®ªëgVÖÖÙµ]k®«f¶ÙÚÖµµ«ZîµZÕ¶ÚºÕmµ[mªê×VÖ¶ÍmuµšÚÖÛ[6«]µ­kZ®ÚÖÍ­]]]VÚ³­nµšµÖÚ³«kk6¶µs«Z¶Ù¬ëlÚͳmVÛ6ªê»Vµ[Z­Õ«V¶«kUµ­ZͪëZ«jÕ´ëV­šÓªëY¦Õµ¦Õmfªê¶mMlÖ«kKU³j¶¦³YµZµš›UkZ²¬Öµ–›MZ´Õª­ZªµYjµšš«Yšª­¬šj­j³*j¶ª³*šÕj¦ªš´ÔÕ™eiªk+,¬³5SSUSKVeLÕSRÕ4³2²ªÆff™eRË,¬¦Y•R«*©•U)©©•TeU™’©LÒÌ¥d¥™TÊ©,©•T•UJUJ™”©S*¨ª“JªQUJ¥R–2Rʤ¦U&JUR”ªJYR’ª*”ªR¥*QdªS%%*”©*T¤É)T©I)d¤ªQJS)RJ‰RªIŠŠRTÊQIR2eIH•JT”RY%*$ªRRTŒT¤e)))HÅTJ‘TTR”¤”£%%%(¤ª‘(©)T‰)QRJR’QJŒUJb””R’”©ŠT¥I!R¥%)"¤¥)%%I*)EQ)IIRŠ1RRR””RT™(•$¦RJ%IJ¨’R¤d©J(ªIb¤”S*R)RT•)I2c%(©U¤¥*T”¥E*’¥IQJ•,J¢UJL•IJUJ¥*UJFU*¢¤©•JQ•,ª%R©RÉ’¥E•5*‰R³*T•T©U*™2¥RÊeJ©U2eX²YSJÅŒ²¦©Tª™TÖT™MUMK%eMUU&if©YM-3JÊÊšjjª¥Mªª¥M𬩕j­2«+LÕeYe¦²Ó-5Vª¬²­fª«3UVÓMS¦ÓMi¬Ój¦Õš¦ÖªVmSf­VµUjµ©Õ[Ve¬ÚÙª­kSkUµV­kMW[SjµmUÚsY«kkSjÚÕ³jµÕmf­µ«j­Í«gUÖ«ªêÖ¶µ]jëV­­v­ZÕ×Zµ­um]W]ZÖµ¶ÖÍ­umuu[k[]mjÖ»[«ZλkWjºÚ×kZÛ[j×]k«Získ®­m®®µ¶­ÚºÖ×UÛkjêÛ­­mmm¶Îµ¶µÛVÖ»]kVêí®[­­®ºuuv×V®Ö¶êºÚÚ¶êëZÚÚ×[mZÖÖëkVÖ»kU¶ÖÕÖÚµk¶­­µWjíZ×Z®­Õµk[›ZµÕµµj×VÚ­´êÖêժ׫VµZÛW6m:®¶«Uµ´æÙ«WZuVÕmjÕZÚ­¦Í«6­WM¦«kVªÖj­­Yšµ›5Vµjª­mVUjÖ«KMVÕ¦jœÙšªµk+%­šÌʲ՚«3+TÚjª¦¬Õ5eUUjª™™ª«2ªfªÌɦ¦j©¦•TÙeLª²ª–™SS2ªee”«%–UJª•T±¥iJÉKLª˜ÊeU2•L–U)•R¤ªfeHª¥Rª¤”©©T•)L©e$©’ªT”ªReJ”T¦U*"±”ªLJ’•b’’™IJ¢”©IIT©•)’’”TU)QI*QT’•¥$¥I$ªIJHªŠJJ*’ETQIJ¡H±R1EQ(¥I(¤¥¤TT¢J1ŠR$™)D”’’LTˆ¨Å)$”’‘R…I%%(‘RRJŠ"•%’RI)E(’”TQQ)%"¢’‰H±I$¨RŠŠ’Q$¥E(’J”¢**(ªD©d’•!JRIT’¥R‰$¥H¥(©$¥%(¢ª$©(©%%RI(ÆR’‘R’T©E%&UJT”ÉRIJ”XÉ,RJ”ªŠJR©J’Š•JUD•R”¥2©D™Y*Œ”ÅUR¥IJÊŒ•K%RdÊ•R¨ª¤Ì²T™K3%Œ•MRªI©¦e*MLÒ²RÊÉ¥eK)–•UJfª©K2Ô´ªefVeUS54Ë-2Ì̬³,ÍM4Õ5VfVšjË4³Tæ«*¦ÕZ©ª«Zšj«VÓ)­fµUjfÕª´Ö›5j«Zª¶ËMZµªÕ™µªµmV›6­jµªÕmªÓjÛUlÕ­­jum[Uµ[ZÖ­kZ®Ö´ÖÖÚºªÝZÚÚµm­[Z·WUÍ­µukµkZë]k\æÛVÝVÛZë]]mjÝnuµm®Úµ·Vë]k]m®¶¶ÚÛVí®­®ÖÛWmkºµÖÛ[µ­¶¶ëm«µµÝkk­Õ×]«m®»]«muÚÝmn­ÖÛ­­­×k]­v×[mk®Ý[Z뺷kZÝvºÖÛku­ºÚÜëkÕÚ¶ºÝ­­u·UÚÝ]m­µvµÛjæç[u­µmuzºÕ¶ÖººÛZÚ¶ÛZÚÚÛVÕ·VÖÚÍmkÖÖ™ÖÛmjµ­m¶kZæÖ«n«jÕµmmšÍk­ZÖ³VÖ¶ÍVªîkUZ×M¬¶l깪Õ[ZÕZmYµ«4Ú­ZµZ¬µ[Z©­3›ZZjµ©«MY´ÌÕ©¬ÕU¬ªªÕªª¦¬ÓU¦ª™Z«VTªÕ5™•UUeUf•UT«NeRfš¦©ªL²Êʦ–T«*–e2Ì•URe™d©UR©eb¦2ª¥L™T¥U*U*•*T©YQT£,¦R¤¥2¥’•ÉeJ‰T¥JT©F*”¤Êb’d©TRJ©IE*Œ•%&TRJŠŒ•(£$©)EH©))J%)E%E)$”™$¢’RJ¢J)%)"”R‘EE%(¢‰ERE$‘RQI$¢RIQ(ЉRH”¢I)I IJ)$DªH¤‘(£%$’‰)%!)%"’*H‰III I(’¢I#‘D”• DŒTˆ©IR$”Q*%"R%(¨RE%$TR)"T”I%(’QRD¤¢”‰E%)RQQH¨¥"’RRQI$©%%’¢ŒR’JJJJ‘IF*R‰JIJ’J”’R“©$©*‰I’¥$¤¥R”¤RfL”””¥T¤©)*¥1JS%R”©)–IR•*¥%T©*¥U©•T•IdÌ©T©2Ê¥LªS&f•R“4̪UR¦e™T¥šYULª–™–XË*«Lª–U¦™™YVUVfe¥fe©³2ªmVUVZk4ÒÍf«2µUlËM9¬ÕUZÕe¦µZªÕ³+N«[4ÔÚÎmUªÕ©Õujµ:ukfÓZµkªÕ«UÕµ›Um¬ê¶µkWZ¶lë[ZÖ­[kµZÕµvÖÕª×mv³5¶Þ­š­·m­UÚ×mµZënµuµºº¶Ýkku­vÖë[km¶ºÛkkm×mj×vÝ]ksµÝmÕµ×m¶ÕÝ«ººëµ»]]¶Û®­»]¶»]®Ö½®Ûk]Û[¶ÖÛµ×mv·mvÛ[¶Û«®Ým¶Û­vë¶®Ýmºíu·]m×]m»mkº½nÚ»mvÛm®ºím¶ëumÚí­­×v«¶×kmÛZ¶õ¶çV½nº¯Vík®µ×Z۪ڶÚëkk­³mvµÖÙµ®¶Ýf͵¶ÝV­®¶µµk«­kW:¶Ú­mmš¶Öµ«ªÖ¶­m¦µ«Zµ«Zµ­Z¶¬Ùµ[Z«VµjµªÕ­5§V¬Õªµj­lÒÓZµªËKYªÖ¬šªÖ¬ÔËMšÔ´Ófšš­MSYVZZ¬©ª¬´ªË,Ë,¬¦¬«%fY™URªË*fU,ʲ™TÊ©¦e)–VR™VJ•”²•R™LÊ¥*2Ë%R•)T²¥&J©*YJT“)•I%’©JRU*IU%1T”™IR*’¥&JJIL”Å”¤™IR$“2JIE$©*…¤•(¢RRRTD¨¥$¤’J$ªI"I*‰%¡H¥%$‰$”•!$’¢I(¤J"¤”H¢‘I$¡E(R)’I JQE"”PRR(’*Q(‘J(H¤¤)ID’(”I"”$Rˆ¢Š’D¤H¢REH¤ID‰P¢…$RE"„¢”H¢)DRQ"EI$(¤’‘’%¢HŠ’„¤RQTJDR‘D¨Š‰%”J"¢¢Š%"”¡Q%(¢J’R$¤”¥*21J"•)”’ŒT’RbŠ’JU$Š’U%)©ERJ’T•%)RRR•IŠR’™R”RÉ2¥%*S)R•EJUL©EJ•4ÊT¤¥fY&J¥UIVJ©XÉTÕJ¥RªU™T©“3U,©M3U,ª•VfURËL²Ë2©«+*ʪ­4Ó-MYff¦¬³5VfªËMUªÕ56ª®jɪյeij¶­Ul­Um¬ÔÖ§ZÕªµª­µlÓZÕ¶sUsk:®«j­µ«:Ú­³jÖÖ¶µ«j·kV¶®µuu]­m][ªÝ«]m]km¶­k¯[Yµ×muµkv×uZݶջk®­w]mnºÛ]µÛjÝ·]µ«vö×[g[ëµÚÖë·unÚí¶Ûn뫭ݺ۫{^×[o[®×u»mÖÛ»mµÛw]v×vêõ½u½mÚõ×nÖî»uwu¯vÖÝ{u¯k×]·[vö¶Û]í¶ín¶íÛ¶·]vÝ»]k×µ×]ºêîêõ·kµÚî×[­Úõ¶»­vë­Ö½u¶½­vÛ]®ÖÝ]º»W«Ö¶í]uµÛmZí·ZÖ×[­µ¶®®»[j×[m«W­mµ[jÝÕmVÚêÛ]9­n­µlæÕ¶µu›Uµµ­V®µkV­­6ÕkZµªµ[«Uj³[V­9«Uª®«Y¦kUµY©¦Öª­š–¦¶š«3M6¬Ê³Sššf«K3UUUV™eUjÊUeMši”¬Ì´Ë*™UURʪ¥U&ª©eI–S5*¤©™UJ¥J•K2“*R¦UTRVLªŠ’ªS)LT•T’¥T’’ªUU)J’¥%J’R”•)E(ªŠJ’‰RR¢¤JR’L’¢%Q*Q)¤”’RŠH©””E)D’TQ¤’E)‰*"’J"Š’DJJ"¤)R$”‘$I%$‰I$¨$‰D¨‰P¢Q% "ŠJD‘P¤‘"II"$¢HR$¢‰$‘(”DŠ"IB(’I ’JHH’(QI!!%¡$Q(’AD¢‘(”$‰D‘$…R$HŠI)‘(”ŠHD‰RD’D%(¤ˆ’%DŠ%I QI)Š*DI(¢JQ"J)"¢R(R‘JH”‰IJ% 1ŠŠ"T””IIID¤”¥DJQR¤RŠ*Jb’ŠJU$Šd©))*&R©"”ªR’£$ÊR•HªŠ©*T•IL¥T”¥R¦T¨¦U3)&U2™S&K*•Jª•*eeS)U2Ì¥™U&š¦™TÌÊš¬©™VSYiU4ÕYU5™¥ffšªµ•,µ¦ÍK3UjËUUm3MšÍVš«j­5Zµ¦­¦lÚ«W5šlçU­–ªÖÚµZµ][i«ZÖÚ´ÚÕºÕ«jºº¶µ«][kf¶ÕÖÖÖ«­µÚÕk¶ÕººµÛZë[kmÕµÖæçkuÖڵݺµºÛ­uÝZun×]µºëmëmmÚîÖ»­×mµë®¶îÖí¶×nÛÕÚë{uÛ[Öë»mzëÚÞ·]Úõ·­»µÛvÛvÝÚívî½vÚîÛÛmvî×uë¶Û·]Ûn×nÝ·k¯^Ûmëv»wu®î¶õÚö½nÛ­ëÖÛ¶ë·]®Ý»­«½·n®»µ½nÛ­¶ÞºÛ®Û­ºÛ{]uuÛÖÛm­»^ÖÛn»m¶ÖÛ]ºÚímºµëµ®¶»k«m·[UÚíu¶­mºìÚÕ{]µV»m[[mfÚ×[Z®¶Õ«mu§Uz¶µkjÕ­­µU­kmZªÛVÕ[6«ZÖ¦Ö­Nµ©µfµš­ª­Uufj­jmY–­5ª´ÍV²ÍSZ²²µV–š²Ìµ5VZfffš²²Zj²¦ªi™¥YYT´¬¬¥™e+2ª™K,É™2Ê©R¬©R²UT©L¬•JUR–R¥*©*”Ë¥J–TR¥JUJ*T™J’•)*’¨¨ªJ•¥)JRR¢”¥%HÆ*I*ŠQJ’ITQIJTˆ¥%JE$’’’”Q%E$¢’J‘$”’ŠŠ"¢’J%ŠŠ"”RH”’ˆ•P¤bR$Q)D‘E"‰$TP¤¤T…(D¨’(¡I"RJD”"¢I"EŠ$‰$I% (¢JI(’%$B‘QB$¢I"IP¢‰$I"I%$J"ŠI!"R‰"(¤ˆ”Š% EE"IBŠH‘IB*))$ID”‰$ŠI$Š#%ˆRJJD¡H•"TI"J’)$’JJ$’R¢)% ¢’J‰%”¥$ˆ¥LTE(“&I(”¤•%E©))*‰R1Œ’©$–*’RT©%TR”¥,’•)JJ²RR”ÒdªRR²¤¥Œ”Ò©+*e2©J¥K*¥&eUFSTª•J©¦U,¦U5RÊeUTÒʪ¦SVeURš«YRfš«5Rª¦ÕUSMšV™ªÌÕ5e¦ªÕU™ª´Öš­5ZªÕfÍMšµV«iª«kUªmšµZÙªµkZ­jÕjÙµ«U­mZm[kU«›Z®­«jÕµµmkV¶ºÕmm[mšÖ»WUÖ®ÖÕµ¶ºµº®ÖÚ·WWkk[®µ¶ººêëuµÎ·W]µÎ­Ûun®ÖÛu¶Úºî¶ê×µ¶Û­®ÚÝwW[n×ku×]uÖî¶·]ºêî¶ívÚÛ×[®Öݯk®®íÖÛvÖÝÖ뮺õÖݶÛ]}®¶·nÝmºÛo]«·[ºÝuwmµë®Õë·kk×]vÛk{[vº»wZë¶Úëw[kºÛWnݶ›uݶֻm]ºí­­¶Ûuµº×[uÕºçk]¶·VÖëµ­­µêÚÛ[km­m¶uv®ÖέºÖ¶ÕuµÚµkm­µZÚ×WVÕ]]mj¶µmªÜÚ«m[f¬ë[N«jµ«›VjÚµª¶ÍUujÙfµ›Uª¶ª¬ç6™ªÖšµšªÖZªÕkL³M³3eZf«U™™š«SUV•iš³,ªÌ³MY,ÌÔÕU,ÊË2ʪe¥™”Ìʲ¦VUL©™™R²•ULª”²±•K%•I•U%bÊUR•*•T•RU)™JU*ª*”¨É•JRR¦c¤©U%J$Ì©HÆJU%)RR”U%IQQ1UR¥’¤Å(•)Db¨¤••T’IQF*Ec’Š)E)"¢R*J"’¢¢(’¤¢‘ET‘Q$T‰ED¢J%$TQ¢ŠD¥I”‰B’R„’R(¤JH”ŠEREQ)‘D”Q%$‰"IH’I%"E(‘JDЉTJDŠ)(¢P¤’RI I*HP©’’(QRJ"”*(””I(ФJ(’”IQ%ŠR)$¢‘QQ(¢¤R‘J(¥%$Š’QRJ)%ED£D”’”¤’¤R¤’¤¢¤¤¥%EE&JŠ’ŠT©%*‰JR©%*TRLÊR¢2©Tb¥ER•JR¥%2ª’ŠeS)R”¥U*¥%JieRRiY2©*ÆR²¥T™•Rª¤¬¬•”ª±•53*YU4Ó*–•U•R«2ÊZª©YZ™–e•™f–šjªjª³UURÕªµ*Ë5VÌ´³6j«6™i¬ÚšµSiµYªÍšlÙ«5ªuZÕY«ZÕ™­Zµkjj®­sYk5µ«ZÕVµÚ«f­m][5ZÝ[6mZëjµªÝµj®Õµµ­[[ªÚÖ¶ÙÕvµ¶µ[­Õuµ]mµ®®­­¶Öº®ºÝ[[Võ®µu¶Ö·««s«oZë[[m¯\ÚÖëÖÖÚÖëÖ×:»^ºÛ6ÛµÛZêë»[m[µÝk­¶Ö뮺Û]­¶Ýu®¶Û¶¶µëº·ZÛ­Ûªë·V½vµÝ[v®Û«­×Zë®»[km·k«mnÝk­u·[«m·W[[­{Z×[µmºê×]u­v×ZÚë­m®¶º¶çWk]ku­]µµÕµ¶µ®ÚÕÕ­ÖÖµuÕµuu]u[jêÚ¶¶¶µZëkZ¶«mjëZ­WmZÕ«fÚÕmjÎmkN­ªÙ­:¶µV­¦Í«j«VµfÕUÖk3f­VÕ–ZÕkUU³TæÍUk35š´ÔÚ›TÕZšÔÔÚšª«M¥e™jËK4ÍTÖY–VV™ššYfZY™VUM55JÊf©–•LÊ«&Ue,©–•LªU•Re•+*¤ªi™2eL©YJ¥J•Tª”¦L©UJŠYU%R”©•*’TÊR±TR¥J•JET”Ë$’•RR•1JQR™RJ*¢“)JQRI•IE%ŠRLTT’”©$¢¥I%&)%)EI$ÉH©%©)"”¢U’TIIQI%%$LR’J%E$•¡*)EJŠJ‘Q$”¤J‰EH¢’RI*$’JR‰$’J”I(”QJŠP‘RTI(¥)QED’1R(¤¢‘1J$¢RJQIR’”$•HŠ’QH©(’’RQJ$’©TJ))J(¤’’T¤RH©*QI(’©%"R•¤’’”•¤d•(Œ¥*E&JQŠŠ’”¥)))QRd¨Å)I,¥I%J,”ÊQŠURU(¥2–FI”ªJ¨©*É,b©J•UªŒ¥Y*J™3*’©,«ª”ª¬U%dʪ¤ª¤ÔÔ¦Tªª¤Ë2ªT´²ÆU”̲ª•e3U3*–f¦–UUTÌÓY’ª¬ÓeT²ÒÖfUU¦šjªÍURÍk,³+5UÍ33MjÒÕZf´Õª¬Õj«U¬«UmU›+UkZlÕ–­[6fµf«mUZºm6«ZÕšÖ«Z¹­6m­Z­ZêÕª¶ÖÖfÕv­ªÖÖjë[j­]Zëjµ]­ª»ZÙµumkjº¶Ú¶¶«uµuk[k«kkV»mjÚ·kjÚÛ[kW[«m[]nµn­µ­ÖëU¶êÛu«[mºµµÖÛ[Vëµµmu×[Z×[­¶µmÚÛjÝ[­Ö¶µ¶îmk[zºº¶Ûmlë®ÖÙ¶×[^­µm]ÛmVÖÚíz¶m«vÛsY¶»­µk«kº®µ¶Ö­Úê¶ÖêÛUÚí[UÛkV»lÚµÛjέÚÖÕ«mµµ«V»tæÕ­­µµ¦ÕÕÚÖ´Û:¶ÛVZÕ»ZµšÎ®Õ­f­kkjÕZ¶Õ­[S[Vµ­U­j­kšÔÕ­mZš­uVÓUk9µifÕmMš­fkV¦­™ªµ©¬Í¦«Sf³,ÕlÒÍUjÍS4æ³,ÌÍ™©ªª­•TÓU«,™U«S2²©³KR¬ªªÌªªe¦¦YUŒ¬Í2ªUVU-+)UUR²™US*•–2ªSU*™K*eS*UR•”ª¥J•3J¤¥,̪IT©e’Y&Lª”¥R¥*V*R’Ì•J&S2’d±J¥L•E*J™IT¡TªUUHÉT•%TJ”¤¨ªRRU¤™LRQJU$©%$ªŠIJ’”Š’¤¥(”•*H©&JIE*I)T‰%)RJR%%J’$©*Q%I$©$•(”¤’”¢¢RŠJŠ”IDªQIE$•)ET¥ ¢TŠRRIJ‰J%)Q(¤¥)%$U¥R’¢”TTJ¢Š’RT’LRTR¢R’T”””’”¤©D¤“*‘EI*R’””ReIJ%)R””d¥*Q%U%D¥Œ”•D™R”¨©)JfJERŒ™T¨”•R©IRT–T•)RUJ’YR”ªT¤É¥Tb©L™YI,”ÒÉ’™T¥”ª•*eK*T¥•UEU)¥¥*¥TɦiLšTÔÔ©eLË)fUU)¦jfRÌÊš²¥”ÓZS,²²²ªªÊZjj©¬©eªÌ¬ªª­eUJµªªªªªµ9¬©ZªÖ©iª­Yf¦Õ6–ªÕU«5•ZªÚԲ͛Vš«S§UZÔÖšÖªÚj«lÕVÕªÓZ®µ5ª¶­fÕš­mj­šÓZº­5mkjÕjÕmµªÍjçV¶´Ö­uµVº­lÚÚ­­µ6µ­¶´Ö¶¶­­³ZuÖÕµ­UÛkV­®­m«jºÛUÖÖmµu[ª×jÚæÖÖ®¶µºs«mµ««][kmj¶ÝmV¶ÚºÝV®Ö®Ú·Uu¶µÕµµu¶­«­­µ³k]uuk[kmgZÝ]WVÖ×[Uº­Öµ¶Í«mn«mkVÚÚëZ®®¶µV½ug6µ¶µ­µZÖ»[U«[m«Y®­­´Ú¶¶Í«W[6m]ZÚÕkZÚ­u¬Ö›mZÖÕfͳ«šÕš¶µ­ZµVºµ[Ujº®lÕUÚÕe­Z­mfY­›i«SfÕªµk56«V´Õ:­škUVÍ6¦Í6›3ZZ«UlÊÊÖ›5TÕi³U6šiªÕV¦Yi´ÕUSfZ–«,²«55TÔÕYVMUY¥U3VUU52Ë,²Ê™šY•TÍLªff•S2ÊeYUR¥fUU%VUT–UUIeM*ªRª–Tª•R©TªªR©*²©RTÊ©UEJ¥”ÊRªJª2ª’T̤¬UT™J•IJ™L•I&Y,b¥%Lª1T’ª’™%RŒ¥*”¤¥*•H±“&IT”©*RŠ¥I&L’©ªRR¤©%%T¤””™2RTR’¥2IJIR•EE%RTUŠ¥)IIIRL”¢¥JJ‰*R”£$©JŠ*I’¥$Š©%QQ)JU$Rd¥QD©R’RU(”É2T‰J¤¥&*EIJª"”©IRT“©&JR¤”¤ª”TT’ÊR”’UJJ’•E*Rd¥2R’¥JJ¥)*T“*¢”•J•EJJªQR¥T’¥T”¥’ªJRªJ¥T¢¥’©d©)YJ©)U*”²e*T±™2ª*VL¬•)d¬ÊS*•2ª•*šUJfT²©UL¦eRª©•L©¥eU*•ZYT©YfjUI™¦¬ªJÒÔÍLªiiªšfUMUªUT­Uf–M3Y¦–•išl²¬«-UUZª•™µ¥•5i­LÕVf¬Í5jš³U¥ª«j¦¦µ¦³-ZjµV³UU[Zʲµjæ«,µ]Z­KVmªµY«UªÛ5M›UÍj›VµjÍf¶³UklÍV¶ÕVmšÕµ[SfÖÕmfkVæÕjÕk­–«[jÕª·ZÔÚµÚ³j­nµjµuªÛUµ«fÕ¶­šº®µ«jÕkÕÍVÍu®«j®¶mªêÚÕµZí[Vµ[k¶U­n­uªµ­®Õkj­ÕºuZêÖµ¶³ZÚÛU­kk[VÕnmWWZ®­[WZÖ³k[j¶µªÛ]ZªëªëUuk[jµjí«5«m[UÎWUv­juµªêÖlÚÚ¶¬Ö«®«NkjÕµ¬Ùª×[UZ«­«5jÖÖj­mª³k5mV³¦ÕZ®µVjÙµZ­YµV¶šªÖµjË5«:mTÚÍYÍUªµVÕUfµjlÕUµM™¬Õ©›TÚªuVjªµU¬¬Í6jªµeVVªÙeTÕªÍ55SUš©³2²«6fUUUf«)VfªÊªfª¦ÊªZZ©¦i•eSUVS*¦«*ªMMMe)––™dÊɦ™e2ª©eRË)™JÌ©VRª©JÒ©eR•UR²“*™UR•K*¥IeSL•*U,²¤¥RªªJ”ª©R©*©J¥’¥IeR©&UIT©U%J•*UIL–I•*J©JRÊJ¥HË%TT¥*U)U•2–*JR©2U*)R•JL•)RJ¥R”T•R¨•%R¤¥*¢¢•J¤¢©I“%J””ªITÅ$Ê’•I&T˜©)T”¥IT”•)T“I)e)%IT¨©JT¤¦*¢”©RT•%J¢¤ªRT”Êd’¥*U%%*¥%*R¤©T”¥RŠ¥*”©EIeK’™’¥JJeRT•IU*R”¥U))•)T¥)UJ”¤ª•3$ª2ed¥T¤©UT©S*©FM*ª)5R©T“3*Y*U*Ydª”¥™T«ª™-K*J™U•JUL¬•52ª’ªª©e*••eR¦UeL©¦¥UQ¦k)•2¬«*ªS5•K*ʪ¥–¦eLÖU4ËRÌʳ+2«*ʬ¬Ë*Ò³LÍ5MYU5©¦©š­2ÌÓfiY¦³LÕUY¬Êª¶ªªY­f™ªm5U«LÍUjÕ•–Z͚̲µšÓi©«Vjµf©µ–«6ªµ5¬Öj«j³M[9¬´Îmš³5ªÕmVi­ªÖªÍYÕmfj­[[TÍkj­jÖi­­VÕY«kV«f´ÖÕ­Z­šÍ]WYªµ[me¦ÚusZ«WVµZÕVÖ­i­kjÖkZ«­jÕjÛUmVڪ궳fÚ«]W5:ÖÕ­Vµkj¶­Z¶µVÚÕVÚ¶œÖµ›jÕ­Vµvk5mj¶Õjµ««Z­fÕ­­U«[V­šµ­jµ­VÕjÖµ¬Ù›:Õµ™«ZÕ¶i³[V«j­ª¶«Zm¦ÕªÕkšÓUu­Ujumšªµµ¦šÖÕVÔÕ­V®fª¶«YªÕª­[SV³U[V¦³6ªÙª­U«5j«UlÒÕjÍjj­U«LÖZ³UiËLÕjµeUj«ffZ§Uišš«Uj©Z«Ufe™©µ5eUUj«S*¬ÍU¦ªTÕ]SL¥j­5•*²­U•K,ÓSMTË,²ÌÊÊšªªY™•eUU&«Tª¥KU¦Tªeiše’¦™¦¦U*e©™XÉY–URªd­S*•JÊ™•Rª“,²É2ÊYU2™K2•’ªeL¦Y*©,Êe2©JÊ•J•RÉUIUJYU%J©TÊ¥%LʪŠL©šU"ªUT•2¤ª•*e*UI,ªT©2eTd¦eJJª,•R•*R–Tª*J¬’É*•*X©*¦*”¥+)QT™2¦JRª*UTL–JUJJ¥J¤¥,©JT•2¥Ib¥&YI’dª”¦R¤ªŠ©J¤²L™*¤ªR©JU)R©R”¦U(ÊYJ¢¥2©J¥)J©”¥2T²TÉS2¥RUI”²T©U%R©K)R¤É¥d©ISS*‘UK%dªJ¥U2•&e*©L©Lª¤±•4Ê’¦UT©Xª”¬Êe2•RʪIª¥U%UTª¨Ê«%TÉ™eT¥VTÊ©e+,¦UL¬¥YU*ššVJ¦ª±’²Ó*ªTÕMTÉY¦fUU*›Lª™YVYSTÌÓ*¬ª²™ªª¤Öš¬•UVf¦f•™Yjjš¦¥ª¬«2³+MU•SV¦²™ªÌÕTÖfeª´ÍLÖfš¬ËMUª›,Í5j¬Ó-5ªÌÍUi¬ÓUZÍ4Õ¦­UjªªÖ´Ó3Z«V²–µVÕVVZÖªÒÕW6Zfµš«Y¦­VµMfÕU´Ù©­š«k*ÒÛ6¦ÕU[jªÖš­kYfkZ­jÌÕ§UÍ–¦Í´Öªµ­e¦µ­V«UœÖªæ³Z›VµZ­ZµjÍVÙ«S›Vm6µU«lÔÖµlÖšÕk[35³[UZµkU[Z«UµV­ª«jÚj®«VªÚ«j«jµZÍjÖªµkZjÖ³Vmfª×SjªÖµ²´ÍµkUU­¦µZiÕU³Z«U­V¬Õšu¬Ùi«V­ªª«mf™«V­Y²ÍU­«+-V®ª«5V«ª­3UmZ¬ªÕjÕª™µV¬ÖZ™ÍjªÓZj«U̲µU«Vef𶦛--Vk55Uª›TÙ™«2µ9ªÊ¦ÕUk)ªªÕªe™j­UV”ÕUµ’ɪÕYšVVfª­,«+3USUUVU6šY•™ZY¦i¥•™™i™YeTÙ¥UK-5U2ªšl²¦UeSYUJªiªªjK+,´Ì¥TÔÕT©–Y–J²¦ifRª²eUUJVZTÒªU•,²e”ªÊ¥M2©•3,™UJ•ZU*’«4¬RªSYX©*ªši*¥,ªi¤©UJZ¦RY+*¥RÆR«%4ª“*edªR«3)Tª¤ª©’ª’©•”™J¦XÉ•+%J¥S*“)•J“L©T¥R¥–J£U’¦J¥K&Tª”™e2e*eR•R©JªU%RÉ•Jdª¥*•M*RUJÊ•RI¦™T¤¦idªI™YJ•)UR¥T¥T©TÊ©IUS%•IU&VUEJªUJ™L©UeT©T•YU%J¦fR©L¦ed©’²Ve*e*ÊV2–U3%M*¥”ÊeUJYUJ¥UJ©Y+*•S*™MLª•Jªª•Jª•UM,”ÒÓ,©T̪ªY”«&ZfUIf¦fUR•šª¨«)¬Ì¥RÔÔÓ*™fYU”¬¬¬ªZ–VY54Í4¬ª¦jÊ–e•–VU•4Õ•K4ÍVL«3UM4²ÕMMMTÕUSY–U–e¦i²ªš¬Í-4Õ•”Õª¬Ê¦m6VeeUsUJª¶²–f¬µMe©f¬ÓMijš­5V™ª¬Í–iª­Vei«Ui–ª«f«)ªÚj³3UZÍMY¦ÍSj³36ªµVf¦ÕZµRÕZ¶™š­5šÓUZ´Ùš›UkTÍfÓUªÓVšµY³Mfªµ¬ÍTÚÕiªÕZµ5g5f«MU¶–š«f´Öj³6ªÖ¬¦ÕkišjÕj榚µjéš™¶jÕf³3fµš«5¦ªÜµ3Z«Z­TÖªêsMfjÙ¬ÍU­YZmZ«UVªÖ«U“Z¶´´ÍYÍšÍ-6­Yj«Z©´Ù­5Zk5¦œÖ¦›Uª›Zf«UjÌÓj«Uj«3ZœÖYi«f²ªµZ²ÔÖš­UZ¬ËSkM4Ö©­MZª³MVl³MZZªÕ¥V©µV•¥¬µUiªkLÕZ²i«Y•ij²ËUU¦ªj«UfUYf´ÓKMSZjª¬i­TÚUUUVÓ2¦ZµSULÔÖeeY™©ššiªÊ¦ª«RÉš³4̪ªÌË2ªªµJªfª¬Ë%YfšÊUMfe4ÕU,¬²²¦¦ª¥5NZR̦¬ªÉVTÕVLššª–•UJk3*¥K5MK*•SM•RfUUVd•e–•K*™Y“4ª¦YTªÊ™U4²ÆMLÔª¥,̬¥U2ji¥J¥–Y3)VT¬ªUT²Y•L¦–XÉ–eb±eM,ª•)©še*£,ÌÒ•RUY•’UJ³&e,¦SS*”ÒÊ™2Ê©S*–UR•d³)UJª•)²¥T••MJ•TªU5JÉR¥™fL–3*©™L•UR©iS%US2¥2Ê©J³*U*•ZU%”Ë2¥’¬™U3*S4Ê•“*¥•T¥e’Ê™–2ffU2e”Ó*©Tª¦ªU&YiUJ¥U2Ë*“J²©•4Ì©U“*Ê•VK)f™TÊ¥¦eK*±•5UJ¥YUMUMU¥b©Yf•URVjªURʲªf¦R³K2ÊeYYU-+*ª¥–VUŒ²³2ªªVVe–S-332ª¬–™¦©•M••U54µ33J²³+*j²Ì™š©²Ê–jj¦¬ªe©ª²²™¦ªÓ,¬škVR­+MTÙ•SUZ©™šjš¬ËJÌÌÕV™TÚª¦´ªªÖe3Vfª¬™¬ÕVY5Z¦Ó2Ë5UšªªfµfY•UmVRËVjª­TÌÕk2²­Mfªª«Me©¦²ÍUšjªÔÓj¦­,Õiªª¶eYj­UZZj­U©šª¶fZj«jiš›5šš¬ÌÕj²ÓSi«-UU­-3VlÒÕS§3UVe³5¦fª­šªk-Y¦´ÍMª²ÓY¦«5U¬¬ªÚ›LÌÕiµUSš¬ÕVZªÕiZkMZZ›5eišÕUš¬ªµl´ªÌÙ´³SM¦ÓMM¦ªµUiš¬ÕVšË,ÓZËK3U[2ÓSUªÓ35Zª¬ÕMjj«UUV²¬«Nk*¦›Ujªª–­Z²ªVZÙ¬ªM:ÕfeYM­5MUVUZÕd²«UÍ2–šµ–eeZš³4²Õ•Yj™«2²ÌÕZVeV©³K++M5¥Yee©ªÊÊj´ÔÕ4ÕeMU¬¥efjœË*ªf«eU*Zµ–”Ì«5–UUSMUY¥d­M©–TÔÕUi•L³V•Tµ3MMLÍ-,ªÌʪʦk)šfie–U•LÖTÊ̳+*©¦©–™VRÕ•,²Êªª©V™eV2̬̲¦VYYeK4¬ªª•¥e”ËK,ª™–Y•3*̪ªSVVL¬š¦je”¬¬Ë)Y•e*Òª±•UMM,©•VeS*ª©UU™*ªeZ–U2–i¦¥TªššÉUR¦ªÒ™K,ʲªUT¬Ë)–eT¬²ii•2Ë*™eSTÊjY•RÒÊ©Y552Ê¥36URYTÚeJšZe•U)–©¦Tʪ¬eeS4«%YYUL–¦¥–K*Ê©™e32ʦf•L̲¦™™SK++U•UJ©¦«S*«U1“3M¥T©Ui©•LªÊšª©34Õ2ÊšZVUUK2ªª™–U•3-2ª©ffZT̳4ª¬™iee”ÌÔ̲¦ªª•”Ù¥U3*³4Ê™¦¦ffUUdÌÔÔË,©ª¬ª©eYf¥™TÌÕ™4³-3,Ë+*ªk,ª•¦jÊfYe¦ffY•UYšUdÕ6¥•5UM¦URÕU©”­SjeUUUUYª•JÕ¬ª¤Ëf«*–Yšj̪™kJҲʫMM53SUUU™eU–š©š¦ª«*¬ÌÓ4Ó5VeSi¦iš¦ªÌ«+KMUUeMZ¬•¦›4²ÌË5eU–Yiš¬²šÒÕSUeUZªª©ªÍ-UdÍZjf¦´ªÌ­UY™Ufš­3*Ë5e•ffªjË3-U6e™iªlÌÒÍMVZf¦¦­,Ó5Si¦fi¬³4ÓUUUlÊ™šÔÕ5eUYjª³JªÔÖZY•¦ª³M,³Yiieªª´³LÍfYY™¬¬ªªÖ¥3Sjª²Y³3MMYMfjj¬¦›USMVUZf¦¬©³3MTÓe¦fY¦Ì¬¬«3ZUTÖiš©ªª¬ÌË5MVeMZšªfªlÌ­--U5UZU™™jk*j«2Ì´³SeULÙ™¥™™¦jm*ªjÓ,ÒÍKMTÕ•USjY™Y™j¦©ªª¦[4Í*ªk5UJ³4ÓU5YK3fY”Íe–eeVe™™™–Yjš™i¥©¦¦ªišjšÊ–iª¬¦¥ªš¬ª¥jšÒªešª²©¦fªš²™™¦jªš¥™–iªªUe™f¦•–VUUª•SMfYUSSUUURÊÕMUR¦ªÙdªZª­d¥–j¬ËU¦šª–UUš™”ÍYeUKSUTÌÊÍ2Ó+*Êi´Ê©™š™ªªUYUZªTÊÕY–J²ÔÍK4ª¬Ê¬©¦²ª©UZ²¥“Mjee4ÕMUUJ›SUR–j³5*Višª©–•Ye•™e3SfS33T´Ë2̪«,«%©ªªª–SjªjTÕUV¦U+MUdÒÒ³S-3*²©Í2ª™š«+e™¦ª©3ZjeedµY••3TÕ5US,­MS-+*̳+,ªª²ªÉš¬²šV©«)¥šfZ©–™•™–ZYfUVY–SU™eTÔÙfS5SYd³MVU2ÓMUSLÍLÍ4Õ4³32ÓU,²ËLÌÒ̳,̴̲²ÊÒ³*ÒË2«2̬¬¬Ê­+,²ª«LÒª›2Ó*¬ª²Ì²ªÊʬ³*²²ªÌ¬«+*Êʲʲ¬¬«,²ªªÔË&k3K2¦¬´ªÌªÊʲªÌË*ª«L²ID3 ‡ID3}TRCKÿþ2TIT2ÿþTest BopTPE1ÿþcyberixTALBÿþTest BoopsTYER ÿþ2022file-5.46/tests/dsd64-dsf.result000664 023540 023540 00000000136 14325247002 020230 0ustar00christoschristos000000 000000 DSF audio bitstream data, 1 bit, mono, "DSD 64" 2822400 Hz, no compression, ID3 version 2.3.0 file-5.46/tests/dsd64-dsf.testfile000664 023540 023540 00000050343 14302627054 020542 0ustar00christoschristos000000 000000 DSD ãP\Pfmt 4+€'data P–iiif™–™™še¥Yš¦e™™¥–™f¥Y¦™™ef™fff™e––¦e–•Yš™YZ•™Y–fY™UffeefYU™™•e5e–fUMYZUUeVSU¥UMS•UÙ´Ô”Y3ÍÔ”M33UÓÌÌÔ´Ì23ͬ2ˬÊÒÊªš´²ªª¥¬¬jf¦ª)›Yi™©ªU•U¥ªÙLSUªÚªJUšU«ª*iZ›¥ª’媕©L«šf¦šªZ•iiVfUU™•33•ÙÌÒÊÔ´´ªÊ²²¦j*kZšffffYVS•YÖ,35UÕl¦TÓªjšÉʪVUZªZVS•Õ”Uµ43K3-«¬*[ª*³eU¥ª©U3eYÕTÙÊJÍL­¬š*­ªi¦j¦Yi¥UeÖTUM5ÕÌÌJ+­Ìš&+kfª™ZšeYeYÖTU6µÔ4Õ²´Ì*«¬¬ªšjª²e¥™šiYUV¥•ÕÔ”UÍÔ45MK3++Í2ËšÆÌ²¦¦ª¦²š™–jªiYšiYZf™•eY•YYÖT™Y5UYV5S™U6KUYe35U™M3U“VUµ,¥YÖ45UUªÕÒT¥™Y5Uejf•M™ª¦Uf¥šjªªe–2˪ª™2Í,+ËJ35UÓÒT•V5UifeZ¦©™ªj²²ªÉT3­4MUUeVUešªijªjLͬªT™5Í”©™––©Ê²jLS35UU•š™f©)-ˬÌ4eY•U–ª¬šª2U6+U¦™©™š²LË45•™•¥¦ªJ3³2U–fYš©*SÓ²TU¦iššj4UÍ4•f¦©š2-ÓTSji™jJ335UU¦šjªÌÌ4Uf–™™Ò²4SM•Zš¦ªÒ4SS™efªÊ´²L“¦Y™¦ª4S35iYjš2ËÊ4Uife–Ò2Í2SUšZ¦©ÊÌLMS–Vši²4«,UUffYjJ+K+ÕTZ™UjÊʬÊRM™Ue•ªšÌª¬FUiÖLMʪœ™©TÓÌLSUeªUešªÌlªIUSMÍTYZei™š¦²šš4KË2ËTMUe3Õhš–Uj²še¦¦2«ªfªÔ,«ÊªÌ433³²LM5³´453553MKÓ453-KÍR3ˬÒJË,«©4«¦Êª™ª©¦Zf™™••eeËTeµ,-Ó*+«jª©ªVS¥jå¬*•U«™ª¬jVZYV5SÍÌ,k™ªªVÍTUU-k™©¬f•­ÌTµ¬Yš¦•Õ4³´ªª•VVU˪J«ZS“YÍjª©j5ÕÔ,k¦™YÙʲªªZÓ”µ*k™YeM+kfjVµÌÊšY–Õ2Ëfii5-«ªZSÕd­UeVe³ªZUf5+›Y¦Õ2«ªVÕ”µj™YU5«š¦U-3«š•Õ2³ª–Ó45³Y6MSÕ–UM•µšeYUµ¬™fUÕ²ª¥¥5³²¦™YÍʪªÖLÕ´ªV5eÖj¦™eÕ²¬ªVSe5›™™YÙ̦¦jfÍ̲¬™eUU«*k™eUÓ²ª¦™™µÌ2˦eYVÍ2+«¥ie5-µÌ¦iZfUMËÒ²jff™U5--3k¦©šUÖTSU«Êj*«–•eeUU5«RSËš™šÌjÙTšiUUÕ4Me-+³,ÍÒ²¦)µ*›–ʲijjÊjf¦¦Ìf™©ªª©²™©*³ªªªIÓ´²ªLÕTÕ,SefVUUªªš¥©43«Ê4••5U¥)kZªÌLÍ4Ue™fš&ÍÊ43Yf©™)³25U•iª™JSM5¦ZšÊ4MUš™š*UeU•¦Ô25e–ªÆTUeU*5e3“)5-Me©ISSU™Ò,5UªÊ2S•ªÌ²R¥J5+3©45SU©4•MUJfMM*MÕ¤ªª4e*Ë2“©*Õde&Õd¦)3S¥Ì4SUJMeY%S•š¦2U©,ÓRiJ5e™šT¥¦)5UªJSe™Ê”–™JS¥©2•U©J•ijªT¦¬Ì2•²4Õ¤¦ÒTe*3-U*SU5UJªV5¥”š™¦ªbªª¦R¥)³¦T¦²²LM)­ÒRe¦ÒÌÔ¤ªÊ4Õ¤šÒ4S•³,ÓdªÉ´²T©¦Ê¬LU¦j*ËR•¥¥&K3SU¦²¥“eUMªªªÌR•5U&«²–RSeÙTU*³ª™JUSÕTU–™fª¦ª¬ªª¤µ²,MšYSMi™iYffišjš©fjšªªšU*+gY¦©©šYU©™VYÕT•UU˓լ™©²j¦™UUUÕ”­j¦´¬VSfUU«ª´ªVV•5ÕÊlš¥™UͬªÊVVմ̪ZUUÖªleYe­lf¦U5›¦fVU[™¦VµªVYU¶ZfUµ*gYÕl¦eÙ²fVÖÌZ–µ2kVÕšªVµªfM5³UK+«ÕLkf5³¦U¶–fÕ²šÍ̪Ö,³eµ¬fV«i–­f–µ²5S­ZͬeV«jU«iYU×4ͲV­™•5«U-k•UkUµ¬Z³ªfµ¬Zµ–ªUmYK³jU[ff«fÕ²šUÕÖ4UmU«ªUÙr̖֬լeUµZSÕle+«fUm–UµªUͪ¦Ù²eVÕÊf-­ªVµ¬iV³ªZ¶Ê*[3³f–Ö¬f™5³ªVµ4³VMͬlU5«²fY³*«VUÕª©¦Ù,«*›U¶¬´š©US-ËZjf5µ´²ši™U33ͪZf™•Uµª2«¬jYS©VU«,-ͬªZ©©jjUÖT¦YÕ´TÕdU³²Ô”U˪R¥5+3M••-MUY¦UUfªfj¦Ê,«¬Ò”UUS™ª¦©ªÒTÓÔ¤™jªšTSMe¦¦)ÍLM–©¦23S¦•ª2SUi¦ÆTeU™´T5™ª*UeiªTU©¦JUiÊ2S™ÉLU¥ªÔdšª’jª²Ô¨Ôd•™Ò¤²ÌR•Le–™”¦š4i*ÍdJSUªT–ªJɬLcRe¦ªb*S)UUJUšª”JK•&U¦´T&M¦*S¦L¥&5¦R“ÉT•4UE“™ªRJYe¥”*•™©J*i–fT*•™ªJI–eªRÑdVªRR5¥š”)5¦ªT¥”©©J1U“)M¦2eªReR“¥LU2S™ÊT%U™eR%SMUJ¥¦ÒLÊT“ªJ)«2“JY–™R¥L3U)••iʘ²¬J¦LSUÊRSª2SUÊÔT¦©RšiªTU*Ë4U¥RUÕ”ÊRU¥©)Mei¦JÓdi¦ªTM™f¦JUMU©ÊšÒ4ef–i*3ÕÔL™–šš²Ì*-Õ˜eÖTjªj²ªª¦RÖ²,³4eÙ2Ó”YS3UY¶LS“U5«*UUu–©2ÍjVeYšYU­2³4«jVUij­ª©,«ZÕ*MUkeYUµ´¬V•Uµ*[™UÕ¦iªU«šiZåªYUVÍfVK3›e­*k5ͲUͲlUm–fÙªUµ©ªÚZVÕ̪͖fY­Uµ™jUÛ´Ìr¹lUÕÊU5Yµ6«V¶¬ZuÖ4³ÚªYµªºjUÕZÕVÖ¬e­Z³fVmÓ²f«ZÍjͪUk9ËV­j«ZM«ÕZU«Õ¬Z­U«jÕVµfÖjÍrÖªU«Vm•-g«YÕª«jµªÚZM«iËUUÍlµV³ªºjU«ÚªUÍj­\µjU³å¬eËZÕª¶¦Y­j­fUmU­–µªµšZ¶j­©ZµZµle­šUu-ͲV­å´ÒfUWU­²Y³VUµ™UÕ6Õ´¬U«fšU[5YÍj-ˬfU›iiU•U5µZÕLKkY5Ë*[UU«šjf3«¬ªeÕL³²fYY6ˬ²–™–UͲR˪YšefÕTU5«I5+«™š*«™¥Yjji™–¥¥fši™šª¦š²*›JS³T3UVYi©ª)ËÊR•U™¥š2--eY¦ªª4i••¦TSZU¦4Õ˜¦©2Uš©R3™)ËTUÒÌL•4MU¦Ì”i*M©ÉLUÑT•©Q¥,-UªdšªdiÒdÊ4¥*“*Ke*ešRfJUªTÉ2“RUªTªL•RiJcJMªRRSURJ3¥*U™LSJ¥T–ªT’ªÊTJIS™ª$UÊR•T*•ª4I¥2™ª¤Š)5¥L*U1™&•*ª’©I)U*¥¬’I)“™L™TJš)“*)U¦ª(iJSɤRcL&3%S*“©d2UI¥LUJ¦TU’šT¥’¦Œ©Tš”¦R1e™R)U)“™J%5&3e*¥J–jŒIMªJ¦1™ª”ÊRUR&³L“”ª*U™2É25©J•23¥*Uš2U¥4–ZJUÉTMiÊ”¦*S“IMUU2e•e*•–i²Ô¤©ª4U¦©ª”eY©ÊTYU•Ò2ÍL™i¦ªJU3S©™š©ª25-3Ue–Ufe¦ªjššª²j*­¦ª²ª©ª²ªU•ÒªU+•šUµªªÒÔjeSU©V›•šÌª³)Ó,«6S35«VM5ͬY33­ªÖ²ª¦ªµU©™U[5S3kÙªfYUk5-«eÕZS-mVkVM­\mVY³V¹ZÕªÚ,«µj³¬l­Vµ•Us¶ªÕªY­ÚªÖ²j­Z›ÕÔl«5›YÕ¹ª­ªVk³eÕf«U­¶jˬµ6kVmµªµÕªY«-W­5«VÛªÚ¦Uk­U›µjµåjÍV­ZkkYÎÕVµÖš6ëlÕª­Z«¶Ú¬Y«Î¶¬U[ÕÖjµª«ÖjµZ«U[­êœµšµVk­ªÕ¶ª®–µjmmfV]gÕr¶jµ5ËÖlµZÍZ³V[U­®j­™UÛjYµÚªÕ¬V­µ™fµ¶jSËj­³²jµfÍVS˶ªVkZV«³¥fÖjm¦™ÙZ³¬–µªV³jUmjY­Z¶²j–Í–U¶ª¦U­–eU­ZUU­jUMµ¬Ve+­,gÍÔ4­ffU5M³ªi•VYU«I³¬ffeZfUÕÌTUµªLMˬ²2K³LËJ3ÓTÙÌTeZ–™–ªÊ,­LMffiªÆTSeU¥RMÓL¥ªRV5S)iVM¥JeYªIU¥ÆLUj*e¦&5¥IS–jLª*M¥*™ÊÊR2•ʪT*eÊR“1©ª”©R¦JÉ4UF¥R•ª’Ô”ÊT2©I•2%3©JI•¥ŒIª*™4©d2•2™”ª¢*ªRJM*ª¤*•*EU•R*i’JUJ*™ª¨¨R¦R)J™2U‘”²T%E)Ó”’”2U)R©*JšR*E•Rc”T*•L)¥T2%“*E•R¥¤T&¥R*&SÊ$•J“R)UJI¥’ÉT‰R•JÊd2)¥4)UE)©ÊŒJR©R¦QQ2U¥¢RªT©Ä4©R)©Ò”RJSÉhR¥Iª’“ª”ª¤R“J•R¥ª¤T•ª¤2e*M*e©JS¥ªŠJ“i&URMšª’*UY¦R©LUY#•4«ÊLRYV¥ª”ªªÊT©JÕ4UI•5Si2MÓ¤i¦ÌLM•¦iʲL3efeZš*3+++U5UVK“™YYScjYÕTUeÖÌÌRµ,«šª©–YUËÔÔl–™UV-ËjiVÍ´¬jUͪÒj­²¬••µiUÙªšUËZVµjY3«¶2›e«j­*ÛÌšÕj–­ª­jUuÖ¬j­Z³jÚj­šÕªÚÖ4«ÖU-[¹VmÍÌÚjmYÕjk«šÙZ[µjÕÚZ¶Z«ÚVµål³ÖrµÚZÙVkµ6[ÕZ[kÕªnµV[5ggkÕZk-W[›­fmmÕ¹l³Z×VÍÙZ]uµZ«v­Zk­®Z[­Õ¶Z­ÕÖÚZÍZíÖªUkk«-×jkUë.kÕÚZíœU«mmµ–­µÖΚÙÚÚZµj[m­jk­µªm­Öªµ5[«¶•«µ6kµV[«Úš­ÚeËÚªµÍªUÛjÕjµµªÖÚª¶ªÖZmM«Z]«e­l«Íl6«Õª³Z圳ZU[UÍšVµU«fÕ\Îj™ÍZµªYÕZ33kµš–Õ¬UÕ²Ue³YVˬYM˪™Í*kZVµª–fVµrš©iÙ¬²ª&­USSMÖÊjªÊšf¦™™UeZVeU–U™VZ™–©©²jª*–µ,U¥´–©,MYi™©2UM¦©J3e¦)3•i©Re©ªJ¦²¬4ªT¥i&“JMUš”eJ“ª4™ª¤ªT%Sf*UR©¦T¦”JU*S¦¤J•ª¤L™J)•ÉTQ¥TšTQ¥”™TJJS%%eªŠ’4•J¥(•)•JJJMF%©’Ƥ¢J*™”)E%•I©”Tb2•QTR&“LR))•L2%¥(U%EI*E•LIŨ$¥FEEI•*bR%¥”’”ª$%¥¤*1F¥¨¢JIQ¥’’J©$%•*JJ•””bJ•”$¥J¥D•R•D%eJ%©¨bR%•”ª$•TTŤRQReRQI¥4*)¥QI¥T*%iR©’RJ¥T•dTR™ª”(U¥J))eeRQ¥”¦J%©4¥*•IS¥T*¦ªR)eJUšT©T¦JfJ•¦T¦4eªRI-5©Jªª2U1UVjJcʲ2•ªÔ”••JYfZ¦2e™™¦2SÕdfª&ͲRU•ie™š©²¬ª©ÊT®š¦TÓ´¦¦*˪V–¥¥e-3Ë̪ªÕTYµ¬iYfÕ¬š™UU›™YUkYVµÊV­ÊfÖªªµªe–«Ö*gf­j«eZËÖ¬eͪµZÕlÕªÖZÕšf[³V¶š«ÚfV›µêZV«¶6kVkkÖlÕÕZÕÖªµ¶jkfkm­UmÕ¶ÖªÕ¶jk­Z×j³VÛZ]­V]]›³U[kíª¶ÙªëZµµZ×Zk­¶­9g[«]­­6[»êÚªº­uU׿jkk›­ºÖuÕfm›[k­­ÕZw­Z«m[]«¶­Ú¶UWëjkm³¶®­Y[kÛÚlÕº­µÖZu[k³µºººj[͵v­Y­k[ÍÕÖÖlm­ÎÕZm›5×6[³Í¶jÛlUWÝj­ÚZµ«ÕjmÕÖª­µZ³U×ZÕV«-×jµYËUךe«­e«¶fUWm¶²6kÕÖÒªÍVmeÍš­Z­YÙªÖZM5k­iÙ²Z-«UµZU­šV­YYÕšYUµ5YVµVÍTVmUÍTY«VeUY-+«™¦–UÖÔ45ͬÊʪÊÒj¦2«ÊJ«,ÍLMUcff™¦JÓ45eš©JÕT•©ª”••©*¦ª™I•2K3¥&¥™*S•4•©*©ªRªR™)•ÊTUÉRUŠªR¥JiLJS%eªdRªJ)URšJIUT)UJ¥TŠ&Uʤ¤T)•T*%“”*•’”&%UŠRÊ”JR‘JU’QQJ*SŠ’JL¦’©R*)Jš¤T$UJJ*1*%¦”””£*R‰**J)%)Ť¤¤%U‰•”*‘”ŠJRJIŠR1ªHRF))JI)•HQ*¥’„J¥¤”D%¥”¤¤’¨T”¢Š”’’JQŒJJJ))J*™©¨$eJR¤’RIJ%&•RU’F%)ʘTJ”J*©”’hLƨ¤•ª(%¥T*)¥¢TI¥’ŠR©4REªR2©’Rª˜R¥˜TªRbªTE%•©RŠ©4U¤J•J“I¥¢©¬T‘JÍT*©*•ªT™L¥JS¦R•ªL¦MšÊR£1Me•*U™*k*™²ª²Ò¤¦²ªªd–f•š²´ÌRSSYVVU¥²UU¥²Y5•©VµLÕÔ2«¦š¦eMË´¬jU5MµfUÕ̪j˲Êe˲–5ËVe«YekU¹j¶Êfµj­ªV­•«Új¦5[›UµÖÊÖª­jµÖ²êÚÊV­¶ª[ΚÕÖÖÊV[«ÍV­«¶fµ­ÕVµ³ÕæªkÕUWkm­ºV×jµµnµZ«ëZ­µ®¶ºêºZk­mk³µ®¶®®ÚÖÚº¶VkÝÚÕZsÝÖêV][ëÖZÛÚVëºÖÕZ·Î¹Öuµ¶uu­mµ[]këªÛÖVWÛµµ¶¶¶ms­m­ÛjkݺÖjW·u¹Úµµu]®®nëjukmW][[mW×Z[[ëÚ¶Zkk×ÖjkÝÖªmk«k[­Ömµµ­êV·ZëZuµ«­ÖÚÙZ­«­­Vëj[µ-WkW«UëÕj­ZÛêl¶\umÕª­-g›ÕêZ®j«¶V«Z[µe³Õlµê²eÕÖjUkVµµšY­Ù¬j­VUµ¶jªVkÕÒ²j«eV9›YU­ÖÔ¤µY3SM«YÕÌÔ*[VUe5«¬¦ªªVU™™UÕLUfU3“eeV•e©*›¦2UMUi™ÊÊLU¦¦)Õ¤iªRU©*¥–R“Ò2US¦ªL©2iª”©J%Uf¦U¥JU%)••*©”2•¦$•IU*)UJ¦R)*eªTD)U2RI©FII™’RE)•’’*•(©”II)*ª”Š’TŠ*I©H¥$¥’$U’RUQRRTI¢*Š’R…JŒ¢Š¥’%¥(%**ERŒQJ$™”")II2*£”$)I‰J¡’¤¤‰JJRQD©¤HIJ’”¢I)*ŠŠ”¤¨DEI‘’$JQQIŠ$¥¢IR)ETTU"•(&I©„RJ’*I(¥J‘$¥¥•$¥¤EU$••¤¤J’cJI‰JI*•¢¤¨dª(R*)“J’R)“4JR)UQRJ•RIQ©Rª"©J)¥L•"™šT1)£ª¨J¥’RS1©Ò¤J&S©JU%3M*™Ò̤1©²JU’•e¦T²2KMJS“¥¦Ò”i©ªRfU•ÒL+-U¦fj¦ªÊ¬,Ó´L335Í4³²,«¬jfjYVÓ,Í*gÕTe«Z•UÕZYVÕjË”µf­ªVf«U-kÙ¬VÕZUmÓ²Z­U«™­U­¶jÙlµV­U«¶UËVÛª6«µµV®¶Úª­ÚZkµÖZuk-kk[]U»Z[[­¶µ¹ÚZíꪳµ­®Ö­ÖZ׺Ö:gÛj»¹jÛZ׺º¶V»v®­¶u[­íj׺ֺ¶umm[Ûj·uµukÛê¶Ö]­kÛÚ­µmm×¶Õ­­»ÖÖµ«ëºÕ¶uݺն®[»¶vµkÛµµµëÖºµnëÚ¶Öu»ÚZ×]íÖZ»n]kÛÖ®µ][;×Ö«[m]»µµ®íª[»º¶µ­n­ÛVgçÚ®µ­¶®^]«mk]]ÛZ[mÛZ[[Ûj«íjk[³¶Ökk™kÛ¶V­µ¶mÖZgkÕvÕV«­¶¶Y³ÖµZkÍjkm³jUwÖªZë²5m6WU«ÚZ«Z¶š­Õ,[µZ­Z5­ÚZ•µÌÙZZV­•Õ²š-3«•5«ª5UU«UUe5˪eU™ZÕj*U«¬™©ªª¦ªf©ª*Õr¦JfYe•U2MSSei*ÕTi¦L3©ªJ¦™&•ªJ•¦FeLU¥2™*¥ªTªT©T*•šŠ*Å4eJ%¥L¥I©(“¦R‘*¥R*•bT)%SFI&•*JR•’¢T1©¨¤¨d*JRQ1©Ũ$•”¢•””R¤”¢¤¢”$)™$EIJRER”¤”¨D)J‰¢¢¤E‘¢J¢$‰JŠ’$EJ’ŠQ‘J)E’”’P’R”$"U%‰ŨH¤$I‘”¤„”¤DIT‘’’’’IE’ÄH‰")©"1*•(’J$)ŠT¤DJ¤J¢¤$*J”D*)’¤IŠJ"%E)‘¢¤”(JŠŠ¥DIJJŠ’$•¤¤HIE1JIRRRR‰’bTJ‘R’RIR)IJÉ•$•T‘’I¥$%¥J)%Jf2)))¥*%•”T¥ŒRʤJ)•”i’J©T¥¤*•T¥ªH•©*©’&3•*•LS¥2UÊdf©JÉ,3UªJe¦™*¥Yšª2Ui™iÓTÕ2Uiªe™™šjªjf¦¥f¦•ÍLU¶jªjZÖ,K³fÕL­ª6Ó²œ5«ªZ«¦e­ZU«ÍÔrÕÚ,+[s¶ªU«•«®V­\®ÖfËZ­ÖU«Õª«­Ùª¶5Wm­ÖêZm6×ÚZkµÚÖ­Z«­nk«Uë¶nͬm{µYµí¶µª[ë¶­Z×v­®­]]m»ÖÖ®µnk×ÚÖ¶m]ÛÖÖ¶ë¶Vën»ºÖέ»¶«­ë¶m«»Õ]]׭ݺºmÛuµÝºmݺuk½uÛÖºÛÚmkÛ­ë¶ní¶nÛÚmÛÕu»¶mÛµn×mu»¶]·®íº¶ëº¶Ý¶Ö]½v[ݶnÛ¶u]·¶m×®¶[·µµënÕmëÖ¶ÛZm¯mçj½v]õj·Öu­ëZÛUw­­[m[×ÖֵͶn­k›­um»f³­m»jµum­­ÖÕµÖê\m[µ¶¶Ymk­ÕUkmµ¶e­Õ¹Z­ÕZ­µZm5›­ÚZÕj­V­U«µ¬åj5«U­Vµ6KËZ­UÓÒšUk5YUk5+Ó²Y+-ËfYYµ²ÊšjZZ5•U5-UÓ4Ó45e5Õ¤fš™ªJUÓTfª4SM™*S•e¦”ijJ™jR©)M©J™2S¥TLÓ¤J©”*M¥dR•TšR*É”©’¤I•RJªT’ª˜¤Œ*)™’JTI¥˜dRR’2)£()%™’J$ÉLR’¢$•T¡(%©EJJJ*"¥$%IR$U’D’T‘¤(…¥¤$‘$)©„$IE’%RD%)E‰’$…¢J”(I’RŠH¢D) JJIT(ЉR%%”(’"I)’D)$JEQ(I"%EJ¢ˆ%’"‘ E¡$J¢D!E)E”"JŠD¢’$%I‰HI¤(EQI!%JŠH*R"J‰"Q‘¤H)RDEEQ¤D)…ФERIJ$%)¥HTLŒRD©”¨H)I1*IJFQIRª$QIª¤”(•¢JRI*©¤”JJJ©’QJI™J)J“L¥¤TÊ”J©¢Rª2•¢R©,S*%¥fšdR¥ª’jR•“*«R¥JUª™*•É̪4•²Ìª4U©jfªJÓ2MÓL•ÕÔTSUµ,Ë´²šffe5ͬjfUÓ²ªU«¬lUuV“U«­¦–Vmµª6µª¶5+kåZ«U­Uµ­6ËZ«mΪÎÖ\uÕVµ­Õ\[µÍVkkm­ÕVíÖjmu­®®ºµ¶ºÚU»Õº¶ºÖ¶mµÖõÚš­ë¶®­Önë®Z»m«ÝÖuµîº¶v]Ûº­ÛV»íº­ÕnoëÚæÚ×­[k×í®v[·mÛv×Õµ»]ÛÕÞzëÚöÚuë®Ý¶kÛݶ­ÛîºnënW¯½®½¶[¯ëvkwÝ®î®õnk»Þ®õÖëºíÚnomÛº·m·vm·Ûmíºn»ÝºÖë­ëº]WwW¯íÖ­[wëÚµ[¯mݵn×µk½®m½µnÛºuk»º]ÝêÕkm·º®­Û¶Z·íZkëÚµ­muuÝÚVëÚ¶Õêµ¶­ÚV»«¶j[WÛºœµvµ­6g«m­®Ùª­­µju­Öjµµl«ÖZ­U­ÚÕªVÍÚjµœÕªUuÕšeÖª­š•ekUµYiemYÕ̲l5SÍÊYYfÕÒ̪ªªj™¦ªVSª¦²Y–)53-ÓT™ªªJSU¥ªdU•¦’iʬT%•™ªR¥R©ÒLÉTJeª*Jj2UQIUÊ”2*©*I¥*IIUª(ª”RI¥¨¤RIJ)©”¢UQRI‘JJE%RJI2IE¤ŠTŠ”%)IJQ•())¢”"I*Š(%I¢”(‘TDIRDQI"RRD%”(J$)‰$’¤$‘H’$$‘"‘H EФDQ(R"‰H %‰D’H’D$EJ$ E‘$‰ )"QD’BI’IRIŠ’„„¤¨…$ŠI‚"E‰ˆ)$‘"‰$¡(J$Q’”‰)Q"‘J"I"¤%I¤"Q¤H’PŠ’(”HQT"’ERŠDR”DEJJ‰R)‘’R¤PŒQQD*))’’’"%)¥"RŠJ%JQTRFIQRª$Q&•””TdJ•D)UJIÅ$SJ©UQ•T*©’2¥*)¥Je*eªÌ”dªL™ÊdÒT©RU©T¦¦Ê”ªL3¥™ªdYe™*3SY5•™jÊš–ª,«šª¬™¥ffYU­©4­e³Ò̪VÓªª¶Ì²Y³jYÕVµ¬Z­eµe6[Õê¬Y6窵iUk[­Z­ºÚ–ÕZk[-[«]«ÕV]]m­ÕºÚÖfm«kkkÕµ­[«Öm«]]­ÛZ×ÚÖ¶«­kgçÖ®k[­»]­]Ûµ®»Zw]í®v뺭]×¶×¶¶[wkݵ붭×umwk·mëvÛ«[×Þ®ÛÚk×ݶ^×[{íº[¯íµÝ­ÛnÛn»[·nw½n[wÛÛ¶nwë®×mÛíºÛvëv»íÖõzÛ¶×nÝî®uwm¯[o½vÛµ×kÛm×íºu»ÝµÕ½ívuÝ­½vÛµm{]ÛuÛµ]ÛÞº®®ÛkÛ¶µÝzkÛ¹vݶmkÛº][·¶]­×­umÝÖÕ¶íÚª[·®mµ¶]7[«Þº­jݶÚÚ¶f[ëÚZum«Õ¶®åª^m­ÖV«µµ­ªµÖ¶ZUÛj«ÚlÕZkekµr­•­f­YµUµª®fVµV¶šiµ¬U-³jM³ÊZMM­jiYM3­¬jZfffYMMZVMeU–™¥šš*-55¥™¦ÔLU™Ò4“™LS•J5•JMª*•25©RªJiJ¥T•T)Ó(¥Ri*J¥RªRT*™RI©”TIUR©(¥”RJJE)¥¤cT’TQŠRI’*Š’R*¥¤R¢$III)Ф¢$EIR‰$)IQQDEIR¤(QQD)J)I©H %FJ$Š”"‰¢D‘$* % %*¡"I…’DJ(R")DE’D¢HQ$‘$’¤PE(R’HI¤$B‰ŠB$E’D’H E‘$’D’¤ˆ$RDQ’„DJ‘D%)Q¤¢H¢D’BQ‰’BT”H”$’")‘$Q’$QĤHJRR"…©D*’DRI”$IRR$IJE”¤PEIR‘¤H)¥$¥2*¢Éd’)%©¤¢•¨””T‘JŒ1I•$iTIJ*•¤*J)¥4I©”RRMJJ)K&UJJM%¥1)K•Ô¨T¦L•R¥ÒT¥d¦ªbÊ*U©R•eª4eª¬JS¦ª*KSUeÊj¦ªJYÕšJfYÕ¬JUe«ªÊ²Yj™U3«¬¦eU«ª™U-kYµ¬ZU«f³²Y­jÕ–UÕÖªU¶Y­Z›U­ÖZµV«V›­Õªµ¶Z¶ÚÖªÕÙZuµÕV«­­¶Öjm]«¶¶Ú¶YkÝêªkuk«­m]­]uk[íêêÖÖÚ¹u­m]]W×®­sí꺭sµÛ®vukÛ®m[]wmWë­mÛµu[»îêÚvë֮뺮kwmíº]Wwm·n[ÛëÚuk»õÖuu·kÛnk»k×u]¯k»mÛº¾umív»¶]ÛöºÕíÚ]»®î¶­×u«×íÖÖëºnÛÖÞÚn]ÝîZ×m[×îÚÖ]Ûêv»mÙ®»mkݶº]·µµmÛ®­]ëÚ®«]çÖºmíjk×­µµ­W[ÛÚÖ¶µ¶m®nuksµ]km«®­[­Ö¶µ­Z[ëêj«ºº¶Vm­¶U;[Õ¶Úf5×ÚrÕV­ÕÙjV[­Um³ª®V›f­ÙªUmU5çl™UkY­YUkZU«Ö2ͲÍ̦ZfÕª™™YÕʪj©–YÍ4U3Ͳš43+«ª4SÓLSU¦¥™)3SMejª2•™™JM©ª2U)M©Ò¤©’©ª¤FSªJ©T©*©Jª”™Rª¨TUT)“©RJJeÆ(%•ª¤R$3•cRª¨¤”JJ)ª¨¤’ŠŠŒªHJ¥(I%£©¨¨”"F%©H©ˆ*I’ŠbT¢(Æ(IQ”¢”DEJTRDIEEI%E‰¢H*‰Š$*‘¢"ER¤$*Š(EQ"¥ˆ’()‘BIJ!IJ%R)Q¢(J¢(Š”(‰")Ф$‘¨D’I’¤D¢‰R"Q‘(*R"Q”E %IJ’’T •(IIŠJRD)T))’Q%RI)’ФˆQJ”$E‰ŠŠE%J‰R¥¤$QIŠJR”¤¢"Ũ")I)%I%J%I%E%%¥¤¢¢dRQIQ*•¤T‘RJ•¤T*J2SJEL•*F¥¢J©RJ¥¤LUIQ¦Ê”J)¥ªT¥¤R–¦JJ–šL•TcJM¥*™©JU%55©)U©¬ÌTšª,ËTi©ª©JÕLSZU•šZ™i¦©™fiYVUVUͪªJ«U­TÓ¬j3-ÍlVÕl™–5[Y­Ê–­šU³Y6›Õ¬U®Z«šÕZ«™µZ­ÖVVuµÎšÖ¬­ÕZ«j­[Õfµ¶ºÚ¬Z»Úl¶Z×V­U»­Vu«­­µÚÚU[km›«n­m­Úµ«®­º¶­uuµµmk]u]»ÚÚj¯u­®mkíÕÕÎÕöZ×ÚÚ¶õ:[k×kk[k×kë\Ýz]ÛlÛ­ÛZW×ÝÚ¶Ú­»Öµmk×u]Ûºµm»®umÛmm­×]íZÛµÛU×íj½n­»ÚnuÛÕµëZ×uÝÚÖ¶íÖÕ¶v»Öµ®íÚÕ¶íêÚÚµÞZëÚ­¶]W뺮µnëZ[×µ¶um]mçêÖºÖ®µº­­«­m­u[««µkk­®«­®®º®ÚVW[mmm­Z×ÖZmÕ¶V×Zµê¶Z«Õf[«¶Vs¶ÖrµU›µ\m­jµe³ÕVÕj­f«ªkÖÌfµj«iZ«ÖªªÍ*g³ªÖ̬Y-+[Ù*«ZY++[YUÕ²¥¦™VÓÒ,³*kšijj™YYšfZš™jª²¬¬RSf•i©2SÕdª¦4•i©2Uª©J¦©ÔT%U–™L¦2•šR¥R©*U)e2•ªRQšª¤J)•©TI*SJ*J¥R©R¢*)Ó$I©JJ©ŒRŠJ™JRTEÉ”RŠJ’©’¨¢¤QJ2**I)•$E¥’¤d”¤”¢’$“•¤(•”D)EªHI*’’Š’¤¤¨$2JIR¤¢$©(…T”¢RHQR‰Š$)%R‘¢EIJ’T$IRJ‘$IR)’)ŠRQ ‰J*’¥H”Š¢"IŒJ%E‰ŒR$EJRŠ’HJI)$©QIŠ•IIJŠR$I•(*R””R%II*%J•TŠ’¨I•¤¨DJ©(%II)©H%&©1¥T¢˜dRŠQQI)¥”””ŠJ&£”’4¥’¤R4)SŠQª¨Jª¥Lib’)UR•T“4F•R©ªHU1¥šTR™ÌTI•4ÕU)U5ª¤&SU%U%++e*UU%ÓLU*-Mcª)3MU©¦ÌªÌTifeiªª*3ËšIU5˦*MKkfªªeYVU³ªJ³Ö4ÍÔ¬ª³Ì̲VK«Zf-«U5«VÕª5Õª¶ªÙÔªÖZ6«iµÚlf­fÕ¶ªZ]¶lÕZ«YkÕZµl¶µZµZW«Umkkf«nµUkkV×ÚVµºZ×V­ºµUÝZ›­¹®¶ÖV]m[mmÕ®­®ÖÚÖÕÖÖjݶV[íÖV[ÛÚÖêÚÕ¶Ú¹ºv­vµ­µkתmWÛ®ÕÚ¶]­­kÛÚj×­­¶®ëÚZëÚµm­¶[ÛV»Úµkm­mw¶ÖÚ^]]mÛ¶6×uk›mëÚzµ­¶ºÛ¶jk[·^m¶ÕnÛΚmݵ­ÖÕÖ]u­mkµ[WmkWÛª[·ÚªÛÖjÝ6[­ÛVsµ[k«Õ¶­­ÕjÝ.g«µµ­­e««[k-Û\mÛjZ«ÝZ­Ysu«µfµÖÖV«Zm«µÚÊÚj­µªµVµÖY+«µ¶ZYµ®j˪֜­–f«¶²YµfÖjeµ™U­•5³eÕÊfÍ4«6K³ªV³Ê,gÍ43³™•UUµ©*˪Õ4™ªÕÊLM•ÍÒJ5UU3UU¦eešª15³LUªjª´Ô”ªªJM™ªÊT©iLUʪT™ÒT¦ÊTªJ©)U¥R©ÌR%¥43U’*•¦Išd2U)¥J¥TjTJI3©RdÊLI&R¥˜2©¢TR™’*…*UªHª“*©¤¨*R)%UJJª(%™2JŠRª$•¤$UQ’RI)QI%¥)©T•˜dR’¢T’”*‘¤”JRJ¤¤RI$•TЍ¤’$•$©)%I)EEJQRQ)’"UŠ’¢$©”¢H*¥PE*QJJ’R‘R¤”Š%¥”¤$ªH¥¨(JIE)**REQIJ*I2J*JEJI*)))I)%•"%ÉT‰¢’TJI))J¦’R¤”J))&¥TФª¤¨"¥1)©"™J)•”RfR¢J1™*)©J•’J*i*©”JªRIšJ)U*%“¥*F•2™š’4)K“I™*¥)U©T¦ÒT*¥©ª¢ª”¥¥T¥*“e–2Y*++•¦2Ó”fªª”eVfJ3SYM¥)ËZÊ4MMMUUSZVV•5•¦U35UUµ¦ªR­UUUUU­œ5•ZUk•–Uµšfe«liU«ªÕ¬©ZU[+M³ÙjYÕÊåªZ+kYkU[VÕ6«j«UËZu­¬Umµf«Yµ¶VµY˹Z]µ¬¶ÖV«V«¶­U³Vçjm-kµ®­j]µ6[[µµ­l­µm-kmmµµÍZ®k«­µªÛÖjµuµ¶ÕV]Ûªkk¹¶­®ÚUëV[gkkum­]ÎÕ¶­ÕÕºÚÖ¶Vm»¶jm[]»juku[íª®m­«­­®mµÕµµ­ÍÖº®®ÖÚÖ¶æZ»ºêjkëÚª]µk­m³Õ¶vÕ¶Öj[[×Z¹uum­j½®æl­m­µ­ZkÝÚªÕÚ¶Õšuµµ-[mm³ÕêÚl¶ºZ[«ÖZ[µ®5kÙ¶Zk«f³ÍÕY«Ym­µZ­j]­ÚªV]u6«ª[«¦µZµ¶fšµÙ–ÕÊf«U­Ö¬lÕj-«\µYÖªj³le³lÙÌZZÕª6SSkÙ¬*«–ͪlY–U«ješ–-«ªÊfZiÕ4MÕ¬¬*+«šj²ªš¥ªÌjªª¬LÓ4MS™Yš©*³2Uff©ÊLS¦šªJ¥fªª¤jª*iªª’¦²TUJUi*U©J•*UUJ•TM•J*S•ª¢R¥)SJURULUI*3%5ª˜*™R©’R™2©’dš4F¥¤2UŒ*IUI™¤J1¥T)%¥T©¨ɘd’*)•TJQ¥’d2I•UJJ%•¤¤*%))™LJ*JI¥L’R’J©¢¢¨¤J*ªHQ¥”’’’J2)E¥¨¨RR‘TJ)Ũ¨$•RQT’I¥$Q•¤ŠŠ”Rª$J&¥Š"•JIJª¨)“L*‘R%¥dT¢’RUD)•’J*É(•dRJ%)%U)**ISJ)IªRRI©¢TJ&¥LJI¥RR¥”T*ÉTE)©R©¢RRUŠJ¥*I¥*)¥IURJUR¥*E¥I•&•”šR•”ªT)M¦T*™LUTj25©”&5SÊT©LU©TYªRf*M•ª2e¦JU•©2•¥¦ªT©Zš*•šfVª’™e5URK+³2U––UYfª²ªUª*µªfi²Ìšei©–Y6M5Õ´ªªZU©™­¥©¬–µ2«jf5³¬VYͪ¥UÕVee­eÍ´ZV­jͪªÚZSM­VgÕ4­ºZµÒj¶U­šÕªUÛ¬²Ùª³VÙj­V³fmͪÖ6³jm«j¶Y«­ÚÊfk«¶fÖjg«V«ÖµiÕÚV«UíZ+[­[ÍVµv­V­®UÛª­Õf«mµY]u­ÕV«Ö«³j³®uÕVum¶UW[«­Z·Új­ÚÖmªµvµ®U­µu«ÖVµ«]®ZWk­mÍZ[ÛªµÖÖÚj«v¶êêZuµÚêZkÍÖÚVm­UÛºZU×Uת®ÖÚV­V·Õ¬Õ¶Úªs¹êªnµV®­UWk6[[m5kÕuÕrÖV«­5›UëÚªZÕµÕ¬VkkVµ¶UÍÖ¬¶jÍe«Zu­jV›­Zµš­jmYUk­VÓ¬Õ\¶*[³š³ªU­j«ªf­V6«ª­²™5«•Ù*[U®jVU­ª55³lVU­¦jjU›¦*«U³¬¬ÊªY•ÍLMÕlfªªªfÕ”jfUSUfUeSUZZ•e–©¦ÊªjÊTeÕTU²²²¦”ii™&S“e™¦LU•¦JÓ”™R3•jJU•RK•¦J©ªJMÉT™ªJ©ÒT¥’¦Ê2©Tª4M%¥JUUR)U•J•T•R¥I¥’¦J•dª’*•ª¤R©Tª’2i’©TR•RJSR¥Ó¤**¥Tª”ªH©LiTRJ•LªT”J©R2©”JR¥J)*©J©¤J%¥TEE©R%E•’ɘ¤R))U’*£$SI©’d*•”*)¥’*)©”*ɨ’”¦”¤’*•R*%eTE)•J*©¤RE%UJ*)S&I¥Tª¤¤T¥¤TJ%•*)¥JQ¥T)•¢’¦Ò(I™I¥RR¦J*©’ªTJ)¥ª””©”*¥”ªR)%U©Ì$UL¦&¥*%•ª*•˜ÊT•b²TU”¬J•*ÉÌTšTªTš&U)¥™*Õ(U™´ÒTR™ª©Rª25©¬LUIUU•¦T©©¦Jeª¦2•e¥ªŠeÖ”©L5ÕTUʬ©ÒTSU¥ie¦2kª,ÓJ3SÍÔLÕTS55ÓTKÍ2³¬²šª¬•e•YµL3Ëf–šeÍ2«ªš5SUmUUšµf™U¶¬ªÕ2³ªV«©iZ³Y3M­YË–•ÕjV­f•­iÕlU­¬5kVÕVͲڜ5-s¶YͬU«¶j–µUkU³š«¶fVµÚÚ*³ÖVµVk–µµj«šÕÖjÕf-k«µZµY³ºêšU­Ú¶¦e[®ÎZÕêj­Z«¹jkµ–µÖVkÖZÕµV«VÛª¶j[UWmÍf[Õºê¬\k«µj­ÖVmµZm­j[«j[m9k­ÙV«µj­nÖ¬¶Vm«V­ÕÕZµf«µµªÕÚjµY­µV­µj«Vk­5›Ù\«­™ÕZ«m–ÍÚjÕVµUmÕZ¶e«U«ÖY˪®µªV®¶YU­­eYk«j+«µjufUmÕšU«UµÚÊjͪÚjeÍlU›UµªÕ¬VÕª6K«V³VVµªÕ2kZͪ–Ó2«V­¦ªVÕffZ媖YYÕªV•ZÕªf¦™•­¬¦ªªVÕÊT5³ªeU*«ºÊ2¥Vµ¬©TMµª©Ò4Ëʲ*Ó4M3SSYUU𙩦ªªdÕ*U¥Òªe*U¦–Y¦Ie™eeªT¦•™“šiªJU&µÊT©RS™©JUÉ4M“LSšªL™ÒL©IU¦2ešT•4S¦L•RS©R©J“ª’ªRšª¤R•*S¥¤2SUQ2•YªDUª*©L%U©T¦Tª’4U*•L¦*&e¦RRU4©J©TJi*UTR5I“T©T•TeT)¥Ô”Š*™LeRJUTª*2iRªRR¥R%¥4•R*©L¥’F¥dš’I&U)eJ%UQ•R%M2™T%UJ•Rª”J•J)eªSšRE¥L•R¥”R•)¥L*M*“ʘL¥Jª’)M*•ª¤J•Ò”J%“¥&•’ÊÊT‰ªÒ¤&UR¥ªL©d¦T•2•2U%©,SIeª*•U)5S¦L©JSU’U¥ª¤ª*USÕ¤*“™¦*¥j*S•¦Ô4eª25¥šªTYYjReUIMËTU*«²*“šefªªTÙ2U™šjšÊ*3ËT5UM™UU%kY5©ªjfef©™šVVYe¥U5ÕLÍÔ²ª©ÊjeM™U3«*kf¦U-³2kfY5Ó²ªUÙ4³¬V5Ë´¬U3³ª–5˪Z³,«eµªVUUk-ËÌZÕjMi­j«jjZkUK«êlZf­YÕšeµj­²f«ª-›•µYÕÖTKÛle«ªÚVUkYµÖšfÖZµV3«åª³ie³-kU­µ¦e­µjÕª9kUgÍZÙj­ZµZ­V³j›ÕÊÙj¶l­ªÕ6+k­6kY«ÖÚ̬ÍÚªZ­ÖªÚZÕª­jµUÕV[VuÕjU[ÕVÕV­Z³VkU­ÖZVkÍj¶fUëÊVUk­M-³­Öªªµe­Z¹–«ªÍZÕªµj5«Y®5›–ÕjµUUÕ¶f™ÕjµšM³ªµÕÔ´juUÕ¬jÕUµÌª¶Z5U«V«U™­j5kZ™³VUËZVÕª3M­ªÕj¦fYmeÙ´´jÖ¬¬ªUÙ*›™ÕL­œUSe«ªÖ”UU«U¦™Vµªj)«ª­I“U«šYjjfUµ4ÕÔ̪ʪªjªlYš©™Zše–¥©™™–™š¦*›¥ªÒ´¬ªLUY6Meª¦ÊšªRU–UUVÒÔ4-3¥*+«*•išiRMe–fJUM¦ªªRjZ*KUª©4M¦)US¥²L•©Ì4™ªR©ZªTIÕ,5JUÊš•TUY–T¥4U–%•ªRZeJšÔT¥JcJÕ¤,UÉT¦&UJ՘̔*U%U•IUI•©)™Re“©Ô¤R¥ÊTÉ”©RÉ2•*¥J¥iRÅhªIeR¥Òd*U)™¦L¦T¦J©J•RUª¤J“©R&U¥T©²TJªRS©J’e™*%e–&U’™šR©”ªJ¥*¥*•*S•’ªÊ¤©’ªdjª¢RUªR™2•ª˜¦*•*©šª¤RefJ•2e¦&•IMj¦T¦TSjLiªÌ¤²T¥)S¦ªRšªR¥ªR•šÔT©ÊT™²2U©RUU©RU©ª²4)KË4•*3UUš)ÕdZfª’fefªJ©YUÕ”53¥J++ËT™fšª)555UZijš¬,³,5UeVSi¦©ijª©,«©Ò,³j2Õ̪²,M«²²²*«ªÊšiªi¦e–MUY5³´,«©)«U5Se¶lj¦¦ªÎªRUmMif5­²¦•f5˲–VYµ¬j™U5³i–Uµj¦–Õª–iUÕfÕ”U[VÍ̪Z³²še³ÊVÍÌlU­jfe«Z­J«Zm™Yµ¬Y˪Z-›YÙªÖ*³f˪UËjY­šÍ²fU­5³*[«–U«Z­¬æ¬fÕ²ªmiYÕf-kVÍlUk5e«Ö–YV«VgeY­V—Y™mV«fÍÌf­YÕ¬eU;­ÌZÕZµ*kUWβfV›5³ªµšZ¶ZÕªjUkÕªÉZm--³š³Y³´lµšVÕZ•-›µ¬ZÖ¬e9keÙªUÙZfÕªV3ËVÕªVÕÌZ9kš–ÕfMU­ZM+kYµªZ5ÓÊÖ²,k•µ²ZUͲj6ͲZZU«¥j•­j©¥5­ª–UÖ2«ZM–Õš©–VMÓªªeUVÕªfªšf-ËÒ²ÊZVU5–µ*[ªªªjËLeZ­Êª2+k¦¦š™•YY–USeUÕJ“YÍ,3UU3ÓLUU­RUfU5Ó¤šfYSª²f¦,«ª45MMeeU¥¬rZJ3e5U“j*«j2YYUi©ªRÖÌT¥Ò¬²ÒT©Ê²©Jfªªj&©¦i©ÒT™šÉ,Ueš*US™ª,Mc²2+U¥435¥ªLV–¥R¥išÌ”j*5Uª*Mš©2ei“i¦F¦²4U©”•Y¦TÅ43K©Jªš©IªRÍd¦4eÊÊT)KS™LS•ÊTiªJ©&Í”ªRU©”M¥*©©²R©*Uª¬R“J¥™f2iÌT•™2©ªJ•–ʤªÊL¥LS•RÍTªT©Zª¤)ÓL¥I5™ªÌTÊ,S©ÉT¥©*¥¦IS™iLffªL¦)ËT•*UeUªdš–ªR¥ªLÓTÉRM•©,3•ªÉTS©jÒ”f™*S¥e¦ÒT©¬ªR¥šª²ª˜²ª¥F•šf©ªJjVUªJSMUfeJÍÒLS¦ššª´ÔTU¥ijª1MÍLUUjj¦iÊ´ÌÌLU5i™e•©²©©ª¬,­ÌÌRMÍÔTVM3™Y•MSiVVe5U¦•UMM™eUË45YÖjJµÔ²*›©ÊªZ•™YVY5ÓR33«j™*[Ue-UUk¦ÌjfU5™5«jš¬ZeËLÓ¬ªYUUf­fš©ª¶jJÓjVUµ*3«ÖLMµ²fUUÕ²¦•eM³ªYVU+ËVeµ4«–UUm¦šVµªZZVµª•YUmfZVÕV–YÙ¬YY53«VMËÊ–Õ´ªªµ´Ìj6K«Êå̪j¦Í¬efUµYUÖ´še-³²UMËšeÕ¬ª55U[Ù23«–­ªÊY5«jZU«–ZÖ²ZZÙ¬¦–Y«ªY5U­6-U3›-Íʲe˲²eU­ª–Y5«jYÓ4ËZÓÒ̪ÚLËʪUË̬ZU5«²VVÕªªjM5ÕrÖTeÙªVUUiµZMUjZ›5U²\«f¦š²µ¬²ªjªZ«&MÕª³LiY­i¦¦ZYÍ,M«©šV™ÕLM3«Zj¦j•ÍÒÔÔ²¬¥š¦¦•USSV-+«,«¦²ª5¥¦fV9ÓTUfÕ¦ªTZ­i)3Õ¬iªªÊ²ªš¥&µ²•i*+«ª–©2Íj©*­Ì²²2³´4U3SUSeÖ”Yf–¦iª©2k*S3ÍÔT•e•i™jJ«©4MSUU•j™¦jL353Mejšš¦Ò,5UU©¥¦)ÓÒ4U™iš©ÌT3UUÊjj25YeV¦)55Ó”š©¦TKU©ª²²4•©j¦ÊTU•ªª™TU¦ZiªLi–e¥*UYY“ªJeUK™Ò4SMUª*5Ó”i¦*5M––©LÓT™¦Ê*SVš©JKS•š¬¬LS¥ÌlªJš*[¦RYZ¦©ª”i•e*SU5¦¦Ê,Õ¤ššª2ie¥iÒTS•™¦ÌLSef©23Me™™ÊÒÔÔ˜ª©ªR•eÕ¨ÊTÕªŒÉ̲¥*•ª–•©2USYU•Ì,«LSYZjªªÒLUU™iª©Ì´LU•ffZ*3Í,U5™–¦¦)3+3MeUU©)›¥ªÌTÍ,S™eeffªª&3++Ó4•U5U•¦šf¥™*3«™,Í´Ì4ÓÔTUÖ4U©eVSfš¦effš©ªšYª&«l¥©¬ª²eªJ«ª•)µÊV¦ªªªªšU©R«5U%ÓfÕTišYV3U™ÖRKMSÕ²²¬Ìʪªª™¦ªiY•YeUÕT53Ë,ˬj¦Ê–e–YeU3ÕÔÒ²ªª¦²Z5©eÙ,M3Ó¬¦ªiš–Y5MYK«Êª¦ªZUU•U³´ª&³ZVfe-U3µªš™ªfYµÌTÓ¬¦©ffUVÓÌ´ªl¦™–U63K³²jZfeeµ4ˬʖef–5Í,˪ªª6S™Y+«¬¦ªšVUÍRU+kZš©eUͲ4Íš––¦UU-Í2³fšš™55UUk¥ÌÊVUMšÍ̲²š²fVV5e٪ʲjªZfe5•Í̲*˦efše355ÕÌZª*k–Y•UU53Ó¬²j¦²ZYUfU63µ´´ª¬ªZª™™VÖTVÕL3-Íʦª2›™¥™™eV¶TUVË4K³Ò²*«©ªÊVš™š™Ve•UUeÚ,³TUÖ¬ªRÍ,˪¬šÒÌfš)³¦i¦¦j¦™™™išVY™–¥•eeU–YVYSi–U5e¥UY5U¥VYKU¦YUM•efUYM™™eVUY¥™i–UUª¦™fe©ijªªU©Ê²fšªÊʪªªJS«²ªJeU›&UZUµ&¥iV5Ó˜ªeYUiªªY™)³š¦ªÒʪ*3S³LËÔTS–-S•™Y™UUªšªZU*S«šiRM+³Ò,U5S5•eMU•ªZM¥É²V¦¦,«²ªªRÙʪJiVͬTj–YU•i©š¦©™¦ÌÊfÊÌÌ*-ÓL3UÕ4Õ¤•UUUiÊVUV*«ªjeªÔ²ª&KKÍÊ´ÌTM•³LU™YÕÔ˜¦™eU•ÌZV¦¦&­š©©Ì*«¬ªÊ4µ²Ê´ÔT3ÍÔ4UUMU“Y5MYj•Õ”¥YfZ•i™©™iZšfªjšiʪ™¦*+›fʬʚ&ͲjªL˲ªÊ2³2³,«,ÍÌL˪4MÓ23K3Í43M3-MSKÍTKÓLÕL3555SµÔ4MUÕ2KUÙLËT5UM3MUSS5ÍTMMU35ÕÔTSSMSM55Õ4MUU+ÓdÖÌÒLe5-U3USSMU3ÓTUÕ2MID3}TRCKÿþ2TIT2ÿþTest BopTPE1ÿþcyberixTALBÿþTest BoopsTYER ÿþ2022file-5.46/tests/escapevel.result000664 023540 023540 00000000101 14325247002 020471 0ustar00christoschristos000000 000000 Zip data (MIME type "application/vnd.nz.gen.geek_central.ti5x"?) file-5.46/tests/escapevel.testfile000664 023540 023540 00000021155 14015050417 021004 0ustar00christoschristos000000 000000 PKiŽ>{6ļ((mimetypeapplication/vnd.nz.gen.geek_central.ti5xPKlŒ™>Ä!'rcßprog00TÛjÃ0 }ßWè*Ëvì@Ø¿”2ö2ØØúÿLÛ±šf,”"ërtt¬dû¹_ïo¯/ÀÏv»~ÜÌÔã×÷çû~”§,H”©@Šr\I£E£¦hèѪQr˜˜¦Lj™|Œ9ÊOüldéˆ9qh…eòäÕa.ŒVŸ×J¡F ŸÔ|ÖÅaΔŒ•p=eËiÖB£ós©mT ‡¢xx„¼;½žÔêTº³4…ÙhlƒvLÊ$Š]…ƒÃ´«áЃÁ˜¶ shŽ‚Æ¶‡õwt@›arßvïÌý즧6­k“4uÑt÷ú*=&ÁäõÓ‘øavåS¯¥?j[~ÔŽ-Ÿiû]²Zч†à{#“î Ù˜(øáÝì°¤¸öb—2ššJ“P~çÇÏ(ÉÚP'F^"œózâ^5 Uõ–qUÿ±Un¼W¤/ïÃãìÛeÿNmû„m—öYûPKlŒ™>P켂card00xu@Síû÷D–A@@TDRj0@º%é”.éFiV¦8JÒQiFƒ H>Hläh%Ò!¿›çûüÞ?Þ?¾ï;ÆÙÙ9ç®ë¾®O,ö©¦%Ù-2B©¢,¯\ùÎH®c¤³Œø¸f¥¦$¹¸üËi.z ®º+zB Ý»ü¿¢¢sw\dñRxî¥ëfëåkéñ¢ôTMÉÞÍÓËÓÚÃÁÝ‹Mü¿À^G:a$V‘—ÕóËØÌÔpfR‚÷\äÊ«:« Hå¾3|°L+TBCc.Ì|7ú9ñUèØK%ñ>Ë kâ¶@òù·a]šf‚%î«BÄBѯ3©R_'ø0lÉ^ã°$&|ü޶’±ÖøàñGª~nï·ÓýËJoòÏC^Y"ÎÛC›‹Ë ö‹'ÜVwwiãg[÷y ¡×v„¨ e©#<ÿ\Ÿî´C‡Z²úMHÃB/ÆZ¯±&{²“„±­ØAþœŸÖÁ,Y)LÍÌæºß’ùâÛnÆÄ(Qeo†ô2÷]¼¶}ú’?<:ÞÙ»9¦y5{`D*KMøKw9òF=» ÅÜzXœÕ·khýö]äzk¿¼U.s=Š$ÌȃÿrN<Éá—Û¼f¦àÈ-.6`ûOkqð­ƒþÿ«©ÜáòýG¼ A˜ß~ã?cZÏådµ‘b°P›ãÊ›KÿLŽL\åkfèu6 ©åÕ ÿ­ëO.ÄyŸŸÙ\ ž•x²¼šk‚[Böĺ0NsWMzë$Ê6ݪ^² ìy®²eÍ“‘oŽi‹°±ª¢Úñ¥»ôZf1µ+«I(;-öÞº.)ö[ eà)HŒ î;ùð^Ò³¢i·Å»ôÙ0iþ«Â_ï•·FÊ'GŸUÜ'™µË%ƒ(odX€>Tì>^Áct%5Ôžþ䆇üRœ ƒùñu]dö¾§¦U¤&«~x’ü ƒ]daå¢UTôµì œA_‡És£„'ÄÒ *HMJn£ÿfå ™ßÏ/È2Ö.¹ìÜÁµcÎb! x]»e(q\¢õhŒî6+cuÊ€ËAá`êÌ[7t4™·8æš©@Q>‰Ç‘k5û6d+Ï?"ì‘A`j\Kj$3ì`¢ìGå÷ýO¶Íâ )Ußs8&jκrýngŒô„È8¹U<“ª4¼‚lNmoAPX"¨4üTˆMû±UojZi­¹'\•¥WQÓzYè¥sü¥½¾|ÿ)·ùîQ ÇŠ<ÓËí4¶õó†Ô©hò' ~-FÆ=³ç4ô”´•œáb« öò®²g‚ßXŠ[À$åêW¦N­dZ8¢"zøÈÎŽŒN’Cë¸ v¾ÿfõSþ¦ &Y‘•‰þl"üÎ_*0n´?·ð“É×¢A*çÕ ¤ÜLÚÈ Òº03³1ý­8lÑè=+g«7JŒ»ÎÔt- ³æ`ëÆví=Ü–_¯b9ááõàHr'0š"Ï ßž‡v#¨7:2ýˆ˜ãØqzS䀴\lb`Tâ6âÜíÆ@*íçû7ÿI?sB¢IÏLÖ˱'TU½4)šóùÙ»Þ÷GIP]D!³mÝ–&×äµN¹Ï‚ÖaHïcØ —…ÏïdDf¹)2~¶é\Q.=ô1¾g¤:"iKó·“\ÿ¼±\S’yÏR‡A$âûN@»\¬ÅNS§2%r…ÌŒ Üé';«7m¸‚oôÈåäDÂ}ÜD…U©åCçNn˜Ì~¿ÊáûÇ‚ßG8³7Wé^n*)R3O»÷2DKUä‹z(œã“ù ¾–l©±î&¦›áI~ëæ] Þø kjûâÏvFˆJÅÕ‡Ì{ŸôZä5ux;NøÉ“VRdˆ·p"ŽW¥ã “§Ä‡Ÿ˜§º4d©S¡ëÒ§IÜ<ø‡‘Úw}5A4F )DÄé¡÷#-•V¾Ö%‚&¸Ì¬4Ï+Õ)žÁļ~Rp'‘°Ápªröƒ°‚Ý{[òÏCÐÇ…¯ô½@;æl'ö*yÓÏ-±çn|SáÖ9¦ _XÙgï-›®2ãÁïcší”„¤>µÅL;°D±]CŒ1÷í1œÍ°·¼)Íê ½‰+ä{2åR(Ë©s¾¥gÖpð“º<Ö%=ªiCñB?ƃÌã”\ôe(î¾ ±Ýóé‡wô`Š:¨Ï’ú PÕ}hR8Sº:iÀ[ÙVÕúÈD—æú‰Ÿ~Wù‡ì¼AÞA@Ô-Ó<8Í»CÉ./¥É´ÇBo2U'§¦æXðŽÝ/Úïö{ÛžÎZ! ©nOØõAÛëÉÈ„y몹 ï°õ.DÛÔ¨¤:c´Au„ “!†Ú¬ÂÉüd!Ì÷ÛÄŽlåÌÄV+¤ôÑUûÖÉwöÙGc)pãb׊*Æh.s6Î4D³„/wk“À,©3oW9‡>D½k‘ZŸ¤w ÅîÓç¨B ÚÈ 3_–zì…+¼ŠµPˆ\9 yÒtqfô·_Þ«®ƒgf‡£ýwS?~Vz÷Пó#–÷ëÍ“ësu¡ICÍ%GOñ=+Ñî}trÖ–l*høãÑ÷[>V+òjÌ"l>Nãš¹:¯g¡]¬0ô$[òâÊ/^^‡Bw×oÔ§ÄÎE¡¢iã·d+àâ3òwk3ò¼ZÐòK].¢³-\ÊÙL+_`5ùGþ¸#™ææàâ»Ú–~º¬{æ[ç†é|'¡ -qò¹ùW{WwEgýzßã³ÅÅ”œ»© ¦>.·£ßF û.Ï1¿Iy À0U8×:¡¾è›)Cü{t­Pø ¶÷q­ZX#´ó/Ú(¦'ra㛬di|lµÁ?K20éѱ›5¯w,®LÁ¾ßý‚ Ñíª«I±â99í/”?‡uÕ%‚ø/0©ìísõÒg}Mûä+6®ä;K˜Y[Š5wKZ uãÌ5i/×ë÷½Oyhï´6ow£é„çº<.ÀùY«rKÄÔitWê> ü3µÁ ðÚX—2<]¾K€³Ð½ÛN|:öwôT½­€o‰us¡é$†ÝOêÝÿ '´‘FCýxyõ'WkbŸÕ¾áÃÍ}ói¯úÇö=È!æ=ÆN¼¦}/O#v€„(Š2=xŸk©äa¹jCœ)ÒÙÿde ü<2¦NÖ º®``ÚÈ"ıÚME¤È/ý¸w¼A÷XG.λnícxl?™ ïÃ[¢Òª”·z þ€t;ÿ¥ò¨Ñè¡'¯i@’€;•Æ÷’“¶mwRÔ9i_mm:™þi;BÁ/Ã[wÕß´³6—us¬<óÉë”(וáœ/Yi ¾#ôaãÖ ÷ªfÝ„OƒS25̉РEŠþ†§´M·ÿ¸E…,¼3˜.DIØViÔBmOÜ[³âc­­„B!@ºÏ-,bï4o¥ÀD8挞y®Ú°ÞûHZî2Q%õøáÇõر—³[iê”mª¶Ar÷Aø÷w’£Âa0‚ ¨ˆòLRÙ½ igº®[~^ªž‚'xÚš¯_m)Ч7°éôýX{Ûd+ÊKô!M!úŸ£#ÕéjzQW®F<Î j{8Ûò$'p&Qžà'ÿ%ó„®jÖXõ—™ËüݽpÖö•v>»3@1&“Rã"á–P‡>²ï6ú¸Ê‰øZ‹{•ƒ7{Mý®rXø—·‡0¾&º¾º”´ÊOÆ%ô{ó‡Ûg¢2í+¸I8æ#°õ×s¦Ú¼ÒÉ.à¹2wšs *ÐóÆ‘Ço¥»ŽoÊ@o¨.EÎÄV4Ê‹­.p(ŠÐ²è!h—ïŽV$vd¡köØ[üã00ë m<Ô Ê8›Ùƒib³}²XAUÕR&‘š%Õ’W›,+)9…v¯&ORמé/ø”ÁZŸòI>c4»Ù‘ˆh¶êÞzަP¿ó×_WBâ˜|®žážW|õ¹'RE(•0Zâ,Qóà3>ïç:‰\°Ý$Ý07¯Ë’R°:%¼hØÓâ…ç¦PµX;¸2GyZQv?ØÏÔ®º€JsIº¼¿ðþb\u°¸gé6ö©IS$ØÔ¡(Ñxm°tHÿ®ÄÅÖᜓjúAÛ¥f8ú¢&ú©E¾åÄëÿ˜àͤ}É-¡ÿ˜î(Eßi †¡QѯBO)ÏpwBQEOÃûr6îà•N^ÞÄäÈ ¿I„ÿ«H}ÿ_LºËÅõ¨æëyYúæ :T£¯§çQ\êæŸ¶ö—çJ­›Ë<¦±†ZeCTýÂÕ'Å×…öÒ¿"CD«Í£]s¤×[ž¹È¬œLåfŸôÔãðMX4lzI~Ø?Köš:@ÑÙ£pp"/÷»_Æ›yÆÌÎo±ípÜGsÍC5[6®›Í¥Eú«Ä™ú·–‹Íe~¯e­ÖÜXÔke¢äD‡X½g‹E ã3¾b` Ä([ < Ó9ðº»>L/àH Àõ{ÍPÍÕȳQÝ’½ðcQA·Ad€ÌpYq>žk~Z·ˆùÛes¼€i5©±.w¦ü\Sz?É4ô™ºswRB©ó3'ñ~>ˆ}ƒùºÔè#¿hf­5ë*€/áWüÖƒHHÌÚˆº½nüz²é#êmn EÙ8À¼ÕqÌj­C°ª’›ð?ÐÊàxpiuèpÅæ?_•sd­ëö|‹›Í|…6§]Y›Ë‹¸Šáž*ÌŸì\·tý QÉhñJ QÚÜkŽ®3ô/[¯2?é)'¦V( hõašÿ¥x%v³ÄZ‚P{òY+ëâðþ^<â™`iFþ-s>E‚‰´Þ(ºvd’½¨/à€< 1º“¥•ÍZ‘\<)6ÌIíI?õ´)\s3mçHá5«¹«G?à=ÎÁйÁfSù†Ü¥•-9½êŸ+`—›‚^¨]L¤¼¹¹÷©íaçüy$"ê÷í&¨ÃNÜúêåf?¯C ³ÕQ·¸#ÔÏS\Õ¯2Ž™‰çq:çÂ!'œ½ô’jG«[Â’ù§~;€f®–×Ý@ÏzêršÔi /ÝÍaçDÖ,j\éÙ¿ã'ºìÚþ¡Â-òå .ÎÆ-Âãå¼âê ¬°ƒAïhâæ ŸËOucn”p~ßµj xœ‘2è{g`œÄk –Ìíg¿õFÕPóÚø§écŠ%!n•—àƒ½ÿœlóÿ6þ„û·À9( BTO­d…c”èòÇ{&‚ŒŸ—,ÿ£ªüÀ¨³©W Ýk^ý…Ø_@wˆ›séýTt+VzÇwK‘¶’QÌ»ø°³ú“Øø û´Ï¼6Wõ±ÐQ[Nh£©–+.j@ßyÔ¡¹Ë–ˆ.|aK¢¿ãoRS…ÀÎR’—cYêgÀ~'”^Ð,‘éø•ÌÒ' tʲfÇVDúü¢ó“èÆ§?GvùçùPc´PΠ‘ð‘“ ï 1‚97HÈh“ ¢—§†×GPŸö”„H‘­—^¾¨çÈÞF@0ñÿðóËÕ¯ßÄ| <:ƒ=So±A»Pò¾‡rDºðPô@Wd¥]±çH ñïoH;Ðô2Æ o×­#'ë‘#Ȳ=# ­Om$!uÔ] ^öKû ÄÛšCœu…úÞ‡žLGjtЮJσ>ÿˆqDE¤-Â:dYYÏ«Êz[Iæ¿“Ó¼ªí|â³d)Ä¥]´•Œ§—óÿ.i³kÌzå(ßÉWX¶õÕÝéÞú¯»c·/‡××ÂàÊé¶Í&Z×µÚy <òmøLÖ¤pÉ­°|suôÜ’ñ]ŸIX¯ žšA†iJïxÎx ÷WV×Y‡{¥`gI ä§<:§[ã!GmJWñ—õ£‹ צíï×Ûíš•ÇMê¶ÌÆßê”U8jœ»:¶& ãë: }>–öæ™oAûŠžÜê"¾Ÿ1}ÛpxIû ’®ÏéB¤CœÇ+¦v/^ž\›9–Yƒ€—Š‚¦|ù‹°ÿPKlŒ™>í` æÖhelp00½XënÛFþϧ8UE\X¤IQ²äÈ,,‰mõEµåùI‘#‘0ÅQf†–…b!ªj,.lxÿȦ|ùöDÿ”‘a[͉PvK÷›–—ö¹Î©­sjVÐþE•×`¼ˆ=(‚ùÿNßðEˆXÿ„ª×ÀŸKÚ#Á x Ǩ†ÃøË©?¶þʱð+±œjH¿š0·­°IɚϵÓW€´Ô êŒ]ëOgƒ¡˜ãŸÏ¿äÙ Ç““}^¡t?`">‚¶Ù;t>²”ÇÕf~ö1Ñ8ÿEÞ;­Cûà  óÁÙåðŸ?ß\N|m*àûà¸_õ–kûƒ+Ï(~Ê3ûÖØë[ä2%ÝÖ3ò|¯^ Ï6žexÀcºâš“yΈÑnÛ-Óiµ[‡î#7¥Ûëz¾R³IÏìÚ½žÝqÚ'šcìùõÆÞ¯J¿ÎÊ‹aÛv+ßn9­'Æ`ìýâ¿ëÄÄz× ¦ôŽÔfHžáôš‹$Ã×Ãþ}µ*f‰¨WGô’øA\vd[ ~þô:ûö_„³«øZð¸nþͳ„»÷Jš…7ur5Çéãe¯èëN§í¸ÝŽéöZñ¾}qsGBv ”£ê• AŽ4x> ÷{Àu?#jµ.xKGátm÷ðÐì9íÍéñ¨I ä‚Ê×Y3šQùNµ%LPwØêŽü äC¤Ü؉2Î¨Þ !.¨Ú¸ ãŸþ©—QÑ·N= ÷Bº–DÓœa¦Ë')ˆFÂÍ”ˆÁMú¹Î‘£‰ÈY&2'ÀoKn8‰6‡å;šâUE7„º¨8÷±bW²^Šô ^·ZES”‹ŠpM}u8†HŸ8&ìN™WÁbwx¥Á$—(ª®_˜L-§öòႊ Y$3åøø&Þüxn•¯ö l?– *>4†Þ¹2±olni"¸Åö„tÌΡët7û]p<,ªÑßÎkÀÃC§Š¼h›'q?Z¿ŸÂÄáÕ6Ì3Œ( ‰åQz•;¦£j¤äµóGž´[ž@E¶œ=iù)¥`QHã‰`¶¯ôU úŠÌ®.«8uÑØMÛ•Ÿ,ý¿PKiŽ>{6ļ((¤mimetypePKlŒ™>Ä!'rc߀Nprog00PKlŒ™>P켂€Õcard00PKlŒ™>í` æÖ€{help00PKÒ…!file-5.46/tests/ext4.result000664 023540 023540 00000000173 14325247002 017417 0ustar00christoschristos000000 000000 Linux rev 1.0 ext4 filesystem data, UUID=d32bbb08-3a76-4510-a064-3045f887dbdf (extents) (64bit) (large files) (huge files) file-5.46/tests/ext4.testfile000664 023540 023540 00000004000 14032375551 017717 0ustar00christoschristos000000 000000 fÜ -Öi`ÿÿSï-Öi` €<ÂkÓ+»:vE d0Eø‡Ûß®ï²oá2I<‘¸bΞÂ@ -Öi` ó!#ð4#Maƒ file-5.46/tests/fit-map-data.result000664 023540 023540 00000000203 14325247002 020771 0ustar00christoschristos000000 000000 FIT Map data, unit id 65536, serial 3879446968, Sat May 31 10:00:34 2014, manufacturer 1 (garmin), product 1632, type 4 (Activity) file-5.46/tests/fit-map-data.testfile000664 023540 023540 00000037201 14015050417 021300 0ustar00christoschristos000000 000000 Žq>.FITC@Œ†„„„¸©;çB\ì-`ÿÿA1„ÿBý††H\ì-Cý†Œ††††„„„ „  H\ì-¸©;çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿÿÿÿH\ì-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™6ÿÿ ÿÿÿH\ì-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿDý†H\ì-ÿEO ý†„„„ „H\ì-ê1Ž'Á2µFý††††……H\ì-€Cá- )ê-ÿÿÿÿÿÿÿÿÿÿGý†……†„„5H\ì->âª&€ÜÿýŠ <S\ì-nÛª& ÒÿýŒ€ ‹<Y\ì-/Õª&ÑÆÿýù| ˜ Q@`\ì-Ϊ&ëºÿýù€  Pg\ì-@Ȫ&ñ°ÿýì!  Po\ì-ܪ&v¤ÿýa*” € N@v\ì-ÇĪ&:—ÿý{2œ Ø N}\ì-ØËª&‹ŒÿýI;£ ª O„\ì-Óª&܃ÿýC® Ø PŠ\ì-çÚª&|ÿýÜK½ ë S\ì-ãª&[wÿýöSÄ H P˜\ì-Jëª& oÿýä\¼ € OŸ\ì-Zóª&JfÿýÊeÉ H O¦\ì-júª& ]ÿýnÆ R O­\ì-þ«&\Sÿý6vÓ # N@´\ì-»«& Iÿý¥~Û þ O¼\ì-Q«&†?ÿýa‡ä ë O@Ä\ì-«&.6ÿý1î — N@Ë\ì-©«&_/ÿýK˜î i M@Ò\ì-Ö&«&æ'ÿýì ë i QÙ\ì-×/«&!ÿý#ªó ³ Qß\ì-Â7«&Mÿýû±û  Pç\ì-0@«&Èÿýºõ H Q@î\ì-‹H«&ÓÿýöÁý â Q@õ\ì-ÞQ«&—ÿý²Ê Æ Qü\ì-¾Y«&ŠÿýŒÒ Æ P]ì-ib«&K!ÿýÛ# ¼ P ]ì-k«&l#ÿýµã$ Ø P]ì-Ùt«&"ÿýkì$ Ø O]ì-ø}«&zÿýõ% Æ O"]ì- ‡«&Ñÿý²ý/ ª O*]ì-^«&=ÿýœ8 — P@1]ì-瘫&Æÿý" — Q@9]ì-á«&×ÿýä Ž P@]ì-uª«&Ñÿý r P@G]ì-í²«&[ÿýê&ú i Q@O]ì-G¼«&ôÿý½/õ _ Q@V]ì-ÝÄ«&kÿýÇ7à _ P@X]ì-4Ç«&gÿý :á _ P]]ì-òÌ«& ÿýýAï _ P@d]ì-Ò«&t-ÿý¸Jû — Q@k]ì- ׫&:ÿýS ¼ Q@r]ì-øÞ«&7@ÿý.[ Æ Py]ì-æ«&CHÿýc Æ Q@€]ì-‰í«&žPÿýŽk. Æ P‡]ì-›õ«&æTÿýps9 ¼ O]ì-¼ý«&ñXÿýW{> ª P—]ì-I¬&›^ÿýáƒ= „ Pž]ì-³¬&Äcÿý2Œ8 i Q@¥]ì-ˬ&µkÿý”7 i O¬]ì-ü¬&9sÿýô›B _ P³]ì-%¬&Ðzÿýƒ¤R _ Oº]ì-e,¬&‰ÿýZ¬X i PÂ]ì-ý3¬&‰ˆÿýe´O i OÊ]ì- <¬&þŽÿý²¼K C O@Ó]ì-gD¬&½•ÿýLÅ@  PÜ]ì-%M¬&z™ÿý·Í? ï N@å]ì-+U¬&Q¡ÿý[Ö? · N@ñ]ì-™]¬&ä¥ÿýŸÞ6 Z Mÿ]ì-0f¬&¬§ÿýóæ4 Ÿ K@ ^ì-„o¬&»¥ÿýÆï5 & O^ì-x¬&§ÿýË÷< M^ì-'¬&8ªÿý‡G  M@#^ì-.Ь&§ªÿýöT N@,^ì-œ’¬&v­ÿýþY N@4^ì-š¬&âµÿý?n L@;^ì-¡Ÿ¬&¼ÿým{ & OF^ì-m§¬&Äÿýî'“  H@Q^ì-†®¬&"ÌÿýÞ/ª åI[^ì-(¶¬&Òÿý²7» ­L@d^ì-¿¬&sÖÿýV@Ì ‘N@l^ì-úǬ&·ÙÿýËHã £N@u^ì-mЬ&¥Ýÿý÷Pö ¿N@}^ì-¶Ø¬&iàÿýÙX ¿N@…^ì-xá¬&Måÿýka ÛO^ì-7é¬&Æêÿýâª&€Üÿýô¬&‡óÿýT T §t ô¬&‡óÿý ª&kÿý¡‹ ì sÿÿÿÿÿÿÿÿ ÿÿNTÿÿÿÿ7ÿ¥^ì-÷ü¬&FùÿýI}f åN­^ì-»­&§þÿý#…r ÛN@¶^ì-¤ ­&€þ2ƒ ÷M@¸^ì-x­&þ‰ ÷M@Á^ì-­&ÿ þ—š  OË^ì-«­&1þ  N@Õ^ì-±'­&°þ¨¸ ÷NÛ^ì-.­&þç­· ÛMá^ì-ÿ3­&¢þų¹ åMê^ì-T<­&‘þØ»µ ÷L@ò^ì-_ì-´‚­&ë)þóÿf bL@E_ì-¶‡­&)'þ×\ =L@N_ì-UŽ­&H$þH L MX_ì-\—­& !þÚ@ ûO@b_ì-埭&­þ(. Ol_ì-;¨­& þ,$2 K@u_ì-f°­&ËþQ,A M@|_ì-g¹­&4 þ=5X !N@ƒ_ì-Á­&–þ2=` uN@Š_ì-‚É­&þEt ÒM@‘_ì-­Ñ­&ÍýÿývM€  O˜_ì-ÕÙ­&­ùÿýhU‹ g N@ _ì-:â­&¥òÿý!^„ © N@¨_ì-Çé­&’ëÿý.f‚ Î O°_ì-\ò­&æÿý±n ê M@¸_ì-û­&ßÿý±wu  P¿_ì-V®&è×ÿýˆg + Q@Æ_ì-# ®&áÖÿýÕ‡q G PÎ_ì-l®&SÕÿý„ m QÔ_ì-¡®&ÉÊÿýñ˜  N@Û_ì-š®&k»ÿýá Á Oã_ì-"$®&2°ÿýª ï N@ë_ì-ê+®&­©ÿý¢²”  N@ô_ì-¤4®&f¤ÿýR»– Ý N@ý_ì-=®&¿¤ÿý=à · O`ì-‚E®&$§ÿý2Ë  N@`ì-MN®&R¨ÿýtÓw G N@`ì-QW®&b¤ÿý6Üw  M@!`ì-‚_®&µžÿýqä~  M@)`ì-h®&È™ÿýäìˆ ê O@1`ì-âp®&•ÿý€õŽ ó O@9`ì-4y®&’ÿý‚ý  P@B`ì-U‚®&ÿý0›  OK`ì-S‹®&dŒÿýÓ¡ ý O@S`ì-ÿ“®&Ú‡ÿýJ¬ ó O[`ì-°œ®&†ƒÿý¼®  Ob`ì-³¥®&Öÿýa(Ì  Oi`ì-_®®&1|ÿý±0Ø > P@q`ì-¶®&Àwÿýµ8Ó c P@x`ì-î¾®&ÁsÿýÓ@Ô v Q@€`ì-ôÆ®&ClÿýDI» ‰ O@‡`ì-iÏ®&’fÿýÂQ › P@`ì-Ì×®&S`ÿýPZÄ ® Q—`ì-,à®& [ÿý¢bÎ · O@Ÿ`ì-Bè®&6Wÿý~jÊ ® O¦`ì-+ð®&·Qÿýƒr ¥ O®`ì-ø®&QJÿýäzË ¥ Q¶`ì-Ýÿ®&ãCÿýì‚Ê ¥ PÀ`ì- ¯&!@ÿýÉ‹¦  O@È`ì-õ¯&A?ÿý%”¤ m N@Ð`ì-©¯& >ÿýJœ¯ c O@Ø`ì-¤#¯&k>ÿý®¤° Z N@ß`ì-Z,¯&Ð<ÿýø¬ª c Pç`ì-°5¯&¿:ÿýĵ§ v P@ï`ì-÷=¯&×6ÿý½§ ‰ O÷`ì-2F¯&Z2ÿýÑŪ ‰ N@ÿ`ì-—N¯&ñ,ÿý5δ  N@aì-/W¯&Ì)ÿýaÖ» v O@aì--`¯&¢*ÿýÐÞ m O@aì-¬h¯&Õ+ÿýÜæÉ m Oaì-uk¯&#,ÿývéË m O@aì-^ì-qõ¬&2ôÿýuk¯&#,ÿý[¼ [¼ §tCuk¯&D2þqõ¬&§)ÿý˜Ú  P:ÿÿÿÿÿÿÿÿ ÿÿNQÿÿÿÿ?@ÿ#aì-t¯&ö)ÿý°ñÊ G O,aì-À|¯&ê%ÿý úº + N4aì-|…¯&0#ÿýVà  M@ L@Ãbì-t°&n½ýý¡Yb› L@Êbì-:o°&ý±ýý£anÊ L@Òbì-j°& ¥ýý3jrù NÚbì-Fe°&1˜ýýƒrwæ Oábì-Gc°&HŠýý¸zsÓ Nébì-º_°&‘|ýý ƒt K@íbì-Â]°&Ewýý‹†t I@÷bì-ÖZ°&­iýý™Žm Kübì-¹[°&`ýý”†ó Mcì-a°&ZSýý—œŽý O cì-Ÿb°& Eýý¤—" Mcì-Nb°&™5ýý­ " L@cì-þb°&“.ýý±© K@cì-êc°&7*ýý‘³± K%cì-_i°&„ýý¼»Áê J.cì-Il°&}ýýêÃÓ× I@7cì-Ån°&éýýÔËÚÅ J?cì-j°&(öüýæÓβ MCcì-Þj°&êîüýâ×È» OLcì-°n°&àüý~àÇÅ KUcì-t°&5Ôüýáè¾» K@Xcì-u°&~Ïüýç븻 K@]cì-Gt°&Èüý@𮲠L@^cì-)t°&“Æüýñª² L@ccì-du°&>¿üýIõž© I@kcì-x°&*²üýý L@scì-Ó|°&J¤üý«Œ O@{cì-‚°&<—üýP‹© K@}cì-ƒ°&”üýF…² K@…cì-?‡°&õ†üýŒ…Î G@Žcì-yް&~üýÙ yÎ M@–cì-¶‘°&qüýÎ(XÎ M›cì-Ô‘°&1jüý•,R× I@¥cì-b’°&™[üý¦4KŸ I@­cì-Œ“°&QüýŠ:Dz J·cì-˜°&XDüýøB:9 F@Àcì-Ä °&€?üý|K2& IÉcì->§°&í5üý|S MÓcì-Ь°&2+üýO[ý  K×cì-Ю°&ê&üýL^ó W@×cì-aì-ql¯&î+ÿýЮ°&ê&üýf± f± §tQЮ°&î+ÿýql¯&ê&üý¤ù ?5ÿÿÿÿÿÿÿÿ ÿÿHWÿÿÿÿU@ÿàcì-x¶°&Æüýgä ÛW@écì-½°&”üýoß îJêcì-ý°&ÞüýÑoÞ îJöcì-äÀ°&•üýñwÏ ¿Kdì-Ù¼°&Hùûý±€ uH@ dì-Ƕ°&Íîûý¹ˆ½ kG@dì-%²°&‰áûý=‘´ ;@#dì-ˬ°&qÕûý¶™¨ ßG,dì-ާ°&bÉûýô¡› òJ4dì-L¢°& ½ûýVª‘ *J I@Âdì-RG°&þDûýˆ†  KÌdì-ß>°&ÎFûý¬$m ‡K@Õdì-ð6°&Kûý¼,_ YN@Ýdì-{-°&ÃKûý”5R ‘N@ådì-r$°&›Lûý >F  N@ídì-ư&–Lûý&FA U O@õdì-¿°&lIûýÇNB g Pûdì-Ü °&!CûýßVF z Q@eì-8°&û=ûýn_M Å P eì-$ù¯&AûýõgZ × P@eì-7ñ¯&ÔEûýÌoh ý O@eì-Äè¯& HûýÂwk 5 Oeì-߯&ŠHûýP€m G N@&eì-}Ö¯&LCûýH‰n m P@.eì-ãͯ&¡>ûý‘l ® P@6eì-¢Í¯&³.ûý*š` Á P>eì-·Î¯&¬ûýú¢Q Ê P@Feì-¬Î¯&œûý½«D Ê O@Neì-=ϯ&uÿúý ´E Ó P@Qeì-½Î¯&’úúýú¶G Ó O@Weì-ɯ&½öúý7¼L Ê M@^eì-úÀ¯&ºòúý…ÄQ ¥ N@feì-.¸¯&oóúýÅÌW ¥ N@neì-¯¯&2ñúýwÕQ ¥ L@ueì-Â¥¯& òúý!ÞP ® Q@}eì-ͯ&üùúý¶æY Ó O…eì-`–¯&eûýïY Ó M@eì-ÞŽ¯&4 ûý¬÷\ Á O@–eì-0‰¯& ûý}ÿ_ ® N@—eì-Ÿˆ¯&Jûý _ ® O@¡eì-ò€¯&4ûý _ Z O@©eì-Ów¯&å ûý÷ f " L@±eì-uo¯&?#ûýÔ g " O¹eì-Èf¯&öûý! `  O@Áeì-;^¯&ûý ) S " M@Èeì-³U¯&Sûýé0 J + N@Ñeì-ýK¯&ûýÜ9 7 G M@Ùeì-|E¯&ûýüA ; Q Nãeì-¿>¯&Wûý;J B 5 Iîeì-‡7¯&cþúý†R P ê E@÷eì-+0¯&YõúýøZ \ © Mfì-º)¯&µêúýRc h M@ fì-%%¯&úÜúýl n g Mfì-.#¯&ÖúýOp s g Ofì-Œ ¯&=Ëúý¬v { ^ L@!fì-ů&õ¿úýç~ ‰ & J'fì-g¯&†¹úýƒ  L@/fì-¤¯&h³úým† › Ò3@Bfì-̯&|¤úý³Ž ¸ º4Lfì-U¯&m•úý}— ¾ ]I@Tfì-Ÿ¯&Èúý­Ÿ ¾ yM`fì-³ ¯&{úýí§ É º5@lfì-m¯&[núýì¯ Ò ž7yfì-L¯&aúý¸ ß o8@~fì-A¯&]úý€º å ]7@‰fì-Æÿ®&þQúý Á ó 7@fì-ÿ®&aMúý©Ã ü ö:fì-Àû®&Ç?úýÎË  ™7@§fì-Oõ®&Ø8úý÷Ò # }9§fì-Øcì-~¯°&ó%üýOõ®&Ø8úýÕû Õû §tt„Á°&ó%üýOõ®&Ø8úý’¼Ý =hÿÿÿÿÿÿÿÿ ÿÿIZÿÿÿÿX@ÿ³fì-ì®&›4úý„Û 0 =@´fì-Öë®&Ç3úýGÜ 1 =@¹fì-³é®&p/úýkß 4 ™=@Àfì-êé®&{'úýÖã : ¢9Ìfì-/ì®&úýì B ™;@Øfì-°ì®&k úýô K ¢;@Ûfì-+ì®&úýæõ M ¢;@ßfì-!ë®&°úýtø P ¢8@ìfì-Ûç®&„õùýF [ ;@õfì-Då®&ãìùý  d }7@gì-Öä®&JÞùý¬ u t9 gì-óà®&ÓùýÉ … j9@gì-ÜÞ®&¿ÍùýN ‹ j7@gì-XÜ®&¶ÆùýÒ ’ j7@(gì-o×®&`ºùýø$   N8@4gì-"Ò®&Ì®ùýû, ¦ E9@gì-ùË®&™£ùý^5 ž j8@Lgì-¢Æ®&˜ùý\= œ t:Rgì-Ä®&„’ùý3A œ }9_gì-¿®&>†ùýfI › t8fgì-™½®&*€ùýúL t6ngì-p»®&æxùývQ £ X6@sgì-0º®&ïsùýiT ¨ E;{gì-5·®&ëjùý Z ¬ <9‡gì-$³®&†]ùýDb ³ X:–gì-¯®&þOùý¡j ¾ X7@ gì-Щ®&?Dùý¨r Å EG@©gì-„¤®&Ç8ùýŸz Î }L@±gì- Ÿ®&.ùýl‚ Ò ÈM¸gì-‹š®&G%ùýĈ Ô K@Àgì-6•®&¤ùýÒ Ò SMÉgì-‚®&@ ùýi™ Ó §L@Ògì-I‰®&üùýà¡ × òK@Ûgì-Rƒ®&Y÷øýí© Ý *Mågì-–}®&|ëøýW² Ý FMîgì-:w®&Xáøýxº Þ YKógì-Êt®&õßøý༠â bL÷gì-âu®&lÞøýz¾ ä Yúgì-v®&uÞøý§¾ å =ehì-u®&Yàøý„Ã Ü 6ƒhì-¦r®&EæøýrÉ Ù OwŒhì-gp®&öøýFÒ Ý 9 L”hì-m®&#ùý˜Ú å g Ohì-Íi®&ùýFã ø » L@¦hì-of®&Q ùýë © L@¯hì-sb®&×-ùýaó +U L@·hì-ó^®&;ùýMû 1K NÁhì->[®&Iùý¡ 5/ L@Éhì-@W®&(Vùý³ = M@Ïhì-ÞR®&àbùý¾ ?U P@Öhì-àM®&#pùýg Hc Q@Þhì-G®& {ùý% N O@æhì-'@®&—„ùýc- J O@îhì-$:®&íŽùýY5 Lï O@ùhì-ð6®&)œùý2= B Nýhì-ç5®&€ ùý¿? >ƒ <iì-0®&¬ùýÕG CšM@iì-Ñ)®&•´ùý%P Q¶Miì-š!®&F²ùýùW U÷J!iì-ç®&_¶ùýg` R M@)iì-_®&°¼ùý;h G/ O2iì-; ®&vÃùý­p CU M@;iì-<®&ÈÆùýUy A^ L@Ciì-m÷­&žÈùýœ >g K@Kiì-Ýí­&ÞËùý¶Š 3ƒ PQiì-lä­&ÁÌùýˆ“ 0© PXiì-Û­&ÂÏùý]œ 4n R_iì-‡Ñ­&Òùýq¥ 5¯ Ofiì-È­&^Õùýe® 4Ë Qmiì-m¿­&’×ùý‘¶ 3 Q@tiì-¥¶­&ŠÚùýô¾ 5n P@{iì-Э­&ØÚùý3Ç 3? P‚iì-.¥­&ôÜùý^Ï 0 P@Šiì-'œ­&6áùý!Ø +â P@‘iì-+“­&“äùý·à &ª O@™iì-û‰­&åùýWé ª Q iì-E­&Óâùýñ „ P¨iì-Cx­&bßùý3ú r N@¯iì-]o­&àùý‡ ù C O@¶iì-'g­&6Ùùý( ñ r P@¾iì-$`­&ÕÏùýx ò   O@Æiì-9X­&xÇùý7 ð V PÎiì-|O­&¯Äùýˆ$ ñ ' OÖiì-ÿF­&Àùýç, ÷ ï OÝiì-BA­&¹¹ùýC3 ó Ó O@æiì-9­&@¿ùý{; ñ v Pîiì-c0­&Åùý9D í Q P@ñiì-t,­&jÆùýêG î Z P@ñiì-¨fì-‹ô®&]8úýt,­&jÆùý½Ø ½Ø §tJ‹ô®&]8úýt,­&eÝøýˆxW @ÿÿÿÿÿÿÿÿ ÿÿ;wÿÿÿÿ~ÿøiì-y#­&Éùý_P ì · Sjì-.­&rÈùý Y ô ù P@ jì-W­&^Èùý^ ù Ý jì- ­&úÒùý‹g ý Ÿ L@jì-­&ÂÚùýso ø  M'jì-S­&>áùýØs è Ó 5jì-Aþ¬&pìùýÐ{ Þ © M@jì-.ú¬&éøùý̃ Ö •Hjì-µõ¬&Aúý¨Œ Ø ¥ M@Ljì-Äó¬&‹ úýœ Ù · O@]jì-¸ë¬&õúýð— × äDejì-4ã¬&Eúý  ã OL@mjì-ÛÚ¬&íúýH¨ ì îK@ujì-WÓ¬&Uúý° ð z L@Šjì-Wˬ&[%úý›¸ í ’jì-sì&à-úýQÁ ñ ó Kšjì-ù»¬&é5úýÉ ö G N¢jì-´¬&?úýqÒ ù Z N@©jì-I­¬&#Húý~Ú ó ’ N@±jì->¨¬&|Oúý­à ï Á MÆjì-O£¬&ËYúý…è ò  KÏjì-z¤¬& húýžð ð  K×jì-O§¬&Óuúý•ø ð  G@ãjì-†ª¬&Zƒúý ì B ;òjì-q­¬&ˆ‘úýÀ ð 6kì-.°¬&çŸúý ó N6kì-ø°¬&K¢úý… ô 24kì-–³¬&~°úý­ þ \0#kì-õ´¬&+¿úýÆ" I8+kì-³´¬&$ÆúýŸ& 63@;kì-Ù¸¬&‹Óúýø. 63@?kì-µ¹¬&Ž×úýZ1 @6@Lkì-¸¬&’æúý­9 ¦8@Zkì-œ¶¬&¬õúýB &6hkì-6·¬&ÆûýbJ 0 7@lkì-z·¬&'ûýEL 4 4@qkì-4¸¬&‰ ûýÅN 8ñ0}kì-¼¬&óûý'U CÌ3‹kì-¼¬&>%ûý—] MÌ5@”kì-½¬&4ûý³e YèF›kì-À¼¬&vAûý(m a)K£kì-Ú´¬&0Hûýnu h™L@«kì-׬¬&ŒLûýH} p K@³kì-ߤ¬& TûýÇ… ofMºkì-7¬&ôZûýÝ oÃL@Âkì-&•¬& aûý– e*M@Ékì-<Œ¬&aûýyž XuPÐkì-cƒ¬&ù^ûýΦ KÉP@×kì-{¬&¶^ûý®® A K@ßkì-Úr¬&gûý—· 5g L@çkì-Ïj¬& lûý»¿ 1© K@òkì-œb¬&çnûý¢Ç "– Hûkì-¸\¬&¸zûýJÐ $g Ilì-fZ¬&)…ûýfÖ )g Nlì-áW¬&8‹ûý—Ú -q Klì-ïP¬&a”ûýÅâ +g Klì-ØK¬&b›ûýöè ^ K@lì-&K¬&7Ÿûý/ë K J!lì-ÏH¬&¨ûý ñ » ?$lì-}I¬&«ûýÚò ó K/lì-sC¬&´ûýaû ¿H@7lì-B¬&¦¼ûý:!‡CElì-b=¬&fÇûý¥(ö5@Mlì-d:¬&tÊûýç +<5@Qlì-Á8¬&4Ìûýµ ,Þ<`lì-t1¬&·Ôûý5-4@ilì-7*¬&½Ûûýå>¦H@klì-ü(¬&5ÝûýG?ÞJylì-%#¬&ÍçûýY&GÌ6lì-# ¬&´óûý‘-P}H@‹lì-Û"¬&Ëüý26Y‹IŒlì-K#¬&_üý&7Z•J˜lì-é(¬&:üý{?_<¤lì-}*¬&%üýSGa]7±lì-l&¬&h+üý¡Oq¾7ºlì-8 ¬&5üýyW~äGÂlì--¬&<üýï_…yJÉlì-5¬&ø>üýxh…šM@Ólì-¬&/Hüýíp‹× NØlì-t¬&ÜJüý½s 9@Ülì-ެ&¢Müýv 6ìlì-1ü«&EUüý0~Žö4÷lì-Þõ«&_Wüý7„“25mì-àí«&âTüý‚Œ–ª,mì-ç«&µOüýx“¡SI@"mì-Ûå«&lRüýk•£ÃH%mì-<å«&7Uüý —¨ÖH)mì-3å«&KZüýЙ¬ž5@2mì-ºç«&ÍeüýŠ ­fK@6mì-?è«&¶küý⣰]G:mì-ç«&©rüýϧ¶fI@?mì-æ«&à|üýz­½ºH@Gmì-è«&‰‹üý¹µ¼¶L@Nmì-fê«&b–üý¼·K MNmì-òiì-+­&ÑÆùýfê«&b–üýI% I% §t\+­&b–üýå«&ÑÆùýL Bÿÿÿÿÿÿÿÿ ÿÿ;SÿÿÿÿuÿWmì- ì«&!¥üýRÄšB ]@^mì-î«&y³üýTÌ‚^ M@emì-Öñ«&,ÂüýéÔyý P@lmì-mó«&ÒÑüý“ÝoÊ Osmì- ó«&&áüýôå[M L@zmì-Lò«&ÜñüýïE— O€mì-ðð«&1ýý÷7V Q‡mì-¨ï«&ÿýýºÿ#Ž Pmì-!ì«&fýýÁ— P”mì-@é«&•,ýýyª P›mì-%è«&;ýýq  N@£mì-Jå«&3JýýA!r M@«mì-&ã«&ëXýýÂ)C O´mì--á«&7gýýî1  V¼mì-,ß«&6výýQ:ó Ó `@Ãmì-óÞ«&™ƒýý¨Aà Ê RÊmì-Lâ«&åýý3HØ · K@Ðmì-äÝ«&ýý¸LÔ › L@Úmì-Ø«&-›ýýâTÊ G Oämì-Ô«&¦ýýý[· ó ?@ðmì-ZΫ&¯±ýý~d¥ q Dúmì-£Ì«&ÓÀýýêlŽ  Pnì-ÈÍ«&*ÏýýÏty  S nì-UÑ«&ñÜýý}e îWnì-qЫ&¬éýýׄV ÷Vnì-ˆÊ«&úåýýîŠD Y@"nì-s«&àýý!“5  R*nì-rº«&5Üýýùš' B W@2nì-ñ±«&tÙýý&£ ^ V;nì-‹¬«&>äýýr«ô q P@Dnì-™¬«&óýýŒ³Î z WMnì-‚­«&¢þý¼½ g O@Unì-t°«&Gþý†Ä´ g M@^nì-š³«&ŽþýÔ̪ ƒ V@enì-Mµ«&~.þý!Õ  ƒ Vlnì-·«&Ä<þýÝ¢ © Otnì-©µ«&ÉKþýŠå’ × P|nì-w¯«&ƒUþýcí{ ó Q}nì-I¯«&CWþýVîz ó Qˆnì-˲«&ubþýõ_ á O•nì-Ô¹«&\kþýˆý? 9 Kšnì-)½«&oþý+5 ÷M¢nì-JÄ«&ƒwþý= . ¿K@§nì-ýÆ«&~þý + ¶J®nì-}Ê«&‡þý`% ¶J¸nì-fÌ«&p‘þýQ ‘=»nì-Ì«&Õ”þý& ~;Ænì-KÍ«&²£þýX# !HÉnì-åÍ«&n¦þý% @×nì-ŠÏ«&b´þý2- ’ Mßnì-×Ï«&õÂþýJ5 › M@ènì-Ñ«&tÒþýÑ=ü Z L@ònì-Ó«&`áþý/Fæ © Sùnì-šÏ«&zîþý#NÔ q Rünì-“Ϋ&ÕóþýHQÊ – Q@oì-ˆÐ«&üþýNVÀ × L@oì-|Ï«&¿ ÿýf^³ " R@oì-wË«&Zÿýef°  Roì-âË«&ìÿý*k¯ ¥ Roì-£Î«&6.ÿýys¥ Q$oì-µË«&³;ÿýZ|‘ ' Q,oì-ŽÄ«&2Eÿý߄Р‰ P3oì-P¼«&ÝIÿý† v P@;oì-´«&*Oÿý@•‚ › PBoì-׫«&lUÿý§† ’ OIoì-±£«&[ÿýá¥~ ¥ OPoì-Ÿ›«&Z_ÿýÄ­s Á PXoì-“«&QeÿýX¶_ Ê P@_oì-lŠ«&„mÿýx¿c Ó Q@foì-%‚«&+tÿýÈ_  Sloì-ñz«&é|ÿý/Ða  Ssoì-s«&…ÿýéØ_ V Szoì-ûj«&¶ŒÿýXáa { Rƒoì-b«&‘ÿý¾ék Ž Q‹oì-6X«&Ý’ÿýÒò‚ i O@“oì-FO«&c™ÿýëû† V R™oì-£G«& Ÿÿý¼… V R@Ÿoì-Ó?«&¬¤ÿý¤ ‚ r R§oì-48«&ž­ÿýIŽ   R¯oì-X1«&h¶ÿýI“ — Q@·oì-º)«&«¾ÿý¯$• i Q@¾oì-„!«&oÅÿýB-• M OÁoì-I«&®Çÿý`1“ M OÁoì-Omì-ˆê«&Û—üýI«&®Çÿý⎠⎠§t5ó«&®ÇÿýI«&Û—üý  Ø «ÿÿÿÿÿÿÿÿ ÿÿN`ÿÿÿÿH@ÿÇoì-L«&Îÿý:‘ i P@Íoì-0 «&ŒÐÿýBŽ   SÕoì-ä«&3ÅÿýJ… Ï Q@Ýoì-†«&Q¹ÿý´R… ¼ P@ãoì-@ûª& ­ÿýðZ‡ ³ P@éoì-Ëõª&I ÿýŽc‡ Æ Uëoì- ôª&8žÿýe‡ Ï Uðoì-œðª&K¥ÿý¦j‡ â Röoì-díª&°ÿý…qˆ â Q@üoì-½ðª&U¿ÿýcz• â Q@pì-õª&èÌÿýË‚  R pì-÷ª&ïØÿýÉ«  Q@pì-Ïóª&¤âÿým²  P@pì-uìª&Èëÿý혷 þ Q@pì-4äª&vðÿý ¡¶ â Q@%pì-¿Úª&/îÿý全 Ø R,pì-{Òª&3æÿý½²« â R2pì- ̪&ìÛÿýòº¯ ô R9pì-?ͪ&{Ìÿýéì  R@pì-@Õª&0ÇÿýVÌ¥ , P@Dpì-ÒØª&óÌÿýöФ 6 Q@Kpì-vÞª& ÚÿýÞÙ¨ ? R@Mpì-Mpì-¸©;çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿÿÿÿMpì-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™6ÿÿ ÿÿÿMpì-ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿjpì-Âoì-Æ«&Éÿý¶ßª&¦ÜÿýQ%Q%«¿Æ«&ðÿý ˪&8žÿý)+ ? ÿÿÿÿÿÿÿÿ ÿÿQUÿÿÿÿ^ÿjpì- I&ý††……†† † †……… …þ„ „„„„„„„Y„Z„[„Q\]^ jpì-H\ì->âª&€Üÿý#5N#5N«Û®„Á°&D2þ ª&eÝøýAëì ÕÑÿÿÿÿÿÿ ÿÿFwÿÿzÿJ"ý†††„ jpì-#5Nz~ì-ÿKqý††††„ dpì-ÿÿÿÿ«ÛH\ì- dpì-@BPFDS\ì- dpì- ¡nÄS\ì- dpì-„tc S\ì- dpì- †’ünì-C…file-5.46/tests/gedcom.result000664 023540 023540 00000000056 14325247002 017771 0ustar00christoschristos000000 000000 GEDCOM genealogy text version 5.5, ASCII text file-5.46/tests/gedcom.testfile000664 023540 023540 00000000144 14015050417 020266 0ustar00christoschristos000000 000000 0 HEAD 1 SOUR GENJ 2 VERS 2.x 1 GEDC 2 VERS 5.5 2 FORM Lineage-Linked 1 CHAR UNICODE 1 LANG Italian file-5.46/tests/gpkg-1-zst.result000664 023540 023540 00000000126 14306654145 020446 0ustar00christoschristos000000 000000 Gentoo GLEP 78 (GPKG) binary package for "inkscape-1.2.1-r2-1" using zstd compression file-5.46/tests/gpkg-1-zst.testfile000664 023540 023540 00000002000 14306123701 020725 0ustar00christoschristos000000 000000 inkscape-1.2.1-r2-1/gpkg-10000644000000000000000000000000014304561172011717 0ustar00inkscape-1.2.1-r2-1/metadata.tar.zst0000644000000000000000000010555614304561172014043 0ustar00file-5.46/tests/hello-racket_rkt.result000664 023540 023540 00000000036 14367524063 021776 0ustar00christoschristos000000 000000 Racket bytecode (version 8.5) file-5.46/tests/hello-racket_rkt.testfile000664 023540 023540 00000003200 14367524063 022273 0ustar00christoschristos000000 000000 #~8.5racketDconfigure-runtime¦Ú8LZ#~8.5racketB'!µï8½h“’ ÉÇ 1/Eÿ 2RlwƒˆNdataU.mpi-vectordeserialize-module-path-indexessyntax-module-path-index-shiftsyntax-shift-phase-levelTmodule-useUdeserializeNdecl/fPmodule 1//,"ø" Hello, World! SdisplaylnVprint-valuesM1:2Âf 2/0)÷´ ")ù"Uracket/baseprivate/base.rkt/ pre-base.rkt0misc.rkt1 modbeg.rkt1  hello-racketPracket2345"T.inspector f þÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot EntryÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿRoot Entryÿÿÿÿÿÿÿÿ°Sq(5÷ÔÀFileHeaderÿÿÿÿ-DocInfoÿÿÿÿÿÿÿÿÿÿÿÿ®HwpSummaryInformation.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿ þÿÿÿ þÿÿÿ þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBodyText 0Wf(5÷Ô0Wf(5÷ÔPrvImageÿÿÿÿÿÿÿÿ¶PrvTextÿÿÿÿDDocOptionsÿÿÿÿÿÿÿÿ °Sq(5÷Ô°Sq(5÷ÔScriptsÿÿÿÿÿÿÿÿ °Sq(5÷Ô°Sq(5÷ÔJScriptVersion ÿÿÿÿÿÿÿÿ4 DefaultJScriptÿÿÿÿÿÿÿÿÿÿÿÿ1ˆ_LinkDocÿÿÿÿÿÿÿÿÿÿÿÿ5 þÿÿÿ þÿÿÿþÿÿÿ !"#$%&'()*+,þÿÿÿ./0þÿÿÿ23þÿÿÿþÿÿÿ6789:;<=þÿÿÿ?@ABþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHancom HWP 2016 \Õ®ü¬ôÎèÔ0Ñ ž«® NEO GIF89a±ú÷€€€€€€€€€ÀÀÀþþþñññäääÖÖÖÉÉÉ»»»®®®¡¡¡“““†††xxxkkk]]]PPPCCC555((( øÌÈø°°ø˜˜ø€€ød`øLHø00øøàȰ˜`HøäÈøØ°øÌ˜ø¼€ø¬`ø¤Hø˜0øŒø|àpÈd°X˜L€@`0H øüÈøü°øü˜øü€øü`øüHøü0øüøüàäḚ̀°˜˜`dHLàüÈØü°Èü˜¸ü€°ü` üH˜ü0ˆüxüpä`ÌX°H˜@€0d LÈüȰü°˜ü˜€ü€`ü`HüH0ü0üüä̰˜dLÈüà°üؘüÈ€ü¸`ü°Hü 0ü˜üˆüxäpÌ`°X˜H€@d0L Èüø°üø˜üø€üø`üøHüø0üøüøüøäàÌȰ°˜˜d`LHÈäø°Øø˜Ìø€¼ø`°øH¤ø0˜øŒø|øpàdÈX°L˜@€0`$HÈÌø°°ø˜˜ø€€ø`døHLø00øøøàȰ˜`HàÌøØ°øÈ˜ø¸€ø°dø Lø˜0øˆøxøpà`ÈX°H˜@€0` HøÌøø°øø˜øø€øødøøHøø0øøøøøààÈȳ³˜˜``HHøÌàø°Øø˜Èø€¸ød°øL ø0˜øˆøxàpÈ`°X˜H€@`0H øÜÈøÔ¸øÌ°øÄ ð´à¤€Ø˜pȈX¸xH°p@ h@˜d8`8ˆX0xT0pH ˜dx˜dˆ˜d˜xd˜`d˜`p˜`|˜`˜˜`˜x`˜p`˜`x˜`€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,±úþÿ H° Áƒ*\Ȱ¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ J´¨Ñ£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶¬Y©0LËVí¿´oãžmÙ¶.[vñÞ…;ר۾€+ü[paÁt᪭ûvñ_·#&éøn\É—cžÒpCÏœC‹Mº´éÓ¨S«^ͺµë×°cËžM»¶íÛ¸sëÞÍ»·ïßÀƒ N¼¸ñãÈ“+_μ¹óçУKŸN½ºõëØ³kßν»÷ïàÔ‹O¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿ÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†(âˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã8æ¨ãŽ<öèã@)äDiä‘H&©ä’L6éä“PF)å”TViå•Xz;þÿ`¶¢ŸaÔ´Æ`—ÀŒ`¶¢ŸaÔ´Æ`—ÀŒ0áx¨´Ì $ <   ¬ ¸ÄÌÔHello WoSection0ÿÿÿÿÿÿÿÿÿÿÿÿ>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrld HWP2016Joveler2019D± 4ÔÆ 20|Ç  Ñ”Æ|Ç $ÆÄÖ 1:50:44Joveler-9, 6, 1, 7891 WIN32LEWindows_Unknown_Version@ 24÷Ô@ 0f(5÷Ô@ì—MhIÇÿ]óæ{4I#ÑA'αñ uÃ"âEq4AMÉ‚‚È(ŠÁ“q7·=(D‰a#ä°dƒ‹‚·½‹ (諚îÉLºËdÛEKJŠøØ®¶ Iäc»Øn *)êc{Ø &)æc{X~ â’â>vKË+eBRÂe§˜}öÜÆÈdîM}üÄkjŸ>Áåë3<ÇÔXÕQʕǞÌ>‰ñf€ù~Í %)©Ç¶•l!`}žI`'’: êï -)¥é*åÓÏ3qì`ÿ<“™gÔxï/ß-ö²ç4X&) ÒÞ9EÛK§dcÍ̽rû¹¯Û8w/¯“úP…å’2ˆºm’«ØÌç™Ñ ib ˜l Ã3¢QÒrÓUÃðLh’Ô ™Ãä_cÖ©ü[CNàZ`SÁÉÕ¬î›r…'ãE-j®©@ÁèY{Õä™3jtJ–£³o©Ëà¹1Zß3–ߓԣfcýÃÎmØÀO¨]ïÔql9>]±í†·¬-´ªÑ½}Íùú¿oÙ®ÂÆ½ò¡’9ó¢! pËèQyfÐwåŒÂ³Ü›ù^¨flö«ùÓó2zž£FÏ1£¸À—pJ–è¼óÞÂÏ[¾ÿÿc`AÄjòHWP Document FileuŽ»‚@DO‹ ÿ°¥6ÐC,H,¬¤µ#„GB!k¡0~» 6*7™ÉÍÜ=“Mžœ†–‚*Z:îÊöÒ™#×?÷ŸÍ*?Ó¿T@¢¤£Y‘­öÏí¡~X+mÆj3¤òï÷'m[vŽ|:÷Ôêj)%C$MùËù¤Ï¼5#ØÞcd€÷߈©:\Users\Joveler\AppData\Local\Temp\prv00003e6c26d4.gifs&6d Æþ:©wÆþè<6&s£r½k½ a×Ó$¯SÆþ“©w£r½k ¹gú.€÷ÔÌT½N˜(ÐçDÆþçhBaçRüXÆþ8ë§wDÓþ>§w½N˜ÌÆþCí[.DÓþèÆþî[Çþy QyÇþüx DÓþ(Çþtx (ÓþDÓþÒþÝw (ÓþTÇþܪ (Óþ€Ðþîª sbh`T````afF ÁÈpÄÐg5ƒ3  CJrj10aJN~2‚ïÁÈÇÌÏË ä…3i#C3^–˜bW&û3qTTbˆdcpgùÀ³5ì0y«ðOŽ¦Ž w<,ÀXEŒaŽÀǸYš@cÿA³9“4###6ùú@ò@'€Å½9€ÓÉ ŒD‰¸³00‚‚ŽÉ%NÀÀrá!ÄÈ€ð&0ð™b®2¬û³æË¹W .*0 Î\-ȰNÁÁ•ÁGà:°á\x,5ñfile-5.46/tests/HWP2016.hwpx.zip.result000664 023540 023540 00000000056 14700541452 021273 0ustar00christoschristos000000 000000 Hancom HWP (Hangul Word Processor) file, HWPX file-5.46/tests/HWP2016.hwpx.zip.testfile000664 023540 023540 00000034051 14700541452 021576 0ustar00christoschristos000000 000000 PK!‚ðAGmimetypeapplication/hwp+zipPK!´1„nCC version.xmlPK!ñr7© ÆŠContents/header.xmlí]ÍoÛÈÿWíe{°eÊŽë]Ȳ+QdÃ’ëÍ%MD®)KRQ¼§-zY ‡öŠv]h³A€m9´ÿPäüý½’"õI^ùC2CÈÑ|¼y3ó›÷Þ¼yüâ«—mKyÁ\ÏäövF]]Ë(ÌÖyô[Û™ãúÞÊýŒâùšÝÐ,n³íÌ9ó2ÊW_~ayƒi Åm/ohÛÃ÷|6ÛívW U´Wu¾zæf®Ó¶²¹5UÍjŽ“ K8S•p4Wk¹šcôË©kS”ÜÌ—ô¦(§f=¦ûàEÔž>U)»,*bLU„Ø×/2q†éùÜ=е§j©­y>sW­Õ§ÑiŽ/êékkrÈ §¶Öè³Âé¸Ö*w[Ù†žek3Û÷²êªš óòú͆Órkk[YüÚÏÉ1…tCsýñESh3Ë£ìºNÇ6}ªbªö»Î1ò‘?¬‚9ÓDÙAr1çåD×¹Ý4±2:®çšgzy[k3/ïëyî0»Áõ1#Ï«*¶Æ6°¤˜^´Ñc5#–Ò)k™vµÓVhŒ(UirîÛÜ—/¨8zvL 2ø§–øŸý¦£Ñ„¥—¬¨ÌeÍ æ‰xnrÛoj:óÓgmÑä–l2üE±4Zêû…êÃã µkû"[®ŸM1Ût*ÚÎ|üáõžïýô¶÷‡ß_üå;Prî ¹^ßË(¦WjŸ²Fƒ‰‚úµl79J·Më¼.2ï õçêûåbFé2³e ÅÍŒâ¸Üá®ì¸nû.&¯hÝó]~Æ~­¹fÔ_EsÛ5ÿÜ’\²˜iÞä.VÓ6–I…ç—ûA‚GÙ€1‡D‰é|÷êãï~Xè†]¥ž%&D0ì•B½\MG=1­—Ô±ØÒQ¿c£þ¨pX¨–j¥tàïØÀcŸ-¥£~ÇF½öôÉÎA*Ñ%EÖåßÛkéZ_r1>.Ô{Ränƒ¹{¦eŽ@ƒ;~ ÕßpÛ•J•¡5xW<êÐ[™[*Sõ  1áÔeÚY‘YV‘5ÅgòÇ@±ó,Í3åOæ/ºšÔM¯È;T!Õ-õÒSM?«ÍZÈbMGô ÑT×lø0³¬­ªJ»MŠ¢ÅÑÒgkâ/ÔƒI­¼dYŸ;—,yÊ}Ÿ·/Y¸aj-nkVÐ×ÚA¥¼ yRgiBô‡y`FˆQÏA‹MG}ÒŒY¬Q7ô|+~ÇíxÆ\ÏwM[¼;FQ. VÛŒbh°)Ÿ=E³²ÛŠå’MV68¡’ïsÈàv{ ƒ½f„}IþšŽŒÐþBËSñÙK?¤&X²Š$JÝñØ @5GÀ9Š!á1smaš&ƒÐyû‰æžEhá\y÷ˆÁ¼³`á<°[i3³`A3Jü<ÀÓ7š£ÙÌ“ö"î„\HF#§\–Bó"-°²‘ª_)u+¬–žÃŠé9V5½†•ÓsT=½ Dæ¡çèlÔH¿‰~‰êû•ǪŽ*Žp‘Yµo¯–rÞlzÌŸ7áÛÙô[&™¬¹Àthž1Þñi–Qf¹_Ì‹\ƒMȧ Ê»‰¦Ã vrô#+ºý5& „xy*^££\Ÿc˃¦áíYóšdéò¸1ja§Ëc†åu.ÄÌÝ<ÒÕ‘n·jóX¿M«;Y*Z¥¢L·D´Ârºwæ)+÷¢…MnC}Õ†Þ͆Cņž¥^ƒ§Ð?!Õ?„}í–,ÑPÿØ”°r¥­ÏëRÏS +•°n•„·¤hyM2ƒ¥Ö«È`HÆi0ÄS¸ñáQî{¡Ùmi¬Wd N¥£Ÿv:ʼ¸Ò¯¡5Xëø¼®Vp¶#,¹Áû‘ô æGE W$ŠôßÇÕàÓ­Dž€¢™ÐŒ-zbwàÄèÂò;L 5£ŸÂ³4øF“çjp&FÇdûä$“BÄ^0i?Ö,³«s¥´Ws£l{þ‰<Ú :T†Sz…Ê3ŸBã›NàýH s ,ŠÒƒò°tT,UQQÿ‡íÌ=ðîÁRQ»å‡eäcÅ7r6lnå`O‡›¯~¦’û$覮 ÏȰ‚ã;D ¾îI'Õçµ§•Ja§B”8ƒ˜ÜµÜL]ƒN}í]›q¬Ö5ËXA ºö]z¬6fê¦ñµwm¶±úüÙ½™zyãÚ{tÙÁúüÙæL}Ûº¾ËGÅJi÷ù £°¶5°À#ô—>äý}"ÂÊQ; º)·@ÂÒþ(¶¹Ûpuö“ªŽrÂ'_‹ÐkÄ [sêü¡xª{Çq™çQ.ÜÀv… $T AzÌû^Ì$Åà®ù-êÔ°=:®ÕË{OÅ…ßÔ)i§P+UÊÐH¥~NSèØQúõKYÜlˆ#U´ìg‘SùˆÔàyO%„ÃH…WOp»y\*>?98‚ƒø©ÊíÑ¿ÂÃw\œGcƒD#gŒ9'¦oT±ëE ÔWÙKº%±Cî0¸ûKžÑ¡Ý n ¡;G¥Âã /$Ð2QÇ ž©Ù¥àôX¾wT?uÜÉ{]ºF"uÍc þwq½ÂtYcE\ó'Ñ/:mfãwLÄÜhk.nxàQÏ›ðб}å…fu‚cmÜFÁŒ“Ãã*¶k"EÏ“ÛË„,.IKò`޼˜Å‹?•…æ}D½‘'6‡ •$’D‚©›@º‘“èS6`ªànƒ5µŽ%o¨¤œ‰3„ØMÃЩGéûöD® Áñr$BË#ÅH~®s¬ ‡üuG¸&Iœà¶‹nâEW ÌÐ`1„rà¡C¶È},E®>®¥Èõ äRï‰ÓïA,¾¥à•Y®PËÁœÐo=~‘#d ¿ x÷%¯Æã6‰^Çu!–xSé릤/:—f™’T;W ·¹—†9‹ƒa°O-†…Ž´B3L5ÈD¨Œ9kË´LçŽa)†1ÿÚõH˜¤—Ãr™)Űáp?sưeR—æŽapÛIå°kÇ0œ=-†­§66dÙœ1l™D¹cØýÃn@Ãió`ØFŠa×…a0é/¨1w #cáÒpgq bp+Y ïG¤Êä•+“ˤ/ÍÄ–É\¸8 †@ËKb›©$v]’ØÖÉó±eÒµÄV(ul¨ßkêö ÿ°ES•è~ÍÃVêÙŠÛ€c9³8ÐE1›R승ìß]èZQ×i6 -õwÌ_Õ§Ùák%·Iž’w†; apg½)“×ZoüRQ*{-é­¢9W \·òVÑMºå§ÈE·ÀîÜ}HfîÑRLüJ$ÜÎFdº—"s0 è9Dà8{D¼¨!IpŽìY ákÀ-vm—ºS»“6jí ,P\í»å~½WscT qw½òSôJRŒ H¡ŠàoC»þÕ,ÒŰÜXÁò n½§Öª£8ä§–bØ8 »ÖEºx¶1Z4ºˆ¿ÛÖµ“BéÑw­ã(ïË(b"= ¤D`*ák¾¡j;Ó_8üðßåfv«*ÒªÒÂ×µTÆbŽÅ£'bG'Å^|N»Ÿ…>^ƧâÔµ  ©Åõ3 .†Ì2ò}jèèA|Ûû0NÍ¿ß÷Þ¾‘²Ãøz}‚ Á1 £95!dJ"äû/þüJAEW‚ý -Aíè!VLM™ÆÑƒŠ†èAZ‚”ŸD²LO úãèAECô -AÊO¢Y¦§‡6íqô ¢!z– G2…1‘‘ezzèFÌ8zPÑ=HKЃò“èA–éé!çöqô ¢!z– å'у,ÓÓC~ªãèAECô -AÊO¢Y¦§‡\Î=ÅýÂQƒoþ§ôþõýÇ?ÅÁça-q€&Ì™MÀ„_†¨p˜I½×ï{ÛûÇc\¢hÁÌ ]JH$‡ü¦ç‘:?¼ûíÅßþ#fsßæ>>˜DèAö†è™ £Õ‘ Ýûçû$=%»qYrf‚hu$F÷~~Õ{ó:Æž'¬ÍY3¸{†X3<«#ñùâÝëÞOß)ý±÷æçIõƒ¢BSñ-)“85DÙL@-Ô«¡•PßY‰¨Á]•Xœ 05DÎL8°ªãɉo¬DÎà¦J\žHÎL0­ŽÄé€;ñ}•ÈÜS‰µÉ™„Ò$HJ©Q†§uY³bz2ʦÎÛâ²"Ö÷.×;m @ŠÀå-æ#`mËÕ Ñ!þhnMýZ ™–vŽï ƒB¦eúçá' ‡*"\?pðAL q*‚„ž™v“Fè+½43[wŽojRTP I3šXZP²"ßÅ7ƒÁ˜¾ j7Í–Ò´´bÀÞ× ¨Ã¬öËÿPK!颈ÞSÎContents/section0.xmlÕWM7þ+ÖôÔC†eY…6|$«vÕ^Vf03nfÆ®í !§¢ü€V½U=Wê¥R{¨Ôþ™\£æ?ô}ía€4‘úå„mü~=~ž×žûž¥ yÊ”æ"k{A¥ê–…bɳ¨íÍgý{MhC³%MDÆÚÞ†i<¸¸ë–f!ëL·bÚöbcdË÷×ëu%¦à!­„¢òDùñZ¦‰_«O¥ô¶ò( I•ñÎ.¨aÙðÿn©° |(Êe¼ð(«P(VšÄG™ÄŒ.w&Ç%sm„Ú”féQ‘Rª S÷$v9ÊÕ‡Mu³”º#‹åjm¹ƒBæ*©ùËÐg KYf´T»W¼ãŸ/åÊÔªÕ3þÝí@¡0¦Ê|8¡’B _”ÛKÖ2ϸAGy¬åöw`ÿÖ“ùâÀöÝtòŽè¡ÈV„‘«¬%¨æº•Ñ”é– [B²l)ÂÁhíïn¡¨@0²% _¶½Zóì¤y~VjA–^©a÷šÁy€ô´Ù$l7Å#{¨}bÿ E’§Ùnž21pXxWyF…=6*0úJÙÈ1ì™érå8Þö“ëá—“ñìr¡% Ydž2ÁI¶ÓÅÔj³Z…Šé MÚ^}o·Wóñpæ‘›„glS¹-&ðHÊR±¿„!¦ irË—&€(l­Ž³WP'×E‰‘âK‚®ÁÀa—“µÈ¢H|ÅûB¥ÔZùôç)À±)NôšÝÃÉl€GA[ƒ’Á1©”¿ìëœb+ØùyÊ5_ð„› ‰ù’õ¹Ò3fÀ<0(×úB€à×[bAv}!”5›&·w—#Àň»›—ÞÐ’?t×K¥ÙŒ »¬c±Æ l[¸À®p„Ê­Yà‰bÐÊ•™m¤³ Ež™‡ëc ½úvá°@ìÀ"LJà2Ð!¸k{·Ãnoô…GÖxvmïôü´×EÌxüÍzЄi”¨ÜÅõú³»ÉlìÁ¤TE<‡a½v šXè¹™³¶&l…^O«ÀLU„°KÑÓF‚-„1°²Æ‚²³yÛ€è{ ‡SLinàãøBŒ…¥;|„Î5SØ#P5R±¶é|UÎ>ìs©CÅåß2ˆ€Çgsèï¼O'£a·¬Z j$M­´„ú D…ºr§‡n¦ J¸ŠÉ‚™5cæê¬5O T–¸SÇÚÏÏ'ó©G2¶¶¼ н2€í‹ØQÛë]vwÉhþxŒá2FM<ÉŠ@lßZàG€7¨7Îk'ud‚=ÂdTéñ¸{7éßu'ùãÞx÷~˜qµ×‚m }hEÑ®›¹¾‚ËÅ-‚̃#sÛÛÞÕåUï%ŠŠfÚ˜Õ–Ýþ¸¸„«gkbå#V+ÍL!Ä ë !º‰¢n…hg{BÜåí®Ä÷•Ò»é!áÊ ?áR&]Pû'U ªÚ>ìù„F%n ’Ý+ªlÜ»tJèîü¶‡íÝ6³^,ØYˆ†÷Ñôy9|D!¶9aœÒ»¹Øooß û·q»àacSÀÛL³ˆ*E7û –àR@_"çÌÁXóçkà^+°o{9¹•Õ Ýº–iß@öçÏX¨ç[·8v®ðfAÁ$4‚ˆ'ç'µ ±­ç0C{÷8–ÛçXýï=sñö»ïßüöâÍ/üùû¯o¿ýñíËŸÉë—ß¼~õÃëW?ÁdÜ›üs|‹Âýñ!öÝ×èÅ_PK!Uha™96Preview/PrvText.txtóHÌKÎÏUðP0204ãåz;uΫ ¯6ïy³{ËÛÉ+Þ¶lPxØ2éaÛ¼‡m« ~®þ¼\PKFp1VÕû7GžScripts/headerScripts.js+cHd(bP`paÈgHf(eÈeHeÈc(a(ŠÙqƒC9Cyk^.†2ú!º1MÕcpÚS ԙÊÓ|ˆéPKFp1VoJ]ëG^Scripts/sourceScripts.jsKc(eÈcHf(aÈdȲü¤ ”ÉeHòJâü€¬r M^.†j0ÉÉ „%@µ)@¬À`Ä ñZ0 ÂPK!·Î‡uÇ settings.xmluËN1 E%òžI6(šL…@v±¶2i‘ØQâ2ð÷¤”––|νwÚ~æ¤>|m‘ÉÂ8l@yr¼D:Xx}¹¿¸ÕiÁÄä-|ùj;OÍÃÛJ‡Ÿ½H‡T÷Q3-‘b´^×uØyp<¼WÖ’“¾ÜŒ£ÆRà—pLûØ3• c‹Ífߌ8ÃÅÓÂî˜=‰9ûÏßæÔ÷§Ë-V/;nñTE¥ØäñîÉï-ô=+þ¹¸Y¸AÏ“þoÄü PK!lü–33Preview/PrvImage.png‰PNG  IHDRÔN0Y¤ pHYsÃÃÇo¨dåIDATxœíÝ=VYèÑâ®o(‹Àô:!"u!Nœ’9Μ91=Ò\¸’X€íî~ÜvïA©T?r ‡sª\www@åÿýìþ[Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤ÄǘínllllìžÍ†a†ÉáÆÆÆÆÆÆáä'تçrñÊüp'‡óŸÞ1™ÿto÷p¾‰u&‡»_¯4;»_ºûø™MwŸ~Hïÿ7}xü“îø!ÓÓÓé£_.ÞÑ<ãùƒ¼ýt4†a4>¿:ÿ ðë¿Ùb&a9•0;ÛÝØØÝ}ºxþÚrñÃÌÅrábÑ| »Ë™”g&6¾ÙæÖ<&ŸoÞŒßÌav;ì}OŒŽÎæ­2ûr³ÿa< Ã0½Ù~ØÈr?ëÌn¯·ß géDøåˆvý~óᲈÍ÷.–O>ž Ç÷3ûÃÉÙl†ÑÑÕåÁŸ._ŸÌ+cv¶ûîfïÓÝÝÝÝÝôxûz¾…ÃåÂO{7ïvÏfó- ûŸî7p±9_c¹‹ï<Èaôvÿúódf·[{ãE"̾Ülm~½‘ÙÙ»‹í¯DVM?î;dv{½òÂèÍ‹#DÛÃçÃñôînz¼u"?þÄÇÛ~r9ÅbùøÃþp²yÿeÿÇÊú;§ë'(Îï—£ñùÕÑhfg'Ãꇉ‹ý·÷x³½3Ÿí½ÝzùËý™ƒ†Ñ›íëÛÙìËͰ¹L‘éÍÖÛ‡ÆX†Ë»›ýO/N‰L?ï-‡@çÆãùÊõõÖ‡ù ͼ†øí‰¿ÛʰÅÝåÁËë®xe¬ào3ÞÛ¾øòe¸ÏÑ›íëÛ³Ï.øX†ËÕ2,Ö™Þ~Xm“Í­•Š˜Þ ëSîÞl¿2¢ÀoH|üÍf·×Û[›÷óg'¼²öxo89œÌž_8›ž\ï¿ýG¾ 7·†‹‹EnŒ÷¶ß¿ÿ¾ >†a†ÉÙÇ7ó6™Ý_ 2z»}r6™}ÃÑ÷³F³ÉÇ‹íïß=¿¢ô^šßÕbþbqéb„ãàòîîîò`þâÁééÁýÂÅúó×½wz:_ØYÞÛú°p±le k~|tCí7äb•]>þåù ¯ÙÇðdÓ‹ãt÷ìÊÊ+‹—×+»à·±qww÷× à™vRâH‰ %>€”øRâH‰ %>€”øøÍ^xÞ-ü$âã‡ÍÎvïúº»x:ÉÙáîá“çÛ/WZ±{öb|½Éá×oŸÍÎw=ƒ~Í®677ž{Lýbó÷{{ýi²³Éá½§O¢ù¡Ó¼_ÿaÅNÖmjåðf“Ãŧþô£à—ñ³ÿ÷ßÃü±$—¯?¡äÉ:O|»x<Ì3Û¹fzúèÉ)¯{²«‡‡Ë¼¸'oyòævöÊ*ÓÓÕG¿¬Åôô`彿MOwvvN/ç¿\ìx À/ÉÈÇyúçùækë=E~|¾ò¯1==XóüùÕ“­­›Íù>ßÿ¹vÕÃÉüwÏhŒ?<ÊŒ«£ozVîèèêþ›~þûÎÁåô›Þüè4×®pz¼uòú ËèhþÔÜÉÇ‹íã«£ñýfGãóOûï üzÄÇ]=©¸ù·ñŸï7ŸL<1»öÆÏ]Œ1½Ö|cÏûdzyzpúéèè|Y*_IŒ?ÌŽŽ>n›Ã³_ͳeA­‹˜'ëž½û¼õi¾ÛO[Ÿ¿áÿÅÓ\Ú<:N^ÜØìlYP“Ï×ûÆ«/ŽÞî7Ó×€ññ£fg‹«6V®™˜OœŸ\¨ñ0Fòþÿmlln®ÊòêÙí°øx1³ÉÙáîÇÛ·ç/Œ7ÜïoóýŸüo±£÷›_ ÉÌ_ÜØØÜØýòö깈ùvß~škÏoÖ´ÌõûåðÎÍ ï½Ù¾¾5ôð«?hòñb8žAì¯ûóýÑ|Ê:ç‹¿âGG{ÛÃ0 ÃtØz;¯‹‡ˆfg»ï>®¾.íÕ9šçöwõvõ-ß?í2 ÃèèÓÞÍ»yV¼»Ùû´òÎo?ÍgŒ?ì_||(Û¶l½üöW'wø×?hüáx8™ÿu~1?ûEþõÍÏ_2>:Íf³ÉäóõÊÒÑÑÕšðX¹âÙá‡ùá­~˜Íf“ÉÚ[WÖϯ./O/§wwWçã5çú=§ùÕy|Ú:9üòÜ‹G‹xïm_|y´ÍÙÙÉõškdø—?j4>_\÷qõÂ_÷O¯ytËÉ"þ÷Çb:d÷Ý»Ÿo×niMa,šb¼rÈrlcõ~“å.§]vß}œnn®ëˆ'f“ÉÙd2†ñøíðñ¹û[_<Í׌Ž>m]<åÉäðþ<Çö/ÞížÍƒi69|w±ý|õðïõÊ 9Ï›žî¼zÏéš *¾áþÐõ÷©>¹'vÝ-²ÏÅÇ+‡øÊ-»¯oé{Os±þÃJ—ó)¡—75=]Üv³sà>[€_Ôÿýí5óß1:ºº¼Ù}à?ÄÈ@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|)ñ¤Ä@J|©ÿù¤8Yfq­òIEND®B`‚PK!·„7¿ðˆMETA-INF/container.xmluP¹nÃ0 ýAka+îTq2èœ!ýB¦#!º ÑGþ¾tSÍÐ$øÎýq ^ÌXªK±—]»“£Iƒ‹×^~]>›)*AÀ§ˆ½¼c•âxØ'3j“"‹X“ĪùÖË©D ºª#¬šŒNãÌ0’~¼>¡òk3c-QÖJ-ËÒZ`¡5©½UÅê}×uŠåC¾¤D£óX_W1NÞ7ÈöòÄY´ªM‡vC‹€ƒƒ†î™ó@ÎÞ ޝì’Æ47¸â•êêsÁÙá¢Îe¾àJ-­ôÊL|UÙsAÚ ûãøg¶pøPK!4Zåe÷‚Contents/content.hpf­VÁnÓ@ý••ïöÚiš‚iÒCª(ªÄm»žÄÛØÞew4÷Âô€¨8ðüé?0ö&vÓ4Á•¸X¶wÞìÛyoÆ>>¹Î32m„,†^„‚ËD“¡÷ñüÿÂ#Ʋ"a™,`è-Àxädt,Õ8VŒOÙ¦(Lœ²¡—Z«bJçóy2L“\SMÓ¹Ê3Ú £ˆ2¥¼5BuB(¦ÙD3•¶¸(ì€Ðm¤é€‹¨n±Í~¼ŠK $íI%-¤¹T+õ¢åvÊ™± }…zµeBΜd©¯1I[ Uê,zBN!ƒ khDt‹ÙÈ/5®½0<¢¸ÚFJ´O™¶» 5PÙ„7G™«²¶JÑ)ÃÙ\}ÄøSŒ_§U^¾wFç² ìŽR±dF˜¸`9˜ØòX*(É˪ñÃè¸î¬¦Ï<‚t?—à‹#ÅXòöˆHðêz+Ëf™{²Âf0:ƒ,“äBê,!gï±ÇUc·\÷dÆŠI‰"¦Ò­5/êå*-©è=®¡‘<‚ç±ÈbèY¸¶Þè­œ¡œÚ¡«ø–Ð iÊË+ìÇHº˜€áZ(×K›ÛlgèPÃfp‰Ö~6¥Óê0¼ÆËëôÒû~/<ûña÷ûŸöœî?dW®ÞF~ttÆa/öåBŸæóçË é/ïnI/\þøMî¿þ\~¿­î–ß~ÝßÝÈñÜCs ‹¹Ô8=¶êZ[bÓ?9+ÄŒu yíµjü: Õ€­zê|`¨{ =’C"˜o ƒ£;œUrÒjq¥a“n56Ñ讞ŸÒQ1|òCí§5ÅÕSp…½¹“¨ÅfÌù¼ª&„;,íØÛ'¥æhÚÇÛ™úýÿ߬Å-²wCfõs§:9™7„5JÐjŒª¢Ìµ¶+¥(ö`±Õ-C|5B«¯üÓ±­ ÿŽuUÃjbªšíŠ_}¿úyýPK!o+à\q†META-INF/manifest.xml5K Ã0 ¯"´ïoDœìz‚öÆVŠ!~*‘SÚÛ'¥tû˜™×ï:ÓK/†À—ã™I‘,<ßo×CÇä-"ÇÙ ?êLãÐ[ž¤F”I½ÑÞ€Ë>^ˆE/.ˆU]Z{*²¥µ*šüп)ßÃÓ°PK !‚ðAG €mimetypePK !´1„nCC €9version.xmlPK !ñr7© ÆŠ €¥Contents/header.xmlPK !颈ÞSÎ €ÝContents/section0.xmlPK !Uha™96 €cPreview/PrvText.txtPK Fp1VÕû7Gž€ÍScripts/headerScripts.jsPK Fp1VoJ]ëG^€JScripts/sourceScripts.jsPK !·Î‡uÇ €Çsettings.xmlPK !lü–33 €¸Preview/PrvImage.pngPK !·„7¿ðˆ €0META-INF/container.xmlPK !4Zåe÷‚ €A1Contents/content.hpfPK !o+à\q† €j4META-INF/manifest.xmlPK 5file-5.46/tests/HWP97.hwp.result000664 023540 023540 00000000065 14700541452 020151 0ustar00christoschristos000000 000000 Hancom HWP (Hangul Word Processor) file, version 3.0 file-5.46/tests/HWP97.hwp.testfile000664 023540 023540 00000021417 14700541452 020456 0ustar00christoschristos000000 000000 HWP Document File V3.00 7R":‰'NN''ÕŽG)bbbbHello World HWP2016Joveler2019e‘ 4©¶ 20©· ¡Éa¶©· ¡µÒ 1:50:44Ü×OkAð|”ý%j{Þ@…äbñŒ8Ô•ˆ¤´¬×-²‰…Ä6YÄ”fb¶`·¥4võàŠ”B-$ö.TðxòjfCš¤qç}Î.ìíÇûÌÌÎÌΰD/Š“»0Êgèªgµ+Ú»'¡ž Ÿb1àmî™G–Zï&<Ò!¹eöºb §‰:-ýru…¥^äž.c,?]U×fW ¹Ò!¹-¶Ë©¾L:U§Ü£Ü ûßxä®Òt?|·dœ m¯Š9eIéŽÙyؾ¡s‡N‹¼i§é §üÂcWgg‹KŸq1é3.&}Æ=äËk9¶r×Ñ+wìuÔxp XH·N[âÏ\ìÒ;ÐØ!íó,¹Ñn¸%çææ l‹#Nî\ˆûàT.èX¯¬}ê)uûn³k롞%]™‡qÛƒ™"÷˜,ájv ª×°úa¨/‘®µ^³þº‹u†äº®h«¥t{ÕÍn¨gÈzûFý'5·¤óDeiŸ/Ž d\Þ‡Û&R/[Â7Ô-ŒœÛê}νA¾Ç%¿ä”“³ùŸ_XZ™5-r]^¥¯ dýöx;èYô¡Ç¿þFö«È5Œº)_Å/dÚÅlº#×bvÚ׃C-¥Î½uY­wu-E÷#rYÚù¢a"õ"‡Ô; >Aõ¤êéè’¼7‡¹û {€¹…$èÀÜ…yÒ…Ð÷\tÀ8ŸÛë#S&Oº è²”û¾ñÎíü òZíˆSV”óu•CÎ:Ò!gŽ‘ë阔óøÛ5*;•LÞ·4e´<µ ûîøž§®wÇÅN…k½ñKf{Äiqä¾¹—I'O`H®tHnÍ)ñ¾î°: Ü8÷㿼)ÿÿÿŒ×ÁjApe!Ø69Ï‚…€^šö¦í`·Ø%aÛã®6 MTJ Ù1nÒÀn$ÄdµöÐ-%R!6OB §^묘jÌÎ÷-xòÇ÷Ÿ™ý6‹¾Jô}ÙµF ¸ÆNK¼YÉQýuæ9à’FúÅŠºž0»“+&·Iw4—I§ã”{’fßÇ®Ÿ€çá9EãXh{œS–”®EÏ‚ö5œ;rZôâM;åJO8åþïêôt½F£Òg\DúŒ‹HŸqXz5Cs·]åÓi9†¸¤ ìì—>ÓÒÓ–Ø+#¹„MznbÆ'f|./X;G°k3×<äñ¹¹ù<ÝdW(ø(÷¹–W9¿Ãßñ}]=¾¡ÛèZ$ )ЕX 0nk¸Sä“\Õ*¢êÙ|d t͵*ÇÌ×Y¬SL®ãˆFþ©ZJ·WÙè$ ÖÛ7ê¿ ½%+Ê‹˜ñy¢e`Öå$Ø21õ|±)—ýÄ•y~/YÛ¿äî5ì¾ÿÁœW¡³º)ŠWÈ´‹8tÇ®I­„GüMWçÞ¸àÖºDÓáy„.;OØ&¦^è0õü/¨zÒ!êù‰ð ¿7‡s÷‘îÎ-Ä‘™»0ºuC—D:Ä:ŸYÞ£ÊäI—Dºä~®ï:¿~VËÓmqL‹rQ9L¯#¦ç»Á·Ž 9—}\…²q]ɰ^6ÛG²š¦Œ–] æÜÕ“3Q×»å"·Â±ËlèÇîÂa¾Ë¤“&W:LnµVdR£uê;*gó^ê¤Ã|ç…NøÙÇצ»“{¢·h_ \î ¥“ïtÌ:K‡Yç>ëó i¶üì­öPÆG2i–3èò]ÿýÿÿŒ—Ûr›@ †y”}„.:½ ØI3S§’é½ ›°eYQí’Ô}ú Lm³®¿‘V§_"ËÎßM'IÝu¦ùcæý–œÈQשœ¸w UäÖ#G tÿ&Näª6{"|s?p0µ¬ÅÎq±UCêÉý^p¢@6j¬ŒØ_ÕsãìMœÇê5WÊN]³—ÜHø ¼Æ­¹^åή½œ/7o9_nV9÷Mn.8ÛJzQZKñC¸…J®çeh`°âóÇpŸæRkn§h?ç’´2¢cÅmžÊ‰ àã ÐÔÉ¡ö›¸†Á[°BãÕ„iÒ ®%‰ûÇ"ð>­úy0Û ¼d9Öh”ÈÃ*´äüªqæÚD{mš½håN\D‹Î\°Üw´Ž³]`ד´WsŽØŠãÔïÂïö3õréZ8ÛHý$ÊC·G->y8‚Z˃ø,äNÈI90FUþÕ1sõ+¢ó1s[óLð"½m“Ó`QV¤zªÞÄÍX¨c î=©èüÎ\PÃÿsOHFqMBs>rÖa´ èØ-$¼oâÄ\æL ”boââµÔì¸ÀZ¦rbûǬš^r~ïKο᮹u›'n‡Sâ¹”8&.!މKˆãÄyãp¼’€bõ•ÆÁ@ñ>`®¬šý(GÁ9Zp~QXáVeú çUò‘èsâ]ãY Ž}#êѽ‡kÆ"!¨ÑˆÏ9v¬¥ÓÚß•aŽ/íŠÙ°¸ñ²¨ÁÆßg, ¹‹ILØó¶Šä'.²¨\`QØ3×kpr®Ýzo­pës‰´— ? G.*Ì ¤8ùš%pïß§c…óä¦HÿM8<7Xø”yŽròüæ Hà;–˜aü7 úÞ {ˆoÕ™‹§yæv²VCâ¶¼»øz˶|lP=néyŽ<·ÎV˾áùˆÚ;Þ-d#5Ùع®¡3ûÈ×÷ÿÿì×ßnÒPpå<¢Ûâe;‹bhb>ÀQNฎf•ÙyÙ%&”¹Ü1ÁŒC`s lYÄÔ ›˜eɲãÌ7ð lK öœß¥kÂÝ'¿ï9¿ó§%i&›G‰Ôb$ôQ ü©$M×V¸0N4ºŽR4¯Ñ\&¼\$®ëñcÕ òÜ‘'ñ7pnÙËD÷õ|–>C²®/CÜ=²B¡-ê¹´À= øå+@½a+¡n69n’ŹôÜÝ[HN…÷åQd°ê²÷'M|nò;8t•§e¾+Ú{'®$^‘bÑ!]Ò6,¾.VÛW€$·„ß–mVm@RÖó–u--pœ]:rÌì3H®ï ¹M¼GDs™t¼1N¹'š—ýoRW¦],Û/uH¼ãäO; ^⦤ø¤€¹§ {†¹ù"èÀ¼ósùîÜ®)ùéŒî‡cG÷uÝ‘Ž©ûò‚«MúµM’WO0ÀÃ|pæy-ãŒóÚØé.ˆäÕÉ;›Ègùl"ŸMäÿo"ÿÿÿŒÖaOÓ@ð~”ûTâË2³dÓøçzn—u-ë6_–Ädƒ˜H㈻ÁT’ Bvˆ/¬1†I@>&~_ùÖ^ 2 ½{šìÝ/ÿçž»ëÓiÚù3ð‡Þjc‘zV“=µ½“ Ðg”nc~Õ t¬tÝt‹@êv»¼S(—½Yy¶èeÞ[ÖúèšÒõøR²¾>ßf}Ù ^¸<Ÿ/ó>“¯0rÝ!(ïsyë%ä<é!U¹Í:О»åÉ×wà¡ç¤ãiªçhꔽÞQ2í˜üc¯÷Sí¾þA Þì@\›µ\ñCØ6 ˆ›¦ùšIœ$·AS}ÝßDX^÷¿Ë*ÜüžŽ°ºÈeÕ®ÏÛ.$/r¼Mÿ(O8@ž?%N߀¹›@w æ&Æ€Xwâ¶Ò ó\èûü­1ôö‰´ò¨Ë]Vå~<]ïÿúeT'kü=Yä*××enå݇%È<Ø .Ô|º*×£¯jªÚ ÈT óÊ_ÛiHZºN–As÷,Ot"Ï»â¯Â©Þþ-j÷–äuÏÝw€ŒçÈ-,ø ºÂAê®6é‰Þ$-âwe®ííwTÿ„ãî‡ôÁ¹_ž¸Y纻x›q€[Q¥9ñM‡ì³p}>¢ûÊ>ô<µrOP +Ö§›yê0b©úÐK!»Gœ’e < uÉþ‡ÒUb²œÔÅ‘36aæAä6I®p÷‰ãØ®ÚMÛ5Ë Ê&vŒIÁªä {T•ÖqhÒC­ Uä¡ Ëª€¼È%¤^w3´Ä®ÛQ'DÒǹ¸Ò±î¢t¢KÚ›«.iobR÷{eoF\¥HÇÌ4)z¶"9¿/µ©UÐqù=ÅÔ4Ã뤼Ϙ:&³Ð ±*Ò—ý²CwÃ’œEœè&Ë®_ä !L‘JÙVâLˆÞ4bÔAéÙIÉúL67g‡/fQ:^4l¶Å–O¡Ë.yj\¸"0¯ÊûÿÿŒÖßjÓPð>Êy„á…^'¥baA±õN›³õ¸4g;I½Ì@X;›ûS„ÊšÑn íÆp®«b@d0Ÿ`¾o`’nYk›s¾@ï~|rÎ÷¥H˧ÄÊtfR¤å‘jàâÀ¥™©Ó"ºÄ=c–MxÀËËœXÿ{•±%¤˜6]©`q}l©ŒMôÔÐQήDà¬1P®Z.0=Jpë©¢'ØÔQ6ŸNÌË©M“‘Ê ]PgXwp5%{Ï·.c.rüŠèHÍ'¸ŠUB¹"§Ë6œ^än™*8ä46hSYywÍÓÅ’-q Œ›48“ǪØY6C² ˜Æå -Ô9¤a»$v¦Ž9$^äýZE¬‰ÓL'P‡2¯mŽg†žtÉÙ']Ž”éì{8ífÇŒÆLé#t>"è#r€>b—؇M sÙùÓÆ.¿ËK…p çhÂ%/…eí`ŠB7‹Ä®Â¥ë%õ-5\ñ½§m|éˆåÈí~<ß»zmÿÔW¤‰SõzŸœ‘®sìŠu½Ñ½IžÐAònâw[5¯qu£Ëœ¼Íc'Y ¡óœÉ:HÞ6Þ'²^Æ¨Æ ÷ÂHàØ]gä}ô:ëô³‡waN2t'ø§v#Ï;râOð˜¾é1'<á{×Äço8)û”KÈ>å²O¹çd±2cÑÉ'÷ÞAæ¨õ²O`bmg#ñÊ7нƒÔ×uÃM$w£ô`nîáÞ&n.ˆûÚX¹þ…ûÖ=ò|E׸AMñMê6‰ïAÜNpS£IÜ^m¯åþò}%'uíÕ=Òo'ÛļŽw°VËÐîn |e^ïˆ6ÿÈîVèºÞVR_Ï;¡÷òÅßq ñúÞ¶×£â #×¹Åû¾rürWäŠÈ\xÛ!ßóKmâW:—×™ß2¿CrÖºòÿCòã/d_E®E›Nø|B&]ÂÒ½sm\Ëô”þ'¤ŠóÆN“¸Õ‚Ty‘Óä®çµœ±xÿÿÿŒÕOOAð~”ùTâq·‚’P5–/ðØv'δ³[Ö9˜ðçD ö D$Ñ4D´(^0Æxô3øu–Q}ΦϧôØZ‡S¥Âk“×r>‡W©b lu8õ”ÝU>q籎¸’ûXGf#àÌ3ºq¤çÒ"8â=Èq9x5„»JÉØîÊ–ð©OJÚŠ]DèŠU"cÞGŠ2 *Bj‰GæX5ˆñr§‰:êÊ´ÎFí Ë„î‚ǹq©ÇºËÔZ§ëÍU§ëÍXGìõ^éÍ€ kT-2Î)¹Ÿ–0ß—V­Üš4Ï©K9OÇÉ:Ï.Uœ R—}Ø‘Ûi:'@å“l¿Ü)œ0`Rhß„|ÓÀ÷©"³óEÃù8k4dº˜5ãóRp¥/#®ùvúWãÒÕñj¸xÖ›ûï,oÑ¥3^Ç€{ Ã(ívQÖІ#{.e8"b͘Ï'kuù,—£6§”WH¹]_œLiœŸÓ6¹ éCn˜W±„`žþ×ÑwüÚÖýè»iQU°HµcãªV²§X#2Ý^îúÌ41ÅtB³îoßßð W‘J¤¿jãžg.Œ¤u‹POÓâ|¹#%ˆ³>(L¼Ü!ê =ðÓÄEéS¬#Ó"cC;}öa§ÿúјÿÿÿŒÖÝJAà}”yI[½ÞH(BrÓØ×ÁLìh²!íå …$VÐú 3!Ñ ‰"¦nÒö¢ ERúö úÍnhbtgæ,äîãœ3sfÎÄ0 cç-¼L1Jq›òoÊ¡Ä['‡“t%ã¨]$‰pi’¥qΖ!.:æÐ9„1œ3Ôß<±\Щ‘K[™%ÎWQ|êPô"¢Zp0£–ÒE‘±+äÞÖ1tè%w2‘¹anÎY^â2”1Ø?θmÛ¶¨sYj¡4¶ó(•V»,ÉY³´•£kެ)óÜÎs†óúú켃m‡bãk$‡â [« §>.ÓNÞ^ãÒ¬ûâð¢‰oŠê GnÿóÕŽÚUÊG¾©mœQ©x¤KÚÅ3W­+Õö½øÉ»?î”Eµu£!$½p'Bc'Š}É8HÞ&>"ºµZ×%ÍO‰MIÒ©OZ¸-XKlò~pßÁ^bá–LѺîs{ÖjSg³Î{dÇX‡S&Ìkáq×pNX&‚3ÕáT%»¢Ê|ìNÚ:ìòзux"†zZ—GºNZ̃Ìa7¯báivxƒùÄÇEeÅ.,òA§cmÞ>‡ \e1ÄÃwh9ˆ-âeNuÔ•H•ŽÚ~— Õç¹¼Ô¹î8µÒ©ÖfØ©Ö&×as½CkÓç¢ 34 ¾'Kä¯K#€F„¯_Õ÷©KÂP¶“±Ÿ]"BÊp X¤=ìƒß”¨‘u²®ý2H8Q@9S΄ì¤ï'& šû i­ÆåÁ¬hÇ r¹ÏÅ®~ :õÔ8vËx»xÆ;r†Ytì´ÛÑçîó(–«]àÕš ÑÈ9缂Ózô÷Ç+U`Y/—âVH4. H8K­êñ5…à‡¤…oƒäšNp1ê©=ÇÁoBËx>znŒ•ÌeÛ¸¢¸ä Z‹u»—¹ÓuLAvÈ” ÆóÛsÚ~覹`òQ­=ç©‹bnlÀTeZ°¸¿Ìá"ÄÞ1„M¼ÌYÔyàËÄî[‡ÇÅrC:uöA§~ºü˜G®È·©#u6ud΢ŽÌYÔqä”uÄò‘´¿„ÅÐæ>®äSé8Òž£§ 9.wL9å$O]CÇ :‹Òw¼Š®ôÿúïð‹ß½rÿº’~œì~ÿ}B¾2žBhû´üýŒ|=‡Pí¼ßü5 °ßßšác:àå5xÚ nÀn¸zb·Á¸ Å>X퇕˜KÀtÀàCèƒËãp~xBå1;›}VZ;øý0äGÉö#á北t¿²‚OU°xÖ­[`G`ôÜ«ƒëõÐxþ ­z—ˆµÒúÛž¶VIm4@— ®Oª_Úzº÷g­¹¶?7Qiá²-Ö;9êf»‡¥>&ûˆÿò6Ìãå$)NÇ9œ`cšÌ,cs„iZxÉþ…Ëà§T­³Ö7|'’³iÍ–¢PdQ&žI £RÚéøð×ó•Béúøõfê½/”Bi3æãð ó«9ä³€file-5.46/tests/issue311docx.result000664 023540 023540 00000000025 14325247002 020762 0ustar00christoschristos000000 000000 Microsoft Word 2007+ file-5.46/tests/issue311docx.testfile000664 023540 023540 00000007272 14015050417 021274 0ustar00christoschristos000000 000000 PKv0C _rels/.rels­’MKA †ïýCîÝl+ˆÈÎö"Bo"õ„™ìîÐÎ3i­ÿÞA ºPŠ Ç¼yóðÒmÎþ Nœ‹‹AêiAq0Ѻ0jxÛ=/`Ó/ºW>ÔJ™\*ªÞ„¢aIˆÅLì©41q¨›!fORÇ.?û§|m •òØáÛÁ«õÍÄü¯?@¢˜åçž§…IÎáwPKù/0ÀÅPKv0Cword/settings.xmlEŽKÂ0 D÷œ"ò@âS‘²ãÀBk RbG±¡Àé +–£73z»ý+EóÄ"“‡ùÌAê¸èæá|:L7`Dõ!2¡‡7 ìÛÉnlUkKL} iFwÕÜX+ÝSg¤Ê®\RÐËÍŽ\ú\¸C‘:MÑ.œ[Ù‚¶^~˜“›Œ¥CÒª³t` ÇkxD=…ËQ9×Ê3Dk·ýaûwi¿PK¢ç¥ÐPKv0Cword/document.xml­SÁnÛ0 ½ï+ ÝS9ëtFìšî¶!@²P%Ú ‰†ÄÄ;~R-;P 9ô`Qôãã# jûøjMq4ºš­ïJV€“¨´ëjöûøcõÀŠ@Â)aÐAÍ.Øcóe;V åÉ‚£"fp¡Â𼫂ìÁа²Zz ØÒJ¢­°mµ„lXføšõDCÅy&Ýá.b-z+(º¾ãe—µø×²ÜpFP¬7ôzs¶óÿôÏÖÌqã-ª#z5x”B„5“®Ú-iÖå §< c¸EYy1¾“ü·Ý²&ŽÿÕ%ÙáíØû7s ‹b¬ÎÂÔ,$§d¼Ùò%b:Òg;VÔ!P±>¤Ÿ4Aé3>7[*ð mZ¡=„BÅOxÒÒ@ø°þ’2ó2,j^i/:Hz1°;ü‰H_Àæá>®ü˜öd½þ^n怟ÂiêDhtÿ-Eµˆq‘Ëät'º:=µ8Zº’¼îúw.á,õëdS©­q ¤¶ÂLhÚ•½Gšûh… ¹ Š-íâLdz3nüñ%ÏtŸ—‡_qóPKcÈÛ›£ PKv0Cword/styles.xml¥TïnÚ0ÿ¾§ˆüPG)"T­RǦÁàHb-±-ŸÓ@ßhϱ›ãÄUiéè—8>ß]~.ßìò,x@M\Šˆõ.º,@Ë„‹mÄ~­î:C‘@&FlÄn&ŸÆåˆÌ>C l½ Q±Ô5 CŠSÌ.¤BaÏ6Rç`ìVoÃRêDi#‘mŸga¿Û„9pÁ&¾aЬó$bîÅ*Gf¯ì·hØjP©KWÙEléê„…îwÆŸ4=\\ýÐÕRòD–3)Œ–™OÛ@FXgXÓdú‹§PJ[ÌÓÂȯ{•¢ _ftáªÂ§æºYîlÿ* (æ•N»žN5¯½kíd]ñҨᣆ'ê=h£÷LjEA‚AÅüã¿§õ¹JŸ@ûª í{NÿcëY½¦{õŒîÛÓðÌýÓ<¶ÿ÷ÏErŽ[ÃC·š[ìž \ùÚ^ù­þ˜jûá?æP£rÄëçŒZ_Z'èzÝF×¹Õtw†¨×-D=VüMþPKt_£x™PKv0Cword/fontTable.xml­1nÃ0 E÷žBÐÞHÍPFä KÇmzFfb’hˆ‚U߾ГLõP´ÝHþO>ðowŸÁ‹;ŠF>­´-u.žü8¼Brpôx‘Ôö ú>…#ùEÖú¿YûjYF-¾ÅÅ1ÿõƒ,7ÏòVpûPK³ã!àSPKv0CdocProps/app.xmlQKÃ0…ßý%øš&[]ìFÚ1>)¬âÛH“›-Ò&!‰£û÷F·g|çÜË×Ó8'Ñ8Û YIQV:eì¡A¯Ý®Q“°J ÎBƒÎѺ½áÏÁyÉ@,²ÁÆSò+B¢<Â(b™±ÍD»0Š”c8§µ‘°uòs›ÈœRF`J`(ìÿ„è׸:¥ÿJ•“ßûâ[wöÙ×òÎ%1tf„–rr |ãý`¤HùøöÑôv?6R•ìöIÈÝËû~ªYq…öyçÈDý²šÓfÀúJK|_WT3…%­…b ÏÔ²×wœ\Wpry[ûPKSÇñ{PKv0CdocProps/core.xml•’1OÃ0…w~Eä=±ÝB V’ N U¢Äf9×Ô"v,Û4í¿ÇqÛ@«.Œ§÷îóóÝój“-X';]"š”€]-uS¢·Õ"½G‰ó\×¼í4”hÍ«›B&: KÛ°^‚KH;&L‰6Þ†±PÜeÁ¡ƒ¸î¬â>”¶Á†‹/Þž’cž×Üs<S3ÑY‹i¾mµÀЂí¦Å¿^%ýÞÀÕŽ“øÇíÁ*wÕ•ѹsrtõ}ŸõÓè ù)þxy~_M¥F%UÅÍ„î¡N€‚”÷éãÓjª ¡Ó”<¤4_ÑœÝÞ1¶@> |¨†™·Üù¥•z¨/sFf‡Æ ߘE…µ®åÂÌ%çaNŒ˜ÆÂV‡SÑøèXÆêü<ªPKGÊ—ó2jPKv0C[Content_Types].xml½”1OÃ0…÷þŠÈ+JBI: 1B‡0#c_‹Ä¶|¦´ÿžsh#¨´°X²îÞûÞ,ËÍÐ'kð¨­)Ùy–³Œ´J›¶dõmzÅ–Õ¢¨·0¡^ƒ%ëBpל£ì`˜Y†*õƒtõ-wB>‹øEž_riMÒ=XUÜÎkÉJøp'(ôÐ#ÏâÉ’›wAd–L8×k)åãk£>ÑÒ)*Çì´Ã3j`ü{Ò«õj‡SV¾ ʨýßÐ!Ðr1BƳM£%L¡£›óV"ùÑ{çÙç>m„©2mæW¶=üÅ"FßY|CÈZ<õpú“õ¡$_yëìè°!¥•R>èà ˜ØÒú_Ì¿úQý•¸(øø_ToPKxDÉä)^PKv0CèÐ#Ù= _rels/.relsPKv0Cù/0ÀÅword/_rels/document.xml.relsPKv0C¢ç¥Ð!word/settings.xmlPKv0CcÈÛ›£ word/document.xmlPKv0Ct_£x™çword/styles.xmlPKv0C³ã!àS>word/fontTable.xmlPKv0CSÇñ{^docProps/app.xmlPKv0CGÊ—ó2j docProps/core.xmlPKv0CxDÉä)^þ [Content_Types].xmlPK <h file-5.46/tests/issue359xlsx.result000664 023540 023540 00000000026 14325247002 021040 0ustar00christoschristos000000 000000 Microsoft Excel 2007+ file-5.46/tests/issue359xlsx.testfile000664 023540 023540 00000010603 14015050417 021341 0ustar00christoschristos000000 000000 PKƒ€ÅD _rels/.rels­’ÏJ1‡ï}Š{w¶Dd³½ˆÐ›H}€˜Ìþa7™0u}{ƒZ©¥I~óÍ7CšÝfõŠœGŠFoªZ+ŒŽü{£Ÿ÷ë½kWÍ#ÎVJ$cʪÔÄlô ’n²0Ø\QÂX^:â`¥¹‡dÝd{„m]_ÿdèöˆ©öÞhÞûV‡÷„—°©ëF‡wä^F9ÑâW¢-÷(F/3¼OÏDSU N»l/wù{N(Ö[±àˆq¸T³Œ˜¿u<¹‡r?ç„®þs9¸Fþ¼’MéËhÕÀÑ'h?PKfª‚·à;PKƒ€ÅDdocProps/app.xmlÏ1 ƒ0ཿB²kl‡R$êR:w°ÝCrjÀÜIrý÷M)Ô½ããÁÇ{ª]ý”-¢#¬Å±(EhÈ:jñènùEd‘5Z=B-6ˆ¢mêh†Àb–Œµ™çJÊhFð:©ÆÔô¼æà ©ï+™—dy*˳„•-Ø|þâ+V ÿ‹Z2Ÿ}ñÙmsòÕë©sšRÉ=(¹ßhÞPKéÙ£ PKƒ€ÅDdocProps/core.xmlm‘_KÃ0Åßý%ïmÒmN m*AAp¢øÒklþdëöíM:W§ì-7ç—soî©;Õe[p^]£² (-L#u[£×Õ2¿F™\7¼3j´ì¢– ãàÙ .HðY4Òž [£u–bìÅ÷E$t?S<ÄÒµØrñÅ[ÀBæXAà 'ÃÜŽŽèDz£¥Ý¸n0h†èàqY”ø— à”?û`PNH%ÃÞÂYô(ŽôÎËìû¾è§ç/ñûÓãËðÕ\ê´*ˆU?ƒPá€h²h@íŽÊÛôönµDlBÊYNæ9¹\•W”LélöQáï“áál[ºØDúìÁmcL‰¥„u\·›¸]:¿¿äñ*åæ`+SÜŒTø´ª¿¡²oPKYØ/ PKƒ€ÅDxl/_rels/workbook.xml.rels­‘MkÃ0 †ïýF÷ÅIcŒ8½ŒA¯ýøÆQâÐÄ6’Öµÿ~.[ eìГÐ×ó¾Hõê4êˆÄC ª¢…ÁÅv½ýîíáVÍ¢Þàh%°«¼Ø€I/Z³ó8Y.bÂ;]¤ÉJN©×ɺƒíQ/ËòIÓœÍS­[´n+P»sÂÿ°c× _£{Ÿ0È Ír‘3ÑRbà+/2ômùå=å?"Ø#ʯƒŸR6w Õ_fïz o Û­P~ìü$óò·™E­¯ÞÝ|PKOðùzÒ%PKƒ€ÅDxl/sharedStrings.xml5A Â0E÷ž"ÌÞNu!"iºÄèB;¶dR3SÑÛ.ßÿ<žíß)š ™;Ø5-â!§î·ËöFÔóècfêàC½ÛX5Ueé`V]Nˆ2Ì”¼4y!®Ï#—äµb™P–B~”™HSÄ}Û0ùÀ`†¼²Ö,˜•Ãs¥óŸ•଺+Ř-ª³ø°fÝPKµ‹F‚”´PKƒ€ÅDxl/worksheets/sheet1.xmlUMsÛ6½÷W`xÈ©%9þhB1ã‘«¦3Ž¥±œf¦7ˆXŠƒX¥Ø¿¾ @ü¨’C¦š‘Lìowß¾]g¾ÕŠÀX‰z‘Ì&Ó„.PH½_$ŸŸV¿Ý$Ì:®W¨a‘¼€M>ä¿dG4϶pŒ´]$•sÍ»4µE5·l@“§DSsGG³Omc€‹p©Vé|:½Jk.uÞ™ŸÁÀ²”ÜaÑÖ ]1 ¸£ôm%›äYˆ°1¬”Êù„‚Ò.¹²@¾†ïa îsüî 7dèÜiž¥§Ëy&$Eð¬0å"¹ywðþ-áhGÏì(µÀãÆ ƒÂ#³W”}«¸ýñO#ŽÔ@VgÚ“ñKT‰#jÇØñì Fî+ÊûJ×C:¾Û‚¢à Æ÷Ö­SdûRïPõJÞ*çS ph:ûJY$Ú“­b J…âYáßý‹ð¯Þ&ì±Þ\u×—£ãC¸}fôßól[$²)‰Ìëg‡øìMuêjð”7Ükí”CÂ8Y0ä2œãUf¿Žš”ö?w[5QûO<ëÁsJ‰Í'7Iw§{/Ϩr~=Š7Ö³|b¾’BÀÐðšóõÍ©üZúyòÃóâiò%Ká*²Í&—óéÛéÍìêb~uyRŽ1Bà;îxž<2ŠÖ:¬c:CÜ.Ýó âÛ]E'#F!ÜÃTHå»B¨>ΓkÃtÙÏÒ!ŸféÁ'H_Ê©c'&٩ݺ ÃÇ*.mAèûAäçÁNvùŠÚqµ¤‰3"—Ö’“Å÷Ž4Îñ'nö’«0 ÓÉõ—‰•wGÒPXk—óëþC¬íÐM?òTaþ€i¬‡sÚï¶!™6`¶ò•úû;"È»”Æ:/ü‡¶ÞAldØ7_N"8{é%ÌîMˆMÛD?U ×ÄuÏH"€ÇÍÒ q†KŠÖÂÆóæ.*yày§xñ|«Å—Jº~»1aøhg4=K¬ýµ~ì5ÈÕyâç]ºkä"¹ð5ví,6Ò·;Œa$rècB–%µP»€?¤Ô™×Büqdœg(DÜ„ù^7ï—á÷Í×Ýû'ÚÌ–=Ðâ}Äšë_aO ÖDgxo6n³t€ñˆ1™ÿ‡è9aáy`OXY:®“Žý?Æü_PK»Þ{r\PKƒ€ÅD xl/styles.xmlí˜]OÛ0†ï÷+,ߤ¥˜Ò `tš4!Eš4íÂ$NbáÈv¡á×s§iR„¶v+R¯l¿9çñ›c[u-GOT¦äBŒ¨LTÊd>Á÷³é猌%2%\I:Á5ø,þ[qzWPj¤™àÂÚòK˜¤ ‚˜UR O2¥±0Ôy`JMIj\’àÁ0 Ç Lâ8’s1Ö DÍ¥­„|ó=q<ÂÈã.U V¾]]_ÝžÿÀA Ž2%WœöB™ôD8@B.‰ ~|®áNʈ`¼òâ°FúÄ-ÒÃI¯WÆy[”!öB•ÄZªå¨éϪ*+a©=¦ŽûCt®I5uêæ}P:…­Õ]V/¡”‘\IÂïË Î7·ÒWõ,—bqšYk–®µª ÄZ% ³ÌqS{rÛéÊùÛ§?³ÕÛ‡]do÷•¬°ý÷¦ëIÍ€”%¯¦ÊA¬žÓF¸¨CzÒ9g¹t-ðF+K[³ZŽ#² D…ÒìÐns*©†uu§Ò²ÄIþ}1²tao•%žžž5)g ¶Ed2­'†g¦ÐL>ÎÔ”µ¡Lekq•<Òti²`)¤v"ƒE¶V©pU§Á¶uj|®ª+w+µÜÇÌpoæ3[Ÿ­½™½™½™½™½™mÌŒwé—r4Ø)7£r3Ü%7§ÿÙLн¾ûË|ç?Øö¿ÈÞ:ïúùGëàN4¥ì| µe㎊ܧæ_»onÞ©ÜÜqËd3Jæ^äÂk¹Ö1—J²¤ Žz˜Ã 1èWø»E{¨ñ¨¹ÖT&UK:î‘F›“z¾Nz´ã¿§ÝPÀŠ· Óèè}ÐêÈÀâ«¿hâWPK¤µ»–çPKƒ€ÅDxl/workbook.xmlRMoÛ0 ½ïWº/¶Ó¤A”¢hQ´‡}`íÚ3-ѱY2$&n÷ëG+q×;ì$‘z|Ôêòµsb1Ùà•¬f¥èu0Öo”üùxûy!E"ð\ð¨ä&y¹þ´BÜÖ!l¿÷IÉ–¨_EÒ-vf¡GÏHbÄaÜ©&µˆÔ¹b^–çEÖËÃ2þGh«ñ&è]‡ž$«O­í“\¯ëðé`H@ß…Že_ƒÓ²X¿ËþE z»ëo¹ZÉ\B6Ú†á[ý‚šØ8'…Âê¢ô]¶$ë]-¦E)2pÚëÖµxY>ä·b>›TËmʸÖQ-šÔ¤è>€ã•Ç^Eþŵ J·j òº,o¤ö.‚‹yLbV=1­l¡0>ªj!_:’EúŠìþK˜µP!tV«ÈýÉ3¿hùŽ””c 56Ðù7Éx½@H²q‘êNÂùÕÊj`÷ž% ¬4`òÀ–€ÑÂqlíN‡ïgMê#‰C·‹öÃcûæ}›¨ÿ3ƒ©Qæ9"ß%:;j ÊPy‚ÞúH£:’ã2½p/ßþ‡òˆÛ.ÄhzDûÿè!ðZôʺRÉñ¡˜}PKbÃ4WPKƒ€ÅDfª‚·à; _rels/.relsPKƒ€ÅDéÙ£ docProps/app.xmlPKƒ€ÅDYØ/ údocProps/core.xmlPKƒ€ÅDOðùzÒ%hxl/_rels/workbook.xml.relsPKƒ€ÅDµ‹F‚”´‚xl/sharedStrings.xmlPKƒ€ÅD»Þ{r\Xxl/worksheets/sheet1.xmlPKƒ€ÅD¤µ»–ç  xl/styles.xmlPKƒ€ÅD‰`Óf›Ìá xl/workbook.xmlPKƒ€ÅDbÃ4W¹ [Content_Types].xmlPK ?.file-5.46/tests/pcjr.result000664 023540 023540 00000000025 14325247002 017465 0ustar00christoschristos000000 000000 PCjr Cartridge image file-5.46/tests/jpeg-text.result000664 023540 023540 00000000045 14323532062 020441 0ustar00christoschristos000000 000000 ASCII text, with no line terminators file-5.46/tests/jpeg-text.testfile000664 023540 023540 00000000006 14323532062 020737 0ustar00christoschristos000000 000000 /*! jPfile-5.46/tests/json1.result000664 023540 023540 00000000017 14325247002 017562 0ustar00christoschristos000000 000000 JSON text data file-5.46/tests/json1.testfile000664 023540 023540 00000000610 14015050417 020060 0ustar00christoschristos000000 000000 { "Image": { "Width": 800, "Height": 600, "Title": "View from 15th Floor", "Thumbnail": { "Url": "http://www.example.com/image/481989943", "Height": 125, "Width": 100 }, "Animated" : false, "IDs": [116, 943, 234, 38793] } } file-5.46/tests/json2.result000664 023540 023540 00000000017 14325247002 017563 0ustar00christoschristos000000 000000 JSON text data file-5.46/tests/json2.testfile000664 023540 023540 00000001075 14015050417 020067 0ustar00christoschristos000000 000000 [ { "precision": "zip", "Latitude": 37.7668, "Longitude": -122.3959, "Address": "", "City": "SAN FRANCISCO", "State": "CA", "Zip": "94107", "Country": "US" }, { "precision": "zip", "Latitude": 37.371991, "Longitude": -122.026020, "Address": "", "City": "SUNNYVALE", "State": "CA", "Zip": "94085", "Country": "US" } ] file-5.46/tests/json3.result000664 023540 023540 00000000017 14325247002 017564 0ustar00christoschristos000000 000000 JSON text data file-5.46/tests/json3.testfile000664 023540 023540 00000000254 14015050417 020066 0ustar00christoschristos000000 000000 { "abc": "edf", "json": "crab", "ololo": [ 1, 2, 3 ], "subcrab": { "name": "crab", "surname": "subcrab" } } file-5.46/tests/json4.result000664 023540 023540 00000000017 14325247002 017565 0ustar00christoschristos000000 000000 JSON text data file-5.46/tests/json4.testfile000664 023540 023540 00000000004 14222627502 020065 0ustar00christoschristos000000 000000 [1] file-5.46/tests/json5.result000664 023540 023540 00000000013 14325247002 017562 0ustar00christoschristos000000 000000 ASCII text file-5.46/tests/json5.testfile000664 023540 023540 00000000006 14222627502 020070 0ustar00christoschristos000000 000000 [1] 2 file-5.46/tests/json6.result000664 023540 023540 00000000017 14325247002 017567 0ustar00christoschristos000000 000000 JSON text data file-5.46/tests/json6.testfile000664 023540 023540 00000000012 14250650675 020076 0ustar00christoschristos000000 000000 {"a":[ ]} file-5.46/tests/json7.result000664 023540 023540 00000000013 14325247002 017564 0ustar00christoschristos000000 000000 ASCII text file-5.46/tests/json7.testfile000664 023540 023540 00000000016 14260611305 020067 0ustar00christoschristos000000 000000 {"tag": tLue} file-5.46/tests/json8.result000664 023540 023540 00000000017 14325247002 017571 0ustar00christoschristos000000 000000 JSON text data file-5.46/tests/json8.testfile000664 023540 023540 00000000016 14260611305 020070 0ustar00christoschristos000000 000000 {"tag": true} file-5.46/tests/jsonlines1.result000664 023540 023540 00000000042 14325247002 020613 0ustar00christoschristos000000 000000 New Line Delimited JSON text data file-5.46/tests/jsonlines1.testfile000664 023540 023540 00000000006 14261613364 021123 0ustar00christoschristos000000 000000 {} {} file-5.46/tests/JW07022A.mp3.result000664 023540 023540 00000000143 14325247002 020242 0ustar00christoschristos000000 000000 Audio file with ID3 version 2.2.0, contains: MPEG ADTS, layer III, v1, 96 kbps, 44.1 kHz, Monaural file-5.46/tests/JW07022A.mp3.testfile000664 023540 023540 00000037017 14015050417 020553 0ustar00christoschristos000000 000000 ID3$TT2 1073cueTENiTunes v6.0.5COMhengiTunNORM 0000034D 00000000 00001E00 00000000 000000D0 00000000 00005223 00000000 000000D0 00000000COM‚engiTunSMPB 00000000 00000210 000007B6 000000000000BC3A 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000ÿûpÀ¥ mÊHªä5¤¥xœœ9²djnŸ †îЇ<˜8]ÜcÝÝì_ÏÄ{ÿ¶]Ýï‹×·sà·ü8·DDDÜï]ÝÀňDËâ;»p1o7?Ñ Ýúçþ~…]Ñ(³ˆˆ-Ϻww8ˆ›»»»ÿÿC˜°âß÷†@™ñà üÇÿÿO¿qßø:Ì<=í¶Ûm¶Ûm€ÚÔê‹X— ÃSX<“»bO1Àtl«(R®+®EkE¢3„Oxir XÄdKæŽ×%nîê26¡†•5¢$ž •­?´’îE¯Q%_Ϩš×&Ž6“Í âô+o;«Å-n9sXÄQ—‹ê¢S%8¡ò‚¤¸ö²)"òœV‘’ßþ†YÖÿÿÿÿÿ`ÿûrÀ€S!-½+Ò!$b™£x@‘ÚÚ,z–âq&ÎT“%Ry£l°×O›£¸ÅÌïæZu-›–áÏ<&Fg´Æ¶òwqèà¼Ë¬ÃˆF 26”$”ƒÖ”ÚPÓ c’| d¨~È£)Ù8:jMR­)±Y28¨•JMÛ 4‹bÅE˜×&ÆMÏ`’UØ’ šzÝ­1Ò`ÿû¿ÿÿê ß uÌ8l>WK¹=ó»l¿?ÛDzº™otÏ•MßýÂQƒ" €Yä‘ L^ j³ T%„]°è‰LšÐ!7¹èÈlidÈ>­£1ÚŸÍ»ã÷ìù‘î Î(ÒBê7ÀÇ’…’KEÒ:ÀëOÄ3XÛÎhr_1B ´ÍšÀXa FjR@ G9@³@ xÞ;òŠÿûpÀ€‹m$iJ%"A§q;$ÆÄê Å–ÝÛoÊ^¾§W¦âPŽÍª©)F›UTÜÒo‘»óMþ?ÔàVm;$ŸÃËÕ5Ï…4°E‘Qx<]$4صìêßüjn]@!_ßnÛçþNtýg-Jöo§|{œDÞÿaþŒ:òâÁÒÆ;Þí±o¶Ìñ.Fâ~&1{>'ú—S©õ×ñ|’R2i’qÂvr¥É1›«Ìzr‚o¿í<”ú¬ËÕ C¦ŠÕR1º ¬šÑ¯@?B€`2eñWT·8ªjj!\ f,€à¶ºK¨. „sÀÃX-æ¡Z  K é ‚I’Ál8 éHº‰0ùÑøj% ¨‘.ÆÅDŠh2ÒdÿûpÀ%€>Af€*-æ ¸0βf¨›ºÎ×Z©ÌdV¤SAkwÓji¡Ah¯¯Q0­Qwœ "PMÔTdRvSº&+}›£A:¬´Ö‹V}Òu®«[ôõ.µ©µªM[ÐÐu}Ò몽k]]JVëÖß®´êC]OíeQÓ¯w ÌÏ® (8^zÃi†Æ  ‡*QA;QÊ¡ºü±X†¬Ì$fÐa„ tCœ(y¡J,âd‰ÐŽÓW;ó¤ˆ^ïî÷D/Iîîý¼DBGw2qaÞDä‹?®z"'ˆÝÞ»½@ˆ†ˆ+»¥°aŽNø àgVÙwëÿó?¡þü?@‘s‚ ÊO4ͨâ„#Ì;cäÁž¶³#s^ÛD¤€˜žJ4ÿûrÀµ“4N,­Ê.3& ×¹_Tä‹Q+HùÝ ¶Îƾß<ÿô÷¿Êˆ²©¦þ½=ÁÝ”L@844¥¡ŒêS<¥)hÊÔM’ªU¢¨c=z”­B–a ñŽ¢Áã(ˆtUD:*H[2àª!Ð Œ„&Z!†YÍâW)a)† (6a ‹·d>BDòí€cΈz…‰}‘›TÔHÍï Ú±l²­ÌûPý\ÚØ¦V6áž´¾ÿÿ7†±ã]f4{:O¤ÏÓïÑXãGÜÖ8}Æ‚±»UŽ5þ®ÓK¨{iŸCÌwÿÿúõsS¦ßÔòÙʧïýÖ«T€` /aÌi»Ìx„c P@{Jdi¼àGBãÓÀ-J1Ë’Q4èž’Ë"MÀÐô†Î¤S8qÿûpÀ€=4uÕ€ÏÈ(Û*ÐË#fÊ9Wµ½ÿÅJeæóÄ=íÿІ}ÿÿÿÿþÆÚÕ/PÒÏ’âé“u/¦E§óüó¿ê¥ÿÿÿÿÿ÷5^çÍ¿æ"§ŽfâªNïJÙcºPA"À±t  Fi* K€À,l€Î"£Âx'M‘GÀ¿”‹ˆ&Q% @{$F9uh ¡€-&18RAª¢t”dOñÆj›¡cC4è’*ZNq$)ý$Ž5Ñ<íZÓA’¡E]®Æ®ÍS¨ÁFÆ”Ñiõ¦ƒ¢jʦ\5Hs”Ë„™.}2ù}Zot´Õj®é;5#+h"ªÝ ) ÿÿÿÿõ:ÿÿÿíÿÿü@'¨1C1-^‚Žˆ¹ Vò7õ|JŸ±+5-DÝøsÿûrÀ€MmP]¦€ %¦j ¬zj˜-¡Ï@Äá4¾\a^`…æcœ¹1sSš”KId[ý~´æïRU¿þ´Ô×B«ÝOú‘¤´­E6@éLåhDÙ©n‚kvM¤…+eÿú)©ÐZH1âÖ‰4 $~É„Q™rvÆÑ‚¢B”²uRŒ=qøEI .\· 6w*¥z´‡-™š‰@Œ&ËÞêE$oÔBUZ†ÞR·Þ?ZlϲôLs‡ˆ nÞã+øŠ˜Î®l¥C­\a”¥+ Š˜Xƒ̪F9Ž‚ .aB‹™Z¿"y À€€ØàhNå ™D;¢“)s‰Ð:¯@÷¶OJÄ ßN.·àÀÒŽÀ €@S&…¥˜Å8 Q( `¥>J÷«­ ÿûpÀÝeTL‰ÿþImÿâ¬;×…M‰/ÿûèpYh!ßJ’ØÄ$„Æ¥¡åÿÿË@A0 ›äTn•YÎ]Eö ´·½$ÇgäHâqÃ-¤•øšæ3þ#TL_zÓ½ `l•êÕ(í¨bèô;‘¥‰N­\5.`0¿U4!ˆåË“ƒ»üÿÿÄ1Ah]Ö?ýž|ÿýü,øzÙçYÆßýL1Sï_]‹„ðÝ9‘?Zê2î Ò³ÿÿÿÿñ­æ× SI½C˜ñ Ð$_ÿø {ÖÙ6ì•ÂÊufÆeªÛ"§e®mÑ7XÃöÕ˜_º(Ê¥Bƒ8‰9{ @Â\©Ú’WXß2:GµCt çÿñì9JÆ·¡Ý›J¡ÿûrÀ)€¹_^l<­Ê +«IŒ ºŠQeunÈ¿± êiYÞhª*å!ެv#¹ ý§C‡:%ŽB ‡!ÏnÜHåS¤d«ƒÑãibæÀåWHÚRAäÐwRCö²±¾c$€wÁ Ññy9q¦Í¬=Š b%L0×ãQXÄŒBàfhÞ4úH½-»\þ󿳂!àÝšŸÿ¬ÚŠ·rº·I\¬j´Ô#ç’¯:¹Ôzu[¡ÝÔ * `èÖjHÇ•1 ¼›ˆž$ÀÆJ‡DÕÚ#pâET‚fVÔÞ³ñš°©Ð¢ÐÜ'‚ä‚ä p)I?CUñPL*…ÊáÚ{F¹ŠŠHåíé¿«V´Q@00tBÅÿÕýÑÜEXŠË¥Îîs*ʤtNgwR›ög:ÿûpÀ7€qYZL<­Ê+kŒ!¹ª¬îÌ$†cŠN¤·a‡>®rߨxÓnÿD<d‹nÒÛ¢}˜­¿„z_3ü{•¯­–ní4à pT5 9¢òçú+z7Z¼º5„J_qÞ†çoÒÞÇ÷–ó9 €A?ÿÿ?ðÐΑõs0¹m·÷7º‰teÞ¨l-õJ«ÿUÍÍQ*CXµŒ9…PM.\M9¿Tolf‚b|A£Í.*”µ'Y¥’ŠIb•”9¿}œ»uiñ¯•™ÚHz?6ɨ.Û PÓP÷-aÝî®ZÆ­™šŸÎë\µ—(ÀFLoÿü¬cå¢YŒ—ׇ©ÔìÿmÄ“J®'c¥ÎÿëÿK¾Çª,j36Ì@ O¬PTTB‚±qÙtW1€ƒ&ãªÿûrÀD€ù_RM`mÚ+*'ÉÌy™€6¸’€€jP´“"Ûa ¶)êù‘ZA¥åiY ^("X´”0j-À4#A‘°Þ÷3Œ¥|¥µ½Ïå…-0 D:A‚0‰F˜‡ÌŒÿ4n«Ô_ÿVÔ‹‡,”Ìî|5¤eä_üÏžR¡˜9>!F`!B¾ ~(< P5ù`çÁÓèd«F0òÅ™XÎTÕ]‡HGVÍ?§W“7âoÒP<6¤A„P±Ip•%hʦ亯žveŸcz¿¡³·º¢ÎCóÿSR¶Gÿ¬Òè5$Pš+1Ûý(ÊÏîöe]gW*r€@€ã H£ØUúºÔ.úÑ! 1A`  DËfrJ]pH:<š0È Ô¥ ÿûpÀQ€;Bmäë±hMÌ•¹Å%J:R ½›K,Ò•òä1^T¢Ðý‚ó”ØÞwlØÝóÿ£ú¸ó×þ»«W²¥•¶ÿU{5?ô1H¡À˜¡UØwþö1žzº•Ø™óªYlîRÊNR=7Wióúi¬À}‡ Û΀¹@¡Ë D Þ‘Z“®vcŒ6pPdã¨"¨œq)aMXºTŽhuH"âØ‡1í&z˵;Íc¾LÎ?;DTc&Š…‘çÿͯþŒv;€‚ 9ÄȦÿ˺6Ê¢†LÙªŠWqÆ4ˆ*¤¥-+,#Ô‘1ãà'6@Hd×Yó*ƒÆ¦Ÿ/%ÛÒ$ž0p(xL옴>Õy³Ý).‰è@Û$£|«GìCm”ÙK©QÿûrÀ_€-OBmà«Â.0çÍ̸qUtÃðÆ< ÝZ<µ{ŸŽ³ÎíÏ*’p‹h›\êýÚÖ-8ÿýÍ0¸B>XJ0¸™Ë±ÿó'¿9r(n¶©¬¯(†¢k÷ÿÑò¢Ï!*YA¢c>n ~M¤"»Kú `"ìU:‡³Ùj©u;$5—ä 7 Ä€&+XP #w(š8ͬ˱üêGûò¼w—.÷svy®Ä ýL ùZÊŸÛÞs8¿üèU8 áâ£D‚·×¡Jý ¦¶óí"È ÔÎ~oû¯_½£n!Äę̀µ§Þª¥—Š‹|)ž“=k¥S ¢Ì(å#ö9 x е]„ÛÉÆ$òËË4ˆ+LÂÕG¶®6²w“Ÿ7ú3!f„HbÿûpÀk€‹>nd­Ê(è ¼xÕ¬§žÎÇ/õèÎn}›esPÈ?Š f§yõ=Œ+ëô&ýÕÖtÇNj^cÊ Žv¨»]Ü €ž‡¨9*ÆôÊRÏ\–-×±óMA2ˆ†‰¦TéŠdË^âà €ÌÜȆC²Ä„³ J›Ò¬¡Ñ]#k–é(AàEW;›]£_zW f#œM¤MA¾”àQÔb×`9Ù¹>4ð±÷9úœ[+Ç015ÿtoþ˜gtÿ«YÎáä2œºœ¼‚ÿûpÀv€%E@mä«Â©h ̉yœC¥^W0u0"b†eVȦFâ¤:-9]ýÿû}uüH yâ$™žšÆ¥­54k €Ìz u‚Á ô•]Jáá1z9X[·S.m‹_h´íÜ tpPˆmÜKI^av{.êåïÏ÷Ýoó¿ûÇ ;À>§E#º¹ÿ«¿û©JR½ †–½æ¢ËT{œ\ó´”3š!®þ³ÿ«lݨªèyýIcÂþ( x¾‚!&*T<“G#PZ„A)$‹[u¶·!Å*ÊdópÓ† º‘›¾KáPï Õ+e–}½Ëü_÷»ÿùT©iÓiž•ÿò©™ŸþúÆtA Ùÿåý ê,®UE[YS=œíݲ–Žºè÷ÿûrÀ€Á@ndMÊ4h ¼ ¸SµÌ%‚)†(DaÀs‚7\°CDOWB)~ã°pµE ( ƒFµebaÞmTü¥zUas²†m”f\B 8=†J¼@Ó¸Êp‚7»ZûÚ»qþý»;×{g²<8_JQÿWöÿ5J‚% †G )ÌÄ_ÿÙÕãÞÊ­ïÐòÊÿÿôe=*çA0ÃD&©HÂL,¤I•`ÌLç Î(a7 ñ¼¬ê\ô¢”º7¢¤¯­ e4ˆ-X· yû©kç²æµWw;ÞæænæàwqnÿŸŸ¡eÏ÷1⟢q‘·T„¬¤â¡…¹î Y!{»ºw}ÝpoˆHHæ{zÀøP¨Ú+Ì /Š¥ÿûpÀŒ€•>nd­Êªh‰¼ xÔÀ/©‘|Œ€ØhHtxÝÉ/äÉ…ñ… ¬1 ©Xˆ²&¦IìB…Ãâ©M$|‹»réê‘)ÙÊLpËv°ürÞ±lk]Á ˆº››-ˆ€Õs5íÜê¿5ÄógcvÀœ!­+/:¡â¥äô7£3GéØƒ®äµy{ì½Q”4þ«S²ë±V…•°ºåY›ôG%ð:tA•ž–JÅr!l>0¡Tw6gý‰É„¶Û55‡úßyÊäÅ#ùrŒX|Û+t¬F`þEáåªV%TD©É—ò|fÈ& qj°y6F£9ÌÙ€H#§ÔÇ0s%U‘¬ãwxéjEÝñ}VÚ /–O·ýÎ4 R¿úÿ[Ðd¥ Dy®äSÿûrÀ™€ÙŸ@MáÂ].)ͧ¡¸ÉGŒUj›gdã™Ò¸"'Úæ~~"Wæ""ki»qé/)v®ÂÌIƒ Ø$sX¢ÜxÃ5iºh $A$Þ™ …~Ь¥ ú?ÝPù(/$Ž3ðŸS±RÍŽmˆl@´* åšœròóáç’,;o~KîVôóS{µ}3Àb)ÿÿåW¨æRuЙÐÌJ¤22!gPÒ˜ :Æ$\¦…ŸVOÿòÉUB¼¦çEƒh‡\5uÒvPàýd!ÔœI› r4¹DÒ2•.fa¤ƒ¨xƘ˜4¢ ®Í(êë©°ºT›Š6Ç´{Hºž-õ·Üµ¤\A}DœW?ŸÇo ÿÿ‹• Ô(hÔMC ,UÑÒ”xr©ÿûpÀyaVlíjæ¦7_›œûÙu(\<ƒàK6?{hæ~n¿úý6«/sAè=vÄN*ÅN›´Ñ#†Í<û>ÖK^×Ëâ¯užm²¢cîj‹¿ÿêL¸Åä‡Ü㇟ T±_ý÷Gp›f2ã5—²"ÈÈFÉaÄúar—\h1ú܃RÀô.ô4îÈ¢xÛˆcnŠQ–Lãk:Uyµ0G¥9í\ÿÇÓ;?lìxÁaÂCt‡NpŽ¢-‹œ#ÁTD2 ¨y>'¹:†SÃ$q}7ßÿûrÀƒM%VlákÊ**ªÉŒ!yÿÿu;ÕÐÌD–úè̽ÕN¼IXE±Ñ‹yðL>dìMºO` Ø‘ÅÚ2ø8àÙfFéY›â`~Ã)Þm–®ûÚÏ…6;mifºH©=-l¬xˆIDÙ>LÊÊE t‚êPxI‚á6qRP¨çt¤:Â%;–ôý?ûNWa0¡1âhãÎ$0wIë»ìPìNòSÄr&Æå𞜰¡„ÌCf‹ö ÊÙï]u<Í›k‹‰šÝ6vç‘·Ííò~.(`ˆç‘:Áqí",!7¼X]Z5€\Ï oƒn@õ,Ñ1õnD§jäF_›Ê¤[%‚‰’¨Ù¨xUjoQ“ƒa¢Sdrzó#™GÎS(#R``’1½#.N]Œ¯9Á:žÃƲ G4mO|?õëÕÕ+s­„­„$¤ÊI1òòîsÿÝ’ !îl $Åç9¯BÒ}>šm74FlW9ÊDÊb_‡½vè BÅ©¯!cãÑX•28 ¥3b8ù©±(=Á¸_Dˆ‚à ); ¤ã€•›‘ÿûpÀª€E >m±+‚g°èN´8*GÂèà)äC„2ÓaÞ 2è¶P:ÆBÂìâRb9„Yx+FA&1Ir@{:Fç† ç-˜O7"¤šF£BÆÑ艛˜Ž"T—äÓb\”'q€ã„wCÈx !pÔÑ«ZÞî0#á@ÐÜÐÜȸf™¡¡Æ±¡ª*j*’;?ªƒ±’ÙÛº”yt+uÿÿÿÿÿÿÿÿÿþô#HˆÕ¾ÞêwþÝÜëïëìÑ1茻ÿ3LpíiX̦3tñ¨×”Û#”Çådö£•ÅØÉh•¸Ì¹rÓiH¯ó°À뵎?Å•wóZ½á80¦¥¶­4ókÒ·bõÍQßW?ÙõÓ×»TÞÉ›Û&z¹ÛZÎÌßú™}®îîSþgw?w±uA#ìÿûrÀ®€ÞAJ9F€$­j °À¨½ã€€1R¤jmE9ArIŒÿo©cãÓ²rî^£ÂÎ)µmP5¥© S¬°'èz¶„­þbjµD¸¾{ì¦`ÜGVvˆ¹bäâš75%­"•u¥¯Mé¨Ò?"¤•µ]œœÜ—ÚØä!Œ^ßù(I½ûwwžò½l|¯/îßÞÚª«fÀ:"!¥»™‰3à7ès„¿õ!úÒim¸1|úì; Û —¨_;9Q(·gR¦^ ð?Á¨0D«º²â0%V:Ãlr"d‡îäe z' º0q(ì4âMåý5œ„kMľl¢ïÕþ›{æ6ÕUUi{“ó[ã÷Éó÷ÿ­ã¤pÐúØ@I†aš©…TU"D*°ˆÄ&ä-ÿûpÀ‘)]N,½-Ê+ê –¹wµÔ5¼Ä7¬­Oíá¦UÉ”áûyõI^Ï4&8hYRäÓ\ÿ«¯ÆGå‘»ÊâûúÌ„<¤5§1X\qqRM*Vd¨ë³±Š(…1¯TEÿ5%3”’9Ø…3HŒY"£ŒµîêT\èbæ´g,ັB`L‡7åeû†Öùî«ïIaîãÅ==Htž YyˆpÞv»¿Ã¸nk¨‰ KáfÌ¿éþg•É’Ž‘å)J6¿úÕ,l§KšX˜Rs:j;F«ÿ§ÏûGÔÕuÿë=ÏÔmÂ÷1M1l>Þ*(f1Æ E¨Š(,hÖÀ`¢€†TÊO—’':‰ñ¡¥g¢â9`lpó=׿PÄTÂÖ„ƒ‘‘æÿûrÀžYeRl<­Â-j —¡¸Kicê;1ΨÞ~ HP„b"¤G!£ÿãymˆ–{sD4IT{ÄÂüÕÛEÇp£h׋¾¾~ÿÿjÿlÂØ^½`ÂúˆMžû¢TjÎL²€¥ *"ÍP"X<@µâçaâñŽ/ÙF軉X Ï<ñ§~¡ùdkéjÞš]~ÔJ<§mÕ?TXÿþ}‡_È*'‡nøŠ‡œE?cK+£*Ìf<\& C#%ÕžÍ9®“{N8t¶–¿ÿãqÃ(Ý™ÍÌ=ϲÒèz{”m–ö´g1Æ ÙUù³ÞošÖÍÄ#pUH€(h³;‚™@jÊeót±Ê«é-ƒ2³IM¿Ñص‰fVlÑÊìËgè%™4˜ñ©¾á>ÜeQÿûpÀ«€ÅAPm= ʬ©É¬»:i4ÇzplOF¥5¿(RS `P<Ã…Taš&·¢}EšÓW7\ÍçUrñåÃΧMÏjIÿÿ0¤0©¨Á†>X“§*RDœoá@3XZƒÄÆ8,M PX5Â@õ´ä³Ces€æw¸Þ˜ÞlB\Þ¹632G€Àøº%ÅÈ [÷Æ>mŠ—ëÅÑW%ÃÙ’«÷|Ë®œ] † Á8îEGxqƒ×[Kïî?ý&žÖ`góXáƒE&ëçz¾Ÿ´Òôv±„çoU@æbE52‚` òÄŠ$RŽŒ’€f€Ós0D‡|-ç0[b.4MÒ9qâ].7r…i`áý[Ç—÷ÖsuÃÖÿûrÀ»€•eHMa ÊS,hÉ·¡¸Y{¦;ÿÜÜCæšù"‘DaH}Ò“È¢Èv›Yl«¸¦õ6ÿ®{ú׺=ÕMÄ=K>Ó»ÿ‰žºøö·kiËéÌ€G0äÅ,#P0+iÍ ¸Ä!aa ã#n21“P"2@›Ô£¶¹œåYn»¦«S x˜¬™[6°ÂÜ{D<‚C‰¼ß=>àßFgpܼ۴¿ÿ÷E*Hጂ“ÀÔÉAÄ´“ñ×öûýELE3¤É‰_üÄð‰Uÿï7ü÷ÛÂä%ü`и阘€˜,ÉFÌ(àÈ DG£ÁäÅ@C™Ñ“ ‚º@5Y©ì´µ^J;]CqƒX®ÔZ9]?…4|Eo£äÄr‚$…厷j§Ë’º¾¬ñ¨rÿûpÀ¹ecFM½mÊA¬h·¡¸![þ§¹Ìz1øôG(*ðl@ÃÓÆR{¹G94¥ßÞÇÉJ±deü¥Ê3¥ÿÿ¥ÏBÅUqîgWkrµ %FÀAcNšƒaTÁçŒÃPNA4aŸâ†f:(”j•Ÿ¹ïW׋“Ëœ´®Ë‘¸¦Y`…‘ó ›*‘ ÉO=³ðùÎfWÂqú¤…ÿÿÿ×µHap” ö¤4Q)æ.ÿÿš¤„ê$ѵwÿ²Ž(x¬2Ç5 UÌZ£JÁ£4t&@”ZéƒY *ÍS™zÀ„H|K ÀŠ@*& \xÅfˆb[´èl30ºlp¡ùØýéuU«ííc1¶“CðFàhäѬæµUøöHùQ¶¦#°Ëº§ŸÿÿéÿÚè¦K¾ÿŠá›Ð–|ÅZÏ~íe(PI¬a‰¼ÌQMEB9y†Ž °xR(ÔÌ%i±„ÉÙûæ‰&œdï¼ZHùRØZmq˜ºhôbKf ”™ Iüø9±4O²þ†¡&„i›n?þeµ{–å‚1Ð$ ¡A™z*:É:ú·¶îÿÜÜìEŽjbëÿc¥,„7ßïl]ÏõôÇ9¯Ý€î iŽJ}šQy0Îm`„H8tÏDB³†\hHâUA5g[‰¶#/a–Í17bÜ?Õˆl5Jû"uœçNè‘–Âhu³E ·Eá?—“ƒ^Üå;ÿûpÀÁ•E@MíkÊN,¨ ·­¹ÿÿŽâݤÀ°|°ÈÀÌm7FÔÇÔehî;¯þÿØîâ¥FFNOýͲÜÇBUÿ7SÝqmÎ&¥P²®×ôÝhœ3P£b1'@1°ýÉ…%GL|ÑÕÌ`Ь AaSÅn“¸µBq‡YßË)¤9ÊR%1tjAò¥8Ää*Xù$-Ï\/\QZ¤gV¹'–0Œ`ò§ÿEdª €¨Ä€, 9R«cªï©ÎȬq§šçµöGStpâJ¾‹c?ÑX¸üæEß4æ¼jäf`ÁF®c«F4¤51Q1øÐ¡­ $ eÈð1ØnãK·Íí¦öƒëe!qodV·¼Y\í¥x /Ezº&kmvJ$ÿûpÀ¾€ùg>-½mÚP¬§É·¹aªÖâMdSÃßÿñÚ]¼ƒp`J0‡ƒì.ئkŽç¥{¾èl%hcç›™îجéhŸç¸gˆþ㸑㡱 ÈLÈèÂÆ èDÇG U< †È̘ `´x”×CÌøxì¶Ák?LeÅ&âÆo£§Ò×kñPc鬭’ΠȤ„²]ô%‚ÓßõóóIÇìÉZEí§žû·ÿ÷=ÌuØlB¸’&G–y$z)8õ–cbûÿîºuL[!jÜ…sïפäîj¿Ÿ¹çÙÜ÷PÔÎV/nµ:*50/ÍQ°†™ kÂk1C¨A…Lƒ+€0ȳà‹ìºÖeÔLEqƒÅŠìÆPFiwZàíΨÁy™Ü}ïuSÿûrÀº€Ík>M½ Â[.'É·­¹œË.TY˜õ1ÌôÿwÑŠâ)à0‹ƒ£bæC UtûºÑDG<ÓKk6é¦ôcLcUÿµÎó‘Ä® ¸ ʾ…€:Ó5¨Œ$‘ÒÈ ¡L•¨€ÚEŒˆQ„l3ÆT•š^{¯–vñ*»—ï¡ó¡9t”ìlµWÏY|²~(72C÷»&„ÕiÜg&›n­¿ÕíùJ—£x ÅÄò1âw–L(ë¦êkûçlô×±ð¬#Y´éþ¯ÛÓ¡gÅóÿÿí×d³æž¬FV@Uíje)xMBD=b1"Ѩ)TË8>¬ìày)¥,[FÛ]_3·Z,I$‚š-Ȇg¨S:\Cv¶f¤µkËo{ñW™ØTIVëÅi!ÍRÿûpÀ¶…k@M=MÂ)­§É¦-¹™¶¢:¿ÿþ3¨‡Ña NX}AÇT|¹­ˆªÿþœÖ-ÞÈ–ôΙTÛ½±û?Å¿ÿÿäãš„rÕZãí¥,ñu«—]­€Y ÑŒˆ™Ù¨a¹†@P(ÄÆ‰LlÅßOœiЉˆ”B€!ºD«¬GÅ5xñ¡µÖm^}SYiŠ#»…=ƲZ4,ý|©U+u‹_"ˆ¢<UõqÿÿlÌ%A¨ˆC ¢É$Ef†ßÿâ1µ1ª®O×V¼Ýئc‰U‰/¯ÿüb²WtJ˜ ¥?ßÿÐ4ì6Ñó1(´2£²´3ˆ34C A&%2RW0™ÀÁBˆ•q¹“Ö‘ŸEaíº¦n¡T›¬P[im×1sYbÜsF«Ýç_L*ÙÿûrÀ¼€åw:m=mÊU«æÉ·¡¹Ùa½§SF¤UfqÔ©»iÇ¢áИP$ ؼÕqÓ‘ØË} BJrUz<ÓRk óÍû¾óþº˜ßìÖC²û‘X!0ó<+…2#13a³FC% ²©Å2šñù†¦´äºãØõÝûÀ|%1kmñ¯Ž“ÒÚ?³=9™•Tíg~EDê â§ : {ÿÿy‚ƒ V–8!†Šj¨jçÿÙ›§î*j¥ZõcåXûëž-V!öˆŠŸþ}¥W?ˆÿâc© 1h0Ñc7 6åÓƒf2Äs02ãPQ‘šéž‘àñÓȘ[qƒˆ•µU¢QWä¾’ŽY(§±o £0óÛFåjW©O1žFB;;ÎæÑ¼¹ÓÑ+ÿûpÀ¸€µ‹0M¼íÂ8°å¶!»‹îÁˇÊ,Vpž­²¹œÝ™™™¬iaN¨|ìÑÖ^¥3b¥çw'öÙß”è*x €«„ãG±n‚aR'ß ¡«ýFI9ŽB<$ºÑ$N,q;Ô6L[Ã>TñAG€_%q䖘ݡï ïq˜O™‰JÛW÷¤ó^$6KÁÖ3¯}Á‹ñWÒF›I4£O?uu ì'ÿÿÌh‰èÅ0H‹)]Á}…Ôòíi4Ô:“’²ÌàžN²pM•Ö¶Ô‹jHÀ­$â3I_rax¯(^Ôã& mëúilÏAµEQA :Ú2ªuƒ.Ã** ŠÚß÷§¹“Ÿ¥àXÝ2“(ŸÄ..,Šãuáö«/3}ÌÃãÐɃs$[¼'»Ú@¸ÐÿûrÀ¼€­$ í‹‚_®$§¥¸…xº";œU jC%îô¨Nrî†Jõt&Ú¶SOT–$Qâ#j°™ÅÏ´J¦C «,÷rÝð W÷?ùçû¼ËðÍtµÊ1JÑm¢öOæ‰2'ÅI†“C&<6¨hJu±ö’ñ¸51 “¤ «EUâqRПÿý«‹9þrº’ÜgÏvù9?ióúJžEX\àd}Ih¢trøÎó9U³M¿ÿŸã^«g«~ÖÛãÎQ¨‘‚D’r$«\‰HŒ±É%æk\Š#£ ÓÃZ"šVïû~°ˆ«À; FÃÊ¿‹1X è-¸TÃç!H¥¼¯¾§1¤»fýÚö±Ý,¶®S5{åLêÖ­.ŸLÒãž8Y“q!ŽüáÿûpÀ¸y % ÊW2䤙¸Á@pHVEÆQO÷*#[Çq¢ïdeE2)J⩞,ëÒt2±jíròÌPéàÓÆÉU<žßÛ»E5ë¥Úáêieo¡`)(ñÀa󊯈GÃmÅ¢ 5EŽ‚s¸=¯ºh9ðlÊ·¨•üåYãû•J¾›¼«lp»˜ Ðì4@ôÿê+Ô|Ï´Ê©¡ u&Ó]¾¬G=},‹—ÅEˆ°#Tæð<‰ÅYÉT‹=Ù ÉI¹j7úÄ#ŠšH>-‚) m58êæËô1&庽 ±Åãþe·œØïÞ—ùá·“‡˜7@þì†y6û‡Áæ^^Mv™(ñçxS d,$š(5U«ú: ~PK Øt¦X?8Ǻ<k_000___null_keyboard.kmxPK Øt¦X·¾æj4dñkmp.jsonPK Øt¦X&¢v- ½Kkmp.infPK²|file-5.46/tests/matilde.arm.result000664 023540 023540 00000000052 14325247002 020724 0ustar00christoschristos000000 000000 Adaptive Multi-Rate Codec (GSM telephony) file-5.46/tests/matilde.arm.testfile000664 023540 023540 00000034706 14015050417 021240 0ustar00christoschristos000000 000000 #!AMR <[dÞÎyÁÀ¡ç¿ð'€P›[›ƒkØÂ (Q·)ÓyñE4˜@<<èføaëÕ7_œƒù¾ôxR¤‘æ?hl <{¶Hfå¡ñ€+G!ßx̳X¨©éAm’ð·í¯<x èfTáÛƒ‹€VtBU9û”ƒÞæcàen< cN¶yœŠc !Â:ý…‚=KÃòÂë[Žð<Ɖ²lHÏå¡!L£-öæIýšw°9:y଀<¾U'êÔ« LcÜ\vyY>¶ÔªÑϧ 4p<&@iÀ~#ò÷…ëäÝ×)J$» Ùô[´¡Æ¡§¥<&@‡áÁüÕ(×\ËWâ”!"-@ª•C] 4€<&Fµáë*ª2;[ðÅvÅwõ>â=Ž„ÁÿðPaìA:N¾…du@<4r,•ú¦àKà Ù€¨M¼×Ê,ˬ3aѾLb< 5]Bí p«ÁÏ:Õ…Ÿ€0(ʵ5Lõ9€<ey¬=)àðy@z8FßX '™›8 ]Îèo°•Ô˜,Ay7o`*ùvÐÚðÄAÆÎ£§U¢XíÔ`<i¸ˆ µ,J?A’;8·yû¿´üf©Ÿ"<,˜¸£¨#Á‡Œªc`<¡‚çâ˜'g§ïHå’®À<^±_içZ­A¥}¦ð9Ô±£¡¤¡Øx”pÀ<(~{’ûD G©Õ µ°ÕK)éiïÙ /Æ À< y¸h’Aâ¯WT°9ƒEÏÒÐßU}wT¸d¬”0<öyGPLÀZ4º†ö˜v¡êw‚ª´ä+î@<Úº}µr4;@:¨h%ƒô@Ì)ùï²ÝW¨Åëb@<<øh5N¿CËRš°p.ûO#Í*ŒÕ1‡e3Ð<\$°4Ô 5jïÓŒÄà | -kÚ)¶”§v]ò]Êþ¿HÇÞ`ö@<=½4Ìve#ÛOþ‘r°…} .o‡>XEÅDé€è°Ã…ÅC<0cÁ€1è;Jɰ†m_€…mñɘÞû©-Žaà<;¤gÍhLH%ªDè¨ð”˜FÞÚãÍqž1v×|"<p|±îIvŸä£´ª¯ä—¹%—ÿϾ­–B<@àO0<@ÖH"–AíƒØõüØ(& Vº« }Éôîn"Ó0<‹øüváû¦Ÿ2<Å6Õ&µÐb–-Ãfô<˜xÊüë‡áý‘Ú¡¥/Ë‹<ê¨dã¥Òwy ¯À<¹ÖÊÿ’µ‘—Ì"€ÇÁ>‡ZïßJ mM<#!СJáZ7#×ÿј­#ýº„¨õl=¢K@<JXUuÅ©°>fæ¯ m¥ƒC dÆk’Ò71P<¬¿ü(á¦*¼Ö¥Kµ9…ØÏöî9!•©s–ç`_À<(H8n_½…¹Ã”\n—ñ, FàdêÈM%ˈ¶) < ~ùÀÿ†×Ø4{*ˆ¿M¶HkoÛfÑ=<ð<>7Ïø!õ…õÀ‘}‰îÝl”ͽy¹(¶¤@<"SˆÏáƒÑ€c°¥sì jâÌ´Û²Í/Ñ[ò[e°<"7@Ÿàa¥€A[ ®€Êhl GI»–ÈÝ0<:(žyÁxÕ”Â!Î ð|OðE²{ûs2«"Úp<"H×~A¥$»‡“’Rjúý†ÁcÞLm=—N7àˆ<¢oÕiðaa»…§ÆýSÊN¾Xõ•»“‚œ7Űϴï× NTZ¬à’HµžþÛ€§× <:Ö ~#aóƒ,¾,yB8Å‘r–—Î$ÅBY@<  ˜(áê’jª ]î#ïŽ}•J~WíÇQ1 Pt < ‘XKŠ—Áô{…mùÆß¨ÞŸ3¥vÔ}7Je_€<4É]ºö¯å0†´iYWC³˜ˆ7*1Uï4{«€<“Xà| AàÝÿÉ´æC!âƒÿ‡›` ìà€<ø?Èü @Zé8òrš‹îŠ×¹Z{­ÜBè"¨€<'W°}á-€ˆW ßÉîP^ÓTZcA¯÷3ÐR)P‹ûM·Îµ2Ù¦t½üÚLP<{m›ð¡í€Ì8oÙãËZ²Û xðp}åÄþà<,"‡0kòÁë* 7¦[Í^½ƒ7r×Eå˜àÒw"À0<(|…háô|òR|°F¢@º})D8DŸžµ/0<>8x}!ó‚CÖ÷‡†_Åt*lPCòĽ(°<î0r+-Á}‚„Å!-´8rkà²Ò ª'!R+u§¥`<ܘmNù*åè6Ú7-Rtà ¡´¬Ž&Q±õF`<·;üaá§|&1éÔ‡yÕæHºð±tÝ«ð<‘‚îX€ñÙXö¾øq—·_ªµ^RÓû€S<‰7ˆm@´l»Z§`IBB«é¸Cºµå2ñ²’0< s€p€ À[¹_ÉåKïiÜäz%L¯È¸ƒ À<1 .ª[í =„;ÊÝxÎ.ÏG2¿ôÓÆŠD-€<6‡²øà=†_FuD„ÈEê øª Aƒþ < øñ3ap*øŠÁ™¨AÙïìÛAIé¬r€<&Áw”®@+9ÿÙ3¤p1’\?¼?†§iÑà<H@Ä7!0>ÌË7©ó&FŸdÞ P´?c&ƒ`<¾‡šÃ ‚·ŸJ;¤Ä†F®æp ©Í‰Ä@£€<Pãpa€và>-:;9^LîÊ Ï¸æÿåU…Knºúp< ½H7Ã~ÁO†ºe,m_ÄWŸn‚öÏ+Çb ˜P<P8hrã¿¡´}ëï:³LÔ“¹˜€˜3¦ ûï…@< ·8gŸéƒ ~Z¾7µÒâú´„ ÿ˜7s™•²X`< < r‡î`ÒWÅnCL¯ÿÉú"’Úˆ‹M @¨-< g¹´aÓ…K"ã$1|éÇ>³ ¾bˆó#°< @gçéañƒÊ-iËóþXýçVÛÍâÚ {oÐð<= xñ¡Ã+ºqLÆ2K »q) éúÒs(0<¨gÿë`ù€ŠYÖ7•lý»Á´#縋_Ù`<RùxgoózxÒ¦c®bÉ|Óš¨ç¸¨’[jö0<  èfæãh#† {Ë24ò*7ÐXTõ^žÙ P<D Pfë‘*“qÛXhLgfzókUŸcb (9÷P< ècSéa·„&†idøÉÁ¨1­íˆ‹qÔožÖѰ<  Hf>¡Ë+'®fïÊh°?õ*ÿò(SKí0<7€ylÉáé”Z1¼“‘ßVü’þjµi> úï@< H~Óa‡/ºç,’;>Ƴ£¹ï'ùɉÿ@<z7ˆÕˆØ Ó0ÚKÃD!ï‹Ë >zÃ=”ûÀð<ÜÀÜmÑ,÷âY.ÝwÇü)ØXm>[ÃûîÑ@aD¤ÖÀ<-xøÔÅé¡÷>ÖZÁLG¬ˆµµÛa0qaCP<4< ƒ å!ç)tÛÂÁ ¤„M§àЦJî•̲P<'y³ù‡àáµÓ¶dK•EW¤)M¼íø%ü€<0G¶ùáÉu `æRÆÿØa°åÑtr½R¢’ <&@iøaôÀƒâú`ð¯di—F¼E`@/Ó`<º~Îa®Õ[Fb¹FeÛ¸`41MFÑinV+°<xˆ{…Áá–,š ÛN³²mði?4erL$-HõÐà<"ˆ@ñ:ʘš–„Ä`ï4x«Õ ·•háy€<F\ÐÕpQ¡†l1Ó iI|.Su¨®x<˜´÷Z»ÀÀ<2"]¸}' ±:ïñ©M­×@o6+nr ŸJ†RsÀ<¹Öø~— a‚_#z®BŸ¦ $Þl» ¾+ßÍ Ap<9'!€øã݃Dqt Hl"§&ó µlL´€MõÐ<&›A€ ¾¡ìk"ó°]þù’€r:²‚U{ÓSY¯°<#&€ÇæCÉ+RëK©¤ö²¯áõ‰¿ƒ €Áïð<†@|·ða|zBmPìxyþŒä5¾oð=˜1EÀ<dHx~CÄ}û”>Ä5xDü¦M!h”®È;Z¤ÜQ0<4˜xSmˆ”Áá4 ™›æHDØr 5 a›Øt`<eH|`^Ò:‰†›lỺþ8C8x 9i0lx<·=¸yÒ@—‚7=™6ÂêÞµÿÇvÕ (4P< <m°| Á,lJehÀ-ß*\G¯AzWÿQ#ÇBà<‹4š÷³Á, ïÖ<“váæ…¥„5ÂIrX<(‡Òò\ÀYÖ~'ûµ$û7*¯·,¾*¯!!¼ŠÀ< †)æ¸6 -júÊ+ÛG×ã —½òS§¡ÚM>ó€<&Cc²H y¨ ¶>üÕùzŽì0¹Åúµ5ÖÀ<&$7ÿþmzèR%URw8Æ7ççŒ;ßö²f<^_²í0 ?U>ù­š4=ažmíAa2ÿ< z€§ýd€`ºx"ñBÛòSdˆLšr>ZÅ÷M'€»_yàA°áK‡*±õTý2y¾Ö%KDAõKW™Œ`<NA†)ø‡àê@­–÷ƒ™¤‘V6r¼jW燆P<Ø;ô -/ýô¸ÃÐø¢ÚNÿž(O>0ÉÆkåqÝh`<z=èæƒÉ)•JÑùΩÌÉ0óºa¨ÎÉp< "ùH|©éå*¢½Ï<2[,ÿ%  \Å¢Š|µ p<y¹àyçáe¢ô‰{@xgÈ9¬t­n!8à<ˆy¿  ×ƒl1J;ê ßûOø†Ò†Ø1$Ö <"é#>Á¯¤Þ4r) <Ø=yGtˆ —;Êt$u¸ ‡MŸ ϪCÚ³Àß@<ø{€'üÇ÷å¤s€þ®í;ûe-E;$À‚eUn¿¬@<à ± lÖÌì5zìîψ(®²ÿžS¾øtrÿÀò <ˆ ÐnfçxP±æI ‚^ L¯´».u³]Ûþ <)º8ÔðaÐãÃ,ÖƒEú!Ý«*¤³_wôýeyÀ<(#«Y†,|!ð×ÔŽ¾•€dzX &êÑþ· §ÃEà<(A‡¯à)C€›«¢øJ幋±üõk&ûjW¤ï0<à 9˜¿áù\Íynü¸ÿŒ†‰,kr ½x`ô) <¶yœ®€òÕ\*éÎ*Æãz†rÿ((:Ú{@p<Ø( 9œµþáo(?æÕÀnˆ¤äWå¹}ÿšA@<9~a’•ù¡öǒ̪T-Ì#U€ª2è NUÖ7p<ÞFAð!ÿ‡aè<à  C–’'á=›Óª…^¿ kóŒÿ©& Ð=ž¸Ëp<$3’¤xÁè{»ÑÃ74FÞŒØvB7ÏǨګõ²0<z‡àèËØŒÇË{QÁÜþµU5NŒ«KFÀ<Ûø!ñ*‹iÿxy”åjõª‘n\‘9¼†à<›€~õÒK»¯{*h«É‘fÆ›Üï(0<"<€Cú@µK*mÎV=Ë{®Ð ío²Ê#R>–ð<!ý£8á'“]l¿9üªœgÌ—U³YRƒ <ŽvŸŸ6Áûó¢ëO€ædHcý\|çÎ’f‹ª0<6q5:èø¡ç-iËtY^±ØdØâÜ)H-ñØ^΀<• GíÌáæøU”UŠAŽMx¾ø™Y ­iC³Tê`ö—†Òã Ö°è±¼{Ð×`Ðs¶2cð“K’aiƒZbÚð]Þ› ¥áþ¦[„Äœ{»á<:w¸é`@—çœØ 7kãÜüᡳd¡:€[ @<0UrBdÈɯP àŒ.=Í?ä ùE;q‡€<*†Š¸cˆa)¤&‡(Sz¢1ò óQˆ¥?u2 <>\…Ž0ˆ ÿ¿Ó"ƒ–¦”Îp‡;×ÕÌx`<(¢_š6PAmÅT(U“†ä/ý×Tf¥¹¥€<2gÓEd\IasÄC0<5~‘8g-àAÿ.‘Ô³­Œ— ¬¼­&I™1;­<“Àg‘Z°äÕEÿR"Ú#$1¦óÎ캑tçÌ@<{o˜foàÿ€a°i»Zƒ²Öζ o±íÎÕ#À<²Àfóá…»¸54Y£¶<4Ÿ¡‡ñöÙüߋÀ<¤n&!Ê?Óú[€êôx÷ú=¢™uòP<’ ixᆢÕe.’ïh?›.îC =3_Ko<"€¸r¡WÁ‡ÁZ°Sµ8‹6)YSüb0' €<׊ç= aa JüÁ%YЦq¥›¼Y"ú5™<@­}ºì#!àÇmʨ²(—xv[ý9Óò[ì´£»l…ÀlBEÔûØMÚ´€«9ì¬À`pë"&óp H)ŒœP<yI€~ñ!줇‘ÂÒ²lÀu¶ÇbÔÍ’¢ûP<d!*½ðáë€2³ÞŪGàÄ`ém]‡v»ðT¸°<×èùáì$ÝYlÄý‰ó”E)FÐë‘bÐ<5~Kv5Û¼ ìâïÚA $÷óO=FVS4L·RfM j«C°æI£æÅ Äkã_ð< ¨mfqÁï€KLòè•EŠ3¹´“+üÈ3Þ“àp<Hhx7l–¡›äÌÅ?\i"áŸ@²<¶}Õ—iP¾º9p/÷ À°­<œ“·GÿôŽwñ,-?h!jUïÊ@„0d´¡Üið<Üù™Š~ÿjÁô[4ú–ÅÉ@çØ¡Àí `O@<Ó¡™—ií*Ó²H½¾F‘¢Ä6B“¤Â!‘‰€½€<ô¡™›ëAæÕá^m%‚hÃÅÚKdÁÒM¦ð<’¡™7ááê~“v† ._Ñð˜Ä!±eJ²1€<ôÁ˜Fx ÷†±<çám‡èà(4“j¶"jÝT€<k¡˜Jà¾Ó‘qŽë œ£Ha¶€hR›é8ìž°<!¡˜íÁÓ-Ôû+y? ^sè¯`ÿ/öÅ÷²ê°%N9|_­Lÿ@$i‡a½ý"/ÙÜ";¼‰’Ôóˆ jÑ'ÆBÀ<(FdAÏñég+ÚœP­J¤EY̲²5*Àý1–à–)ñŠh<=‰*’çg‡+bôŽíe~]Ä7kKePÊ`˜ <($0xñzE+R ÑÂ¥ç%º…EN üï ¦ÅX±0<8Q‹`lC}3Ík¡ˆ“ã¬Z´Ë å¾Ä[OÒ‡ÉpA?,ë¹ÖÓ©a›““Ð<Ö {wJ vßs˜Z°k4ã.5Êéè°Ùm<{0ù‡Pÿ¥„“àK×ApLЦwP•z÷a 0‰•,<\ôÊç"ÙÖ·ÿD‹<Þžß,›Ú™´­=…t…÷Yàˆ’}çkŠ(Ä,"°IÇg9gkî¬Þ*H|9çý™‡i„zzò™î¬ŸóŸ$Ï{-ÿrä¥ìª-›¸äò²OO’Oœ«SrPZ,AÝõJ¬)Ól[YÄWCúO³C›8N.ÔÔm‰`,KÚÊ=¡ý†Z§óÄQX…Sq N@¶œ+©­›ôz B­k$Ù Ý{’?¤&4leé©D+ªeL€ôpµ|È4Š«*3‹ëC£Ù¯j•Ð…Ãc‰¢ÉƒQ'"‰•+ügFâuÞÿg÷ Šÿ¡â½Ãfʽ ì¶™Ç~Ð=*)]™¿<ì¼4*2(¹”"¥ÔÃd[ŸÆÀž¿†J†­hwRHÞé-¦~9{œÅZ85Ç;.,p'ü,-ÎTÓžO›ªÐæR«I¢øÏÙ„(”Ö3ØP ƒ¤~(/!#?š¥þþcep쥻‰•.ci‡Å-Gm ¿m8¡þ%ô_ZJïÁ°V–‚­é8£õU- RTä "–´FÎaþ[è1B/ð›N€­Šk»$EÚC g…øŸ©ú9i‰ÝS"ÎÛMyµ!eÜG|'kóI^ tÌ)×4_¼"]Éz\ò~ WP£Ê&jÀ)s·.K·ûL ~Ó0ʼnU-äÕ7UfúM Ná,¦þ/HÜ ×‰„·7Z_(3 þ «òM“eû> ¹Àcì¶PYçÁ ’o¦€þOe1¿§ÃÈ[ ràP?ìY~¼Ví{׉•-Ë‹ey„¸Ç©fݹ3þ&“îæÀv…[<<35giá9ݨ0|$ŽËÁûI•ˆ?3°C{É—ElÐíjyœ _þ¾¥ÓÏ1ì{ŽN8WÞ¿õ;²À ßvã.âac¿ÌÐJÂx]öûˆF5Ççc e9‰Œè¶“CDž?ží°‘ºéÅGAlaìqŠˆF5ÇçÌ £ÂѶ<èQ!œ êùãè ùD'‰ëþÿ·øWÈ' ¸öÙHCþýZF#qÁ%ÿ $&ƒdˆF5Ççö ¬ØÀ‚òl5xŸ`Ð ôuÙ]qz¦¥XiÛçY ëÚ„4±|ÙÀ*a~[Úe¹ŠVzˆF6k³¬ ¾VBÙÆòqÖ¥ ¡ò“­ªï«À§M{‘»óz¶ž#×G•MŒÃE},ô?É¿eSˆF7jTt À¼Ì`nr€¿üvuÍÒý øxÄÑG96³¶jíž!2rÓ„˜Ë/I„¸”ó˜”H/Õ`=ˆF7v}k ú-ª^H£Yz®F ‡+‹ ¡L{®'o@]¿~b%VŸz,½=öAùòvæR=4/yZˆF7¥õL á–]‰O|#Ø• Þý>cCùx[8,qTFp`Z~6áTž8üh’ü¤/€ä¤³î¹•fLîàˆF;ý¼: 7ig$ިݞ&ìFµ ÿ7'N>ëÁzQßÐÃ?ôŸ@ªðîêO'„Gyåa{#~|æFˆF<¶ó= [¬r—ÛK¸oqÕŸFñŽ…í6[%¦ˆUŠC®«ÇŸWú·,1>Ø-Qj÷f½iºNßGeˆF>-) E.r´ÎtÚV%œ ª‚ÞñÉ3]Ëžj1LÔ›vSŸsRýÖíV%m²¤¡N§¨wÒ%ˆF>º» hR%6b+Ü@Ì ÚÐPä,v&ÃŒ­ñÓ&„ž%.u\?žŸCŒöGFbl®nºêˆF?( Êpܘ bªï ð6É÷WTê%Æ bú:$¥Íï ãcd‚·­JÔµQ5ÁÔñ™úˆFDˆ@c ÚE—žŸy†5§<Ÿ¦ßŠõHîç΀¥h ‘º¦°üPá]k®âË :_*#ÒÎ%ˆF?è *›Í“uHÑÙ%VÜ7’!$N5X14š ´?h@`)ˆ®˜kßN-E&0µ[ȈF=ø8Ó ›ÎWôdŸ|î’¢ŸI´Ù„: ?“Y§ƒU»d7)ÍnûŸwYôˆj@•WG? ô<@¸óˆF>¥_d 6é>d¬Ÿ: ž1zb‰º<·Ëü™¼xPeq9ž7©‡Àœh°y+~mÖ“"ûˆúÃ\\ˆF?Dã Vm6,î wè^œ|z¸gzÕŒóš†,¡[»¹ÞŸgÞþ“xñº¥ˆ˜ÏÝ‚%ÊÇ_ˆF?XŽ ;*ûض—A¨Ÿpëý•¡;uk¸ÃÔÅéô´„Ïž ù)F4‚ÝÊøækU‰c:çˆF?¾1R Ê áó;YW ßdf³ù½)í-sÏêˆxÒ<¦" ±}Õ•ÃÆk™Ä(Ñ—mφ)Zý%ˆF@í9 xýÜ ?Ó‹ïiHŸv’ s¼8Ç5k|6‡ìÕ8€å‚ ¹µÇOHøì„ͩ˾Ê6‰ILˆFAAËb ÊÕbôˆ¦–¸ …¤ÇÚÜ,•½1"¹œkÕ¤n©ž? bÊÒ„Ü_Å¢_kìL…üµ›ˆFC¹G[ Jo«ÙÍðIb† »î5ÎWkW*ODn6P¡¦ ½AÈÇ·~SÑÆŒËœg8ƒFnˆu4ÏHDù„t¥ØT591ÿL§ºMÚ'ãa´“¶Þ^·ú^ßW$Ž‘ÊJ’oEµ Ý#eš¦Š<ŠJæÚp þ¤uÓ¨±¼5$×;.bÙŒ‰‰ññÓÍ™ õŒ™'™µÁÈÚšß\V˜ðb,BÔƒˆ’7š;K>·òøƒAÙjãíZnu—¢Å¤jÁFVµ¹¨¯Å Î,› 1B¡$eËÍøc°Ó‰&{ 멤z*œùµ¬²+~?¿{ïòÈžJסBÇ‚Þ,¼¥È%íRv?çNŸ%üŒ€Ï!7I3Œu´È’ÏÄÔÍð)ÊjŇBˆ¾ïAÒ¸`†Èˆ“7¥ì!O~æ¤õ°šµ•Eé‰ÝþkÇdEƒO–¨üáx”ݯJiÇ»‘i…µÔ?n”ÿBùAó›mOBs¯m—)Á›ÅSh³ ¤[å-¢ö$ÿV{[¦½.ÖÇžfMY4Vó±ª!¦þë[Z•€ÔgH€çû*¸õ±Š’l·¦´lÿ“~ˆ•4¨‡ªX¬Zj›…X‰ü š.ÚàˆÊÖHs*è±Ó­éäî!ünªfëza£gåìazóVæ=ßÏhÃÉG³™µ¹üÞnÐÁåóo‰šþs W”LŸ¯lp?ƒÜ ­æ!ö…jpr0̧«üˆ(4:O)ÞÓ`(;Æfšé“À®|o{\ÆY£Û>k&Tˆ•3©-ê lÓÀ`MûÐsޝ«Õ­\Ó’;ë5ØËµJkáÚÎC•È4Ä‘_¡c¿¦ÌkK@«5ÞL/¸ªÈgäT£n;&f¤Ì(žJ¬µ¶Ö„a­!Ed Yl à_;c& ‰(û¶_S’3³ªçÀ½*ðÉ…$¦Ý ó3Ul±&à}°?Ò»ˆ•3ľ„ÊËE4û×¥¡„ ÿEAQ"§9Ÿõ@é6ü·t&Uçû—4Mœ'« KIê 9“¯Mm 3¼ =OöˆÅå¼Ã)„B_1ðÞyk ë‘=5–h`±ÌÛ€f` B¿î_0ä^¬Šá”a")—§QÓå•~1N)1+Éq´/¸«¦¯|xç¬$ˆ•3óMÍXß>nüò }:‡¦t±4j oeäÙÅñ=©c€Æ”Æ…X«Àð …Á%ß¶²6§£}=ŠðÌò%–œâ°@ÓÅ0?3!èYCiRèM¢GóAQÛoi 5·ÚzÐéãþ§p¨¿eÊÖÄ@ØüE…ÍÝY"ÙvÅHÓ@þ‰ˆ•40úLßú몲‘ßSÿz­†![gâx‹,O‹þð’yçÀ?WÑÂA8H €×µðÙ±ŽS®ÇõsD×Éuk(ÍW0éüW™ÑE‘ü®5cÔÚ39˜4ØÅëÖ¼xs_òm?àÆÞïP[q«ê±üfÖU%â–¿MØY¯¬óÆ…rQ›itÚ€6æ^E–ˆ•4•­˜.èŶùcZæ»ÿ|ž†ˆBó$DN>Ïz‹ŸWŸ%ÉRÑwæ³ùåŸXïë›AIÀ𢆽$ÐuO¹fOüQŸTM§Â+íí¯AÅ¿¾Ðæu©A‹QMmXæÑ'Oß!£}.•JÊöé3Íe#õ×ć¸ÃñœYø=ÐYPÁ޳™á*œÙ2rCˆ•4©qÃkV(Ëçõ7ž¤dÁ–ÞÔ蓉T?ª–Bùb83Åï͇ý•§æ¼WPšÙ*yªÜƒÐ§0u9ù›qe±6ø?ýæòžºœàË*›¶Ùïß""BÊ£¶íÊÑiKéZñÑÇõ(vœvš—®­q?•qÏtúƒwÝÄìýÈ<¸?ûxÏ%×+ˆi׈•4ª‰âäa¹öÎ… þ8–2æ#†Ã0tÑ›ðß>¡mtÓèà VcŽ4ú™¬+¨3 L>-šŠü?Ú=99±šÐ2õÝ‚³´aí¾20EÙ@[ʉëèn'ï*'ÊÛíxHX×Aþ^¸ŸHDÛáKùA…"W(/;Úý”Õ„b9ŽÜ6Øú~Ø=ž÷Òˆ•4­0,&}yŽ Iш ¤xV‰ke` ¼ù¬EÊ•ñ3dR›‘þ° fšm™ ÝŒ+‰ßŠ7N¦û¼¡ð~veÃ3jÂ^­Ýðˆ•4®‹¶°¥Žf!é ÿ[E™ÎUŠmaFDé©þ(Üû?é…‡ ƒ¹k^†ª…FU§Ð&Öƒn'ùºá ª©Ï(zóF‰ëƒj[\ý*N…ãPÇc‹ ˆ¶Î½í¶ŒŽ.ZÌú©¶;y팼¬×ÃÞcì3ü/\s¢0÷›ªõà¦Ršõ!-ˆ•4±+ªïm‚Að]2¯ÿJ. úTúR“)µe0À4pþ&»vô8*ìŠëÄóKRÉEüØíŽÍÊQ G䨷¥;ê«;ºfúaH½sÁç—ã+`!à%V…miðŒÉóÿGïõªý¾‚à3¢x}*,ªŸ=v*¸¢ß²†’«ô)Ÿ.J|—¡€«/ e=ˆ•4¿Ÿõÿuiwá$iÁ1ÉÿbÒ JÿkëLc‹Ôÿ(WמD ²[º,u9nw Ý,?Fƒá½Ã»3ž]™W¤v©z…;"IÕ¯ÅÙŒúÐñä'¨ÝFG?͸îy|[§{g•’#S˜ß%ôp,â_Ø}.T›0ñ|ûøö M¢³ö‰ˆ•6pÄ3uuܰ6¤Y g·:ÜYK<Å~J ƒˆ•6îI@F› ¬ "Öþ>ÈŠŸ!™®Ð8²Sí¦°^èBDbòî]Y1dz_XØÃâ+öyÊg­cöc+âÚD.‘SÿßõÐ_àÊþã70r¬f;{é»Ì4Â6Bv@ÙäÒP—án/‹Â¶‚w,ž¬ýæhÚPñD’ó®×¡6n_º3L$ùhæqОò²ˆ•6¥âyÄMľÜX(ákÿN=€Ž9˜„¦ëj$ßjÑr8à¨Ò>ó93N: Ÿ=ŒØwæsªyèP f!ëžà¶Ù+ŸßïÙ ÄígSI 6þÔxÓa_4 D²¨ÃÒïc-cõrœ¸øñÀÓiÉQÞi¤:1Ëýx^Ÿõ{û}Ñ~Î;Š)®^¸Oþˆ•6·€:P†bËÞKÀ$¨ÁÛ7(ß–‚ã1';È~„'.ÃËUYFpšÊ ÝvìÔ·.Ý›ñ ,Eí¬ý;¢ÛO"ˆ•7Š=ZIU´´Ñ”dÀo”†áEtë°’êV˜¾,¤ÀM ”áf´ç®¸á_É•=ÃCµ  .¼æ(´#—jWóàC'¿yóN1\ŸÀ|RQBêX åôï‡Þ3”eÌcØò Óu5ÊTÇL÷ò_Z_Ð=wġBÔA>j._˜×Iˆ•7‹{§žÇ5ò¼HÅHPÿB {Ý ¼û6Ü #Ì/ :ú'RÁ°ÐZ&µHΩq Lx$ò6÷6£ô!WèÒ¸–8AÌÊ„«éõß0o·~¼ït:ER™|ª½©¶ ÜÀHˆÎ‡¥^“›¨3cDfA¼7/ƒ•‡þS®vý±¯°Ì 3EzHH•µJJ CŒamÙˆ•7‹–ÒɆz:jÜ…¢ÿkÉUÈGÝ 5mÞ½‘ç"ÊÒÿÁ¨R‰öjLNã¾?× "½pÍÈóˆ•7Œë²–Óí(ØâQKÿTÌ4é“L*ùÁÀk3h Üsw×õ®q“‘Óé•Îf!ìZ)´þÎf=Üí>˜Ï†I§¯SGP±¨¼Ÿ§™ AŠþ®Ñ.{ßÀQ «¼Ìw­µw²Ðcõe[¼¦rI°•dv»åpŸ#ú¤vvY¾¤íÂåîñ€)ˆ•:ä9 ëÏÙÎs¨‰:þüÉÝ#”=Ê?l=¶¥×/·&Y·tq²(7ðœ“ÌÖðXŽÖÍTå5˜¿qŒ]e’f,©çH£*K÷[I‚X_ÓV› U|KÈÔ¢Fh”îËç*F™URŽx5ü¦¨'-–éKÎf‘T±‰ËøPÙûÅ¥ÒÚŸ|ÓP·Ÿ[€t݈•4.vÃE3ÚÒ—E2ÿN¬¢Ò¼±ˆíX×U}i e¹g_mv‡R†˜ó{²uY${;­XYF0Z‡Õé,XRæŽ÷n5|3|v‡Þµ­„®"Ä)Þ§#Æ£råV∉Ür ‘*³Pjyù™¯nË&PKôÉÔ˜<ê´Bƒ”œo…pß,c¾gÐ]ˆuÓq=Q÷ÝÕ¿+Žx…@Ø l…¥ÔsÌ8òÇÓ¯ ].?äøÎI,kÒ½šWšN Ý#6?…7èÁˆ•6äžk;õ&˜ÕõRC‡ÏZøRsbÀY‡Ÿä\ùÉíβ·™ è|!6]Œç#×öÛ•lRѽ6cp=ù…òÒË`Êïf§*fþq%©Ú§½¿ZIÂn4æùµ?æ9i gìñAVãû¾˜ãìAÚLjß­s·ÿr6½i‚ÿ=žû,™x¹Hˆ•6“­ëG.ô“¥Ã–•ÜÛÿD‡ã»B¥GñQC²±Ä{êÁÝnä*;¡›õ/¾ªŸß/Z^E½†ˆUf~‡\H:_¹)ÕÕrN2õ“nF–mÇÀX‹[Xi×µàtPÐnÚüßÔåÑkÍìnƒ½>Qæ~1 0£PÍÉ‘CnNlå‰ñПR˶¸ÑÆWˆ•6¡FÝ¢a^hÉü|Ý©=ý€o³¶~¨½‘‡Õ1š]z’p °ëTŠ‘¾ µ©ÖHž>87Iï8v°ö6ÐÔŠÞú¢š­FÂ÷L±uÿLÉžqïwô»C·9ü¼œöm žÙÔ‰©†aŽ7•g¢æ—O·šQ`e`âxmÌò,‚$ŸÅ V­fþÿ‰„n}Ïeˆ•7ŠÐßõï—}žõPá@ ýø0º"ÒÜ£Ÿ+‡ÿúÓ5óåû´`•WBUŸ¢»p† ìîo5‘dTß:Š.i¹Ö/K,­jØ·ÍŠŠç¯šônŒäwîl¿<ú/¢[DOÜ.ÂÃh˜Ñ},&®fÇ=¿›p'æéVisRµÑhù®h݈ðÕrQÀêðˆ•7‹kUý-’¨{%ãý´.«LÏê*D|«·Ó‹8z úç_áð¢dùϺÆMëÑ{þswRÃÉ  YÌðžÔôµ˜ š j¬ Ê ñ,Ž Õº/2ÖŽ8kßDîÕ:¾’I•ñªlóVkáwoZÉ~|:Mñu·™õibe5¯!ˆyÂô1ø]™®„¹ˆ¢3-'–‘^N,Û“ H‘d Û·×Ïw‹2º/¯eÌ.vÛUÄS ÕØï›CÝ\q"¼ßÛ´x«jÜòµÃ¦°Á¹áOŠX»Í[¨ruºÈqû#ÛT?Df`  Rñ½9ÿ¼Käë BSzRqÇÜ\&_B´)tó’þûi’ŽêlP­×Š3Ž¢B®e‘ËP$LtüDîü¤fd±¿pN38:숵4ŽåÈ>%ïY28áOÖþ%ÏËТ’7“ª»Áma­NÁ»ÿ™›‡p”ª€2QPÍaŽž¤a`Z èáì™kg6¿½ú¤@èxý® ÜñF;袇§Ð}“®±rBï½Ò·æ]Îï©ÚCAïSûЋÖÑKxÑêzw=%;a¢S{—[ZØ*à¡c)‘eñk¡aljˆÄºáºëFåÝ.e2bîn$´´¿´MˆªÐɈÖ3×Mâ­ÔL’X¨Í¾µ —-¬ZA#ð¶¿Ý’]‡Œy…!⯠u,\Oß—WÙ; Hbª:vFìŸÖ÷Ò­Ç3Þþvê‘ G·e^÷,f¦Z¾ Á…ŒA`ŽqNãGzô«3;1œCæ3Ê¥`ާh%óË'œõ–áO¨Ñ¡Æžq¤©rW‹~ºÀÚ7˜ÿÆQXBSö!¢–.[Ž·9D3 ¤ˆV¹qУ#=…à‚v…óÐ]÷ýÌßwÂ8=¨’“ò·ˆò7‰ÅnWû¨Ð&rå!Ÿçh¤÷ÓbDë![;a8ÏcrΕº¤ò³MyÎ)ßp!E›µ`õ@ÕØ"ö#ª½L „ýÏÓpiœ&Kù…sÚÛS¡}ÛM^2€mòº[ÚÛκŸ¥õk°G?\–¹ñ£ õƒ92ä&­O÷œF"™I¿xšŒÂÈ:‡u—” ûX~*F‚§9ÉY…½£NÖÂO­¶- ´]òì"ôHòv¨Ô¸rG+f~‹ê=ºµÖ窄b-©s»6†> ãÉikê¦Vü2mSÏáæP2Pf ö`¡‰6’±©kãá(0|ú96Àü;fˆÙ6:ŠlTÁ –:¤(¦=(²!7:yH4­ÁžºÛ;ëÿu+!“±"Z9¤ç‹ðð yå‰mïc3¼9á<óŠ?œÕ´¶âé,yîß­û!Ͼæ2¿–.zl9Å'± uy Ó²5Ö{îÎ%Ÿ1~æfšÖš*"˜Ý×tûËCœ®½KfÁMƘ4x×FA4Nƒ/ ÏÒ¿ooìêL-³™Ñ&T•Ó±§Á&@RG±FäAž(+#\ Éí¦wnÎÈ»8’d$Î`2г"c€T<Íö ä ê`¨ÁËuè…‘,Ø3 „‰3-( Üp99ó]j ¨,Fµv1¦›æÏ@ž~K^¢—ÂYhèŠÕ]ÜÍšUÍ'‚@¦<Wݰ·)¢òÉZ_Î,Öx3`œ«kð}ïQ§½‰¥\j†²²Rb`LÿòúëY 2Ú‘`åCñöêÙ_!¦íÊâx¬e\ÝÐè·î¦½ó6Kzõ ;À?3ÔÒ„‹ãíý–Ï´‰ÒϹnâ[¨Zù,£ÙFKäÑA|—¬8Wf.Kü—¤x©_~z!þ­¶dH>íƒÐ«³.ážjKõ›íæúóIj'ç×¶‚-.*‰)ZS6 …MsíšS¿îqFâà1ΣÞßRh‚žÔ‰3ð6º6|¦ /‡åP«ÿq8œçœìКgáqFþƒV77úÒ Yå}[VFö~çÃ[äÐáqÏ'[tWžî™1GÃò¢ñ ‹É~ê—i!Rèjïļ+ãdZ¦ø¿Õ½xi\«Àµ¨¨¤”‘—=½»ä#‡ôØÝ›°À'h£Ä¸¡é‹*×õu,“]ÞðQÜꪠþ•vFjÓ÷“âH%¥Á÷S>Nf¸PãE¥l’œ\掊ѵ'RÚi«Š€·¨ƒç£ ZÜÆz¢Ás ¼‹Û¬{Èÿu€¨ø¿–ü}f–¯ž#$øõC¼|׺ƒ/Zº !›¬7ûåpT[J‡•’9ÁÓä‡GMÃø­‰4«v,¾¦Ž…12(þ'!’'dþ#÷mægq_òo–eLu|ä)xŒ0›ÇØ*WkrD»g²Èr½¢Å·•ƒÂ…ýÈš4ƒ¼–0Ûþ„°I»é# ‘ 1±G“Ït ©í8¬ëŒë´5:ùNÈwáY´hoè…û×ùº‰âç¸$JæQ{ñ Æ4DelMY!£ÚÊbؽ ¡>®f7Õåð™nÔ†®NÒÐwηB…È`‘ÓÖ­óÎ{¢¢š‹9÷¼ô’lÍt@‰…®Â…ÚyU¹IÁ¨;ok·Ü${1ŒZƤðÓÛh¸ði¢á|#^‘‘É©âܪ†§‹>Âû* ‡D¹>{RB–¦‰5[xÓ²²W ~2Wÿ|ÙÚ[R«¶SŽR1É„"£<:ñ®o¿ëöÕuÿúMxyá=ܶ^ËYËï ½”TŒIm[â%Þo&¿¹°45/lY¸ÏBæ†@éæÜq4ÊðôBöº‘¨ðŒdâv˜%=s6·ú{އ4=Jo/³|šF®1¯`¨ê›Ëâ³TÄwŸ€¡äXô¡…^èÉdªs¶vDà„íÍA†í:¾Æ\;½G˜=ΪP4}Þ¬•{nl<5hµfâ…ɱ^àÃÕ€÷ÔŽ¨ 8r(η³±>0‰q±gÒÍZÝÐÔÜÆe^Á…¯å¦߃üP$‡#‰5@oGªì£UìðãÕþ5þéÍ1Œ ¶Sh5.Žw#ðäSʰëˆù)>i¥›C|ÚUƒ§Ý 7öósoe¿çߣüPU š}WœëgŠ›€éñÀÝŒ•àþBo $€ñ2áf2ë´QU±õ6žyœöÜÏ«ñ ‡b z Ãì5j5‘â&\l:ýµ’QØÚð<\Ïó‰|‘àéÀhÊ÷ä[EœåXŒwy#ëÀá9ƒÍïÔ–äÓéÕÞ‹N'ÀÁ•þ4Â/ü\X¨nM¾?Ìc—\—Z×-ŠŸ‹&/éðñÉT±‡Òú“V‘¶K—s?¹CÞ°ù®&+nTÄ{¾›Þe B34’‰5L–ꬳÃ$‹C!/ƒÿZ¯cÏßÐ¥HùWÜÝ£€²øvùyÔ‰þP>•‰þõ&ü¼,xClÌ?¶lèónïÀ^1g‰‚Ü ŒŠà:ÊwÂÿàb§ÁÎR ÅÒ¤é]³Nø ïŬ¬Hf÷×.N-xÅ,1 æ€Öårë 'Oª…^Hîä€HJýn¯“ׯÁ§>í ¥DÔô•¹ÏA…wÛ& ! ŸóËËu†Rqào›6ÞS³1fç+ðoëu(Í9šÈ¸i¬–yy¦a–ööÀMõbŠ· +9Æø¸zgô¦EŽv§Ò}È5ã_)ÜX®Ž0…tˆ@|ê¸ …DÈt§ó‰6’P°k(c˜ð‰uOû é§) §©ƒeàƒH¾dWïÄëüÆ"Q—æÅlr]A'Z(LJÌίˆÓ jê„õÇ¿"íkïŠô7 ÓÈ9»ø çFà(uUIzᤡ1¾ÃÌ¥‘ý—«#«0ö8€ÔÑŸ(\S  ;£ül;œl†"V3¾á%2¸ø” ºRë—sl@ @‚Þ#GÁêN„˜¼ê&×Kûüô8´¨©M±º7&™Dì>þbljÜ’OТ³*°êìpCåÀ»ÇJb!O´3CPIw³ÝÀÚò£±~„5Îù ¢S8ªüS'BôãN)’¢rxTRcYp«Bª »Ò´L„Ô‰4Žñ¤j=…Ý7ðˆ<þ2#:ä]:ؽôÜ”¨Ýµ=†sš°4æPšEóãPe7S+ñ±<ÆFA…½<–ÿü8'‘'9_Kþ‚£âAÏŸ¦F”ææÉÎã"‡T+–ÍþKtž%öcõ¶uî2z8íŸ$ç|f{nÅÂy…€÷([Ú„@ëc»V¤ Pø[";žïË’iKŽSRe4¤iˆVÒÌú2lèkëµ'{>!^èü¸®ˆ—O¢ÂÁˆ?Ïí}Å,œ<U’•ååÉ#†"Ö²£¯Ê|ó8n—…oVà‰¹nZ‹î­]œÈ;±/™ð»÷<‹ KÐ7á…w‰|O7ËÍ?\Õùzü2™ðßó"ò•Ñp62 )b'’¸‰4­IRn´¥I½³=Å!ÿH/¥ôzêd&ÄÚðÆý9]£98± µW=_ þ½–‹Iå Íþ<Éq}ÞKr'œ¹4vZ0Ä×j …Q§=²¥Û½:ä远?ÅF±f?&®¥‘~ƒæ7dÔa ¶¡Ñ«~¡N‘_µKø-φØ}5¯ôgºT†hJ˜Äµy$XpàgýôW®Ñ™ÉªéÚ–kÒàö«S.«GŠé´¤HŸMÓ÷#¯±"éÍ"e#ã¡ 9I9º6)±,Zwõ™T¡”‘ÄAnÞRD`x;!pò{ÃTZÑÚ©)ž®÷UïPÕÄ—¿Nö=t$FT¸ð éþˆo±àZs²Z»Þ7ÔH¡'kø¥8Â@!ŽÛÌ¿ãùðCm—Xõ.8Ð% !à Z ……1”Õ­Žï+ƒˆ!5ôåzm]ßEc.‹¢2»`_£2èUéõÜôfœú’8$Jb´ÌÏî*%ͤ;– é¢ÍH®k„ôXFÕ>­)à‰7Š’'üP$'ÜNÖ-^¹ý Ò:ˆ*V÷xÄëp²àà£þ¦þfû³¬âÎz˜(Ï•3!èXšïÁ„÷íœ}°!Þ€ ¦©-é´~Þß—[vD¸²Ÿö%;ÁŠ´±!ôÓ3;aCªp>{o]¶h&›Skø#HÜJêC¡Ž©ML6Iª‹ÄñýgÌÙ@wJîgT,uR`ŒØ•£,é@Öp»ÐH¼O{e~C»´glÓ²d³-ŒŸÍª^¬‰s¬œØatÁ¥xÁ-7ïþû—òFšÄ»Ü·dþ#B³bœmEíÑšp9ÍÏG†c¬àÌí°)Õîl5¾9«µ_ýs¤<ã§È܌͉œN2° Ô†<)mþê\Gâ þ!sxØ L- Nb>3VbÄx—äôüˆQnŒ3] @®ô¢¿`ƽA¯ó¹’m°Ù‘?Í5ŸàƒXÚ›ž…ës'–êû±ºRßpÁL²¼^Ó4¾/½Åb;Å’±¤•u /¸TŒœ³¸(ů[ô<–h²Zšáêðch%¦ÒX»½ÿ¬éŸú‹ 5…6FÉrõpTv³¾Y šrŠâÃi·¿§“A ;i#M-T¾aº‘ÖµÆh¬ÆŒ´ƒe.^\‹ÿ(Œ~sZʪ°QÙÐKŸ#öeµj—aíkÕv.z¡L/4è²:üN»¾7&¨‡ÉÛ¢rÕ’êU+óIÅ=\ðJc¸úðÌÉŸ*’nQ‹J†hGØ1<ŒDAD‚àöqï” e(f ·ºÐÙ㠌٩Aˆ? í½- Ÿˆš€UŽSz;9þØ@Ãâ‘ôp¸$ îgÞ߇Ì!"Eÿ\j€’§§‰ƒpÿvY1HëïÿùaÛfile-5.46/tests/pgp-binary-key-v4-dsa.result000664 023540 023540 00000000171 14325247002 022463 0ustar00christoschristos000000 000000 OpenPGP Public Key Version 4, Created Mon Apr 7 22:23:01 1997, DSA (1024 bits); User ID; Signature; OpenPGP Certificate file-5.46/tests/pgp-binary-key-v4-dsa.testfile000664 023540 023540 00000003215 14030740716 022771 0ustar00christoschristos000000 000000 ™¢3IsÅòK OrŸr­¾ín¿Îq,u#]Ó|èLM爇\Ncö+k¼’—8Ôlfhï1˜§Š=¶‹à!º\n“)Åœbk%% ’vY“ì}RW'?AðØóN½ö[8\ZxÞ¼´n лoù°^rµÊ|9ˆÿŸ#0RÌTR{ ÿî0ƒT[OŸ>‰B1âŧ‰ÿj®0ìþWÃø_öøâ Rš³k¨Ù™Z°¾¹ †- †ÞÓ¼¨‡ xJñ&oú—,§ŸüdœV2´c#~ñ‹š¨T|Lš.¸Où¨æ8vl.¬P6+ƒÒITÖ”„ø &ýU.ß@ªX—ãE|¿”¬ YŽ6ôÿgnÝaèhègjï÷ku¥Ê-FJÏhêç$ΘI>Y‹¬òtqÏ6Œã ØǸL{M¿Yõ5é˜ÇÑ!b*~€%GÀ„õxs Mµ<‡RuzÑL÷ü ,}•oÑÔÆ]EFúûĪjâ[Tb6Ò]ˆdI¬ÓjËÎ~41æ÷-´"Philip R. Zimmermann ‰K 3IsÅ  cËiúëÕü† ç§+$£ü¸ëE1 ÃMq~­0œ ”ý£‘BZÖŠd“@Ï# G‚‰•3It‹ey„¸Ç©f݉˜ÿKá!Ã@‘º&6×á Ë•¾€‚VÚ_ïA”Í”•pò¢Š<õŽMÓSÍȇ2h›‰5‘&†£ ¥j¾Èš~7rëçLf«zZŽÔ¦‚+ï¸*¥Ä(OñOCª†ÁÑ}6kä‘0—›ÆJ±ÒÄ*ÏV 8øLK ç»ìV ÏQ£‰?3”¾H¶i4%A›¬ÿ ÑÛô¬o¿¿±lÜ UÔ¼ÖŒðŸFó†¶ç"‰{†ÒG½u ó¬‰?3”â(8ÅÐ'   „-ÝÖäÕðÃØ’þ×N_U*å²F°ŸlßÞD¾â¦ûGkC,ª3™ø”¯µ‰?3‘å£]èhA>=3OÀŸd^|‚7(i~f!^Ë:5Qqï ÏãM¢ñ2Á1}›ß QàG"˜&i‰?3ŽnŠmƒlâÊo‹ª6Ÿ}>¢¹¹)wGáLáê}ZVeˆ ×âÎ*Þõ.êŸÙnáýÛÄ-3Ƙ‰?3”øÉ¬»KÏsìL­jŸP „í›嬮g"ýxÚ4_¼üÅ›ðºÙUÅ8,q—=ž3ŽKE——á ‰?3‘ä°šOó|Z«ñV K¿Â32t3,iº¬ÀŒh #ªÐŸY~JokžˆSÖŠÝÔí†4(„‘‚¹ 3Itpʉ3J E[LLö¶ o¦gXÿøòóÇÂ-ŠƒCÛØ8K&ããö?Ä.Q° 52…\Ê»ÈË#DƒHªpÂ?4ôù4¶*UXð{¬úsš8éÿurÒít¥V6 Ó»¬ºAÙ…@ÿÉY cÇÔ(ÿõ6+xw¹soÎÚß»5d3¼ÁÊ>­é— }Ù¨¿‰´Þ)·qƒ âÖK(A&`¢ó`&½ÂÓ ´e{Ž':²È¿+v"DÙ—\º“mâOßdQ¡Ë¢¶\h-Ú¡=÷¯ôÞ¼È;Åa: caù1Õ´ 넘icÎW×.ùk®Ùóü+ð•›ÓA67ºcR2S»®êº=^‹ˆ¢Ôˆ É"Ê"«JbkÆ[RÆ„Ûܲк ö ë Ég±Ëu{|¶DaøÿŸ·–Í£\2AŠb'ì¢Á+a/Îhº¼uï59,vÈÄæúl1J(†wGÌsGã%ZÔã.$QèTÍÖÑ-Ü1ÐsØ¥@JiwM©§¾H+³ú Äg”#ÈQs&0DS¡0•.$äšÌøðàïLÉI˜œÚb¤'ýu¥=hÒg“v[‰/ô¥}h[îF‡¹,‘SÈV!̰9èƒle¦q„:³ˆü(Ô¤_}MÒð×äoò_Ú܉?3ItpcËiúëÕü;ãŸuGÆŽó±œ_`y>¢œàë³ ó¤ã[ï pÛ)ÏÙâQ¶ì•file-5.46/tests/pgp-binary-key-v4-ecc-no-userid-secret.result000664 023540 023540 00000000165 14325247002 025637 0ustar00christoschristos000000 000000 OpenPGP Secret Key Version 4, Created Wed Aug 26 20:52:13 2020, EdDSA; Signature; Secret Subkey; OpenPGP Certificate file-5.46/tests/pgp-binary-key-v4-ecc-no-userid-secret.testfile000664 023540 023540 00000001432 14030740716 026141 0ustar00christoschristos000000 000000 ÅX_FË} +ÚG@ s£ARzyöQìD‡ ‚_FË}‰¤½  ›! '×Ò€Ž¡!ÞòÜÖø¼ðÍð]&3'×Ò€Ž¡Äö ® v(¸–¶¬ XœÓÙFy·øçu‚&Ø‚zêíÿo}Ç™_:‡.BD_Yðë<¼£ò`kþL9FüÇX_FË} +ÚG@ ê5ý‹lP@öÅæØ˜~'6Tš9£™¦5B;™cî† èjOÎ_¦â¢÷÷(±TÃ=(¸ÎM=E›=¢R&ÂÀ8 ‚_FË}‰¤½›˜ '×Ò€Ž¡v  ‚_FË}! ÈÁÙúÇóò!\eÞ4‡N_µ·ÓÈÁÙúÇóò$·þ9´,K™þGdÁÂÒúWÔÖ1C‹›<:¦Z¨ƒ$©Ø:¦´ó˜Ê™w0šnMn‡F,¨ûÍ„è_rçønÐ!ÞòÜÖø¼ðÍð]&3'×Ò€Ž¡ŠÖŒVþYdz¥Al}o2¦äwÙpõÌÁ‚0ää"úiëJÓ]fÊd×›¿aÇç‰oë#³–õWº±"üÁ”>Cxñ Ç]_FË} +—U@h¬H¡–:.Tì`vˆÂf‡dáTþ±—ü¶â/ ÿF›Vº¾0"Tg꺪Í~ ¬,þíFN=Á: ¸  ‚_FË}‰¤½› ! '×Ò€Ž¡!ÞòÜÖø¼ðÍð]&3'×Ò€Ž¡eÜIõÒvîÞÙ0$òLÒ­O+Ù̢̀J8fkôþ/¹*ðÜpSrùNSò©Ív ï°sØ‚µ£ file-5.46/tests/pgp-binary-key-v4-ecc-secret-key.result000664 023540 023540 00000000157 14325247002 024523 0ustar00christoschristos000000 000000 OpenPGP Secret Key Version 4, Created Sat Aug 22 14:07:46 2020, EdDSA; User ID; Signature; OpenPGP Certificate file-5.46/tests/pgp-binary-key-v4-ecc-secret-key.testfile000664 023540 023540 00000000756 14030740716 025034 0ustar00christoschristos000000 000000 ”X_A&² +ÚG@0ˆš¦´’T7µÜÄ/ç½m¿|Y´ìÈW[ý2puÞ`=Û2{¤ê[%eÃúZð&û“)Sr*ñ´!Edward Chris Carol ˆ–>!nK侯4M`¤œ(ÍJf&×_A&² Âg   € œ(ÍJf&׋cèZ|~TÒ;Ñ›Á{x;Õœ7QŠ’94µaž7Uâg‡¾1¹°ð‰m DX¦yã.L4«k„ç@Íq‡Í¨óí?œ]_A&² +—U@÷Bñ݃Åa¹hME³¹þêMv(ÎéÏJ‘ó qÿo/í°¸„‡IáŸUGWSÀo«lX ãÐÐ’p’ hTˆx !nK侯4M`¤œ(ÍJf&×_A&² œ(ÍJf&×á)ÿy*ïá¯+ÊpUî5•ƒxâ hçf_gkZþ2R΋þ(çáÅóß(B¶@»Þ|›J nnºÓ Åm²çfile-5.46/tests/pgp-binary-key-v4-rsa-key.result000664 023540 023540 00000000212 14325247002 023263 0ustar00christoschristos000000 000000 OpenPGP Secret Key Version 4, Created Sat Aug 22 14:05:57 2020, RSA (Encrypt or Sign, 3072 bits); User ID; Signature; OpenPGP Certificate file-5.46/tests/pgp-binary-key-v4-rsa-key.testfile000664 023540 023540 00000007157 14030740716 023606 0ustar00christoschristos000000 000000 •X_A&E ¼dkñ¯5Òb£lƒºRUÜîß®¾ÇJ·éè‹¶¬Æ#^X¼Ÿ±JM°õÕóˆî<7wjtæBŸW„Þ²d. 3µÍ¹ÿoû[]£@îªBÿ€ÂöÚìw¾¤„JúÓÃàÞ‘   •µ…I7 múðB@‡Ùê^øI ½=:{s½Ó97Ï ‘)<5ô*Œ»Í$õɃÐ Ô[$¿†î²â·âáVú>Ë|ˆ› ÆËO¥¯“ÿ’uˆÉ¢mZÜ- ƒ™ôô;´Œ=WÃTIÓæH.l$º5à2ÇN›Ý—·Š{KØO æ\^çóÛ¬³ !Ú{u9²H¿±Þ„:þ¨Ý'Bùôó_* §}í1.oWgÿJó×|àßHYþ‰} ÂroËå®+©šÖoc„<è¹jIì/úšy}…ãým<)$*ßùµëÄô[´Økzßl¥ç RJ´þ,ËŒ—ÜP+ô—kK\ƒÖÅV' þ&ÞÉnÚiÎx´=ŸÜ& jïäÑ~*šÐ ÖSFÐp!†=[ïëèñ!ù²³fk“+$}lî§ aœ²nÖ{Ù ñ³ù¤òåmÑkTÞš›"Íð^a*±Ìì€MÌr¨RØÔ„ ˆL3aÆÓvqn¿7Ì<»w¢ªÇ»»'ðóÔdÊ{WFTÇÔVJ™2þ†Ë”÷äÝ6Düs/±›£R?åM#rO‡˜ Ñ;¿›=Þ@+ƒ &~Ý´L°Ì¢-ÂzKÁ–1êÑôèÚªFd¯ÛK\ðÞÎÝšXÌÛ¿MçüÍ‘¤ëë—…æ{ák)Þx‰øJ.Ì€[ä%#ü 6 ê­—æÒZÇ!ájåòÁ¢±ü°hK&<´$ä‚}æ æ C°æ—µæUôGÎc@ÈÒ˜xˆó†dïTôƒ“Nå22ê<¢2´Áï±_pJ¦Ãz±¹ycyÚ̶§¢º?ˆU;±øx’r Þùf¹×5'â0rS—¸À½vµåÍ í©ôX†ª×¸Ðî¬R¡ø z¨]V:ú €¸Â£rE—޼NUSˆð_0†S¹NIHûZü߇é­ÇÁ3 烦i¿›z´ú¼ýðg÷%·+¯ˆçßÕKEú¯ºGÞ OÉ€4Z‡äL1õsXcÄa‡~Á¯¼ÕÃNþêt ©2> $mUëÎ3ª¶]ç°m{&HßöýžîúÁÊí6òù~Ä…üìxÂa\~Šdñèø™#•¯·Gë2»dV¡à ‡ŒU‰ ¤âôG^Ýó˜nC±ð:®O{4k(d¿›Ž[†¦¼JʳUôèÆùu;«ÎAtñ ¹4^iÑó}ÖÇ`æ¼Í=Ú'WcRœXD±åÉç6ãy*-dÈïq®ÌËht3‚… iMܤBbž '‰Ô >!W Âre_uÕ”JxýÙw¯‹_A&E Âg   € xýÙw¯‹>î þ#üî1’ÍóÃNljö9ÏàÚePËÏZ&ølvÙ¼–Ï,CèB‚Õà ëš• r ÀÚíqú•"ÊŽVYy\M Îmˆ¿ž­­Çf_bA¿ŠòÝ•äapdPê£Q±p`öÕñ@¯ƒAÈ듬çIŒ˜PR§`ꮎ’©Ðñ0Z™Y¦,އ´ö›ÏÕRa}i¶¥T[Æ¥¨>p”ZºCSˆiìù€™„·"4£ò‹€^ ¡ù;ÓD¡“/¡Rý‰ØÉ¦“ø6&ˆÔV< 躬[ctóa¡ŠêÍœ[XOò¤A¶²+¾V—zàˆ’X_A&E µ§íU-ì'(­’Ú¥YÐ.¨òÕ@Š÷I5ÄŸBiêl=.â;ÙÛHÎ`îÙKºþ©pêœ!¥êŽþ}q÷}Rëðw¼¼w ¿#ñ  zYÈO<¸~»©4ßÊæÍ/„ªT­t ¹]a•Dú·v›‘´ƒMcnúv~P4õ]=B­Pxï–>{ÇÆ3¸~•;ÿÜ` ë1ƒpïìºv:*ÕÈkºS´dY‰M6;ÙkÉ«M9l0#†üügbå‹@Í!Ö`šÈdoÊUö$8ïØqÄøzž …ÊÂnöóü¶þö7,XêðÓÓkË•t~ŠÖNӈج%Ý4*máëragc‹« @3Bn±uÅHÈ>ßmŽÌNÄ×Êë? ò†?MG:ê¯Ã:z¥bʾ¹¸Dré™|PK¯\‚aoŸ‰êðÃÁˆµÔ©³¤ÀÔÀúJ N–QðPÉÎL¥­©u¬Úh­ wS;Nq§aã¿Þ<âîr˳œùóxùfn.29HÜtsmªŽŠgßxâÅ¡ ÊúÜ5¾°ðþœŠl"¹<åeé£l.LÌÿ2ü Ùép¬ö$ü/ÜfâÙ¬´x–æ’¹àmÊÝKZи$‚yfs±«_ß2tT"Bé}ÈK Äë^ÂÇåiƒ»fÞjêB¶3§ç+uܸV¢im4?‡†:§05›¹…õ—¿S~ɧœ¼ölWx:/™±P”è¶ò°÷6™™ç§¸X‡ç¿9~&—&l¬7a¡e]JõߟbŶ–š ëìÿNùZ/ Ku‘(‹¥ß$rö+P·ñè“î—±qéðD«ÎRK{ÛÞŽ¦XP¯»ëÌ>…2»,ÌòÞ0üÂöàó¬wp •¬='#è,ÃØÐ¿»¢– 5¸Î )G«!q3Í~d_v<:¯æ!JG"ÏÉ8þÍ=<Ì—ôCG+µy»±ÍG ˜ðvoù 3¾0¬!Bë× á™¸ð‚±NUçÙ¼¶Ämpq×à®þaGºy©:UK? õ ªe°5½Qô§±å“®ðæŠÃ|ûNAØÐÏzÕˆKâäÚƒ&)úEÕ7óô€˜,ÃNó9©¯q_ÃX|çaÿœU]½I¹6(¤øÔu…ÿcU°²iëS9•BÇqäˆx($ËW°ÇnÚQŸxç×Ìàýø\ÃÎçF¯°ò¬K“ÑT\6é²cóÄ})pŠ ]§›éëm'EmÚ³¤É@®n ˜ú†ÈTæ»,kŒªgrë×6t¿ó4" ß+Ó?ËY‘ º}Z"ÅeyÞs~4µvÝrù*¿AyJ˜”(Mæöãk”þËa÷Úñ…¨>´¡²la&r«ƒ8'ºÁ tkyÓXŽ.œ,;³sÒz,§ÑoQ„gÇ AÙr G•|€äƒõ½®êm™‰¼„ã{Ԉ䣷€Û›ò]µdvp)s+¾~’ÙWô+éG%§#^õM[Z'%Ý$„P  * Š‚—¿í€¤ žbãå+¥JëªÜÊ Î¥àÊÍÍ.<ék¢¡ÒC´|(k£ß|ƒ85·8ëöZE,ÒFÄf52L›DóKê]ßl™i­ŸyÈj&Pìú\š¥ õ<á2±lø:„file-5.46/tests/pgp-binary-key-v4-rsa-secret-key.result000664 023540 023540 00000000212 14325247002 024546 0ustar00christoschristos000000 000000 OpenPGP Secret Key Version 4, Created Sat Aug 22 14:05:57 2020, RSA (Encrypt or Sign, 3072 bits); User ID; Signature; OpenPGP Certificate file-5.46/tests/pgp-binary-key-v4-rsa-no-userid-secret.result000664 023540 023540 00000000220 14325247002 025662 0ustar00christoschristos000000 000000 OpenPGP Secret Key Version 4, Created Sat Aug 22 20:13:52 2020, RSA (Encrypt or Sign, 3072 bits); Signature; Secret Subkey; OpenPGP Certificate file-5.46/tests/pgp-binary-key-v4-rsa-no-userid-secret.testfile000664 023540 023540 00000013423 14030740716 026177 0ustar00christoschristos000000 000000 ÅĘ_A|€ Òì,q7 $Á ¤êzpšVÃc³ï02e&±Š¬eˆ O¼ªÌâ:Ù¤«Ïç]4L`ZWxjY?ŶÓ5£Y]OªÏ=¦ŠDA [–ñ¼—±Æ‚üݱò-êêŽ|†Ûî°2¢Ä…þEºí¶I¤P˜«8Â17AöF9_=R#ˆ­?²2rB¹Q ìt.#»6¿9£Ü[•ýÝÎOPúm (Ývñ.‰"2\ç¡âG‹Wéçg`¢ã0|0òÑ¿Ô)á¬|"µ\A“ã ²•^wÑ´ÊóÒ£âcü•+7†×;;Ý›‘2r›ŠÝx…3P˜iØûBtúÇ@uqÔ/†´ŸFô:Cå“1É7Æy‰Þrxt&(–š.y™k+‹»ü°ürÂ]Ë™Àaô<îøQ¸`”mº T.ž/çhÕF Eìø>ø£5ÅUFu¸¢HÙ% b’㑳¹õø?ŽPB…À–¢R#™÷ntM9wI£–¦y–,¹·‘éáŠ<±‚Îë Ç.’µƒt– Ú„lÂ’FÇãÆïë×KØù¥4ùž¸hìÔ?'æ4Ê ÁîŒtÇÔ±ºÅ“ Ÿ1•úÀ"© ¶8&§ ›—ãÈñf›ãÂ\A¨ØØ<ݦ'òáçÄîò“ßpÀB¨í¤v³¼¾xG€S;Ì…ÆA-¨"ZƯ䨜bÕ# ˆWüÀ¦¬%¢ Ba@º…ù­w‡Eá~¾pÑAdTü¾+sB¦Äj2œô3…ü@ìñÀú¶¹b·±V/šû9Õ6*!åÂ(øß°Óaý)‡³¦½f0ò£Z‡—Û€€_sꯃ8ÚÛ…v-nj—ö¾þ3ퟄ¡“?f‚Ž0i2vD>¤8ƒ¯ûvØªØ ^H||ž×\+8Én,~Ф¢J7Dâ`3s𪱯ļèøJTËjW[ijŽÉÎ`š1¸¨‹÷IÏŽÚ—äguÓ…¶œ÷/¶$ }OªXµï¢ á¸pGYåôi9"z<¶x–kNµ1+ÝB0Bû‚ÁHŹˆ6u9¾)XÌê˜>‚=}6ÍZ,Ž.Ëý4@B ëÝ•j¿Öy{Ïr™Ç€•¿»ÿ áæ]¢ŸÇ›K¹ ä¼g¥KP—޵ü7ŒÿRdc‚]ù€Ã6Ñ]–ŒÆLne~*þVàg%7¢.Ø"tœ—s˜Ù›ÝòÇĘ_A|€ ·ß]º˜Dñ›Ø*Šg¡ø{]ESÖ­K©n&BϽGy ¥•%Œ÷/,‚ÔÒ³+Âä¦f«Ê›¨ï»‹j€Y7îCáq¨8é] µRÅuòáY±V«ô`ÓRoHÁ×½Òu,V^¤é%CàŸ*—YeÐè… ltððv²îiLlšüROùì'ÁϧÁž˜‡“m·ÿ`VDm ½òóB%àcUå–]OMìA™yh„ä4Š[‹ãzÕ©Ð!¥ ÊzwGÙ-¡Þ‰&Áدº\½C[yyo¶ l}“9$PÐ4ƒ±~Õ`ñ²9!KEçßÊÉ*W<Ùë¦%c«Þ—׊8«ÐÀ€œ®ê †w;õÏÒ¥ŸÆ¾Y«n ݽ¨àìâÐË”D! ™GeúÖvÄì§{쨤VbôàC¶gYK§áû_?MÁ'/g6ïÞ„É’•gñ?o™»¦QÃ\ªÌÊMuåH‰!ª]Ñüþ´v] ÿFVì´€Áì'ýuix¿`[lQ­ö醳ŽÁG#EøÃ欱‚É–®á”ÃS]u)#±äô[ýË$ŠiU[§Úgƺ±Ix‚WŒ6’S2§ƒb¡À½-©äwñÿ” ©¨µöàò˜Ž…¬ Òy_¸NìZÿ.ý•°ÇX²ÒB¥`ßUª‡”‚ôD4„-öQ§¥?€ÄØN±>î/ «ÏŸÝ®BܨÃΨraŸŸ“‹‡Ö˜r–Þ%KjùlG†§Nw‰ i½ÚÐ!~±ñp&òÅéh†ËC¼átlÁîö;šÌÍ„B5·©‘«à9¢ôÝXà˜¸Žó™hm™ca ‡eŠÏ3»Šž>P9µ¥Øad›O⊠ID‰‚D¿ÜB«üR¡Ž‰ã± ðBz ôÌÛ‚š²”/4Ž”ÊPïÄù†ádx]í©ñ·˜@Î'ØÂ£œ}Í„ókN¡æÒ —™\#wöì+…C´® Þ¤gèmŠÅºÊú³ÆJñ¡¡Ò!wX¸X€ÔzÇ“ãQÅ…N¢$#ˆWmÜ€ÿCvZ—pÀª5)†En§3ØÇÊL‘Ïð^:& ªì'ÓETOûˆ[™‚5 )6Á€<)F U­#­s´VbdH*ƺ±Sú‹ú8g_G}Es%€N«ç~îkýÚ§+·w£ÉúŠ;¡k›6÷7Üyϳ%@#[37¦LâGÌì3%Æ›CY˜…ë€%œ'¬ÆS»íhYõn5‹³ÏŸ¥à:l3h„Ù‡›·M¬½F!^žaƒ†v"j ƒÊ|²¯ð ÀŽwgs?oì5q¯ÃçvøšùXa‡å~»[¢D¤ =óÉÆ`sÞ‡ØåÞ ÍgŸåý|4ÒŸFFŒnƒ\þzŽø$Ý™oå†A|5èÜX>éYÕ È"áÙ£—Noq‘…5ƒ²ÚÖy‘Y¦'(륞ÂVcãÌ’ÒR—›kÝb6U­~©¿¾•ƒô¹QÉZÀê6'/œÊò?´0¬>Yÿr#ÝÜ„Â5­š\wU—Qk±<¯áA“DZOÙÐ??ë„——•ôè_NëV’º8±V8B ‰–—¨µíüŲM¤tØÊJ¶¦·hŸòßbk9Þ鎿Ê9úñk†}„?Ø\8ÙU*®NÝR§€å2Ë|­ÉÂã‹du¢må…íà"ÞÓª'üÅ×þÛª\ǪÖvû}Ùb­K§³?Iáÿ“M¦P“d•»!•p†½ -'º =GŽ/hqÍòë‘ÂÀÿ ‚_A|€‰¤½› ! ¾Æ„3sÇë[!K [®µ‡*ˆ¾Æ„3sÇë[d¯ ©/ߦq!âýÎÎ%Ò ø+â;;¦ÔQ„ ½tNÝ®‚àŒÄŒä7´gЧ¸¸géÆ;Õž9Tulî£?w1š´}Ÿ5DòMÎeè¹”wôük=¦…¯õò?뛫¿Rf¯jîÒô%Ý ‹ghÀv+íµÆß$¼0ñæ¨WUœ I^'Ú>D¢æ‚å;檼ឺ¡˜Á k*.€ÇT<18‘œ—i>ZœúäkQF5XaiŒ7ÛØ/ú¤·Ž™‚”N°ˆb]È–R/Ò”ný¬¸æ³ï³¬€r0—9\:|ˆTÓR²`ãT¯Í3WˆA•QÏ~˭õûrÓ·\-QHˆlº0Ü¥<ä[º‚ùdÏŵGãË>˜#Vˆ¾’ñƒè¯4§ÜýJš¸}‚gá ïv ¶2‚ zf³4ÍÎP%ãöÅ<=wÈ‘ÒX4µjV‘+Ý3¿0º8¨¸ÖœC«ó¼ýÃ{#áqT=T6mîÑëa¬ÇĘ_A|€ ÈŸŽ!%ôZ¢ä°Ó˜!ä]Y$2pIM± N\!¦vqǿӷÏô)ºDÀÝó¶%9¢þ„ RŠ h²þCTË#ì.tLIyzE$½µrûŒ¨ä q‹è`y"K%*Ñå .DЭ~•Û­h¿nœ"½Â2gÞ.ú¹$bÖù¾xhª›+×>Ò «X¾«ÄøBju…iº:±@úgl:…Âa{ú]’M9¬,D©¯·Æ²kŸº“¤5èM#´öFO¢poNçFrâ ‡Û)† VÙ0Ž:-J¼3ü}¨-ÌÑ Óqó]:èñtúz¯î¬0§¦%LGu;‡PÎ"rb‡°e@)Å$-Þ%¤ƒûýg¼³V˜õåDë'ÇîÓ#ëýLc+Ìw!t r”O'T‚#ðpNlyyЉ±?¥ØÆt>­äŒréwPA¬¬¤3ŠP ·¨~•È`m÷–¦pü©{™”¾Ê¢d'• žÇ¡‡.Úp›~vïUNêËb7ÆEµÕÐ}wD“ùÊ'Ë_(på4vá„JiêzOîÞ¢ýó¦›1 WŸ=ðôx|Û;àšw[Û.?õ¨ý+Ú Ä ”_¦êºv’‘½W4΃øÈpšIõ2blÈdáâJêeU’£Ö‹cywÛõ7¡À÷Ÿ™èäfixEH^ÇÌsS=x"‹·°T÷'”Vž±ÃÔô¢Êùú~!}*sÚ?í~pÄØ ¦^³Ö'¡ÍÜ•8„¤)úWš«íª(ìå,µ Ôí@¶ªVP½æïú|þÖºÈóÙ7™tö"ýEÚ8 fâg¶×tOUøReÊ;Œ±Ú¨ÞˆFÙQá€|1îœC6ΈæJØ¡M]^Å»t½ô‘Êšxg¢cTëø·5[šò&wC8ï²ñ«ª}Š|›òZ °PØAN=®ÝG׳ze"kQ âB„:ê™#V¾*)Ó=Øäm½P2ÄÄõ£~WI)—OÞP7“ö~»ô¶%ßÈU•ŸIç~YEÿ`GD÷¦UÌû^¾Áérò>ö$Fó™féÉÒÒ-—v5ŸUÓZ–((ƒØ0΃íèdádŠLòIý÷¼ÕÎÔ¬Ãñí—ÇHI'`%Œ&,è{{iÇn—/â¬3˜Ga;…þe ,F‘»¾ˆÅ*’¾yÄ90øÄËkC7É[n<+s˜¬—‡â[Z#ãËŒ@ ë4ù×ÈT÷ìÃg\Ó]…j¶f¬Êö»< i:pG£¯ÉÝ5ÔöË~3$©Œa$2˜œšjò öC‰ƒ} \kÇ9Û~¨燋À!+3:ÆLΑ¤p?nrïl^]z(äd#ûþšII,zÄà¦@U!ŒTQ²È e¥ÝʰSÚþoLþ§S ¸<ñ|ÉS0±§è0—ë÷Í.ãýrlÔ–P¸ÏSãÐϾ=+L+±!²´MaçãâJ]¤?ÌàÓç ,ÝÓ’D¬÷·ŽÞ_íÝþ_Vš¡f£I·VaD“á á<­'ÌψV"{zä JÛÍŒwºqMtr6FSk1jTnò`ArPOÇ÷g§±ÃŽ ¦ô•[ÀÆ9üIãøú§T§x‹‰Ï)ö¹•é’x»²$=¿Íû†6¹qð7ÂþEP“÷Bt0/8НÜÁ­ó¸Ø{Ëj ÌVõWŽ8ÜH·~Þ ÕÝ›˜ufv“PÓ–Õ¸6\4IÅ=,9_{ÊNæSµ ‚_A|€‰¤½›× ¾Æ„3sÇë[Àô  ‚_A|€! ²/Ù÷õˆ§!kñëç 9Å þ²/Ù÷õˆ§Bì ÿL¡Ç/x7M¤˜oB´C‘±Ð!éªéÄq‰×/‰bjfn?¾V•x:Áî¼-®Bã»"É™‹oB;u¸½[!Ž&Ùa <—ìO—«,.»v„în>€ g« @´DÍç rœzšuÅÈ2œÓxTBé%¶BH9­ ï˜òé ’JK΋ùio.Ÿò Ï*šÕØö¼nŸ"íÊ¡Ž%!xÞ‘Ë'QY€²Å¤>Œ±ÞÙ 9®†;–f÷⚥•òêŸ$©–5ûOpZ—b:‘Lª”}eKÁ9qðž Uì[ÿÐJÀû'¾FU+àÁ·ÊÉ:µBèØÌô‚UÊ![è&í`¦E™‘ëN>^sZæ>ó%ÎV²3­JúvžØæPˆd³žD°V¨hôg|„ÈæÃÿwqăºËb3‘ìÔ|/ ^‘íc+‰ì'¯çcÈ­˜!ûø¯—3šm sÖeÎJ<|¨ø´5RO]ÇV–}%òdg¡|ßdh©5!K [®µ‡*ˆ¾Æ„3sÇë[„ ÿVÅou}J‹žÐ#ÙÛ›Õ>MÚÞ®ÒývÉÆ;ÜÕÃFn„Š[Ó‚´ÎtøPÝ|È™¹…µ¶j^É@QÈp¦  3Ë¸Ìøo|£ÉŽû(×Hiñ?ŸöGp3‘ì.¿¥þÖÅÈ*¿ö˜„aÁ`i²úÊÒ–ÂxæÎßy‡›²[¢¹"« • š­§>Öh_Ã.úQkï=I’*]a“€=Èë0` ŽÊN3oÈ ,/1?Tb¯ï\ÚyœVóð“gÊ"¦Ä.• swǾªwÂkRb Q†Æ7ÕÍK¥Óy¼yM´ÙâÓzŠ „a ‰Ø.Ú~æfile-5.46/tests/pgp-binary-key-v4-rsa-secret-key.testfile000664 023540 023540 00000007157 14030740716 025071 0ustar00christoschristos000000 000000 •X_A&E ¼dkñ¯5Òb£lƒºRUÜîß®¾ÇJ·éè‹¶¬Æ#^X¼Ÿ±JM°õÕóˆî<7wjtæBŸW„Þ²d. 3µÍ¹ÿoû[]£@îªBÿ€ÂöÚìw¾¤„JúÓÃàÞ‘   •µ…I7 múðB@‡Ùê^øI ½=:{s½Ó97Ï ‘)<5ô*Œ»Í$õɃÐ Ô[$¿†î²â·âáVú>Ë|ˆ› ÆËO¥¯“ÿ’uˆÉ¢mZÜ- ƒ™ôô;´Œ=WÃTIÓæH.l$º5à2ÇN›Ý—·Š{KØO æ\^çóÛ¬³ !Ú{u9²H¿±Þ„:þ¨Ý'Bùôó_* §}í1.oWgÿJó×|àßHYþ‰} ÂroËå®+©šÖoc„<è¹jIì/úšy}…ãým<)$*ßùµëÄô[´Økzßl¥ç RJ´þ,ËŒ—ÜP+ô—kK\ƒÖÅV' þ&ÞÉnÚiÎx´=ŸÜ& jïäÑ~*šÐ ÖSFÐp!†=[ïëèñ!ù²³fk“+$}lî§ aœ²nÖ{Ù ñ³ù¤òåmÑkTÞš›"Íð^a*±Ìì€MÌr¨RØÔ„ ˆL3aÆÓvqn¿7Ì<»w¢ªÇ»»'ðóÔdÊ{WFTÇÔVJ™2þ†Ë”÷äÝ6Düs/±›£R?åM#rO‡˜ Ñ;¿›=Þ@+ƒ &~Ý´L°Ì¢-ÂzKÁ–1êÑôèÚªFd¯ÛK\ðÞÎÝšXÌÛ¿MçüÍ‘¤ëë—…æ{ák)Þx‰øJ.Ì€[ä%#ü 6 ê­—æÒZÇ!ájåòÁ¢±ü°hK&<´$ä‚}æ æ C°æ—µæUôGÎc@ÈÒ˜xˆó†dïTôƒ“Nå22ê<¢2´Áï±_pJ¦Ãz±¹ycyÚ̶§¢º?ˆU;±øx’r Þùf¹×5'â0rS—¸À½vµåÍ í©ôX†ª×¸Ðî¬R¡ø z¨]V:ú €¸Â£rE—޼NUSˆð_0†S¹NIHûZü߇é­ÇÁ3 烦i¿›z´ú¼ýðg÷%·+¯ˆçßÕKEú¯ºGÞ OÉ€4Z‡äL1õsXcÄa‡~Á¯¼ÕÃNþêt ©2> $mUëÎ3ª¶]ç°m{&HßöýžîúÁÊí6òù~Ä…üìxÂa\~Šdñèø™#•¯·Gë2»dV¡à ‡ŒU‰ ¤âôG^Ýó˜nC±ð:®O{4k(d¿›Ž[†¦¼JʳUôèÆùu;«ÎAtñ ¹4^iÑó}ÖÇ`æ¼Í=Ú'WcRœXD±åÉç6ãy*-dÈïq®ÌËht3‚… iMܤBbž '‰Ô >!W Âre_uÕ”JxýÙw¯‹_A&E Âg   € xýÙw¯‹>î þ#üî1’ÍóÃNljö9ÏàÚePËÏZ&ølvÙ¼–Ï,CèB‚Õà ëš• r ÀÚíqú•"ÊŽVYy\M Îmˆ¿ž­­Çf_bA¿ŠòÝ•äapdPê£Q±p`öÕñ@¯ƒAÈ듬çIŒ˜PR§`ꮎ’©Ðñ0Z™Y¦,އ´ö›ÏÕRa}i¶¥T[Æ¥¨>p”ZºCSˆiìù€™„·"4£ò‹€^ ¡ù;ÓD¡“/¡Rý‰ØÉ¦“ø6&ˆÔV< 躬[ctóa¡ŠêÍœ[XOò¤A¶²+¾V—zàˆ’X_A&E µ§íU-ì'(­’Ú¥YÐ.¨òÕ@Š÷I5ÄŸBiêl=.â;ÙÛHÎ`îÙKºþ©pêœ!¥êŽþ}q÷}Rëðw¼¼w ¿#ñ  zYÈO<¸~»©4ßÊæÍ/„ªT­t ¹]a•Dú·v›‘´ƒMcnúv~P4õ]=B­Pxï–>{ÇÆ3¸~•;ÿÜ` ë1ƒpïìºv:*ÕÈkºS´dY‰M6;ÙkÉ«M9l0#†üügbå‹@Í!Ö`šÈdoÊUö$8ïØqÄøzž …ÊÂnöóü¶þö7,XêðÓÓkË•t~ŠÖNӈج%Ý4*máëragc‹« @3Bn±uÅHÈ>ßmŽÌNÄ×Êë? ò†?MG:ê¯Ã:z¥bʾ¹¸Dré™|PK¯\‚aoŸ‰êðÃÁˆµÔ©³¤ÀÔÀúJ N–QðPÉÎL¥­©u¬Úh­ wS;Nq§aã¿Þ<âîr˳œùóxùfn.29HÜtsmªŽŠgßxâÅ¡ ÊúÜ5¾°ðþœŠl"¹<åeé£l.LÌÿ2ü Ùép¬ö$ü/ÜfâÙ¬´x–æ’¹àmÊÝKZи$‚yfs±«_ß2tT"Bé}ÈK Äë^ÂÇåiƒ»fÞjêB¶3§ç+uܸV¢im4?‡†:§05›¹…õ—¿S~ɧœ¼ölWx:/™±P”è¶ò°÷6™™ç§¸X‡ç¿9~&—&l¬7a¡e]JõߟbŶ–š ëìÿNùZ/ Ku‘(‹¥ß$rö+P·ñè“î—±qéðD«ÎRK{ÛÞŽ¦XP¯»ëÌ>…2»,ÌòÞ0üÂöàó¬wp •¬='#è,ÃØÐ¿»¢– 5¸Î )G«!q3Í~d_v<:¯æ!JG"ÏÉ8þÍ=<Ì—ôCG+µy»±ÍG ˜ðvoù 3¾0¬!Bë× á™¸ð‚±NUçÙ¼¶Ämpq×à®þaGºy©:UK? õ ªe°5½Qô§±å“®ðæŠÃ|ûNAØÐÏzÕˆKâäÚƒ&)úEÕ7óô€˜,ÃNó9©¯q_ÃX|çaÿœU]½I¹6(¤øÔu…ÿcU°²iëS9•BÇqäˆx($ËW°ÇnÚQŸxç×Ìàýø\ÃÎçF¯°ò¬K“ÑT\6é²cóÄ})pŠ ]§›éëm'EmÚ³¤É@®n ˜ú†ÈTæ»,kŒªgrë×6t¿ó4" ß+Ó?ËY‘ º}Z"ÅeyÞs~4µvÝrù*¿AyJ˜”(Mæöãk”þËa÷Úñ…¨>´¡²la&r«ƒ8'ºÁ tkyÓXŽ.œ,;³sÒz,§ÑoQ„gÇ AÙr G•|€äƒõ½®êm™‰¼„ã{Ԉ䣷€Û›ò]µdvp)s+¾~’ÙWô+éG%§#^õM[Z'%Ý$„P  * Š‚—¿í€¤ žbãå+¥JëªÜÊ Î¥àÊÍÍ.<ék¢¡ÒC´|(k£ß|ƒ85·8ëöZE,ÒFÄf52L›DóKê]ßl™i­ŸyÈj&Pìú\š¥ õ<á2±lø:„file-5.46/tests/pnm1.result000664 023540 023540 00000000065 14320616202 017403 0ustar00christoschristos000000 000000 Netpbm image data, size = 2 x 2, greymap, ASCII text file-5.46/tests/pnm1.testfile000664 023540 023540 00000000023 14320616202 017676 0ustar00christoschristos000000 000000 P2 2 2 255 0 0 0 0 file-5.46/tests/pnm2.result000664 023540 023540 00000000062 14320616202 017401 0ustar00christoschristos000000 000000 Netpbm image data, size = 2 x 2, rawbits, greymap file-5.46/tests/pnm2.testfile000664 023540 023540 00000000017 14320616202 017702 0ustar00christoschristos000000 000000 P5 2 2 255 file-5.46/tests/pnm3.result000664 023540 023540 00000000066 14322555364 017423 0ustar00christoschristos000000 000000 Netpbm image data, size = 10 x 20, pixmap, ASCII text file-5.46/tests/pnm3.testfile000664 023540 023540 00000000070 14320616202 017702 0ustar00christoschristos000000 000000 P3 # CREATOR: GIMP PNM Filter Version 1.1 10 20 255 255 file-5.46/tests/regex-eol.magic000664 023540 023540 00000000352 14015050417 020161 0ustar00christoschristos000000 000000 ## Ansible Vault files 0 string $ANSIBLE_VAULT Ansible Vault text >&1 regex/1l [0-9]+(\.[0-9]+)+ \b, version %s >>&1 regex/1l [^;]+$ \b, using %s encryption !:mime application/ansible-vault !:strength +60 file-5.46/tests/regex-eol.result000664 023540 023540 00000000071 14325247002 020417 0ustar00christoschristos000000 000000 Ansible Vault text, version 1.1, using AES256 encryption file-5.46/tests/regex-eol.testfile000664 023540 023540 00000003465 14015050417 020730 0ustar00christoschristos000000 000000 $ANSIBLE_VAULT;1.1;AES256 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000 file-5.46/tests/registry-pol.result000664 023540 023540 00000000050 14445614237 021200 0ustar00christoschristos000000 000000 Group Policy Registry Policy, Version=1 file-5.46/tests/registry-pol.testfile000664 023540 023540 00000015666 14445614237 021524 0ustar00christoschristos000000 000000 PReg[Software\Policies\Microsoft\Cryptography;**DeleteKeys;;n;Software\Policies\Microsoft\Cryptography\PolicyServers][Software\Policies\Microsoft\Cryptography\AutoEnrollment;AEPolicy;;;][Software\Policies\Microsoft\Cryptography\AutoEnrollment;OfflineExpirationPercent;;; ][Software\Policies\Microsoft\Cryptography\AutoEnrollment;OfflineExpirationStoreNames;;;MY][Software\Policies\Microsoft\Cryptography\PolicyServers;;;N;{72560FB8-60C1-4231-BDC5-94BA2C1C19B2}][Software\Policies\Microsoft\Cryptography\PolicyServers;Flags;;;][Software\Policies\Microsoft\Cryptography\PolicyServers\37c9dc30f207f27f61a2f7c3aed598a6e2920b54;URL;; ;LDAP:][Software\Policies\Microsoft\Cryptography\PolicyServers\37c9dc30f207f27f61a2f7c3aed598a6e2920b54;PolicyID;;N;{72560FB8-60C1-4231-BDC5-94BA2C1C19B2}][Software\Policies\Microsoft\Cryptography\PolicyServers\37c9dc30f207f27f61a2f7c3aed598a6e2920b54;FriendlyName;;F;Active Directory Enrollment Policy][Software\Policies\Microsoft\Cryptography\PolicyServers\37c9dc30f207f27f61a2f7c3aed598a6e2920b54;Flags;;;][Software\Policies\Microsoft\Cryptography\PolicyServers\37c9dc30f207f27f61a2f7c3aed598a6e2920b54;AuthFlags;;;][Software\Policies\Microsoft\Cryptography\PolicyServers\37c9dc30f207f27f61a2f7c3aed598a6e2920b54;Cost;;;ýÿÿ][Software\Policies\Microsoft\SystemCertificates\ACRS\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\ACRS\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\ACRS\CTLs;;;;][Software\Policies\Microsoft\SystemCertificates\CA\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\CA\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\CA\CTLs;;;;][Software\Policies\Microsoft\SystemCertificates\Disallowed\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\Disallowed\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\Disallowed\CTLs;;;;][Software\Policies\Microsoft\SystemCertificates\DPNGRA\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\DPNGRA\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\DPNGRA\CTLs;;;;][Software\Policies\Microsoft\SystemCertificates\FVE\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\FVE\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\FVE\CTLs;;;;][Software\Policies\Microsoft\SystemCertificates\FVE_NKP\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\FVE_NKP\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\FVE_NKP\CTLs;;;;][Software\Policies\Microsoft\SystemCertificates\Root\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\Root\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\Root\CTLs;;;;][Software\Policies\Microsoft\SystemCertificates\Trust\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\Trust\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\Trust\CTLs;;;;][Software\Policies\Microsoft\SystemCertificates\TrustedPeople\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\TrustedPeople\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\TrustedPeople\CTLs;;;;][Software\Policies\Microsoft\SystemCertificates\TrustedPublisher\Certificates;;;;][Software\Policies\Microsoft\SystemCertificates\TrustedPublisher\CRLs;;;;][Software\Policies\Microsoft\SystemCertificates\TrustedPublisher\CTLs;;;;]file-5.46/tests/rpm-v3.0-bin-aarch64.result000664 023540 023540 00000000025 14521747351 022017 0ustar00christoschristos000000 000000 RPM v3.0 bin AArch64 file-5.46/tests/rpm-v3.0-bin-aarch64.testfile000664 023540 023540 00000014331 14521747351 022325 0ustar00christoschristos000000 000000 í«îÛtest-0-0.fc40Ž­è´>¤ )èlìpï€ð„ ec21a6811ba92b2f9018aa872b72e47262ff9da6e5fdbe6d9eae596b723cc30483d643f3a303a7aff4640f67d74382b4d37437abAѤ±òUo>Ç'"ÊNë|>ÿÿÿŽ­è'•?…dèéê ì í îï ñHòLó[öj÷wø †ý’þ˜ ¶ÌÜA(`8h9l:ƒXŒY”b¦d¨e­f²lµ“Ð”ÔÆøäþå@éDCtest00.fc40testTest.e9=*buildvm-a64-13.iad2.fedoraproject.orgFedora ProjectFedora ProjectBSD-2-ClauseFedora ProjectUnspecifiedlinuxaarch64test-0-0.fc40.src.rpmtesttest(aarch-64)    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsZstd)3.0.4-14.6.0-14.0-15.4.18-14.19.0e9@Test - 0.0- Test0-0.fc400-0.fc40-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointercpiozstd19aarch64-redhat-linux-gnuhttps://bugz.fedoraproject.org/testutf-8a40c7d44c2842691af995cb8481a68716dd35b228919357e7ef5749f0104905d23d0422b4fea28f771e872741bb370790b3cd0538eafb461233e820b84b57a2e?ÿÿý(µ/ýhB Àë»ãmáúËm GVsøÿŸÇ±,'þ#file-5.46/tests/rpm-v3.0-bin-powerpc64.result000664 023540 023540 00000000027 14520272605 022414 0ustar00christoschristos000000 000000 RPM v3.0 bin PowerPC64 file-5.46/tests/rpm-v3.0-bin-powerpc64.testfile000664 023540 023540 00000014245 14521747351 022732 0ustar00christoschristos000000 000000 í«îÛtest-0-0.fc40Ž­è´>¤ )èlìpï€ð„ 9b8aa0652abb13e0fee403ea2006abddedb0a35fc7e7f30bc9bbfb276dc4395d8a6ebf451d8f8ad14bcec88f9a50e9922241df02 Ô#jti•˜ã…bd)|>ÿÿÿŽ­è'a?Qdèéê ì í îï ñLòPó_ön÷{ø Šý–þœ¤ºÌÜA(`8h9l:ƒXŒY”b¦dve{f€lƒ“œ” ÆÄäÊå éCtest00.fc40testTest.e9@ buildvm-ppc64le-16.iad2.fedoraproject.orgFedora ProjectFedora ProjectBSD-2-ClauseFedora ProjectUnspecifiedlinuxppc64letest-0-0.fc40.src.rpmtesttest(ppc-64)    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsZstd)3.0.4-14.6.0-14.0-15.4.18-14.19.0e9@Test - 0.0- Test0-0.fc400-0.fc40-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mcpu=power8 -mtune=power8 -fasynchronous-unwind-tables -fstack-clash-protectioncpiozstd19ppc64le-redhat-linux-gnuhttps://bugz.fedoraproject.org/testutf-8a40c7d44c2842691af995cb8481a68716dd35b228919357e7ef5749f0104905d23d0422b4fea28f771e872741bb370790b3cd0538eafb461233e820b84b57a2e?ÿÿý(µ/ýhB Àë»ãmáúËm GVsøÿŸÇ±,'þ#file-5.46/tests/rpm-v3.0-bin-s390x.result000664 023540 023540 00000000024 14520272605 021446 0ustar00christoschristos000000 000000 RPM v3.0 bin S/390x file-5.46/tests/rpm-v3.0-bin-s390x.testfile000664 023540 023540 00000014235 14521747351 021766 0ustar00christoschristos000000 000000 í«îÛtest-0-0.fc40Ž­è´>¤ )èlìpï€ð„ 2380517564018fa5bda439991412872457ff7405863af0a011ebfb67476b4bae03fe535148b87e2a056a4e9e2e08326eaf6b57f0kÇ›'V}Is€>´HÓ|>ÿÿÿŽ­è'Y?Idèéê ì í îï ñHòLó[öj÷wø †ý’þ˜ž´ÈØ=(\8d9h:XˆYb¢dmerfwlz“””˜Æ¼äÂåéCtest00.fc40testTest.e9?Ábuildvm-s390x-21.s390.fedoraproject.orgFedora ProjectFedora ProjectBSD-2-ClauseFedora ProjectUnspecifiedlinuxs390xtest-0-0.fc40.src.rpmtesttest(s390-64)    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsZstd)3.0.4-14.6.0-14.0-15.4.18-14.19.0e9@Test - 0.0- Test0-0.fc400-0.fc40-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=z13 -mtune=z14 -fasynchronous-unwind-tables -fstack-clash-protectioncpiozstd19s390x-redhat-linux-gnuhttps://bugz.fedoraproject.org/testutf-8a40c7d44c2842691af995cb8481a68716dd35b228919357e7ef5749f0104905d23d0422b4fea28f771e872741bb370790b3cd0538eafb461233e820b84b57a2e?ÿÿý(µ/ýhB Àë»ãmáúËm GVsøÿŸÇ±,'þ#file-5.46/tests/rpm-v3.0-bin-x86_64.result000664 023540 023540 00000000031 14520272605 021514 0ustar00christoschristos000000 000000 RPM v3.0 bin i386/x86_64 file-5.46/tests/rpm-v3.0-bin-x86_64.testfile000664 023540 023540 00000014335 14521747351 022037 0ustar00christoschristos000000 000000 í«îÛtest-0-0.fc40Ž­è´>¤ )èlìpï€ð„ f075054061ba68b598a19a5bc358b96b64a486d4721bda63fc98c2590a20e25e3ba34549ec42f9271f98e5141f5663896d5aee24EG‹è· ®6NÂôTZ로|>ÿÿÿŽ­è'™?‰dèéê ì í îï ñHòLó[öj÷wø †ý’þ˜ŸµÈØ=(\8d9h:XˆYb¢d­e²f·lº“Ô”ØÆüäåDéHCtest00.fc40testTest.e9?Ïbuildhw-x86-02.iad2.fedoraproject.orgFedora ProjectFedora ProjectBSD-2-ClauseFedora ProjectUnspecifiedlinuxx86_64test-0-0.fc40.src.rpmtesttest(x86-64)    rpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsZstd)3.0.4-14.6.0-14.0-15.4.18-14.19.0e9@Test - 0.0- Test0-0.fc400-0.fc40-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointercpiozstd19x86_64-redhat-linux-gnuhttps://bugz.fedoraproject.org/testutf-8a40c7d44c2842691af995cb8481a68716dd35b228919357e7ef5749f0104905d23d0422b4fea28f771e872741bb370790b3cd0538eafb461233e820b84b57a2e?ÿÿý(µ/ýhB Àë»ãmáúËm GVsøÿŸÇ±,'þ#file-5.46/tests/rpm-v3.0-src.result000664 023540 023540 00000000015 14520272605 020601 0ustar00christoschristos000000 000000 RPM v3.0 src file-5.46/tests/rpm-v3.0-src.testfile000664 023540 023540 00000014632 14521747351 021122 0ustar00christoschristos000000 000000 í«îÛtest-0-0.fc40Ž­è´>¤ )èlìpï€ð„ 6f4065c28f8e2bc3ecd6199377d5413c6ac37991751bebe0af5b9265d6221457635ee59eb3986ebe42d61fb8b077fa248b530a060R´ÛRþnî.1]Ô>ÿÿÿŽ­è7?dèéê ì í îï ñHòLó[öj÷wø †ý’þ˜ ¤ ¦ ¨ ¬ í ðôù D(T8\9`:wF~G°H´I¸R¼XÀYÄ\Ð]Ô^Þdßeäfé“ì”ðÆäå\é`ë¡Ctest00.fc40testTest.e9?>buildvm-a64-06.iad2.fedoraproject.orgßFedora ProjectFedora ProjectBSD-2-ClauseFedora ProjectUnspecifiedlinuxaarch64ߤe8Z€f89bff97f5079c1941618af8b2d0e96c57f2b5bf623bd78f926018483ec09d72 rootrootÿÿÿÿtest  rpmlib(CompressedFileNames)rpmlib(FileDigests)3.0.4-14.6.0-14.19.0e9@Test - 0.0- Testbuildvm-a64-06.iad2.fedoraproject.org 16982505580-0.fc40test.speccpiogzip9https://bugz.fedoraproject.org/testutf-859597c775c99bf5c0453c137920e27ae3811c38a9ae323226f40dce649e4faeee3e1d97676bef194e15083bb267e846b2068670fead1b741a2a817eb8a996623Name: test Version: 0 Release: 0.fc40 Summary: test License: BSD-2-Clause %description Test. %build %install %files %changelog * Wed Oct 25 2023 Test - 0.0 - Test ?ÿÿü‹Mk1†÷<¿bö॰2»vë"¢ý<¤…Uô“Ѳ«l²‡Rúß›ØúÑRÐç÷ÍÌ›Lõ©O)}³Ó"×ô?éMÞ+rQülÕŠ.CìcëºvË2zðHèÀœ«7õ¡NP²aaIê|Œ•¶î¦mU‰æ}ð낉–\ŸÄï§I–<ÑZF€Žb+½u~ÌÂ[|mÙj£¼êÚ:aŒw+mØz•o¢^³Ù¬á ¬ðU:ÌrÌ(ëa8Ã0ô6,#LºÉ®Ñ鿞ãÒÜ_–{3+ïž'OeÇ‘ç wâÔfile-5.46/tests/searchbug.magic000644 023540 023540 00000000300 14671551745 020246 0ustar00christoschristos000000 000000 0 string TEST Testfmt >0 byte x (0) >>0 use part2 >0 byte x (64) >>64 use part2 0 name part2 >0 search/12 ABC found_ABC >>&0 ubyte x followed_by 0x%02x >>&0 offset x at_offset %lld file-5.46/tests/searchbug.result000664 023540 023540 00000000141 14714175777 020516 0ustar00christoschristos000000 000000 Testfmt (0) found_ABC followed_by 0x31 at_offset 11 (64) found_ABC followed_by 0x32 at_offset 75 file-5.46/tests/searchbug.testfile000644 023540 023540 00000000400 14671550746 021006 0ustar00christoschristos000000 000000 TESTxxxxABC1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxABC2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfile-5.46/tests/uf2.result000664 023540 023540 00000000116 14700541452 017227 0ustar00christoschristos000000 000000 UF2 firmware image, family ESP32-S2, base address 00000000, 4829 total blocks file-5.46/tests/uf2.testfile000664 023540 023540 00000001000 14041074140 017512 0ustar00christoschristos000000 000000 UF2 WQ]ž ÝîNÝ¿é Àš@î ?42TÍ«6.1.0-beta.2circuitpython19:03:38Dec 3 2020v4.3-dev-1198-gd06744f5eúU…PôÿÕ¼)¥j¹M!°á…’¡µOÍâôÕF]–0o± file-5.46/tests/utf16xmlsvg.testfile000664 023540 023540 00000012674 14463456727 021276 0ustar00christoschristos000000 000000 ÿþ<?xml version="1.0" encoding="utf-16"?> <!-- Generator: Adobe Illustrator 27.6.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> <svg version="1.1" id="Livello_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 2553.6 940.6" style="enable-background:new 0 0 2553.6 940.6;" xml:space="preserve"> <style type="text/css"> .st0{fill:#0076BD;} </style> <g> <path class="st0" d="M2372.4,727.1l-15.1-26.6h-12.6v26.6h-5.6V666h17c11,0,19.2,5.5,19.2,16.6c0,10.6-5.8,15.6-12.2,17.1l16,27.4 H2372.4 M2355.1,670.9h-10.5v24.8h10.7c8.3,0,14.1-4.3,14.1-13.1C2369.5,674.8,2362.9,670.9,2355.1,670.9"/> <path class="st0" d="M2308.6,697.7c0,25,20.5,45.4,45.5,45.4c24.8,0,45.3-20.4,45.3-45.4c0-25-20.5-45.3-45.3-45.3 C2329.1,652.4,2308.6,672.7,2308.6,697.7 M2312.6,697.7c0-22.9,18.5-41.5,41.6-41.5c22.6,0,41.3,18.6,41.3,41.5 c0,22.9-18.7,41.5-41.3,41.5C2331.1,739.2,2312.6,720.6,2312.6,697.7"/> <path class="st0" d="M255.7,469.2c0-188.4,153.3-342.1,342.4-342.1c102.7,0,195.2,46.5,258,118l-219.5,0c-27,0-56.9,18.7-71.1,33.3 c-14.1,14.7-152.8,153.2-170.8,170.2c-18,16.9-31.2,20.7-54.8,20.7L255.7,469.2 M406.1,567.2c23.6,0,36.8-2.7,54.8-19.7 c18-16.9,156-154.3,170.6-170.1c13.9-15,44.3-33.8,71.3-33.8h213.9c-9.7-24.3-22.4-47.4-37-68.5l-163.3-0.1 c-23.8,0-45.5,12.3-58.4,24.9c-13.4,12.9-155.3,154.4-168.9,168.6c0,0-24.3,31-72.3,31l-159.9,0c2.2,23.6,6.8,45.7,13.4,67.7 L406.1,567.2z M479.6,666.5c23.6,0,36.7-3.6,54.7-20.7c20.9-19.8,154.3-156,170.6-173.5c13.9-14.9,44.1-33.3,71.3-33.3l163,0 c-1.7-24-6.1-43.8-12.6-66.1l-136.3,0c-23.9,0-46.7,12.7-59.9,24.9c-15.3,14.1-154.3,154-168.4,167.9c0,0-23.3,31.1-71.3,31.1 l-210.5,0c10,24.8,23.1,48.1,38.5,69.7L479.6,666.5z M342.5,696.2c62.5,70,153.8,114.9,255.5,114.9 c187.9,0,340.5-155.2,342.2-342.1l-83.7-0.1c-23.9,0-47.5,11.9-59.9,24.9C784,506.8,642.9,652,629.5,665.1c0,0-25.3,31.1-73.3,31.1 L342.5,696.2z M1405.8,509.7c-12.7-21.1-28.7-53.5-101-71.9c-75.9-19.2-106.3-26.6-126.8-31.1c-20.2-4.5-53.1-15.3-53.1-59.1 c0-40.1,39.9-61.3,82-61.3c40.6,0,94.2,17.3,102.7,80.2h96.1V509.7z M1912.2,218.8h-162.1l-91.3,352.1l-91.2-352.1h-161.9V332 c-49.4-130.9-158.4-136.1-191.6-136.1c-141.6,0-192.5,88.6-192.5,153.8c0,104.7,86.6,136.8,110.2,142.8 c20.5,5.2,123.1,29.7,143.3,35.8c24.8,7.5,44.5,29,44.5,55.8c0,25.3-19.7,67.5-94.4,67.5c-74.5,0-110-40.7-116.1-89.7h-100 c0,0-3.9,180.9,222.2,180.9c96.6,0,147.5-40.4,174.2-83.1v64.2h101l-4.1-379.1l104.9,379.1h102.7l104.9-379.1l-3.9,379.1h101V630 c22.9,46.8,76.4,113.1,191.5,113.1c129.9,0,194.7-80.6,205.9-182h-97.1c-6.8,49.4-50.9,88.9-108.3,88.9 c-15.8,0-129.2-8.6-129.2-181.6c0-119.1,61.1-186.9,129-186.9c21.4,0,93,9,102.7,93.9h96.1c-7.5-121.7-107.3-179.9-198.8-179.9 c-107.8,0-167.7,56.4-191.8,102.6V218.8z"/> </g> </svg> file-5.46/tests/utf16xmlsvg.result000664 023540 023540 00000000115 14463456727 020760 0ustar00christoschristos000000 000000 SVG Scalable Vector Graphics image, Unicode text, UTF-16, little-endian text file-5.46/tests/xclbin.result000664 023540 023540 00000000301 14352362556 020017 0ustar00christoschristos000000 000000 AMD/Xilinx accelerator AXLF (xclbin) file, 46226070 bytes, created Fri Mar 25 00:51:37 2022, shell "xilinx_u55c_gen3x16_xdma_3_202210_1", uuid e106e953-cf90-4024-e075-282d1a7d820b, 11 sections file-5.46/tests/xclbin.testfile000664 023540 023540 00000001000 14352362556 020315 0ustar00christoschristos000000 000000 xclbin2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=b–ZÁ=b» xilinx_u55c_gen3x16_xdma_3_202210_1áéSÏ@$àu(-}‚ partial€†—Àfile-5.46/tests/zstd-3-skippable-frames.result000664 023540 023540 00000000064 14325247002 023101 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 1 file-5.46/tests/zstd-dictionary-0.result000664 023540 023540 00000000034 14325247002 022013 0ustar00christoschristos000000 000000 Zstandard dictionary (ID 0) file-5.46/tests/zstd-dictionary-1.result000664 023540 023540 00000000034 14325247002 022014 0ustar00christoschristos000000 000000 Zstandard dictionary (ID 1) file-5.46/tests/zstd-dictionary-2.result000664 023540 023540 00000000044 14325247002 022016 0ustar00christoschristos000000 000000 Zstandard dictionary (ID 285212672) file-5.46/tests/zstd-skippable-frame-0.result000664 023540 023540 00000000041 14325247002 022706 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.2) file-5.46/tests/zstd-skippable-frame-4.result000664 023540 023540 00000000041 14325247002 022712 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.3) file-5.46/tests/zstd-skippable-frame-8.result000664 023540 023540 00000000041 14325247002 022716 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.4) file-5.46/tests/zstd-skippable-frame-C.result000664 023540 023540 00000000064 14325247002 022736 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 1 file-5.46/tests/zstd-v0.2-FF.result000664 023540 023540 00000000041 14325247002 020465 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.2) file-5.46/tests/zstd-v0.2-FF.testfile000664 023540 023540 00000000012 14015050417 020762 0ustar00christoschristos000000 000000 "µ/ýÿfile-5.46/tests/zstd-v0.3-FF.result000664 023540 023540 00000000041 14325247002 020466 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.3) file-5.46/tests/zstd-v0.3-FF.testfile000664 023540 023540 00000000012 14015050417 020763 0ustar00christoschristos000000 000000 #µ/ýÿfile-5.46/tests/zstd-v0.4-FF.result000664 023540 023540 00000000041 14325247002 020467 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.4) file-5.46/tests/zstd-v0.4-FF.testfile000664 023540 023540 00000000012 14015050417 020764 0ustar00christoschristos000000 000000 $µ/ýÿfile-5.46/tests/zstd-v0.5-FF.result000664 023540 023540 00000000041 14325247002 020470 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.5) file-5.46/tests/zstd-v0.5-FF.testfile000664 023540 023540 00000000012 14015050417 020765 0ustar00christoschristos000000 000000 %µ/ýÿfile-5.46/tests/zstd-v0.6-FF.result000664 023540 023540 00000000041 14325247002 020471 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.6) file-5.46/tests/zstd-v0.6-FF.testfile000664 023540 023540 00000000012 14015050417 020766 0ustar00christoschristos000000 000000 &µ/ýÿfile-5.46/tests/zstd-v0.7-00.result000664 023540 023540 00000000066 14325247002 020425 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.7), Dictionary ID: None file-5.46/tests/zstd-v0.7-21.result000664 023540 023540 00000000063 14325247002 020425 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.7), Dictionary ID: 1 file-5.46/tests/zstd-v0.7-21.testfile000664 023540 023540 00000000012 14015050417 020716 0ustar00christoschristos000000 000000 'µ/ý!file-5.46/tests/zstd-v0.7-22.result000664 023540 023540 00000000065 14325247002 020430 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.7), Dictionary ID: 513 file-5.46/tests/zstd-v0.7-22.testfile000664 023540 023540 00000000012 14015050417 020717 0ustar00christoschristos000000 000000 'µ/ý"file-5.46/tests/zstd-v0.8-00.result000664 023540 023540 00000000067 14325247002 020427 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: None file-5.46/tests/zstd-v0.8-01.result000664 023540 023540 00000000064 14325247002 020425 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 2 file-5.46/tests/zstd-v0.8-01.testfile000664 023540 023540 00000000012 14015050417 020715 0ustar00christoschristos000000 000000 (µ/ýfile-5.46/tests/zstd-v0.8-02.result000664 023540 023540 00000000066 14325247002 020430 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 770 file-5.46/tests/zstd-v0.8-02.testfile000664 023540 023540 00000000012 14015050417 020716 0ustar00christoschristos000000 000000 (µ/ýfile-5.46/tests/zstd-v0.8-03.result000664 023540 023540 00000000073 14325247002 020427 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 84148994 file-5.46/tests/zstd-v0.8-03.testfile000664 023540 023540 00000000012 14015050417 020717 0ustar00christoschristos000000 000000 (µ/ýfile-5.46/tests/zstd-v0.8-16.result000664 023540 023540 00000000066 14325247002 020435 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 770 file-5.46/tests/zstd-v0.8-16.testfile000664 023540 023540 00000000012 14015050417 020723 0ustar00christoschristos000000 000000 (µ/ýfile-5.46/tests/zstd-v0.8-20.result000664 023540 023540 00000000067 14325247002 020431 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: None file-5.46/tests/zstd-v0.8-20.testfile000664 023540 023540 00000000012 14015050417 020716 0ustar00christoschristos000000 000000 (µ/ý file-5.46/tests/zstd-v0.8-21.result000664 023540 023540 00000000064 14325247002 020427 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 1 file-5.46/tests/zstd-v0.8-21.testfile000664 023540 023540 00000000012 14015050417 020717 0ustar00christoschristos000000 000000 (µ/ý!file-5.46/tests/zstd-v0.8-22.result000664 023540 023540 00000000066 14325247002 020432 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 513 file-5.46/tests/zstd-v0.8-22.testfile000664 023540 023540 00000000012 14015050417 020720 0ustar00christoschristos000000 000000 (µ/ý"file-5.46/tests/zstd-v0.8-23.result000664 023540 023540 00000000073 14325247002 020431 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 67305985 file-5.46/tests/zstd-v0.8-23.testfile000664 023540 023540 00000000012 14015050417 020721 0ustar00christoschristos000000 000000 (µ/ý#file-5.46/tests/zstd-v0.8-F4.result000664 023540 023540 00000000067 14325247002 020461 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: None file-5.46/tests/zstd-v0.8-F4.testfile000664 023540 023540 00000000012 14015050417 020746 0ustar00christoschristos000000 000000 (µ/ýôfile-5.46/tests/zstd-v0.8-FF.result000664 023540 023540 00000000073 14325247002 020500 0ustar00christoschristos000000 000000 Zstandard compressed data (v0.8+), Dictionary ID: 67305985 file-5.46/tests/zstd-v0.8-FF.testfile000664 023540 023540 00000000012 14015050417 020770 0ustar00christoschristos000000 000000 (µ/ýÿfile-5.46/magic/Magdir/000775 023540 023540 00000000000 14721636375 016432 5ustar00christoschristos000000 000000 file-5.46/magic/scripts/000775 023540 023540 00000000000 14721636373 016714 5ustar00christoschristos000000 000000 file-5.46/magic/Makefile.am000664 023540 023540 00000027165 14700541452 017262 0ustar00christoschristos000000 000000 # # $File: Makefile.am,v 1.192 2024/10/02 01:45:32 christos Exp $ # MAGIC_FRAGMENT_BASE = Magdir MAGIC_DIR = $(top_srcdir)/magic MAGIC_FRAGMENT_DIR = $(MAGIC_DIR)/$(MAGIC_FRAGMENT_BASE) pkgdata_DATA = magic.mgc MAGIC_FRAGMENTS = \ $(MAGIC_DIR)/Header \ $(MAGIC_DIR)/Localstuff \ $(MAGIC_FRAGMENT_DIR)/acorn \ $(MAGIC_FRAGMENT_DIR)/adi \ $(MAGIC_FRAGMENT_DIR)/adventure \ $(MAGIC_FRAGMENT_DIR)/aes \ $(MAGIC_FRAGMENT_DIR)/algol68 \ $(MAGIC_FRAGMENT_DIR)/allegro \ $(MAGIC_FRAGMENT_DIR)/alliant \ $(MAGIC_FRAGMENT_DIR)/amanda \ $(MAGIC_FRAGMENT_DIR)/amigaos \ $(MAGIC_FRAGMENT_DIR)/android \ $(MAGIC_FRAGMENT_DIR)/animation \ $(MAGIC_FRAGMENT_DIR)/aout \ $(MAGIC_FRAGMENT_DIR)/apache \ $(MAGIC_FRAGMENT_DIR)/apl \ $(MAGIC_FRAGMENT_DIR)/apple \ $(MAGIC_FRAGMENT_DIR)/application \ $(MAGIC_FRAGMENT_DIR)/applix \ $(MAGIC_FRAGMENT_DIR)/apt \ $(MAGIC_FRAGMENT_DIR)/archive \ $(MAGIC_FRAGMENT_DIR)/aria \ $(MAGIC_FRAGMENT_DIR)/arm \ $(MAGIC_FRAGMENT_DIR)/asf \ $(MAGIC_FRAGMENT_DIR)/assembler \ $(MAGIC_FRAGMENT_DIR)/asterix \ $(MAGIC_FRAGMENT_DIR)/att3b \ $(MAGIC_FRAGMENT_DIR)/audio \ $(MAGIC_FRAGMENT_DIR)/avm \ $(MAGIC_FRAGMENT_DIR)/basis \ $(MAGIC_FRAGMENT_DIR)/beetle \ $(MAGIC_FRAGMENT_DIR)/ber \ $(MAGIC_FRAGMENT_DIR)/bflt \ $(MAGIC_FRAGMENT_DIR)/bhl \ $(MAGIC_FRAGMENT_DIR)/bioinformatics \ $(MAGIC_FRAGMENT_DIR)/biosig \ $(MAGIC_FRAGMENT_DIR)/blackberry \ $(MAGIC_FRAGMENT_DIR)/blcr \ $(MAGIC_FRAGMENT_DIR)/blender \ $(MAGIC_FRAGMENT_DIR)/blit \ $(MAGIC_FRAGMENT_DIR)/bm \ $(MAGIC_FRAGMENT_DIR)/bout \ $(MAGIC_FRAGMENT_DIR)/bsdi \ $(MAGIC_FRAGMENT_DIR)/bsi \ $(MAGIC_FRAGMENT_DIR)/btsnoop \ $(MAGIC_FRAGMENT_DIR)/burp \ $(MAGIC_FRAGMENT_DIR)/bytecode \ $(MAGIC_FRAGMENT_DIR)/c-lang \ $(MAGIC_FRAGMENT_DIR)/c64 \ $(MAGIC_FRAGMENT_DIR)/cad \ $(MAGIC_FRAGMENT_DIR)/cafebabe \ $(MAGIC_FRAGMENT_DIR)/cbor \ $(MAGIC_FRAGMENT_DIR)/ccf \ $(MAGIC_FRAGMENT_DIR)/cddb \ $(MAGIC_FRAGMENT_DIR)/chord \ $(MAGIC_FRAGMENT_DIR)/cisco \ $(MAGIC_FRAGMENT_DIR)/citrus \ $(MAGIC_FRAGMENT_DIR)/clarion \ $(MAGIC_FRAGMENT_DIR)/claris \ $(MAGIC_FRAGMENT_DIR)/clipper \ $(MAGIC_FRAGMENT_DIR)/clojure \ $(MAGIC_FRAGMENT_DIR)/coff \ $(MAGIC_FRAGMENT_DIR)/commands \ $(MAGIC_FRAGMENT_DIR)/communications \ $(MAGIC_FRAGMENT_DIR)/compress \ $(MAGIC_FRAGMENT_DIR)/console \ $(MAGIC_FRAGMENT_DIR)/convex \ $(MAGIC_FRAGMENT_DIR)/coverage \ $(MAGIC_FRAGMENT_DIR)/cracklib \ $(MAGIC_FRAGMENT_DIR)/crypto \ $(MAGIC_FRAGMENT_DIR)/ctags \ $(MAGIC_FRAGMENT_DIR)/ctf \ $(MAGIC_FRAGMENT_DIR)/cubemap \ $(MAGIC_FRAGMENT_DIR)/cups \ $(MAGIC_FRAGMENT_DIR)/dact \ $(MAGIC_FRAGMENT_DIR)/database \ $(MAGIC_FRAGMENT_DIR)/dataone \ $(MAGIC_FRAGMENT_DIR)/dbpf \ $(MAGIC_FRAGMENT_DIR)/der \ $(MAGIC_FRAGMENT_DIR)/diamond \ $(MAGIC_FRAGMENT_DIR)/dif \ $(MAGIC_FRAGMENT_DIR)/diff \ $(MAGIC_FRAGMENT_DIR)/digital \ $(MAGIC_FRAGMENT_DIR)/dolby \ $(MAGIC_FRAGMENT_DIR)/dump \ $(MAGIC_FRAGMENT_DIR)/dwarfs \ $(MAGIC_FRAGMENT_DIR)/dyadic \ $(MAGIC_FRAGMENT_DIR)/ebml \ $(MAGIC_FRAGMENT_DIR)/edid \ $(MAGIC_FRAGMENT_DIR)/editors \ $(MAGIC_FRAGMENT_DIR)/efi \ $(MAGIC_FRAGMENT_DIR)/elf \ $(MAGIC_FRAGMENT_DIR)/encore \ $(MAGIC_FRAGMENT_DIR)/epoc \ $(MAGIC_FRAGMENT_DIR)/erlang \ $(MAGIC_FRAGMENT_DIR)/espressif \ $(MAGIC_FRAGMENT_DIR)/esri \ $(MAGIC_FRAGMENT_DIR)/fcs \ $(MAGIC_FRAGMENT_DIR)/filesystems \ $(MAGIC_FRAGMENT_DIR)/finger \ $(MAGIC_FRAGMENT_DIR)/firmware \ $(MAGIC_FRAGMENT_DIR)/flash \ $(MAGIC_FRAGMENT_DIR)/flif \ $(MAGIC_FRAGMENT_DIR)/fonts \ $(MAGIC_FRAGMENT_DIR)/forth \ $(MAGIC_FRAGMENT_DIR)/fortran \ $(MAGIC_FRAGMENT_DIR)/frame \ $(MAGIC_FRAGMENT_DIR)/freebsd \ $(MAGIC_FRAGMENT_DIR)/fsav \ $(MAGIC_FRAGMENT_DIR)/fusecompress \ $(MAGIC_FRAGMENT_DIR)/games \ $(MAGIC_FRAGMENT_DIR)/gcc \ $(MAGIC_FRAGMENT_DIR)/gconv \ $(MAGIC_FRAGMENT_DIR)/gentoo \ $(MAGIC_FRAGMENT_DIR)/geo \ $(MAGIC_FRAGMENT_DIR)/geos \ $(MAGIC_FRAGMENT_DIR)/gimp \ $(MAGIC_FRAGMENT_DIR)/git \ $(MAGIC_FRAGMENT_DIR)/glibc \ $(MAGIC_FRAGMENT_DIR)/gnome \ $(MAGIC_FRAGMENT_DIR)/gnu \ $(MAGIC_FRAGMENT_DIR)/gnumeric \ $(MAGIC_FRAGMENT_DIR)/gpt \ $(MAGIC_FRAGMENT_DIR)/gpu \ $(MAGIC_FRAGMENT_DIR)/grace \ $(MAGIC_FRAGMENT_DIR)/graphviz \ $(MAGIC_FRAGMENT_DIR)/gringotts \ $(MAGIC_FRAGMENT_DIR)/hardware \ $(MAGIC_FRAGMENT_DIR)/hitachi-sh \ $(MAGIC_FRAGMENT_DIR)/hp \ $(MAGIC_FRAGMENT_DIR)/human68k \ $(MAGIC_FRAGMENT_DIR)/ibm370 \ $(MAGIC_FRAGMENT_DIR)/ibm6000 \ $(MAGIC_FRAGMENT_DIR)/icc \ $(MAGIC_FRAGMENT_DIR)/iff \ $(MAGIC_FRAGMENT_DIR)/images \ $(MAGIC_FRAGMENT_DIR)/inform \ $(MAGIC_FRAGMENT_DIR)/intel \ $(MAGIC_FRAGMENT_DIR)/interleaf \ $(MAGIC_FRAGMENT_DIR)/island \ $(MAGIC_FRAGMENT_DIR)/ispell \ $(MAGIC_FRAGMENT_DIR)/isz \ $(MAGIC_FRAGMENT_DIR)/java \ $(MAGIC_FRAGMENT_DIR)/javascript \ $(MAGIC_FRAGMENT_DIR)/jpeg \ $(MAGIC_FRAGMENT_DIR)/karma \ $(MAGIC_FRAGMENT_DIR)/kde \ $(MAGIC_FRAGMENT_DIR)/keepass \ $(MAGIC_FRAGMENT_DIR)/kerberos \ $(MAGIC_FRAGMENT_DIR)/keyman \ $(MAGIC_FRAGMENT_DIR)/kicad \ $(MAGIC_FRAGMENT_DIR)/kml \ $(MAGIC_FRAGMENT_DIR)/lammps \ $(MAGIC_FRAGMENT_DIR)/lauterbach \ $(MAGIC_FRAGMENT_DIR)/lecter \ $(MAGIC_FRAGMENT_DIR)/lex \ $(MAGIC_FRAGMENT_DIR)/lif \ $(MAGIC_FRAGMENT_DIR)/linux \ $(MAGIC_FRAGMENT_DIR)/lisp \ $(MAGIC_FRAGMENT_DIR)/llvm \ $(MAGIC_FRAGMENT_DIR)/locoscript \ $(MAGIC_FRAGMENT_DIR)/lua \ $(MAGIC_FRAGMENT_DIR)/luks \ $(MAGIC_FRAGMENT_DIR)/m4 \ $(MAGIC_FRAGMENT_DIR)/mach \ $(MAGIC_FRAGMENT_DIR)/macintosh \ $(MAGIC_FRAGMENT_DIR)/macos \ $(MAGIC_FRAGMENT_DIR)/magic \ $(MAGIC_FRAGMENT_DIR)/mail.news \ $(MAGIC_FRAGMENT_DIR)/make \ $(MAGIC_FRAGMENT_DIR)/map \ $(MAGIC_FRAGMENT_DIR)/maple \ $(MAGIC_FRAGMENT_DIR)/marc21 \ $(MAGIC_FRAGMENT_DIR)/mathcad \ $(MAGIC_FRAGMENT_DIR)/mathematica \ $(MAGIC_FRAGMENT_DIR)/matroska \ $(MAGIC_FRAGMENT_DIR)/mcrypt \ $(MAGIC_FRAGMENT_DIR)/measure \ $(MAGIC_FRAGMENT_DIR)/mercurial \ $(MAGIC_FRAGMENT_DIR)/metastore \ $(MAGIC_FRAGMENT_DIR)/meteorological \ $(MAGIC_FRAGMENT_DIR)/microfocus \ $(MAGIC_FRAGMENT_DIR)/mime \ $(MAGIC_FRAGMENT_DIR)/mips \ $(MAGIC_FRAGMENT_DIR)/mirage \ $(MAGIC_FRAGMENT_DIR)/misctools \ $(MAGIC_FRAGMENT_DIR)/mkid \ $(MAGIC_FRAGMENT_DIR)/mlssa \ $(MAGIC_FRAGMENT_DIR)/mmdf \ $(MAGIC_FRAGMENT_DIR)/modem \ $(MAGIC_FRAGMENT_DIR)/modulefile \ $(MAGIC_FRAGMENT_DIR)/motorola \ $(MAGIC_FRAGMENT_DIR)/mozilla \ $(MAGIC_FRAGMENT_DIR)/msdos \ $(MAGIC_FRAGMENT_DIR)/msooxml \ $(MAGIC_FRAGMENT_DIR)/msvc \ $(MAGIC_FRAGMENT_DIR)/msx \ $(MAGIC_FRAGMENT_DIR)/mup \ $(MAGIC_FRAGMENT_DIR)/music \ $(MAGIC_FRAGMENT_DIR)/nasa \ $(MAGIC_FRAGMENT_DIR)/natinst \ $(MAGIC_FRAGMENT_DIR)/ncr \ $(MAGIC_FRAGMENT_DIR)/netbsd \ $(MAGIC_FRAGMENT_DIR)/netscape \ $(MAGIC_FRAGMENT_DIR)/netware \ $(MAGIC_FRAGMENT_DIR)/news \ $(MAGIC_FRAGMENT_DIR)/nifty \ $(MAGIC_FRAGMENT_DIR)/nim-lang \ $(MAGIC_FRAGMENT_DIR)/nitpicker \ $(MAGIC_FRAGMENT_DIR)/numpy \ $(MAGIC_FRAGMENT_DIR)/oasis \ $(MAGIC_FRAGMENT_DIR)/ocaml \ $(MAGIC_FRAGMENT_DIR)/octave \ $(MAGIC_FRAGMENT_DIR)/ole2compounddocs \ $(MAGIC_FRAGMENT_DIR)/olf \ $(MAGIC_FRAGMENT_DIR)/openfst \ $(MAGIC_FRAGMENT_DIR)/opentimestamps \ $(MAGIC_FRAGMENT_DIR)/oric \ $(MAGIC_FRAGMENT_DIR)/os2 \ $(MAGIC_FRAGMENT_DIR)/os400 \ $(MAGIC_FRAGMENT_DIR)/os9 \ $(MAGIC_FRAGMENT_DIR)/osf1 \ $(MAGIC_FRAGMENT_DIR)/pack \ $(MAGIC_FRAGMENT_DIR)/palm \ $(MAGIC_FRAGMENT_DIR)/parix \ $(MAGIC_FRAGMENT_DIR)/parrot \ $(MAGIC_FRAGMENT_DIR)/pascal \ $(MAGIC_FRAGMENT_DIR)/pbf \ $(MAGIC_FRAGMENT_DIR)/pbm \ $(MAGIC_FRAGMENT_DIR)/pc98 \ $(MAGIC_FRAGMENT_DIR)/pci_ids \ $(MAGIC_FRAGMENT_DIR)/pcjr \ $(MAGIC_FRAGMENT_DIR)/pdf \ $(MAGIC_FRAGMENT_DIR)/pdp \ $(MAGIC_FRAGMENT_DIR)/perl \ $(MAGIC_FRAGMENT_DIR)/pgf \ $(MAGIC_FRAGMENT_DIR)/pgp \ $(MAGIC_FRAGMENT_DIR)/pgp-binary-keys \ $(MAGIC_FRAGMENT_DIR)/pkgadd \ $(MAGIC_FRAGMENT_DIR)/plan9 \ $(MAGIC_FRAGMENT_DIR)/playdate \ $(MAGIC_FRAGMENT_DIR)/plus5 \ $(MAGIC_FRAGMENT_DIR)/pmem \ $(MAGIC_FRAGMENT_DIR)/polyml \ $(MAGIC_FRAGMENT_DIR)/printer \ $(MAGIC_FRAGMENT_DIR)/project \ $(MAGIC_FRAGMENT_DIR)/psdbms \ $(MAGIC_FRAGMENT_DIR)/psl \ $(MAGIC_FRAGMENT_DIR)/pulsar \ $(MAGIC_FRAGMENT_DIR)/puzzle \ $(MAGIC_FRAGMENT_DIR)/pwsafe \ $(MAGIC_FRAGMENT_DIR)/pyramid \ $(MAGIC_FRAGMENT_DIR)/python \ $(MAGIC_FRAGMENT_DIR)/qt \ $(MAGIC_FRAGMENT_DIR)/revision \ $(MAGIC_FRAGMENT_DIR)/ringdove \ $(MAGIC_FRAGMENT_DIR)/riff \ $(MAGIC_FRAGMENT_DIR)/rpi \ $(MAGIC_FRAGMENT_DIR)/rpm \ $(MAGIC_FRAGMENT_DIR)/rpmsg \ $(MAGIC_FRAGMENT_DIR)/rtf \ $(MAGIC_FRAGMENT_DIR)/rst \ $(MAGIC_FRAGMENT_DIR)/ruby \ $(MAGIC_FRAGMENT_DIR)/rust \ $(MAGIC_FRAGMENT_DIR)/sc \ $(MAGIC_FRAGMENT_DIR)/sccs \ $(MAGIC_FRAGMENT_DIR)/scientific \ $(MAGIC_FRAGMENT_DIR)/securitycerts \ $(MAGIC_FRAGMENT_DIR)/selinux \ $(MAGIC_FRAGMENT_DIR)/sendmail \ $(MAGIC_FRAGMENT_DIR)/sequent \ $(MAGIC_FRAGMENT_DIR)/sereal \ $(MAGIC_FRAGMENT_DIR)/sgi \ $(MAGIC_FRAGMENT_DIR)/sgml \ $(MAGIC_FRAGMENT_DIR)/sharc \ $(MAGIC_FRAGMENT_DIR)/sinclair \ $(MAGIC_FRAGMENT_DIR)/sisu \ $(MAGIC_FRAGMENT_DIR)/sketch \ $(MAGIC_FRAGMENT_DIR)/smalltalk \ $(MAGIC_FRAGMENT_DIR)/smile \ $(MAGIC_FRAGMENT_DIR)/sniffer \ $(MAGIC_FRAGMENT_DIR)/softquad \ $(MAGIC_FRAGMENT_DIR)/sosi \ $(MAGIC_FRAGMENT_DIR)/spec \ $(MAGIC_FRAGMENT_DIR)/spectrum \ $(MAGIC_FRAGMENT_DIR)/sql \ $(MAGIC_FRAGMENT_DIR)/ssh \ $(MAGIC_FRAGMENT_DIR)/ssl \ $(MAGIC_FRAGMENT_DIR)/statistics \ $(MAGIC_FRAGMENT_DIR)/subtitle \ $(MAGIC_FRAGMENT_DIR)/sun \ $(MAGIC_FRAGMENT_DIR)/svf \ $(MAGIC_FRAGMENT_DIR)/sylk \ $(MAGIC_FRAGMENT_DIR)/symbos \ $(MAGIC_FRAGMENT_DIR)/sysex \ $(MAGIC_FRAGMENT_DIR)/tcl \ $(MAGIC_FRAGMENT_DIR)/teapot \ $(MAGIC_FRAGMENT_DIR)/terminfo \ $(MAGIC_FRAGMENT_DIR)/tex \ $(MAGIC_FRAGMENT_DIR)/tgif \ $(MAGIC_FRAGMENT_DIR)/ti-8x \ $(MAGIC_FRAGMENT_DIR)/timezone \ $(MAGIC_FRAGMENT_DIR)/tplink \ $(MAGIC_FRAGMENT_DIR)/troff \ $(MAGIC_FRAGMENT_DIR)/tuxedo \ $(MAGIC_FRAGMENT_DIR)/typeset \ $(MAGIC_FRAGMENT_DIR)/uf2 \ $(MAGIC_FRAGMENT_DIR)/unicode \ $(MAGIC_FRAGMENT_DIR)/unisig \ $(MAGIC_FRAGMENT_DIR)/unknown \ $(MAGIC_FRAGMENT_DIR)/usd \ $(MAGIC_FRAGMENT_DIR)/uterus \ $(MAGIC_FRAGMENT_DIR)/uuencode \ $(MAGIC_FRAGMENT_DIR)/uxn \ $(MAGIC_FRAGMENT_DIR)/vacuum-cleaner \ $(MAGIC_FRAGMENT_DIR)/varied.out \ $(MAGIC_FRAGMENT_DIR)/varied.script \ $(MAGIC_FRAGMENT_DIR)/vax \ $(MAGIC_FRAGMENT_DIR)/vicar \ $(MAGIC_FRAGMENT_DIR)/virtual \ $(MAGIC_FRAGMENT_DIR)/virtutech \ $(MAGIC_FRAGMENT_DIR)/visx \ $(MAGIC_FRAGMENT_DIR)/vms \ $(MAGIC_FRAGMENT_DIR)/vmware \ $(MAGIC_FRAGMENT_DIR)/vorbis \ $(MAGIC_FRAGMENT_DIR)/vxl \ $(MAGIC_FRAGMENT_DIR)/warc \ $(MAGIC_FRAGMENT_DIR)/web \ $(MAGIC_FRAGMENT_DIR)/weak \ $(MAGIC_FRAGMENT_DIR)/webassembly \ $(MAGIC_FRAGMENT_DIR)/windows \ $(MAGIC_FRAGMENT_DIR)/wireless \ $(MAGIC_FRAGMENT_DIR)/wordprocessors \ $(MAGIC_FRAGMENT_DIR)/wsdl \ $(MAGIC_FRAGMENT_DIR)/x68000 \ $(MAGIC_FRAGMENT_DIR)/xdelta \ $(MAGIC_FRAGMENT_DIR)/xenix \ $(MAGIC_FRAGMENT_DIR)/xilinx \ $(MAGIC_FRAGMENT_DIR)/xo65 \ $(MAGIC_FRAGMENT_DIR)/xwindows \ $(MAGIC_FRAGMENT_DIR)/yara \ $(MAGIC_FRAGMENT_DIR)/zfs \ $(MAGIC_FRAGMENT_DIR)/zilog \ $(MAGIC_FRAGMENT_DIR)/zip \ $(MAGIC_FRAGMENT_DIR)/zyxel EXTRA_DIST = \ $(MAGIC_DIR)/scripts/create_filemagic_flac \ $(MAGIC_FRAGMENTS) MAGIC = magic.mgc CLEANFILES = ${MAGIC} $(MAGIC_FRAGMENT_DIR)/Localstuff # FIXME: Build file natively as well so that it can be used to compile # the target's magic file; for now we bail if the local version does not match if IS_CROSS_COMPILE FILE_COMPILE = file${EXEEXT} FILE_COMPILE_DEP = else FILE_COMPILE = $(top_builddir)/src/file${EXEEXT} FILE_COMPILE_DEP = $(FILE_COMPILE) endif ${MAGIC}: $(MAGIC_FRAGMENTS) $(FILE_COMPILE_DEP) @rm -fr magic @mkdir magic && cp -p $(MAGIC_FRAGMENTS) magic @(if expr "${FILE_COMPILE}" : '.*/.*' > /dev/null; then \ echo "Using ${FILE_COMPILE} to generate ${MAGIC}" > /dev/null; \ else \ v=$$(${FILE_COMPILE} --version | sed -e s/file-// -e q); \ if [ "$$v" != "${PACKAGE_VERSION}" ]; then \ echo "Cannot use the installed version of file ($$v) to"; \ echo "cross-compile file ${PACKAGE_VERSION}"; \ echo "Please install file ${PACKAGE_VERSION} locally first"; \ exit 1; \ fi; \ fi) $(FILE_COMPILE) -C -m magic @rm -fr magic file-5.46/magic/Makefile.in000664 023540 023540 00000063557 14721422722 017301 0ustar00christoschristos000000 000000 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = magic ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgdatadir = @pkgdatadir@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WARNINGS = @WARNINGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fsect = @fsect@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # # $File: Makefile.am,v 1.192 2024/10/02 01:45:32 christos Exp $ # MAGIC_FRAGMENT_BASE = Magdir MAGIC_DIR = $(top_srcdir)/magic MAGIC_FRAGMENT_DIR = $(MAGIC_DIR)/$(MAGIC_FRAGMENT_BASE) pkgdata_DATA = magic.mgc MAGIC_FRAGMENTS = \ $(MAGIC_DIR)/Header \ $(MAGIC_DIR)/Localstuff \ $(MAGIC_FRAGMENT_DIR)/acorn \ $(MAGIC_FRAGMENT_DIR)/adi \ $(MAGIC_FRAGMENT_DIR)/adventure \ $(MAGIC_FRAGMENT_DIR)/aes \ $(MAGIC_FRAGMENT_DIR)/algol68 \ $(MAGIC_FRAGMENT_DIR)/allegro \ $(MAGIC_FRAGMENT_DIR)/alliant \ $(MAGIC_FRAGMENT_DIR)/amanda \ $(MAGIC_FRAGMENT_DIR)/amigaos \ $(MAGIC_FRAGMENT_DIR)/android \ $(MAGIC_FRAGMENT_DIR)/animation \ $(MAGIC_FRAGMENT_DIR)/aout \ $(MAGIC_FRAGMENT_DIR)/apache \ $(MAGIC_FRAGMENT_DIR)/apl \ $(MAGIC_FRAGMENT_DIR)/apple \ $(MAGIC_FRAGMENT_DIR)/application \ $(MAGIC_FRAGMENT_DIR)/applix \ $(MAGIC_FRAGMENT_DIR)/apt \ $(MAGIC_FRAGMENT_DIR)/archive \ $(MAGIC_FRAGMENT_DIR)/aria \ $(MAGIC_FRAGMENT_DIR)/arm \ $(MAGIC_FRAGMENT_DIR)/asf \ $(MAGIC_FRAGMENT_DIR)/assembler \ $(MAGIC_FRAGMENT_DIR)/asterix \ $(MAGIC_FRAGMENT_DIR)/att3b \ $(MAGIC_FRAGMENT_DIR)/audio \ $(MAGIC_FRAGMENT_DIR)/avm \ $(MAGIC_FRAGMENT_DIR)/basis \ $(MAGIC_FRAGMENT_DIR)/beetle \ $(MAGIC_FRAGMENT_DIR)/ber \ $(MAGIC_FRAGMENT_DIR)/bflt \ $(MAGIC_FRAGMENT_DIR)/bhl \ $(MAGIC_FRAGMENT_DIR)/bioinformatics \ $(MAGIC_FRAGMENT_DIR)/biosig \ $(MAGIC_FRAGMENT_DIR)/blackberry \ $(MAGIC_FRAGMENT_DIR)/blcr \ $(MAGIC_FRAGMENT_DIR)/blender \ $(MAGIC_FRAGMENT_DIR)/blit \ $(MAGIC_FRAGMENT_DIR)/bm \ $(MAGIC_FRAGMENT_DIR)/bout \ $(MAGIC_FRAGMENT_DIR)/bsdi \ $(MAGIC_FRAGMENT_DIR)/bsi \ $(MAGIC_FRAGMENT_DIR)/btsnoop \ $(MAGIC_FRAGMENT_DIR)/burp \ $(MAGIC_FRAGMENT_DIR)/bytecode \ $(MAGIC_FRAGMENT_DIR)/c-lang \ $(MAGIC_FRAGMENT_DIR)/c64 \ $(MAGIC_FRAGMENT_DIR)/cad \ $(MAGIC_FRAGMENT_DIR)/cafebabe \ $(MAGIC_FRAGMENT_DIR)/cbor \ $(MAGIC_FRAGMENT_DIR)/ccf \ $(MAGIC_FRAGMENT_DIR)/cddb \ $(MAGIC_FRAGMENT_DIR)/chord \ $(MAGIC_FRAGMENT_DIR)/cisco \ $(MAGIC_FRAGMENT_DIR)/citrus \ $(MAGIC_FRAGMENT_DIR)/clarion \ $(MAGIC_FRAGMENT_DIR)/claris \ $(MAGIC_FRAGMENT_DIR)/clipper \ $(MAGIC_FRAGMENT_DIR)/clojure \ $(MAGIC_FRAGMENT_DIR)/coff \ $(MAGIC_FRAGMENT_DIR)/commands \ $(MAGIC_FRAGMENT_DIR)/communications \ $(MAGIC_FRAGMENT_DIR)/compress \ $(MAGIC_FRAGMENT_DIR)/console \ $(MAGIC_FRAGMENT_DIR)/convex \ $(MAGIC_FRAGMENT_DIR)/coverage \ $(MAGIC_FRAGMENT_DIR)/cracklib \ $(MAGIC_FRAGMENT_DIR)/crypto \ $(MAGIC_FRAGMENT_DIR)/ctags \ $(MAGIC_FRAGMENT_DIR)/ctf \ $(MAGIC_FRAGMENT_DIR)/cubemap \ $(MAGIC_FRAGMENT_DIR)/cups \ $(MAGIC_FRAGMENT_DIR)/dact \ $(MAGIC_FRAGMENT_DIR)/database \ $(MAGIC_FRAGMENT_DIR)/dataone \ $(MAGIC_FRAGMENT_DIR)/dbpf \ $(MAGIC_FRAGMENT_DIR)/der \ $(MAGIC_FRAGMENT_DIR)/diamond \ $(MAGIC_FRAGMENT_DIR)/dif \ $(MAGIC_FRAGMENT_DIR)/diff \ $(MAGIC_FRAGMENT_DIR)/digital \ $(MAGIC_FRAGMENT_DIR)/dolby \ $(MAGIC_FRAGMENT_DIR)/dump \ $(MAGIC_FRAGMENT_DIR)/dwarfs \ $(MAGIC_FRAGMENT_DIR)/dyadic \ $(MAGIC_FRAGMENT_DIR)/ebml \ $(MAGIC_FRAGMENT_DIR)/edid \ $(MAGIC_FRAGMENT_DIR)/editors \ $(MAGIC_FRAGMENT_DIR)/efi \ $(MAGIC_FRAGMENT_DIR)/elf \ $(MAGIC_FRAGMENT_DIR)/encore \ $(MAGIC_FRAGMENT_DIR)/epoc \ $(MAGIC_FRAGMENT_DIR)/erlang \ $(MAGIC_FRAGMENT_DIR)/espressif \ $(MAGIC_FRAGMENT_DIR)/esri \ $(MAGIC_FRAGMENT_DIR)/fcs \ $(MAGIC_FRAGMENT_DIR)/filesystems \ $(MAGIC_FRAGMENT_DIR)/finger \ $(MAGIC_FRAGMENT_DIR)/firmware \ $(MAGIC_FRAGMENT_DIR)/flash \ $(MAGIC_FRAGMENT_DIR)/flif \ $(MAGIC_FRAGMENT_DIR)/fonts \ $(MAGIC_FRAGMENT_DIR)/forth \ $(MAGIC_FRAGMENT_DIR)/fortran \ $(MAGIC_FRAGMENT_DIR)/frame \ $(MAGIC_FRAGMENT_DIR)/freebsd \ $(MAGIC_FRAGMENT_DIR)/fsav \ $(MAGIC_FRAGMENT_DIR)/fusecompress \ $(MAGIC_FRAGMENT_DIR)/games \ $(MAGIC_FRAGMENT_DIR)/gcc \ $(MAGIC_FRAGMENT_DIR)/gconv \ $(MAGIC_FRAGMENT_DIR)/gentoo \ $(MAGIC_FRAGMENT_DIR)/geo \ $(MAGIC_FRAGMENT_DIR)/geos \ $(MAGIC_FRAGMENT_DIR)/gimp \ $(MAGIC_FRAGMENT_DIR)/git \ $(MAGIC_FRAGMENT_DIR)/glibc \ $(MAGIC_FRAGMENT_DIR)/gnome \ $(MAGIC_FRAGMENT_DIR)/gnu \ $(MAGIC_FRAGMENT_DIR)/gnumeric \ $(MAGIC_FRAGMENT_DIR)/gpt \ $(MAGIC_FRAGMENT_DIR)/gpu \ $(MAGIC_FRAGMENT_DIR)/grace \ $(MAGIC_FRAGMENT_DIR)/graphviz \ $(MAGIC_FRAGMENT_DIR)/gringotts \ $(MAGIC_FRAGMENT_DIR)/hardware \ $(MAGIC_FRAGMENT_DIR)/hitachi-sh \ $(MAGIC_FRAGMENT_DIR)/hp \ $(MAGIC_FRAGMENT_DIR)/human68k \ $(MAGIC_FRAGMENT_DIR)/ibm370 \ $(MAGIC_FRAGMENT_DIR)/ibm6000 \ $(MAGIC_FRAGMENT_DIR)/icc \ $(MAGIC_FRAGMENT_DIR)/iff \ $(MAGIC_FRAGMENT_DIR)/images \ $(MAGIC_FRAGMENT_DIR)/inform \ $(MAGIC_FRAGMENT_DIR)/intel \ $(MAGIC_FRAGMENT_DIR)/interleaf \ $(MAGIC_FRAGMENT_DIR)/island \ $(MAGIC_FRAGMENT_DIR)/ispell \ $(MAGIC_FRAGMENT_DIR)/isz \ $(MAGIC_FRAGMENT_DIR)/java \ $(MAGIC_FRAGMENT_DIR)/javascript \ $(MAGIC_FRAGMENT_DIR)/jpeg \ $(MAGIC_FRAGMENT_DIR)/karma \ $(MAGIC_FRAGMENT_DIR)/kde \ $(MAGIC_FRAGMENT_DIR)/keepass \ $(MAGIC_FRAGMENT_DIR)/kerberos \ $(MAGIC_FRAGMENT_DIR)/keyman \ $(MAGIC_FRAGMENT_DIR)/kicad \ $(MAGIC_FRAGMENT_DIR)/kml \ $(MAGIC_FRAGMENT_DIR)/lammps \ $(MAGIC_FRAGMENT_DIR)/lauterbach \ $(MAGIC_FRAGMENT_DIR)/lecter \ $(MAGIC_FRAGMENT_DIR)/lex \ $(MAGIC_FRAGMENT_DIR)/lif \ $(MAGIC_FRAGMENT_DIR)/linux \ $(MAGIC_FRAGMENT_DIR)/lisp \ $(MAGIC_FRAGMENT_DIR)/llvm \ $(MAGIC_FRAGMENT_DIR)/locoscript \ $(MAGIC_FRAGMENT_DIR)/lua \ $(MAGIC_FRAGMENT_DIR)/luks \ $(MAGIC_FRAGMENT_DIR)/m4 \ $(MAGIC_FRAGMENT_DIR)/mach \ $(MAGIC_FRAGMENT_DIR)/macintosh \ $(MAGIC_FRAGMENT_DIR)/macos \ $(MAGIC_FRAGMENT_DIR)/magic \ $(MAGIC_FRAGMENT_DIR)/mail.news \ $(MAGIC_FRAGMENT_DIR)/make \ $(MAGIC_FRAGMENT_DIR)/map \ $(MAGIC_FRAGMENT_DIR)/maple \ $(MAGIC_FRAGMENT_DIR)/marc21 \ $(MAGIC_FRAGMENT_DIR)/mathcad \ $(MAGIC_FRAGMENT_DIR)/mathematica \ $(MAGIC_FRAGMENT_DIR)/matroska \ $(MAGIC_FRAGMENT_DIR)/mcrypt \ $(MAGIC_FRAGMENT_DIR)/measure \ $(MAGIC_FRAGMENT_DIR)/mercurial \ $(MAGIC_FRAGMENT_DIR)/metastore \ $(MAGIC_FRAGMENT_DIR)/meteorological \ $(MAGIC_FRAGMENT_DIR)/microfocus \ $(MAGIC_FRAGMENT_DIR)/mime \ $(MAGIC_FRAGMENT_DIR)/mips \ $(MAGIC_FRAGMENT_DIR)/mirage \ $(MAGIC_FRAGMENT_DIR)/misctools \ $(MAGIC_FRAGMENT_DIR)/mkid \ $(MAGIC_FRAGMENT_DIR)/mlssa \ $(MAGIC_FRAGMENT_DIR)/mmdf \ $(MAGIC_FRAGMENT_DIR)/modem \ $(MAGIC_FRAGMENT_DIR)/modulefile \ $(MAGIC_FRAGMENT_DIR)/motorola \ $(MAGIC_FRAGMENT_DIR)/mozilla \ $(MAGIC_FRAGMENT_DIR)/msdos \ $(MAGIC_FRAGMENT_DIR)/msooxml \ $(MAGIC_FRAGMENT_DIR)/msvc \ $(MAGIC_FRAGMENT_DIR)/msx \ $(MAGIC_FRAGMENT_DIR)/mup \ $(MAGIC_FRAGMENT_DIR)/music \ $(MAGIC_FRAGMENT_DIR)/nasa \ $(MAGIC_FRAGMENT_DIR)/natinst \ $(MAGIC_FRAGMENT_DIR)/ncr \ $(MAGIC_FRAGMENT_DIR)/netbsd \ $(MAGIC_FRAGMENT_DIR)/netscape \ $(MAGIC_FRAGMENT_DIR)/netware \ $(MAGIC_FRAGMENT_DIR)/news \ $(MAGIC_FRAGMENT_DIR)/nifty \ $(MAGIC_FRAGMENT_DIR)/nim-lang \ $(MAGIC_FRAGMENT_DIR)/nitpicker \ $(MAGIC_FRAGMENT_DIR)/numpy \ $(MAGIC_FRAGMENT_DIR)/oasis \ $(MAGIC_FRAGMENT_DIR)/ocaml \ $(MAGIC_FRAGMENT_DIR)/octave \ $(MAGIC_FRAGMENT_DIR)/ole2compounddocs \ $(MAGIC_FRAGMENT_DIR)/olf \ $(MAGIC_FRAGMENT_DIR)/openfst \ $(MAGIC_FRAGMENT_DIR)/opentimestamps \ $(MAGIC_FRAGMENT_DIR)/oric \ $(MAGIC_FRAGMENT_DIR)/os2 \ $(MAGIC_FRAGMENT_DIR)/os400 \ $(MAGIC_FRAGMENT_DIR)/os9 \ $(MAGIC_FRAGMENT_DIR)/osf1 \ $(MAGIC_FRAGMENT_DIR)/pack \ $(MAGIC_FRAGMENT_DIR)/palm \ $(MAGIC_FRAGMENT_DIR)/parix \ $(MAGIC_FRAGMENT_DIR)/parrot \ $(MAGIC_FRAGMENT_DIR)/pascal \ $(MAGIC_FRAGMENT_DIR)/pbf \ $(MAGIC_FRAGMENT_DIR)/pbm \ $(MAGIC_FRAGMENT_DIR)/pc98 \ $(MAGIC_FRAGMENT_DIR)/pci_ids \ $(MAGIC_FRAGMENT_DIR)/pcjr \ $(MAGIC_FRAGMENT_DIR)/pdf \ $(MAGIC_FRAGMENT_DIR)/pdp \ $(MAGIC_FRAGMENT_DIR)/perl \ $(MAGIC_FRAGMENT_DIR)/pgf \ $(MAGIC_FRAGMENT_DIR)/pgp \ $(MAGIC_FRAGMENT_DIR)/pgp-binary-keys \ $(MAGIC_FRAGMENT_DIR)/pkgadd \ $(MAGIC_FRAGMENT_DIR)/plan9 \ $(MAGIC_FRAGMENT_DIR)/playdate \ $(MAGIC_FRAGMENT_DIR)/plus5 \ $(MAGIC_FRAGMENT_DIR)/pmem \ $(MAGIC_FRAGMENT_DIR)/polyml \ $(MAGIC_FRAGMENT_DIR)/printer \ $(MAGIC_FRAGMENT_DIR)/project \ $(MAGIC_FRAGMENT_DIR)/psdbms \ $(MAGIC_FRAGMENT_DIR)/psl \ $(MAGIC_FRAGMENT_DIR)/pulsar \ $(MAGIC_FRAGMENT_DIR)/puzzle \ $(MAGIC_FRAGMENT_DIR)/pwsafe \ $(MAGIC_FRAGMENT_DIR)/pyramid \ $(MAGIC_FRAGMENT_DIR)/python \ $(MAGIC_FRAGMENT_DIR)/qt \ $(MAGIC_FRAGMENT_DIR)/revision \ $(MAGIC_FRAGMENT_DIR)/ringdove \ $(MAGIC_FRAGMENT_DIR)/riff \ $(MAGIC_FRAGMENT_DIR)/rpi \ $(MAGIC_FRAGMENT_DIR)/rpm \ $(MAGIC_FRAGMENT_DIR)/rpmsg \ $(MAGIC_FRAGMENT_DIR)/rtf \ $(MAGIC_FRAGMENT_DIR)/rst \ $(MAGIC_FRAGMENT_DIR)/ruby \ $(MAGIC_FRAGMENT_DIR)/rust \ $(MAGIC_FRAGMENT_DIR)/sc \ $(MAGIC_FRAGMENT_DIR)/sccs \ $(MAGIC_FRAGMENT_DIR)/scientific \ $(MAGIC_FRAGMENT_DIR)/securitycerts \ $(MAGIC_FRAGMENT_DIR)/selinux \ $(MAGIC_FRAGMENT_DIR)/sendmail \ $(MAGIC_FRAGMENT_DIR)/sequent \ $(MAGIC_FRAGMENT_DIR)/sereal \ $(MAGIC_FRAGMENT_DIR)/sgi \ $(MAGIC_FRAGMENT_DIR)/sgml \ $(MAGIC_FRAGMENT_DIR)/sharc \ $(MAGIC_FRAGMENT_DIR)/sinclair \ $(MAGIC_FRAGMENT_DIR)/sisu \ $(MAGIC_FRAGMENT_DIR)/sketch \ $(MAGIC_FRAGMENT_DIR)/smalltalk \ $(MAGIC_FRAGMENT_DIR)/smile \ $(MAGIC_FRAGMENT_DIR)/sniffer \ $(MAGIC_FRAGMENT_DIR)/softquad \ $(MAGIC_FRAGMENT_DIR)/sosi \ $(MAGIC_FRAGMENT_DIR)/spec \ $(MAGIC_FRAGMENT_DIR)/spectrum \ $(MAGIC_FRAGMENT_DIR)/sql \ $(MAGIC_FRAGMENT_DIR)/ssh \ $(MAGIC_FRAGMENT_DIR)/ssl \ $(MAGIC_FRAGMENT_DIR)/statistics \ $(MAGIC_FRAGMENT_DIR)/subtitle \ $(MAGIC_FRAGMENT_DIR)/sun \ $(MAGIC_FRAGMENT_DIR)/svf \ $(MAGIC_FRAGMENT_DIR)/sylk \ $(MAGIC_FRAGMENT_DIR)/symbos \ $(MAGIC_FRAGMENT_DIR)/sysex \ $(MAGIC_FRAGMENT_DIR)/tcl \ $(MAGIC_FRAGMENT_DIR)/teapot \ $(MAGIC_FRAGMENT_DIR)/terminfo \ $(MAGIC_FRAGMENT_DIR)/tex \ $(MAGIC_FRAGMENT_DIR)/tgif \ $(MAGIC_FRAGMENT_DIR)/ti-8x \ $(MAGIC_FRAGMENT_DIR)/timezone \ $(MAGIC_FRAGMENT_DIR)/tplink \ $(MAGIC_FRAGMENT_DIR)/troff \ $(MAGIC_FRAGMENT_DIR)/tuxedo \ $(MAGIC_FRAGMENT_DIR)/typeset \ $(MAGIC_FRAGMENT_DIR)/uf2 \ $(MAGIC_FRAGMENT_DIR)/unicode \ $(MAGIC_FRAGMENT_DIR)/unisig \ $(MAGIC_FRAGMENT_DIR)/unknown \ $(MAGIC_FRAGMENT_DIR)/usd \ $(MAGIC_FRAGMENT_DIR)/uterus \ $(MAGIC_FRAGMENT_DIR)/uuencode \ $(MAGIC_FRAGMENT_DIR)/uxn \ $(MAGIC_FRAGMENT_DIR)/vacuum-cleaner \ $(MAGIC_FRAGMENT_DIR)/varied.out \ $(MAGIC_FRAGMENT_DIR)/varied.script \ $(MAGIC_FRAGMENT_DIR)/vax \ $(MAGIC_FRAGMENT_DIR)/vicar \ $(MAGIC_FRAGMENT_DIR)/virtual \ $(MAGIC_FRAGMENT_DIR)/virtutech \ $(MAGIC_FRAGMENT_DIR)/visx \ $(MAGIC_FRAGMENT_DIR)/vms \ $(MAGIC_FRAGMENT_DIR)/vmware \ $(MAGIC_FRAGMENT_DIR)/vorbis \ $(MAGIC_FRAGMENT_DIR)/vxl \ $(MAGIC_FRAGMENT_DIR)/warc \ $(MAGIC_FRAGMENT_DIR)/web \ $(MAGIC_FRAGMENT_DIR)/weak \ $(MAGIC_FRAGMENT_DIR)/webassembly \ $(MAGIC_FRAGMENT_DIR)/windows \ $(MAGIC_FRAGMENT_DIR)/wireless \ $(MAGIC_FRAGMENT_DIR)/wordprocessors \ $(MAGIC_FRAGMENT_DIR)/wsdl \ $(MAGIC_FRAGMENT_DIR)/x68000 \ $(MAGIC_FRAGMENT_DIR)/xdelta \ $(MAGIC_FRAGMENT_DIR)/xenix \ $(MAGIC_FRAGMENT_DIR)/xilinx \ $(MAGIC_FRAGMENT_DIR)/xo65 \ $(MAGIC_FRAGMENT_DIR)/xwindows \ $(MAGIC_FRAGMENT_DIR)/yara \ $(MAGIC_FRAGMENT_DIR)/zfs \ $(MAGIC_FRAGMENT_DIR)/zilog \ $(MAGIC_FRAGMENT_DIR)/zip \ $(MAGIC_FRAGMENT_DIR)/zyxel EXTRA_DIST = \ $(MAGIC_DIR)/scripts/create_filemagic_flac \ $(MAGIC_FRAGMENTS) MAGIC = magic.mgc CLEANFILES = ${MAGIC} $(MAGIC_FRAGMENT_DIR)/Localstuff @IS_CROSS_COMPILE_FALSE@FILE_COMPILE = $(top_builddir)/src/file${EXEEXT} # FIXME: Build file natively as well so that it can be used to compile # the target's magic file; for now we bail if the local version does not match @IS_CROSS_COMPILE_TRUE@FILE_COMPILE = file${EXEEXT} @IS_CROSS_COMPILE_FALSE@FILE_COMPILE_DEP = $(FILE_COMPILE) @IS_CROSS_COMPILE_TRUE@FILE_COMPILE_DEP = all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign magic/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign magic/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgdataDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-pkgdataDATA .PRECIOUS: Makefile ${MAGIC}: $(MAGIC_FRAGMENTS) $(FILE_COMPILE_DEP) @rm -fr magic @mkdir magic && cp -p $(MAGIC_FRAGMENTS) magic @(if expr "${FILE_COMPILE}" : '.*/.*' > /dev/null; then \ echo "Using ${FILE_COMPILE} to generate ${MAGIC}" > /dev/null; \ else \ v=$$(${FILE_COMPILE} --version | sed -e s/file-// -e q); \ if [ "$$v" != "${PACKAGE_VERSION}" ]; then \ echo "Cannot use the installed version of file ($$v) to"; \ echo "cross-compile file ${PACKAGE_VERSION}"; \ echo "Please install file ${PACKAGE_VERSION} locally first"; \ exit 1; \ fi; \ fi) $(FILE_COMPILE) -C -m magic @rm -fr magic # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: file-5.46/magic/Header000664 023540 023540 00000000366 14015050424 016324 0ustar00christoschristos000000 000000 # Magic data for file(1) command. # Format is described in magic(files), where: # files is 5 on V7 and BSD, 4 on SV, and ?? on SVID. # Don't edit this file, edit /etc/magic or send your magic improvements # to the maintainers, at file@astron.com file-5.46/magic/Localstuff000664 023540 023540 00000000501 14015050424 017225 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # Localstuff: file(1) magic for locally observed files # # $File: Localstuff,v 1.5 2007/01/12 17:38:27 christos Exp $ # Add any locally observed files here. Remember: # text if readable, executable if runnable binary, data if unreadable. file-5.46/magic/scripts/create_filemagic_flac000775 023540 023540 00000004334 14015050424 023055 0ustar00christoschristos000000 000000 #!/usr/bin/env bash ## bash script to generate file magic support for flac. ## https://github.com/file/file/blob/master/magic/Magdir/audio ## below "#some common sample rates" (line 471), ie: ## >>17 belong&0xfffff0 0x2ee000 \b, 192 kHz LANG=C target=magic/Magdir/audio ## construct static list of sample rates based on standard crystal ## oscillator frequencies. ## 16.384 MHz Unknown audio application ## (16384 kHz = 32 kHz * 512 = 32 * 2^9) ## 22.5792 MHz Redbook/CD ## (22579.2 kHz = 44.1kHz * 512 = 44.1 * 2^9) ## also used: 11.2896, 16.9344, 33.8688 and 45.1584 ## 24.576 MHz DAT/Video ## (24576 kHz = 48 kHz * 512 = 48 * 2^9) ## also used: 49.1520 ## 33.8688 > 16.9344 ## 36.864 > 18.432000 declare -a a_ground_fs=(16384000 22579200 24576000) ## multiply ground clock frequencies by 1953 to get usable base ## frequencies, for instance: ## DAT/video: 24.576 MHz * 1000000 / 512 = 48000Hz ## Redbook/CD: 22.5792 MHz * 1000000 / 512 = 44100Hz ## use base rates for calculating derived rates declare -a samplerates ## min divider: fs/n def_fs_n=512 min_fs_n=4 ## start at base_fs/(def_fs*min_fs) ## add each derived sample rate to the array for base_fs in "${a_ground_fs[@]}"; do min_fs=$( echo "${base_fs} / ( ${def_fs_n} * ${min_fs_n} )" | bc) ## max multiplier: fs*n*min_fs max_fs_n=$(( 8 * min_fs_n )) n=${max_fs_n} while [[ ${n} -ge 1 ]]; do sample_rate=$(( min_fs * n )) samplerates+=(${sample_rate}) n=$(( n / 2 )) done done declare -a stripped_rates declare -a lines for samplerate in "${samplerates[@]}"; do ## use bc with sed to convert and format Hz to kHz stripped_rate="$(LANG=C bc <<< "scale=5; ${samplerate} / 1000" | \ sed 's#[0\.]*$##g')" ## only add uniq sample rates (should be necessary if [[ ! "${stripped_rates[@]}" =~ ${stripped_rate} ]]; then printf -v line ">>17\tbelong&%#-15x\t%#08x\t%s, %s kHz\n" \ "16777200" \ "$(( samplerate * 16 ))" \ "\b" \ "${stripped_rate}" stripped_rates+=("${stripped_rate}") lines+=("${line}") fi done printf "## start cutting >>> \n" ## print out the formatted lines printf "%s" "${lines[@]}" | sort -k5 -n printf "## <<< stop cutting\n" file-5.46/magic/Magdir/acorn000664 023540 023540 00000004225 14700541413 017443 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: acorn,v 1.9 2024/08/30 17:29:28 christos Exp $ # acorn: file(1) magic for files found on Acorn systems # # RISC OS Chunk File Format # From RISC OS Programmer's Reference Manual, Appendix D # We guess the file type from the type of the first chunk. 0 lelong 0xc3cbc6c5 RISC OS Chunk data >12 string OBJ_ \b, AOF object >12 string LIB_ \b, ALF library # RISC OS AIF, contains "SWI OS_Exit" at offset 16. 16 lelong 0xef000011 RISC OS AIF executable # RISC OS Draw files # From RISC OS Programmer's Reference Manual, Appendix E 0 string Draw RISC OS Draw file data # RISC OS new format font files # From RISC OS Programmer's Reference Manual, Appendix E 0 string FONT\0 RISC OS outline font data, >5 byte x version %d 0 string FONT\1 RISC OS 1bpp font data, >5 byte x version %d 0 string FONT\4 RISC OS 4bpp font data >5 byte x version %d # RISC OS Music files # From RISC OS Programmer's Reference Manual, Appendix E 0 string Maestro\r RISC OS music file >8 byte x version %d >8 byte x type %d # Digital Symphony data files # From: Bernard Jungen (bern8817@euphonynet.be) 0 string \x02\x01\x13\x13\x13\x01\x0d\x10 Digital Symphony sound sample (RISC OS), >8 byte x version %d, >9 pstring x named "%s", >(9.b+19) byte =0 8-bit logarithmic >(9.b+19) byte =1 LZW-compressed linear >(9.b+19) byte =2 8-bit linear signed >(9.b+19) byte =3 16-bit linear signed >(9.b+19) byte =4 SigmaDelta-compressed linear >(9.b+19) byte =5 SigmaDelta-compressed logarithmic >(9.b+19) byte >5 unknown format 0 string \x02\x01\x13\x13\x14\x12\x01\x0b Digital Symphony song (RISC OS), >8 byte x version %d, >9 byte =1 1 voice, >9 byte !1 %d voices, >10 leshort =1 1 track, >10 leshort !1 %d tracks, >12 leshort =1 1 pattern >12 leshort !1 %d patterns 0 string \x02\x01\x13\x13\x10\x14\x12\x0e >9 byte =0 Digital Symphony sequence (RISC OS), >>8 byte x version %d, >>10 byte =1 1 line, >>10 byte !1 %d lines, >>11 leshort =1 1 position >>11 leshort !1 %d positions >9 byte =1 Digital Symphony pattern data (RISC OS), >>8 byte x version %d, >>10 leshort =1 1 pattern >>10 leshort !1 %d patterns file-5.46/magic/Magdir/adi000664 023540 023540 00000000651 14015050424 017071 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: adi,v 1.4 2009/09/19 16:28:07 christos Exp $ # adi: file(1) magic for ADi's objects # From Gregory McGarry # 0 leshort 0x521c COFF DSP21k >18 lelong &02 executable, >18 lelong ^02 >>18 lelong &01 static object, >>18 lelong ^01 relocatable object, >18 lelong &010 stripped >18 lelong ^010 not stripped file-5.46/magic/Magdir/adventure000664 023540 023540 00000010735 14540655110 020343 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: adventure,v 1.19 2023/12/02 13:48:56 christos Exp $ # adventure: file(1) magic for Adventure game files # # from Allen Garvin # Edited by Dave Chapeskie Jun 28, 1998 # Edited by Chris Chittleborough , March 2002 # # ALAN # I assume there are other, lower versions, but these are the only ones I # saw in the archive. # # FIXME: Conflicts with Microsoft x.out big-endian and PDP-11 binaries (./xenix) 0 beshort 0x0206 ALAN game data >2 byte <10 version 2.6%d # Infocom (see z-machine) #------------------------------------------------------------------------------ # Z-machine: file(1) magic for Z-machine binaries. # Sanity checks by David Griffith # Updated by Adam Buchbinder # #http://www.gnelson.demon.co.uk/zspec/sect11.html #https://www.jczorkmid.net/~jpenney/ZSpec11-latest.txt #https://en.wikipedia.org/wiki/Z-machine # The first byte is the Z-machine revision; it is always between 1 and 8. We # had false matches (for instance, inbig5.ocp from the Omega TeX extension as # well as an occasional MP3 file), so we sanity-check the version number. # # It might be possible to sanity-check the release number as well, as it seems # (at least in classic Infocom games) to always be a relatively small number, # always under 150 or so, but as this isn't rigorous, we'll wait on that until # it becomes clear that it's needed. # 0 ubyte >0 >0 ubyte <9 >>16 belong&0xfe00f0f0 0x3030 >>>0 ubyte < 10 >>>>2 ubeshort x >>>>>18 regex [0-9][0-9][0-9][0-9][0-9][0-9] >>>>>>0 ubyte < 10 Infocom (Z-machine %d >>>>>>>2 ubeshort x \b, Release %d >>>>>>>>18 string >\0 \b, Serial %.6s >>>>>>>>18 string x \b) !:strength + 40 !:mime application/x-zmachine #------------------------------------------------------------------------------ # Glulx: file(1) magic for Glulx binaries. # # David Griffith # I haven't checked for false matches yet. # 0 string Glul Glulx game data >4 beshort x (Version %d >>6 byte x \b.%d >>8 byte x \b.%d) >36 string Info Compiled by Inform !:mime application/x-glulx # For Quetzal and blorb magic see iff # TADS (Text Adventure Development System) version 2 # All files are machine-independent (games compile to byte-code) and are tagged # with a version string of the form "V2..\0". # Game files start with "TADS2 bin\n\r\032\0" then the compiler version. 0 string TADS2\ bin TADS >9 belong !0x0A0D1A00 game data, CORRUPTED >9 belong 0x0A0D1A00 >>13 string >\0 %s game data !:mime application/x-tads # Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version. 0 string TADS2\ rsc TADS >9 belong !0x0A0D1A00 resource data, CORRUPTED >9 belong 0x0A0D1A00 >>13 string >\0 %s resource data !:mime application/x-tads # Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian # 2-byte length N, the N-char name of the game file *without* a NUL (darn!), # "TADS2 save\n\r\032\0" and the interpreter version. 0 string TADS2\ save/g TADS >12 belong !0x0A0D1A00 saved game data, CORRUPTED >12 belong 0x0A0D1A00 >>(16.s+32) string >\0 %s saved game data !:mime application/x-tads # Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter # version. 0 string TADS2\ save TADS >10 belong !0x0A0D1A00 saved game data, CORRUPTED >10 belong 0x0A0D1A00 >>14 string >\0 %s saved game data !:mime application/x-tads # TADS (Text Adventure Development System) version 3 # Game files start with "T3-image\015\012\032" 0 string T3-image\015\012\032 >11 leshort x TADS 3 game data (format version %d) # Saved game files start with "T3-state-v####\015\012\032" # where #### is a format version number 0 string T3-state-v >14 string \015\012\032 TADS 3 saved game data (format version >>10 byte x %c >>11 byte x \b%c >>12 byte x \b%c >>13 byte x \b%c) !:mime application/x-t3vm-image # edited by David Griffith # Danny Milosavljevic # These are ADRIFT (adventure game standard) game files, extension .taf # Checked from source at (http://www.adrift.co/) and various taf files # found at the Interactive Fiction Archive (https://ifarchive.org/) 0 belong 0x3C423FC9 >4 belong 0x6A87C2CF Adrift game file version >>8 belong 0x94453661 3.80 >>8 belong 0x94453761 3.90 >>8 belong 0x93453E61 4.0 >>8 belong 0x92453E61 5.0 >>8 default x unknown !:mime application/x-adrift file-5.46/magic/Magdir/aes000664 023540 023540 00000001734 14015050424 017107 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: aes,v 1.1 2020/08/18 21:20:22 christos Exp $ # # aes: magic file for AES encrypted files # Summary: AES Crypt Encrypted Data File # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Advanced_Encryption_Standard # Reference: https://www.aescrypt.com/aes_file_format.html 0 string AES >3 ubyte <3 AES encrypted data, version %u #!:mime application/aes !:mime application/x-aes-encrypted !:ext aes # For Version 2 the encrypted file can have text tags >>3 ubyte =2 # length of an extension identifier and contents like: 0 24 33 38 #>>5 ubeshort x \b, tag length %u #>>5 pstring/H x '%s' # standard extension tags like CREATED_BY >>>7 string CREATED_BY \b, created by # software product, manufacturer like "SharpAESCrypt v1.3.3.0" "aescrypt (Windows GUI) 3.10" ... >>>>&1 string x "%s" # TODO: more other tags # tag CREATED_DATE like YYYY-MM-DD # tag CREATED_TIME like HH:MM:SS # file-5.46/magic/Magdir/algol68000664 023540 023540 00000002024 14700541413 017610 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: algol68,v 1.7 2024/08/27 18:50:56 christos Exp $ # algol68: file(1) magic for Algol 68 source # # URL: https://en.wikipedia.org/wiki/ALGOL_68 # Reference: http://www.softwarepreservation.org/projects/ALGOL/report/Algol68_revised_report-AB.pdf # Update: Joerg Jenderek 0 search/8192 (input, >0 use algol_68 # graph_2d.a68 0 regex/4006 \^PROC[[:space:]][a-zA-Z0-9_[:space:]]*[[:space:]]= >0 use algol_68 0 regex/1024 \bMODE[\t\ ] >0 use algol_68 0 regex/1024 \bREF[\t\ ] >0 use algol_68 0 regex/1024 \bFLEX[\t\ ]\*\\[ >0 use algol_68 # display information like mime type and file name extension of Algol 68 source text 0 name algol_68 Algol 68 source text !:mime text/x-Algol68 # https://file-extension.net/seeker/file_extension_a68 !:ext a68 #!:ext a68/alg #0 regex [\t\ ]OD Algol 68 source text #>0 use algol_68 #!:mime text/x-Algol68 #0 regex [\t\ ]FI Algol 68 source text #>0 use algol_68 #!:mime text/x-Algol68 file-5.46/magic/Magdir/allegro000664 023540 023540 00000000622 14015050424 017757 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: allegro,v 1.4 2009/09/19 16:28:07 christos Exp $ # allegro: file(1) magic for Allegro datafiles # Toby Deshane # 0 belong 0x736C6821 Allegro datafile (packed) 0 belong 0x736C682E Allegro datafile (not packed/autodetect) 0 belong 0x736C682B Allegro datafile (appended exe data) file-5.46/magic/Magdir/alliant000664 023540 023540 00000001370 14015050424 017757 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: alliant,v 1.7 2009/09/19 16:28:07 christos Exp $ # alliant: file(1) magic for Alliant FX series a.out files # # If the FX series is the one that had a processor with a 68K-derived # instruction set, the "short" should probably become "beshort" and the # "long" should probably become "belong". # If it's the i860-based one, they should probably become either the # big-endian or little-endian versions, depending on the mode they ran # the 860 in.... # 0 short 0420 0420 Alliant virtual executable >2 short &0x0020 common library >16 long >0 not stripped 0 short 0421 0421 Alliant compact executable >2 short &0x0020 common library >16 long >0 not stripped file-5.46/magic/Magdir/amanda000664 023540 023540 00000000601 14015050424 017550 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: amanda,v 1.6 2017/03/17 21:35:28 christos Exp $ # amanda: file(1) magic for amanda file format # 0 string AMANDA:\ AMANDA >8 string TAPESTART\ DATE tape header file, >>23 string X >>>25 string >\ Unused %s >>23 string >\ DATE %s >8 string FILE\ dump file, >>13 string >\ DATE %s file-5.46/magic/Magdir/amigaos000664 023540 023540 00000021125 14123103144 017751 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: amigaos,v 1.20 2021/09/20 00:42:19 christos Exp $ # amigaos: file(1) magic for AmigaOS binary formats: # # From ignatios@cs.uni-bonn.de (Ignatios Souvatzis) # 0 belong 0x000003fa AmigaOS shared library 0 belong 0x000003f3 AmigaOS loadseg()ble executable/binary 0 belong 0x000003e7 AmigaOS object/library data # 0 beshort 0xe310 Amiga Workbench >2 beshort 1 >>48 byte 1 disk icon >>48 byte 2 drawer icon >>48 byte 3 tool icon >>48 byte 4 project icon >>48 byte 5 garbage icon >>48 byte 6 device icon >>48 byte 7 kickstart icon >>48 byte 8 workbench application icon >2 beshort >1 icon, vers. %d # # various sound formats from the Amiga # G=F6tz Waschk # 0 string FC14 Future Composer 1.4 Module sound file 0 string SMOD Future Composer 1.3 Module sound file 0 string AON4artofnoise Art Of Noise Module sound file 1 string MUGICIAN/SOFTEYES Mugician Module sound file 58 string SIDMON\ II\ -\ THE Sidmon 2.0 Module sound file 0 string Synth4.0 Synthesis Module sound file 0 string ARP. The Holy Noise Module sound file 0 string BeEp\0 JamCracker Module sound file 0 string COSO\0 Hippel-COSO Module sound file # Too simple (short, pure ASCII, deep), MPi #26 string V.3 Brian Postma's Soundmon Module sound file v3 #26 string BPSM Brian Postma's Soundmon Module sound file v3 #26 string V.2 Brian Postma's Soundmon Module sound file v2 # The following are from: "Stefan A. Haubenthal" # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Amiga_bitmap_font # Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/font-amiga.trid.xml # https://wiki.amigaos.net/wiki/Graphics_Library_and_Text # fch_FileID=FCH_ID=0x0f00 0 beshort 0x0f00 # skip some AVM powerline firmware images by check for positive number of font elements # https://download.avm.de/fritzpowerline/fritzpowerline-1000e-t/other/fritz.os/fritz.powerline_1000ET_01_05.image >2 ubeshort >0 AmigaOS bitmap font #!:mime application/octet-stream !:mime font/x-amiga-font !:ext font # struct FontContents fch_FC; 1st fc_FileName [MAXFONTPATH=256]; ~ filename "/" fc_YSize # like: topazb/6 suits/8 Excel/9e emerald/17 Franklin/23 DIAMONDS/60.8C >>4 string x "%.256s" # fc_YSize ~number after slash in fc_FileName; like: 6 7 8 9 11 12 16 17 21 23 45 60 >>260 beshort x \b, fc_YSize %u # fch_NumEntries; number of FontContents elements like: # 1 (often) 2 3 (IconCondensed.font tempfont.font) 4 (Franklin.font) 6 (mcoop.font) >>2 ubeshort >1 \b, %u elements #>>2 beshort x \b, %u element # plural s #>>2 beshort !1 \bs # like: 6 7 8 9 11 12 16 17 21 23 45 60 #>>262 beshort x \b, FLAGS_STYLE >>2 beshort >1 \b, 2nd # 2nd fc_FileName like: Franklin/36 >>>264 string x "%.256s" >>2 beshort >2 \b, 3rd # 3rd fc_FileName like: Franklin/18 >>>524 string x "%.256s" # URL: http://fileformats.archiveteam.org/wiki/Amiga_bitmap_font # Reference: https://wiki.amigaos.net/wiki/Graphics_Library_and_Text # http://mark0.net/download/triddefs_xml.7z/defs/f/font-amiga-var2.trid.xml # Note: called by TrID "Amiga bitmap Font (var.2)" # fch_FileID=TFCH_ID=0x0f02 0 beshort 0x0f02 # skip possible misidentified foo by check for positive number of font elements >2 ubeshort >0 AmigaOS bitmap font (TFCH) #!:mime application/octet-stream !:mime font/x-amiga-font !:ext font # struct TFontContents fch_TFC[]; 1st tfc_FileName [254]; ~ filename "/" fc_YSize # like: Abbey/45 XScript/75 XTriumvirate/45 >>4 string x "%.254s" # tfc_TagCount; including the TAG_END tag like: 4 >>258 ubeshort x \b, tfc_TagCount %u # tfc_YSize ~number after slash in tfc_FileName; like: 45 75 >>260 beshort x \b, tfc_YSize %u # tfc_Style; tfc_Flags like: 8022h 8222h #>>262 ubeshort x \b, FLAGS_STYLE %#x # fch_NumEntries; number of FontContents elements like: 1 (abbey.font) 2 (xscript.font xtriumvirate.font) >>2 ubeshort >1 \b, %u elements >>2 beshort >1 \b, 2nd # 2nd tfc_FileName like: XScript/45 XTriumvirate/30 >>>264 string x "%.254s" 0 beshort 0x0f03 AmigaOS outline font 0 belong 0x80001001 AmigaOS outline tag 0 string ##\ version catalog translation 0 string EMOD\0 Amiga E module 8 string ECXM\0 ECX module 0 string/c @database AmigaGuide file # Amiga disk types # display information like volume name of root block on Amiga (floppy) disk 0 name adf-rootblock # block primary type = T_HEADER (value 2) >0x000 ubelong !2 \b, type %u # header_key; unused in rootblock (value 0) >0x004 ubelong !0 \b, header_key %u # high_seq; unused (value 0) >0x008 ubelong !0 \b, high_seq %u # ht_size; hash table size; 0x48 for flopies >0x00c ubelong !0x48 \b, hash table size %#x # bm_flag; bitmap flag, -1 means VALID >0x138 belong !-1 \b, bitmap flag %#x # bm_ext; first bitmap extension block (Hard disks only) >0x1A0 ubelong !0 \b, bitmap extension block %#x # name_len; volume name length; diskname[30]; volume name >0x1B0 pstring >\0 \b, "%s" # first directory cache block for FFS; otherwise 0 >0x1F8 ubelong !0 \b, directory cache block %#x # block secondary type = ST_ROOT (value 1) >0x1FC ubelong !1 \b, sec_type %#x # 0 string RDSK Rigid Disk Block >160 string x on %.24s # URL: http://fileformats.archiveteam.org/wiki/ADF_(Amiga) # https://en.wikipedia.org/wiki/Amiga_Fast_File_System # Reference: http://lclevy.free.fr/adflib/adf_info.html # Update: Joerg Jenderek # Note: created by ADFOpus.exe # and verified by `unadf -l TURBO_SILVER_SV.ADF` 0 string DOS # skip DOS Client Message Files like IPXODI.MSG DOSRQSTR.MSG >3 ubyte <8 Amiga # https://reposcope.com/mimetype/application/x-amiga-disk-format !:mime application/x-amiga-disk-format !:ext adf >>3 ubyte 0 DOS disk >>3 ubyte 1 FFS disk >>3 ubyte 2 Inter DOS disk >>3 ubyte 3 Inter FFS disk # For Fastdir mode the international mode is also enabled, >>3 ubyte 4 Fastdir DOS disk >>3 ubyte 5 Fastdir FFS dis # called by TrID "Amiga Disk image File (OFS+INTL+DIRC)" >>3 ubyte 6 Inter Fastdir DOS disk # called by TrID "Amiga Disk image File (FFS+INTL+DIRC)" >>3 ubyte 7 Inter Fastdir FFS disk # but according to Wikipedia variants with long name support #>>3 ubyte 6 long name DOS disk #>>3 ubyte 7 long name FFS disk # DOES NOT only work! Partly for file size ~< FILE_BYTES_MAX=1 MiB defined in ../../src/file.h #>>-0 offset x \b, %lld bytes # Correct file size, but next lines are NOT executed #>>-0 offset 901120 (DD 880 KiB floppy) # 880 KiB Double Density floppy disk by characteristic hash table size 0x48 and T_HEADER=2 >>0x6E00C ubelong 0x48 >>>0x6E000 ubelong 2 (DD 880 KiB) # 1760 KiB High Density floppy disk (1802240 bytes) by characteristic hash table size 0x48 >>0xDC00C ubelong 0x48 >>>0xDC000 ubelong 2 (HD 1760 KiB) # Chksum; special block checksum like: 0 0x44ccf4c0 0x51f32cac 0xe33d0e7d ... #>>4 ubelong x \b, CRC %#x # Rootblock: 0 880 (often for DD and HD) 1146049280 (IMAGINE_1_0_DISK_01.ADF TURBO_SILVER_SV.ADF) >>8 ubelong >0 \b, probably root block %d # bootblock code >>12 quad !0 \b, bootable # assembler instructions: lea exp(pc),a1; moveq 25h,d0; jsr -552(a6) >>>12 ubequad =0x43fa003e70254eae AmigaDOS 3.0 >>>12 default x >>>>12 ubequad !0x43fa003e70254eae %#llx.. # 880 KiB Double Density floppy disk (901120 bytes) >>0x6E00C ubelong 0x48 >>>0x6E000 ubelong 2 >>>>0x6E000 use adf-rootblock # 1760 KiB High Density floppy disk (1802240 bytes) >>0xDC00C ubelong 0x48 >>>0xDC000 ubelong 2 >>>>0xDC000 use adf-rootblock # 1 MiB hard disc by test for T_HEADER=2 and header_key=0=high_seq >>0x80000 ubelong 2 >>>0x80004 quad 0 >>>>0x80000 use adf-rootblock # 2 MiB hard disc; only works if in ../../src/file.h FILE_BYTES_MAX is raised to 2 MiB #>>0x100000 ubelong x 2 MiB TEST #>>0x100000 ubelong 2 \b, 2 MiB hard disc rootblock #>>>0x100000 use adf-rootblock 0 string KICK Kickstart disk # From: Alex Beregszaszi 0 string LZX LZX compressed archive (Amiga) # From: Przemek Kramarczyk 0 string .KEY AmigaDOS script 0 string .key AmigaDOS script # AMOS Basic file formats # https://www.exotica.org.uk/wiki/AMOS_file_formats 0 string AMOS\040Basic\040 AMOS Basic source code >11 byte =0x56 \b, tested >11 byte =0x76 \b, untested 0 string AMOS\040Pro AMOS Basic source code >11 byte =0x56 \b, tested >11 byte =0x76 \b, untested 0 string AmSp AMOS Basic sprite bank >4 beshort x \b, %d sprites 0 string AmIc AMOS Basic icon bank >4 beshort x \b, %d icons 0 string AmBk AMOS Basic memory bank >4 beshort x \b, bank number %d >8 belong&0xFFFFFFF x \b, length %d >12 regex .{8} \b, type %s 0 string AmBs AMOS Basic memory banks >4 beshort x \b, %d banks file-5.46/magic/Magdir/android000664 023540 023540 00000022554 14700541413 017766 0ustar00christoschristos000000 000000 #------------------------------------------------------------ # $File: android,v 1.26 2024/09/04 19:06:11 christos Exp $ # Various android related magic entries #------------------------------------------------------------ # Dalvik .dex format. http://retrodev.com/android/dexformat.html # From "Mike Fleming" # Fixed to avoid regexec 17 errors on some dex files # From "Tim Strazzere" 0 string dex\n >0 regex dex\n[0-9]{2} Dalvik dex file >>4 string >000 version %s 0 string dey\n >0 regex dey\n[0-9]{2} Dalvik dex file (optimized for host) >>4 string >000 version %s # Android bootimg format # From https://android.googlesource.com/\ # platform/system/core/+/master/mkbootimg/bootimg.h # https://github.com/djrbliss/loki/blob/master/loki.h#L43 0 string ANDROID! Android bootimg >1024 string LOKI \b, LOKI'd >>1028 lelong 0 \b (boot) >>1028 lelong 1 \b (recovery) >8 lelong >0 \b, kernel >>12 lelong >0 \b (%#x) >16 lelong >0 \b, ramdisk >>20 lelong >0 \b (%#x) >24 lelong >0 \b, second stage >>28 lelong >0 \b (%#x) >36 lelong >0 \b, page size: %d >38 string >0 \b, name: %s >64 string >0 \b, cmdline (%s) # Android Backup archive # From: Ariel Shkedi # Update: Joerg Jenderek # URL: https://github.com/android/platform_frameworks_base/blob/\ # 0bacfd2ba68d21a68a3df345b830bc2a1e515b5a/services/java/com/\ # android/server/BackupManagerService.java#L2367 # Reference: https://sourceforge.net/projects/adbextractor/ # android-backup-extractor/perl/backupencrypt.pl # Note: only unix line feeds "\n" found # After the header comes a tar file # If compressed, the entire tar file is compressed with JAVA deflate # # Include the version number hardcoded with the magic string to avoid # false positives 0 string/b ANDROID\ BACKUP\n Android Backup # maybe look for some more characteristics like linefeed '\n' or version #>16 string \n # No mime-type defined officially !:mime application/x-google-ab !:ext ab # on 2nd line version (often 1, 2 on kitkat 4.4.3+, 4 on 7.1.2) >15 string >\0 \b, version %s # "1" on 3rd line means compressed >17 string 0\n \b, Not-Compressed >17 string 1\n \b, Compressed # The 4th line is encryption "none" or "AES-256" # any string as long as it's not the word none (which is matched below) >19 string none\n \b, Not-Encrypted # look for backup content after line with encryption info #>>19 search/7 \n # data part after header for not encrypted Android Backup #>>>&0 ubequad x \b, content %#16.16llx... # look for zlib compressed by ./compress after message with 1 space at end #>>>&0 indirect x \b; contains # look for tar archive block by ./archive for package name manifest >>288 string ustar \b; contains >>>31 use tar-file # look for zip/jar archive by ./archive ./zip after message with 1 space at end #>>2079 search/1025/s PK\003\004 \b; contains #>>>&0 indirect x >19 string !none >>19 regex/1l \^([^n\n]|n[^o]|no[^n]|non[^e]|none.+).* \b, Encrypted (%s) # Commented out because they don't seem useful to print # (but they are part of the header - the tar file comes after them): # The 5th line is User Password Salt (128 Hex) # string length too high with standard src configuration #>>>&1 string >\0 \b, PASSWORD salt: "%-128.128s" #>>>&1 regex/1l .* \b, Password salt: %s # The 6th line is Master Key Checksum Salt (128 Hex) #>>>>&1 regex/1l .* \b, Master salt: %s # The 7th line is Number of PBDKF2 Rounds (10000) #>>>>>&1 regex/1l .* \b, PBKDF2 rounds: %s # The 8th line is User key Initialization Vector (IV) (32 Hex) #>>>>>>&1 regex/1l .* \b, IV: %s #>>>>>>&1 regex/1l .* \b, IV: %s # The 9th line is Master IV+Key+Checksum (192 Hex) #>>>>>>>&1 regex/1l .* \b, Key: %s # look for new line separator char after line number 9 #>>>0x204 ubyte 0x0a NL found #>>>>&1 ubequad x \b, Content magic %16.16llx # *.pit files by Joerg Jenderek # https://forum.xda-developers.com/showthread.php?p=9122369 # https://forum.xda-developers.com/showthread.php?t=816449 # Partition Information Table for Samsung's smartphone with Android # used by flash software Odin 0 ulelong 0x12349876 # 1st pit entry marker >0x01C ulequad&0xFFFFFFFCFFFFFFFC =0x0000000000000000 # minimal 13 and maximal 18 PIT entries found >>4 ulelong <128 Partition Information Table for Samsung smartphone >>>4 ulelong x \b, %d entries # 1. pit entry >>>4 ulelong >0 \b; #1 >>>0x01C use PIT-entry >>>4 ulelong >1 \b; #2 >>>0x0A0 use PIT-entry >>>4 ulelong >2 \b; #3 >>>0x124 use PIT-entry >>>4 ulelong >3 \b; #4 >>>0x1A8 use PIT-entry >>>4 ulelong >4 \b; #5 >>>0x22C use PIT-entry >>>4 ulelong >5 \b; #6 >>>0x2B0 use PIT-entry >>>4 ulelong >6 \b; #7 >>>0x334 use PIT-entry >>>4 ulelong >7 \b; #8 >>>0x3B8 use PIT-entry >>>4 ulelong >8 \b; #9 >>>0x43C use PIT-entry >>>4 ulelong >9 \b; #10 >>>0x4C0 use PIT-entry >>>4 ulelong >10 \b; #11 >>>0x544 use PIT-entry >>>4 ulelong >11 \b; #12 >>>0x5C8 use PIT-entry >>>4 ulelong >12 \b; #13 >>>>0x64C use PIT-entry # 14. pit entry >>>4 ulelong >13 \b; #14 >>>>0x6D0 use PIT-entry >>>4 ulelong >14 \b; #15 >>>0x754 use PIT-entry >>>4 ulelong >15 \b; #16 >>>0x7D8 use PIT-entry >>>4 ulelong >16 \b; #17 >>>0x85C use PIT-entry # 18. pit entry >>>4 ulelong >17 \b; #18 >>>0x8E0 use PIT-entry 0 name PIT-entry # garbage value implies end of pit entries >0x00 ulequad&0xFFFFFFFCFFFFFFFC =0x0000000000000000 # skip empty partition name >>0x24 ubyte !0 # partition name >>>0x24 string >\0 %-.32s # flags >>>0x0C ulelong&0x00000002 2 \b+RW # partition ID: # 0~IPL,MOVINAND,GANG;1~PIT,GPT;2~HIDDEN;3~SBL,HIDDEN;4~SBL2,HIDDEN;5~BOOT;6~kernel,RECOVER,misc;7~RECOVER # ;11~MODEM;20~efs;21~PARAM;22~FACTORY,SYSTEM;23~DBDATAFS,USERDATA;24~CACHE;80~BOOTLOADER;81~TZSW >>>0x08 ulelong x (%#x) # filename >>>0x44 string >\0 "%-.64s" #>>>0x18 ulelong >0 # blocksize in 512 byte units ? #>>>>0x18 ulelong x \b, %db # partition size in blocks ? #>>>>0x22 ulelong x \b*%d # Android sparse img format # From https://android.googlesource.com/\ # platform/system/core/+/master/libsparse/sparse_format.h 0 lelong 0xed26ff3a Android sparse image >4 leshort x \b, version: %d >6 leshort x \b.%d >16 lelong x \b, Total of %d >12 lelong x \b %d-byte output blocks in >20 lelong x \b %d input chunks. # Android binary XML magic # In include/androidfw/ResourceTypes.h: # RES_XML_TYPE = 0x0003 followed by the size of the header (ResXMLTree_header), # which is 8 bytes (2 bytes type + 2 bytes header size + 4 bytes size). # The strength is increased to avoid misidentifying as Targa image data 0 lelong 0x00080003 Android binary XML !:strength +1 # Android cryptfs footer # From https://android.googlesource.com/\ # platform/system/vold/+/refs/heads/master/cryptfs.h 0 lelong 0xd0b5b1c4 Android cryptfs footer >4 leshort x \b, version: %d >6 leshort x \b.%d # Android Vdex format # From https://android.googlesource.com/\ # platform/art/+/master/runtime/vdex_file.h 0 string vdex Android vdex file, >4 string >000 verifier deps version: %s, >8 string >000 dex section version: %s, >12 lelong >0 number of dex files: %d, >16 lelong >0 verifier deps size: %d # Android Vdex format, dexfile is currently being updated # by android system # From https://android.googlesource.com/\ # platform/art/+/master/dex2oat/dex2oat.cc 0 string wdex Android vdex file, being processed by dex2oat, >4 string >000 verifier deps version: %s, >8 string >000 dex section version: %s, >12 lelong >0 number of dex files: %d, >16 lelong >0 verifier deps size: %d # Disassembled DEX files 0 string/t .class\x20 >&0 regex/512 \^\\.super\x20L.*;$ disassembled Android DEX Java class (smali/baksmali) !:ext smali # Android ART (baseline) profile + metadata: baseline.prof, baseline.profm # Reference: https://android.googlesource.com/platform/frameworks/support/\ # +/refs/heads/androidx-main/profileinstaller/profileinstaller/\ # src/main/java/androidx/profileinstaller/ProfileTranscoder.java # Reference: https://android.googlesource.com/platform/frameworks/support/\ # +/refs/heads/androidx-main/profileinstaller/profileinstaller/\ # src/main/java/androidx/profileinstaller/ProfileVersion.java 0 string pro\x00 >4 regex 0[0-9][0-9] Android ART profile !:ext prof >>4 string 001\x00 \b, version 001 N >>4 string 005\x00 \b, version 005 O >>4 string 009\x00 \b, version 009 O MR1 >>4 string 010\x00 \b, version 010 P >>4 string 015\x00 \b, version 015 S 0 string prm\x00 >0 regex 0[0-9][0-9] Android ART profile metadata !:ext profm >>4 string 001\x00 \b, version 001 N >>4 string 002\x00 \b, version 002 # Android package resource table (ARSC): resources.arsc # Reference: https://android.googlesource.com/platform/tools/base/\ # +/refs/heads/mirror-goog-studio-main/apkparser/binary-resources/\ # src/main/java/com/google/devrel/gmscore/tools/apk/arsc # 00: resource table type = 0x0002 (2) + header size = 12 (2) # 04: chunk size (4, skipped) # 08: #packages (4) 0 ulelong 0x000c0002 Android package resource table (ARSC) !:ext arsc >8 ulelong !1 \b, %d packages # 12: string pool type = 0x0001 (2) + header size = 28 (2) # 16: chunk size (4, skipped) # 20: #strings (4), #styles (4), flags (4) >12 ulelong 0x001c0001 >>20 ulelong !0 \b, %d string(s) >>24 ulelong !0 \b, %d style(s) >>28 ulelong &1 \b, sorted >>28 ulelong &256 \b, utf8 # extracted APK Signing Block -16 string APK\x20Sig\x20Block\x2042 APK Signing Block file-5.46/magic/Magdir/animation000664 023540 023540 00000150105 14700541414 020320 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: animation,v 1.98 2024/09/01 15:51:51 christos Exp $ # animation: file(1) magic for animation/movie formats # # animation formats # MPEG, FLI, DL originally from vax@ccwf.cc.utexas.edu (VaX#n8) # FLC, SGI, Apple originally from Daniel Quinlan (quinlan@yggdrasil.com) # SGI and Apple formats 0 string MOVI Silicon Graphics movie file !:mime video/x-sgi-movie 4 string moov Apple QuickTime !:mime video/quicktime >12 string mvhd \b movie (fast start) >12 string mdra \b URL >12 string cmov \b movie (fast start, compressed header) >12 string rmra \b multiple URLs 4 string mdat Apple QuickTime movie (unoptimized) !:mime video/quicktime 4 string wide Apple QuickTime movie (unoptimized) !:mime video/quicktime #4 string skip Apple QuickTime movie (modified) #!:mime video/quicktime #4 string free Apple QuickTime movie (modified) #!:mime video/quicktime 4 string idsc Apple QuickTime image (fast start) !:mime image/x-quicktime #4 string idat Apple QuickTime image (unoptimized) #!:mime image/x-quicktime 4 string pckg Apple QuickTime compressed archive !:mime application/x-quicktime-player #### MP4 #### # https://www.ftyps.com/ with local additions # https://cconcolato.github.io/mp4ra/filetype.html 4 string ftyp ISO Media # https://aeroquartet.com/wordpress/2016/03/05/3-xavc-s/ >8 string XAVC \b, MPEG v4 system, Sony XAVC Codec !:mime video/mp4 >>96 string x \b, Audio "%.4s" >>118 beshort x at %dHz >>140 string x \b, Video "%.4s" >>168 beshort x %d >>170 beshort x \bx%d >8 string 3g2 \b, MPEG v4 system, 3GPP2 !:mime video/3gpp2 >>11 byte 4 \b v4 (H.263/AMR GSM 6.10) >>11 byte 5 \b v5 (H.263/AMR GSM 6.10) >>11 byte 6 \b v6 (ITU H.264/AMR GSM 6.10) # https://www.3gpp2.org/Public_html/Specs/C.S0050-B_v1.0_070521.pdf # Section 8.1.1, corresponds to a, b, c >>11 byte 0x61 \b C.S0050-0 V1.0 >>11 byte 0x62 \b C.S0050-0-A V1.0.0 >>11 byte 0x63 \b C.S0050-0-B V1.0 >8 string 3ge \b, MPEG v4 system, 3GPP !:mime video/3gpp >>11 byte 6 \b, Release %d MBMS Extended Presentations >>11 byte 7 \b, Release %d MBMS Extended Presentations >>11 byte 9 \b, Release %d MBMS Extended Presentations >8 string 3gf \b, MPEG v4 system, 3GPP >>11 byte 9 \b, Release %d File-delivery profile >8 string 3gg \b, MPEG v4 system, 3GPP !:mime video/3gpp >>11 byte 6 \b, Release %d General Profile >>11 byte 9 \b, Release %d General Profile >8 string 3gh \b, MPEG v4 system, 3GPP !:mime video/3gpp >>11 byte 9 \b, Release %d Adaptive Streaming Profile >8 string 3gm \b, MPEG v4 system, 3GPP !:mime video/3gpp >>11 byte 9 \b, Release %d Media Segment Profile >8 string 3gp \b, MPEG v4 system, 3GPP !:mime video/3gpp >>11 byte 1 \b, Release %d (non existent) >>11 byte 2 \b, Release %d (non existent) >>11 byte 3 \b, Release %d (non existent) >>11 byte 4 \b, Release %d >>11 byte 5 \b, Release %d >>11 byte 6 \b, Release %d >>11 byte 7 \b, Release %d Streaming Servers >8 string 3gr \b, MPEG v4 system, 3GPP !:mime video/3gpp >>11 byte 6 \b, Release %d Progressive Download Profile >>11 byte 9 \b, Release %d Progressive Download Profile >8 string 3gs \b, MPEG v4 system, 3GPP !:mime video/3gpp >>11 byte 6 \b, Release %d Streaming Servers >>11 byte 7 \b, Release %d Streaming Servers >>11 byte 9 \b, Release %d Streaming Servers >8 string 3gt \b, MPEG v4 system, 3GPP !:mime video/3gpp >>11 byte 8 \b, Release %d Media Stream Recording Profile >>11 byte 9 \b, Release %d Media Stream Recording Profile >8 string ARRI \b, MPEG v4 system, ARRI Digital Camera !:mime video/mp4 >8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC [ISO 14496-12:2005] !:mime video/mp4 >8 string bbxm \b, Blinkbox Master File: H.264 video/16-bit LE LPCM audio !:mime video/mp4 >8 string/W qt \b, Apple QuickTime movie !:mime video/quicktime >8 string CAEP \b, Canon Digital Camera >8 string caqv \b, Casio Digital Camera >8 string CDes \b, Convergent Design >8 string caaa \b, CMAF Media Profile - AAC Adaptive Audio >8 string caac \b, CMAF Media Profile - AAC Core >8 string caqv \b, Casio Digital Camera Casio >8 string ccea \b, CMAF Supplemental Data - CEA-608/708 >8 string ccff \b, Common container file format >8 string cfhd \b, CMAF Media Profile - AVC HD >8 string cfsd \b, CMAF Media Profile - AVC SD >8 string chd1 \b, CMAF Media Profile - HEVC HDR10 >8 string chdf \b, CMAF Media Profile - AVC HDHF >8 string chhd \b, CMAF Media Profile - HEVC HHD8 >8 string chh1 \b, CMAF Media Profile - HEVC HHD10 >8 string clg1 \b, CMAF Media Profile - HEVC HLG10 >8 string cmfc \b, CMAF Track Format >8 string cmff \b, CMAF Fragment Format >8 string cmfl \b, CMAF Chunk Format >8 string cmfs \b, CMAF Segment Format >8 string cud1 \b, CMAF Media Profile - HEVC UHD10 >8 string cud8 \b, CMAF Media Profile - HEVC UHD8 >8 string cwvt \b, CMAF Media Profile - WebVTT >8 string da0a \b, DMB MAF w/ MPEG Layer II aud, MOT slides, DLS, JPG/PNG/MNG >8 string da0b \b, DMB MAF, ext DA0A, with 3GPP timed text, DID, TVA, REL, IPMP >8 string da1a \b, DMB MAF audio with ER-BSAC audio, JPG/PNG/MNG images >8 string da1b \b, DMB MAF, ext da1a, with 3GPP timed text, DID, TVA, REL, IPMP >8 string da2a \b, DMB MAF aud w/ HE-AAC v2 aud, MOT slides, DLS, JPG/PNG/MNG >8 string da2b \b, DMB MAF, ext da2a, with 3GPP timed text, DID, TVA, REL, IPMP >8 string da3a \b, DMB MAF aud with HE-AAC aud, JPG/PNG/MNG images >8 string da3b \b, DMB MAF, ext da3a w/ BIFS, 3GPP, DID, TVA, REL, IPMP >8 string dash \b, MPEG v4 system, Dynamic Adaptive Streaming over HTTP !:mime video/mp4 >8 string dby1 \b, MP4 files with Dolby content >8 string dsms \b, Media Segment DASH conformant >8 string dts1 \b, MP4 track file with audio codecs dtsc dtsh or dtse >8 string dts2 \b, MP4 track file with audio codec dtsx >8 string dts3 \b, MP4 track file with audio codec dtsy >8 string dxo$20 \b, DxO ONE camera >8 string dmb1 \b, DMB MAF supporting all the components defined in the spec >8 string dmpf \b, Digital Media Project >8 string drc1 \b, Dirac (wavelet compression), encap in ISO base media (MP4) >8 string dv1a \b, DMB MAF vid w/ AVC vid, ER-BSAC aud, BIFS, JPG/PNG/MNG, TS >8 string dv1b \b, DMB MAF, ext dv1a, with 3GPP timed text, DID, TVA, REL, IPMP >8 string dv2a \b, DMB MAF vid w/ AVC vid, HE-AAC v2 aud, BIFS, JPG/PNG/MNG, TS >8 string dv2b \b, DMB MAF, ext dv2a, with 3GPP timed text, DID, TVA, REL, IPMP >8 string dv3a \b, DMB MAF vid w/ AVC vid, HE-AAC aud, BIFS, JPG/PNG/MNG, TS >8 string dv3b \b, DMB MAF, ext dv3a, with 3GPP timed text, DID, TVA, REL, IPMP >8 string dvr1 \b, DVB (.DVB) over RTP !:mime video/vnd.dvb.file >8 string dvt1 \b, DVB (.DVB) over MPEG-2 Transport Stream >8 string emsg \b, Event message box present !:mime video/vnd.dvb.file >8 string F4V \b, Video for Adobe Flash Player 9+ (.F4V) !:mime video/mp4 >8 string F4P \b, Protected Video for Adobe Flash Player 9+ (.F4P) !:mime video/mp4 >8 string F4A \b, Audio for Adobe Flash Player 9+ (.F4A) !:mime audio/mp4 >8 string F4B \b, Audio Book for Adobe Flash Player 9+ (.F4B) !:mime audio/mp4 >8 string ifrm \b, Apple iFrame Specification, Version 8.1 Jan 2013 >8 string im1i \b, CMAF Media Profile - IMSC1 Image >8 string im1t \b, CMAF Media Profile - IMSC1 Text >8 string isc2 \b, ISMACryp 2.0 Encrypted File # ?/enc-isoff-generic >8 string iso \b, MP4 Base Media !:mime video/mp4 !:ext mp4 >>11 string m v1 [ISO 14496-12:2003] >>11 string 2 v2 [ISO 14496-12:2005] >>11 string 4 v4 >>11 string 5 v5 >>11 string 6 v6 >8 string isml \b, MP4 Base Media v2 [ISO 14496-12:2005] !:mime video/mp4 >8 string J2P0 \b, JPEG2000 Profile 0 >8 string J2P1 \b, JPEG2000 Profile 1 >8 string/W jp2 \b, JPEG 2000 !:mime image/jp2 >8 string JP2 \b, JPEG 2000 Image (.JP2) [ISO 15444-1 ?] !:mime image/jp2 >8 string JP20 \b, Unknown, from GPAC samples (prob non-existent) >8 string jpm \b, JPEG 2000 Compound Image (.JPM) [ISO 15444-6] !:mime image/jpm >8 string jpsi \b, The JPSearch data interchange format >8 string jpx \b, JPEG 2000 w/ extensions (.JPX) [ISO 15444-2] !:mime image/jpx >8 string KDDI \b, 3GPP2 EZmovie for KDDI 3G cellphones !:mime video/3gpp2 >8 string LCAG \b, Leica digital camera >8 string lmsg \b, Last Media Segment indicator for ISO base media file format. >8 string M4A \b, Apple iTunes ALAC/AAC-LC (.M4A) Audio !:mime audio/x-m4a >8 string M4B \b, Apple iTunes ALAC/AAC-LC (.M4B) Audio Book !:mime audio/mp4 >8 string M4P \b, Apple iTunes ALAC/AAC-LC (.M4P) AES Protected Audio !:mime video/mp4 >8 string M4V \b, Apple iTunes Video (.M4V) Video !:mime video/x-m4v >8 string M4VH \b, Apple TV (.M4V) !:mime video/x-m4v >8 string M4VP \b, Apple iPhone (.M4V) !:mime video/x-m4v >8 string mj2s \b, Motion JPEG 2000 [ISO 15444-3] Simple Profile !:mime video/mj2 >8 string mjp2 \b, Motion JPEG 2000 [ISO 15444-3] General Profile >8 string MFSM \b, Media File for Samsung video Metadata >8 string MGSV \b, Sony Home and Mobile Multimedia Platform (HMMP) !:mime video/mj2 >8 string mmp4 \b, MPEG-4/3GPP Mobile Profile (.MP4 / .3GP) (for NTT) !:mime video/mp4 >8 string mobi \b, MPEG-4, MOBI format !:mime video/mp4 >8 string mp21 \b, MPEG-21 [ISO/IEC 21000-9] >8 string mp41 \b, MP4 v1 [ISO 14496-1:ch13] !:mime video/mp4 >8 string mp42 \b, MP4 v2 [ISO 14496-14] !:mime video/mp4 >8 string mp71 \b, MP4 w/ MPEG-7 Metadata [per ISO 14496-12] >8 string mp7t \b, MPEG v4 system, MPEG v7 XML >8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML >8 string mpuf \b, Compliance with the MMT Processing Unit format >8 string msdh \b, Media Segment conforming to ISO base media file format. >8 string msix \b, Media Segment conforming to ISO base media file format. >8 string mmp4 \b, MPEG v4 system, 3GPP Mobile !:mime video/mp4 >8 string MPPI \b, Photo Player, MAF [ISO/IEC 23000-3] >8 string mqt \b, Sony / Mobile QuickTime (.MQV) US Pat 7,477,830 !:mime video/quicktime >8 string MSNV \b, MPEG-4 (.MP4) for SonyPSP !:mime audio/mp4 >8 string NDAS \b, MP4 v2 [ISO 14496-14] Nero Digital AAC Audio !:mime audio/mp4 >8 string NDSC \b, MPEG-4 (.MP4) Nero Cinema Profile !:mime video/mp4 >8 string NDSH \b, MPEG-4 (.MP4) Nero HDTV Profile !:mime video/mp4 >8 string NDSM \b, MPEG-4 (.MP4) Nero Mobile Profile !:mime video/mp4 >8 string NDSP \b, MPEG-4 (.MP4) Nero Portable Profile !:mime video/mp4 >8 string NDSS \b, MPEG-4 (.MP4) Nero Standard Profile !:mime video/mp4 >8 string NDXC \b, H.264/MPEG-4 AVC (.MP4) Nero Cinema Profile !:mime video/mp4 >8 string NDXH \b, H.264/MPEG-4 AVC (.MP4) Nero HDTV Profile !:mime video/mp4 >8 string NDXM \b, H.264/MPEG-4 AVC (.MP4) Nero Mobile Profile !:mime video/mp4 >8 string NDXP \b, H.264/MPEG-4 AVC (.MP4) Nero Portable Profile !:mime video/mp4 >8 string NDXS \b, H.264/MPEG-4 AVC (.MP4) Nero Standard Profile >8 string niko \b, Nikon Digital Camera !:mime video/mp4 >8 string odcf \b, OMA DCF DRM Format 2.0 (OMA-TS-DRM-DCF-V2_0-20060303-A) >8 string opf2 \b, OMA PDCF DRM Format 2.1 (OMA-TS-DRM-DCF-V2_1-20070724-C) >8 string opx2 \b, OMA PDCF DRM + XBS ext (OMA-TS-DRM_XBS-V1_0-20070529-C) >8 string pana \b, Panasonic Digital Camera >8 string piff \b, Protected Interoperable File Format >8 string pnvi ]b, Panasonic Video Intercom >8 string qt \b, Apple QuickTime (.MOV/QT) !:mime video/quicktime # HEIF image format # see https://nokiatech.github.io/heif/technical.html >8 string mif1 \b, HEIF Image !:mime image/heif >8 string msf1 \b, HEIF Image Sequence !:mime image/heif-sequence >8 string heic \b, HEIF Image HEVC Main or Main Still Picture Profile !:mime image/heic >8 string heix \b, HEIF Image HEVC Main 10 Profile !:mime image/heic >8 string hevc \b, HEIF Image Sequenz HEVC Main or Main Still Picture Profile !:mime image/heic-sequence >8 string hevx \b, HEIF Image Sequence HEVC Main 10 Profile !:mime image/heic-sequence # following HEIF brands are not mentioned in the heif technical info currently (Oct 2017) # but used in the reference implementation: # https://github.com/nokiatech/heif/blob/d5e9a21c8ba8df712bdf643021dd9f6518134776/Srcs/reader/hevcimagefilereader.cpp >8 string heim \b, HEIF Image L-HEVC !:mime image/heif >8 string heis \b, HEIF Image L-HEVC !:mime image/heif >8 string avic \b, HEIF Image AVC !:mime image/heif >8 string hevm \b, HEIF Image Sequence L-HEVC !:mime image/heif-sequence >8 string hevs \b, HEIF Image Sequence L-HEVC !:mime image/heif-sequence >8 string avcs \b, HEIF Image Sequence AVC !:mime image/heif-sequence # AVIF image format # see https://aomediacodec.github.io/av1-avif/ >8 string avif \b, AVIF Image !:mime image/avif >8 string avis \b, AVIF Image Sequence !:mime image/avif >8 string risx \b, Representation Index Segment for MPEG-2 TS Segments >8 string ROSS \b, Ross Video >8 string sdv \b, SD Memory Card Video >8 string ssc1 \b, Samsung stereo, single stream (patent pending) >8 string ssc2 \b, Samsung stereo, dual stream (patent pending) >8 string SEAU \b, Sony Home and Mobile Multimedia Platform (HMMP) >8 string SEBK \b, Sony Home and Mobile Multimedia Platform (HMMP) >8 string senv \b, Video contents Sony Entertainment Network >8 string sims \b, Media Segment for Sub-Indexed Media Segment format >8 string sisx \b, Single Index Segment forindex MPEG-2 TS >8 string ssss \b, Subsegment Index Segment used to index MPEG-2 Segments >8 string uvvu \b, UltraViolet file brand for DECE Common Format # MPEG sequences # Scans for all common MPEG header start codes 0 belong 0x00000001 >4 byte&0x1F 0x07 JVT NAL sequence, H.264 video >>5 byte 66 \b, baseline >>5 byte 77 \b, main >>5 byte 88 \b, extended >>7 byte x \b @ L %u 0 belong&0xFFFFFF00 0x00000100 >3 byte 0xBA MPEG sequence !:mime video/mpeg # http://fileformats.archiveteam.org/wiki/Enhanced_VOB # https://reposcope.com/mimetype/video/mpeg !:ext vob/evo/mpg/mpeg >>4 byte &0x40 \b, v2, program multiplex >>4 byte ^0x40 \b, v1, system multiplex >3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header) >3 byte&0x1F 0x07 MPEG sequence, H.264 video >>4 byte 66 \b, baseline >>4 byte 77 \b, main >>4 byte 88 \b, extended >>6 byte x \b @ L %u # GRR too general as it catches also FoxPro Memo example NG.FPT >3 byte 0xB0 MPEG sequence, v4 # TODO: maybe this extra line exclude FoxPro Memo example NG.FPT starting with 000001b0 00000100 00000000 #>>4 byte !0 MPEG sequence, v4 !:mime video/mpeg4-generic >>5 belong 0x000001B5 >>>9 byte &0x80 >>>>10 byte&0xF0 16 \b, video >>>>10 byte&0xF0 32 \b, still texture >>>>10 byte&0xF0 48 \b, mesh >>>>10 byte&0xF0 64 \b, face >>>9 byte&0xF8 8 \b, video >>>9 byte&0xF8 16 \b, still texture >>>9 byte&0xF8 24 \b, mesh >>>9 byte&0xF8 32 \b, face >>4 byte 1 \b, simple @ L1 >>4 byte 2 \b, simple @ L2 >>4 byte 3 \b, simple @ L3 >>4 byte 4 \b, simple @ L0 >>4 byte 17 \b, simple scalable @ L1 >>4 byte 18 \b, simple scalable @ L2 >>4 byte 33 \b, core @ L1 >>4 byte 34 \b, core @ L2 >>4 byte 50 \b, main @ L2 >>4 byte 51 \b, main @ L3 >>4 byte 53 \b, main @ L4 >>4 byte 66 \b, n-bit @ L2 >>4 byte 81 \b, scalable texture @ L1 >>4 byte 97 \b, simple face animation @ L1 >>4 byte 98 \b, simple face animation @ L2 >>4 byte 99 \b, simple face basic animation @ L1 >>4 byte 100 \b, simple face basic animation @ L2 >>4 byte 113 \b, basic animation text @ L1 >>4 byte 114 \b, basic animation text @ L2 >>4 byte 129 \b, hybrid @ L1 >>4 byte 130 \b, hybrid @ L2 >>4 byte 145 \b, advanced RT simple @ L! >>4 byte 146 \b, advanced RT simple @ L2 >>4 byte 147 \b, advanced RT simple @ L3 >>4 byte 148 \b, advanced RT simple @ L4 >>4 byte 161 \b, core scalable @ L1 >>4 byte 162 \b, core scalable @ L2 >>4 byte 163 \b, core scalable @ L3 >>4 byte 177 \b, advanced coding efficiency @ L1 >>4 byte 178 \b, advanced coding efficiency @ L2 >>4 byte 179 \b, advanced coding efficiency @ L3 >>4 byte 180 \b, advanced coding efficiency @ L4 >>4 byte 193 \b, advanced core @ L1 >>4 byte 194 \b, advanced core @ L2 >>4 byte 209 \b, advanced scalable texture @ L1 >>4 byte 210 \b, advanced scalable texture @ L2 >>4 byte 211 \b, advanced scalable texture @ L3 >>4 byte 225 \b, simple studio @ L1 >>4 byte 226 \b, simple studio @ L2 >>4 byte 227 \b, simple studio @ L3 >>4 byte 228 \b, simple studio @ L4 >>4 byte 229 \b, core studio @ L1 >>4 byte 230 \b, core studio @ L2 >>4 byte 231 \b, core studio @ L3 >>4 byte 232 \b, core studio @ L4 >>4 byte 240 \b, advanced simple @ L0 >>4 byte 241 \b, advanced simple @ L1 >>4 byte 242 \b, advanced simple @ L2 >>4 byte 243 \b, advanced simple @ L3 >>4 byte 244 \b, advanced simple @ L4 >>4 byte 245 \b, advanced simple @ L5 >>4 byte 247 \b, advanced simple @ L3b >>4 byte 248 \b, FGS @ L0 >>4 byte 249 \b, FGS @ L1 >>4 byte 250 \b, FGS @ L2 >>4 byte 251 \b, FGS @ L3 >>4 byte 252 \b, FGS @ L4 >>4 byte 253 \b, FGS @ L5 >3 byte 0xB5 MPEG sequence, v4 !:mime video/mpeg4-generic >>4 byte &0x80 >>>5 byte&0xF0 16 \b, video (missing profile header) >>>5 byte&0xF0 32 \b, still texture (missing profile header) >>>5 byte&0xF0 48 \b, mesh (missing profile header) >>>5 byte&0xF0 64 \b, face (missing profile header) >>4 byte&0xF8 8 \b, video (missing profile header) >>4 byte&0xF8 16 \b, still texture (missing profile header) >>4 byte&0xF8 24 \b, mesh (missing profile header) >>4 byte&0xF8 32 \b, face (missing profile header) >3 byte 0xB3 MPEG sequence !:mime video/mpeg >>12 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video >>12 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video >>12 belong 0x000001B5 \b, v2, >>>16 byte&0x0F 1 \b HP >>>16 byte&0x0F 2 \b Spt >>>16 byte&0x0F 3 \b SNR >>>16 byte&0x0F 4 \b MP >>>16 byte&0x0F 5 \b SP >>>17 byte&0xF0 64 \b@HL >>>17 byte&0xF0 96 \b@H-14 >>>17 byte&0xF0 128 \b@ML >>>17 byte&0xF0 160 \b@LL >>>17 byte &0x08 \b progressive >>>17 byte ^0x08 \b interlaced >>>17 byte&0x06 2 \b Y'CbCr 4:2:0 video >>>17 byte&0x06 4 \b Y'CbCr 4:2:2 video >>>17 byte&0x06 6 \b Y'CbCr 4:4:4 video >>11 byte &0x02 >>>75 byte &0x01 >>>>140 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video >>>>140 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video >>>>140 belong 0x000001B5 \b, v2, >>>>>144 byte&0x0F 1 \b HP >>>>>144 byte&0x0F 2 \b Spt >>>>>144 byte&0x0F 3 \b SNR >>>>>144 byte&0x0F 4 \b MP >>>>>144 byte&0x0F 5 \b SP >>>>>145 byte&0xF0 64 \b@HL >>>>>145 byte&0xF0 96 \b@H-14 >>>>>145 byte&0xF0 128 \b@ML >>>>>145 byte&0xF0 160 \b@LL >>>>>145 byte &0x08 \b progressive >>>>>145 byte ^0x08 \b interlaced >>>>>145 byte&0x06 2 \b Y'CbCr 4:2:0 video >>>>>145 byte&0x06 4 \b Y'CbCr 4:2:2 video >>>>>145 byte&0x06 6 \b Y'CbCr 4:4:4 video >>76 belong 0x000001B8 \b, v1, progressive Y'CbCr 4:2:0 video >>76 belong 0x000001B2 \b, v1, progressive Y'CbCr 4:2:0 video >>76 belong 0x000001B5 \b, v2, >>>80 byte&0x0F 1 \b HP >>>80 byte&0x0F 2 \b Spt >>>80 byte&0x0F 3 \b SNR >>>80 byte&0x0F 4 \b MP >>>80 byte&0x0F 5 \b SP >>>81 byte&0xF0 64 \b@HL >>>81 byte&0xF0 96 \b@H-14 >>>81 byte&0xF0 128 \b@ML >>>81 byte&0xF0 160 \b@LL >>>81 byte &0x08 \b progressive >>>81 byte ^0x08 \b interlaced >>>81 byte&0x06 2 \b Y'CbCr 4:2:0 video >>>81 byte&0x06 4 \b Y'CbCr 4:2:2 video >>>81 byte&0x06 6 \b Y'CbCr 4:4:4 video >>4 belong&0xFFFFFF00 0x78043800 \b, HD-TV 1920P >>>7 byte&0xF0 0x10 \b, 16:9 >>4 belong&0xFFFFFF00 0x50002D00 \b, SD-TV 1280I >>>7 byte&0xF0 0x10 \b, 16:9 >>4 belong&0xFFFFFF00 0x30024000 \b, PAL Capture >>>7 byte&0xF0 0x10 \b, 4:3 >>4 beshort&0xFFF0 0x2C00 \b, 4CIF >>>5 beshort&0x0FFF 0x01E0 \b NTSC >>>5 beshort&0x0FFF 0x0240 \b PAL >>>7 byte&0xF0 0x20 \b, 4:3 >>>7 byte&0xF0 0x30 \b, 16:9 >>>7 byte&0xF0 0x40 \b, 11:5 >>>7 byte&0xF0 0x80 \b, PAL 4:3 >>>7 byte&0xF0 0xC0 \b, NTSC 4:3 >>4 belong&0xFFFFFF00 0x2801E000 \b, LD-TV 640P >>>7 byte&0xF0 0x10 \b, 4:3 >>4 belong&0xFFFFFF00 0x1400F000 \b, 320x240 >>>7 byte&0xF0 0x10 \b, 4:3 >>4 belong&0xFFFFFF00 0x0F00A000 \b, 240x160 >>>7 byte&0xF0 0x10 \b, 4:3 >>4 belong&0xFFFFFF00 0x0A007800 \b, 160x120 >>>7 byte&0xF0 0x10 \b, 4:3 >>4 beshort&0xFFF0 0x1600 \b, CIF >>>5 beshort&0x0FFF 0x00F0 \b NTSC >>>5 beshort&0x0FFF 0x0120 \b PAL >>>7 byte&0xF0 0x20 \b, 4:3 >>>7 byte&0xF0 0x30 \b, 16:9 >>>7 byte&0xF0 0x40 \b, 11:5 >>>7 byte&0xF0 0x80 \b, PAL 4:3 >>>7 byte&0xF0 0xC0 \b, NTSC 4:3 >>>5 beshort&0x0FFF 0x0240 \b PAL 625 >>>>7 byte&0xF0 0x20 \b, 4:3 >>>>7 byte&0xF0 0x30 \b, 16:9 >>>>7 byte&0xF0 0x40 \b, 11:5 >>4 beshort&0xFFF0 0x2D00 \b, CCIR/ITU >>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 >>>5 beshort&0x0FFF 0x0240 \b PAL 625 >>>7 byte&0xF0 0x20 \b, 4:3 >>>7 byte&0xF0 0x30 \b, 16:9 >>>7 byte&0xF0 0x40 \b, 11:5 >>4 beshort&0xFFF0 0x1E00 \b, SVCD >>>5 beshort&0x0FFF 0x01E0 \b NTSC 525 >>>5 beshort&0x0FFF 0x0240 \b PAL 625 >>>7 byte&0xF0 0x20 \b, 4:3 >>>7 byte&0xF0 0x30 \b, 16:9 >>>7 byte&0xF0 0x40 \b, 11:5 >>7 byte&0x0F 1 \b, 23.976 fps >>7 byte&0x0F 2 \b, 24 fps >>7 byte&0x0F 3 \b, 25 fps >>7 byte&0x0F 4 \b, 29.97 fps >>7 byte&0x0F 5 \b, 30 fps >>7 byte&0x0F 6 \b, 50 fps >>7 byte&0x0F 7 \b, 59.94 fps >>7 byte&0x0F 8 \b, 60 fps >>11 byte &0x04 \b, Constrained # MPEG ADTS Audio (*.mpx/mxa/aac) # from dreesen@math.fu-berlin.de # modified to fully support MPEG ADTS # MP3, M1A # modified by Joerg Jenderek # GRR the original test are too common for many DOS files # so don't accept as MP3 until we've tested the rate # But also beat GEMDOS fonts 0 beshort&0xFFFE 0xFFFA # rates >2 byte&0xF0 !0 >>2 byte&0xF0 !0xF0 MPEG ADTS, layer III, v1 !:strength +20 !:mime audio/mpeg >>>2 byte&0xF0 0x10 \b, 32 kbps >>>2 byte&0xF0 0x20 \b, 40 kbps >>>2 byte&0xF0 0x30 \b, 48 kbps >>>2 byte&0xF0 0x40 \b, 56 kbps >>>2 byte&0xF0 0x50 \b, 64 kbps >>>2 byte&0xF0 0x60 \b, 80 kbps >>>2 byte&0xF0 0x70 \b, 96 kbps >>>2 byte&0xF0 0x80 \b, 112 kbps >>>2 byte&0xF0 0x90 \b, 128 kbps >>>2 byte&0xF0 0xA0 \b, 160 kbps >>>2 byte&0xF0 0xB0 \b, 192 kbps >>>2 byte&0xF0 0xC0 \b, 224 kbps >>>2 byte&0xF0 0xD0 \b, 256 kbps >>>2 byte&0xF0 0xE0 \b, 320 kbps # timing >>>2 byte&0x0C 0x00 \b, 44.1 kHz >>>2 byte&0x0C 0x04 \b, 48 kHz >>>2 byte&0x0C 0x08 \b, 32 kHz # channels/options >>>3 byte&0xC0 0x00 \b, Stereo >>>3 byte&0xC0 0x40 \b, JntStereo >>>3 byte&0xC0 0x80 \b, 2x Monaural >>>3 byte&0xC0 0xC0 \b, Monaural #>>>1 byte ^0x01 \b, Data Verify #>>>2 byte &0x02 \b, Packet Pad #>>>2 byte &0x01 \b, Custom Flag #>>>3 byte &0x08 \b, Copyrighted #>>>3 byte &0x04 \b, Original Source #>>>3 byte&0x03 1 \b, NR: 50/15 ms #>>>3 byte&0x03 3 \b, NR: CCIT J.17 # MP2, M1A 0 beshort&0xFFFE 0xFFFC MPEG ADTS, layer II, v1 !:mime audio/mpeg # rates >2 byte&0xF0 0x10 \b, 32 kbps >2 byte&0xF0 0x20 \b, 48 kbps >2 byte&0xF0 0x30 \b, 56 kbps >2 byte&0xF0 0x40 \b, 64 kbps >2 byte&0xF0 0x50 \b, 80 kbps >2 byte&0xF0 0x60 \b, 96 kbps >2 byte&0xF0 0x70 \b, 112 kbps >2 byte&0xF0 0x80 \b, 128 kbps >2 byte&0xF0 0x90 \b, 160 kbps >2 byte&0xF0 0xA0 \b, 192 kbps >2 byte&0xF0 0xB0 \b, 224 kbps >2 byte&0xF0 0xC0 \b, 256 kbps >2 byte&0xF0 0xD0 \b, 320 kbps >2 byte&0xF0 0xE0 \b, 384 kbps # timing >2 byte&0x0C 0x00 \b, 44.1 kHz >2 byte&0x0C 0x04 \b, 48 kHz >2 byte&0x0C 0x08 \b, 32 kHz # channels/options >3 byte&0xC0 0x00 \b, Stereo >3 byte&0xC0 0x40 \b, JntStereo >3 byte&0xC0 0x80 \b, 2x Monaural >3 byte&0xC0 0xC0 \b, Monaural #>1 byte ^0x01 \b, Data Verify #>2 byte &0x02 \b, Packet Pad #>2 byte &0x01 \b, Custom Flag #>3 byte &0x08 \b, Copyrighted #>3 byte &0x04 \b, Original Source #>3 byte&0x03 1 \b, NR: 50/15 ms #>3 byte&0x03 3 \b, NR: CCIT J.17 # MPA, M1A # updated by Joerg Jenderek # GRR the original test are too common for many DOS files, so test 32 <= kbits <= 448 # GRR this test is still too general as it catches a BOM of UTF-16 files (0xFFFE) # FIXME: Almost all little endian UTF-16 text with BOM are clobbered by these entries #0 beshort&0xFFFE 0xFFFE #>2 ubyte&0xF0 >0x0F #>>2 ubyte&0xF0 <0xE1 MPEG ADTS, layer I, v1 ## rate #>>>2 byte&0xF0 0x10 \b, 32 kbps #>>>2 byte&0xF0 0x20 \b, 64 kbps #>>>2 byte&0xF0 0x30 \b, 96 kbps #>>>2 byte&0xF0 0x40 \b, 128 kbps #>>>2 byte&0xF0 0x50 \b, 160 kbps #>>>2 byte&0xF0 0x60 \b, 192 kbps #>>>2 byte&0xF0 0x70 \b, 224 kbps #>>>2 byte&0xF0 0x80 \b, 256 kbps #>>>2 byte&0xF0 0x90 \b, 288 kbps #>>>2 byte&0xF0 0xA0 \b, 320 kbps #>>>2 byte&0xF0 0xB0 \b, 352 kbps #>>>2 byte&0xF0 0xC0 \b, 384 kbps #>>>2 byte&0xF0 0xD0 \b, 416 kbps #>>>2 byte&0xF0 0xE0 \b, 448 kbps ## timing #>>>2 byte&0x0C 0x00 \b, 44.1 kHz #>>>2 byte&0x0C 0x04 \b, 48 kHz #>>>2 byte&0x0C 0x08 \b, 32 kHz ## channels/options #>>>3 byte&0xC0 0x00 \b, Stereo #>>>3 byte&0xC0 0x40 \b, JntStereo #>>>3 byte&0xC0 0x80 \b, 2x Monaural #>>>3 byte&0xC0 0xC0 \b, Monaural ##>1 byte ^0x01 \b, Data Verify ##>2 byte &0x02 \b, Packet Pad ##>2 byte &0x01 \b, Custom Flag ##>3 byte &0x08 \b, Copyrighted ##>3 byte &0x04 \b, Original Source ##>3 byte&0x03 1 \b, NR: 50/15 ms ##>3 byte&0x03 3 \b, NR: CCIT J.17 # MP3, M2A 0 beshort&0xFFFE 0xFFF2 MPEG ADTS, layer III, v2 !:mime audio/mpeg # rate >2 byte&0xF0 0x10 \b, 8 kbps >2 byte&0xF0 0x20 \b, 16 kbps >2 byte&0xF0 0x30 \b, 24 kbps >2 byte&0xF0 0x40 \b, 32 kbps >2 byte&0xF0 0x50 \b, 40 kbps >2 byte&0xF0 0x60 \b, 48 kbps >2 byte&0xF0 0x70 \b, 56 kbps >2 byte&0xF0 0x80 \b, 64 kbps >2 byte&0xF0 0x90 \b, 80 kbps >2 byte&0xF0 0xA0 \b, 96 kbps >2 byte&0xF0 0xB0 \b, 112 kbps >2 byte&0xF0 0xC0 \b, 128 kbps >2 byte&0xF0 0xD0 \b, 144 kbps >2 byte&0xF0 0xE0 \b, 160 kbps # timing >2 byte&0x0C 0x00 \b, 22.05 kHz >2 byte&0x0C 0x04 \b, 24 kHz >2 byte&0x0C 0x08 \b, 16 kHz # channels/options >3 byte&0xC0 0x00 \b, Stereo >3 byte&0xC0 0x40 \b, JntStereo >3 byte&0xC0 0x80 \b, 2x Monaural >3 byte&0xC0 0xC0 \b, Monaural #>1 byte ^0x01 \b, Data Verify #>2 byte &0x02 \b, Packet Pad #>2 byte &0x01 \b, Custom Flag #>3 byte &0x08 \b, Copyrighted #>3 byte &0x04 \b, Original Source #>3 byte&0x03 1 \b, NR: 50/15 ms #>3 byte&0x03 3 \b, NR: CCIT J.17 # MP2, M2A 0 beshort&0xFFFE 0xFFF4 MPEG ADTS, layer II, v2 !:mime audio/mpeg # rate >2 byte&0xF0 0x10 \b, 8 kbps >2 byte&0xF0 0x20 \b, 16 kbps >2 byte&0xF0 0x30 \b, 24 kbps >2 byte&0xF0 0x40 \b, 32 kbps >2 byte&0xF0 0x50 \b, 40 kbps >2 byte&0xF0 0x60 \b, 48 kbps >2 byte&0xF0 0x70 \b, 56 kbps >2 byte&0xF0 0x80 \b, 64 kbps >2 byte&0xF0 0x90 \b, 80 kbps >2 byte&0xF0 0xA0 \b, 96 kbps >2 byte&0xF0 0xB0 \b, 112 kbps >2 byte&0xF0 0xC0 \b, 128 kbps >2 byte&0xF0 0xD0 \b, 144 kbps >2 byte&0xF0 0xE0 \b, 160 kbps # timing >2 byte&0x0C 0x00 \b, 22.05 kHz >2 byte&0x0C 0x04 \b, 24 kHz >2 byte&0x0C 0x08 \b, 16 kHz # channels/options >3 byte&0xC0 0x00 \b, Stereo >3 byte&0xC0 0x40 \b, JntStereo >3 byte&0xC0 0x80 \b, 2x Monaural >3 byte&0xC0 0xC0 \b, Monaural #>1 byte ^0x01 \b, Data Verify #>2 byte &0x02 \b, Packet Pad #>2 byte &0x01 \b, Custom Flag #>3 byte &0x08 \b, Copyrighted #>3 byte &0x04 \b, Original Source #>3 byte&0x03 1 \b, NR: 50/15 ms #>3 byte&0x03 3 \b, NR: CCIT J.17 # MPA, M2A 0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2 !:mime audio/mpeg # rate >2 byte&0xF0 0x10 \b, 32 kbps >2 byte&0xF0 0x20 \b, 48 kbps >2 byte&0xF0 0x30 \b, 56 kbps >2 byte&0xF0 0x40 \b, 64 kbps >2 byte&0xF0 0x50 \b, 80 kbps >2 byte&0xF0 0x60 \b, 96 kbps >2 byte&0xF0 0x70 \b, 112 kbps >2 byte&0xF0 0x80 \b, 128 kbps >2 byte&0xF0 0x90 \b, 144 kbps >2 byte&0xF0 0xA0 \b, 160 kbps >2 byte&0xF0 0xB0 \b, 176 kbps >2 byte&0xF0 0xC0 \b, 192 kbps >2 byte&0xF0 0xD0 \b, 224 kbps >2 byte&0xF0 0xE0 \b, 256 kbps # timing >2 byte&0x0C 0x00 \b, 22.05 kHz >2 byte&0x0C 0x04 \b, 24 kHz >2 byte&0x0C 0x08 \b, 16 kHz # channels/options >3 byte&0xC0 0x00 \b, Stereo >3 byte&0xC0 0x40 \b, JntStereo >3 byte&0xC0 0x80 \b, 2x Monaural >3 byte&0xC0 0xC0 \b, Monaural #>1 byte ^0x01 \b, Data Verify #>2 byte &0x02 \b, Packet Pad #>2 byte &0x01 \b, Custom Flag #>3 byte &0x08 \b, Copyrighted #>3 byte &0x04 \b, Original Source #>3 byte&0x03 1 \b, NR: 50/15 ms #>3 byte&0x03 3 \b, NR: CCIT J.17 # MP3, M25A 0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5 !:mime audio/mpeg # rate >2 byte&0xF0 0x10 \b, 8 kbps >2 byte&0xF0 0x20 \b, 16 kbps >2 byte&0xF0 0x30 \b, 24 kbps >2 byte&0xF0 0x40 \b, 32 kbps >2 byte&0xF0 0x50 \b, 40 kbps >2 byte&0xF0 0x60 \b, 48 kbps >2 byte&0xF0 0x70 \b, 56 kbps >2 byte&0xF0 0x80 \b, 64 kbps >2 byte&0xF0 0x90 \b, 80 kbps >2 byte&0xF0 0xA0 \b, 96 kbps >2 byte&0xF0 0xB0 \b, 112 kbps >2 byte&0xF0 0xC0 \b, 128 kbps >2 byte&0xF0 0xD0 \b, 144 kbps >2 byte&0xF0 0xE0 \b, 160 kbps # timing >2 byte&0x0C 0x00 \b, 11.025 kHz >2 byte&0x0C 0x04 \b, 12 kHz >2 byte&0x0C 0x08 \b, 8 kHz # channels/options >3 byte&0xC0 0x00 \b, Stereo >3 byte&0xC0 0x40 \b, JntStereo >3 byte&0xC0 0x80 \b, 2x Monaural >3 byte&0xC0 0xC0 \b, Monaural #>1 byte ^0x01 \b, Data Verify #>2 byte &0x02 \b, Packet Pad #>2 byte &0x01 \b, Custom Flag #>3 byte &0x08 \b, Copyrighted #>3 byte &0x04 \b, Original Source #>3 byte&0x03 1 \b, NR: 50/15 ms #>3 byte&0x03 3 \b, NR: CCIT J.17 # AAC (aka MPEG-2 NBC audio) and MPEG-4 audio # Stored AAC streams (instead of the MP4 format) 0 string ADIF MPEG ADIF, AAC !:mime audio/x-hx-aac-adif >4 byte &0x80 >>13 byte &0x10 \b, VBR >>13 byte ^0x10 \b, CBR >>16 byte&0x1E 0x02 \b, single stream >>16 byte&0x1E 0x04 \b, 2 streams >>16 byte&0x1E 0x06 \b, 3 streams >>16 byte &0x08 \b, 4 or more streams >>16 byte &0x10 \b, 8 or more streams >>4 byte &0x80 \b, Copyrighted >>13 byte &0x40 \b, Original Source >>13 byte &0x20 \b, Home Flag >4 byte ^0x80 >>4 byte &0x10 \b, VBR >>4 byte ^0x10 \b, CBR >>7 byte&0x1E 0x02 \b, single stream >>7 byte&0x1E 0x04 \b, 2 streams >>7 byte&0x1E 0x06 \b, 3 streams >>7 byte &0x08 \b, 4 or more streams >>7 byte &0x10 \b, 8 or more streams >>4 byte &0x40 \b, Original Stream(s) >>4 byte &0x20 \b, Home Source # Live or stored single AAC stream (used with MPEG-2 systems) 0 beshort&0xFFF6 0xFFF0 MPEG ADTS, AAC !:mime audio/x-hx-aac-adts >1 byte &0x08 \b, v2 >1 byte ^0x08 \b, v4 # profile >>2 byte &0xC0 \b LTP >2 byte&0xc0 0x00 \b Main >2 byte&0xc0 0x40 \b LC >2 byte&0xc0 0x80 \b SSR # timing >2 byte&0x3c 0x00 \b, 96 kHz >2 byte&0x3c 0x04 \b, 88.2 kHz >2 byte&0x3c 0x08 \b, 64 kHz >2 byte&0x3c 0x0c \b, 48 kHz >2 byte&0x3c 0x10 \b, 44.1 kHz >2 byte&0x3c 0x14 \b, 32 kHz >2 byte&0x3c 0x18 \b, 24 kHz >2 byte&0x3c 0x1c \b, 22.05 kHz >2 byte&0x3c 0x20 \b, 16 kHz >2 byte&0x3c 0x24 \b, 12 kHz >2 byte&0x3c 0x28 \b, 11.025 kHz >2 byte&0x3c 0x2c \b, 8 kHz # channels >2 beshort&0x01c0 0x0040 \b, monaural >2 beshort&0x01c0 0x0080 \b, stereo >2 beshort&0x01c0 0x00c0 \b, stereo + center >2 beshort&0x01c0 0x0100 \b, stereo+center+LFE >2 beshort&0x01c0 0x0140 \b, surround >2 beshort&0x01c0 0x0180 \b, surround + LFE >2 beshort &0x01C0 \b, surround + side #>1 byte ^0x01 \b, Data Verify #>2 byte &0x02 \b, Custom Flag #>3 byte &0x20 \b, Original Stream #>3 byte &0x10 \b, Home Source #>3 byte &0x08 \b, Copyrighted # Live MPEG-4 audio streams (instead of RTP FlexMux) 0 beshort&0xFFE0 0x56E0 MPEG-4 LOAS !:mime audio/x-mp4a-latm #>1 beshort&0x1FFF x \b, %u byte packet >3 byte&0xE0 0x40 >>4 byte&0x3C 0x04 \b, single stream >>4 byte&0x3C 0x08 \b, 2 streams >>4 byte&0x3C 0x0C \b, 3 streams >>4 byte &0x08 \b, 4 or more streams >>4 byte &0x20 \b, 8 or more streams >3 byte&0xC0 0 >>4 byte&0x78 0x08 \b, single stream >>4 byte&0x78 0x10 \b, 2 streams >>4 byte&0x78 0x18 \b, 3 streams >>4 byte &0x20 \b, 4 or more streams >>4 byte &0x40 \b, 8 or more streams # This magic isn't strong enough (matches plausible ISO-8859-1 text) #0 beshort 0x4DE1 MPEG-4 LO-EP audio stream #!:mime audio/x-mp4a-latm # Summary: FLI animation format # Created by: Daniel Quinlan # Modified by (1): Abel Cheung (avoid over-generic detection) 4 leshort 0xAF11 # standard FLI always has 320x200 resolution and 8 bit color >8 leshort 320 >>10 leshort 200 >>>12 leshort 8 FLI animation, 320x200x8 !:mime video/x-fli >>>>6 leshort x \b, %d frames # frame speed is multiple of 1/70s >>>>16 leshort x \b, %d/70s per frame # Summary: FLC animation format # Created by: Daniel Quinlan # Modified by (1): Abel Cheung (avoid over-generic detection) 4 leshort 0xAF12 # standard FLC always use 8 bit color >12 leshort 8 FLC animation !:mime video/x-flc >>8 leshort x \b, %d >>10 leshort x \bx%dx8 >>6 uleshort x \b, %d frames >>16 uleshort x \b, %dms per frame # DL animation format # XXX - collision with most `mips' magic # # I couldn't find a real magic number for these, however, this # -appears- to work. Note that it might catch other files, too, so be # careful! # # Note that title and author appear in the two 20-byte chunks # at decimal offsets 2 and 22, respectively, but they are XOR'ed with # 255 (hex FF)! The DL format is really bad. # #0 byte 1 DL version 1, medium format (160x100, 4 images/screen) #!:mime video/x-unknown #>42 byte x - %d screens, #>43 byte x %d commands #0 byte 2 DL version 2 #!:mime video/x-unknown #>1 byte 1 - large format (320x200,1 image/screen), #>1 byte 2 - medium format (160x100,4 images/screen), #>1 byte >2 - unknown format, #>42 byte x %d screens, #>43 byte x %d commands # Based on empirical evidence, DL version 3 have several nulls following the # \003. Most of them start with non-null values at hex offset 0x34 or so. #0 string \3\0\0\0\0\0\0\0\0\0\0\0 DL version 3 # iso 13818 transport stream # # from Oskar Schirmer Feb 3, 2001 (ISO 13818.1) # syncbyte 8 bit 0x47 # 188 bytes per packet 0 byte 0x47 >188 byte 0x47 >>376 byte 0x47 >>>564 byte 0x47 >>>>752 byte 0x47 MPEG transport stream data !:mime video/MP2T !:ext ts # Blu-ray disc Audio-Video MPEG-2 transport stream # From: Alexandre Iooss # URL: https://en.wikipedia.org/wiki/MPEG_transport_stream # Note: similar to ISO 13818.1 but with 4 extra bytes per packets 4 byte 0x47 >196 byte 0x47 >>388 byte 0x47 >>>580 byte 0x47 >>>>772 byte 0x47 BDAV MPEG-2 Transport Stream (M2TS) !:mime video/MP2T !:ext m2ts/mts # DIF digital video file format 0 belong&0xffffff00 0x1f070000 DIF !:mime video/x-dv >4 byte &0x01 (DVCPRO) movie file >4 byte ^0x01 (DV) movie file >3 byte &0x80 (PAL) >3 byte ^0x80 (NTSC) # MNG Video Format, 0 string \x8aMNG MNG video data, !:mime video/x-mng >4 belong !0x0d0a1a0a CORRUPTED, >4 belong 0x0d0a1a0a >>16 belong x %d x >>20 belong x %d # JNG Video Format, 0 string \x8bJNG JNG video data, !:mime video/x-jng >4 belong !0x0d0a1a0a CORRUPTED, >4 belong 0x0d0a1a0a >>16 belong x %d x >>20 belong x %d # Vivo video (Wolfram Kleff) 3 string \x0D\x0AVersion:Vivo Vivo video data # ABC (alembic.io 3d models) 0 string 0gawa ABC 3d model #--------------------------------------------------------------------------- # HVQM4: compressed movie format designed by Hudson for Nintendo GameCube # From Mark Sheppard , 2002-10-03 # 0 string HVQM4 %s >6 string >\0 v%s >0 byte x GameCube movie, >0x34 ubeshort x %d x >0x36 ubeshort x %d, >0x26 ubeshort x %dus, >0x42 ubeshort 0 no audio >0x42 ubeshort >0 %dHz audio # From: Stefan A. Haubenthal # Update: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/VOB 0 string DVDVIDEO-VTS Video title set, !:mime video/x-ifo !:ext ifo/bup >0x21 byte x v%x 0 string DVDVIDEO-VMG Video manager, !:mime video/x-ifo !:ext ifo/bup >0x21 byte x v%x # From: Stefan A. Haubenthal 0 string xMovieSetter MovieSetter movie 0 string xSceneEditor MovieSetter movie # From: Behan Webster # NuppelVideo used by Mythtv (*.nuv) # Note: there are two identical stanzas here differing only in the # initial string matched. It used to be done with a regex, but we're # trying to get rid of those. 0 string NuppelVideo MythTV NuppelVideo >12 string x v%s >20 lelong x (%d >24 lelong x \bx%d), >36 string P \bprogressive, >36 string I \binterlaced, >40 ledouble x \baspect:%.2f, >48 ledouble x \bfps:%.2f 0 string MythTV MythTV NuppelVideo >12 string x v%s >20 lelong x (%d >24 lelong x \bx%d), >36 string P \bprogressive, >36 string I \binterlaced, >40 ledouble x \baspect:%.2f, >48 ledouble x \bfps:%.2f # MPEG file # MPEG sequences # FIXME: This section is from the old magic.mime file and needs # integrating with the rest #0 belong 0x000001BA #>4 byte &0x40 #!:mime video/mp2p #>4 byte ^0x40 #!:mime video/mpeg #0 belong 0x000001BB #!:mime video/mpeg #0 belong 0x000001B0 #!:mime video/mp4v-es #0 belong 0x000001B5 #!:mime video/mp4v-es #0 belong 0x000001B3 #!:mime video/mpv #0 belong&0xFF5FFF10 0x47400010 #!:mime video/mp2t #0 belong 0x00000001 #>4 byte&0x1F 0x07 #!:mime video/h264 # Type: Bink Video # Extension: .bik # URL: https://wiki.multimedia.cx/index.php?title=Bink_Container # From: 2008-07-18 0 name bik #>4 ulelong x size %d >20 ulelong x \b, %d >24 ulelong x \bx%d >8 ulelong x \b, %d frames >32 ulelong x at rate %d/ >28 ulelong >1 \b%d >40 ulelong =0 \b, no audio >40 ulelong !0 \b, %d audio track >>40 ulelong !1 \bs # follow properties of the first audio track only >>48 uleshort x %dHz >>51 byte&0x20 0 mono >>51 byte&0x20 !0 stereo #>>51 byte&0x10 0 FFT #>>51 byte&0x10 !0 DCT 0 string BIK >3 regex =[bdfghi] Bink Video rev.%s >>0 use bik 0 string KB2 >3 regex =[adfghi] Bink Video 2 rev.%s >>0 use bik # Type: NUT Container # URL: https://wiki.multimedia.cx/index.php?title=NUT # From: Adam Buchbinder 0 string nut/multimedia\ container\0 NUT multimedia container # Type: Nullsoft Video (NSV) # URL: https://wiki.multimedia.cx/index.php?title=Nullsoft_Video # From: Mike Melanson 0 string NSVf Nullsoft Video # Type: REDCode Video # URL: https://www.red.com/ ; https://wiki.multimedia.cx/index.php?title=REDCode # From: Mike Melanson 4 string RED1 REDCode Video # Type: MTV Multimedia File # URL: https://wiki.multimedia.cx/index.php?title=MTV # From: Mike Melanson 0 string AMVS MTV Multimedia File # Type: ARMovie # URL: https://wiki.multimedia.cx/index.php?title=ARMovie # From: Mike Melanson 0 string ARMovie\012 ARMovie # Type: Interplay MVE Movie # URL: https://wiki.multimedia.cx/index.php?title=Interplay_MVE # From: Mike Melanson 0 string Interplay\040MVE\040File\032 Interplay MVE Movie # Type: Windows Television DVR File # URL: https://wiki.multimedia.cx/index.php?title=WTV # From: Mike Melanson # This takes the form of a Windows-style GUID 0 bequad 0xB7D800203749DA11 >8 bequad 0xA64E0007E95EAD8D Windows Television DVR Media # Type: Sega FILM/CPK Multimedia # URL: https://wiki.multimedia.cx/index.php?title=Sega_FILM # From: Mike Melanson 0 string FILM Sega FILM/CPK Multimedia, >32 belong x %d x >28 belong x %d # Type: Nintendo THP Multimedia # URL: https://wiki.multimedia.cx/index.php?title=THP # From: Mike Melanson 0 string THP\0 Nintendo THP Multimedia # Type: BBC Dirac Video # URL: https://wiki.multimedia.cx/index.php?title=Dirac # From: Mike Melanson 0 string BBCD BBC Dirac Video # Type: RAD Game Tools Smacker Multimedia # URL: https://wiki.multimedia.cx/index.php?title=Smacker # From: Mike Melanson 0 string SMK RAD Game Tools Smacker Multimedia >3 byte x version %c, >4 lelong x %d x >8 lelong x %d, >12 lelong x %d frames # Material Exchange Format # More information: # https://en.wikipedia.org/wiki/Material_Exchange_Format # http://www.freemxf.org/ 0 string \x06\x0e\x2b\x34\x02\x05\x01\x01\x0d\x01\x02\x01\x01\x02 Material exchange container format !:ext mxf !:mime application/mxf # Recognize LucasArts Smush video files (cf. # https://wiki.multimedia.cx/index.php/Smush) 0 string ANIM >8 string AHDR LucasArts Smush Animation Format (SAN) video 0 string SANM >8 string SHDR LucasArts Smush v2 (SANM) video # Type: Scaleform video # Extension: .usm # URL: https://wiki.multimedia.cx/index.php/USM # From: David Korth 0 string CRID >32 string @UTF Scaleform video # http://www.jerrysguide.com/tips/demystify-tvs-file-format.html 0 string TVS\015\012 >&0 string Version\040 TeamViewer Session File >>&0 string x \b, version %s # SER file format - simple uncompressed video format for astronomical use # Initially developed by Lucam Recorder, # as of 2021 maintained by Heiko Wilkens, Grischa Hahn # Typical extensions: .SER # http://www.grischa-hahn.homepage.t-online.de/astro/ser/SER%20Doc%20V3b.pdf 0 string LUCAM-RECORDER SER video sequence !:ext ser >18 lelong 0 \b, bayer: mono >18 lelong 8 \b, bayer: RGGB >18 lelong 9 \b, bayer: GRBG >18 lelong 10 \b, bayer: GBRG >18 lelong 11 \b, bayer: BGGR >18 lelong 16 \b, bayer: CYYM >18 lelong 17 \b, bayer: YCMY >18 lelong 18 \b, bayer: YMCY >18 lelong 19 \b, bayer: MYYC >18 lelong 100 \b, bayer: RGB >18 lelong 101 \b, bayer: BGR >22 lelong 0 \b, big-endian >22 lelong 1 \b, little-endian >26 lelong x \b, width: %d >30 lelong x \b, height: %d >34 lelong x \b, %d bit >38 lelong x \b, frames: %d # https://wiki.multimedia.cx/index.php/Duck_IVF 0 string DKIF Duck IVF video file !:mime video/x-ivf >4 leshort >0 \b, version %d >8 string x \b, codec %s >12 leshort x \b, %d >14 leshort x \bx%d >24 lelong >0 \b, %d frames # libplacebo cache file # https://libplacebo.org 0 string pl_cache libplacebo cache >8 ulelong x \b, version %u >12 ulelong =0 \b, empty >12 ulelong =1 \b, 1 entry >12 ulelong >1 \b, %u entries >4 byte 1 \b, version 3.00.00 >4 byte 2 \b, version 3.03.00 >4 byte 3 \b, version 4.00.00 >4 byte 4 \b, version 4.02.00 >4 byte 5 \b, version 5.00.00 # live2d: file(1) magic for Live2D Cubism file formats # https://www.live2d.com/en/ 0 string/4 MOC3 Live2D Cubism MOC3 >4 byte 0 \b, SDK version invalid/unknown (%d) >4 byte 1 \b, SDK version 3.0.00 - 3.2.07 (%d) >4 byte 2 \b, SDK version 3.3.00 - 3.3.03 (%d) >4 byte 3 \b, SDK version 4.0.00 - 4.1.05 (%d) >4 byte 4 \b, SDK version 4.2.00 - 4.2.02 (%d) >4 byte 5 \b, SDK version 5.0.00 (%d) >4 byte >5 \b, SDK version unknown (%d) >5 byte 0 \b, little endian >5 byte >0 \b, big endian !:mime application/x-moc3-data !:ext moc3 0 string/4 CAFF Live2D Cubism archive >4 ubyte x version %d >&0 ubyte x \b.%d >&1 ubyte x \b.%d >7 string/4 =---- \b, standard format >7 string/4 !---- \b, unknown format (%.4s) >11 ubyte x version %d >&0 ubyte x \b.%d >&1 ubyte x \b.%d >14 belong =0 \b, no obfuscation >14 belong !0 \b, XOR obfuscation key %d !:mime application/x-cubism-archive !:ext cmo3/can3 file-5.46/magic/Magdir/aout000664 023540 023540 00000003302 14015050424 017300 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: aout,v 1.1 2013/01/09 22:37:23 christos Exp $ # aout: file(1) magic for a.out executable/object/etc entries that # handle executables on multiple platforms. # # # Little-endian 32-bit-int a.out, merged from bsdi (for BSD/OS, from # BSDI), netbsd, and vax (for UNIX/32V and BSD) # # XXX - is there anything we can look at to distinguish BSD/OS 386 from # NetBSD 386 from various VAX binaries? The BSD/OS shared library flag # works only for binaries using shared libraries. Grabbing the entry # point from the a.out header, using it to find the first code executed # in the program, and looking at that might help. # 0 lelong 0407 a.out little-endian 32-bit executable >16 lelong >0 not stripped >32 byte 0x6a (uses BSD/OS shared libs) 0 lelong 0410 a.out little-endian 32-bit pure executable >16 lelong >0 not stripped >32 byte 0x6a (uses BSD/OS shared libs) 0 lelong 0413 a.out little-endian 32-bit demand paged pure executable >16 lelong >0 not stripped >32 byte 0x6a (uses BSD/OS shared libs) # # Big-endian 32-bit-int a.out, merged from sun (for old 68010 SunOS a.out), # mips (for old 68020(!) SGI a.out), and netbsd (for old big-endian a.out). # # XXX - is there anything we can look at to distinguish old SunOS 68010 # from old 68020 IRIX from old NetBSD? Again, I guess we could look at # the first instruction or instructions in the program. # 0 belong 0407 a.out big-endian 32-bit executable >16 belong >0 not stripped 0 belong 0410 a.out big-endian 32-bit pure executable >16 belong >0 not stripped 0 belong 0413 a.out big-endian 32-bit demand paged executable >16 belong >0 not stripped file-5.46/magic/Magdir/apache000775 023540 023540 00000001466 14015050424 017565 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: apache,v 1.1 2017/04/11 14:52:15 christos Exp $ # apache: file(1) magic for Apache Big Data formats # Avro files 0 string Obj Apache Avro >3 byte x version %d # ORC files # Important information is in file footer, which we can't index to :( 0 string ORC Apache ORC # Parquet files 0 string PAR1 Apache Parquet # Hive RC files 0 string RCF Apache Hive RC file >3 byte x version %d # Sequence files (and the careless first version of RC file) 0 string SEQ >3 byte <6 Apache Hadoop Sequence file version %d >3 byte >6 Apache Hadoop Sequence file version %d >3 byte =6 >>5 string org.apache.hadoop.hive.ql.io.RCFile$KeyBuffer Apache Hive RC file version 0 >>3 default x Apache Hadoop Sequence file version 6 file-5.46/magic/Magdir/apl000664 023540 023540 00000000424 14015050424 017106 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: apl,v 1.6 2009/09/19 16:28:07 christos Exp $ # apl: file(1) magic for APL (see also "pdp" and "vax" for other APL # workspaces) # 0 long 0100554 APL workspace (Ken's original?) file-5.46/magic/Magdir/apple000664 023540 023540 00000075106 14700541414 017451 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: apple,v 1.51 2024/09/04 19:06:12 christos Exp $ # apple: file(1) magic for Apple file formats # 0 search/1/t FiLeStArTfIlEsTaRt binscii (apple ][) text 0 string \x0aGL Binary II (apple ][) data 0 string \x76\xff Squeezed (apple ][) data 0 string NuFile NuFile archive (apple ][) data 0 string N\xf5F\xe9l\xe5 NuFile archive (apple ][) data 0 belong 0x00051600 AppleSingle encoded Macintosh file 0 belong 0x00051607 AppleDouble encoded Macintosh file # Type: Apple Emulator A2R format # From: Greg Wildman # Ref: https://applesaucefdc.com/a2r2-reference/ # Ref: https://applesaucefdc.com/a2r/ 0 string A2R >3 string \x31\xFF\x0A\x0D\x0A Applesauce A2R 1.x Disk Image >>0 use applesauce >3 string \x32\xFF\x0A\x0D\x0A Applesauce A2R 2.x Disk Image >>0 use applesauce >3 string \x33\xFF\x0A\x0D\x0A Applesauce A2R 3.x Disk Image >>0 use applesauce 0 name applesauce >8 string INFO >>49 byte 01 \b, 5.25″ SS 40trk >>49 byte 02 \b, 3.5″ DS 80trk >>49 byte 03 \b, 5.25″ DS 80trk >>49 byte 04 \b, 5.25″ DS 40trk >>49 byte 05 \b, 3.5″ DS 80trk >>49 byte 06 \b, 8″ DS >>50 byte 01 \b, write protected >>51 byte 01 \b, cross track synchronized >>17 string/T x \b, %.32s # Type: Apple Emulator WOZ format # From: Greg Wildman # Ref: https://applesaucefdc.com/woz/reference/ # Ref: https://applesaucefdc.com/woz/reference2/ 0 string WOZ >3 string \x31\xFF\x0A\x0D\x0A Apple ][ WOZ 1.0 Disk Image >>0 use applewoz >3 string \x32\xFF\x0A\x0D\x0A Apple ][ WOZ 2.0 Disk Image >>0 use applewoz 0 name applewoz >12 string INFO >>21 byte 01 \b, 5.25 inch >>21 byte 02 \b, 3.5 inch >>22 byte 01 \b, write protected >>23 byte 01 \b, cross track synchronized >>25 string/T x \b, %.32s # Type: Apple Macintosh Emulator MOOF format # From: Greg Wildman # Ref: https://applesaucefdc.com/moof-reference/ 0 string MOOF >4 string \xFF\x0A\x0D\x0A Apple Macintosh MOOF Disk Image >>12 string INFO >>>21 byte 01 \b, SSDD GCR (400K) >>>21 byte 02 \b, DSDD GCR (800K) >>>21 byte 03 \b, DSHD MFM (1.44M) >>>22 byte 01 \b, write protected >>>23 byte 01 \b, cross track synchronized >>>25 string/T x \b, %.32s # Type: Apple Emulator disk images # From: Greg Wildman # ProDOS boot loader? 0 string \x01\x38\xB0\x03\x4C Apple ProDOS Image # Detect Volume Directory block ($02) >0x400 string \x00\x00\x03\x00 >>0x404 byte &0xF0 >>>0x405 string x \b, Volume /%s >>>0x429 uleshort x \b, %u Blocks # ProDOS ordered ? >0xb00 string \x00\x00\x03\x00 >>0xb04 byte &0xF0 >>>0xb05 string x \b, Volume /%s >>>0xb29 uleshort x \b, %u Blocks # # Proboot HD 0 string \x01\x8A\x48\xD8\x2C\x82\xC0\x8D\x0E\xC0\x8D\x0C Apple ProDOS ProBoot Image >0x400 string \x00\x00\x03\x00 >>0x404 byte &0xF0 >>>0x405 string x \b, Volume /%s >>>0x429 uleshort x \b, %u Blocks >0xb00 string \x00\x00\x03\x00 >>0xb04 byte &0xF0 >>>0xb05 string x \b, Volume /%s >>>0xb29 uleshort x \b, %u Blocks 0 string \x01\xA8\x8A\x20\x7B\xF8\x29\x07\x09\xC0\x99\x30 Apple ProDOS ProBoot Image >0x400 string \x00\x00\x03\x00 >>0x404 byte &0xF0 >>>0x405 string x \b, Volume /%s >>>0x429 uleshort x \b, %u Blocks >0xb00 string \x00\x00\x03\x00 >>0xb04 byte &0xF0 >>>0xb05 string x \b, Volume /%s >>>0xb29 uleshort x \b, %u Blocks 0 string \x01\x4A\xD0\x34\xE6\x3D\x8A\x20\x7B\xF8\x09\xC0 Apple ProDOS ProBoot Image >0x400 string \x00\x00\x03\x00 >>0x404 byte &0xF0 >>>0x405 string x \b, Volume /%s >>>0x429 uleshort x \b, %u Blocks >0xb00 string \x00\x00\x03\x00 >>0xb04 byte &0xF0 >>>0xb05 string x \b, Volume /%s >>>0xb29 uleshort x \b, %u Blocks # # ProDOS formatted 0 string \x01\xBD\x88\xC0\x20\x2F\xFB\x20\x58\xFC\x20\x40 Apple ProDOS Unbootable Image >0x400 string \x00\x00\x03\x00 >>0x404 byte &0xF0 >>>0x405 string x \b, Volume /%s >>>0x429 uleshort x \b, %u Blocks >0xb00 string \x00\x00\x03\x00 >>0xb04 byte &0xF0 >>>0xb05 string x \b, Volume /%s >>>0xb29 uleshort x \b, %u Blocks 0 string \x01\x38\xB0\x03\x4C\x1C\x09\x78\x86\x43\xC9\x03 Apple ProDOS Unbootable Image >0x400 string \x00\x00\x03\x00 >>0x404 byte &0xF0 >>>0x405 string x \b, Volume /%s >>>0x429 uleshort x \b, %u Blocks >0xb00 string \x00\x00\x03\x00 >>0xb04 byte &0xF0 >>>0xb05 string x \b, Volume /%s >>>0xb29 uleshort x \b, %u Blocks # # DOS3 boot loader 0 string \x01\xA5\x27\xC9\x09\xD0 >0x11001 byte 0x11 >>0x11003 ubyte x Apple DOS 3.%u Image >>0x11006 ubyte x \b, Volume #%03u >>0x11034 ubyte x \b, %u Tracks >>0x11035 ubyte x \b, %u Sectors >>0x11036 uleshort x \b, %u bytes per sector # # DOS3 uninitialized disk 0 string \x01\xA6\x2B\xBD\x88\xC0\x8A\x4A\x4A >0x11001 byte 0x11 >>0x11003 ubyte x Apple DOS 3.%u Unbootable Image >>>0x11006 ubyte x \b, Volume #%03u >>>0x11034 ubyte x \b, %u Tracks >>>0x11035 ubyte x \b, %u Sectors >>>0x11036 uleshort x \b, %u bytes per sector # # Pascal boot loader? 0 string \x01\xE0\x60\xF0\x03\x4C\xE3\x08\xAD >0xd6 pstring SYSTEM.APPLE >>0xb00 leshort 0x0000 >>>0xb04 leshort 0x0000 Apple Pascal Image >>>>0xb06 pstring x \b, Volume %s: >>>>0xb0e leshort x \b, %u Blocks >>>>0xb10 leshort x \b, %u Files # # Diversi Dos boot loader? 0 string \x01\xA8\xAD\x81\xC0\xEE\x09\x08\xAD >0x11001 string \x11\x0F\x03 Apple Diversi Dos Image >>0x11006 byte x \b, Volume %u >>0x11034 byte x \b, %u Tracks >>0x11035 byte x \b, %u Sectors >>0x11036 leshort x \b, %u bytes per sector # Type: Apple Emulator 2IMG format # From: Radek Vokal # Update: Greg Wildman 0 string 2IMG Apple ][ 2IMG Disk Image >4 clear x >4 string XGS! \b, XGS >4 string CTKG \b, Catakig >4 string ShIm \b, Sheppy's ImageMaker >4 string SHEP \b, Sheppy's ImageMaker >4 string WOOF \b, Sweet 16 >4 string B2TR \b, Bernie ][ the Rescue >4 string \!nfc \b, ASIMOV2 >4 string \>BD\< \b, Brutal Deluxe's Cadius >4 string CdrP \b, CiderPress >4 string Vi][ \b, Virtual ][ >4 string PRFS \b, ProFUSE >4 string FISH \b, FishWings >4 string RVLW \b, Revival for Windows >4 default x >>4 string x \b, Creator tag "%-4.4s" >0xc byte 00 \b, DOS 3.3 sector order >>0x10 byte 00 \b, Volume 254 >>0x10 byte&0x7f x \b, Volume %u >0xc byte 01 \b, ProDOS sector order # Detect Volume Directory block ($02) + 2mg header offset >>0x440 string \x00\x00\x03\x00 >>>0x444 byte &0xF0 >>>>0x445 string x \b, Volume /%s >>>>0x469 uleshort x \b, %u Blocks >0xc byte 02 \b, NIB data # Type: Peter Ferrie QBoot # From: Greg Wildman # Ref: https://github.com/peterferrie/qboot 0 string \x01\x4A\xA8\x69\x0F\x85\x27\xC9 >8 string \x12\xF0\x10\xE6\x3D\x86\xDA\x8A Apple ][ QBoot Image # Type: Peter Ferrie 0Boot # From: Greg Wildman # Ref: https://github.com/peterferrie/0boot >8 string \x12\xF0\x10\xE6\x3D\x86\xDA\x8A Apple ][ 0Boot Image # Different proprietary boot sectors 0 string \x01\x0F\x21\x74\x00\x01\x6B\x00\x02\x30\x81\x5D Apple ][ Disk Image 0 string \x01\x20\x58\xFC\xA2\x00\x8E\x78\x04\x8E\xF4\x03 Apple ][ Disk Image 0 string \x01\x20\x58\xFC\xAD\x51\xC0\xAD\x54\xC0\xA6\x2B Apple ][ Disk Image 0 string \x01\x20\x89\xFE\x20\x93\xFE\xA6\x2B\xBD\x88\xC0 Apple ][ Disk Image 0 string \x01\x20\x93\xFE\x20\x89\xFE\x4C\x25\x08\x68\x85 Apple ][ Disk Image 0 string \x01\x20\x93\xFE\x20\x89\xFE\x4C\x2D\x08\x68\x85 Apple ][ Disk Image 0 string \x01\x38\x90\x2A\xC9\x01\xF0\x33\xA8\xC8\xC0\x10 Apple ][ Disk Image 0 string \x01\x38\xB0\x03\x4C\x32\xA1\x87\x43\xC9\x03\x08 Apple ][ Disk Image 0 string \x01\x4C\x04\x08\xA9\x2A\x8D\x02\x08\x86\x2B\xEE Apple ][ Disk Image 0 string \x01\x4C\x60\x08\x09\xD0\x18\xA5\x2B\x4A\x4A\x4A Apple ][ Disk Image 0 string \x01\x4C\x92\x08\x01\x08\xA2\x00\xB5\x00\x9D\x00 Apple ][ Disk Image 0 string \x01\x4C\xB3\x08\x09\xD0\x18\xA5\x2B\x4A\x4A\x4A Apple ][ Disk Image 0 string \x01\x8D\xFB\x03\x8E\xFC\x03\x8C\xFD\x03\x8A\x29 Apple ][ Disk Image 0 string \x01\xA2\xFF\x9A\xD8\x20\x20\x08\x20\x34\x08\xAD Apple ][ Disk Image 0 string \x01\xA5\x27\xBD\x88\xC0\x2C\x10\xC0\xA2\x00\xA9 Apple ][ Disk Image 0 string \x01\xA5\x2B\xAE\x51\xC0\xEA\xAA\xBD\x88\xC0\x20 Apple ][ Disk Image 0 string \x01\xA6\x27\xBD\x0B\x08\x48\xBD\x0A\x08\x48\x85 Apple ][ Disk Image 0 string \x01\xA6\x2B\xBD\x88\xC0\x20\x58\xFC\xA9\x01\x85 Apple ][ Disk Image 0 string \x01\xA6\x2B\xBD\x88\xC0\x20\x58\xFC\xA9\x25\x85 Apple ][ Disk Image 0 string \x01\xA8\xC0\x0F\x90\x16\xF0\x12\xA0\xFF\x18\xAD Apple ][ Disk Image 0 string \x01\xA9\x00\x85\xF0\xA9\x04\x85\xF1\xA0\x00\xA9 Apple ][ Disk Image 0 string \x01\xA9\x5C\x8D\xF2\x03\xA9\xC6\x8D\xF3\x03\x49 Apple ][ Disk Image 0 string \x01\xA9\x60\x8D\x01\x08\x20\x2F\xFB\x20\x58\xFC Apple ][ Disk Image 0 string \x01\xA9\x60\x8D\x01\x08\x20\x49\x08\xA9\x0A\x85 Apple ][ Disk Image 0 string \x01\xA9\x60\x8D\x01\x08\x2C\x82\xC0\xBD\x88\xC0 Apple ][ Disk Image 0 string \x01\xA9\x60\x8D\x01\x08\x86\x43\x8A\x4A\x4A\x4A Apple ][ Disk Image 0 string \x01\xA9\x60\x8D\x01\x08\xA2\x00\x86\xFF\xB5\x00 Apple ][ Disk Image 0 string \x01\xA9\x60\x8D\x01\x08\xA2\x00\xB5\x00\x9D\x00 Apple ][ Disk Image 0 string \x01\xA9\x60\x8D\x01\x08\xA9\xB2\x8D\xF2\x03\xA9 Apple ][ Disk Image 0 string \x01\xA9\x60\x8D\x01\x08\xA9\xFF\x8D\xF3\x03\x8D Apple ][ Disk Image 0 string \x01\xAC\x00\x08\xF0\x19\xB9\x30\x08\x85\x3D\xCE Apple ][ Disk Image 0 string \x01\xAC\x23\x08\x30\x2E\xB9\x24\x08\x85\x3D\xCE Apple ][ Disk Image 0 string \x01\xAD\x00\x08\xC9\x09\xB0\x20\x69\x02\x8D\x00 Apple ][ Disk Image 0 string \x01\xB0\x00\xA9\x3C\x8D\x02\x08\x86\x2B\x8A\x4A Apple ][ Disk Image 0 string \x01\xB0\x00\xA9\x3C\x8D\x02\x08\xA9\xF5\x8D\xF2 Apple ][ Disk Image 0 string \x01\xB0\x00\xA9\x3F\x8D\x02\x08\x86\x2B\x8E\xF4 Apple ][ Disk Image 0 string \x01\xB0\x00\xA9\x48\x8D\x02\x08\x86\x2B\x8E\xF4 Apple ][ Disk Image 0 string \x01\xBD\x88\xC0\x8A\x4A\x4A\x4A\x4A\x09\xC0\x8D Apple ][ Disk Image 0 string \x01\xBD\x88\xC0\x8A\x4A\x4A\x4A\x4A\x8D\x2F\x08 Apple ][ Disk Image 0 string \x01\xD8\x2C\x81\xC0\xA9\x60\x4D\x58\xFF\xD0\xFE Apple ][ Disk Image 0 string \x01\xD8\x78\xBD\x88\xC0\xA9\xFD\x85\x37\x85\x39 Apple ][ Disk Image 0 string \x01\xE0\x60\xF0\x03\x4C\x16\x09\xAD\x00\x08\xC9 Apple ][ Disk Image 0 string \x01\xE0\x60\xF0\x03\x4C\xCB\x08\xAD\x00\x08\xC9 Apple ][ Disk Image 0 string \x01\xE0\x60\xF0\x03\x4C\xEE\x08\xAD\x00\x08\xC9 Apple ][ Disk Image 0 string \x01\xE0\x60\xF0\x03\x4C\xEF\x08\xAD\x00\x08\xC9 Apple ][ Disk Image 0 string \x01\xE0\x70\xB0\x04\xE0\x40\xB0\x39\xBD\x88\xC0 Apple ][ Disk Image 0 string \x01\xEA\x8D\xF4\x03\xA9\x60\x9D\x88\xC0\x8D\x51 Apple ][ Disk Image # magic for Newton PDA package formats # from Ruda Moura 0 string package0 Newton package, NOS 1.x, >12 belong &0x80000000 AutoRemove, >12 belong &0x40000000 CopyProtect, >12 belong &0x10000000 NoCompression, >12 belong &0x04000000 Relocation, >12 belong &0x02000000 UseFasterCompression, >16 belong x version %d 0 string package1 Newton package, NOS 2.x, >12 belong &0x80000000 AutoRemove, >12 belong &0x40000000 CopyProtect, >12 belong &0x10000000 NoCompression, >12 belong &0x04000000 Relocation, >12 belong &0x02000000 UseFasterCompression, >16 belong x version %d 0 string package4 Newton package, >8 byte 8 NOS 1.x, >8 byte 9 NOS 2.x, >12 belong &0x80000000 AutoRemove, >12 belong &0x40000000 CopyProtect, >12 belong &0x10000000 NoCompression, # The following entries for the Apple II are for files that have # been transferred as raw binary data from an Apple, without having # been encapsulated by any of the above archivers. # # In general, Apple II formats are hard to identify because Apple DOS # and especially Apple ProDOS have strong typing in the file system and # therefore programmers never felt much need to include type information # in the files themselves. # # Eric Fischer # AppleWorks word processor: # URL: https://en.wikipedia.org/wiki/AppleWorks # Reference: http://www.gno.org/pub/apple2/doc/apple/filetypes/ftn.1a.xxxx # Update: Joerg Jenderek # NOTE: # The "O" is really the magic number, but that's so common that it's # necessary to check the tab stops that follow it to avoid false positives. # and/or look for unused bits of booleans bytes like zoom, paginated, mail merge # the newer AppleWorks is from claris with extension CWK 4 string O # test for unused bits of zoom- , paginated-boolean bytes >84 ubequad ^0x00Fe00000000Fe00 # look for tabstop definitions "=" no tab, "|" no tab # "<" left tab,"^" center tab,">" right tab, "." decimal tab, # unofficial "!" other , "\x8a" other # official only if SFMinVers is nonzero >>5 regex/s [=.<>|!^\x8a]{79} AppleWorks Word Processor # AppleWorks Word Processor File (Apple II) # ./apple (version 5.25) labeled the entry as "AppleWorks word processor data" # application/x-appleworks is mime type for claris version with cwk extension !:mime application/x-appleworks3 # http://home.earthlink.net/~hughhood/appleiiworksenvoy/ # ('p' + 1-byte ProDOS File Type + 2-byte ProDOS Aux Type') # $70 $1A $F8 $FF is this the apple type ? #:apple pdosp^Z\xf8\xff !:ext awp # minimum version needed to read this files. SFMinVers (0 , 30~3.0 ) >>>183 ubyte 30 3.0 >>>183 ubyte !30 >>>>183 ubyte !0 %#x # usual tabstop start sequence "=====<" >>>5 string x \b, tabstop ruler "%6.6s" # tabstop ruler #>>>5 string >\0 \b, tabstops "%-79s" # zoom switch >>>85 byte&0x01 >0 \b, zoomed # whether paginated >>>90 byte&0x01 >0 \b, paginated # contains any mail-merge commands >>>92 byte&0x01 >0 \b, with mail merge # left margin in 1/10 inches ( normally 0 or 10 ) >>>91 ubyte >0 >>>>91 ubyte x \b, %d/10 inch left margin # AppleWorks database: # # This isn't really a magic number, but it's the closest thing to one # that I could find. The 1 and 2 really mean "order in which you defined # categories" and "left to right, top to bottom," respectively; the D and R # mean that the cursor should move either down or right when you press Return. #30 string \x01D AppleWorks database data #30 string \x02D AppleWorks database data #30 string \x01R AppleWorks database data #30 string \x02R AppleWorks database data # AppleWorks spreadsheet: # # Likewise, this isn't really meant as a magic number. The R or C means # row- or column-order recalculation; the A or M means automatic or manual # recalculation. #131 string RA AppleWorks spreadsheet data #131 string RM AppleWorks spreadsheet data #131 string CA AppleWorks spreadsheet data #131 string CM AppleWorks spreadsheet data # Applesoft BASIC: # # This is incredibly sloppy, but will be true if the program was # written at its usual memory location of 2048 and its first line # number is less than 256. Yuck. # update by Joerg Jenderek at Feb 2013 # GRR: this test is still too general as it catches also Gujin BOOT144.SYS (0xfa080000) #0 belong&0xff00ff 0x80000 Applesoft BASIC program data 0 belong&0x00ff00ff 0x00080000 # assuming that line number must be positive >2 leshort >0 Applesoft BASIC program data, first line number %d #>2 leshort x \b, first line number %d # ORCA/EZ assembler: # # This will not identify ORCA/M source files, since those have # some sort of date code instead of the two zero bytes at 6 and 7 # XXX Conflicts with ELF #4 belong&0xff00ffff 0x01000000 ORCA/EZ assembler source data #>5 byte x \b, build number %d # Broderbund Fantavision # # I don't know what these values really mean, but they seem to recur. # Will they cause too many conflicts? # Probably :-) #2 belong&0xFF00FF 0x040008 Fantavision movie data # Some attempts at images. # # These are actually just bit-for-bit dumps of the frame buffer, so # there's really no reasonably way to distinguish them except for their # address (if preserved) -- 8192 or 16384 -- and their length -- 8192 # or, occasionally, 8184. # # Nevertheless this will manage to catch a lot of images that happen # to have a solid-colored line at the bottom of the screen. # GRR: Magic too weak #8144 string \x7F\x7F\x7F\x7F\x7F\x7F\x7F\x7F Apple II image with white background #8144 string \x55\x2A\x55\x2A\x55\x2A\x55\x2A Apple II image with purple background #8144 string \x2A\x55\x2A\x55\x2A\x55\x2A\x55 Apple II image with green background #8144 string \xD5\xAA\xD5\xAA\xD5\xAA\xD5\xAA Apple II image with blue background #8144 string \xAA\xD5\xAA\xD5\xAA\xD5\xAA\xD5 Apple II image with orange background # Beagle Bros. Apple Mechanic fonts 0 belong&0xFF00FFFF 0x6400D000 Apple Mechanic font # Apple Universal Disk Image Format (UDIF) - dmg files. # From Johan Gade. # These entries are disabled for now until we fix the following issues. # # Note there might be some problems with the "VAX COFF executable" # entry. Note this entry should be placed before the mac filesystem section, # particularly the "Apple Partition data" entry. # # The intended meaning of these tests is, that the file is only of the # specified type if both of the lines are correct - i.e. if the first # line matches and the second doesn't then it is not of that type. # #0 long 0x7801730d #>4 long 0x62626060 UDIF read-only zlib-compressed image (UDZO) # # Note that this entry is recognized correctly by the "Apple Partition # data" entry - however since this entry is more specific - this # information seems to be more useful. #0 long 0x45520200 #>0x410 string disk\ image UDIF read/write image (UDRW) # From: Toby Peterson # From https://www.nationalarchives.gov.uk/pronom/fmt/866 0 string bplist00 >8 search/500 WebMainResource Apple Safari Webarchive !:mime application/x-webarchive !:strength +50 0 string bplist00 Apple binary property list !:mime application/x-bplist # Apple binary property list (bplist) # Assumes version bytes are hex. # Provides content hints for version 0 files. Assumes that the root # object is the first object (true for CoreFoundation implementation). # From: David Remahl 0 string bplist >6 byte x CoreFoundation binary property list data, version %#c >>7 byte x \b%c >>6 string 00 \b >>>8 byte&0xF0 0x00 \b >>>>8 byte&0x0F 0x00 \b, root type: null >>>>8 byte&0x0F 0x08 \b, root type: false boolean >>>>8 byte&0x0F 0x09 \b, root type: true boolean >>>8 byte&0xF0 0x10 \b, root type: integer >>>8 byte&0xF0 0x20 \b, root type: real >>>8 byte&0xF0 0x30 \b, root type: date >>>8 byte&0xF0 0x40 \b, root type: data >>>8 byte&0xF0 0x50 \b, root type: ascii string >>>8 byte&0xF0 0x60 \b, root type: unicode string >>>8 byte&0xF0 0x80 \b, root type: uid (CORRUPT) >>>8 byte&0xF0 0xa0 \b, root type: array >>>8 byte&0xF0 0xd0 \b, root type: dictionary # Apple/NeXT typedstream data # Serialization format used by NeXT and Apple for various # purposes in YellowStep/Cocoa, including some nib files. # From: David Remahl 2 string typedstream NeXT/Apple typedstream data, big endian >0 byte x \b, version %d >0 byte <5 \b >>13 byte 0x81 \b >>>14 ubeshort x \b, system %d 2 string streamtyped NeXT/Apple typedstream data, little endian >0 byte x \b, version %d >0 byte <5 \b >>13 byte 0x81 \b >>>14 uleshort x \b, system %d #------------------------------------------------------------------------------ # CAF: Apple CoreAudio File Format # # Container format for high-end audio purposes. # From: David Remahl # 0 string caff CoreAudio Format audio file >4 beshort <10 version %d #------------------------------------------------------------------------------ # Keychain database files 0 string kych Mac OS X Keychain File #------------------------------------------------------------------------------ # Code Signing related file types 0 belong 0xfade0c00 Mac OS X Code Requirement >8 belong 1 (opExpr) >4 belong x - %d bytes 0 belong 0xfade0c01 Mac OS X Code Requirement Set >8 belong >1 containing %d items >4 belong x - %d bytes 0 belong 0xfade0c02 Mac OS X Code Directory >8 belong x version %x >12 belong >0 flags %#x >4 belong x - %d bytes 0 belong 0xfade0cc0 Mac OS X Detached Code Signature (non-executable) >4 belong x - %d bytes 0 belong 0xfade0cc1 Mac OS X Detached Code Signature >8 belong >1 (%d elements) >4 belong x - %d bytes # From: "Nelson A. de Oliveira" # .vdi 4 string innotek\ VirtualBox\ Disk\ Image %s # Apple disk partition stuff # URL: https://en.wikipedia.org/wiki/Apple_Partition_Map # Reference: https://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/sys/sys/bootblock.h # Update: Joerg Jenderek # "ER" is APPLE_DRVR_MAP_MAGIC signature 0 beshort 0x4552 # display Apple Driver Map (strength=50) after Syslinux bootloader (71) #!:strength +0 # strengthen the magic by looking for used blocksizes 512 2048 >2 ubeshort&0xf1FF 0 Apple Driver Map # last 6 bytes for padding found are 0 or end with 55AAh marker for MBR hybrid #>>504 ubequad&0x0000FFffFFff0000 0 !:mime application/x-apple-diskimage !:apple ????devr # https://en.wikipedia.org/wiki/Apple_Disk_Image !:ext dmg/iso # sbBlkSize for driver descriptor map 512 2048 >>2 beshort x \b, blocksize %d # sbBlkCount sometimes garbish like # 0xb0200000 for unzlibed install_flash_player_19.0.0.245_osx.dmg # 0xf2720100 for bunziped Firefox 48.0-2.dmg # 0xeb02ffff for super_grub2_disk_hybrid_2.02s3.iso # 0x00009090 by syslinux-6.03/utils/isohybrid.c >>4 ubelong x \b, blockcount %u # following device/driver information not very useful # device type 0 1 (37008 garbage for super_grub2_disk_hybrid_2.02s3.iso) >>8 ubeshort x \b, devtype %u # device id 0 1 (37008 garbage for super_grub2_disk_hybrid_2.02s3.iso) >>10 ubeshort x \b, devid %u # driver data 0 (2425393296 garbage for super_grub2_disk_hybrid_2.02s3.iso) >>12 ubelong >0 >>>12 ubelong x \b, driver data %u # number of driver descriptors sbDrvrCount <= 61 # (37008 garbage for super_grub2_disk_hybrid_2.02s3.iso) >>16 ubeshort x \b, driver count %u # 61 * apple_drvr_descriptor[8]. information not very useful or same as in partition map # >>18 use apple-driver-map # >>26 use apple-driver-map # # ... # >>500 use apple-driver-map # number of partitions is always same in every partition (map block count) #>>0x0204 ubelong x \b, %u partitions >>0x0204 ubelong >0 \b, contains[@0x200]: >>>0x0200 use apple-apm >>0x0204 ubelong >1 \b, contains[@0x400]: >>>0x0400 use apple-apm >>0x0204 ubelong >2 \b, contains[@0x600]: >>>0x0600 use apple-apm >>0x0204 ubelong >3 \b, contains[@0x800]: >>>0x0800 use apple-apm >>0x0204 ubelong >4 \b, contains[@0xA00]: >>>0x0A00 use apple-apm >>0x0204 ubelong >5 \b, contains[@0xC00]: >>>0x0C00 use apple-apm >>0x0204 ubelong >6 \b, contains[@0xE00]: >>>0x0E00 use apple-apm >>0x0204 ubelong >7 \b, contains[@0x1000]: >>>0x1000 use apple-apm # display apple driver descriptor map (start-block, # blocks in sbBlkSize sizes, type) 0 name apple-driver-map >0 ubequad !0 # descBlock first block of driver >>0 ubelong x \b, driver start block %u # descSize driver size in blocks >>4 ubeshort x \b, size %u # descType driver system type 1 701h F8FFh FFFFh >>6 ubeshort x \b, type %#x # URL: https://en.wikipedia.org/wiki/Apple_Partition_Map # Reference: https://opensource.apple.com/source/IOStorageFamily/IOStorageFamily-116/IOApplePartitionScheme.h # Update: Joerg Jenderek # Yes, the 3rd and 4th bytes pmSigPad are reserved, but we use them to make the # magic stronger. # for apple partition map stored as a single file 0 belong 0x504d0000 # to display Apple Partition Map (strength=70) after Syslinux bootloader (71) #!:strength +0 >0 use apple-apm # magic/Magdir/apple14.test, 365: Warning: Current entry does not yet have a description for adding a EXTENSION type # file: could not find any valid magic files! #!:ext bin # display apple partition map. Normally called after Apple driver map 0 name apple-apm >0 belong 0x504d0000 Apple Partition Map # number of partitions >>4 ubelong x \b, map block count %u # logical block (512 bytes) start of partition >>8 ubelong x \b, start block %u >>12 ubelong x \b, block count %u >>16 string >0 \b, name %s >>48 string >0 \b, type %s # processor type dpme_process_id[16] e.g. "68000" "68020" >>120 string >0 \b, processor %s # A/UX boot arguments BootArgs[128] >>136 string >0 \b, boot arguments %s # status of partition dpme_flags >>88 belong & 1 \b, valid >>88 belong & 2 \b, allocated >>88 belong & 4 \b, in use >>88 belong & 8 \b, has boot info >>88 belong & 16 \b, readable >>88 belong & 32 \b, writable >>88 belong & 64 \b, pic boot code >>88 belong & 128 \b, chain compatible driver >>88 belong & 256 \b, real driver >>88 belong & 512 \b, chain driver # mount automatically at startup APPLE_PS_AUTO_MOUNT >>88 ubelong &0x40000000 \b, mount at startup # is the startup partition APPLE_PS_STARTUP >>88 ubelong &0x80000000 \b, is the startup partition #https://wiki.mozilla.org/DS_Store_File_Format #https://en.wikipedia.org/wiki/.DS_Store 0 string \0\0\0\1Bud1\0 Apple Desktop Services Store # HFS/HFS+ Resource fork files (andrew.roazen@nau.edu Apr 13 2015) # Usually not in separate files, but have either filename rsrc with # no extension, or a filename corresponding to another file, with # extensions rsr/rsrc # URL: http://fileformats.archiveteam.org/wiki/Macintosh_resource_file # https://en.wikipedia.org/wiki/Resource_fork # Reference: https://github.com/kreativekorp/ksfl/wiki/Macintosh-Resource-File-Format # http://developer.apple.com/legacy/mac/library/documentation/mac/pdf/MoreMacintoshToolbox.pdf # https://formats.kaitai.io/resource_fork/ # Update: Joerg Jenderek # Note: verified often by command like `deark -m macrsrc Icon_.rsrc` # offset of resource data; usually starts at offset 0x0100 0 string \000\000\001\000 # skip NPETraceSession.etl with invalid "low" map offset 0 >4 ubelong >0xFF # skip few Atari DEGAS Elite bitmap (eil2.pi1 nastro.pi1) with ivalid "high" 0x6550766 0x7510763 map length >>12 ubelong <0x8001 # most examples with zeroed system reserved field >>>16 lelong =0 >>>>0 use apple-rsr # few samples with not zeroed system reserved field like: Empty.rsrc.rsr OpenSans-CondBold.dfont >>>16 lelong !0 # resource fork variant with not zeroed system reserved field and copy of header >>>>(4.L) ubelong 0x100 # GRR: the line above only works if in ../../src/file.h FILE_BYTES_MAX is raised from 1 MiB above 0x6ab0f4 (HelveticaNeue.dfont) >>>>>0 use apple-rsr # data fork variant with not zeroed system reserved field and no copy of header >>>>(4.L) ubelong 0 >>>>>0 use apple-rsr # Note: moved and merged from ./macintosh # From: Adam Buchbinder # URL: https://en.wikipedia.org/wiki/Datafork_TrueType # Derived from the 'fondu' and 'ufond' source code (fondu.sf.net). 'sfnt' is # TrueType; 'POST' is PostScript. 'FONT' and 'NFNT' sometimes appear, but I # don't know what they mean. # display information about Mac OSX datafork font DFONT 0 name apple-dfont >(4.L+30) ubelong x Mac OSX datafork font, # https://en.wikipedia.org/wiki/Datafork_TrueType !:mime application/x-dfont !:ext dfont # https://exiftool.org/TagNames/RSRC.html >(4.L+30) ubelong 0x73666e74 TrueType >(4.L+30) ubelong 0x464f4e54 'FONT' >(4.L+30) ubelong 0x4e464e54 'NFNT' >(4.L+30) ubelong 0x504f5354 PostScript >(4.L+30) ubelong 0x464f4e44 'FOND' >(4.L+30) ubelong 0x76657273 'vers' # display information about Macintosh resource 0 name apple-rsr >(4.L+30) ubelong 0x73666e74 >>0 use apple-dfont >(4.L+30) ubelong 0x464f4e54 >>0 use apple-dfont >(4.L+30) ubelong 0x4e464e54 >>0 use apple-dfont >(4.L+30) ubelong 0x504f5354 >>0 use apple-dfont >(4.L+30) ubelong 0x464f4e44 >>0 use apple-dfont >(4.L+30) ubelong 0x76657273 >>0 use apple-dfont >(4.L+30) default x Apple HFS/HFS+ resource fork #!:mime application/octet-stream !:mime application/x-apple-rsr !:ext rsrc/rsr # offset to resource data; usually starts at offset 0x0100 >0 ubelong !0x100 \b, data offset %#x # offset to resource map; positive but not nil like in NPETraceSession.etl >4 ubelong x \b, map offset %#x # length of resource map; positive with 32K limitation but not # nil like in NPETraceSession.etl or high like 0x7510763 in nastro.pi1 >12 ubelong x \b, map length %#x # length of resource data; positive but not nil like in NPETraceSession.etl >8 ubelong x \b, data length %#x # reserved 112 bytes for system use; apparently often nil, but 8fd20000h in Empty.rsrc.rsr and 0x00768c2b in OpenSans-CondBold.dfont >16 ubelong !0 \b, at 16 %#8.8x # https://fontforge.org/docs/techref/macformats.html # jump to resource map # a copy of resource header or 16 bytes of zeros for data fork #>(4.L) ubelong x \b, DATA offset %#x #>(4.L+4) ubelong x \b, MAP offset %#x #>(4.L+8) ubelong x \b, DATA length %#x #>(4.L+12) ubelong x \b, MAP length %#x # nextResourceMap; handle to next resource map; used by the Resource Manager for internal bookkeeping; should be zero >(4.L+16) ubelong !0 \b, nextResourceMap %#x # fileRef; file reference number; used by the Resource Manager for internal bookkeeping; should be zero >(4.L+20) ubeshort !0 \b, fileRef %#x # attributes; Resource fork attributes (80h~read-only 40h~compression needed 20h~changed); other bits are reserved and should be zero >(4.L+22) ubeshort !0 \b, attributes %#x # typeListOffset; offset from resource map to start of type list like: 1Ch >(4.L+24) ubeshort x \b, list offset %#x # nameListOffset; offset from esource map to start of name list like: 32h 46h 56h (XLISP.RSR XLISPTIN.RSR) 13Eh (HelveticaNeue.dfont) >(4.L+26) ubeshort x \b, name offset %#x # typeCount; number of types in the map minus 1; If there are no resources, this is 0xFFFF >(4.L+28) beshort+1 >0 \b, %u type # plural s >>(4.L+28) beshort+1 >1 \bs # resource type list array; 1st resource type like: ALRT CODE FOND MPSR icns scsz >>(4.L+30) ubelong x \b, %#x >>(4.L+30) string x '%-.4s' # resourceCount; number of this type resources minus one. If there is one resource of this type, this is 0x0000 >>(4.L+34) beshort+1 x * %d # resourceListOffset; offset from type list to resource list like: Ah 12h DAh >(4.L+36) ubeshort x resource offset %#x #https://en.wikipedia.org/wiki/AppleScript 0 string FasdUAS AppleScript compiled # AppleWorks/ClarisWorks # https://github.com/joshenders/appleworks_format # http://fileformats.archiveteam.org/wiki/AppleWorks 0 name appleworks >0 belong&0x00ffffff 0x07e100 AppleWorks CWK Document >0 belong&0x00ffffff 0x008803 ClarisWorks CWK Document >0 default x >>0 belong x AppleWorks/ClarisWorks CWK Document >0 byte x \b, version %d >30 beshort x \b, %d >32 beshort x \bx%d !:ext cwk 4 string BOBO >0 byte >4 >>12 belong 0 >>>26 belong 0 >>>>0 use appleworks >0 belong 0x0481ad00 >>0 use appleworks # magic for Apple File System (APFS) # from Alex Myczko 32 string NXSB Apple File System (APFS) >36 ulelong x \b, blocksize %u # iTunes cover art (versions 1 and 2) 4 string itch >24 string artw >>0x1e8 string data iTunes cover art >>>0x1ed string PNG (PNG) >>>0x1ec beshort 0xffd8 (JPEG) # MacPaint image 65 string PNTGMPNT MacPaint image data #0 belong 2 MacPaint image data file-5.46/magic/Magdir/application000664 023540 023540 00000000421 14015050424 020632 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: application,v 1.1 2016/10/17 12:13:01 christos Exp $ # application: file(1) magic for applications on small devices # # Pebble Application 0 string PBLAPP\000\000 Pebble application file-5.46/magic/Magdir/applix000664 023540 023540 00000000654 14015050424 017634 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: applix,v 1.5 2009/09/19 16:28:08 christos Exp $ # applix: file(1) magic for Applixware # From: Peter Soos # 0 string *BEGIN Applixware >7 string WORDS Words Document >7 string GRAPHICS Graphic >7 string RASTER Bitmap >7 string SPREADSHEETS Spreadsheet >7 string MACRO Macro >7 string BUILDER Builder Object file-5.46/magic/Magdir/apt000664 023540 023540 00000003112 14015050424 017113 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: apt,v 1.1 2016/10/17 19:51:57 christos Exp $ # apt: file(1) magic for APT Cache files # # # before version 10 ("old format"), data was in arch-specific long/short # old format 64 bit 0 name apt-cache-64bit-be >12 beshort 1 \b, dirty >40 bequad x \b, %llu packages >48 bequad x \b, %llu versions # old format 32 bit 0 name apt-cache-32bit-be >8 beshort 1 \b, dirty >40 belong x \b, %u packages >44 belong x \b, %u versions # new format 0 name apt-cache-be >6 byte 1 \b, dirty >24 belong x \b, %u packages >28 belong x \b, %u versions 0 bequad 0x98FE76DC >8 ubeshort <10 APT cache data, version %u >>10 beshort x \b.%u, 64 bit big-endian >>0 use apt-cache-64bit-be 0 lequad 0x98FE76DC >8 uleshort <10 APT cache data, version %u >>10 leshort x \b.%u, 64 bit little-endian >>0 use \^apt-cache-64bit-be 0 belong 0x98FE76DC >4 ubeshort <10 APT cache data, version %u >>6 ubeshort x \b.%u, 32 bit big-endian >>0 use apt-cache-32bit-be >4 ubyte >9 APT cache data, version %u >>5 ubyte x \b.%u, big-endian >>0 use apt-cache-be 0 lelong 0x98FE76DC >4 uleshort <10 APT cache data, version %u >>6 uleshort x \b.%u, 32 bit little-endian >>0 use \^apt-cache-32bit-be >4 ubyte >9 APT cache data, version %u >>5 ubyte x \b.%u, little-endian >>0 use \^apt-cache-be file-5.46/magic/Magdir/archive000664 023540 023540 00000313072 14721636312 017773 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: archive,v 1.207 2024/11/27 15:37:46 christos Exp $ # archive: file(1) magic for archive formats (see also "msdos" for self- # extracting compressed archives) # # cpio, ar, arc, arj, hpack, lha/lharc, rar, squish, uc2, zip, zoo, etc. # pre-POSIX "tar" archives are also handled in the C code ../../src/is_tar.c. # POSIX tar archives # URL: https://en.wikipedia.org/wiki/Tar_(computing) # Reference: https://www.freebsd.org/cgi/man.cgi?query=tar&sektion=5&manpath=FreeBSD+8-current # header mainly padded with nul bytes 500 quad 0 !:strength /2 # filename or extended attribute printable strings in range space null til umlaut ue >0 ubeshort >0x1F00 >>0 ubeshort <0xFCFD # last 4 header bytes often null but tar\0 in gtarfail2.tar gtarfail.tar-bad # at https://sourceforge.net/projects/s-tar/files/testscripts/ >>>508 ubelong&0x8B9E8DFF 0 # nul, space or ascii digit 0-7 at start of mode >>>>100 ubyte&0xC8 =0 >>>>>101 ubyte&0xC8 =0 # nul, space at end of check sum >>>>>>155 ubyte&0xDF =0 # space or ascii digit 0 at start of check sum >>>>>>>148 ubyte&0xEF =0x20 # check for specific 1st member name that indicates other mime type and file name suffix >>>>>>>>0 string TpmEmuTpms/permall # maybe also look for 2nd tar member efi/nvram containing UEFI variables part #>>>>>>>>>512 search/0x1800 efi/nvram\0 EFI_PART_FOUND >>>>>>>>>0 use tar-nvram # FOR DEBUGGING: #>>>>>>>>0 regex \^[0-9]{2,4}[.](png|jpg|jpeg|tif|tiff|gif|bmp) NAME "%s" # check for 1st image main name with digits used for sorting # and for name extension case insensitive like: PNG JPG JPEG TIF TIFF GIF BMP >>>>>>>>0 regex \^[0-9]{2,4}[.](png|jpg|jpeg|tif|tiff|gif|bmp) >>>>>>>>>0 use tar-cbt # check for 1st member name with ovf suffix >>>>>>>>0 regex \^.{1,96}[.](ovf) >>>>>>>>>0 use tar-ova # look for relative directory ./var/ or ./lte/ as 1st member name that indicates AVM firmware with other file name suffix >>>>>>>>0 ubequad&0xFFffE5eaE8ffFFff 0x2e2f6460602f0000 >>>>>>>>>0 use tar-avm # maybe look for AVM specific 2nd name entry # >>>>>>>>>517 string /content\0 content~ # >>>>>>>>>>0 use tar-avm # >>>>>>>>>517 string /install\0 install~ # >>>>>>>>>>0 use tar-avm # >>>>>>>>>517 string /chksum\0 chksum~ # >>>>>>>>>>0 use tar-avm # >>>>>>>>>517 string /modfw.nfo\0 modfw~ # >>>>>>>>>>0 use tar-avm # most (419/429) *.WBM (71/71) *.WBT with user name jcameron of Webmin developer Jamie Cameron in first tar archive member >>>>>>>>265 string jcameron >>>>>>>>>0 use tar-webmin # if 1st member name without digits and without used image suffix, without *.ovf, # ./var/ , ./lte/ and TpmEmuTpms/ then it is a pure TAR archive or Webmin without jcameron user name >>>>>>>>0 default x # few (10/429) *.WBM without user name jcameron in 1st tar member but with WBM module.info name like: # apcupsd-0.81-2.wbm csavupdate.wbm cwmail.wbm dac960.wbm etcupdate.wbm logviewer.wbm memcached.wbm rinetd.wbm shoutcast.wbm vacationadmin-webmin-module-1.1.2.wbm # few (10/95) *.WBT without user name jcameron in 1st tar member but with WBT theme.info name like: # authentic-theme-21.09.5.wbt Mozilla-Modern.wbt virtual-server-theme-2.7.wbt fkn-webmintheme.0.6.0.wbt >>>>>>>>>512 search/210965/s e.info\0 >>>>>>>>>>0 use tar-webmin # pure TAR >>>>>>>>>0 default x >>>>>>>>>>0 use tar-file # Note: called "TAR - Tape ARchive" by TrID, "Tape Archive Format" by DROID via PUID x-fmt/265 # and "Tar archive" by shared MIME-info database from freedesktop.org # minimal check and then display tar archive information which can also be # embedded inside others like Android Backup, Clam AntiVirus database 0 name tar-file >257 string !ustar # header padded with nuls >>257 ulong =0 # GNU tar version 1.29 with non pax format option without refusing # creates misleading V7 header for Long path, Multi-volume, Volume type >>>156 ubyte 0x4c GNU tar archive !:mime application/x-gtar !:ext tar/gtar >>>156 ubyte 0x4d GNU tar archive !:mime application/x-gtar !:ext tar/gtar >>>156 ubyte 0x56 GNU tar archive !:mime application/x-gtar !:ext tar/gtar >>>156 default x tar archive (V7) !:mime application/x-tar !:ext tar # other stuff in padding # some implementations add new fields to the blank area at the end of the header record # created for example by DOS TAR 3.20g 1994 Tim V.Shapore with -j option >>257 ulong !0 tar archive (old) !:mime application/x-tar !:ext tar # magic in newer, GNU, posix variants >257 string =ustar # 2 last char of magic and UStar version because string expression does not work # 2 space characters followed by a null for GNU variant >>261 ubelong =0x72202000 POSIX tar archive (GNU) !:mime application/x-gtar !:ext tar/gtar # UStar version with ASCII "00" >>261 ubelong 0x72003030 POSIX # gLOBAL and ExTENSION type only found in POSIX.1-2001 format >>>156 ubyte 0x67 \b.1-2001 >>>156 ubyte 0x78 \b.1-2001 >>>156 ubyte x tar archive !:mime application/x-ustar !:ext tar/ustar # version with 2 binary nuls embedded in Android Backup like com.android.settings.ab >>261 ubelong 0x72000000 tar archive (ustar) !:mime application/x-ustar !:ext tar/ustar # not seen ustar variant with garbish version >>261 default x tar archive (unknown ustar) !:mime application/x-ustar !:ext tar/ustar # show information for 1st tar archive member >0 use tar-entry # display information of tar archive member (file type, name, permissions, user, group) 0 name tar-entry # type flag of tar archive member #>156 ubyte x \b, %c-type >156 ubyte x >>156 ubyte 0 \b, file >>156 ubyte 0x30 \b, file >>156 ubyte 0x31 \b, hard link >>156 ubyte 0x32 \b, symlink >>156 ubyte 0x33 \b, char device >>156 ubyte 0x34 \b, block device >>156 ubyte 0x35 \b, directory >>156 ubyte 0x36 \b, fifo >>156 ubyte 0x37 \b, reserved >>156 ubyte 0x4c \b, long path >>156 ubyte 0x4d \b, multi volume >>156 ubyte 0x56 \b, volume >>156 ubyte 0x67 \b, global >>156 ubyte 0x78 \b, extension >>156 default x \b, type >>>156 ubyte x '%c' # name[100] >0 string >\0 %-.60s # mode mainly stored as an octal number in ASCII null or space terminated >100 string >\0 \b, mode %-.7s # user id mainly as octal numbers in ASCII null or space terminated >108 string >\0 \b, uid %-.7s # group id mainly as octal numbers in ASCII null or space terminated >116 string >\0 \b, gid %-.7s # size mainly as octal number in ASCII >124 ubyte <0x38 >>124 string >\0 \b, size %-.12s # coding indicated by setting the high-order bit of the leftmost byte >124 ubyte >0xEF \b, size 0x >>124 ubyte !0xff \b%2.2x >>125 ubyte !0xff \b%2.2x >>126 ubyte !0xff \b%2.2x >>127 ubyte !0xff \b%2.2x >>128 ubyte !0xff \b%2.2x >>129 ubyte !0xff \b%2.2x >>130 ubyte !0xff \b%2.2x >>131 ubyte !0xff \b%2.2x >>132 ubyte !0xff \b%2.2x >>133 ubyte !0xff \b%2.2x >>134 ubyte !0xff \b%2.2x >>135 ubyte !0xff \b%2.2x # seconds since 0:0:0 1 jan 1970 UTC as octal number mainly in ASCII null or space terminated >136 string >\0 \b, seconds %-.11s # header checksum stored as an octal number in ASCII null or space terminated #>148 string x \b, cksum %.7s # linkname[100] >157 string >\0 \b, linkname %-.40s # additional fields for ustar >257 string =ustar # owner user name null terminated >>265 string >\0 \b, user %-.32s # group name null terminated >>297 string >\0 \b, group %-.32s # device major minor if not zero (binary or ASCII) >>329 ubequad&0xCFCFCFCFcFcFcFdf !0 >>>329 string x \b, devmaj %-.7s >>337 ubequad&0xCFCFCFCFcFcFcFdf !0 >>>337 string x \b, devmin %-.7s # prefix[155] >>345 string >\0 \b, prefix %-.155s # old non ustar/POSIX tar >257 string !ustar >>508 string =tar\0 # padding[255] in old star >>>257 string >\0 \b, padding: %-.40s >>508 default x # padding[255] in old tar sometimes comment field >>>257 string >\0 \b, comment: %-.40s # Summary: VirtualBox NvramFile with UEFI variables packed inside TAR archive # URL: hhttps://www.virtualbox.org/manual/ch08.html#vboxmanage-modifynvram # Reference: http://mark0.net/download/triddefs_xml.7z/defs/n/nvram-virtualbox-tar.trid.xml # Note: called "VirtualBox saved (U)EFI BIOS settings (TAR) by TrID and # verified by 7-Zip `7z l -ttar Mint-21.1.nvram` and # VirtualBox `VBoxManage modifynvram "Mint-21.1" listvars` 0 name tar-nvram # >0 string x VirtualBox NVRAM file #!:mime application/x-gtar !:mime application/x-virtualbox-nvram !:ext nvram # first name[100] like: TpmEmuTpms/permall >0 use tar-entry # 2nd tar member efi/nvram contains UEFI variables part described by ./virtual >512 search/0x1800/s efi/nvram\0 >>&0 use tar-entry # 2nd tar member efi/nvram content could be described by ./virtual #>>&512 indirect x # Summary: Comic Book Archive *.CBT with TAR format # URL: https://en.wikipedia.org/wiki/Comic_book_archive # http://fileformats.archiveteam.org/wiki/Comic_Book_Archive # Note: there exist also RAR, ZIP, ACE and 7Z packed variants 0 name tar-cbt >0 string x Comic Book archive, tar archive #!:mime application/x-tar !:mime application/vnd.comicbook #!:mime application/vnd.comicbook+tar !:ext cbt # name[100] probably like: 19.jpg 0001.png 0002.png # or maybe like ComicInfo.xml #>0 string >\0 \b, 1st image %-.60s >0 use tar-entry # Summary: Open Virtualization Format *.OVF with disk images and more packed as TAR archive *.OVA # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Open_Virtualization_Format # http://fileformats.archiveteam.org/wiki/OVF_(Open_Virtualization_Format) # Reference: http://mark0.net/download/triddefs_xml.7z/defs/o/ova.trid.xml # Note: called "Open Virtualization Format package" by TrID # assuming *.ovf comes first 0 name tar-ova >0 string x Open Virtualization Format Archive #!:mime application/x-ustar # http://extension.nirsoft.net/ova !:mime application/x-virtualbox-ova !:ext ova # assuming name[100] like: DOS-0.9.ovf FreeDOS_1.ovf Win98SE_DE.ovf #>0 string >\0 \b, with %-.60s >0 use tar-entry # Summary: AVM firmware (FRITZ!OS) for the FRITZ!Box (router) # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Fritz!Box # https://www.redteam-pentesting.de/de/advisories/rt-sa-2014-010/-avm-fritz-box-firmware-signature-bypass # Reference: http://mark0.net/download/triddefs_xml.7z/defs/i/image-avm.trid.xml # Note: verified by 7-Zip `7z l -ttar FRITZ.Box_4040-07.57.image` 0 name tar-avm >0 string x AVM FRITZ!Box firmware #!:mime application/x-gtar !:mime application/x-avm-image !:ext image # tar member ./var/content starts with line like "Product=Fritz_Box_HW227 (FRITZ!Box 4040)" >>1024 search/512 Product=Fritz_Box_ >>>&0 string x %s # version string like: 07.57 07.58 >>>1044 search Version= \b, version >>>>&0 string x %s # product phrase too far behind (dozen MB) in many samples like: FRITZ.Box_4040-07.12.image FRITZ.Box_6820v3_LTE-07.57.image # so try to look for other characteristic foo # >>1024 default x OTHER_PATTERN! # >>>1023 search AVM_PATTERN PATTERNfound # first name[100] like: ./var/ ./lte/ >0 use tar-entry # if 1st entry is directory then show 2nd entry >156 ubyte 0x35 # 2nd tar member name like: ./var/content (often ) ./var/install ./var/chksum ./lte/modfw.nfo >>512 use tar-entry # Summary: Webmin Module or Theme # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Webmin # https://webmin.com/docs/development/creating-modules/ # https://webmin.com/docs/development/creating-themes/ # Reference: http://mark0.net/download/triddefs_xml.7z/defs/w/wbm.trid.xml # http://mark0.net/download/triddefs_xml.7z/defs/w/wbt.trid.xml # http://mark0.net/download/triddefs_xml.7z/defs/w/wbt-gif.trid.xml # Note: called "Webmin Module" "Webmin Theme" by TrID # most verfied by 7-Zip `7z l -ttar *.wbm | grep "\module.info"` and # `7z l -ttar *.wbt | grep "\theme.info"` 0 name tar-webmin >0 string x Webmin # Webmin module or theme >>512 search/1767941/s /module.info Module !:mime application/x-webmin-module !:ext wbm # According to documentation module.info is mandatory but instead theme.info is found in # old-blue-theme.wbm old-blue-theme-1.0.wbm old-mscstyle3.wbm virtual-server-mobile.wbm # GRR: maybe here wrong file name suffix WBM instead of WBT >>512 default x >>>512 search/3149333/s /theme.info Theme !:mime application/x-webmin-theme !:ext wbt # next 3 lines should not happen >>>512 default x Module or Theme !:mime application/x-webmin !:ext wbm/wbt # GNU or POSIX tar >257 string =ustar ( # 2 space characters followed by a null for GNU variant for most (428/429) WBM samples >>261 ubelong =0x72202000 \bGNU tar) #!:mime application/x-gtar # UStar version variant with ASCII "00" as in few (1/429) samples like cwmail.wbm >>261 ubelong 0x72003030 \bPOSIX tar) #!:mime application/x-ustar #>>>156 ubyte x tar archive # Apparently first archive member name[100] is directory like: dynbind/ ssh/ virtualmin-powerdns/ virtual-server-mobile/ vnc/ >>0 use tar-entry # look for characteristic WBM module info name starting with "module.info" for language variant like in: ssh2.wbm >>512 search/1767941/s /module.info # look for TAR magic of WBM archive module info >>>&0 search/257/s ustar # show details for WBM archive member module info >>>>&-257 use tar-entry # look for characteristic WBT theme info name with "theme.info" like in: authentic-theme-21.09.5.wbt >>512 search/3149333/s /theme.info\0 # look for TAR magic of WBT archive theme info >>>&0 search/257/s ustar >>>>&-257 use tar-entry # Incremental snapshot gnu-tar format from: # https://www.gnu.org/software/tar/manual/html_node/Snapshot-Files.html 0 string GNU\ tar- GNU tar incremental snapshot data >&0 regex [0-9]\\.[0-9]+-[0-9]+ version %s # cpio archives # # Yes, the top two "cpio archive" formats *are* supposed to just be "short". # The idea is to indicate archives produced on machines with the same # byte order as the machine running "file" with "cpio archive", and # to indicate archives produced on machines with the opposite byte order # from the machine running "file" with "byte-swapped cpio archive". # # The SVR4 "cpio(4)" hints that there are additional formats, but they # are defined as "short"s; I think all the new formats are # character-header formats and thus are strings, not numbers. # URL: http://fileformats.archiveteam.org/wiki/Cpio # https://en.wikipedia.org/wiki/Cpio # Reference: https://people.freebsd.org/~kientzle/libarchive/man/cpio.5.txt # Update: Joerg Jenderek # # Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-cpio-bin.trid.xml # Note: called "CPIO archive (binary)" by TrID, "cpio/Binary LE" by 7-Zip and "CPIO" by DROID via PUID fmt/635 0 short 070707 # skip DROID fmt-635-signature-id-960.cpio by looking for pathname of 1st entry >26 string >\0 cpio archive !:mime application/x-cpio # https://download.opensuse.org/distribution/leap/15.4/iso/openSUSE-Leap-15.4-NET-x86_64-Media.iso # boot/x86_64/loader/bootlogo # message.cpi !:ext /cpio/cpi >>0 use cpio-bin # Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-cpio-bin-sw.trid.xml # Note: called "CPIO archive (byte swapped binary)" by TrID and "Cpio/Binary BE" by 7-Zip 0 short 0143561 byte-swapped cpio archive !:mime application/x-cpio # encoding: swapped # https://telparia.com/fileFormatSamples/archive/cpio/skeleton2.cpio !:ext cpio >0 use cpio-bin-be # Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-cpio.trid.xml # Note: called "CPIO archive (portable)" by TrID, "cpio/Portable ASCII" by 7-Zip and "cpio/odc" by GNU cpio 0 string 070707 ASCII cpio archive (pre-SVR4 or odc) !:mime application/x-cpio # https://telparia.com/fileFormatSamples/archive/cpio/ pthreads-1.60B5.osr5src.cpio cinema.cpi VOL.000.008 VOL.000.012 !:ext cpio/cpi/008/012 # Note: called "CPIO archive (portable)" by TrID, "cpio/New ASCII" by 7-Zip and "cpio/newc" by GNU cpio 0 string 070701 ASCII cpio archive (SVR4 with no CRC) !:mime application/x-cpio # https://telparia.com/fileFormatSamples/archive/cpio/MainActor-2.06.3.cpio !:ext cpio # Note: called "CPIO archive (portable)" by TrID, "cpio/New CRC" by 7-Zip and "cpio/crc" by GNU cpio 0 string 070702 ASCII cpio archive (SVR4 with CRC) !:mime application/x-cpio # http://ftp.gnu.org/gnu/tar/tar-1.27.cpio.gz # https://telparia.com/fileFormatSamples/archive/cpio/pcmcia !:ext /cpio # display information of old binary cpio archive # Note: verfied by 7-Zip `7z l -tcpio -slt *.cpio` and # `cpio -ivt --numeric-uid-gid --file=clam.bin-le.cpio` 0 name cpio-bin # c_dev; device number; WHAT IS THAT? >2 uleshort x \b; device %u # c_ino; truncated inode number; use `ls --inode` >4 uleshort x \b, inode %u # c_mode; mode specifies permissions and file type like: ?622~?rw-r--r-- by `ls -l` >6 uleshort x \b, mode %o # c_uid; numeric user id; use `ls --numeric-uid-gid` >8 uleshort x \b, uid %u # c_gid; numeric group id >10 uleshort x \b, gid %u # c_nlink; links to this file; directories at least 2 >12 uleshort >1 \b, %u links # c_rdev; device number for block and character entries; zero for all other entries by writers # like 0x0440 for /dev/ttyS0 >14 uleshort >0 \b, device %#4.4x # c_mtime[2]; modification time in seconds since 1 January 1970; most-significant 16 bits first >16 medate x \b, modified %s # c_filesize[2]; size of pathname; most-significant 16 bits first like: 544 >22 melong x \b, %u bytes # c_namesize; bytes in the pathname that follows the header like: 9 #>20 uleshort x \b, namesize %u # pathname of entry like: "clam.exe" >26 string x "%s" # display information of old binary byte swapped cpio archive # Note: verfied by 7-Zip `7z l -tcpio -slt *.cpio` and # `LANGUAGE=C cpio -ivt --numeric-uid-gid --file=clam.bin-be.cpio` 0 name cpio-bin-be >2 ubeshort x \b; device %u >4 ubeshort x \b, inode %u >6 ubeshort x \b, mode %o >8 ubeshort x \b, uid %u >10 ubeshort x \b, gid %u >12 ubeshort >1 \b, %u links >14 ubeshort >0 \b, device %#4.4x >16 bedate x \b, modified %s >22 ubelong x \b, %u bytes #>20 ubeshort x \b, namesize %u >26 string x "%s" # # Various archive formats used by various versions of the "ar" # command. # # # Original UNIX archive formats. # They were written with binary values in host byte order, and # the magic number was a host "int", which might have been 16 bits # or 32 bits. We don't say "PDP-11" or "VAX", as there might have # been ports to little-endian 16-bit-int or 32-bit-int platforms # (x86?) using some of those formats; if none existed, feel free # to use "PDP-11" for little-endian 16-bit and "VAX" for little-endian # 32-bit. There might have been big-endian ports of that sort as # well. # 0 leshort 0177555 very old 16-bit-int little-endian archive 0 beshort 0177555 very old 16-bit-int big-endian archive 0 lelong 0177555 very old 32-bit-int little-endian archive 0 belong 0177555 very old 32-bit-int big-endian archive 0 leshort 0177545 old 16-bit-int little-endian archive >2 string __.SYMDEF random library 0 beshort 0177545 old 16-bit-int big-endian archive >2 string __.SYMDEF random library 0 lelong 0177545 old 32-bit-int little-endian archive >4 string __.SYMDEF random library 0 belong 0177545 old 32-bit-int big-endian archive >4 string __.SYMDEF random library # # From "pdp" (but why a 4-byte quantity?) # 0 lelong 0x39bed PDP-11 old archive 0 lelong 0x39bee PDP-11 4.0 archive # # XXX - what flavor of APL used this, and was it a variant of # some ar archive format? It's similar to, but not the same # as, the APL workspace magic numbers in pdp. # 0 long 0100554 apl workspace # # System V Release 1 portable(?) archive format. # 0 string = System V Release 1 ar archive !:mime application/x-archive # # Debian package; it's in the portable archive format, and needs to go # before the entry for regular portable archives, as it's recognized as # a portable archive whose first member has a name beginning with # "debian". # # Update: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Deb_(file_format) 0 string =!\ndebian # https://manpages.debian.org/testing/dpkg/dpkg-split.1.en.html >14 string -split part of multipart Debian package !:mime application/vnd.debian.binary-package # udeb is used for stripped down deb file !:ext deb/udeb >14 string -binary Debian binary package !:mime application/vnd.debian.binary-package # For ipk packager see also https://en.wikipedia.org/wiki/Opkg !:ext deb/udeb/ipk # This should not happen >14 default x Unknown Debian package # NL terminated version; for most Debian cases this is 2.0 or 2.1 for split >68 string >\0 (format %s) #>68 string !2.0\n #>>68 string x (format %.3s) >68 string =2.0\n # 2nd archive name=control archive name like control.tar.gz or control.tar.xz # or control.tar.zst >>72 string >\0 \b, with %.15s # look for 3rd archive name=data archive name like data.tar.{gz,xz,bz2,lzma} >>0 search/0x93e4f data.tar. \b, data compression # the above line only works if FILE_BYTES_MAX in ../../src/file.h is raised # for example like libreoffice-dev-doc_1%3a5.2.7-1+rpi1+deb9u3_all.deb >>>&0 string x %.2s # skip space (0x20 BSD) and slash (0x2f System V) character marking end of name >>>&2 ubyte !0x20 >>>>&-1 ubyte !0x2f # display 3rd character of file name extension like 2 of bz2 or m of lzma >>>>>&-1 ubyte x \b%c >>>>>>&0 ubyte !0x20 >>>>>>>&-1 ubyte !0x2f # display 4th character of file name extension like a of lzma >>>>>>>>&-1 ubyte x \b%c # split debian package case >68 string =2.1\n # dpkg-1.18.25/dpkg-split/info.c # NL terminated ASCII package name like ckermit >>&0 string x \b, %s # NL terminated package version like 302-5.3 >>>&1 string x %s # NL terminated MD5 checksum >>>>&1 string x \b, MD5 %s # NL terminated original package length >>>>>&1 string x \b, unsplitted size %s # NL terminated part length >>>>>>&1 string x \b, part length %s # NL terminated package part like n/m >>>>>>>&1 string x \b, part %s # NL terminated package architecture like armhf since dpkg 1.16.1 or later >>>>>>>>&1 string x \b, %s # # MIPS archive; they're in the portable archive format, and need to go # before the entry for regular portable archives, as it's recognized as # a portable archive whose first member has a name beginning with # "__________E". # 0 string =!\n__________E MIPS archive !:mime application/x-archive >20 string U with MIPS Ucode members >21 string L with MIPSEL members >21 string B with MIPSEB members >19 string L and an EL hash table >19 string B and an EB hash table >22 string X -- out of date # # BSD/SVR2-and-later portable archive formats. # # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/AR # Reference: https://www.unix.com/man-page/opensolaris/3HEAD/ar.h/ # Note: Mach-O universal binary in ./cafebabe is dependent # TODO: unify current ar archive, MIPS archive, Debian package # distinguish BSD, SVR; 32, 64 bit; HP from other 32-bit SVR; # *.ar packages from *.a libraries. handle empty archive 0 string =!\n current ar archive # print first and possibly second ar_name[16] for debugging purpose #>8 string x \b, 1st "%.16s" #>68 string x \b, 2nd "%.16s" !:mime application/x-archive # a in most case for libraries; lib for Microsoft libraries; ar else cases !:ext a/lib/ar >8 string __.SYMDEF random library # first member with long marked name __.SYMDEF SORTED implies BSD library >68 string __.SYMDEF\ SORTED random library # Reference: https://parisc.wiki.kernel.org/images-parisc/b/b2/Rad_11_0_32.pdf # "archive file" entry moved from ./hp # LST header system_id 0210h~PA-RISC 1.1,... identifies the target architecture # LST header a_magic 0619h~relocatable library >68 belong 0x020b0619 - PA-RISC1.0 relocatable library >68 belong 0x02100619 - PA-RISC1.1 relocatable library >68 belong 0x02110619 - PA-RISC1.2 relocatable library >68 belong 0x02140619 - PA-RISC2.0 relocatable library #EOF for common ar archives # # "Thin" archive, as can be produced by GNU ar. # 0 string =!\n thin archive with >68 belong 0 no symbol entries >68 belong 1 %d symbol entry >68 belong >1 %d symbol entries 0 search/1 -h- Software Tools format archive text # ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com) # # The first byte is the magic (0x1a), byte 2 is the compression type for # the first file (0x01 through 0x09), and bytes 3 to 15 are the MS-DOS # filename of the first file (null terminated). Since some types collide # we only test some types on basis of frequency: 0x08 (83%), 0x09 (5%), # 0x02 (5%), 0x03 (3%), 0x04 (2%), 0x06 (2%). 0x01 collides with terminfo. 0 lelong&0x8080ffff 0x0000081a ARC archive data, dynamic LZW !:mime application/x-arc 0 lelong&0x8080ffff 0x0000091a ARC archive data, squashed !:mime application/x-arc 0 lelong&0x8080ffff 0x0000021a ARC archive data, uncompressed !:mime application/x-arc 0 lelong&0x8080ffff 0x0000031a ARC archive data, packed !:mime application/x-arc 0 lelong&0x8080ffff 0x0000041a ARC archive data, squeezed !:mime application/x-arc 0 lelong&0x8080ffff 0x0000061a ARC archive data, crunched !:mime application/x-arc # [JW] stuff taken from idarc, obviously ARC successors: 0 lelong&0x8080ffff 0x00000a1a PAK archive data !:mime application/x-arc 0 lelong&0x8080ffff 0x0000141a ARC+ archive data !:mime application/x-arc 0 lelong&0x8080ffff 0x0000481a HYP archive data !:mime application/x-arc # Acorn archive formats (Disaster prone simpleton, m91dps@ecs.ox.ac.uk) # I can't create either SPARK or ArcFS archives so I have not tested this stuff # [GRR: the original entries collide with ARC, above; replaced with combined # version (not tested)] #0 byte 0x1a RISC OS archive (spark format) 0 string \032archive RISC OS archive (ArcFS format) 0 string Archive\000 RISC OS archive (ArcFS format) # All these were taken from idarc, many could not be verified. Unfortunately, # there were many low-quality sigs, i.e. easy to trigger false positives. # Please notify me of any real-world fishy/ambiguous signatures and I'll try # to get my hands on the actual archiver and see if I find something better. [JW] # probably many can be enhanced by finding some 0-byte or control char near the start # idarc calls this Crush/Uncompressed... *shrug* 0 string CRUSH Crush archive data # Squeeze It (.sqz) 0 string HLSQZ Squeeze It archive data # SQWEZ 0 string SQWEZ SQWEZ archive data # HPack (.hpk) 0 string HPAK HPack archive data # HAP 0 string \x91\x33HF HAP archive data # MD/MDCD 0 string MDmd MDCD archive data # LIM 0 string LIM\x1a LIM archive data # SAR 3 string LH5 SAR archive data # BSArc/BS2 0 string \212\3SB\020\0 BSArc/BS2 archive data # Bethesda Softworks Archive (Oblivion) 0 string BSA\0 BSArc archive data >4 lelong x version %d # MAR 2 string =-ah MAR archive data # ACB #0 belong&0x00f800ff 0x00800000 ACB archive data # CPZ # TODO, this is what idarc says: 0 string \0\0\0 CPZ archive data # JRC 0 string JRchive JRC archive data # Quantum 0 string DS\0 Quantum archive data # ReSOF 0 string PK\3\6 ReSOF archive data # QuArk 0 string 7\4 QuArk archive data # YAC 14 string YC YAC archive data # X1 0 string X1 X1 archive data 0 string XhDr X1 archive data # CDC Codec (.dqt) 0 belong&0xffffe000 0x76ff2000 CDC Codec archive data # AMGC 0 string \xad6" AMGC archive data # NuLIB 0 string N\xc3\xb5F\xc3\xa9lx\xc3\xa5 NuLIB archive data # PakLeo 0 string LEOLZW PAKLeo archive data # ChArc 0 string SChF ChArc archive data # PSA 0 string PSA PSA archive data # CrossePAC 0 string DSIGDCC CrossePAC archive data # Freeze 0 string \x1f\x9f\x4a\x10\x0a Freeze archive data # KBoom 0 string \xc2\xa8MP\xc2\xa8 KBoom archive data # NSQ, must go after CDC Codec 0 string \x76\xff NSQ archive data # DPA 0 string Dirk\ Paehl DPA archive data # BA # TODO: idarc says "bytes 0-2 == bytes 3-5" # TTComp # URL: http://fileformats.archiveteam.org/wiki/TTComp_archive # Update: Joerg Jenderek # GRR: line below is too general as it matches also Panorama database "TCDB 2003-10 demo.pan", others 0 string \0\6 # look for first keyword of Panorama database *.pan >12 search/261 DESIGN # skip keyword with low entropy >12 default x # skip DOS 2.0 backup id file, sequence 6 with many nils like BACKUPID_xx6.@@@ handled by ./msdos >>8 quad !0 >>>0 use ttcomp # variant ASCII, 4K dictionary (strength=48=50-2). With strength=49 wrong order! WHY? 0 string \1\6 # TODO: # skip VAX-order 68k Blit mpx/mux executable (strength=50) handled by ./blit !:strength -2 >0 use ttcomp 0 string \0\5 # skip some DOS 2.0 backup id file, sequence 5 with many nils like BACKUPID_075.@@@ handled by ./msdos >8 quad !0 >>0 use ttcomp 0 string \1\5 # TODO: # variant ASCII, 2K dictionary (strength=48=50-2). With strength=49 wrong order! WHY? # skip ctab data (strength=50) handled by ./ibm6000 # skip locale data table (strength=50) handled by ./digital !:strength -2 >0 use ttcomp 0 string \0\4 # skip many Maple help database *.hdb with version tag handled by ./maple >1028 string !version # skip veclib maple.hdb by looking for Mable keyword >>4 search/1091 Maple\040 #>4 search/34090 Maple\040 >>4 default x # skip DOS 2.0-3.2 backed up sequence 4 with many nils like LOTUS5.RAR handled by ./msdos # skip xBASE Compound Index file *.CDX with many nils >>>0x54 quad !0 >>>>0 use ttcomp 0 string \1\4 # TODO: # skip shared library (strength=50) handled by ./ibm6000 !:strength -2 # skip Commodore PET BASIC programs (Mastermind.prg) with last 3 nil bytes (\0~end of line followed by 0000h line offset) #>-4 ubelong x LAST_BYTES=%8.8x >-4 ubelong&0x00FFffFF !0 >>0 use ttcomp # display information of TTComp archive 0 name ttcomp # (version 5.25) labeled the entry as "TTComp archive data" >0 ubyte x TTComp archive data !:mime application/x-compress-ttcomp # PBACKSCR.PI1 !:ext $xe/$ts/pi1/__d # compression type: 0~binary compression 1~ASCII compression >0 ubyte 0 \b, binary >0 ubyte 1 \b, ASCII # size of the dictionary: 4~1024 bytes 5~2048 bytes 6~4096 bytes >1 ubyte 4 \b, 1K >1 ubyte 5 \b, 2K >1 ubyte 6 \b, 4K >1 ubyte x dictionary # https://mark0.net/forum/index.php?topic=848 # last 3 bytes probably have only 8 possible bit sequences # xxxxxxxx 0000000x 11111111 ____FFh # xxxxxxxx 10000000 01111111 __807Fh # 0xxxxxxx 11000000 00111111 __C03Fh # 00xxxxxx 11100000 00011111 __E01Fh # 000xxxxx 11110000 00001111 __F00Fh # 0000xxxx 11111000 00000111 __F807h # 00000xxx 11111100 00000011 __FC03h # 000000xx 11111110 00000001 __FE01h # but for quickgif.__d 0A7DD4h #>-3 ubyte x \b, last 3 bytes 0x%2.2x #>-2 ubeshort x \b%4.4x # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Disk_Copy # reference: http://nulib.com/library/FTN.e00005.htm 0x52 ubeshort 0x0100 # test for disk image size equal or above 400k >0x40 ubelong >409599 # test also for disk image size equal or below 1440k to skip # windows7en.mbr UNICODE.DAT #>>0x40 ubelong <1474561 # test now for "low" disk image size equal or below 64 MiB to skip # windows7en.mbr (B441BBAAh) UNICODE.DAT (0400AF05h) >>0x40 ubelong <0x04000001 # To skip Flags$StringJoiner.class with size 00106A61h test also for valid disk image sizes # 00064000 for 400k GCR disks dc42-400k-gcr.trid.xml # 000c8000 for 800k GCR disks dc42-800k-gcr.trid.xml # 000b4000 for 720k MFM disks dc42-720k-mfm.trid.xml # 00168000 for 1440k MFM disks dc42-1440k-mfm.trid.xml # https://lisaem.sunder.net/LisaProjectDocs.txt # 00500000 05M available # 00A00000 10M available # 01800000 24M possible # 02000000 32M uncertain # 04000000 64M uncertain >>>0x40 ubelong&0xf8003fFF 0 # skip samples with invalid disk name length like: # 181 (biosmd80.rom) 202 (Flags$StringJoiner.class) 90 (UNICODE.DAT) >>>>0x0 ubyte <64 >>>>>0 use dc42-floppy # display information of Apple DiskCopy 4.2 floppy image 0 name dc42-floppy # disk name length; maximal 63 #>0 ubyte x DISK NAME LENGTH %u # ASCII image pascal (maximal 63 bytes) name padded with NULs like: # "Microsoft Mail" "Disquette 2" "IIe Installer Disk" # "-lisaem.sunder.net hd-" (dc42-lisaem.trid.xml) "-not a Macintosh disk" (dc42-nonmac.trid.xml) >00 pstring/B x Apple DiskCopy 4.2 image %s #!:mime application/octet-stream !:mime application/x-dc42-floppy-image !:apple dCpydImg # probably also img like: "Utilitaires 2.img" "Installation 7.img" !:ext image/dc42/img # data size in bytes like: 409600 737280 819200 1474560 >0x40 ubelong x \b, %u bytes # for debugging purpose size in hexadecimal #>0x40 ubelong x (%#8.8x) # tag size in bytes like: 0 (often) 2580h (PUID fmt/625) 4B00h (Microsoft Mail.image) >0x44 ubelong >0 \b, %#x tag size # data checksum #>0x48 ubelong x \b, %#x checksum # tag checksum #>0x4c ubelong x \b, %#x tag checksum # disk encoding like: 0 1 2 3 (PUID: fmt/625) >0x50 ubyte 0 \b, GCR CLV ssdd (400k) >0x50 ubyte 1 \b, GCR CLV dsdd (800k) >0x50 ubyte 2 \b, MFM CAV dsdd (720k) >0x50 ubyte 3 \b, MFM CAV dshd (1440k) >0x50 ubyte >3 \b, %#x encoding # format byte like: 12h (Lisa 400K) 24h (400K Macintosh) 96h (800K Apple II disk) # 2 (Mac 400k "Disquette Installation 13.image") # 22h (double-sided MFM or Mac 800k "Disco 12.image" "IIe Installer Disk.image") >0x51 ubyte x \b, %#x format #>0x54 ubequad x \b, data %#16.16llx # ESP, could this conflict with Easy Software Products' (e.g.ESP ghostscript) documentation? 0 string ESP ESP archive data # ZPack 0 string \1ZPK\1 ZPack archive data # Sky 0 string \xbc\x40 Sky archive data # UFA 0 string UFA UFA archive data # Dry 0 string =-H2O DRY archive data # FoxSQZ 0 string FOXSQZ FoxSQZ archive data # AR7 0 string ,AR7 AR7 archive data # PPMZ 0 string PPMZ PPMZ archive data # MS Compress # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/MS-DOS_installation_compression # Reference: https://hwiegman.home.xs4all.nl/fileformats/compress/szdd_kwaj_format.html # Note: use correct version of extracting tool like EXPAND, UNPACK, DECOMP or 7Z 4 string \x88\xf0\x27 # KWAJ variant >0 string KWAJ MS Compress archive data, KWAJ variant !:mime application/x-ms-compress-kwaj # extension not working in version 5.32 # magic/Magdir/archive, 284: Warning: EXTENSION type ` ??_' has bad char '?' # file: line 284: Bad magic entry ' ??_' !:ext ??_ # compression method (0-4) >>8 uleshort x \b, %u method # offset of compressed data >>10 uleshort x \b, %#x offset #>>(10.s) uleshort x #>>>&-6 string x \b, TEST extension %-.3s # header flags to mark header extensions >>12 uleshort >0 \b, %#x flags # 4 bytes: decompressed length of file >>12 uleshort &0x01 >>>14 ulelong x \b, original size: %u bytes # 2 bytes: unknown purpose # 2 bytes: length of unknown data + mentioned bytes # 1-9 bytes: null-terminated file name # 1-4 bytes: null-terminated file extension >>12 uleshort &0x08 >>>12 uleshort ^0x01 >>>>12 uleshort ^0x02 >>>>>12 uleshort ^0x04 >>>>>>12 uleshort ^0x10 >>>>>>>14 string x \b, %-.8s >>>>>>12 uleshort &0x10 >>>>>>>14 string x \b, %-.8s >>>>>>>>&1 string x \b.%-.3s >>>>>12 uleshort &0x04 >>>>>>12 uleshort ^0x10 >>>>>>>(14.s) uleshort x >>>>>>>>&14 string x \b, %-.8s >>>>>>12 uleshort &0x10 >>>>>>>(14.s) uleshort x >>>>>>>>&14 string x \b, %-.8s >>>>>>>>>&1 string x \b.%-.3s >>>>12 uleshort &0x02 >>>>>12 uleshort ^0x04 >>>>>>12 uleshort ^0x10 >>>>>>>16 string x \b, %-.8s >>>>>>12 uleshort &0x10 >>>>>>>16 string x \b, %-.8s >>>>>>>>&1 string x \b.%-.3s >>>>>12 uleshort &0x04 >>>>>>12 uleshort ^0x10 >>>>>>>(16.s) uleshort x >>>>>>>>&16 string x \b, %-.8s >>>>>>12 uleshort &0x10 #>>>>>>>(16.s) uleshort x >>>>>>>&16 string x %-.8s >>>>>>>>&1 string x \b.%-.3s >>>12 uleshort &0x01 >>>>12 uleshort ^0x02 >>>>>12 uleshort ^0x04 >>>>>>12 uleshort ^0x10 >>>>>>>18 string x \b, %-.8s >>>>>>12 uleshort &0x10 >>>>>>>18 string x \b, %-.8s >>>>>>>>&1 string x \b.%-.3s >>>>>12 uleshort &0x04 >>>>>>12 uleshort ^0x10 >>>>>>>(18.s) uleshort x >>>>>>>>&18 string x \b, %-.8s >>>>>>12 uleshort &0x10 >>>>>>>(18.s) uleshort x >>>>>>>>&18 string x \b, %-.8s >>>>>>>>>&1 string x \b.%-.3s >>>>12 uleshort &0x02 >>>>>12 uleshort ^0x04 >>>>>>12 uleshort ^0x10 >>>>>>>20 string x \b, %-.8s >>>>>>12 uleshort &0x10 >>>>>>>20 string x \b, %-.8s >>>>>>>>&1 string x \b.%-.3s >>>>>12 uleshort &0x04 >>>>>>12 uleshort ^0x10 >>>>>>>(20.s) uleshort x >>>>>>>>&20 string x \b, %-.8s >>>>>>12 uleshort &0x10 >>>>>>>(20.s) uleshort x >>>>>>>>&20 string x \b, %-.8s >>>>>>>>>&1 string x \b.%-.3s # 2 bytes: length of data + mentioned bytes # # SZDD variant Haruhiko Okumura's LZSS or 7z type MsLZ # URL: http://fileformats.archiveteam.org/wiki/MS-DOS_installation_compression # Reference: http://www.cabextract.org.uk/libmspack/doc/szdd_kwaj_format.html # http://mark0.net/download/triddefs_xml.7z/defs/s/szdd.trid.xml # Note: called "Microsoft SZDD compressed (Haruhiko Okumura's LZSS)" by TrID # verfied by 7-Zip `7z l -tMsLZ -slt *.??_` as MsLZ # `deark -l -m lzss_oku -d2 setup-1-41.bin` as "LZSS.C by Haruhiko Okumura" >0 string SZDD MS Compress archive data, SZDD variant # 2nd part of signature #>>4 ubelong 0x88F02733 \b, SIGNATURE OK !:mime application/x-ms-compress-szdd !:ext ??_ # The character missing from the end of the filename (0=unknown) >>9 string >\0 \b, %-.1s is last character of original name # https://www.betaarchive.com/forum/viewtopic.php?t=26161 # Compression mode: "A" (0x41) found but sometimes "B" in Windows 3.1 builds 026 and 034e >>8 string !A \b, %-.1s method >>10 ulelong >0 \b, original size: %u bytes # Summary: InstallShield archive with SZDD compressed # URL: https://community.flexera.com/t5/InstallShield-Knowledge-Base/InstallShield-Redistributable-Files/ta-p/5647 # From: Joerg Jenderek 1 search/48/bs SZDD\x88\xF0\x27\x33 InstallShield archive #!:mime application/octet-stream !:mime application/x-installshield-compress-szdd !:ext ibt # name of compressed archive member like: setup.dl_ _setup7int.dl_ _setup2k.dl_ _igdi.dl_ cabinet.dl_ >0 string x %s # name of uncompressed archive member like: setup.dll _Setup.dll IGdi.dll CABINET.DLL >>&1 string x (%s) # probably version like: 9.0.0.333 9.1.0.429 11.50.0.42618 >>>&1 string x \b, version %s # SZDD member length like: 168048 169333 181842 >>>>&1 string x \b, %s bytes # MS Compress archive data #>&0 string SZDD \b, SIGNATURE FOUND >&0 indirect x # QBasic SZDD variant 3 string \x88\xf0\x27 >0 string SZ\x20 MS Compress archive data, QBasic variant !:mime application/x-ms-compress-sz !:ext ??$ >>8 ulelong >0 \b, original size: %u bytes # Summary: lzss compressed/EDI Pack # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/EDI_Install_packed_file # Note: called "EDI Install LZS compressed data" by TrID and verified by # command like `deark -l -m edi_pack -d2 BOOK01A.IC$` as "EDI Pack LZSS1" 0 string EDILZSS >7 string 1 # look for point character before orginal file name extension >>8 search/9/b . # check suffix of possible orginal file anme #>>>&0 ubelong x SUFFIX=%8.8x # samples without valid character after point in original file name field like: FENNEL.LZS PLANTAIN.LZS >>>&0 ubyte <0x20 >>>>0 use edi-lzs # samples with valid character after point in original file name field >>>&0 ubyte >0x1F # check 2nd charcter of suffix #>>>>&0 ubyte x 2ND_SUFFIX=%x # sample with one valid character after point followed by \0 in original file name field like: SPELMATE.H$ >>>>&0 ubyte =0 >>>>>0 use edi-pack >>>>&0 ubyte >0x1F # check 3rd charcter of suffix #>>>>>&0 ubyte x 3RD_SUFFIX=%x # no sample with 2 valid characters after point followed by \0 in original file name field >>>>>&0 ubyte =0 >>>>>>0 use edi-pack # samples with valid 3rd character after point in original file name field >>>>>&0 ubyte >0x1F # sample with 3 valid character after point followed by \0 in original file name field like: BOOK01A.IC$ CTL3D.DL$ >>>>>>&0 ubyte =0 >>>>>>>0 use edi-pack # sample with 3 valid character after point followed by no \0 in original file name field like: HERBTEXT.LZS >>>>>>&0 ubyte !0 >>>>>>>0 use edi-lzs # no sample with invalid 3rd character after point in original file name field >>>>>&0 default x >>>>>>0 use edi-lzs # sample with invalid 2nd character after point in original file name field like: LACERATE.LZS SPLINTER.LZS >>>>&0 default x >>>>>0 use edi-lzs # sample without point character in original file name field like GUNSHOT.LZS >>8 default x >>>0 use edi-lzs # Reference: http://mark0.net/download/triddefs_xml.7z/defs/e/edi-lzss2.trid.xml # Note: called "EDI Install Pro LZSS2 compressed data" by TrID and verified by # command like `deark -l -m edi_pack -d2 4WAY.WA$` as "EDI Pack LZSS2" >7 string 2 EDI LZSS2 packed #!:mime application/octet-stream !:mime application/x-edi-pack-lzss # the name of a compressed file often ends in character '$' or '_' !:ext ??$/??_ # original filename, NUL-terminated, padded to 13 bytes like: mci.vbx 4way.wav skymap.exe cmdialog.vbx >>8 string x "%-0.13s" # original file size, as a 4-byte integer. >>21 ulelong x \b, %u bytes # compressed data like: ff5249464606ec00 ff4d5aa601010000 >>>25 ubequad x \b, data %#16.16llx... 0 name edi-pack # Note: verified by command like `deark -l -d2 SPELMATE.H$` as "EDI Pack LZSS1" # original filename, NUL-terminated, padded to 13 bytes like: ctl3d.dll spelmate.h filemenu.rc owl.def index-it.exe # but not like \377Aloe.lzs\273 (HERBTEXT.LZS) >8 string x EDI LZSS packed "%-.13s" #!:mime application/octet-stream !:mime application/x-edi-pack-lzss # the name of a compressed file often ends in character '$' or '_' !:ext ??$/?$ # compressed data like: f7000001eff02020 ff4d5aa900020000 ff2f2a207370656c >21 ubequad x \b, data %#16.16llx... # URL: http://fileformats.archiveteam.org/wiki/EDI_LZSSLib # Note: verified partly by command like `deark -l -m edi_pack -d2 GUNSHOT.LZS` as "EDI LZSSLib" 0 name edi-lzs # Note: verified by command like `deark -l -d2 GUNSHOT.LZS` as "EDI LZSSLib" # no original filename looks like: \277BM\226.\0 \277BM.n\001 \277BM\226.\0 \277BM.g\001 \377Aloe.lzs\273 >8 string x EDI LZSSLib packed #!:mime application/octet-stream !:mime application/x-edi-pack-lzss # The name of a compressed file ends with LZS suffix !:ext lzs # compressed data like: bf424df6e10100f3 ff416c6f652e6c7a ff416c6f652e6c7a >8 ubequad x \b, data %#16.16llx... # Summary: CAZIP compressed file # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/CAZIP # Reference: http://mark0.net/download/triddefs_xml.7z/defs/c/caz.trid.xml # Note: Format is distinct from CAZIPXP compressed 0 string \x0D\x0A\x1ACAZIP CAZIP compressed file #!:mime application/octet-stream !:mime application/x-compress-cazip # like: BLINKER.WR_ CLIPDEFS._ CAOSETUP.EX_ CLIPPER.EX_ FILEIO.C_ !:ext ??_/?_/_ # Summary: FTCOMP compressed archive # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/FTCOMP # Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-ftcomp.trid.xml # Note: called by TrID "FTCOMP compressed archive" # extracted by `unpack seahelp.hl_` 24 string/b FTCOMP FTCOMP compressed archive #!:mime application/octet-stream !:mime application/x-compress-ftcomp !:ext ??_/??@/dll/drv/pk2/ # probably A596FDFF magic at the beginning >0 ubelong !0xA596FDFF \b, at beginning %#x # probably original file name with directory like: \OS2\unpack.exe \SYSTEM\8514.DRV MAHJONGG.EXE >41 string x "%s" # MP3 (archiver, not lossy audio compression) 0 string MP3\x1a MP3-Archiver archive data # ZET 0 string OZ\xc3\x9d ZET archive data # TSComp # Update: Joerg Jenderek 2023 Nov # URL: http://fileformats.archiveteam.org/wiki/TSComp # Reference: http://mark0.net/download/triddefs_xml.7z/defs/t/tscomp.trid.xml # https://entropymine.com/deark/releases/deark-1.6.5.tar.gz # deark-1.6.5/modules/installshld.c # Note: called "TSComp compressed data" by TrID # verified by command like `deark -m tscomp -l -d2 MAKERRES.DL$` # The "13" might be a version number. The "8c" is a mystery 0 string \x65\x5d\x13\x8c\x08\x01\x03\x00 TSComp archive #!:mime application/octet-stream !:mime application/x-tscomp-compressed # filename style: 0~old version 1~without wildcard 2~with wildcard #>0x08 ubyte x \b, filename style %u >0x08 ubyte 0 data, filename style 0 # no example found !:ext ??$ #>0x08 ubyte 1 data, without wildcard >0x08 ubyte 1 data # for single-file archives, often the last letter of the filename extension is changed to "$"; but also name like: BUILD3.BM! !:ext ??$/??! >0x08 ubyte 2 data, with wildcard # for multi-file archives common extensions seem to be .lib and .cmp, but also names like: SAMPMIF$ OTDATA.$$$ TWOFILES.TSC WIN.PAK !:ext /lib/cmp/$$$/tsc/pak # fnlen; pascal string length; original 1st file name like: CHFORMAT.MML >0x1c pstring x \b, %s # md->fi->timestamp >0x16 lemsdosdate x \b, modified %s >0x18 lemsdostime x %s # 1st compressed size: like 180 (SAMPMML$$) >0x0E ulelong x \b, compressed size %u # de_dbg_indent(c, 1): like: 12h #>0x0d ubyte x b, at 0xD %#x # like: 0 #>0x1A ubeshort x \b, at 0x1A %#x # 2nd member offset #>0x12 ulelong x \b, next offset %#x >0x12 ulelong >0 # original 2nd archive member name like: FORMATS.MML >>(0x12.l+15) pstring x \b, %s ... # ARQ 0 string gW\4\1 ARQ archive data # Squash 3 string OctSqu Squash archive data # Terse 0 string \5\1\1\0 Terse archive data # UHarc 0 string UHA UHarc archive data # ABComp 0 string \2AB ABComp archive data 0 string \3AB2 ABComp archive data # CMP 0 string CO\0 CMP archive data # Splint 0 string \x93\xb9\x06 Splint archive data # InstallShield 0 string \x13\x5d\x65\x8c InstallShield Z archive Data # Gather 1 string GTH Gather archive data # BOA 0 string BOA BOA archive data # RAX 0 string ULEB\xa RAX archive data # Xtreme 0 string ULEB\0 Xtreme archive data # Pack Magic 0 string @\xc3\xa2\1\0 Pack Magic archive data # BTS 0 belong&0xfeffffff 0x1a034465 BTS archive data # ELI 5750 0 string Ora\ ELI 5750 archive data # QFC 0 string \x1aFC\x1a QFC archive data 0 string \x1aQF\x1a QFC archive data # PRO-PACK https://www.segaretro.org/Rob_Northen_compression 0 string RNC >3 byte 1 PRO-PACK archive data (compression 1) >3 byte 2 PRO-PACK archive data (compression 2) # 777 0 string 777 777 archive data # LZS221 0 string sTaC LZS221 archive data # HPA 0 string HPA HPA archive data # Arhangel 0 string LG Arhangel archive data # EXP1, uses bzip2 0 string 0123456789012345BZh EXP1 archive data # IMP 0 string IMP\xa IMP archive data # NRV 0 string \x00\x9E\x6E\x72\x76\xFF NRV archive data # Squish 0 string \x73\xb2\x90\xf4 Squish archive data # Par 0 string PHILIPP Par archive data 0 string PAR Par archive data # HIT 0 string UB HIT archive data # SBX 0 belong&0xfffff000 0x53423000 SBX archive data # NaShrink 0 string NSK NaShrink archive data # SAPCAR 0 string #\ CAR\ archive\ header SAPCAR archive data 0 string CAR\ 2.00 SAPCAR archive data 0 string CAR\ 2.01 SAPCAR archive data #!:mime application/octet-stream !:mime application/vnd.sar !:ext sar # Disintegrator 0 string DST Disintegrator archive data # ASD 0 string ASD ASD archive data # InstallShield CAB # Update: Joerg Jenderek at Nov 2021 # URL: https://en.wikipedia.org/wiki/InstallShield # Reference: https://github.com/twogood/unshield/blob/master/lib/cabfile.h # Note: Not compatible with Microsoft CAB files # http://mark0.net/download/triddefs_xml.7z/defs/a/ark-cab-ishield.trid.xml # CAB_SIGNATURE 0x28635349 0 string ISc( InstallShield #!:mime application/octet-stream !:mime application/x-installshield # http://mark0.net/download/triddefs_xml.7z/defs/a/ark-cab-ishield-hdr.trid.xml >16 ulelong !0 setup header # like: _SYS1.HDR _USER1.HDR data1.hdr !:ext hdr >16 ulelong =0 CAB # like: _SYS1.CAB _USER1.CAB DATA1.CAB data2.cab !:ext cab # https://github.com/twogood/unshield/blob/master/lib/helper.c # version like: 0x1005201 0x100600c 0x1007000 0x1009500 # 0x2000578 0x20005dc 0x2000640 0x40007d0 0x4000834 >4 ulelong x \b, version %#x # volume_info like: 0 >8 ulelong !0 \b, volume_info %#x # cab_descriptor_offset like: 0x200 >12 ulelong !0x200 \b, offset %#x #>0x200 ubequad x \b, at 0x200 %#16.16llx # cab_descriptor_size like: 0 (*.cab) BD5 C8B DA5 E2A E36 116C 251D 4DA9 56F0 5CC2 6E4B 777D 779E 1F7C2 >16 ulelong !0 \b, descriptor size %#x # TOP4 0 string T4\x1a TOP4 archive data # BatComp left out: sig looks like COM executable # so TODO: get real 4dos batcomp file and find sig # BlakHole 0 string BH\5\7 BlakHole archive data # BIX 0 string BIX0 BIX archive data # ChiefLZA 0 string ChfLZ ChiefLZA archive data # Blink 0 string Blink Blink archive data # Logitech Compress 0 string \xda\xfa Logitech Compress archive data # ARS-Sfx (FIXME: really a SFX? then goto COM/EXE) 1 string (C)\ STEPANYUK ARS-Sfx archive data # AKT/AKT32 0 string AKT32 AKT32 archive data 0 string AKT AKT archive data # NPack 0 string MSTSM NPack archive data # PFT 0 string \0\x50\0\x14 PFT archive data # SemOne 0 string SEM SemOne archive data # PPMD 0 string \x8f\xaf\xac\x84 PPMD archive data # FIZ 0 string FIZ FIZ archive data # MSXiE 0 belong&0xfffff0f0 0x4d530000 MSXiE archive data # DeepFreezer 0 belong&0xfffffff0 0x797a3030 DeepFreezer archive data # DC 0 string =8 pstring/h x "%s" # according to TrID the next 3 bytes are nil >5 ubyte !0 \b, at 5 %#x >6 ubyte !0 \b, at 6 %#x >7 ubyte !0 \b, at 7 %#x # the fourth byte with value 0 is probably a flag for "non solid" mode #>3 ubyte =0x00 \b, unsolid mode 0 string Ai\2\1 Ai32 archive data #!:mime application/octet-stream !:mime application/x-compress-ai !:ext ai # original file name >8 pstring/h x "%s" # the fourth byte with value 0x01 is probably a flag for "solid" mode; this is not the default >3 ubyte =0x01 \b, solid mode # SBC 0 string SBC SBC archive data # Ybs 0 string YBS Ybs archive data # DitPack 0 string \x9e\0\0 DitPack archive data # DMS 0 string DMS! DMS archive data # EPC 0 string \x8f\xaf\xac\x8c EPC archive data # VSARC 0 string VS\x1a VSARC archive data # PDZ 0 string PDZ PDZ archive data # ReDuq 0 string rdqx ReDuq archive data # GCA 0 string GCAX GCA archive data # PPMN 0 string pN PPMN archive data # WinImage 3 string WINIMAGE WinImage archive data # Compressia 0 string CMP0CMP Compressia archive data # UHBC 0 string UHB UHBC archive data # WinHKI 0 string \x61\x5C\x04\x05 WinHKI archive data # WWPack data file 0 string WWP WWPack archive data # BSN (BSA, PTS-DOS) 0 string \xffBSG BSN archive data 1 string \xffBSG BSN archive data 3 string \xffBSG BSN archive data 1 string \0\xae\2 BSN archive data 1 string \0\xae\3 BSN archive data 1 string \0\xae\7 BSN archive data # AIN 0 string \x33\x18 AIN archive data 0 string \x33\x17 AIN archive data # XPA32 test moved and merged with XPA by Joerg Jenderek at Sep 2015 # SZip (TODO: doesn't catch all versions) 0 string SZ\x0a\4 SZip archive data # XPack DiskImage # *.XDI updated by Joerg Jenderek Sep 2015 # ftp://ftp.sac.sk/pub/sac/pack/0index.txt # GRR: this test is still too general as it catches also text files starting with jm 0 string jm # only found examples with this additional characteristic 2 bytes >2 string \x2\x4 Xpack DiskImage archive data #!:ext xdi # XPack Data # *.xpa updated by Joerg Jenderek Sep 2015 # ftp://ftp.elf.stuba.sk/pub/pc/pack/ 0 string xpa XPA !:ext xpa # XPA32 # ftp://ftp.elf.stuba.sk/pub/pc/pack/xpa32.zip # created by XPA32.EXE version 1.0.2 for Windows >0 string xpa\0\1 \b32 archive data # created by XPACK.COM version 1.67m or 1.67r with short 0x1800 >3 ubeshort !0x0001 \bck archive data # XPack Single Data # changed by Joerg Jenderek Sep 2015 back to like in version 5.12 # letter 'I'+ acute accent is equivalent to \xcd 0 string \xcd\ jm Xpack single archive data #!:mime application/x-xpa-compressed !:ext xpa # TODO: missing due to unknown magic/magic at end of file: #DWC #ARG #ZAR #PC/3270 #InstallIt #RKive #RK #XPack Diskimage # These were inspired by idarc, but actually verified # Dzip archiver (.dz) # Update: Joerg Jenderek # URL: http://speeddemosarchive.com/dzip/ # reference: http://speeddemosarchive.com/dzip/dz29src.zip/main.c # GRR: line below is too general as it matches also ASCII texts like Doszip commander help dz.txt 0 string DZ # latest version is 2.9 dated 7 may 2003 >2 byte <4 Dzip archive data !:mime application/x-dzip !:ext dz >>2 byte x \b, version %i >>3 byte x \b.%i >>4 ulelong x \b, offset %#x >>8 ulelong x \b, %u files # ZZip archiver (.zz) 0 string ZZ\ \0\0 ZZip archive data 0 string ZZ0 ZZip archive data # PAQ archiver (.paq) 0 string \xaa\x40\x5f\x77\x1f\xe5\x82\x0d PAQ archive data 0 string PAQ PAQ archive data >3 byte&0xf0 0x30 >>3 byte x (v%c) # JAR archiver (.j), this is the successor to ARJ, not Java's JAR (which is essentially ZIP) # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/JAR_(ARJ_Software) # reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-jar.trid.xml # https://www.sac.sk/download/pack/jar102x.exe/TECHNOTE.DOC # Note: called "JAR compressed archive" by TrID 0xe string \x1aJar\x1b JAR (ARJ Software, Inc.) archive data #!:mime application/octet-stream !:mime application/x-compress-j >0 ulelong x \b, CRC32 %#x # standard suffix is ".j"; for multi volumes following order j01 j02 ... j99 100 ... 990 !:ext j/j01/j02 # URL: http://fileformats.archiveteam.org/wiki/JARCS # reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-jarcs.trid.xml # Note: called "JARCS compressed archive" by TrID 0 string JARCS JAR (ARJ Software, Inc.) archive data #!:mime application/octet-stream !:mime application/x-compress-jar !:ext jar # ARJ archiver (jason@jarthur.Claremont.EDU) # URL: http://fileformats.archiveteam.org/wiki/ARJ # reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-arj.trid.xml # https://github.com/FarGroup/FarManager/ # blob/master/plugins/multiarc/arc.doc/arj.txt # Note: called "ARJ compressed archive" by TrID and # "ARJ File Format" by DROID via PUID fmt/610 # verified by `7z l -tarj PHRACK1.ARJ` and # `arj.exe l TEST-hk9.ARJ` 0 leshort 0xea60 # skip DROID fmt-610-signature-id-946.arj by check for valid file type of main header >0xA ubyte 2 >>0 use arj-archive 0 name arj-archive >0 leshort x ARJ archive !:mime application/x-arj # look for terminating 0-character of filename >0x26 search/1024 \0 # file name extension is normally .arj but not for parts of multi volume #>>&-5 string x extension %.4s >>&-5 string/c .arj data !:ext arj >>&-5 default x # for multi volume first name is archive.arj then following parts archive.a01 archive.a02 ... >>>8 byte &0x04 data !:ext a01/a02 # for SFX first name is archive.exe then following parts archive.e01 archive.e02 ... >>>8 byte ^0x04 data, SFX multi-volume !:ext e01/e02 # basic header size like: 0x002b 0x002c 0x04e0 0x04e3 0x04e7 #>2 uleshort x basic header size %#4.4x # next fragment content like: 0x0a200a003a8fc713 0x524a000010bb3471 0x524a0000c73c70f9 #>(2.s) ubequad x NEXT FRAGMENT CONTENT %#16.16llx # first_hdr_size; seems to be same as basic header size #>2 uleshort x 1st header size %#x # archiver version number like: 3 4 6 11 102 >5 byte x \b, v%d # minimum archiver version to extract like: 1 >6 ubyte !1 \b, minimum %u to extract # FOR DEBUGGING #>8 byte x \b, FLAGS %#x # GARBLED_FLAG1; garble with password; g switch >8 byte &0x01 \b, password-protected # encryption version: 0~old 1~old 2~new 3~reserved 4~40 bit key GOST >>0x20 ubyte x (v%u) #>8 byte &0x02 \b, secured # ANSIPAGE_FLAG; indicates ANSI codepage used by ARJ32; hy switch >8 byte &0x02 \b, ANSI codepage # VOLUME_FLAG indicates presence of succeeding volume; but apparently not for SFX >8 byte &0x04 \b, multi-volume #>8 byte &0x08 \b, file-offset # ARJPROT_FLAG; build with data protection record; hk switch >8 byte &0x08 \b, recoverable # arj protection factor; maximal 10; switch hky -> factor=y+1 >>0x22 byte x (factor %u) >8 byte &0x10 \b, slash-switched # BACKUP_FLAG; obsolete >8 byte &0x20 \b, backup # SECURED_FLAG; >8 byte &0x40 \b, secured, # ALTNAME_FLAG; indicates dual-name archive >8 byte &0x80 \b, dual-name # security version; 0~old 2~current >9 ubyte !0 >>9 ubyte !2 \b, security version %u # file type; 2 in main header; 0~binary 1~7-bitText 2~comment 3~directory 4~VolumeLabel 5=ChapterLabel >0xA ubyte !2 \b, file type %u # date+time when original archive was created in MS-DOS format via ./msdos >0xC ulelong x \b, created >0xC use dos-date # or date and time by new internal function #>0xE lemsdosdate x %s #>0xC lemsdostime x %s # FOR DEBUGGING #>0x12 uleshort x RAW DATE %#4.4x #>0x10 uleshort x RAW TIME %#4.4x # date+time when archive was last modified; sometimes nil or # maybe wrong like in HP4DRVR.ARJ #>0x10 ulelong >0 \b, modified #>>0x10 use dos-date # or date and time by new internal function #>>0x12 lemsdosdate x %s #>>0x10 lemsdostime x %s # archive size (currently used only for secured archives); MAYBE? #>0x14 ulelong !0 \b, file size %u # security envelope file position; MAYBE? #>0x18 ulelong !0 \b, at %#x security envelope # filespec position in filename; WHAT IS THAT? #>0x1C uleshort >0 \b, filespec position %#x # length in bytes of security envelope data like: 2CAh 301h 364h 471h >0x1E uleshort !0 \b, security envelope length %#x # last chapter like: 0 1 >0x21 ubyte !0 \b, last chapter %u # filename (null-terminated string); sometimes at 0x26 when 4 bytes for extra data >34 byte x \b, original name: # with extras data >34 byte <0x0B >>38 string x %s # without extras data >34 byte >0x0A >>34 string x %s # host OS: 0~MSDOS ... 11~WIN32 >7 byte 0 \b, os: MS-DOS >7 byte 1 \b, os: PRIMOS >7 byte 2 \b, os: Unix >7 byte 3 \b, os: Amiga >7 byte 4 \b, os: Macintosh >7 byte 5 \b, os: OS/2 >7 byte 6 \b, os: Apple ][ GS >7 byte 7 \b, os: Atari ST >7 byte 8 \b, os: NeXT >7 byte 9 \b, os: VAX/VMS >7 byte 10 \b, os: WIN95 >7 byte 11 \b, os: WIN32 # [JW] idarc says this is also possible 2 leshort 0xea60 ARJ archive data #2 leshort 0xea60 #>2 use arj-archive # HA archiver (Greg Roelofs, newt@uchicago.edu) # This is a really bad format. A file containing HAWAII will match this... #0 string HA HA archive data, #>2 leshort =1 1 file, #>2 leshort >1 %u files, #>4 byte&0x0f =0 first is type CPY #>4 byte&0x0f =1 first is type ASC #>4 byte&0x0f =2 first is type HSC #>4 byte&0x0f =0x0e first is type DIR #>4 byte&0x0f =0x0f first is type SPECIAL # suggestion: at least identify small archives (<1024 files) 0 belong&0xffff00fc 0x48410000 HA archive data >2 leshort =1 1 file, >2 leshort >1 %u files, >4 byte&0x0f =0 first is type CPY >4 byte&0x0f =1 first is type ASC >4 byte&0x0f =2 first is type HSC >4 byte&0x0f =0x0e first is type DIR >4 byte&0x0f =0x0f first is type SPECIAL # HPACK archiver (Peter Gutmann, pgut1@cs.aukuni.ac.nz) 0 string HPAK HPACK archive data # JAM Archive volume format, by Dmitry.Kohmanyuk@UA.net 0 string \351,\001JAM\ JAM archive, >7 string >\0 version %.4s >0x26 byte =0x27 - >>0x2b string >\0 label %.11s, >>0x27 lelong x serial %08x, >>0x36 string >\0 fstype %.8s # LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu) # Update: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/LHA_(file_format) # Reference: https://web.archive.org/web/20021005080911/http://www.osirusoft.com/joejared/lzhformat.html # # check and display information of lharc (LHa,PMarc) file 0 name lharc-file # check 1st character of method id like -lz4- -lh5- or -pm2- >2 string - # check 5th character of method id >>6 string - # check header level 0 1 2 3 >>>20 ubyte <4 # check 2nd, 3th and 4th character of method id >>>>3 regex \^(lh[0-9a-ex]|lz[s2-8]|pm[012]|pc1) \b !:mime application/x-lzh-compressed # creator type "LHA " !:apple ????LHA # display archive type name like "LHa/LZS archive data" or "LArc archive" >>>>>2 string -lz \b !:ext lzs # already known -lzs- -lz4- -lz5- with old names >>>>>>2 string -lzs LHa/LZS archive data >>>>>>3 regex \^lz[45] LHarc 1.x archive data # missing -lz?- with wikipedia names >>>>>>3 regex \^lz[2378] LArc archive # display archive type name like "LHa (2.x) archive data" >>>>>2 string -lh \b # already known -lh0- -lh1- -lh2- -lh3- -lh4- -lh5- -lh6- -lh7- -lhd- variants with old names >>>>>>3 regex \^lh[01] LHarc 1.x/ARX archive data # LHice archiver use ".ICE" as name extension instead usual one ".lzh" # FOOBAR archiver use ".foo" as name extension instead usual one # "Florian Orjanov's and Olga Bachetska's ARchiver" not found at the moment >>>>>>>2 string -lh1 \b !:ext lha/lzh/ice >>>>>>3 regex \^lh[23d] LHa 2.x? archive data >>>>>>3 regex \^lh[7] LHa (2.x)/LHark archive data >>>>>>3 regex \^lh[456] LHa (2.x) archive data >>>>>>>2 string -lh5 \b # https://en.wikipedia.org/wiki/BIOS # Some mainboard BIOS like Award use LHa compression. So archives with unusual extension are found like # bios.rom , kd7_v14.bin, 1010.004, ... !:ext lha/lzh/rom/bin # missing -lh?- variants (Joe Jared) >>>>>>3 regex \^lh[89a-ce] LHa (Joe Jared) archive # UNLHA32 2.67a >>>>>>2 string -lhx LHa (UNLHA32) archive # lha archives with standard file name extensions ".lha" ".lzh" >>>>>>3 regex !\^(lh1|lh5) \b !:ext lha/lzh # this should not happen if all -lh variants are described >>>>>>2 default x LHa (unknown) archive #!:ext lha # PMarc >>>>>3 regex \^pm[012] PMarc archive data !:ext pma # append method id without leading and trailing minus character >>>>>3 string x [%3.3s] >>>>>>0 use lharc-header # # check and display information of lharc header 0 name lharc-header # header size 0x4 , 0x1b-0x61 #>0 ubyte x # compressed data size != compressed file size #>7 ulelong x \b, data size %d # attribute: 0x2~?? 0x10~symlink|target 0x20~normal #>19 ubyte x \b, 19_%#x # level identifier 0 1 2 3 #>20 ubyte x \b, level %d # time stamp #>15 ubelong x DATE %#8.8x # OS ID for level 1 >20 ubyte 1 # 0x20 types find for *.rom files >>(21.b+24) ubyte <0x21 \b, %#x OS # ascii type like M for MSDOS >>(21.b+24) ubyte >0x20 \b, '%c' OS # OS ID for level 2 >20 ubyte 2 #>>23 ubyte x \b, OS ID %#x >>23 ubyte <0x21 \b, %#x OS >>23 ubyte >0x20 \b, '%c' OS # filename only for level 0 and 1 >20 ubyte <2 # length of filename >>21 ubyte >0 \b, with # filename >>>21 pstring x "%s" # #2 string -lh0- LHarc 1.x/ARX archive data [lh0] #!:mime application/x-lharc 2 string -lh0- >0 use lharc-file #2 string -lh1- LHarc 1.x/ARX archive data [lh1] #!:mime application/x-lharc 2 string -lh1- >0 use lharc-file # NEW -lz2- ... -lz8- 2 string -lz2- >0 use lharc-file 2 string -lz3- >0 use lharc-file 2 string -lz4- >0 use lharc-file 2 string -lz5- >0 use lharc-file 2 string -lz7- >0 use lharc-file 2 string -lz8- >0 use lharc-file # [never seen any but the last; -lh4- reported in comp.compression:] #2 string -lzs- LHa/LZS archive data [lzs] 2 string -lzs- >0 use lharc-file # According to wikipedia and others such a version does not exist #2 string -lh\40- LHa 2.x? archive data [lh ] #2 string -lhd- LHa 2.x? archive data [lhd] 2 string -lhd- >0 use lharc-file #2 string -lh2- LHa 2.x? archive data [lh2] 2 string -lh2- >0 use lharc-file #2 string -lh3- LHa 2.x? archive data [lh3] 2 string -lh3- >0 use lharc-file #2 string -lh4- LHa (2.x) archive data [lh4] 2 string -lh4- >0 use lharc-file #2 string -lh5- LHa (2.x) archive data [lh5] 2 string -lh5- >0 use lharc-file #2 string -lh6- LHa (2.x) archive data [lh6] 2 string -lh6- >0 use lharc-file #2 string -lh7- LHa (2.x)/LHark archive data [lh7] 2 string -lh7- # !:mime application/x-lha # >20 byte x - header level %d >0 use lharc-file # NEW -lh8- ... -lhe- , -lhx- 2 string -lh8- >0 use lharc-file 2 string -lh9- >0 use lharc-file 2 string -lha- >0 use lharc-file 2 string -lhb- >0 use lharc-file 2 string -lhc- >0 use lharc-file 2 string -lhe- >0 use lharc-file 2 string -lhx- >0 use lharc-file # taken from idarc [JW] 2 string -lZ PUT archive data # already done by LHarc magics # this should never happen if all sub types of LZS archive are identified #2 string -lz LZS archive data 2 string -sw1- Swag archive data 0 name rar-file-header >24 byte 15 \b, v1.5 >24 byte 20 \b, v2.0 >24 byte 29 \b, v4 >15 byte 0 \b, os: MS-DOS >15 byte 1 \b, os: OS/2 >15 byte 2 \b, os: Win32 >15 byte 3 \b, os: Unix >15 byte 4 \b, os: Mac OS >15 byte 5 \b, os: BeOS 0 name rar-archive-header >3 leshort&0x1ff >0 \b, flags: >>3 leshort &0x01 ArchiveVolume >>3 leshort &0x02 Commented >>3 leshort &0x04 Locked >>3 leshort &0x10 NewVolumeNaming >>3 leshort &0x08 Solid >>3 leshort &0x20 Authenticated >>3 leshort &0x40 RecoveryRecordPresent >>3 leshort &0x80 EncryptedBlockHeader >>3 leshort &0x100 FirstVolume # RAR (Roshal Archive) archive 0 string Rar!\x1a\7\0 RAR archive data !:mime application/vnd.rar !:ext rar/cbr # file header >(0xc.l+9) byte 0x74 >>(0xc.l+7) use rar-file-header # subblock seems to share information with file header >(0xc.l+9) byte 0x7a >>(0xc.l+7) use rar-file-header >9 byte 0x73 >>7 use rar-archive-header 0 string Rar!\x1a\7\1\0 RAR archive data, v5 !:mime application/vnd.rar !:ext rar # Very old RAR archive # https://jasonblanks.com/wp-includes/images/papers/KnowyourarchiveRAR.pdf 0 string RE\x7e\x5e RAR archive data (26 uleshort 8 >>30 string Payload IOS/iPadOS IPA file >>>&26 search/6000 PK\003\004 >>>>&34 string x containing %s !:mime application/x-ios-app !:ext ipa # Android APK file (Zip archive) # Starts with AndroidManifest.xml (file name length = 19) >26 uleshort 19 >>30 string AndroidManifest.xml Android package (APK), with AndroidManifest.xml !:mime application/vnd.android.package-archive !:ext apk >>>-22 string PK\005\006 >>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 \b, with APK Signing Block # Starts with META-INF/com/android/build/gradle/app-metadata.properties >26 uleshort 57 >>30 string META-INF/com/android/build/gradle/ >>>&0 string app-metadata.properties Android package (APK), with gradle app-metadata.properties !:mime application/vnd.android.package-archive !:ext apk >>>>-22 string PK\005\006 >>>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 \b, with APK Signing Block # Starts with classes.dex (file name length = 11) >26 uleshort 11 >>30 string classes.dex Android package (APK), with classes.dex !:mime application/vnd.android.package-archive !:ext apk >>>-22 string PK\005\006 >>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 \b, with APK Signing Block # Starts with META-INF/MANIFEST.MF (file name length = 20) # NB: checks for resources.arsc, classes.dex, etc. as well to avoid matching JAR files >26 uleshort 20 >>30 string META-INF/MANIFEST.MF # Contains resources.arsc (near the end, in the central directory) >>>-512 search resources.arsc Android package (APK), with MANIFEST.MF and resources.arsc !:mime application/vnd.android.package-archive !:ext apk >>>>-22 string PK\005\006 >>>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 \b, with APK Signing Block >>>-512 default x # Contains classes.dex (near the end, in the central directory) >>>>-512 search classes.dex Android package (APK), with MANIFEST.MF and classes.dex !:mime application/vnd.android.package-archive !:ext apk >>>>>-22 string PK\005\006 >>>>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 \b, with APK Signing Block >>>>-512 default x # Contains lib/armeabi (near the end, in the central directory) >>>>>-512 search lib/armeabi Android package (APK), with MANIFEST.MF and armeabi lib !:mime application/vnd.android.package-archive !:ext apk >>>>>>-22 string PK\005\006 >>>>>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 \b, with APK Signing Block >>>>>-512 default x # Contains drawables (near the end, in the central directory) >>>>>>-512 search res/drawable Android package (APK), with MANIFEST.MF and drawables !:mime application/vnd.android.package-archive !:ext apk >>>>>>>-22 string PK\005\006 >>>>>>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 \b, with APK Signing Block # It may or may not be an APK file, but it's definitely a Java JAR file >>>>>>-512 default x Java archive data (JAR) !:mime application/java-archive !:ext jar # Starts with zipflinger virtual entry (28 + 104 = 132 bytes) # See https://github.com/obfusk/apksigcopier/blob/666f5b7/apksigcopier/__init__.py#L230 >4 string \x00\x00\x00\x00\x00\x00 >>&0 string \x21\x08\x21\x02 >>>&0 string \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 >>>>&0 string \x00\x00 Android package (APK), with zipflinger virtual entry !:mime application/vnd.android.package-archive !:ext apk >>>>>-22 string PK\005\006 >>>>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 \b, with APK Signing Block # Specialised zip formats which start with a member named 'mimetype' # (stored uncompressed, with no 'extra field') containing the file's MIME type. # Check for have 8-byte name, 0-byte extra field, name "mimetype", and # contents starting with "application/": >26 string \x8\0\0\0mimetypeapplication/ # KOffice / OpenOffice & StarOffice / OpenDocument formats # From: Abel Cheung # KOffice (1.2 or above) formats # (mimetype contains "application/vnd.kde.") >>50 string vnd.kde. KOffice (>=1.2) >>>58 string karbon Karbon document >>>58 string kchart KChart document >>>58 string kformula KFormula document >>>58 string kivio Kivio document >>>58 string kontour Kontour document >>>58 string kpresenter KPresenter document >>>58 string kspread KSpread document >>>58 string kword KWord document # OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7) # (mimetype contains "application/vnd.sun.xml.") # URL: https://en.wikipedia.org/wiki/OpenOffice.org_XML # reference: http://fileformats.archiveteam.org/wiki/OpenOffice.org_XML >>50 string vnd.sun.xml. OpenOffice.org 1.x >>>62 string writer Writer >>>>68 byte !0x2e document !:mime application/vnd.sun.xml.writer !:ext sxw >>>>68 string .template template !:mime application/vnd.sun.xml.writer.template !:ext stw >>>>68 string .web Web template !:mime application/vnd.sun.xml.writer.web !:ext stw >>>>68 string .global global document !:mime application/vnd.sun.xml.writer.global !:ext sxg >>>62 string calc Calc >>>>66 byte !0x2e spreadsheet !:mime application/vnd.sun.xml.calc !:ext sxc >>>>66 string .template template !:mime application/vnd.sun.xml.calc.template !:ext stc >>>62 string draw Draw >>>>66 byte !0x2e document !:mime application/vnd.sun.xml.draw !:ext sxd >>>>66 string .template template !:mime application/vnd.sun.xml.draw.template !:ext std >>>62 string impress Impress >>>>69 byte !0x2e presentation !:mime application/vnd.sun.xml.impress !:ext sxi >>>>69 string .template template !:mime application/vnd.sun.xml.impress.template !:ext sti >>>62 string math Math document !:mime application/vnd.sun.xml.math !:ext sxm >>>62 string base Database file !:mime application/vnd.sun.xml.base !:ext sdb # URL: https://wiki.openoffice.org/wiki/Documentation/DevGuide/Extensions/File_Format # From: Joerg Jenderek # Note: only few OXT samples are detected here by mimetype member # is used by OpenOffice and LibreOffice and probably also NeoOffice # verified by `unzip -Zv *.oxt` or `7z l -slt *.oxt` >>50 string vnd.openofficeorg. OpenOffice >>>68 string extension \b/LibreOffice Extension # http://extension.nirsoft.net/oxt !:mime application/vnd.openofficeorg.extension # like: Gallery-Puzzle.2.1.0.1.oxt !:ext oxt # OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8) # URL: http://fileformats.archiveteam.org/wiki/OpenDocument # https://lists.oasis-open.org/archives/office/200505/msg00006.html # (mimetype contains "application/vnd.oasis.opendocument.") >>50 string vnd.oasis.opendocument. OpenDocument >>>73 string text >>>>77 byte !0x2d Text !:mime application/vnd.oasis.opendocument.text !:ext odt >>>>77 string -template Text Template !:mime application/vnd.oasis.opendocument.text-template !:ext ott >>>>77 string -web HTML Document Template !:mime application/vnd.oasis.opendocument.text-web !:ext oth >>>>77 string -master >>>>>84 byte !0x2d Master Document !:mime application/vnd.oasis.opendocument.text-master !:ext odm >>>>>84 string -template Master Template !:mime application/vnd.oasis.opendocument.text-master-template !:ext otm >>>73 string graphics >>>>81 byte !0x2d Drawing !:mime application/vnd.oasis.opendocument.graphics !:ext odg >>>>81 string -template Drawing Template !:mime application/vnd.oasis.opendocument.graphics-template !:ext otg >>>73 string presentation >>>>85 byte !0x2d Presentation !:mime application/vnd.oasis.opendocument.presentation !:ext odp >>>>85 string -template Presentation Template !:mime application/vnd.oasis.opendocument.presentation-template !:ext otp >>>73 string spreadsheet >>>>84 byte !0x2d Spreadsheet !:mime application/vnd.oasis.opendocument.spreadsheet !:ext ods >>>>84 string -template Spreadsheet Template !:mime application/vnd.oasis.opendocument.spreadsheet-template !:ext ots >>>73 string chart >>>>78 byte !0x2d Chart !:mime application/vnd.oasis.opendocument.chart !:ext odc >>>>78 string -template Chart Template !:mime application/vnd.oasis.opendocument.chart-template !:ext otc >>>73 string formula >>>>80 byte !0x2d Formula !:mime application/vnd.oasis.opendocument.formula !:ext odf >>>>80 string -template Formula Template !:mime application/vnd.oasis.opendocument.formula-template !:ext otf # https://www.loc.gov/preservation/digital/formats/fdd/fdd000441.shtml >>>73 string database Database !:mime application/vnd.oasis.opendocument.database !:ext odb # Valid for LibreOffice Base 6.0.1.1 at least >>>73 string base Database # https://bugs.documentfoundation.org/show_bug.cgi?id=45854 !:mime application/vnd.oasis.opendocument.base !:ext odb >>>73 string image >>>>78 byte !0x2d Image !:mime application/vnd.oasis.opendocument.image !:ext odi >>>>78 string -template Image Template !:mime application/vnd.oasis.opendocument.image-template !:ext oti # EPUB (OEBPS) books using OCF (OEBPS Container Format) # https://www.idpf.org/ocf/ocf1.0/download/ocf10.htm, section 4. # From: Ralf Brown >>50 string epub+zip EPUB document !:mime application/epub+zip # From: Hajin Jang # hwpx (OWPML) document format follows OCF specification. # Hangul Word Processor 2010+ supports HWPX format. # URL: https://www.hancom.com/etc/hwpDownload.do # https://standard.go.kr/KSCI/standardIntro/getStandardSearchView.do?menuId=503&topMenuId=502&ksNo=KSX6101 # https://e-ks.kr/streamdocs/view/sd;streamdocsId=72059197557727331 >>50 string hwp+zip Hancom HWP (Hangul Word Processor) file, HWPX !:mime application/x-hwp+zip !:ext hwpx # From: Joerg Jenderek # URL: http://en.wikipedia.org/wiki/CorelDRAW # NOTE: version; til 2 WL-based; from 3 til 13 by ./riff; from 14 zip based >>50 string x-vnd.corel. Corel >>>62 string draw.document+zip Draw drawing, version 14-16 !:mime application/x-vnd.corel.draw.document+zip !:ext cdr >>>62 string draw.template+zip Draw template, version 14-16 !:mime application/x-vnd.corel.draw.template+zip !:ext cdrt >>>62 string zcf.draw.document+zip Draw drawing, version 17-22 !:mime application/x-vnd.corel.zcf.draw.document+zip !:ext cdr >>>62 string zcf.draw.template+zip Draw template, version 17-22 !:mime application/x-vnd.corel.zcf.draw.template+zip !:ext cdt/cdrt # URL: http://product.corel.com/help/CorelDRAW/540240626/Main/EN/Doc/CorelDRAW-Other-file-formats.html >>>62 string zcf.pattern+zip Draw pattern, version 22 !:mime application/x-vnd.corel.zcf.pattern+zip !:ext pat # URL: https://en.wikipedia.org/wiki/Corel_Designer # Reference: http://fileformats.archiveteam.org/wiki/Corel_Designer # Note: called by TrID "Corel DESIGN graphics" >>>62 string designer.document+zip DESIGNER graphics, version 14-16 !:mime application/x-vnd.corel.designer.document+zip !:ext des >>>62 string zcf.designer.document+zip DESIGNER graphics, version 17-21 !:mime application/x-vnd.corel.zcf.designer.document+zip !:ext des # URL: http://product.corel.com/help/CorelDRAW/540223850/Main/EN/Documentation/ # CorelDRAW-Corel-Symbol-Library-CSL.html >>>62 string symbol.library+zip Symbol Library, version 6-16.3 !:mime application/x-vnd.corel.symbol.library+zip !:ext csl >>>62 string zcf.symbol.library+zip Symbol Library, version 17-22 !:mime application/x-vnd.corel.zcf.symbol.library+zip !:ext csl # Catch other ZIP-with-mimetype formats # In a ZIP file, the bytes immediately after a member's contents are # always "PK". The 2 regex rules here print the "mimetype" member's # contents up to the first 'P'. Luckily, most MIME types don't contain # any capital 'P's. This is a kludge. # (mimetype contains "application/") >>50 default x Zip data >>>38 regex [!-OQ-~]+ (MIME type "%s"?) !:mime application/zip # (mimetype contents other than "application/*") >26 string \x8\0\0\0mimetype >>38 string !application/ >>>38 regex [!-OQ-~]+ Zip data (MIME type "%s"?) !:mime application/zip # Java Jar files (see also APK files above) >(26.s+30) leshort 0xcafe Java archive data (JAR) !:mime application/java-archive !:ext jar # iOS App >(26.s+30) leshort !0xcafe >>26 string !\x8\0\0\0mimetype >>>30 string Payload/ >>>>38 search/64 .app/ iOS App !:mime application/x-ios-app # Dup, see above. #>30 search/100/b application/epub+zip EPUB document #!:mime application/epub+zip # APK Signing Block >(26.s+30) leshort !0xcafe >>30 search/100/b !application/epub+zip >>>26 string !\x8\0\0\0mimetype >>>>-22 string PK\005\006 >>>>>(-6.l-16) string APK\x20Sig\x20Block\x2042 Android package (APK), with APK Signing Block !:mime application/vnd.android.package-archive !:ext apk # Keyman Compiled Package File (keyman.com) # https://help.keyman.com/developer/current-version/reference/file-types/kmp # Find start of central directory >>>>>(-6.l) string PK\001\002 # Scan central directory for string 'kmp.json', will suffice for a # package containing about 150 files >>>>>>(-6.l) search/9000 kmp.json Keyman Compiled Package File !:mime application/vnd.keyman.kmp+zip !:ext kmp # Generic zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) # Next line excludes specialized formats: >>>>+4 default x >>>>>4 beshort x Zip archive data, at least !:mime application/zip >>>>>4 use zipversion >>>>>4 beshort x to extract >>>>>8 beshort x \b, compression method= >>>>>8 use zipcompression >>>>>0x161 string WINZIP \b, WinZIP self-extracting # Zip archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) 0 string PK\005\006 Zip archive data (empty) !:mime application/zip !:ext zip/cbz !:strength +1 # StarView Metafile # From Pierre Ducroquet 0 string VCLMTF StarView MetaFile >6 beshort x \b, version %d >8 belong x \b, size %d # Zoo archiver # Update: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Zoo_(file_format) # http://fileformats.archiveteam.org/wiki/Zoo # Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ark-zoo-strict.trid.xml # http://distcache.freebsd.org/ports-distfiles/zoo-2.10pl1.tar.gz/zoo.h # Note: called "ZOO compressed archive (strict)" by TrID and "ZOO Compressed Archive" by DROID via PUID x-fmt/269 # verified by command like `deark -m zoo -l -d2 WHRCGA.ZOO` 20 lelong 0xfdc4a7dc # skip DROID x-fmt-269-signature-id-621.zoo by looking for valid major version to manipulate archive >32 byte >0 Zoo archive data !:mime application/x-zoo # bak is extension of backup-ed zoo !:ext zoo/bak # version in text form like: 1.50 2.00 2.10 >>4 byte >48 \b, v%c. >>>6 byte >47 \b%c >>>>7 byte >47 \b%c # ZOO files typically start with "ZOO ?.?? Archive.", followed by the bytes 0x1a 0x0 0x0; not used by Zoo and they may be anything >>8 string !\040Archive.\032 \b, at 8 >>>8 string x text "%0.10s" # major_ver.minor_ver; minimum version needed to manipulate archive like: 1.0 2.0 >>32 byte >0 \b, modify: v%d >>>33 byte x \b.%d+ # major_ver.minor_ver; minimum version needed to extract after modify like in old versions >>(24.l+28) ubyte x \b, extract: v%u >>(24.l+29) ubyte x \b.%u+ # with zoo 2.00 additional fields have been added in the archive header >>32 byte >1 # type; type of archive header like: 1 2 >>>34 ubyte !1 \b, header type %u # acmt_pos; position of archive comment like: 6258 30599 61369 149501 >>>35 lelong >0 \b, at %d # acmt_len; length of archive comment like: 258 >>>>39 uleshort x %u bytes comment #>>>>(35.l) ubequad x COMMENT=%16.16llx # 1st character of comment maybe is CarriageReturn (0x0d) >>>>(35.l) ubyte <040 # 2nd character of comment maybe is LineFeed (0x0a) >>>>>(35.l+1) ubyte <040 # comment string after CRLF like "Anonymous ftp site garbo.uwasa.fi 128.214.87.1 moderated by" >>>>>>(35.l+2) string x %s # next character of remaining comment maybe is CarriageReturn (0x0d) >>>>>>>&0 ubyte <040 >>>>>>>>&0 ubyte <040 # 2nd comment part like: Timo Salmi ts@chyde.uwasa.fi PC directories and uploads\015\012Harri Valkama hv@chyde.uwasa.fi PC, Mac, Unix files, and upload >>>>>>>>>&0 string >037 %s # vdata; archive-level versioning byte like: 1 3 >>>41 ubyte !1 \b, vdata %#x # zoo_start; pointer to 1st entry header >>24 lelong x \b; at %u # zoo_minus; zoo_start -1 for consistency checking #>>28 lelong x \b, zoo_minus %#x # zoo_tag; tag for check #>>(24.l+0) ulelong !0xfdc4a7dc \b, zoo_tag=%8.8x # type; type of directory entry like: 1 2 >>(24.l+4) ubyte !2 type=%u # packing_method; 0~no packing 1~normal LZW 2~lzh >>(24.l+5) ubyte x method= >>>(24.l+5) ubyte 0 \bnot-compressed >>>(24.l+5) ubyte 1 \blzd >>>(24.l+5) ubyte 2 \blzh # next; position of next directory entry >>(24.l+6) ulelong x \b, next entry at %u # offset; position of file data for this entry #>>(24.l+10) ulelong x \b, data at %u # file_crc; CRC-16 of file data >>(24.l+18) uleshort x \b, CRC %#4.4x # comment; zero if none or points to entry comment like ADD9h (WHRCGA.ZOO) >>(24.l+32) lelong >0 \b, at %#x # cmt_size; if not 0 for none then length of entry comment like: 46 >>>(24.l+36) uleshort >0 %u bytes comment # entry comment itself like: "CGA .GL file showing menu input from keyboard" >>>>(&-6.l) string x "%s" # org_size; original size of file >>(24.l+20) ulelong x \b, size %u # size_now; compressed size of file >>(24.l+24) ulelong x (%u compressed) # major_ver.minor_ver; minimum version needed to extract already done # deleted; will be 1 if deleted, 0 if not >>(24.l+30) ubyte =1 \b, deleted # struc; file structure if any; WHAT IS THAT? >>(24.l+31) ubyte !0 \b, structured # fname[13]; short/DOS file name like 12345678.012 >>(24.l+38) string x \b, %0.13s # for directory entry type 2 with variable part >>(24.l+4) ubyte =2 # var_dir_len; length of variable part of dir entry >>>(24.l+51) uleshort >0 #>>>(24.l+51) uleshort >0 \b, variable part length %u # namlen; length of long filename #>>>>(24.l+56) ubyte x \b, namlen %u # dirlen; length of directory name #>>>>(24.l+57) ubyte x \b, dirlen %u # if file length positive then show long file name >>>>(24.l+56) ubyte >0 # lfname[256]; long file name \0-terminated >>>>>(24.l+58) string x "%s" # if directory length positive then jump before file name field and then jump this addtional length plus 2 (\0-terminator + dirlen field) to following directory name >>>>(24.l+57) ubyte >0 >>>>>(24.l+55) ubyte x # dirname[256]; directory name \0-terminated >>>>>>&(&0.b+2) string x in "%s" # dir_crc; CRC of directory entry #>>>(24.l+54) uleshort x \b, entry CRC %#4.4x # tz; timezone where file was archived; 7Fh~unknown 4~1.00hoursWestOfUTC 12 16 20~5.00hoursWestOfUTC -107~26.75hoursEastOfUTC -4~1.00hoursEastOfUTC >>>(24.l+53) byte !0x7f \b, time zone %d/4 # date; last mod file date in DOS format >>>(24.l+14) lemsdosdate x \b, modified %s # time; last mod file time in DOS format >>>(24.l+16) lemsdostime x %s # Shell archives 10 string #\ This\ is\ a\ shell\ archive shell archive text !:mime application/octet-stream # # LBR. NB: May conflict with the questionable # "binary Computer Graphics Metafile" format. # 0 string \0\ \ \ \ \ \ \ \ \ \ \ \0\0 LBR archive data # # PMA (CP/M derivative of LHA) # Update: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/LHA_(file_format) # #2 string -pm0- PMarc archive data [pm0] 2 string -pm0- >0 use lharc-file #2 string -pm1- PMarc archive data [pm1] 2 string -pm1- >0 use lharc-file #2 string -pm2- PMarc archive data [pm2] 2 string -pm2- >0 use lharc-file 2 string -pms- PMarc SFX archive (CP/M, DOS) #!:mime application/x-foobar-exec !:ext com 5 string -pc1- PopCom compressed executable (CP/M) #!:mime application/x- #!:ext com # From Rafael Laboissiere # The Project Revision Control System (see # http://prcs.sourceforge.net) generates a packaged project # file which is recognized by the following entry: 0 leshort 0xeb81 PRCS packaged project # Microsoft cabinets # by David Necas (Yeti) #0 string MSCF\0\0\0\0 Microsoft cabinet file data, #>25 byte x v%d #>24 byte x \b.%d # MPi: All CABs have version 1.3, so this is pointless. # Better magic in debian-additions. # GTKtalog catalogs # by David Necas (Yeti) 4 string gtktalog\ GTKtalog catalog data, >13 string 3 version 3 >>14 beshort 0x677a (gzipped) >>14 beshort !0x677a (not gzipped) >13 string >3 version %s ############################################################################ # Parity archive reconstruction file, the 'par' file format now used on Usenet. 0 string PAR\0 PARity archive data >48 leshort =0 - Index file >48 leshort >0 - file number %d # Felix von Leitner 0 string d8:announce BitTorrent file !:mime application/x-bittorrent !:ext torrent # Durval Menezes, 0 string d13:announce-list BitTorrent file !:mime application/x-bittorrent !:ext torrent 0 string d7:comment BitTorrent file !:mime application/x-bittorrent !:ext torrent 0 string d4:info BitTorrent file !:mime application/x-bittorrent !:ext torrent # Atari MSA archive - Teemu Hukkanen # URL: http://fileformats.archiveteam.org/wiki/MSA_(Magic_Shadow_Archiver) # Reference: http://info-coach.fr/atari/documents/_mydoc/FD_Image_File_Format.pdf # http://mark0.net/download/triddefs_xml.7z/defs/m/msa.trid.xml # Update: Joerg Jenderek # Note: called by TrID "Atari MSA Disk Image" and verified by # command like `deark -l -m msa -d2 PDATS578.msa` as " Atari ST floppy disk image" # GRR: line below is too general as it matches setup.skin 0 beshort 0x0e0f # skip foo setup.skin with unrealistic high number 52255 of sides by check for valid "low" value >4 ubeshort <2 Atari MSA archive data #!:mime application/octet-stream !:mime application/x-atari-msa !:ext msa # sectors per track like: 9 10 >>2 beshort x \b, %d sectors per track # sides (0 or 1; add 1 to this to get correct number of sides) >>4 beshort 0 \b, 1 sided >>4 beshort 1 \b, 2 sided # starting track like: 0 >>6 beshort x \b, starting track: %d # ending track like: 39 79 80 81 >>8 beshort x \b, ending track: %d # tracks content #>>10 ubequad x \b, track content %#16.16llx # Alternate ZIP string (amc@arwen.cs.berkeley.edu) 0 string PK00PK\003\004 Zip archive data !:mime application/zip !:ext zip/cbz # Recognize ZIP archives with prepended data by end-of-central-directory record # https://en.wikipedia.org/wiki/ZIP_(file_format)#End_of_central_directory_record_(EOCD) # by Michal Gorny -2 uleshort 0 >&-22 string PK\005\006 # without #! >>0 string !#! Zip archive, with extra data prepended !:mime application/zip !:ext zip/cbz # with #! >>0 string/w #!\ a >>>&-1 string/T x %s script executable (Zip archive) # ACE archive (from http://www.wotsit.org/download.asp?f=ace) # by Stefan `Sec` Zehl 7 string **ACE** ACE archive data !:mime application/x-ace-compressed !:ext ace >15 byte >0 version %d >16 byte =0x00 \b, from MS-DOS >16 byte =0x01 \b, from OS/2 >16 byte =0x02 \b, from Win/32 >16 byte =0x03 \b, from Unix >16 byte =0x04 \b, from MacOS >16 byte =0x05 \b, from WinNT >16 byte =0x06 \b, from Primos >16 byte =0x07 \b, from AppleGS >16 byte =0x08 \b, from Atari >16 byte =0x09 \b, from Vax/VMS >16 byte =0x0A \b, from Amiga >16 byte =0x0B \b, from Next >14 byte x \b, version %d to extract >5 leshort &0x0080 \b, multiple volumes, >>17 byte x \b (part %d), >5 leshort &0x0002 \b, contains comment >5 leshort &0x0200 \b, sfx >5 leshort &0x0400 \b, small dictionary >5 leshort &0x0800 \b, multi-volume >5 leshort &0x1000 \b, contains AV-String >>30 string \x16*UNREGISTERED\x20VERSION* (unregistered) >5 leshort &0x2000 \b, with recovery record >5 leshort &0x4000 \b, locked >5 leshort &0x8000 \b, solid # Date in MS-DOS format (whatever that is) #>18 lelong x Created on # sfArk : compression program for Soundfonts (sf2) by Dirk Jagdmann # 0x1A string sfArk sfArk compressed Soundfont >0x15 string 2 >>0x1 string >\0 Version %s >>0x2A string >\0 : %s # DR-DOS 7.03 Packed File *.??_ # Reference: http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm # Note: unpacked by PNUNPACK.EXE 0 string Packed\ File\ # by looking for Control-Z skip ASCII text starting with Packed File >0x18 ubyte 0x1a Personal NetWare Packed File !:mime application/x-novell-compress !:ext ??_ >>12 string x \b, was "%.12s" # 1 or 2 #>>0x19 ubyte x \b, at 0x19 %u >>0x1b ulelong x with %u bytes # EET archive # From: Tilman Sauerbeck 0 belong 0x1ee7ff00 EET archive !:mime application/x-eet # From: Joerg Jenderek # URL: https://help.foxitsoftware.com/kb/install-fzip-file.php # reference: http://mark0.net/download/triddefs_xml.7z/ # defs/f/fzip.trid.xml # Note: unknown compression; No "PK" zip magic; normally in directory like # "%APPDATA%\Foxit Software\Addon\Foxit Reader\Install" 0 ubequad 0x2506781901010000 Foxit add-on/update !:mime application/x-fzip !:ext fzip # From: "Robert Dale" 0 belong 123 dar archive, >4 belong x label "%.8x >>8 belong x %.8x >>>12 beshort x %.4x" >14 byte 0x54 end slice >14 beshort 0x4e4e multi-part >14 beshort 0x4e53 multi-part, with -S # Symbian installation files # https://www.thouky.co.uk/software/psifs/sis.html # http://developer.symbian.com/main/downloads/papers/SymbianOSv91/softwareinstallsis.pdf 8 lelong 0x10000419 Symbian installation file !:mime application/vnd.symbian.install >4 lelong 0x1000006D (EPOC release 3/4/5) >4 lelong 0x10003A12 (EPOC release 6) 0 lelong 0x10201A7A Symbian installation file (Symbian OS 9.x) !:mime x-epoc/x-sisx-app # From "Nelson A. de Oliveira" 0 string MPQ\032 MoPaQ (MPQ) archive # From: "Nelson A. de Oliveira" # .kgb 0 string KGB_arch KGB Archiver file >10 string x with compression level %.1s # xar (eXtensible ARchiver) archive # URL: https://en.wikipedia.org/wiki/Xar_(archiver) # xar archive format: https://code.google.com/p/xar/ # From: "David Remahl" # Update: Joerg Jenderek # TODO: lzma compression; X509Data for pkg and xip # Note: verified by `xar --dump-header -f FullBundleUpdate.xar` or # 7z t -txar Xcode_10.2_beta_4.xip` 0 string xar! xar archive !:mime application/x-xar # pkg for Mac OSX installer package like FullBundleUpdate.pkg # xip for signed Apple software like Xcode_10.2_beta_4.xip !:ext xar/pkg/xip # always 28 in older archives >4 ubeshort >28 \b, header size %u # currently there exit only version 1 since about 2014 >6 ubeshort >1 version %u, >8 ubequad x compressed TOC: %llu, #>16 ubequad x uncompressed TOC: %llu, # cksum_alg 0-2 in older and also 3-4 in newer >24 belong 0 no checksum >24 belong 1 SHA-1 checksum >24 belong 2 MD5 checksum >24 belong 3 SHA-256 checksum >24 belong 4 SHA-512 checksum >24 belong >4 unknown %#x checksum #>24 belong >4 checksum # For no compression jump 0 bytes >24 belong 0 >>0 ubyte x # jump more bytes forward by header size >>>&(4.S) ubyte x # jump more bytes forward by compressed table of contents size #>>>>&(8.Q) ubequad x \b, heap data %#llx >>>>&(8.Q) ubyte x # look for data by ./compress after message with 1 space at end >>>>>&-3 indirect x \b, contains # For SHA-1 jump 20 minus 2 bytes >24 belong 1 >>18 ubyte x # jump more bytes forward by header size >>>&(4.S) ubyte x # jump more bytes forward by compressed table of contents size >>>>&(8.Q) ubyte x # data compressed by gzip, bzip, lzma or none >>>>>&-1 indirect x \b, contains # For SHA-256 jump 32 minus 2 bytes >24 belong 3 >>30 ubyte x # jump more bytes forward by header size >>>&(4.S) ubyte x # jump more bytes forward by compressed table of contents size >>>>&(8.Q) ubyte x >>>>>&-1 indirect x \b, contains # For SHA-512 jump 64 minus 2 bytes >24 belong 4 >>62 ubyte x # jump more bytes forward by header size >>>&(4.S) ubyte x # jump more bytes forward by compressed table of contents size >>>>&(8.Q) ubyte x >>>>>&-1 indirect x \b, contains # Type: Parity Archive # From: Daniel van Eeden 0 string PAR2 Parity Archive Volume Set # Bacula volume format. (Volumes always start with a block header.) # URL: https://bacula.org/3.0.x-manuals/en/developers/developers/Block_Header.html # From: Adam Buchbinder 12 string BB02 Bacula volume >20 bedate x \b, started %s # ePub is XHTML + XML inside a ZIP archive. The first member of the # archive must be an uncompressed file called 'mimetype' with contents # 'application/epub+zip' # From: "Michael Gorny" # ZPAQ: http://mattmahoney.net/dc/zpaq.html 0 string zPQ ZPAQ stream >3 byte x \b, level %d # From: Barry Carter # https://encode.ru/threads/456-zpaq-updates/page32 0 string 7kSt ZPAQ file # BBeB ebook, unencrypted (LRF format) # URL: https://www.sven.de/librie/Librie/LrfFormat # From: Adam Buchbinder 0 string L\0R\0F\0\0\0 BBeB ebook data, unencrypted >8 beshort x \b, version %d >36 byte 1 \b, front-to-back >36 byte 16 \b, back-to-front >42 beshort x \b, (%dx, >44 beshort x %d) # Symantec GHOST image by Joerg Jenderek at May 2014 # https://us.norton.com/ghost/ # https://www.garykessler.net/library/file_sigs.html 0 ubelong&0xFFFFf7f0 0xFEEF0100 Norton GHost image # *.GHO >2 ubyte&0x08 0x00 \b, first file # *.GHS or *.[0-9] with cns program option >2 ubyte&0x08 0x08 \b, split file # part of split index interesting for *.ghs >>4 ubyte x id=%#x # compression tag minus one equals numeric compression command line switch z[1-9] >3 ubyte 0 \b, no compression >3 ubyte 2 \b, fast compression (Z1) >3 ubyte 3 \b, medium compression (Z2) >3 ubyte >3 >>3 ubyte <11 \b, compression (Z%d-1) >2 ubyte&0x08 0x00 # ~ 30 byte password field only for *.gho >>12 ubequad !0 \b, password protected >>44 ubyte !1 # 1~Image All, sector-by-sector only for *.gho >>>10 ubyte 1 \b, sector copy # 1~Image Boot track only for *.gho >>>43 ubyte 1 \b, boot track # 1~Image Disc only for *.gho implies Image Boot track and sector copy >>44 ubyte 1 \b, disc sector copy # optional image description only *.gho >>0xff string >\0 "%-.254s" # look for DOS sector end sequence >0xE08 search/7776 \x55\xAA >>&-512 indirect x \b; contains # Google Chrome extensions # https://developer.chrome.com/extensions/crx # https://developer.chrome.com/extensions/hosting 0 string Cr24 Google Chrome extension !:mime application/x-chrome-extension >4 ulong x \b, version %u # SeqBox - Sequenced container # ext: sbx, seqbox # Marco Pontello marcopon@gmail.com # reference: https://github.com/MarcoPon/SeqBox 0 string SBx SeqBox, >3 byte x version %d # LyNX archive # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Lynx_archive # Reference: http://ist.uwaterloo.ca/~schepers/formats/LNX.TXT # http://mark0.net/download/triddefs_xml.7z/defs/a/ark-lnx.trid.xml # Note: called "Lynx archive" by TrID and "Commodore C64 BASIC program" with "POKE 53280" by ./c64 # TODO: merge and unify with Commodore C64 BASIC program 56 string USE\040LYNX\040TO\040DISSOLVE\040THIS\040FILE LyNX archive # display "Lynx archive" (strength=330) before Commodore C64 BASIC program (strength=50) handled by ./c64 #!:strength +0 #!:mime application/octet-stream !:mime application/x-commodore-lnx !:ext lnx # afterwards look for BASIC tokenized GOTO (89h) 10, line terminator \0, end of programm tag \0\0 and CarriageReturn >86 search/10 \x8910\0\0\0\r \b, # for DEBUGGING #>>&0 string x STRING="%s" # number in ASCII of directory blocks with spaces on both sides like: 1 2 3 5 >>&0 regex [0-9]{1,5} %s directory blocks # signature like: "*LYNX XII BY WILL CORLEY" " LYNX IX BY WILL CORLEY" "*LYNX BY CBMCONVERT 2.0*" >>>&2 regex [^\r]{1,24} \b, signature "%s" # number of files in ASCII surrounded by spaces and delimited by CR like: 2 3 6 13 69 144 (maximum?) >>>>&1 regex [0-9]{1,3} \b, %s files # From: Joerg Jenderek # URL: https://www.acronis.com/ # Reference: https://en.wikipedia.org/wiki/TIB_(file_format) # Note: only tested with True Image 2013 Build 5962 and 2019 Build 14110 0 ubequad 0xce24b9a220000000 Acronis True Image backup !:mime application/x-acronis-tib !:ext tib # 01000000 #>20 ubelong x \b, at 20 %#x # 20000000 #>28 ubelong x \b, at 28 %#x # strings like "Generic- SD/MMC 1.00" "Unknown Disk" "Msft Virtual Disk 1.0" # ??? # strings like "\Device\0000011e" "\Device\0000015a" #>0 search/0x6852300/cs \\Device\\ #>>&-1 pstring x \b, %s # "\Device\HarddiskVolume30" "\Device\HarddiskVolume39" #>>>&1 search/180/cs \\Device\\ #>>>>&-1 pstring x \b, %s #>>>>>&0 search/29/cs \0\0\xc8\0 # disk label #>>>>>>&10 lestring16 x \b, disk label %11.11s #>>>>>>&9 plestring16 x \b, disk label "%11.11s" #>>>>>>&10 ubequad x %16.16llx # Gentoo XPAK binary package # by Michal Gorny # https://gitweb.gentoo.org/proj/portage.git/tree/man/xpak.5 -4 string STOP >-16 string XPAKSTOP Gentoo binary package (XPAK) !:mime application/vnd.gentoo.xpak # From: Joerg Jenderek # URL: https://kodi.wiki/view/TexturePacker # Reference: https://mirrors.kodi.tv/releases/source/17.3-Krypton.tar.gz # /xbmc-Krypton/xbmc/guilib/XBTF.h # /xbmc-Krypton/xbmc/guilib/XBTF.cpp 0 string XBTF # skip ASCII text by looking for terminating \0 of path >264 ubyte 0 XBMC texture package !:mime application/x-xbmc-xbt !:ext xbt # XBTF_VERSION 2 >>4 string !2 \b, version %-.1s # nofFiles /xbmc-Krypton/xbmc/guilib/XBTFReader.cpp >>5 ulelong x \b, %u file # plural s >>5 ulelong >1 \bs # path[CXBTFFile[MaximumPathLength=256] >>9 string x \b, 1st %s # ALZIP archive # by Hyungjun Park , Hajin Jang # http://kippler.com/win/unalz/ # https://salsa.debian.org/l10n-korean-team/unalz 0 string ALZ\001 ALZ archive data !:ext alz # https://cf-aldn.altools.co.kr/setup/EGG_Specification.zip 0 string EGGA EGG archive data, !:ext egg >5 byte x version %u >4 byte x \b.%u >>0x0E ulelong =0x08E28222 >>0x0E ulelong =0x24F5A262 \b, split >>0x0E ulelong =0x24E5A060 \b, solid >>0x0E default x \b, unknown # PAQ9A archive # URL: http://mattmahoney.net/dc/#paq9a # Note: Line 1186 of paq9a.cpp gives the magic bytes 0 string pQ9\001 PAQ9A archive # From wof (wof@stachelkaktus.net) 0 string Unison\ archive\ format Unison archive format # https://ankiweb.net 30 string collection.anki2 Anki APKG file #!:ext .apkg # Synology archive (DiskStation Manager 7.0+) # From: Alexandre Iooss # Note: These archives are signed and encrypted. 0 ulelong&0xFFFFFF00 0xEFBEAD00 # MessagePack header (fixarray of 5 elements starting with a bin of 32 bytes) >8 ulelong&0x00FFFFFF 0x20C495 Synology archive !:ext spk # Extract some properties from MessagePack third item >>43 search/0x10000 package= >>>&0 string x \b, package %s >>43 search/0x10000 arch= >>>&0 string x %s >>43 search/0x10000 version= >>>&0 string x %s >>43 search/0x10000 create_time= >>>&0 string x \b, created on %s # MonoGame/XNA processed assets archive # From: Alexandre Iooss # URL: https://github.com/MonoGame/MonoGame/blob/v3.8.1/MonoGame.Framework/Content/ContentManager.cs 0 string XNB # XNB must be version 4 or 5 >4 byte <6 >>4 byte >3 # Size must be positive >>>6 lelong >0 MonoGame/XNA processed assets !:ext xnb >>>>3 string =w \b, for Windows >>>>3 string =x \b, for Xbox360 >>>>3 string =i \b, for iOS >>>>3 string =a \b, for Android >>>>3 string =d \b, for DesktopGL >>>>3 string =X \b, for MacOSX >>>>3 string =W \b, for WindowsStoreApp >>>>3 string =n \b, for NativeClient >>>>3 string =M \b, for WindowsPhone8 >>>>3 string =r \b, for RaspberryPi >>>>3 string =P \b, for PlayStation4 >>>>3 string =5 \b, for PlayStation5 >>>>3 string =O \b, for XboxOne >>>>3 string =S \b, for Nintendo Switch >>>>3 string =G \b, for Google Stadia >>>>3 string =b \b, for WebAssembly and Bridge.NET >>>>3 string =m \b, for WindowsPhone7.0 (XNA) >>>>3 string =p \b, for PlayStationMobile >>>>3 string =v \b, for PSVita >>>>3 string =g \b, for Windows (OpenGL) >>>>3 string =l \b, for Linux >>>>4 byte x \b, version %d >>>>5 byte &0x80 \b, LZX compressed >>>>>10 lelong x \b, decompressed size: %d bytes >>>>5 byte &0x40 \b, LZ4 compressed >>>>>10 lelong x \b, decompressed size: %d bytes # Electron ASAR archive # From: Alexandre Iooss # URL: https://github.com/electron/asar 0 ulelong 4 # Match JSON header start and end >16 string {"files":{" >>(12.l+12) string }}}} Electron ASAR archive !:ext asar >>>12 ulelong x \b, header length: %d bytes # Wasay ImageIt DataPack # From: Alexandre Iooss # URL: https://www.neowin.net/forum/topic/615151-anyone-know-what-program-opens-dsi-and-wsi-files/ # Note: Used in Acer eRecovery and Lenovo OneKey Recovery (OKR) 4 string WSVD # bytes 3-4 are the checksum or the first 32 bytes of the file >0 uleshort 0x40 Wasay ImageIt DataPack >>8 uleshort x v%u >>10 uleshort x \b.%u >>16 lestring16/8 x \b, "%s" >>12 uleshort x (%u) >>32 byte x \b, created on %02d >>33 byte x \b%02d >>34 byte x \b/%02d >>35 byte x \b/%02d >>36 byte x %02d >>37 byte x \b:%02d >>38 byte x \b:%02d >>56 ulelong x \b, size: %u bytes file-5.46/magic/Magdir/aria000664 023540 023540 00000003367 14634600770 017273 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: aria,v 1.2 2024/06/10 23:09:52 christos Exp $ # aria: file(1) magic for download manager aria # URL: https://de.wikipedia.org/wiki/Aria_(Software) # Reference: https://github.com/aria2/aria2/blob/master/doc/manual-src/en/technical-notes.rst # From: Joerg Jenderek # Note: only version 1 suited # check for valid version one 0 beshort 0x0001 # skip most uncompressed DEGAS med-res bitmap *.PI2 and GEM bitmap (v1) *.IMG # by test for valid infoHashCheck extension >2 ubelong&0xffFFffFE 0x00000000 # skip DEGAS med-res bitmap DIAGRAM1.PI2 by test for valid length of download >>(6.L+14) ubequad >0 >>>0 use aria 0 name aria # version; (0x0000) or (0x0001); for 0 all multi-byte are in host byte order. For 1 big endian >0 beshort x aria2 control file, version %u #!:mime application/octet-stream !:mime application/x-aria !:ext aria2 # EXTension; if EXT[3]&1 == 1 checks whether saved InfoHash and current downloading the same; infoHashCheck extension >2 ubelong !0 \b, infoHashCheck %#x # info hash length like: 0 14h >6 ubelong !0 \b, %#x bytes info hash # info hash; BitTorrent InfoHash >>10 ubequad x %#16.16llx... # piece length; the length of the piece like: 400h 100000h >(6.L+10) ubelong x \b, piece length 0x%x # total length; the total length of the download >(6.L+14) ubequad x \b, total length %llu #>(6.L+14) ubequad x \b, total length %#llx # upload length; the uploaded length of download like: 0 400h >(6.L+22) ubequad !0 \b, upload length %#llx # bitfield length; the length of bitfield like: 4 6 Ah 10h 13h 167h >(6.L+30) ubelong x \b, %#x bytes bitfield # bitfield; bitfield which represents current download progress >(6.L+34) ubequad !0 %#llx... file-5.46/magic/Magdir/arm000664 023540 023540 00000003234 14571207705 017130 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: arm,v 1.4 2024/02/18 14:15:22 christos Exp $ # arm: file(1) magic for ARM COFF # # https://docs.microsoft.com/en-us/windows/win32/debug/pe-format # Aarch64 0 leshort 0xaa64 # test for unused flag bits in f_flags >18 uleshort&0x8E80 0 # use little endian variant of subroutine to # display name+variables+flags for common object formatted files >>0 use display-coff !:strength -10 # ARM 0 leshort 0x01c0 # test for unused flag bits in f_flags >18 uleshort&0x8E80 0 # use little endian variant of subroutine to # display name+variables+flags for common object formatted files >>0 use display-coff !:strength -10 # ARM Thumb 0 leshort 0x01c2 # test for unused flag bits in f_flags >18 uleshort&0x8E80 0 # use little endian variant of subroutine to # display name+variables+flags for common object formatted files >>0 use display-coff !:strength -10 # ARMv7 Thumb 0 leshort 0x01c4 # test for unused flag bits in f_flags >18 uleshort&0x8E80 0 # use little endian variant of subroutine to # display name+variables+flags for common object formatted files >>0 use display-coff !:strength -10 # ARM64 Compiled Hybrid PE X86 0 leshort 0x3a64 # test for unused flag bits in f_flags >18 uleshort&0x8E80 0 # use little endian variant of subroutine to # display name+variables+flags for common object formatted files >>0 use display-coff !:strength -10 # ARM64EC 0 leshort 0xa641 # test for unused flag bits in f_flags >18 uleshort&0x8E80 0 # use little endian variant of subroutine to # display name+variables+flags for common object formatted files >>0 use display-coff !:strength -10 file-5.46/magic/Magdir/asf000664 023540 023540 00000014631 14700541414 017115 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: asf,v 1.5 2024/09/04 19:06:12 christos Exp $ # asf: file(1) magic for Microsoft Advanced Systems Format (ASF) files # http://www.staroceans.org/e-book/ASF_Specification.pdf 0 name asf-name # ASF_Data_Object #>0 guid 75B22636-668E-11CF-A6D9-00AA0062CE6C #>16 lequad >0 #>>(16.q) use asf-object # ASF_Simple_Index_Object #>0 guid 33000890-E5B1-11CF-89F4-00A0C90349CB >0 guid D6E229D3-35DA-11D1-9034-00A0C90349BE ASF_Index_Object >0 guid FEB103F8-12AD-4C64-840F-2A1D2F7AD48C ASF_Media_Object_Index_Object >0 guid 3CB73FD0-0C4A-4803-953D-EDF7B6228F0C ASF_Timecode_Index_Object # ASF_File_Properties_Object #>0 guid 8CABDCA1-A947-11CF-8EE4-00C00C205365 # ASF_Stream_Properties_Object >0 guid B7DC0791-A9B7-11CF-8EE6-00C00C205365 #>>56 lequad x Time Offset %lld #>>64 lelong x Type-Specific Data Length %d #>>68 lelong x Error Correction Data Length %d #>>72 leshort x Flags %#x #>>74 lelong x Reserved %x # ASF_Audio_Media >>24 guid F8699E40-5B4D-11CF-A8FD-00805F5C442B \b, Audio Media ( >>>78 leshort x \bCodec Id %d >>>80 leshort x \b, Number of channels %d >>>82 lelong x \b, Samples Per Second %d >>>86 lelong x \b, Average Number of Bytes Per Second %d >>>90 lelong x \b, Block Alignment %d >>>94 leshort x \b, Bits Per Sample %d # ASF_Video_Media >>24 guid BC19EFC0-5B4D-11CF-A8FD-00805F5C442B \b, Video Media ( >>>78 lelong x \bEncoded Image Width %d >>>82 lelong x \b, Encoded Image Height %d #>>>85 leshort x \b, Format Data Size %x >>>93 lelong x \b, Image Width %d >>>97 lelong x \b, Image Height %d #>>>101 leshort x \b, Reserved %#x >>>103 leshort x \b, Bits Per Pixel Count %d #>>>105 lelong x \b, Compression ID %d #>>>109 lelong x \b, Image Size %d #>>>113 lelong x \b, Horizontal Pixels Per Meter %d #>>>117 lelong x \b, Vertical Pixels Per Meter %d #>>>121 lelong x \b, Colors Used Count %d #>>>125 lelong x \b, Important Colors Count %d >>0 lelong x \b, Error correction type >>40 use asf-name >>0 lelong x \b) #ASF_Header_Extension_Object #>0 guid 5FBF03B5-A92E-11CF-8EE3-00C00C205365 # ASF_Codec_List_Object #>0 guid 86D15240-311D-11D0-A3A4-00A0C90348F6 >0 guid 1EFB1A30-0B62-11D0-A39B-00A0C90348F6 ASF_Script_Command_Object >0 guid F487CD01-A951-11CF-8EE6-00C00C205365 ASF_Marker_Object >0 guid D6E229DC-35DA-11D1-9034-00A0C90349BE ASF_Bitrate_Mutual_Exclusion_Object >0 guid 75B22635-668E-11CF-A6D9-00AA0062CE6C ASF_Error_Correction_Object # ASF_Content_Description_Object #>0 guid 75B22633-668E-11CF-A6D9-00AA0062CE6C #>>24 leshort title length %d #>>26 leshort author length %d #>>28 leshort copyright length %d #>>30 leshort descriptor length %d #>>32 leshort rating length %d >0 guid D2D0A440-E307-11D2-97F0-00A0C95EA850 ASF_Extended_Content_Description_Object >0 guid 2211B3FA-BD23-11D2-B4B7-00A0C955FC6E ASF_Content_Branding_Object >0 guid 7BF875CE-468D-11D1-8D82-006097C9A2B2 ASF_Stream_Bitrate_Properties_Object >0 guid 2211B3FB-BD23-11D2-B4B7-00A0C955FC6E ASF_Content_Encryption_Object >0 guid 298AE614-2622-4C17-B935-DAE07EE9289C ASF_Extended_Content_Encryption_Object >0 guid 2211B3FC-BD23-11D2-B4B7-00A0C955FC6E ASF_Digital_Signature_Object # ASF_Padding_Object #>0 guid 1806D474-CADF-4509-A4BA-9AABCB96AAE8 >0 guid 14E6A5CB-C672-4332-8399-A96952065B5A ASF_Extended_Stream_Properties_Object >0 guid A08649CF-4775-4670-8A16-6E35357566CD ASF_Advanced_Mutual_Exclusion_Object >0 guid D1465A40-5A79-4338-B71B-E36B8FD6C249 ASF_Group_Mutual_Exclusion_Object >0 guid D4FED15B-88D3-454F-81F0-ED5C45999E24 ASF_Stream_Prioritization_Object >0 guid A69609E6-517B-11D2-B6AF-00C04FD908E9 ASF_Bandwidth_Sharing_Object >0 guid 7C4346A9-EFE0-4BFC-B229-393EDE415C85 ASF_Language_List_Object >0 guid C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA ASF_Metadata_Object >0 guid 44231C94-9498-49D1-A141-1D134E457054 ASF_Metadata_Library_Object >0 guid D6E229DF-35DA-11D1-9034-00A0C90349BE ASF_Index_Parameters_Object >0 guid 6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7 ASF_Media_Object_Index_Parameters_Object >0 guid F55E496D-9797-4B5D-8C8B-604DFE9BFB24 ASF_Timecode_Index_Parameters_Object >0 guid 26F18B5D-4584-47EC-9F5F-0E651F0452C9 ASF_Compatibility_Object >0 guid 43058533-6981-49E6-9B74-AD12CB86D58C ASF_Advanced_Content_Encryption_Object >0 guid 59DACFC0-59E6-11D0-A3AC-00A0C90348F6 ASF_Command_Media >0 guid B61BE100-5B4E-11CF-A8FD-00805F5C442B ASF_JFIF_Media >0 guid 35907DE0-E415-11CF-A917-00805F5C442B ASF_Degradable_JPEG_Media >0 guid 91BD222C-F21C-497A-8B6D-5AA86BFC0185 ASF_File_Transfer_Media >0 guid 3AFB65E2-47EF-40F2-AC2C-70A90D71D343 ASF_Binary_Media >0 guid 776257D4-C627-41CB-8F81-7AC7FF1C40CC ASF_Web_Stream_Media_Subtype >0 guid DA1E6B13-8359-4050-B398-388E965BF00C ASF_Web_Stream_Format >0 guid 20FB5700-5B55-11CF-A8FD-00805F5C442B ASF_No_Error_Correction >0 guid BFC3CD50-618F-11CF-8BB2-00AA00B4E220 ASF_Audio_Spread >0 guid ABD3D211-A9BA-11cf-8EE6-00C00C205365 ASF_Reserved_1 >0 guid 7A079BB6-DAA4-4e12-A5CA-91D38DC11A8D ASF_Content_Encryption_System_Windows_Media_DRM # _Network_Devices >0 guid 86D15241-311D-11D0-A3A4-00A0C90348F6 ASF_Reserved_2 >0 guid 4B1ACBE3-100B-11D0-A39B-00A0C90348F6 ASF_Reserved_3 >0 guid 4CFEDB20-75F6-11CF-9C0F-00A0C90349CB ASF_Reserved_4 >0 guid D6E22A00-35DA-11D1-9034-00A0C90349BE ASF_Mutex_Language >0 guid D6E22A01-35DA-11D1-9034-00A0C90349BE ASF_Mutex_Bitrate >0 guid D6E22A02-35DA-11D1-9034-00A0C90349BE ASF_Mutex_Unknown >0 guid AF6060AA-5197-11D2-B6AF-00C04FD908E9 ASF_Bandwidth_Sharing_Exclusive >0 guid AF6060AB-5197-11D2-B6AF-00C04FD908E9 ASF_Bandwidth_Sharing_Partial >0 guid 399595EC-8667-4E2D-8FDB-98814CE76C1E ASF_Payload_Extension_System_Timecode >0 guid E165EC0E-19ED-45D7-B4A7-25CBD1E28E9B ASF_Payload_Extension_System_File_Name >0 guid D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC ASF_Payload_Extension_System_Content_Type >0 guid 1B1EE554-F9EA-4BC8-821A-376B74E4C4B8 ASF_Payload_Extension_System_Pixel_Aspect_Ratio >0 guid C6BD9450-867F-4907-83A3-C77921B733AD ASF_Payload_Extension_System_Sample_Duration >0 guid 6698B84E-0AFA-4330-AEB2-1C0A98D7A44D ASF_Payload_Extension_System_Encryption_Sample_ID >0 guid 00E1AF06-7BEC-11D1-A582-00C04FC29CFB ASF_Payload_Extension_System_Degradable_JPEG 0 name asf-object >0 use asf-name #>>16 lequad >0 (size %lld) [ >>16 lequad >0 >>>(16.q) use asf-object #>>16 lequad 0 ] # Microsoft Advanced Streaming Format (ASF) 0 guid 75B22630-668E-11CF-A6D9-00AA0062CE6C Microsoft ASF !:mime video/x-ms-asf #>16 lequad >0 (size %lld #>>24 lelong x \b, %d header objects) >16 lequad >0 >>30 use asf-object >>(16.q) use asf-object file-5.46/magic/Magdir/assembler000664 023540 023540 00000001274 14015050424 020313 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: assembler,v 1.6 2013/12/11 14:14:20 christos Exp $ # make: file(1) magic for assembler source # 0 regex \^[\040\t]{0,50}\\.asciiz assembler source text !:mime text/x-asm 0 regex \^[\040\t]{0,50}\\.byte assembler source text !:mime text/x-asm 0 regex \^[\040\t]{0,50}\\.even assembler source text !:mime text/x-asm 0 regex \^[\040\t]{0,50}\\.globl assembler source text !:mime text/x-asm 0 regex \^[\040\t]{0,50}\\.text assembler source text !:mime text/x-asm 0 regex \^[\040\t]{0,50}\\.file assembler source text !:mime text/x-asm 0 regex \^[\040\t]{0,50}\\.type assembler source text !:mime text/x-asm file-5.46/magic/Magdir/asterix000664 023540 023540 00000001110 14015050424 020002 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: asterix,v 1.5 2009/09/19 16:28:08 christos Exp $ # asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character # strings as "long" - we assume they're just strings: # From: guy@netapp.com (Guy Harris) # 0 string *STA Aster*x >7 string WORD Words Document >7 string GRAP Graphic >7 string SPRE Spreadsheet >7 string MACR Macro 0 string 2278 Aster*x Version 2 >29 byte 0x36 Words Document >29 byte 0x35 Graphic >29 byte 0x32 Spreadsheet >29 byte 0x38 Macro file-5.46/magic/Magdir/att3b000664 023540 023540 00000002353 14015050424 017352 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: att3b,v 1.10 2017/03/17 21:35:28 christos Exp $ # att3b: file(1) magic for AT&T 3B machines # # The `versions' should be un-commented if they work for you. # (Was the problem just one of endianness?) # # 3B20 # # The 3B20 conflicts with SCCS. #0 beshort 0550 3b20 COFF executable #>12 belong >0 not stripped #>22 beshort >0 - version %d #0 beshort 0551 3b20 COFF executable (TV) #>12 belong >0 not stripped #>22 beshort >0 - version %d # # WE32K # 0 beshort 0560 WE32000 COFF >18 beshort ^00000020 object >18 beshort &00000020 executable >12 belong >0 not stripped >18 beshort ^00010000 N/A on 3b2/300 w/paging >18 beshort &00020000 32100 required >18 beshort &00040000 and MAU hardware required >20 beshort 0407 (impure) >20 beshort 0410 (pure) >20 beshort 0413 (demand paged) >20 beshort 0443 (target shared library) >22 beshort >0 - version %d 0 beshort 0561 WE32000 COFF executable (TV) >12 belong >0 not stripped #>18 beshort &00020000 - 32100 required #>18 beshort &00040000 and MAU hardware required #>22 beshort >0 - version %d # # core file for 3b2 0 string \000\004\036\212\200 3b2 core file >364 string >\0 of '%s' file-5.46/magic/Magdir/audio000664 023540 023540 00000122610 14700541414 017442 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: audio,v 1.133 2024/09/04 19:07:20 christos Exp $ # audio: file(1) magic for sound formats (see also "iff") # # Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com), # and others # # Sun/NeXT audio data 0 string .snd Sun/NeXT audio data: >12 belong 1 8-bit ISDN mu-law, !:mime audio/basic >12 belong 2 8-bit linear PCM [REF-PCM], !:mime audio/basic >12 belong 3 16-bit linear PCM, !:mime audio/basic >12 belong 4 24-bit linear PCM, !:mime audio/basic >12 belong 5 32-bit linear PCM, !:mime audio/basic >12 belong 6 32-bit IEEE floating point, !:mime audio/basic >12 belong 7 64-bit IEEE floating point, !:mime audio/basic >12 belong 8 Fragmented sample data, >12 belong 10 DSP program, >12 belong 11 8-bit fixed point, >12 belong 12 16-bit fixed point, >12 belong 13 24-bit fixed point, >12 belong 14 32-bit fixed point, >12 belong 18 16-bit linear with emphasis, >12 belong 19 16-bit linear compressed, >12 belong 20 16-bit linear with emphasis and compression, >12 belong 21 Music kit DSP commands, >12 belong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), !:mime audio/x-adpcm >12 belong 24 compressed (8-bit CCITT G.722 ADPCM) >12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), >12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), >12 belong 27 8-bit A-law (CCITT G.711), >20 belong 1 mono, >20 belong 2 stereo, >20 belong 4 quad, >16 belong >0 %d Hz # DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format # that uses little-endian encoding and has a different magic number 0 lelong 0x0064732E DEC audio data: >12 lelong 1 8-bit ISDN mu-law, !:mime audio/x-dec-basic >12 lelong 2 8-bit linear PCM [REF-PCM], !:mime audio/x-dec-basic >12 lelong 3 16-bit linear PCM, !:mime audio/x-dec-basic >12 lelong 4 24-bit linear PCM, !:mime audio/x-dec-basic >12 lelong 5 32-bit linear PCM, !:mime audio/x-dec-basic >12 lelong 6 32-bit IEEE floating point, !:mime audio/x-dec-basic >12 lelong 7 64-bit IEEE floating point, !:mime audio/x-dec-basic >12 belong 8 Fragmented sample data, >12 belong 10 DSP program, >12 belong 11 8-bit fixed point, >12 belong 12 16-bit fixed point, >12 belong 13 24-bit fixed point, >12 belong 14 32-bit fixed point, >12 belong 18 16-bit linear with emphasis, >12 belong 19 16-bit linear compressed, >12 belong 20 16-bit linear with emphasis and compression, >12 belong 21 Music kit DSP commands, >12 lelong 23 8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.), !:mime audio/x-dec-basic >12 belong 24 compressed (8-bit CCITT G.722 ADPCM) >12 belong 25 compressed (3-bit CCITT G.723.3 ADPCM), >12 belong 26 compressed (5-bit CCITT G.723.5 ADPCM), >12 belong 27 8-bit A-law (CCITT G.711), >20 lelong 1 mono, >20 lelong 2 stereo, >20 lelong 4 quad, >16 lelong >0 %d Hz # Creative Labs AUDIO stuff 0 string MThd Standard MIDI data !:mime audio/midi >8 beshort x (format %d) >10 beshort x using %d track >10 beshort >1 \bs >12 beshort&0x7fff x at 1/%d >12 beshort&0x8000 >0 SMPTE 0 string CTMF Creative Music (CMF) data !:mime audio/x-unknown 0 string SBI SoundBlaster instrument data !:mime audio/x-unknown 0 string Creative\ Voice\ File Creative Labs voice data !:mime audio/x-unknown # is this next line right? it came this way... >19 byte 0x1A >>23 byte >0 - version %d >>22 byte >0 \b.%d # first entry is also the string "NTRK" 0 belong 0x4e54524b MultiTrack sound data >4 belong x - version %d # Extended MOD format (*.emd) (Greg Roelofs, newt@uchicago.edu); NOT TESTED # [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi] 0 string EMOD Extended MOD sound data, >4 byte&0xf0 x version %d >4 byte&0x0f x \b.%d, >45 byte x %d instruments >83 byte 0 (module) >83 byte 1 (song) # Real Audio (Magic .ra\0375) 0 belong 0x2e7261fd RealAudio sound file !:mime audio/x-pn-realaudio 0 string .RMF\0\0\0 RealMedia file !:mime application/vnd.rn-realmedia #video/x-pn-realvideo #video/vnd.rn-realvideo #application/vnd.rn-realmedia # sigh, there are many mimes for that but the above are the most common. # MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, aeppert@dialin.ind.net] # Oct 31, 1995 # fixed by 2003-06-24 # Too short... #0 string MTM MultiTracker Module sound file #0 string if Composer 669 Module sound data #0 string JN Composer 669 Module sound data (extended format) 0 string MAS_U ULT(imate) Module sound data #0 string FAR Module sound data #>4 string >\15 Title: "%s" 0x2c string SCRM ScreamTracker III Module sound data >0 string >\0 Title: "%s" !:mime audio/x-s3m # .stm before it got above .s3m extension 0x16 string \!Scream\! ScreamTracker Module sound data >0 string >\0 Title: "%s" # Gravis UltraSound patches # From 0 string GF1PATCH110\0ID#000002\0 GUS patch 0 string GF1PATCH100\0ID#000002\0 Old GUS patch # mime types according to http://www.geocities.com/nevilo/mod.htm: # audio/it .it # audio/x-zipped-it .itz # audio/xm fasttracker modules # audio/x-s3m screamtracker modules # audio/s3m screamtracker modules # audio/x-zipped-mod mdz # audio/mod mod # audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z) # # Taken from loader code from mikmod version 2.14 # by Steve McIntyre (stevem@chiark.greenend.org.uk) # added title printing on 2003-06-24 0 string MAS_UTrack_V00 >14 string >/0 ultratracker V1.%.1s module sound data !:mime audio/x-mod #audio/x-tracker-module 0 string UN05 MikMod UNI format module sound data 0 string Extended\ Module: Fasttracker II module sound data !:mime audio/x-mod #audio/x-tracker-module >17 string >\0 Title: "%s" 21 string/c =!SCREAM! Screamtracker 2 module sound data !:mime audio/x-mod #audio/x-screamtracker-module 21 string BMOD2STM Screamtracker 2 module sound data !:mime audio/x-mod #audio/x-screamtracker-module 1080 string \!PM! 4-channel Protracker module sound data !:mime audio/x-mod #audio/x-protracker-module >0 string >\0 Title: "%s" 1080 string M.K. 4-channel Protracker module sound data !:mime audio/x-mod #audio/x-protracker-module >0 string >\0 Title: "%s" 1080 string M!K! 4-channel Protracker module sound data !:mime audio/x-mod #audio/x-protracker-module >0 string >\0 Title: "%s" 1080 string FLT4 4-channel Startracker module sound data !:mime audio/x-mod #audio/x-startracker-module >0 string >\0 Title: "%s" 1080 string FLT8 8-channel Startracker module sound data !:mime audio/x-mod #audio/x-startracker-module >0 string >\0 Title: "%s" 1080 string 4CHN 4-channel Fasttracker module sound data !:mime audio/x-mod #audio/x-fasttracker-module >0 string >\0 Title: "%s" 1080 string 6CHN 6-channel Fasttracker module sound data !:mime audio/x-mod #audio/x-fasttracker-module >0 string >\0 Title: "%s" 1080 string 8CHN 8-channel Fasttracker module sound data !:mime audio/x-mod #audio/x-fasttracker-module >0 string >\0 Title: "%s" 1080 string CD81 8-channel Octalyser module sound data !:mime audio/x-mod #audio/x-octalysertracker-module >0 string >\0 Title: "%s" 1080 string OKTA 8-channel Octalyzer module sound data !:mime audio/x-mod #audio/x-octalysertracker-module >0 string >\0 Title: "%s" # Not good enough. #1082 string CH #>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data 1080 string 16CN 16-channel Taketracker module sound data !:mime audio/x-mod #audio/x-taketracker-module >0 string >\0 Title: "%s" 1080 string 32CN 32-channel Taketracker module sound data !:mime audio/x-mod #audio/x-taketracker-module >0 string >\0 Title: "%s" # TOC sound files -Trevor Johnson # 0 string TOC TOC sound file # sidfiles # added name,author,(c) and new RSID type by 2003-06-24 0 string SIDPLAY\ INFOFILE Sidplay info file 0 string PSID PlaySID v2.2+ (AMIGA) sidtune >4 beshort >0 w/ header v%d, >14 beshort =1 single song, >14 beshort >1 %d songs, >16 beshort >0 default song: %d >0x16 string >\0 name: "%s" >0x36 string >\0 author: "%s" >0x56 string >\0 copyright: "%s" 0 string RSID RSID sidtune PlaySID compatible >4 beshort >0 w/ header v%d, >14 beshort =1 single song, >14 beshort >1 %d songs, >16 beshort >0 default song: %d >0x16 string >\0 name: "%s" >0x36 string >\0 author: "%s" >0x56 string >\0 copyright: "%s" # IRCAM sound files - Michael Pruett # http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/IRCAM/IRCAM.html 0 belong 0x64a30100 IRCAM file (VAX little-endian) 0 belong 0x0001a364 IRCAM file (VAX big-endian) 0 belong 0x0002a364 IRCAM file (Sun little-endian) 0 belong 0x64a30200 IRCAM file (Sun big-endian) 0 belong 0x64a30300 IRCAM file (MIPS little-endian) 0 belong 0x0003a364 IRCAM file (MIPS big-endian) 0 belong 0x0004a364 IRCAM file (NeXT little-endian) 0 belong 0x64a30400 IRCAM file (NeXT big-endian) # NIST SPHERE 0 string NIST_1A\n\ \ \ 1024\n NIST SPHERE file # Sample Vision 0 string SOUND\ SAMPLE\ DATA\ Sample Vision file # Audio Visual Research 0 string 2BIT Audio Visual Research file, >12 beshort =0 mono, >12 beshort =-1 stereo, >14 beshort x %d bits >16 beshort =0 unsigned, >16 beshort =-1 signed, >22 belong&0x00ffffff x %d Hz, >18 beshort =0 no loop, >18 beshort =-1 loop, >21 ubyte <128 note %d, >22 byte =0 replay 5.485 KHz >22 byte =1 replay 8.084 KHz >22 byte =2 replay 10.971 KHz >22 byte =3 replay 16.168 KHz >22 byte =4 replay 21.942 KHz >22 byte =5 replay 32.336 KHz >22 byte =6 replay 43.885 KHz >22 byte =7 replay 47.261 KHz # SGI SoundTrack 0 string _SGI_SoundTrack SGI SoundTrack project file # ID3 version 2 tags 0 string ID3 Audio file with ID3 version 2 >3 byte x \b.%d >4 byte x \b.%d >>5 byte &0x80 \b, unsynchronized frames >>5 byte &0x40 \b, extended header >>5 byte &0x20 \b, experimental >>5 byte &0x10 \b, footer present >(6.I+10) indirect x \b, contains: # NSF (NES sound file) magic 0 string NESM\x1a NES Sound File >14 string >\0 ("%s" by >46 string >\0 %s, copyright >78 string >\0 %s), >5 byte x version %d, >6 byte x %d tracks, >122 byte&0x2 =1 dual PAL/NTSC >122 byte&0x1 =1 PAL >122 byte&0x1 =0 NTSC # NSFE (Extended NES sound file) magic # http://slickproductions.org/docs/NSF/nsfespec.txt # From: David Pflug 0 string NSFE Extended NES Sound File >48 search/0x1000 auth >>&0 string >\0 ("%s" >>>&1 string >\0 by %s >>>>&1 string >\0 \b, copyright %s >>>>>&1 string >\0 \b, ripped by %s >20 byte x \b), %d tracks, >18 byte&0x2 =1 dual PAL/NTSC >18 byte&0x2 =0 >>18 byte&0x1 =1 PAL >>18 byte&0x1 =0 NTSC # Type: SNES SPC700 sound files # From: Josh Triplett 0 string SNES-SPC700\ Sound\ File\ Data\ v SNES SPC700 sound file >&0 string 0.30 \b, version %s >>0x23 byte 0x1B \b, without ID666 tag >>0x23 byte 0x1A \b, with ID666 tag >>>0x2E string >\0 \b, song "%.32s" >>>0x4E string >\0 \b, game "%.32s" # Impulse tracker module (audio/x-it) 0 string IMPM Impulse Tracker module sound data - !:mime audio/x-mod >4 string >\0 "%s" >40 leshort !0 compatible w/ITv%x >42 leshort !0 created w/ITv%x # Imago Orpheus module (audio/x-imf) 60 string IM10 Imago Orpheus module sound data - >0 string >\0 "%s" # From # These are the /etc/magic entries to decode modules, instruments, and # samples in Impulse Tracker's native format. 0 string IMPS Impulse Tracker Sample >18 byte &2 16 bit >18 byte ^2 8 bit >18 byte &4 stereo >18 byte ^4 mono 0 string IMPI Impulse Tracker Instrument >28 leshort !0 ITv%x >30 byte !0 %d samples # Yamaha TX Wave: file(1) magic for Yamaha TX Wave audio files # From 0 string LM8953 Yamaha TX Wave >22 byte 0x49 looped >22 byte 0xC9 non-looped >23 byte 1 33kHz >23 byte 2 50kHz >23 byte 3 16kHz # scream tracker: file(1) magic for Scream Tracker sample files # # From 76 string SCRS Scream Tracker Sample >0 byte 1 sample >0 byte 2 adlib melody >0 byte >2 adlib drum >31 byte &2 stereo >31 byte ^2 mono >31 byte &4 16bit little endian >31 byte ^4 8bit >30 byte 0 unpacked >30 byte 1 packed # audio # From: Cory Dikkers 0 string MMD0 MED music file, version 0 0 string MMD1 OctaMED Pro music file, version 1 0 string MMD3 OctaMED Soundstudio music file, version 3 0 string OctaMEDCmpr OctaMED Soundstudio compressed file 0 string MED MED_Song 0 string SymM Symphonie SymMOD music file # # Track Length (TRL), Tracks (TRK), Samples (SMP), Subsongs (SS) # http://lclevy.free.fr/exotica/ahx/ahxformat.txt 0 string THX AHX version >3 byte =0 1 module data >3 byte =1 2 module data >11 ubyte x TRK: %u >10 ubyte x TRL: %u >12 ubyte x SMP: %u >13 ubyte x SS: %u >(4.H) string x Title: "%.128s" # header is mostly AHX format 0 string HVL >3 byte <2 Hively Tracker Song >3 byte =0 v1 module data >3 byte =1 v2 module data >11 ubyte x TRK: %u >10 ubyte x TRL: %u >12 ubyte x SMP: %u >13 ubyte x SS: %u >8 ubyte/4 =0 CHN: 4 >8 ubyte/4 >0 CHN: 4+%u #>-0 offset <0xffff >(4.H) string x Title: "%.128s" # 0 string OKTASONG Oktalyzer module data # 0 string DIGI\ Booster\ module\0 %s >20 byte >0 %c >>21 byte >0 \b%c >>>22 byte >0 \b%c >>>>23 byte >0 \b%c >610 string >\0 \b, "%s" # 0 string DBM0 DIGI Booster Pro Module >4 byte >0 V%X. >>5 byte x \b%02X >16 string >\0 \b, "%s" # 0 string FTMN FaceTheMusic module >16 string >\0d \b, "%s" # From: 2003-06-24 0 string AMShdr\32 Velvet Studio AMS Module v2.2 0 string Extreme Extreme Tracker AMS Module v1.3 0 string DDMF Xtracker DMF Module >4 byte x v%i >0xD string >\0 Title: "%s" >0x2B string >\0 Composer: "%s" 0 string DSM\32 Dynamic Studio Module DSM 0 string SONG DigiTrekker DTM Module 0 string DMDL DigiTrakker MDL Module 0 string PSM\32 Protracker Studio PSM Module 44 string PTMF Poly Tracker PTM Module >0 string >\32 Title: "%s" 0 string MT20 MadTracker 2.0 Module MT2 0 string RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD 0 string RTMM RTM Module 0x426 string MaDoKaN96 XMS Adlib Module >0 string >\0 Composer: "%s" 0 string AMF AMF Module >4 string >\0 Title: "%s" 0 string MODINFO1 Open Cubic Player Module Information MDZ 0 string Extended\40Instrument: Fast Tracker II Instrument # From: Takeshi Hamasaki # NOA Nancy Codec file 0 string \210NOA\015\012\032 NOA Nancy Codec Movie file # Yamaha SMAF format 0 string MMMD Yamaha SMAF file # Sharp Jisaku Melody format for PDC 0 string \001Sharp\040JisakuMelody SHARP Cell-Phone ringing Melody >20 string Ver01.00 Ver. 1.00 >>32 byte x \b, %d tracks # Free lossless audio codec # From: Przemyslaw Augustyniak 0 string fLaC FLAC audio bitstream data !:mime audio/flac >4 byte&0x7f >0 \b, unknown version >4 byte&0x7f 0 \b # some common bits/sample values >>20 beshort&0x1f0 0x030 \b, 4 bit >>20 beshort&0x1f0 0x050 \b, 6 bit >>20 beshort&0x1f0 0x070 \b, 8 bit >>20 beshort&0x1f0 0x0b0 \b, 12 bit >>20 beshort&0x1f0 0x0f0 \b, 16 bit >>20 beshort&0x1f0 0x170 \b, 24 bit >>20 byte&0xe 0x0 \b, mono >>20 byte&0xe 0x2 \b, stereo >>20 byte&0xe 0x4 \b, 3 channels >>20 byte&0xe 0x6 \b, 4 channels >>20 byte&0xe 0x8 \b, 5 channels >>20 byte&0xe 0xa \b, 6 channels >>20 byte&0xe 0xc \b, 7 channels >>20 byte&0xe 0xe \b, 8 channels # sample rates derived from known oscillator frequencies; # 24.576 MHz (video/fs=48kHz), 22.5792 (audio/fs=44.1kHz) and # 16.384 (other/fs=32kHz). >>17 belong&0xfffff0 0x02b110 \b, 11.025 kHz >>17 belong&0xfffff0 0x03e800 \b, 16 kHz >>17 belong&0xfffff0 0x056220 \b, 22.05 kHz >>17 belong&0xfffff0 0x05dc00 \b, 24 kHz >>17 belong&0xfffff0 0x07d000 \b, 32 kHz >>17 belong&0xfffff0 0x0ac440 \b, 44.1 kHz >>17 belong&0xfffff0 0x0bb800 \b, 48 kHz >>17 belong&0xfffff0 0x0fa000 \b, 64 kHz >>17 belong&0xfffff0 0x158880 \b, 88.2 kHz >>17 belong&0xfffff0 0x177000 \b, 96 kHz >>17 belong&0xfffff0 0x1f4000 \b, 128 kHz >>17 belong&0xfffff0 0x2b1100 \b, 176.4 kHz >>17 belong&0xfffff0 0x2ee000 \b, 192 kHz >>17 belong&0xfffff0 0x3e8000 \b, 256 kHz >>17 belong&0xfffff0 0x562200 \b, 352.8 kHz >>17 belong&0xfffff0 0x5dc000 \b, 384 kHz >>21 byte&0xf >0 \b, >4G samples >>21 byte&0xf 0 \b >>>22 belong >0 \b, %u samples >>>22 belong 0 \b, length unknown # (ISDN) VBOX voice message file (Wolfram Kleff) 0 string VBOX VBOX voice message data # ReBorn Song Files (.rbs) # David J. Singer 8 string RB40 RBS Song file >29 string ReBorn created by ReBorn >37 string Propellerhead created by ReBirth # Synthesizer Generator and Kimwitu share their file format 0 string A#S#C#S#S#L#V#3 Synthesizer Generator or Kimwitu data # Kimwitu++ uses a slightly different magic 0 string A#S#C#S#S#L#HUB Kimwitu++ data # From "Simon Hosie 0 string TFMX-SONG TFMX module sound data # Monkey's Audio compressed audio format (.ape) # From danny.milo@gmx.net (Danny Milosavljevic) # New version from Abel Cheung 0 string MAC\040 Monkey's Audio compressed format !:mime audio/x-ape >4 uleshort >0x0F8B version %d >>(0x08.l) uleshort =1000 with fast compression >>(0x08.l) uleshort =2000 with normal compression >>(0x08.l) uleshort =3000 with high compression >>(0x08.l) uleshort =4000 with extra high compression >>(0x08.l) uleshort =5000 with insane compression >>(0x08.l+18) uleshort =1 \b, mono >>(0x08.l+18) uleshort =2 \b, stereo >>(0x08.l+20) ulelong x \b, sample rate %d >4 uleshort <0x0F8C version %d >>6 uleshort =1000 with fast compression >>6 uleshort =2000 with normal compression >>6 uleshort =3000 with high compression >>6 uleshort =4000 with extra high compression >>6 uleshort =5000 with insane compression >>10 uleshort =1 \b, mono >>10 uleshort =2 \b, stereo >>12 ulelong x \b, sample rate %d # adlib sound files # From: Alex Myczko # https://github.com/rerrahkr/BambooTracker 0 string BambooTracker BambooTracker >13 string Mod Module >13 string Ist Instrument >13 string Bnk Bank >22 byte x \b, version %u >21 byte x \b.%u >20 byte x \b.%u 0 string CC2x CheeseCutter 2 song 0 string RAWADATA RdosPlay RAW 1068 string RoR AMUSIC Adlib Tracker 0 string JCH EdLib 0 string mpu401tr MPU-401 Trakker 0 string SAdT Surprise! Adlib Tracker >4 byte x Version %d 0 string XAD! eXotic ADlib 0 string ofTAZ! eXtra Simple Music 0 string FMK! FM Kingtracker Song 0 string DFM DFM Song 0 string \ CFF Song 0 string _A2module A2M Song # Spectrum 128 tunes (.ay files). # From: Emanuel Haupt 0 string ZXAYEMUL Spectrum 128 tune 0 string \0BONK BONK, #>5 byte x version %d >14 byte x %d channel(s), >15 byte =1 lossless, >15 byte =0 lossy, >16 byte x mid-side 384 string LockStream LockStream Embedded file (mostly MP3 on old Nokia phones) # format VQF (proprietary codec for sound) # some infos on the header file available at : # http://www.twinvq.org/english/technology_format.html 0 string TWIN97012000 VQF data >27 short 0 \b, Mono >27 short 1 \b, Stereo >31 short >0 \b, %d kbit/s >35 short >0 \b, %d kHz # Nelson A. de Oliveira (naoliv@gmail.com) # .eqf 0 string Winamp\ EQ\ library\ file %s # it will match only versions like v. # Since I saw only eqf files with version v1.1 I think that it's OK >23 string x \b%.4s # .preset 0 string [Equalizer\ preset] XMMS equalizer preset # .m3u 0 search/1 #EXTM3U M3U playlist text !:mime audio/x-mpegurl # .pls 0 search/1 [playlist] PLS playlist text # licq.conf 1 string [licq] LICQ configuration file # Atari ST audio files by Dirk Jagdmann # NOTE: Most SNDH music is packed using ICE, which has # magic numbers "ICE!" and "Ice!". Some SNDH music is # not packed, so we check for both packed and unpacked. 12 string SNDH SNDH Atari ST music 0 belong&0xFFDFDFFF 0x49434521 >14 search/40 NDH SNDH Atari ST music >14 search/40 TITL SNDH Atari ST music 0 string SC68\ Music-file\ /\ (c)\ (BeN)jami sc68 Atari ST music # musepak support From: "Jiri Pejchal" 0 string MP+ Musepack audio (MP+) !:mime audio/x-musepack >3 byte 255 \b, SV pre8 >3 byte&0xF 0x6 \b, SV 6 >3 byte&0xF 0x8 \b, SV 8 >3 byte&0xF 0x7 \b, SV 7 >>3 byte&0xF0 0x0 \b.0 >>3 byte&0xF0 0x10 \b.1 >>3 byte&0xF0 240 \b.15 >>10 byte&0xF0 0x0 \b, no profile >>10 byte&0xF0 0x10 \b, profile 'Unstable/Experimental' >>10 byte&0xF0 0x50 \b, quality 0 >>10 byte&0xF0 0x60 \b, quality 1 >>10 byte&0xF0 0x70 \b, quality 2 (Telephone) >>10 byte&0xF0 0x80 \b, quality 3 (Thumb) >>10 byte&0xF0 0x90 \b, quality 4 (Radio) >>10 byte&0xF0 0xA0 \b, quality 5 (Standard) >>10 byte&0xF0 0xB0 \b, quality 6 (Xtreme) >>10 byte&0xF0 0xC0 \b, quality 7 (Insane) >>10 byte&0xF0 0xD0 \b, quality 8 (BrainDead) >>10 byte&0xF0 0xE0 \b, quality 9 >>10 byte&0xF0 0xF0 \b, quality 10 >>27 byte 0x0 \b, Buschmann 1.7.0-9, Klemm 0.90-1.05 >>27 byte 102 \b, Beta 1.02 >>27 byte 104 \b, Beta 1.04 >>27 byte 105 \b, Alpha 1.05 >>27 byte 106 \b, Beta 1.06 >>27 byte 110 \b, Release 1.1 >>27 byte 111 \b, Alpha 1.11 >>27 byte 112 \b, Beta 1.12 >>27 byte 113 \b, Alpha 1.13 >>27 byte 114 \b, Beta 1.14 >>27 byte 115 \b, Alpha 1.15 0 string MPCK Musepack audio (MPCK) !:mime audio/x-musepack # IMY # from http://filext.com/detaillist.php?extdetail=IMY # https://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm # http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html # http://www.wx800.com/msg/download/irda/iMelody.pdf 0 string BEGIN:IMELODY iMelody Ringtone Format # From: "Mateus Caruccio" # guitar pro v3,4,5 from http://filext.com/file-extension/gp3 0 string \030FICHIER\ GUITAR\ PRO\ v3. Guitar Pro Ver. 3 Tablature # From: "Leslie P. Polzer" 60 string SONG SoundFX Module sound file # Type: Adaptive Multi-Rate Codec # URL: http://filext.com/detaillist.php?extdetail=AMR # http://fileformats.archiveteam.org/wiki/Adaptive_Multi-Rate_Audio # Reference: https://datatracker.ietf.org/doc/html/rfc4867 # http://mark0.net/download/triddefs_xml.7z/defs/a/audio-amr.trid.xml # Update: Joerg Jenderek # From: Russell Coker # Note: called "AMR (Adaptive Multi Rate) encoded audio" by TrID and # "Adaptive Multi-Rate Audio" by DROID via PUID fmt/356 and # "AMR" "AMR audio" or "Adaptive Multi-Rate" by shared MIME-info database from freedesktop.org 0 string #!AMR Adaptive Multi-Rate Codec # Adaptive Multi-Rate Codec (strength=80) before wrong "a AMR script executable (binary data)" (strength=20=60/3) by ./varied.script #!:strength +0 # Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/audio-awb.trid.xml # Note: called "Adaptive Multi-Rate Wideband ACELP codec" by TrID and # "Adaptive Multi-Rate Wideband Audio" bY DROID via PUID fmt/954 and # "AMR-WB" "AMR-WB audio" or "Adaptive Multi-Rate Wideband" by shared MIME-info database from freedesktop.org >5 string -WB (Wideband) # https://www.iana.org/assignments/media-types/audio/AMR-WB !:mime audio/AMR-WB #!:mime audio/amr-wb-encrypted !:apple ????amrw !:ext awb # variant without Wideband >5 default x (GSM telephony) # https://www.iana.org/assignments/media-types/audio/AMR !:mime audio/AMR # last character in type code is space !:apple ????amr !:ext amr # GRR: maybe also 3ga suffix? https://telparia.com/fileFormatSamples/audio/amr/example.3ga #!:ext amr/3ga # Type: SuperCollider 3 Synth Definition File Format # From: Mario Lang 0 string SCgf SuperCollider3 Synth Definition file, >4 belong x version %d # Type: True Audio Lossless Audio # URL: https://wiki.multimedia.cx/index.php?title=True_Audio # From: Mike Melanson 0 string TTA1 True Audio Lossless Audio # Type: WavPack Lossless Audio # URL: https://wiki.multimedia.cx/index.php?title=WavPack # From: Mike Melanson 0 string wvpk WavPack Lossless Audio # From Fabio R. Schmidlin # VGM music file 0 string Vgm\040 >9 ubyte >0 VGM Video Game Music dump v !:mime audio/x-vgm !:ext vgm >>9 ubyte/16 >0 \b%d >>9 ubyte&0x0F x \b%d >>8 ubyte/16 x \b.%d >>8 ubyte&0x0F >0 \b%d #Get soundchips >>8 ubyte x \b, soundchip(s)= >>0x0C ulelong >0 SN76489 (PSG), >>0x10 ulelong >0 YM2413 (OPLL), >>0x2C ulelong >0 YM2612 (OPN2), >>0x30 ulelong >0 YM2151 (OPM), >>0x38 ulelong >0 Sega PCM, >>0x34 ulelong >0xC >>>0x40 ulelong >0 RF5C68 (PCM), >>0x34 ulelong >0x10 >>>0x44 ulelong >0 YM2203 (OPN), >>0x34 ulelong >0x14 >>>0x48 ulelong >0 YM2608 (OPNA), >>0x34 ulelong >0x18 >>>0x4C lelong >0 YM2610 (OPNB), >>>0x4C lelong <0 YM2610B (OPNB+2FM), >>0x34 ulelong >0x1C >>>0x50 ulelong >0 YM3812 (OPL2), >>0x34 ulelong >0x20 >>>0x54 ulelong >0 YM3526 (OPL), >>0x34 ulelong >0x24 >>>0x58 ulelong >0 Y8950 (MSX-Audio), >>0x34 ulelong >0x28 >>>0x5C ulelong >0 YMF262 (OPL3), >>0x34 ulelong >0x2C >>>0x60 ulelong >0 YMF278B (OPL4), >>0x34 ulelong >0x30 >>>0x64 ulelong >0 YMF271 (OPX), >>0x34 ulelong >0x34 >>>0x68 ulelong >0 YMZ280B (PCMD8), >>0x34 ulelong >0x38 >>>0x6C ulelong >0 RF5C164 (PCM), >>0x34 ulelong >0x3C >>>0x70 ulelong >0 PWM, >>0x34 ulelong >0x40 >>>0x74 ulelong >0 >>>>0x78 ubyte 0x00 AY-3-8910, >>>>0x78 ubyte 0x01 AY-3-8912, >>>>0x78 ubyte 0x02 AY-3-8913, >>>>0x78 ubyte 0x03 AY-3-8930, >>>>0x78 ubyte 0x10 YM2149, >>>>0x78 ubyte 0x11 YM3439, >>>>0x78 ubyte 0x12 YMZ284, >>>>0x78 ubyte 0x13 YMZ294, # VGM 1.61 >>0x34 ulelong >0x4C >>>0x80 ulelong >0 DMG, >>0x34 ulelong >0x50 >>>0x84 lelong >0 NES APU, >>>0x84 lelong <0 NES APU with FDS, >>0x34 ulelong >0x54 >>>0x88 ulelong >0 MultiPCM, >>0x34 ulelong >0x58 >>>0x8C ulelong >0 uPD7759 (ADPCM Speech), >>0x34 ulelong >0x5C >>>0x90 ulelong >0 OKIM6258 (ADPCM Speech), >>0x34 ulelong >0x64 >>>0x98 ulelong >0 OKIM6295 (ADPCM), >>0x34 ulelong >0x68 >>>0x9C ulelong >0 K051649, >>0x34 ulelong >0x6C >>>0xA0 ulelong >0 K054539, >>0x34 ulelong >0x70 >>>0xA4 ulelong >0 HuC6280, >>0x34 ulelong >0x74 >>>0xA8 ulelong >0 C140, >>0x34 ulelong >0x78 >>>0xAC ulelong >0 K053260, >>0x34 ulelong >0x7C >>>0xB0 ulelong >0 Pokey, >>0x34 ulelong >0x80 >>>0xB4 ulelong >0 QSound, # VGM 1.71 >>0x34 ulelong >0x84 >>>0xB8 ulelong >0 SCSP, >>0x34 ulelong >0x8C >>>0xC0 ulelong >0 WonderSwan, >>0x34 ulelong >0x90 >>>0xC4 ulelong >0 VSU, >>0x34 ulelong >0x94 >>>0xC8 ulelong >0 SAA1099, >>0x34 ulelong >0x98 >>>0xCC ulelong >0 ES5503 (DOC), >>0x34 ulelong >0x9C >>>0xD0 lelong >0 ES5505 (OTIS), >>>0xD0 lelong <0 ES5506 (OTTO), >>0x34 ulelong >0xA4 >>>0xD8 ulelong >0 X1-010, >>0x34 ulelong >0xA8 >>>0xDC ulelong >0 C352, >>0x34 ulelong >0xAC >>>0xE0 ulelong >0 GA20, # GVOX Encore file format # Since this is a proprietary file format and there is no publicly available # format specification, this is just based on induction # 0 string SCOW >4 byte 0xc4 GVOX Encore music, version 5.0 or above >4 byte 0xc2 GVOX Encore music, version < 5.0 0 string ZBOT >4 byte 0xc5 GVOX Encore music, version < 5.0 # Summary: Garmin Voice Processing Module (WAVE audios) # From: Joerg Jenderek # URL: https://www.garmin.com/ # Reference: http://www.poi-factory.com/node/19580 # NOTE: there exist 2 other Garmin VPM formats 0 string AUDIMG # skip text files starting with string "AUDIMG" >13 ubyte <13 Garmin Voice Processing Module !:mime audio/x-vpm-wav-garmin !:ext vpm # 3 bytes indicating the voice version (200,220) >>6 string x \b, version %3.3s # day of release (01-31) >>12 ubyte x \b, %.2d # month of release (01-12) >>13 ubyte x \b.%.2d # year of release (like 2006, 2007, 2008) >>14 uleshort x \b.%.4d # hour of release (0-23) >>11 ubyte x %.2d # minute of release (0-59) >>10 ubyte x \b:%.2d # second of release (0-59) >>9 ubyte x \b:%.2d # if you select a language like german on your garmin device # you can only select voice modules with corresponding language byte ID like 1 >>18 ubyte x \b, language ID %d # structure for phrases/sentences? # number of voice sample in the 1st phrase? #>>19 uleshort x \b, %#x samples #>>>21 uleshort >0 \b, at %#4.4x #>>>(21.s) ubequad x %#llx # 2nd phrase? #>>23 uleshort x \b, %#x samples #>>>25 uleshort >0 \b, at %#4.4x #>>>(25.s) ubequad x %#llx # pointer to 1st audio WAV sample >>16 uleshort >0 >>>(16.s) ulelong >0 \b, at %#x # WAV length # 1 space char after "bytes" to get phrase "bytes RIFF" >>>>(16.s+4) ulelong >0 %u bytes # look for magic >>>>>(&-8.l) string RIFF # determine type by ./riff >>>>>>&-4 indirect x # 2 - ~ 131 WAV samples following same way # # Summary: encrypted Garmin Voice Processing Module # From: Joerg Jenderek # URL: https://www.garmin.com/us/products/ontheroad/voicestudio # NOTE: Encrypted variant used in voices like DrNightmare, Elfred, Yeti. # There exist 2 other Garmin VPM formats 0 ubequad 0xa141190fecc8ced6 Garmin Voice Processing Module (encrypted) !:mime audio/x-vpm-garmin !:ext vpm # From Martin Mueller Skarbiniks Pedersen 0 string GDM >0x3 byte 0xFE General Digital Music. >>0x4 string >\0 title: "%s" >>0x24 string >\0 musician: "%s" >>>0x44 beshort 0x0D0A >>>>0x46 byte 0x1A >>>>>0x47 string GMFS Version >>>>>0x4B byte x %d. >>>>>0x4C byte x \b%02d >>>>>0x4D beshort 0x000 (2GDM v >>>>>0x4F byte x \b%d. >>>>>>0x50 byte x \b%d) 0 string MTM Multitracker >0x3 byte/16 x Version %d. >0x3 byte&0x0F x \b%02d >>0x4 string >\0 title: "%s" 0 string MO3 >3 ubyte <6 MOdule with MP3 >>3 byte 0 Version 0 (With MP3 and lossless) >>3 byte 1 Version 1 (With ogg and lossless) >>3 byte 3 Version 2.2 >>3 byte 4 (With no LAME header) >>3 byte 5 Version 2.4 0 string ADRVPACK AProSys module # ftp://ftp.modland.com/pub/documents/format_documentation/\ # Art%20Of%20Noise%20(.aon).txt 0 string AON >4 string "ArtOfNoise by Bastian Spiegel(twice/lego)" >0x2e string NAME Art of Noise Tracker Song >3 string <9 >>3 string 4 (4 voices) >>3 string 8 (8 voices) >>0x36 string >\0 Title: "%s" 0 string FAR >0x2c byte 0x0d >>0x2d byte 0x0a >>>0x2e byte 0x1a >>>>0x3 byte 0xFE Farandole Tracker Song >>>>>0x31 byte/16 x Version %d. >>>>>0x31 byte&0x0F x \b%02d >>>>>0x4 string >\0 \b, title: "%s" # magic for Klystrack, https://kometbomb.github.io/klystrack/ # from Alex Myczko 0 string cyd!song Klystrack song >8 byte >0 \b, version %u >8 byte >26 #>>9 byte x \b, channels %u #>>10 leshort x \b, time signature %u #>>12 leshort x \b, sequence step %u #>>14 byte x \b, instruments %u #>>15 leshort x \b, patterns %u #>>17 leshort x \b, sequences %u #>>19 leshort x \b, length %u #>>21 leshort x \b, loop point %u #>>23 byte x \b, master volume %u #>>24 byte x \b, song speed %u #>>25 byte x \b, song speed2 %u #>>26 byte x \b, song rate %u #>>27 belong x \b, flags %#x #>>31 byte x \b, multiplex period %u #>>32 byte x \b, pitch inaccuracy %u >>149 pstring x \b, title %s 0 string cyd!inst Klystrack instrument # magic for WOPL instrument files, https://github.com/Wohlstand/OPL3BankEditor # see Specifications/WOPL-and-OPLI-Specification.txt 0 string WOPL3-INST\0 WOPL instrument >11 leshort x \b, version %u 0 string WOPL3-BANK\0 WOPL instrument bank >11 leshort x \b, version %u # AdLib/OPL instrument files. Format specifications on # http://www.shikadi.net/moddingwiki 0 string Junglevision\ Patch\ File Junglevision instrument data 0 string #OPL_II# DMX OP2 instrument data 0 string IBK\x1a IBK instrument data 0 string 2OP\x1a IBK instrument data, 2 operators 0 string 4OP\x1a IBK instrument data, 4 operators 2 string ADLIB- AdLib instrument data >0 byte x \b, version %u >1 byte x \b.%u # CRI ADX ADPCM audio # Used by various Sega games. # https://en.wikipedia.org/wiki/ADX_(file_format) # https://wiki.multimedia.cx/index.php/CRI_ADX_file # Added by David Korth 0x00 beshort 0x8000 >(2.S-2) string (c)CRI CRI ADX ADPCM audio !:ext adx !:mime audio/x-adx !:strength +50 >>0x12 byte x v%u >>0x04 byte 0x02 \b, pre-set prediction coefficients >>0x04 byte 0x03 \b, standard ADX >>0x04 byte 0x04 \b, exponential scale >>0x04 byte 0x10 \b, AHX (Dreamcast) >>0x04 byte 0x11 \b, AHX >>0x08 belong x \b, %u Hz >>0x12 byte 0x03 >>>0x02 beshort >0x2B >>>>0x18 belong !0 \b, looping >>0x12 byte 0x04 >>>0x02 beshort >0x37 >>>>0x24 belong !0 \b, looping >>0x13 byte&0x08 0x08 \b, encrypted # Lossless audio (.la) (http://www.lossless-audio.com/) 0 string LA >2 string 03 Lossless audio version 0.3 >2 string 04 Lossless audio version 0.4 # Sony PlayStation Audio (.xa) 0 leshort 0x4158 Sony PlayStation Audio # Portable Sound Format # Used for audio rips for various consoles. # http://fileformats.archiveteam.org/wiki/Portable_Sound_Format # Added by David Korth 0 string PSF >3 byte 0x01 >>0 use portable_sound_format >3 byte 0x02 >>0 use portable_sound_format >3 byte 0x11 >>0 use portable_sound_format >3 byte 0x12 >>0 use portable_sound_format >3 byte 0x13 >>0 use portable_sound_format >3 byte 0x21 >>0 use portable_sound_format >3 byte 0x22 >>0 use portable_sound_format >3 byte 0x23 >>0 use portable_sound_format >3 byte 0x41 >>0 use portable_sound_format 0 name portable_sound_format >0 string PSF Portable Sound Format !:mime audio/x-psf >>3 byte 0x01 (Sony PlayStation) >>3 byte 0x02 (Sony PlayStation 2) >>3 byte 0x11 (Sega Saturn) >>3 byte 0x12 (Sega Dreamcast) >>3 byte 0x13 (Sega Mega Drive) >>3 byte 0x21 (Nintendo 64) >>3 byte 0x22 (Game Boy Advance) >>3 byte 0x23 (Super NES) >>3 byte 0x41 (Capcom QSound) # Atari 8-bit SAP audio format # http://asap.sourceforge.net/sap-format.html # Added by David Korth 0 string SAP\r\n Atari 8-bit SAP audio file !:mime audio/x-sap !:ext sap >5 search/1024 NAME >>&1 string x \b: %s >>5 search/1024 AUTHOR >>>&1 string x by %s # Nintendo Wii BRSTM audio format (fields) # NOTE: Assuming HEAD starts at 0x40. # FIXME: Replace 0x48 with HEAD offset plus 8. 0 name nintendo-wii-brstm-fields >(0x10.L) string HEAD \b: >>(0x10.L+0x0C) belong x >>>(&-4.L+0x48) belong x >>>>&-4 byte 0 PCM, signed 8-bit, >>>>&-4 byte 1 PCM, signed 16-bit, >>>>&-4 byte 2 THP ADPCM, >>>>&-3 byte !0 looping, >>>>&-2 byte 1 mono >>>>&-2 byte 2 stereo >>>>&-2 byte 3 3 channels >>>>&-2 byte 4 quad >>>>&-2 byte >4 %u channels >>>>&0 beshort !0 %u Hz # Nintendo Wii BRSTM audio format # https://wiibrew.org/wiki/BRSTM_file # Added by David Korth 0 string RSTM Nintendo Wii BRSTM audio file !:mime audio/x-brstm !:ext brstm # Wii is big-endian, so default to BE. >4 beshort 0xFEFF >>0 use nintendo-wii-brstm-fields >4 leshort 0xFEFF >>0 use \^nintendo-wii-brstm-fields # Nintendo 3DS BCSTM audio format (fields) 0 name nintendo-3ds-bcstm-fields >(0x18.l) string INFO \b: # INFO block: Stream information starts at 0x20 (minus 4 for the 'INFO' magic) >>&0x1C byte 0 PCM, signed 8-bit, >>&0x1C byte 1 PCM, signed 16-bit, >>&0x1C byte 2 DSP ADPCM, >>&0x1C byte 3 IMA ADPCM, >>&0x1D byte !0 looping, >>&0x1E byte 1 mono >>&0x1E byte 2 stereo >>&0x1E byte 3 3 channels >>&0x1E byte 4 quad >>&0x1E byte >4 %u channels >>&0x20 lelong !0 %u Hz # Nintendo 3DS BCSTM audio format # https://www.3dbrew.org/wiki/BCSTM # Added by David Korth 0 string CSTM Nintendo 3DS BCSTM audio file !:mime audio/x-bcstm !:ext bcstm # 3DS is little-endian, so default to LE. >4 leshort 0xFEFF >>0 use nintendo-3ds-bcstm-fields >4 beshort 0xFEFF >>0 use \^nintendo-3ds-bcstm-fields # Nintendo Wii U BFSTM audio format # http://mk8.tockdom.com/wiki/BFSTM_(File_Format) # NOTE: This format is very similar to BCSTM. # Added by David Korth 0 string FSTM Nintendo Wii U BFSTM audio file !:mime audio/x-bfstm !:ext bfstm # BFSTM is used on both Wii U (BE) and Switch (LE), # so default to LE. >4 leshort 0xFEFF >>0 use nintendo-3ds-bcstm-fields >4 beshort 0xFEFF >>0 use \^nintendo-3ds-bcstm-fields # Nintendo 3DS BCSTM audio format (fields) 0 name nintendo-3ds-bcwav-fields >(0x18.l) string INFO \b: # INFO block (minus 4 for INFO magic) >>&0x4 byte 0 PCM, signed 8-bit, >>&0x4 byte 1 PCM, signed 16-bit, >>&0x4 byte 2 DSP ADPCM, >>&0x4 byte 3 IMA ADPCM, >>&0x5 byte !0 looping, >>&0x8 lelong x stereo >>&0x8 lelong !0 %u Hz # Nintendo 3DS BCWAV audio format # https://www.3dbrew.org/wiki/BCWAV # Added by David Korth 0 string CWAV Nintendo 3DS BCWAV audio file !:mime audio/x-bcwav !:ext bcwav # 3DS is little-endian, so default to LE. >4 leshort 0xFEFF >>0 use nintendo-3ds-bcwav-fields >4 beshort 0xFEFF >>0 use \^nintendo-3ds-bcwav-fields # Philips DSDIFF audio format (Direct Stream Digital Interchange File Format) # Used for DSD audio recordings and Super Audio CD (SACD) mastering annotations # https://dsd-guide.com/sites/default/files/white-papers/DSDIFF_1.5_Spec.pdf # From: Toni Ruottu 0 string FRM8 12 string DSD\x20 DSDIFF audio bitstream data !:mime audio/x-dff !:ext dff # format version chunk >&0 string FVER # version 1 >>&8 byte 1 # v1 / sampling resolution ( 1 bit PDM only ) >>>&0 string x \b, 1 bit # v1 / sound property chunk >>>&0 search/0xff PROP >>>>&8 string SND # v1 / sound property chunk / channel configuration chunk >>>>>&0 search/0xff CHNL >>>>>>&8 ubeshort 1 \b, mono >>>>>>&8 ubeshort 2 >>>>>>>&0 string SLFTSRGT \b, stereo >>>>>>>&0 default x \b, 2 channels >>>>>>&8 ubeshort 3 >>>>>>>&0 string SLFTSRGTLFE\x20 \b, 2.1 stereo >>>>>>>&0 string SLFTSRGTC\x20\x20\x20 \b, 3.0 stereo >>>>>>>&0 default x \b, 3 channels >>>>>>&8 ubeshort 4 >>>>>>>&0 string MLFTMRGTLS\x20\x20RS\x20\x20 \b, 4.0 surround >>>>>>>&0 string SLFTSRGTC\x20\x20\x20LFE\x20 \b, 3.1 stereo >>>>>>>&0 default x \b, 4 channels >>>>>>&8 ubeshort 5 >>>>>>>&0 string MLFTMRGTC\x20\x20\x20LS\x20\x20RS\x20\x20 \b, 5.0 surround >>>>>>>&0 string MLFTMRGTLFE\x20LS\x20\x20RS\x20\x20 \b, 4.1 surround >>>>>>>&0 default x \b, 5 channels >>>>>>&8 ubeshort 6 >>>>>>>&0 string MLFTMRGTC\x20\x20\x20LFE\x20LS\x20\x20RS\x20\x20 \b, 5.1 surround >>>>>>>&0 default x \b, 6 channels >>>>>>&8 ubeshort >6 \b, %u channels # v1 / sound property chunk / sample rate chunk >>>>>&0 search/0xff FS\x20\x20 >>>>>>&0 string x \b, >>>>>>&8 ubelong%44100 0 >>>>>>>&-4 ubelong/44100 x "DSD %u" >>>>>>>&-4 ubelong x %u Hz # v1 / sound property chunk / compression type chunk >>>>>&0 search/0xff CMPR >>>>>>&8 string DSD\x20 \b, no compression >>>>>>&8 string DST\x20 \b, DST compression >>>>>>&8 default x \b, unknown compression # v1 / quest for metadata >>>&0 string x # v1 / quest for metadata / edited master information chunk >>>>&0 search DIIN >>>>>&0 ubequad >0 \b, "edited master" metadata # v1 / quest for metadata / ID3 chunk ( defacto standard ) >>>>&0 search ID3\x20 >>>>>&8 string ID3 \b, ID3 version 2 >>>>>&0 byte x \b.%u >>>>>&1 byte x \b.%u # v1 / quest for metadata / failure ( possibly due to -P bytes=... being too low ) >>>>&0 default x \b, ID3 missing (or unreachable) # version > 1 or 0 >>&0 default x \b, unknown version # Sony DSF audio format (Direct Stream Digital Stream File) # Used for lossless digital storage of songs produced as DSD audio # Portable analog of a track stored on a Super Audio CD (SACD) # https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf # From: Toni Ruottu 0 string DSD\x20 DSF audio bitstream data !:mime audio/x-dsf !:ext dsf # format chunk >28 string fmt\x20 # version 1 >>&8 ulelong 1 # v1 / sampling resolution ( 1 bit PDM only ) # NOTE: the spec incorrectly uses "bits per sample" instead of "bits per byte" >>>&0 string x \b, 1 bit # v1 / channel configuration >>>>&4 ulelong 1 \b, mono >>>>&4 ulelong 2 \b, stereo >>>>&4 ulelong 3 \b, 3.0 stereo >>>>&4 ulelong 4 \b, 4.0 surround >>>>&4 ulelong 5 \b, 3.1 stereo >>>>&4 ulelong 6 \b, 5.0 surround >>>>&4 ulelong 7 \b, 5.1 surround >>>>&0 default x >>>>>&4 ulelong x \b, %u channels # v1 / sample rate chunk >>>>&0 string x \b, >>>>&12 ulelong%44100 0 >>>>>&-4 ulelong/44100 x "DSD %u" >>>>&12 ulelong x %u Hz # v1 / compression >>>>&0 string x >>>>>&0 ulelong 0 \b, no compression >>>>>&0 default x \b, unknown compression # v1 / embedded ID3v2 metadata >>>0 string x \b, ID3 >>>>20 ulequad !0 >>>>>(20.q) string ID3 version 2 >>>>>>&0 byte x \b.%u >>>>>>&1 byte x \b.%u # unable to verify ID3 ( possibly due to -P bytes=... being too low ) >>>>>&0 default x unreachable >>>>&0 default x missing # version > 1 or 0 >>&0 default x \b, unknown version # https://moddingwiki.shikadi.net/wiki/ROL_Format 4 string \\roll\\default AdLib Visual Composer ROL file >0 leshort x \b, version %d. >2 leshort x \b%d >44 leshort x \b, tickBeat %d >46 leshort x \b, beatMeasure %d >48 leshort x \b, scaleY %d >50 leshort x \b, scaleX %d >52 byte 0 \b, percussive >52 byte 1 \b, melodic file-5.46/magic/Magdir/avm000664 023540 023540 00000002320 14015050424 017112 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: avm,v 1.1 2020/08/28 20:37:58 christos Exp $ # avm: file(1) magic for avm files; this is not use # Summary: FRITZ!Box router configuration backup # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Fritz!Box # Reference: http://www.mengelke.de/Projekte/FritzBoxTools2 # Note: only tested with models 4040 and 6490 Cable (lgi) 0 string ****\ FRITZ!Box\ FRITZ!Box configuration backup #!:mime text/plain !:mime application/x-avm-export !:ext export # router model name like "4040" , "6490 Cable (lgi)" followed by " CONFIGURATION EXPORT" >15 string x of %-.4s # on 2nd line hashed password #>41 search/54 Password= \b, password # on 3rd line firmware version like: 141.06.24 141.06.50 141.07.10 ... 155.06.83 >41 search/172 FirmwareVersion= \b, firmware version >>&0 string x %s # on 5th line oem like: avme lgi >41 search/285 OEM= \b, oem >>&0 string x %s # on 7th line language like: de en >41 search/305 Language= \b, language >>&0 string x %s # on 10th line cfg file name like: /var/tmp.cfg >41 search/349 tmp.cfg # on 11th line date inside c-comment like: Thu Jun 4 22:25:19 2015 >>&4 string x \b, %s # file-5.46/magic/Magdir/basis000664 023540 023540 00000001073 14015050424 017434 0ustar00christoschristos000000 000000 #---------------------------------------------------------------- # $File: basis,v 1.5 2019/04/19 00:42:27 christos Exp $ # basis: file(1) magic for BBx/Pro5-files # Oliver Dammer 2005/11/07 # https://www.basis.com business-basic-files. # 0 string \074\074bbx\076\076 BBx >7 string \000 indexed file >7 string \001 serial file >7 string \002 keyed file >>13 short 0 (sort) >7 string \004 program >>18 byte x (LEVEL %d) >>>23 string >\000 psaved >7 string \006 mkeyed file >>13 short 0 (sort) >>8 string \000 (mkey) file-5.46/magic/Magdir/beetle000664 023540 023540 00000000441 14015050424 017571 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: beetle,v 1.2 2018/02/05 23:42:17 rrt Exp $ # beetle: file(1) magic for Beetle VM object files # https://github.com/rrthomas/beetle/ # Beetle object module 0 string BEETLE\000 Beetle VM object file file-5.46/magic/Magdir/ber000664 023540 023540 00000004523 14700541414 017113 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: ber,v 1.3 2024/09/01 13:49:15 christos Exp $ # ber: file(1) magic for several BER formats used in the mobile # telecommunications industry (Georg Sauthoff) # The file formats are standardized by the GSMA (GSM association). # They are specified via ASN.1 schemas and some prose. Basic encoding # rules (BER) is the used encoding. The formats are used for exchanging # call data records (CDRs) between mobile operators and associated # parties for roaming clearing purposes and fraud detection. # The magic file covers: # - TAP files (TD.57) - CDR batches and notifications # - RAP files (TD.32) - return batches and acknowledgements # - NRT files (TD.35) - CDR batches for 'near real time' processing # # TAP 3 Files # TAP -> Transferred Account Procedure # cf. https://www.gsma.com/newsroom/wp-content/uploads/TD.57-v32.31.pdf # TransferBatch short tag 0 byte 0x61 # BatchControlInfo short tag >&1 search/b5 \x64 # Sender long tag #TAP 3.x (BER encoded) >>&1 search/b8 \x5f\x81\x44 # 3 block >>>&64 search/b64 \x5f\x81\x49\x01\x03\x5f\x81\x3d\x01 >>>>&0 byte x TAP 3.%d Batch (TD.57, Transferred Account) # Notification short tag 0 byte 0x62 # Sender long tag >2 search/b8 \x5f\x81\x44 # 3 block >>&64 search/b64 \x5f\x81\x49\x01\x03\x5f\x81\x3d\x01 >>>&0 byte x TAP 3.%d Notification (TD.57, Transferred Account) # NRT Files # NRT a.k.a. NRTRDE # 2 block >&1 search/b8 \x5f\x29\x01\x02\x5f\x25\x01 >>&0 byte x NRT 2.%d (TD.35, Near Real Time Roaming Data Exchange) # RAP Files # cf. https://www.gsma.com/newsroom/wp-content/uploads/TD.32-v6.11.pdf # Long ReturnBatch tag 0 string \x7f\x84\x16 # Long RapBatchControlInfo tag >&1 search/b8 \x7f\x84\x19 # 3 block >>&64 search/b64 \x5f\x81\x49\x01\x03\x5f\x81\x3d\x01 # 1 block >>>&1 string/b \x5f\x84\x20\x01\x01\x5f\x84\x1f\x01 >>>>&0 byte x RAP 1.%d Batch (TD.32, Returned Account Procedure), >>>&0 byte x TAP 3.%d # Long Acknowledgement tag 0 string \x7f\x84\x17 # Long Sender tag >&1 search/b5 \x5f\x81\x44 RAP Acknowledgement (TD.32, Returned Account Procedure) file-5.46/magic/Magdir/bflt000664 023540 023540 00000000636 14015050424 017266 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: bflt,v 1.5 2014/04/30 21:41:02 christos Exp $ # bFLT: file(1) magic for BFLT uclinux binary files # # From Philippe De Muyter # 0 string bFLT BFLT executable >4 belong x - version %d >4 belong 4 >>36 belong&0x1 0x1 ram >>36 belong&0x2 0x2 gotpic >>36 belong&0x4 0x4 gzip >>36 belong&0x8 0x8 gzdata file-5.46/magic/Magdir/bhl000664 023540 023540 00000000525 14015050424 017101 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: bhl,v 1.1 2017/06/11 22:20:02 christos Exp $ # BlockHashLoc # ext: bhl # Marco Pontello marcopon@gmail.com # reference: https://github.com/MarcoPon/BlockHashLoc 0 string BlockHashLoc\x1a BlockHashLoc recovery info, >13 byte x version %d !:ext bhl file-5.46/magic/Magdir/bioinformatics000664 023540 023540 00000017003 14015050424 021343 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: bioinformatics,v 1.5 2019/04/19 00:42:27 christos Exp $ # bioinfomatics: file(1) magic for Bioinfomatics file formats ############################################################################### # BGZF (Blocked GNU Zip Format) - gzip compatible, but also indexable # used by SAMtools bgzip/tabix (http://samtools.sourceforge.net/tabix.shtml) ############################################################################### 0 string \037\213 >3 byte &0x04 >>12 string BC >>>14 leshort &0x02 Blocked GNU Zip Format (BGZF; gzip compatible) >>>>16 leshort x \b, block length %d !:mime application/x-gzip ############################################################################### # Tabix index file # used by SAMtools bgzip/tabix (http://samtools.sourceforge.net/tabix.shtml) ############################################################################### 0 string TBI\1 SAMtools TBI (Tabix index format) >0x04 lelong =1 \b, with %d reference sequence >0x04 lelong >1 \b, with %d reference sequences >0x08 lelong &0x10000 \b, using half-closed-half-open coordinates (BED style) >0x08 lelong ^0x10000 >>0x08 lelong =0 \b, using closed and one based coordinates (GFF style) >>0x08 lelong =1 \b, using SAM format >>0x08 lelong =2 \b, using VCF format >0x0c lelong x \b, sequence name column: %d >0x10 lelong x \b, region start column: %d >0x08 lelong =0 >>0x14 lelong x \b, region end column: %d >0x18 byte x \b, comment character: %c >0x1c lelong x \b, skip line count: %d ############################################################################### # BAM (Binary Sequence Alignment/Map format) # used by SAMtools (http://samtools.sourceforge.net/SAM1.pdf) # data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it ############################################################################### 0 string BAM\1 SAMtools BAM (Binary Sequence Alignment/Map) >0x04 lelong >0 >>&0x00 regex =^[@]HD\t.*VN: \b, with SAM header >>>&0 regex =[0-9.]+ \b version %s >>&(0x04) lelong >0 \b, with %d reference sequences ############################################################################### # BAI (BAM indexing format) # used by SAMtools (http://samtools.sourceforge.net/SAM1.pdf) ############################################################################### 0 string BAI\1 SAMtools BAI (BAM indexing format) >0x04 lelong >0 \b, with %d reference sequences ############################################################################### # CRAM (Binary Sequence Alignment/Map format) ############################################################################### 0 string CRAM CRAM >0x04 byte >-1 version %d. >0x05 byte >-1 \b%d >0x06 string >\0 (identified as %s) ############################################################################### # BCF (Binary Call Format), version 1 # used by SAMtools & VCFtools (http://vcftools.sourceforge.net/bcf.pdf) # data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it ############################################################################### 0 string BCF\4 # length of seqnm data in bytes is positive >&0x00 lelong >0 # length of smpl data in bytes is positive >>&(&-0x04) lelong >0 SAMtools BCF (Binary Call Format) # length of meta in bytes >>>&(&-0x04) lelong >0 # have meta text string >>>>&0x00 search ##samtoolsVersion= >>>>>&0x00 string x \b, generated by SAMtools version %s ############################################################################### # BCF (Binary Call Format), version 2.1 # used by SAMtools (https://samtools.github.io/hts-specs/BCFv2_qref.pdf) # data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it ############################################################################### 0 string BCF\2\1 Binary Call Format (BCF) version 2.1 # length of header text >&0x00 lelong >0 # have header string >>&0x00 search ##samtoolsVersion= >>>&0x00 string x \b, generated by SAMtools version %s ############################################################################### # BCF (Binary Call Format), version 2.2 # used by SAMtools (https://samtools.github.io/hts-specs/BCFv2_qref.pdf) # data is normally present only within compressed BGZF blocks (CDATA), so use file -z to examine it ############################################################################### 0 string BCF\2\2 Binary Call Format (BCF) version 2.2 # length of header text >&0x00 lelong >0 # have header string >>&0x00 search ##samtoolsVersion= >>>&0x00 string x \b, generated by SAMtools version %s ############################################################################### # VCF (Variant Call Format) # used by VCFtools (http://vcftools.sourceforge.net/) ############################################################################### 0 search ##fileformat=VCFv Variant Call Format (VCF) >&0 string x \b version %s ############################################################################### # FASTQ # used by MAQ (http://maq.sourceforge.net/fastq.shtml) ############################################################################### # XXX Broken? # @ #0 regex =^@[A-Za-z0-9_.:-]+\?\n # #>&1 regex =^[A-Za-z\n.~]++ # +[] #>>&1 regex =^[A-Za-z0-9_.:-]*\?\n # #>>>&1 regex =^[!-~\n]+\n FASTQ ############################################################################### # FASTA # used by FASTA (https://fasta.bioch.virginia.edu/fasta_www2/fasta_guide.pdf) ############################################################################### #0 byte 0x3e # q>0 regex =^[>][!-~\t\ ]+$ # Amino Acid codes: [A-IK-Z*-]+ #>>1 regex !=[!-'Jj;:=?@^`|~\\] FASTA # IUPAC codes/gaps: [ACGTURYKMSWBDHVNX-]+ # not in IUPAC codes/gaps: [EFIJLOPQZ] #>>>1 regex !=[EFIJLOPQZefijlopqz] \b, with IUPAC nucleotide codes #>>>1 regex =^[EFIJLOPQZefijlopqz]+$ \b, with Amino Acid codes ############################################################################### # SAM (Sequence Alignment/Map format) # used by SAMtools (http://samtools.sourceforge.net/SAM1.pdf) ############################################################################### # Short-cut version to recognise SAM files with (optional) header at beginning ############################################################################### 0 string @HD\t >4 search VN: Sequence Alignment/Map (SAM), with header >>&0 regex [0-9.]+ \b version %s ############################################################################### # Longer version to recognise SAM alignment lines using (many) regexes ############################################################################### # SAM Alignment QNAME 0 regex =^[!-?A-~]{1,255}(\t[^\t]+){11} # SAM Alignment FLAG >0 regex =^([^\t]+\t){1}[0-9]{1,5}\t # SAM Alignment RNAME >>0 regex =^([^\t]+\t){2}\\*|[^*=]*\t # SAM Alignment POS >>>0 regex =^([^\t]+\t){3}[0-9]{1,9}\t # SAM Alignment MAPQ >>>>0 regex =^([^\t]+\t){4}[0-9]{1,3}\t # SAM Alignment CIGAR >>>>>0 regex =\t(\\*|([0-9]+[MIDNSHPX=])+)\t # SAM Alignment RNEXT >>>>>>0 regex =\t(\\*|=|[!-()+->?-~][!-~]*)\t # SAM Alignment PNEXT >>>>>>>0 regex =^([^\t]+\t){7}[0-9]{1,9}\t # SAM Alignment TLEN >>>>>>>>0 regex =\t[+-]{0,1}[0-9]{1,9}\t.*\t # SAM Alignment SEQ >>>>>>>>>0 regex =^([^\t]+\t){9}(\\*|[A-Za-z=.]+)\t # SAM Alignment QUAL >>>>>>>>>>0 regex =^([^\t]+\t){10}[!-~]+ Sequence Alignment/Map (SAM) >>>>>>>>>>>0 regex =^[@]HD\t.*VN: \b, with header >>>>>>>>>>>>&0 regex =[0-9.]+ \b version %s file-5.46/magic/Magdir/biosig000664 023540 023540 00000011451 14634600770 017624 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: biosig,v 1.4 2024/06/10 23:09:52 christos Exp $ # file(1) magic for biomedical signal file formats # Copyright (C) 2018 Alois Schloegl # # The list has been derived from biosig projects # http://biosig.sourceforge.net # https://pub.ist.ac.at/~schloegl/matlab/eeg/ # https://pub.ist.ac.at/~schloegl/biosig/TESTED # ############################################################################## # 0 string ABF\x20 Biosig/Axon Binary format !:mime biosig/abf2 0 string ABF2\0\0 Biosig/Axon Binary format !:mime biosig/abf2 # 0 string ATES\x20MEDICA\x20SOFT.\x20EEG\x20for\x20Windows Biosig/ATES MEDICA SOFT. EEG for Windows !:mime biosig/ates # 0 string ATF\x09 Biosig/Axon Text format !:mime biosig/atf # 0 string ADU1 Biosig/Axona file format !:mime biosig/axona 0 string ADU2 Biosig/Axona file format !:mime biosig/axona # 0 string ALPHA-TRACE-MEDICAL Biosig/alpha trace !:mime biosig/alpha # 0 string AxGr Biosig/AXG 0 string axgx Biosig/AXG !:mime biosig/axg # 0 string HeaderLen= Biosig/BCI2000 0 string BCI2000V Biosig/BCI2000 !:mime biosig/bci2000 # ### Specification: https://www.biosemi.com/faq/file_format.htm 0 string \xffBIOSEMI Biosig/Biosemi data format !:mime biosig/bdf # 0 string Brain\x20Vision\x20Data\x20Exchange\x20Header\x20File Biosig/Brainvision data file 0 string Brain\x20Vision\x20V-Amp\x20Data\x20Header\x20File\x20Version Biosig/Brainvision V-Amp file 0 string Brain\x20Vision\x20Data\x20Exchange\x20Marker\x20File,\x20Version Biosig/Brainvision Marker file !:mime biosig/brainvision # 0 string CEDFILE Biosig/CFS: Cambridge Electronic devices File format !:mime biosig/ced # ### Specification: https://www.edfplus.info/specs/index.html 0 string 0\x20\x20\x20\x20\x20\x20\x20 Biosig/EDF: European Data format !:mime biosig/edf # ### Specifications: https://arxiv.org/abs/cs/0608052 0 string GDF Biosig/GDF: General data format for biosignals !:mime biosig/gdf # 0 string DATA\0\0\0\0 Biosig/Heka Patchmaster 0 string DAT1\0\0\0\0 Biosig/Heka Patchmaster 0 string DAT2\0\0\0\0 Biosig/Heka Patchmaster !:mime biosig/heka # 0 string (C)\x20CED\x2087 Biosig/CED SMR !:mime biosig/ced-smr # 0 string CFWB\1\0\0\0 Biosig/CFWB !:mime biosig/cfwb # 0 string DEMG Biosig/DEMG !:mime biosig/demg # 0 string EBS\x94\x0a\x13\x1a\x0d Biosig/EBS !:mime biosig/ebs # 0 string Embla\x20data\x20file Biosig/Embla !:mime biosig/embla # 0 string Header\r\nFile Version Biosig/ETG4000 !:mime biosig/etg4000 # 0 string GALILEO\x20EEG\x20TRACE\x20FILE Biosig/Galileo !:mime biosig/galileo # 0 string IGOR Biosig/IgorPro ITX file !:mime biosig/igorpro # # Specification: http://www.ampsmedical.com/uploads/2017-12-7/The_ISHNE_Format.pdf 0 string ISHNE1.0 Biosig/ISHNE !:mime biosig/ishne # # CEN/ISO 11073/22077 series, http://www.mfer.org/en/document.htm 0 string @\x20\x20MFER\x20 Biosig/MFER 0 string @\x20MFR\x20 Biosig/MFER !:mime biosig/mfer # 0 string NEURALEV Biosig/NEV 0 string N.EV.\0 Biosig/NEV !:mime biosig/nev # 0 string NEX1 Biosig/NEX !:mime biosig/nex1 # 0 string PLEX Biosig/Plexon v1.0 10 string PLEXON Biosig/Plexon v2.0 !:mime biosig/plexon # 0 string \x02\x27\x91\xC6 Biosig/RHD2000: Intan RHD2000 format # # Specification: CEN 1064:2005/ISO 11073:91064 16 string SCPECG\0\0 Biosig/SCP-ECG format CEN 1064:2005/ISO 11073:91064 !:mime biosig/scpecg # 0 string IAvSFo Biosig/SIGIF !:mime biosig/sigif # 0 string POLY\x20SAMPLE\x20FILEversion\x20 Biosig/TMS32 !:mime biosig/tms32 # 0 string FileId=TMSi\x20PortiLab\x20sample\x20log\x20file\x0a\x0dVersion= Biosig/TMSiLOG !:mime biosig/tmsilog # 4 string Synergy\0\48\49\50\46\48\48\51\46\48\48\48\46\48\48\48\0\28\0\0\0\2\0\0\0 >63 string CRawDataElement >>85 string CRawDataBuffer Biosig/SYNERGY !:mime biosig/synergy # 4 string \40\0\4\1\44\1\102\2\146\3\44\0\190\3 Biosig/UNIPRO !:mime biosig/unipro # 0 string VER=9\r\nCTIME= Biosig/WCP !:mime biosig/wcp # 0 string \xAF\xFE\xDA\xDA Biosig/Walter Graphtek 0 string \xDA\xDA\xFE\xAF Biosig/Walter Graphtek 0 string \x55\x55\xFE\xAF Biosig/Walter Graphtek !:mime biosig/walter-graphtek # 0 string V3.0\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 >32 string [PatInfo] Biosig/Sigma !:mime biosig/sigma # 0 string \067\069\078\013\010\0x1a\04\0x84 Biosig/File exchange format (FEF) !:mime biosig/fef 0 string \67\69\78\0x13\0x10\0x1a\4\0x84 Biosig/File exchange format (FEF) !:mime biosig/fef # 0 string \0\0\0\x64\0\0\0\x1f\0\0\0\x14\0\0\0\0\0\1 >36 string \0\0\0\x65\0\0\0\3\0\0\0\4\0\0 >>56 string \0\0\0\x6a\0\0\0\3\0\0\0\4\0\0\0\0\xff\xff\xff\xff\0\0 Biosig/FIFF !:mime biosig/fiff # file-5.46/magic/Magdir/blackberry000664 023540 023540 00000000432 14015050424 020451 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: blackberry,v 1.2 2017/03/17 21:35:28 christos Exp $ # blackberry: file(1) magic for BlackBerry file formats # 5 belong 0 >8 belong 010010010 BlackBerry RIM ETP file >>22 string x \b for %s file-5.46/magic/Magdir/blcr000664 023540 023540 00000001352 14015050424 017255 0ustar00christoschristos000000 000000 # Berkeley Lab Checkpoint Restart (BLCR) checkpoint context files # https://ftg.lbl.gov/checkpoint 0 string C\0\0\0R\0\0\0 BLCR >16 lelong 1 x86 >16 lelong 3 alpha >16 lelong 5 x86-64 >16 lelong 7 ARM >8 lelong x context data (little endian, version %d) # Uncomment the following only of your "file" program supports "search" #>0 search/1024 VMA\06 for kernel #>>&1 byte x %d. #>>&2 byte x %d. #>>&3 byte x %d 0 string \0\0\0C\0\0\0R BLCR >16 belong 2 SPARC >16 belong 4 ppc >16 belong 6 ppc64 >16 belong 7 ARMEB >16 belong 8 SPARC64 >8 belong x context data (big endian, version %d) # Uncomment the following only of your "file" program supports "search" #>0 search/1024 VMA\06 for kernel #>>&1 byte x %d. #>>&2 byte x \b%d. #>>&3 byte x \b%d file-5.46/magic/Magdir/blender000664 023540 023540 00000003202 14350626415 017755 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: blender,v 1.9 2022/12/21 15:53:27 christos Exp $ # blender: file(1) magic for Blender 3D related files # # Native format rule v1.2. For questions use the developers list # https://lists.blender.org/mailman/listinfo/bf-committers # GLOB chunk was moved near start and provides subversion info since 2.42 # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/BLEND # http://www.blender.org/ # Reference: http://mark0.net/download/triddefs_xml.7z/defs/b/blend.trid.xml # http://formats.kaitai.io/blender_blend/index.html # Note: called "Blender 3D data" by TrID # and gzip compressed variant handled by ./compress 0 string =BLENDER Blender3D, #!:mime application/octet-stream !:mime application/x-blender !:ext blend # no sample found with extension blender #!:ext blend/blender >7 string =_ saved as 32-bits >>8 string =v little endian >>>9 byte x with version %c. >>>10 byte x \b%c >>>11 byte x \b%c >>>0x40 string =GLOB \b. >>>>0x58 leshort x \b%.4d >>8 string =V big endian >>>9 byte x with version %c. >>>10 byte x \b%c >>>11 byte x \b%c >>>0x40 string =GLOB \b. >>>>0x58 beshort x \b%.4d >7 string =- saved as 64-bits >>8 string =v little endian >>9 byte x with version %c. >>10 byte x \b%c >>11 byte x \b%c >>0x44 string =GLOB \b. >>>0x60 leshort x \b%.4d >>8 string =V big endian >>>9 byte x with version %c. >>>10 byte x \b%c >>>11 byte x \b%c >>>0x44 string =GLOB \b. >>>>0x60 beshort x \b%.4d # Scripts that run in the embedded Python interpreter 0 string #!BPY Blender3D BPython script file-5.46/magic/Magdir/blit000664 023540 023540 00000002152 14070550725 017276 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: blit,v 1.9 2021/07/03 14:01:46 christos Exp $ # blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine # # Note that this 0407 conflicts with several other a.out formats... # # XXX - should this be redone with "be" and "le", so that it works on # little-endian machines as well? If so, what's the deal with # "VAX-order" and "VAX-order2"? # #0 long 0407 68K Blit (standalone) executable #0 short 0407 VAX-order2 68K Blit (standalone) executable 0 short 03401 VAX-order 68K Blit (standalone) executable 0 long 0406 68k Blit mpx/mux executable 0 short 0406 VAX-order2 68k Blit mpx/mux executable # GRR: line below is too general as it matches also TTComp archive, ASCII, 4K handled by ./archive 0 short 03001 VAX-order 68k Blit mpx/mux executable # TODO: # skip TTComp archive, ASCII, 4K by looking for executable keyword like main #>0 search/5536 main\0 VAX-order 68k Blit mpx/mux executable # Need more values for WE32 DMD executables. # Note that 0520 is the same as COFF #0 short 0520 tty630 layers executable file-5.46/magic/Magdir/bm000664 023540 023540 00000000575 14030734217 016745 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: bm,v 1.2 2021/03/14 16:56:51 christos Exp $ # bm: file(1) magic for "Birtual Machine", cf. https://github.com/tsoding/bm 0 string bm\001\244 Birtual Machine >4 leshort x \b, version %d >6 lelong x \b, program size %u >14 lelong x \b, memory size %u >22 lelong x \b, memory capacity %u file-5.46/magic/Magdir/bout000664 023540 023540 00000000535 14015050424 017306 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: bout,v 1.5 2009/09/19 16:28:08 christos Exp $ # i80960 b.out objects and archives # 0 long 0x10d i960 b.out relocatable object >16 long >0 not stripped # # b.out archive (hp-rt on i960) 0 string =! b.out archive >8 string __.SYMDEF random library file-5.46/magic/Magdir/bsdi000664 023540 023540 00000002507 14604537143 017273 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: bsdi,v 1.9 2024/03/31 15:06:56 christos Exp $ # bsdi: file(1) magic for BSD/OS (from BSDI) objects # Some object/executable formats use the same magic numbers as are used # in other OSes; those are handled by entries in aout. # 0 lelong 0314 i386 compact demand paged pure executable >16 lelong >0 not stripped >32 byte 0x6a (uses shared libs) # Update: Joerg Jenderek # same as in SunOS 4.x, except for static shared libraries # Note: was also called "a.out SunOS SPARC demand paged" by ./sun v 1.28 0 belong&077777777 0600413 SPARC demand paged >0 byte &0x80 >>20 belong <4096 shared library >>20 belong =4096 dynamically linked executable >>20 belong >4096 dynamically linked executable #!:mime application/x-foo-executable # typically no file name suffix for executables !:ext / >0 byte ^0x80 executable >16 belong >0 not stripped >36 belong 0xb4100001 (uses shared libs) 0 belong&077777777 0600410 SPARC pure >0 byte &0x80 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped >36 belong 0xb4100001 (uses shared libs) 0 belong&077777777 0600407 SPARC >0 byte &0x80 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped >36 belong 0xb4100001 (uses shared libs) file-5.46/magic/Magdir/bsi000664 023540 023540 00000000507 14030734217 017117 0ustar00christoschristos000000 000000 # Chiasmus is an encryption standard developed by the German Federal # Office for Information Security (Bundesamt fuer Sicherheit in der # Informationstechnik). # https://www.bsi.bund.de/EN/Topics/OtherTopics/Chiasmus/Chiasmus_node.html 0 string XIA1\r Chiasmus Encrypted data !:ext xia 0 string XIS Chiasmus key !:ext xis file-5.46/magic/Magdir/btsnoop000664 023540 023540 00000000655 14015050424 020024 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: btsnoop,v 1.5 2009/09/19 16:28:08 christos Exp $ # BTSnoop: file(1) magic for BTSnoop files # # From 0 string btsnoop\0 BTSnoop >8 belong x version %d, >12 belong 1001 Unencapsulated HCI >12 belong 1002 HCI UART (H4) >12 belong 1003 HCI BCSP >12 belong 1004 HCI Serial (H5) >>12 belong x type %d file-5.46/magic/Magdir/burp000664 023540 023540 00000000460 14260620035 017305 0ustar00christoschristos000000 000000 #------------------------------------------------------------ # $File: burp,v 1.1 2022/07/04 17:15:09 christos Exp $ # Burp file, I don't know the version #------------------------------------------------------------ # From wof (wof@stachelkaktus.net) 0 bequad 0x6685828000000001 Burp project save file file-5.46/magic/Magdir/bytecode000664 023540 023540 00000002466 14403142614 020144 0ustar00christoschristos000000 000000 #------------------------------------------------------------ # $File: bytecode,v 1.5 2023/02/20 16:25:05 christos Exp $ # magic for various bytecodes # From: Mikhail Gusarov # NekoVM (https://nekovm.org/) bytecode 0 string NEKO NekoVM bytecode >4 lelong x (%d global symbols, >8 lelong x %d global fields, >12 lelong x %d bytecode ops) !:mime application/x-nekovm-bytecode # https://www.iana.org/assignments/media-types/application/vnd.resilient.logic # From: Benedikt Muessig 0 belong 0x07524c4d Resilient Logic bytecode !:mime application/vnd.resilient.logic >4 byte/16 x \b, version %d >4 byte&0x0f x \b.%d # Guile file magic from # https://www.gnu.org/s/guile/ # https://git.savannah.gnu.org/gitweb/?p=guile.git;f=libguile/_scm.h;hb=HEAD#l250 0 string GOOF---- Guile Object >8 string LE \b, little endian >8 string BE \b, big endian >11 string 4 \b, 32bit >11 string 8 \b, 64bit >13 regex .\\.. \b, bytecode v%s # Racket file magic # From: Haelwenn (lanodan) Monnier # https://racket-lang.org/ # https://github.com/racket/racket/blob/master/racket/src/expander/compile/write-linklet.rkt 0 string #~ >&0 pstring x >>&0 pstring racket >>>0 string #~ Racket bytecode >>>>&0 pstring x (version %s) file-5.46/magic/Magdir/c-lang000664 023540 023540 00000006744 14444055561 017523 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: c-lang,v 1.32 2023/06/16 19:57:19 christos Exp $ # c-lang: file(1) magic for C and related languages programs # # The strength is to beat standard HTML # BCPL 0 search/8192 "libhdr" BCPL source text !:mime text/x-bcpl 0 search/8192 "LIBHDR" BCPL source text !:mime text/x-bcpl # C # Check for class if include is found, otherwise class is beaten by include because of lowered strength 0 search/8192 #include >0 regex \^#include C >>0 regex \^class[[:space:]]+ >>>&0 regex \\{[\.\*]\\}(;)?$ \b++ >>&0 clear x source text !:strength + 15 !:mime text/x-c 0 search/8192 pragma >0 regex \^#[[:space:]]*pragma C source text !:mime text/x-c 0 search/8192 endif >0 regex \^#[[:space:]]*(if\|ifn)def >>&0 regex \^#[[:space:]]*endif$ C source text !:mime text/x-c 0 search/8192 define >0 regex \^#[[:space:]]*(if\|ifn)def >>&0 regex \^#[[:space:]]*define C source text !:mime text/x-c 0 search/8192 char >0 regex \^[[:space:]]*char(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$ C source text !:mime text/x-c 0 search/8192 double >0 regex \^[[:space:]]*double(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$ C source text !:mime text/x-c 0 search/8192 extern >0 regex \^[[:space:]]*extern[[:space:]]+ C source text !:mime text/x-c 0 search/8192 float >0 regex \^[[:space:]]*float(\ \\*|\\*)(.+)(=.*)?;[[:space:]]*$ C source text !:mime text/x-c 0 search/8192 struct >0 regex \^struct[[:space:]]+ C source text !:mime text/x-c 0 search/8192 union >0 regex \^union[[:space:]]+ C source text !:mime text/x-c 0 search/8192 main( >&0 search/64 String Java source text !:mime text/x-java >&0 default x >>&0 regex \\)[[:space:]]*\\{ C source text !:mime text/x-c # C++ # The strength of these rules is increased so they beat the C rules above 0 search/8192 namespace >0 regex \^namespace[[:space:]]+[_[:alpha:]]{1,30}[[:space:]]*\\{ C++ source text !:strength + 30 !:mime text/x-c++ # using namespace [namespace] or using std::[lib] 0 search/8192 using >0 regex \^using[[:space:]]+(namespace\ )?std(::)?[[:alpha:]]*[[:space:]]*; C++ source text !:strength + 30 !:mime text/x-c++ 0 search/8192 template >0 regex \^[[:space:]]*template[[:space:]]*<.*>[[:space:]]*$ C++ source text !:strength + 30 !:mime text/x-c++ 0 search/8192 virtual >0 regex \^[[:space:]]*virtual[[:space:]]+.*[};][[:space:]]*$ C++ source text !:strength + 30 !:mime text/x-c++ # But class alone is reduced to avoid beating php (Jens Schleusener) 0 search/8192 class >0 regex \^[[:space:]]*class[[:space:]]+[[:digit:][:alpha:]:_]+[[:space:]]*\\{(.*[\n]*)*\\}(;)?$ C++ source text !:strength + 13 !:mime text/x-c++ 0 search/8192 public >0 regex \^[[:space:]]*public: C++ source text !:strength + 30 !:mime text/x-c++ 0 search/8192 private >0 regex \^[[:space:]]*private: C++ source text !:strength + 30 !:mime text/x-c++ 0 search/8192 protected >0 regex \^[[:space:]]*protected: C++ source text !:strength + 30 !:mime text/x-c++ # Objective-C 0 search/8192 #import >0 regex \^#import[[:space:]]+["<] Objective-C source text !:strength + 25 !:mime text/x-objective-c # From: Mikhail Teterin 0 string cscope cscope reference data >7 string x version %.2s # We skip the path here, because it is often long (so file will # truncate it) and mostly redundant. # The inverted index functionality was added some time between # versions 11 and 15, so look for -q if version is above 14: >7 string >14 >>10 search/100 \ -q\ with inverted index >10 search/100 \ -c\ text (non-compressed) file-5.46/magic/Magdir/c64000664 023540 023540 00000065357 14604537143 016762 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: c64,v 1.16 2024/03/07 22:30:21 christos Exp $ # c64: file(1) magic for various commodore 64 related files # # From: Dirk Jagdmann 0x16500 belong 0x12014100 D64 Image 0x16500 belong 0x12014180 D71 Image 0x61800 belong 0x28034400 D81 Image 0 belong 0x43154164 X64 Image # C64 (and other CBM) cartridges # Extended by David Korth # Update: Joerg Jenderek # Reference: https://vice-emu.sourceforge.io/vice_17.html#SEC391 # http://ist.uwaterloo.ca/~schepers/formats/CRT.TTX # http://mark0.net/download/triddefs_xml.7z/defs/c/crt-c64.trid.xml # Note: called "C64 Cartridge image" by TrID and # "CRT C64 Cartridge Image Format" by DROID via PUID fmt/822 0 string C64\40CARTRIDGE # skip DROID fmt-822-signature-id-1179.crt with missing packet length >0x44 ubelong >0x10 >>0 use c64-crt # display Commodore 64 cartridge information 0 name c64-crt >0 string x Commodore 64 cartridge #!:mime application/octet-stream !:mime application/x-commodore-crt !:ext crt # http://mark0.net/download/triddefs_xml.7z/defs/c/car-ccs64.trid.xml #!:ext crt/car >0x20 ubyte 0 \b, >0x20 ubyte !0 # 32-byte null padded cartridge name like: "BUGS BUNNY" "CART64" "EasyFlash" "FINAL CARTRIDGE" "Magic Desk" "VICE CART" >>0x20 string/T x \b: "%.32s", # cartridge hardware type >0x16 beshort 0 # cartridge port EXROM line status >>0x18 beshort 0x0000 16 KB game >>0x18 beshort 0x0001 8 KB game >>0x18 beshort 0x0100 UltiMax mode >>0x18 beshort 0x0101 RAM/disabled >0x16 beshort 1 Action Replay >0x16 beshort 2 KCS Power Cartridge >0x16 beshort 3 Final Cartridge III >0x16 beshort 4 Simons' BASIC >0x16 beshort 5 Ocean type 1 >0x16 beshort 6 Expert Cartridge >0x16 beshort 7 Fun Play, Power Play >0x16 beshort 8 Super Games >0x16 beshort 9 Atomic Power >0x16 beshort 10 Epyx Fastload >0x16 beshort 11 Westermann Learning >0x16 beshort 12 Rex Utility >0x16 beshort 13 Final Cartridge I >0x16 beshort 14 Magic Formel >0x16 beshort 15 C64 Game System, System 3 >0x16 beshort 16 Warp Speed >0x16 beshort 17 Dinamic >0x16 beshort 18 Zaxxon / Super Zaxxon (Sega) >0x16 beshort 19 Magic Desk, Domark, HES Australia >0x16 beshort 20 Super Snapshot V5 >0x16 beshort 21 Comal-80 >0x16 beshort 22 Structured BASIC >0x16 beshort 23 Ross >0x16 beshort 24 Dela EP64 >0x16 beshort 25 Dela EP7x8 >0x16 beshort 26 Dela EP256 >0x16 beshort 27 Rex EP256 >0x16 beshort 28 Mikro Assembler >0x16 beshort 29 Final Cartridge Plus >0x16 beshort 30 Action Replay 4 >0x16 beshort 31 Stardos >0x16 beshort 32 EasyFlash >0x16 beshort 33 EasyFlash Xbank >0x16 beshort 34 Capture >0x16 beshort 35 Action Replay 3 >0x16 beshort 36 # cartridge Hardware Revision/Subtype (usually 0) (added in v1.01) >>0x1A ubyte 1 Nordic Replay >>0x1A ubyte !1 Retro Replay >0x16 beshort 37 MMC64 >0x16 beshort 38 MMC Replay >0x16 beshort 39 IDE64 >0x16 beshort 40 Super Snapshot V4 >0x16 beshort 41 IEEE-488 >0x16 beshort 42 Game Killer >0x16 beshort 43 Prophet64 >0x16 beshort 44 EXOS >0x16 beshort 45 Freeze Frame >0x16 beshort 46 Freeze Machine >0x16 beshort 47 Snapshot64 >0x16 beshort 48 Super Explode V5.0 >0x16 beshort 49 Magic Voice >0x16 beshort 50 Action Replay 2 >0x16 beshort 51 MACH 5 >0x16 beshort 52 Diashow-Maker >0x16 beshort 53 Pagefox >0x16 beshort 54 Kingsoft >0x16 beshort 55 Silverrock 128K Cartridge >0x16 beshort 56 Formel 64 >0x16 beshort 57 >>0x1A ubyte 1 Hucky >>0x1A ubyte !1 RGCD >0x16 beshort 58 RR-Net MK3 >0x16 beshort 59 EasyCalc >0x16 beshort 60 GMod2 >0x16 beshort 61 MAX Basic >0x16 beshort 62 GMod3 >0x16 beshort 63 ZIPP-CODE 48 >0x16 beshort 64 Blackbox V8 >0x16 beshort 65 Blackbox V3 >0x16 beshort 66 Blackbox V4 >0x16 beshort 67 REX RAM-Floppy >0x16 beshort 68 BIS-Plus >0x16 beshort 69 SD-BOX >0x16 beshort 70 MultiMAX >0x16 beshort 71 Blackbox V9 >0x16 beshort 72 Lt. Kernal Host Adaptor >0x16 beshort 73 RAMLink >0x16 beshort 74 H.E.R.O. >0x16 beshort 75 IEEE Flash! 64 >0x16 beshort 76 Turtle Graphics II >0x16 beshort 77 Freeze Frame MK2 >0x16 beshort 78 Partner 64 # cartridge hardware type: (0-78) >0x16 ubeshort >78 unknown type %#x # Cartridge Hardware Revision/Subtype (usually 0 added in v1.01) >>0x1A ubyte >0 revision %#x # padded with 3 space characters for CRT but for CCS64 Cartridge (*.CAR) maybe different according to TrID >14 ubeshort !0x2020 \b, at 14 %#x # file header length like: 20h (reported wrong) 40h (default and minimum) >0x10 ubelong !0x40 \b, header length %#x # cartridge version like: 1.0 1.1 (adds CRT sub type/hardware revision) 2.0 (introduces VIC20, PLUS4, C128, CBM2) >0x14 ubeshort !0x0100 >>0x14 ubyte x \b, version %u >>0x15 ubyte x \b.%u # cartridge content start with ROM signature which must be CHIP >0x40 ubelong !0x43484950 \b, invalid ROM signature >>0x40 string x "%0.4s" # total packet length (length of ROM image size and header combined) like: 2010h 4010h >0x44 ubelong x \b, packet length %#x 0 string C128\40CARTRIDGE Commodore 128 cartridge >0x20 ubyte 0 \b, >0x20 ubyte !0 >>0x20 string/T x \b: "%.32s", >0x16 beshort 0 generic cartridge >0x16 beshort 1 Warpspeed128 >>0x1A ubyte 1 \b, REU support >>0x1A ubyte 2 \b, REU support, with I/O and ROM banking 0 string CBM2\40CARTRIDGE Commodore CBM-II cartridge >0x20 ubyte !0 >>0x20 string/T x \b: "%.32s" 0 string VIC20\40CARTRIDGE Commodore VIC-20 cartridge >0x20 ubyte 0 \b, >0x20 ubyte !0 >>0x20 string/T x \b: "%.32s", >0x16 beshort 0 generic cartridge >0x16 beshort 1 Mega-Cart >0x16 beshort 2 Behr Bonz >0x16 beshort 3 Vic Flash Plugin >0x16 beshort 4 UltiMem >0x16 beshort 5 Final Expansion 0 string PLUS4\40CARTRIDGE Commodore 16/Plus4 cartridge >0x20 ubyte !0 >>0x20 string/T x \b: "%.32s" # DreamLoad archives see: # https://www.lemon64.com/forum/viewtopic.php?t=37415\ # &sid=494dc2ca91289e05dadf80a7f8a968fe (at the bottom). # https://www.c64-wiki.com/wiki/DreamLoad. # Example HVSC Commodore 64 music collection: # https://kohina.duckdns.org/HVSC/C64Music/10_Years_HVSC.dfi 0 byte 0 >1 string DREAMLOAD\40FILE\40ARCHIVE >>0x17 byte 0 DFI Image >>>0x1a leshort x version: %d. >>>0x18 leshort x \b%d >>>0x1c lelong x tracks: %d 0 string GCR-1541 GCR Image >8 byte x version: %i >9 byte x tracks: %i 9 string PSUR ARC archive (c64) 2 string -LH1- LHA archive (c64) 0 string C64File PC64 Emulator file >8 string >\0 "%s" 0 string C64Image PC64 Freezer Image 0 beshort 0x38CD C64 PCLink Image 0 string CBM\144\0\0 Power 64 C64 Emulator Snapshot 0 belong 0xFF424CFF WRAptor packer (c64) # URL: http://fileformats.archiveteam.org/wiki/T64 # Reference: http://ist.uwaterloo.ca/~schepers/formats/T64.TXT # https://vice-emu.sourceforge.io/vice_16.html#SEC394 # https://www.infinite-loop.at/Power64/Documentation/Power64-ReadMe/AE-File_Formats.html # http://mark0.net/download/triddefs_xml.7z/defs/e/emu-t64.trid.xml # Note: called "Commodore 64 Tape container" by TrID, "T64 Tape Image Format" by DROID via PUID fmt/820 and # "T64 tape Image" by ./c64,v 1.14 # verified by command like `deark -m t64 -l -d2 Caitan_the_Demo.t64` and # `cbmconvert -v2 -t -D4 ironmanoffroad.d64 ironmanoffroad.t64` # 32 byte signature starting like C64S\x20tape\x20file # C64\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 # C64S\x20tape\x20image\x20file\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0 0 string/b C64 # skip raw Commodore TAPe by check for unsed areas (\0 filled) and valid low (40h+m*20h; m=0-FFffh) offset >0x46 ubequad&0xFFff1F00C0ffFFff 0 Commodore Tape image #!:mime application/octet-stream #!:mime application/x-commodore-tape !:ext t64 # version like: 0100h (examples found) 0101h 0200h (no examples) >>32 leshort x Version:%#x #>>32 leshort !0x0100 Version:%#x # number of used directory entries like: 0 1 2 5 >>36 leshort !0 Entries:%i # tape container name, 24 characters (padded with 20h but with A0h for DirMaster created samples) like: # ->ZYRON'S PD<- IMAGETAPE MY-T64-TEST\240\240\240 OPERATIONWOLF+3-711.T64 >>40 string/24/Tb >\040 Name:%.24s # MaxFiles; maximal directory entries like: 0 1 2 5 30 (=1Eh some emulators expect exactly this value) 31 32 >>34 uleshort x MaxFiles:%u # 1st C64 filetype: 0~free 1~normal tape file 2~tape file with header 3~memory snapshot 4~tape block 5~digitized stream 6-255~reserved >>0x40 ubyte !1 \b, C64 file type %#x # 1st start address or load address of first entry like: 0000 (empty|snapshot) 04a0h (ironmanoffroad.t64) 0801h (typically) 1201h (3501_quizmaster_program_s1.t64) >>0x42 uleshort !0x0801 \b, load address %#4.4x # 1st actual end address in memory >>0x44 uleshort x \b, end address %#4.4x # reserved; must be 0 >>0x26 ubeshort !0 \b, at +0x26 %#x # not used like: 0 (examples found and according to TrID) >>0x46 ubeshort !0 \b, at 0x46 %#4.4x # not used like: 0 (examples found and according to TrID) >>0x4c ubelong !0 \b, at 0x4C %#8.8x # offset (=64+32*m) into 1st container file like: 0 (empty) 60h 80h E0h 400h 440h ... >>0x48 ulelong >0 \b, at %#x # 1st filename (in PETASCII, padded with 20h, not A0h) like: "DRILLINSTR. /HTL" "WIZBALL+ " ... >>>0x50 string/16/bT x "%0.16s" # https://www.lyonlabs.org/commodore/onrequest/Inside_Commodore_Dos.pdf # file type like: 0~Scratched 1~SEQunclosed 81h~SEQ 82h~PRG C2h~PRGlocked ... >>>0x41 ubyte x >>>>0x41 ubyte =0x00 Scratched type >>>>0x41 ubyte =0x01 SEQ unclosed type #>>>>0x41 ubyte =0x44 foo type >>>>0x41 ubyte =0x80 DEL type >>>>0x41 ubyte =0x81 SEQ type >>>>0x41 ubyte =0x82 PRG type >>>>0x41 ubyte =0x83 USR type >>>>0x41 ubyte =0x84 REL type >>>>0x41 ubyte =0xC2 PRG locked type # other unusual file type >>>>0x41 default x >>>>>0x41 ubyte x %#2.2x type # inspect 1st entry content (often Commodore C64 BASIC program *.PRG) without load adress #>>(0x48.l) ubequad x \b, 1st data %16.16llx... # Raw tape file format (.tap files) # Esa Hyyti # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Tap_file # https://vice-emu.sourceforge.io/vice_16.html#SEC392 # Reference: http://ist.uwaterloo.ca/~schepers/formats/TAP.TXT # Note: called "TAP (Commodore 64)" by DROID via PUID fmt/802 # a variant starting with C16-TAPE-RAW should exist, but no examples found 0 string/b C64-TAPE-RAW Commodore raw Tape image (platform #0 string C64-TAPE-RAW C64 Raw Tape File (.tap), #!:mime application/octet-stream !:mime application/x-commodore-tape !:ext tap # According to TrID als raw suffix, but no such samples found #!:ext tap/raw # computer platform like: 0~C64 1~VIC-20 2~C16 Plus/4 3~PET 4~C5x0 5~C6x0 C7x0 >0xD ubyte 0 C64 >0xD ubyte 1 VIC-20 >0xD ubyte 2 C16 Plus/4 >0xD ubyte 3 PET >0xD ubyte 4 C5x0 >0xD ubyte 5 C6x0 C7x0 # this should not happen! >0xD ubyte >5 %#2.2x >0xD ubyte x \b), # Reference: http://mark0.net/download/triddefs_xml.7z/defs/t/tap.trid.xml # http://mark0.net/download/triddefs_xml.7z/defs/t/tap-1.trid.xml # Note: called "C64 Tape image format" (v0-original) (v1-updated)" by TrID # TAP version like: 0~OriginalLayout 1~Updated (often) >0x0c byte x Version:%u, # file data size (not including header) >0x10 lelong x Length:%u cycles # video standard like: 0~PAL 1~NTSC 2~OLD NTSC 3~PALN >0xE ubyte x \b, video >0xE ubyte 0 PAL >0xE ubyte 1 NTSC >0xE ubyte 2 old NTSC >0xE ubyte 3 PALN # this should not happen! >0xE ubyte >3 %#2.2x # reserved for future expansion like: 0 >0xF ubyte !0 \b, at 0xF %#2.2x # file data #>014 ubequad x \b, data %16.16llx # magic for Goattracker2, http://covertbitops.c64.org/ # from Alex Myczko 0 string GTS5 GoatTracker 2 song >4 string >\0 \b, "%s" >36 string >\0 \b by %s >68 string >\0 \b (C) %s >100 byte >0 \b, %u subsong(s) # CBM BASIC (cc65 compiled) # Summary: binary executable or Basic program for Commodore C64 computers # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Commodore_BASIC_tokenized_file # Reference: https://www.c64-wiki.com/wiki/BASIC_token # https://github.com/thezerobit/bastext/blob/master/bastext.doc # http://mark0.net/download/triddefs_xml.7z/defs/p/prg-c64.trid.xml # TODO: unify Commodore BASIC/program sub routines # Note: "PUCrunch archive data" moved from ./archive and merged with c64-exe 0 leshort 0x0801 # display Commodore C64 BASIC program (strength=50) after "Lynx archive" (strength=330) handled by ./archive #!:strength +0 # if first token is not SYS this implies BASIC program in most cases >6 ubyte !0x9e # but sELF-ExTRACTING-zIP executable unzp6420.prg contains SYS token at end of second BASIC line (at 0x35) >>23 search/30 \323ELF-E\330TRACTING-\332IP >>>0 use c64-exe >>23 default x >>>0 use c64-prg # if first token is SYS this implies binary executable >6 ubyte =0x9e >>0 use c64-exe # display information about C64 binary executable (memory address, line number, token) 0 name c64-exe >0 uleshort x Commodore C64 # http://a1bert.kapsi.fi/Dev/pucrunch/ # start address 0801h; next offset 080bh; BASIC line number is 239=00EFh; BASIC instruction is SYS 2061 # the above combination appartly also occur for other Commodore programs like: gunzip111.c64.prg # and there exist PUCrunch archive for other machines like C16 with other magics >0 string \x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 program, probably PUCrunch archive data !:mime application/x-compress-pucrunch !:ext prg/pck >0 string !\x01\x08\x0b\x08\xef\x00\x9e\x32\x30\x36\x31 program !:mime application/x-commodore-exec !:ext prg/ # start address like: 801h >0 uleshort !0x0801 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x800) ubyte x >>&-1 ubyte !0 \b, no EOL=%#x # valid 2nd BASIC fragment found only in sELF-ExTRACTING-zIP executable unzp6420.prg >>23 search/30 \323ELF-E\330TRACTING-\332IP # jump again from beginning >>>(2.s-0x800) ubyte x >>>>&0 use basic-line # Zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # display information about tokenized C64 BASIC program (memory address, line number, token) 0 name c64-prg >0 uleshort x Commodore C64 BASIC program !:mime application/x-commodore-basic # Tokenized BASIC programs were stored by Commodore as file type program "PRG" in separate field in directory structures. # So file name can have no suffix like in saveroms; When transferring to other platforms, they are often saved with .prg extensions. # BAS suffix is typically used for the BASIC source but also found in program pods.bas !:ext prg/bas/ # start address like: 801h >0 uleshort !0x0801 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x0800) ubyte x >>&-1 ubyte !0 \b, no EOL=%#x # 2nd BASIC fragment >>&0 use basic-line # zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # Summary: binary executable or Basic program for Commodore C128 computers # URL: https://en.wikipedia.org/wiki/Commodore_128 # Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/prg-c128.trid.xml # From: Joerg Jenderek # Note: Commodore 128 BASIC 7.0 variant; there exist varaints with different start addresses 0 leshort 0x1C01 !:strength +1 # GRR: line above with strength 51 (50+1) is too generic because it matches SVr3 curses screen image, big-endian with strength (50) handled by ./terminfo # probably skip SVr3 curses images with "invalid high" second line offset >2 uleshort <0x1D02 # skip foo with "invalid low" second line offset >>2 uleshort >0x1C06 # if first token is not SYS this implies BASIC program >>>6 ubyte !0x9e >>>>0 use c128-prg # if first token is SYS this implies binary executable >>>6 ubyte =0x9e >>>>0 use c128-exe # Summary: binary executable or Basic program for Commodore C128 computers # Note: Commodore 128 BASIC 7.1 extension by Rick Simon # start adress 132Dh #0 leshort 0x132D THIS_IS_C128_7.1 #>0 use c128-prg # Summary: binary executable or Basic program for Commodore C128 computers # Note: Commodore 128 BASIC 7.0 saved with graphics mode enabled # start adress 4001h #0 leshort 0x4001 THIS_IS_C128_GRAPHIC #>0 use c128-prg # display information about tokenized C128 BASIC program (memory address, line number, token) 0 name c128-prg >0 uleshort x Commodore C128 BASIC program !:mime application/x-commodore-basic !:ext prg # start address like: 1C01h >0 uleshort !0x1C01 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x1C00) ubyte x >>&-1 ubyte !0 \b, no EOL=%#x # 2nd BASIC fragment >>&0 use basic-line # Zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # display information about C128 program (memory address, line number, token) 0 name c128-exe >0 uleshort x Commodore C128 program !:mime application/x-commodore-exec !:ext prg/ # start address like: 1C01h >0 uleshort !0x1C01 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x1C00) ubyte x >>&-1 ubyte !0 \b, no EOL=%#x # no valid 2nd BASIC fragment in Commodore executables #>>&0 use basic-line # Zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # Summary: binary executable or Basic program for Commodore C16/VIC-20/Plus4 computers # URL: https://en.wikipedia.org/wiki/Commodore_Plus/4 # Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/prg-vic20.trid.xml # defs/p/prg-plus4.trid.xml # From: Joerg Jenderek # Note: there exist VIC-20 variants with different start address # GRR: line below is too generic because it matches Novell LANalyzer capture # with regular trace header record handled by ./sniffer 0 leshort 0x1001 # skip regular Novell LANalyzer capture (novell-2.tr1 novell-lanalyzer.tr1 novell-win10.tr1) with "invalid low" token value 54h >6 ubyte >0x7F # skip regular Novell LANalyzer capture (novell-2.tr1 novell-lanalyzer.tr1 novell-win10.tr1) with "invalid low" second line offset 4Ch #>>2 uleshort >0x1006 OFFSET_NOT_TOO_LOW # skip foo with "invalid high" second line offset but not for 0x123b (Minefield.prg) #>>>2 uleshort <0x1102 OFFSET_NOT_TOO_HIGH # if first token is not SYS this implies BASIC program >>6 ubyte !0x9e # valid second end of line separator implies BASIC program >>>(2.s-0x1000) ubyte =0 >>>>0 use c16-prg # invalid second end of line separator !=0 implies binary executable like: Minefield.prg >>>(2.s-0x1000) ubyte !0 >>>>0 use c16-exe # if first token is SYS this implies binary executable >>6 ubyte =0x9e >>>0 use c16-exe # display information about C16 program (memory address, line number, token) 0 name c16-exe >0 uleshort x Commodore C16/VIC-20/Plus4 program !:mime application/x-commodore-exec !:ext prg/ # start address like: 1001h >0 uleshort !0x1001 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x1000) ubyte x >>&-1 ubyte !0 \b, no EOL=%#x # no valid 2nd BASIC fragment in excutables #>>&0 use basic-line # Zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # display information about tokenized C16 BASIC program (memory address, line number, token) 0 name c16-prg >0 uleshort x Commodore C16/VIC-20/Plus4 BASIC program !:mime application/x-commodore-basic !:ext prg # start address like: 1001h >0 uleshort !0x1001 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x1000) ubyte x >>&-1 ubyte !0 \b, no EOL=%#x # 2nd BASIC fragment >>&0 use basic-line # Zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # Summary: binary executable or Basic program for Commodore VIC-20 computer with 8K RAM expansion # URL: https://en.wikipedia.org/wiki/VIC-20 # Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/prg-vic20-8k.trid.xml # From: Joerg Jenderek # Note: Basic v2.0 with Basic v4.0 extension (VIC20); there exist VIC-20 variants with different start addresses # start adress 1201h 0 leshort 0x1201 # if first token is not SYS this implies BASIC program >6 ubyte !0x9e >>0 use vic-prg # if first token is SYS this implies binary executable >6 ubyte =0x9e >>0 use vic-exe # display information about Commodore VIC-20 BASIC+8K program (memory address, line number, token) 0 name vic-prg >0 uleshort x Commodore VIC-20 +8K BASIC program !:mime application/x-commodore-basic !:ext prg # start address like: 1201h >0 uleshort !0x1201 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x1200) ubyte x >>&-1 ubyte !0 \b, no EOL=%#x # 2nd BASIC fragment >>&0 use basic-line # Zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # display information about Commodore VIC-20 +8K program (memory address, line number, token) 0 name vic-exe >0 uleshort x Commodore VIC-20 +8K program !:mime application/x-commodore-exec !:ext prg/ # start address like: 1201h >0 uleshort !0x1201 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x0400) ubyte x >>&-1 ubyte !0 \b, no EOL=%#x # no valid 2nd BASIC fragment in excutables #>>&0 use basic-line # Zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # Summary: binary executable or Basic program for Commodore PET computers # URL: https://en.wikipedia.org/wiki/Commodore_PET # Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/prg-pet.trid.xml # From: Joerg Jenderek # start adress 0401h 0 leshort 0x0401 !:strength +1 # GRR: line above with strength 51 (50+1) is too generic because it matches TTComp archive data, ASCII, 1K dictionary # (strength=48=50-2) handled by ./archive and shared library (strength=50) handled by ./ibm6000 # skip TTComp archive data, ASCII, 1K dictionary ttcomp-ascii-1k.bin with "invalid high" second line offset 4162h >2 uleshort <0x0502 # skip foo with "invalid low" second line offset #>>2 uleshort >0x0406 OFFSET_NOT_TOO_LOW # skip bar with "invalid end of line" #>>>(2.s-0x0400) ubyte =0 END_OF_LINE_OK # if first token is not SYS this implies BASIC program >>6 ubyte !0x9e >>>0 use pet-prg # if first token is SYS this implies binary executable >>6 ubyte =0x9e >>>0 use pet-exe # display information about Commodore PET BASIC program (memory address, line number, token) 0 name pet-prg >0 uleshort x Commodore PET BASIC program !:mime application/x-commodore-basic !:ext prg # start address like: 0401h >0 uleshort !0x0401 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x0400) ubyte x # 2nd BASIC fragment >>&0 use basic-line # zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # display information about Commodore PET program (memory address, line number, token) 0 name pet-exe >0 uleshort x Commodore PET program !:mime application/x-commodore-exec !:ext prg/ # start address like: 0401h >0 uleshort !0x0401 \b, start address %#4.4x # 1st BASIC fragment >2 use basic-line # jump to 1 byte before next BASIC fragment; this must be zero-byte marking the end of line >(2.s-0x0400) ubyte x >>&-1 ubyte !0 \b, no EOL=%#x # no valid 2nd BASIC fragment in excutables #>>&0 use basic-line # Zero-byte marking the end of the BASIC line >-3 ubyte !0 \b, 3 last bytes %#2.2x # Two zero-bytes in place of the pointer to next BASIC line indicates the end of the program >>-2 ubeshort x \b%4.4x # display information about tokenized BASIC line (memory address, line number, Token) 0 name basic-line # pointer to memory address of beginning of "next" BASIC line # greater then previous offset but maximal 100h difference >0 uleshort x \b, offset %#4.4x # offset 0x0000 indicates the end of BASIC program; so bytes afterwards may be some other data >0 uleshort 0 # not line number but first 2 data bytes >>2 ubeshort x \b, data %#4.4x # not token but next 2 data bytes >>4 ubeshort x \b%4.4x # not token arguments but next data bytes >>6 ubequad x \b%16.16llx >>14 ubequad x \b%16.16llx... # like 0x0d20352020204c594e5820495820204259205749 "\r 5 LYNX IX BY WILL CORLEY" for LyNX archive Darkon.lnx handled by ./archive #>>3 string x "%-0.30s" >0 uleshort >0 # BASIC line number with range from 0 to 65520; practice to increment numbers by some value (5, 10 or 100) >>2 uleshort x \b, line %u # https://www.c64-wiki.com/wiki/BASIC_token # The "high-bit" bytes from #128-#254 stood for the various BASIC commands and mathematical operators >>4 ubyte x \b, token (%#x) # https://www.c64-wiki.com/wiki/REM >>4 string \x8f REM # remark string like: ** SYNTHESIZER BY RICOCHET ** >>>5 string >\0 %s #>>>>&1 uleshort x \b, NEXT OFFSET %#4.4x # https://www.c64-wiki.com/wiki/PRINT >>4 string \x99 PRINT # string like: "Hello world" "\021 \323ELF-E\330TRACTING-\332IP (64 ONLY)\016\231":\2362141 >>>5 string x %s #>>>>&0 ubequad x AFTER_PRINT=%#16.16llx # https://www.c64-wiki.com/wiki/POKE >>4 string \x97 POKE # , >>>5 regex \^[0-9,\040]+ %s # BASIC command delimiter colon (:=3Ah) >>>>&-2 ubyte =0x3A # after BASIC command delimiter colon remaining (<255) other tokenized BASIC commands >>>>>&0 string x "%s" # https://www.c64-wiki.com/wiki/SYS 0x9e=\236 >>4 string \x9e SYS # SYS
parameter is a 16-bit unsigned integer; in the range 0 - 65535 >>>5 regex \^[0-9]{1,5} %s # maybe followed by spaces, "control-characters" or colon (:) followed by next commnds or in victracker.prg # (\302(43)\252256\254\302(44)\25236) /T.L.R/ #>>>5 string x SYS_STRING="%s" # https://www.c64-wiki.com/wiki/GOSUB >>4 string \x8d GOSUB # >>>5 string >\0 %s file-5.46/magic/Magdir/cad000664 023540 023540 00000041323 14350626415 017077 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: cad,v 1.31 2022/12/09 15:36:23 christos Exp $ # autocad: file(1) magic for cad files # # Microstation DGN/CIT Files (www.bentley.com) # Last updated July 29, 2005 by Lester Hightower # DGN is the default file extension of Microstation/Intergraph CAD files. # CIT is the proprietary raster format (similar to TIFF) used to attach # raster underlays to Microstation DGN (vector) drawings. # # http://www.wotsit.org/search.asp # https://filext.com/detaillist.php?extdetail=DGN # https://filext.com/detaillist.php?extdetail=CIT # # https://www.bentley.com/products/default.cfm?objectid=97F351F5-9C35-4E5E-89C2 # 3F86C928&method=display&p_objectid=97F351F5-9C35-4E5E-89C280A93F86C928 # https://www.bentley.com/products/default.cfm?objectid=A5C2FD43-3AC9-4C71-B682 # 721C479F&method=display&p_objectid=A5C2FD43-3AC9-4C71-B682C7BE721C479F # # URL: https://en.wikipedia.org/wiki/MicroStation # reference: http://dgnlib.maptools.org/dgn.html # http://dgnlib.maptools.org/dl/ref18.pdf # Update: Joerg Jenderek # Note: verfied by command like `dgndump seed2d_b.dgn` # test for level 8 and type 5 or 9 0 beshort&0x3F73 0x0801 # level of element like 8 #>0 ubyte&0x3F x \b, level %u #>0 ubyte &0x80 \b, complex #>0 ubyte &0x40 \b, reserved # type of element 9~TCB 8~Digitizer setup 5~Group Data Elements #>1 ubyte&0x7F x \b, type %u # words to follow in element: 17H~CEL library 2FEh~DGN 9FEh,DFEh~CIT #>2 uleshort x \b, words %#4.4x to follow # test for 3 reserved 0 bytes in CIT or "conversion" in ViewInfo structure (DGN CEL) #>508 ubelong x \b, RESERVED %8.8x >508 ubelong&0xFFffFF00 =0 # test for level 8 and type 9 for INGR raster image >>0 beshort 0x0809 # test for length of 1st element is multiple of blocks a 512 bytes >>>2 ubyte 0xfe >>>>0 use ingr-image # test for DGN or CEL by jump words (uleshort) forward to next element >(2.s*2) ulong x # 2nd element type: 8~Digitizer~DesiGNfile 1~library cell header other~CIT #>>&1 ubyte&0x7F x \b, 2nd type %u # DGN >>&1 ubyte&0x7F 8 >>>2 uleshort =0x02FE Bentley/Intergraph Microstation CAD drawing !:mime application/x-bentley-dgn !:ext dgn # The 0x40 bit of this byte is 1 if the file is 3D, otherwise 0 >>>>1214 ubyte &0x40 3D >>>>1214 ubyte ^0x40 2D # 2 chars for name of subunits like ft FT in IN mu m mm '\0 '\040 >>>>1120 string x \b, units %-.2s # 2 chars for name of master unit like IN in ML SU tn th TH HU mm "\0 "\040 \0\0 >>>>1122 string >\0 %-.2s #>>>>1120 ubelong x \b, units %#8.8x # element range low,high x y z like xlow=0 08010000h 01080000h #>>>>4 ubelong !0 \b, xlow %8.8x #>>>>8 ubelong !0 \b, ylow %8.8x #>>>>12 ubelong !0 \b, zlow %8.8x #>>>>16 ubelong !0 \b, xhigh %8.8x #>>>>20 ubelong !0 \b, yhigh %8.8x #>>>>24 ubelong !0 \b, zhigh %8.8x # graphic group number; all other elements in that group have same non-0 number #>>>>28 leshort x \b, grphgrp %#4.4x # words to optional attribute linkage #>>>>30 ubyte x \b, attindx \%o #>>>>31 ubyte x \b\%o # >>30 string \026\105 DGNFile # >>30 string \034\105 DGNFile # >>30 string \073\107 DGNFile # >>30 string \073\110 DGNFile # >>30 string \106\107 DGNFile # >>30 string \110\103 DGNFile # >>30 string \120\104 DGNFile # >>30 string \172\104 DGNFile # >>30 string \172\105 DGNFile # >>30 string \172\106 DGNFile # >>30 string \234\106 DGNFile # >>30 string \273\105 DGNFile # >>30 string \306\106 DGNFile # >>30 string \310\104 DGNFile # >>30 string \341\104 DGNFile # >>30 string \372\103 DGNFile # >>30 string \372\104 DGNFile # >>30 string \372\106 DGNFile # >>30 string \376\103 DGNFile # elements properties indicator #>>>>32 uleshort !0 \b, properties %#4.4x # class 0~Primary #>>>>>32 uleshort&0x000F !0 \b, class %#4.4x # Symbology #>>>>>34 uleshort x \b, Symbology %#4.4x # test for 2nd element type 1~library cell header >>&1 ubyte&0x7F 1 # test for 1st element with level 8 and type 5 for cell library >>>0 beshort 0x0805 Bentley/Intergraph Microstation CAD cell library !:mime application/x-bentley-cel !:ext cel # # URL: http://fileformats.archiveteam.org/wiki/Intergraph_Raster # reference: https://web.archive.org/web/20140903185431/ # http://oreilly.com/www/centers/gff/formats/ingr/index.htm # note: verfied by command like `nconvert -fullinfo LONGLAT.CIT` # display information for intergraph raster bitmap 0 name ingr-image # in 5.37 "Microstation CITFile" "Bentley/Intergraph MicroStation CIT raster CAD" # DataTypeCode indicates format, depth of the pixel data and used compression >4 uleshort x Intergraph raster image >>4 uleshort 0x0009 \b, Run-Length Encoded 1-bit !:mime image/x-intergraph-rle !:ext rel >>4 uleshort 0x0018 \b, CCITT Group 4 1-bit !:mime image/x-intergraph-cit !:ext cit >>4 uleshort 27 \b, Adaptive RLE RGB !:mime image/x-intergraph-rgb !:ext rgb >>4 default x >>>4 uleshort x \b, Type %u !:mime image/x-intergraph # TODO: #>4 uleshort 0 \b, no data # ... #>4 uleshort 0x0045 \b, Continuous Tone CMKY (Uncompressed) # ApplicationType: 0~generic raster image 3~drawing, scanning # 8~I/IMAGE and MicroStation Imager 9~ModelView >6 uleshort !0 \b, ApplicationType %u #>6 uleshort x \b, ApplicationType %u # XViewOrigin; Raster grid data X origin #>8 ulequad !0 \b, XViewOrigin %llx # PixelsPerLine is the number of pixels in a scan line of bitmapp >184 ulelong x \b, %u x # NumberOfLines is height of the raster data in scanlines >188 ulelong x %u # DeviceResolution; resolution of scanning device # positive indicates number of micros between lines; negative indicates DPI #>192 leshort x \b, DeviceResolution %d # ScanlineOrient indicates the origin and the orientation of the scan lines #>194 ubyte x \b, ScanlineOrient %x >194 ubyte x \b, orientation >194 ubyte &0x01 right >194 ubyte ^0x01 left >194 ubyte &0x02 down >194 ubyte ^0x02 top >194 ubyte &0x04 horizontal >194 ubyte ^0x04 vertical # ScannableFlag; Scanline indexing method used #>195 ubyte !0 \b, ScannableFlag %#x # RotationAngle; Rotation angle of raster data #>196 ubequad !0 \b, RotationAngle %#llx # SkewAngle; Skew angle of raster data #>204 ubequad !0 \b, SkewAngle %llx # DataTypeModifier; Additional raster data format info #>212 uleshort !0 \b, DataTypeModifier %#4.4x # DesignFile[66]; Name of the design file >214 string >\0 \b, DesignFile %-.66s # DatabaseFile[66]; Name of the database file >280 string >\0 \b, DatabaseFile %-.66s # ParentGridFile[66]; Name of parent grid file >346 string >\0 \b, ParentGridFile %-.66s # FileDescription[80]; Text description of file and contents >412 string >\0 \b, FileDescription %-.80s # MinValue #>492 ubequad !0 \b, MinValue %#llx # MaxValue #>500 ubequad !0 \b, MaxValue %#llx # Reserved[3]; Unused (always 0) #>508 ubelong&0xFFffFF00 x \b, RESERVED %8.8x # GridFileVersion; Grid File Version like 2 3 #>511 ubyte x \b, GridFileVersion %x # AutoCAD # Merge of the different contributions and updates from https://en.wikipedia.org/wiki/Dwg # and https://www.iana.org/assignments/media-types/image/vnd.dwg 0 string MC0.0 DWG AutoDesk AutoCAD Release 1.0 !:mime image/vnd.dwg 0 string AC1.2 DWG AutoDesk AutoCAD Release 1.2 !:mime image/vnd.dwg 0 string AC1.3 DWG AutoDesk AutoCAD Release 1.3 !:mime image/vnd.dwg 0 string AC1.40 DWG AutoDesk AutoCAD Release 1.40 !:mime image/vnd.dwg 0 string AC1.50 DWG AutoDesk AutoCAD Release 2.05 !:mime image/vnd.dwg 0 string AC2.10 DWG AutoDesk AutoCAD Release 2.10 !:mime image/vnd.dwg 0 string AC2.21 DWG AutoDesk AutoCAD Release 2.21 !:mime image/vnd.dwg 0 string AC2.22 DWG AutoDesk AutoCAD Release 2.22 !:mime image/vnd.dwg 0 string AC1001 DWG AutoDesk AutoCAD Release 2.22 !:mime image/vnd.dwg 0 string AC1002 DWG AutoDesk AutoCAD Release 2.50 !:mime image/vnd.dwg 0 string AC1003 DWG AutoDesk AutoCAD Release 2.60 !:mime image/vnd.dwg 0 string AC1004 DWG AutoDesk AutoCAD Release 9 !:mime image/vnd.dwg 0 string AC1006 DWG AutoDesk AutoCAD Release 10 !:mime image/vnd.dwg 0 string AC1009 DWG AutoDesk AutoCAD Release 11/12 !:mime image/vnd.dwg # AutoCAD DWG versions R13/R14 (www.autodesk.com) # Written December 01, 2003 by Lester Hightower # Based on the DWG File Format Specifications at http://www.opendwg.org/ # AutoCad, from Nahuel Greco # AutoCAD DWG versions R12/R13/R14 (www.autodesk.com) 0 string AC1012 DWG AutoDesk AutoCAD Release 13 !:mime image/vnd.dwg 0 string AC1013 DWG AutoDesk AutoCAD Release 13c3 !:mime image/vnd.dwg 0 string AC1014 DWG AutoDesk AutoCAD Release 14 !:mime image/vnd.dwg 0 string AC1015 DWG AutoDesk AutoCAD 2000 !:mime image/vnd.dwg # A new version of AutoCAD DWG # Sergey Zaykov (mail_of_sergey@mail.ru, sergey_zaikov@rambler.ru, # ICQ 358572321) # From various sources like: # https://autodesk.blogs.com/between_the_lines/autocad-release-history.html 0 string AC1018 DWG AutoDesk AutoCAD 2004/2005/2006 !:mime image/vnd.dwg 0 string AC1021 DWG AutoDesk AutoCAD 2007/2008/2009 !:mime image/vnd.dwg 0 string AC1024 DWG AutoDesk AutoCAD 2010/2011/2012 !:mime image/vnd.dwg 0 string AC1027 DWG AutoDesk AutoCAD 2013-2017 !:mime image/vnd.dwg # From GNU LibreDWG 0 string AC1032 DWG AutoDesk AutoCAD 2018/2019/2020 !:mime image/vnd.dwg 0 string AC1035 DWG AutoDesk AutoCAD 2021 !:mime image/vnd.dwg # KOMPAS 2D drawing from ASCON # This is KOMPAS 2D drawing or fragment of drawing but is not detailed nor # gathered nor specification # ASCON https://ascon.net/main/ in English, # https://ascon.ru/ main site in Russian # Extension is CDW for drawing and FRW for fragment of drawing # Sergey Zaykov (mail_of_sergey@mail.ru, sergey_zaikov@rambler.ru, # ICQ 358572321, https://vkontakte.ru/id16076543) # From: # https://sd.ascon.ru/otrs/customer.pl?Action=CustomerFAQ&CategoryID=4&ItemID=292 # (in russian) and my experiments 0 string KF >2 belong 0x4E00000C Kompas drawing 12.0 SP1 >2 belong 0x4D00000C Kompas drawing 12.0 >2 belong 0x3200000B Kompas drawing 11.0 SP1 >2 belong 0x3100000B Kompas drawing 11.0 >2 belong 0x2310000A Kompas drawing 10.0 SP1 >2 belong 0x2110000A Kompas drawing 10.0 >2 belong 0x08000009 Kompas drawing 9.0 SP1 >2 belong 0x05000009 Kompas drawing 9.0 >2 belong 0x33010008 Kompas drawing 8+ >2 belong 0x1A000008 Kompas drawing 8.0 >2 belong 0x2C010107 Kompas drawing 7+ >2 belong 0x05000007 Kompas drawing 7.0 >2 belong 0x32000006 Kompas drawing 6+ >2 belong 0x09000006 Kompas drawing 6.0 >2 belong 0x5C009005 Kompas drawing 5.11R03 >2 belong 0x54009005 Kompas drawing 5.11R02 >2 belong 0x51009005 Kompas drawing 5.11R01 >2 belong 0x22009005 Kompas drawing 5.10R03 >2 belong 0x22009005 Kompas drawing 5.10R02 mar >2 belong 0x21009005 Kompas drawing 5.10R02 febr >2 belong 0x19009005 Kompas drawing 5.10R01 >2 belong 0xF4008005 Kompas drawing 5.9R01.003 >2 belong 0x1C008005 Kompas drawing 5.9R01.002 >2 belong 0x11008005 Kompas drawing 5.8R01.003 # CAD: file(1) magic for computer aided design files # Phillip Griffith # AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications. # # 3DS (3d Studio files) 0 leshort 0x4d4d >6 leshort 0x2 >>8 lelong 0xa >>>16 leshort 0x3d3d 3D Studio model # Beat sgi MMV !:strength +20 !:mime image/x-3ds !:ext 3ds # MegaCAD 2D/3D drawing (.prt) # https://megacad.de/ # From: Markus Heidelberg 0 string MegaCad23\0 MegaCAD 2D/3D drawing # Hoops CAD files # https://docs.techsoft3d.com/visualize/3df/latest/build/general/hsf/\ # HSF_architecture.html # Stephane Charette 0 string ;;\040HSF\040V OpenHSF (Hoops Stream Format) >7 regex/9 V[.0-9]{4,5}\040 %s !:ext hsf # AutoCAD Drawing Exchange Format # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/DXF # https://en.wikipedia.org/wiki/AutoCAD_DXF # Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/ # dxf-var0.trid.xml dxf-var0u.trid.xml dxf-var2.trid.xml dxf-var2u.trid.xml # Note: called "AutoCAD Drawing eXchange Format" by TrID and # "Drawing Interchange File Format (ASCII)" by DROID # GRR: some samples does not match 1st test like: abydos.dxf 0 regex \^[\ \t]*0\r?\000$ >1 regex \^[\ \t]*SECTION\r?$ >>2 regex \^[\ \t]*2\r?$ # GRR: some samples without HEADER section like: airplan2.dxf >>>3 regex \^[\ \t]*HEADER\r?$ AutoCAD Drawing Exchange Format #!:mime application/x-dxf !:mime image/vnd.dxf !:ext dxf # DROID PUID fmt/64 fmt-64-signature-id-99.dxf >>>>&1 search/8192 MC0.0 \b, 1.0 # DROID PUID fmt/65 fmt-65-signature-id-100.dxf >>>>&1 search/8192 AC1.2 \b, 1.2 # DROID PUID fmt/66 fmt-66-signature-id-101.dxf >>>>&1 search/8192 AC1.3 \b, 1.3 # DROID PUID fmt/67 fmt-67-signature-id-102.dxf >>>>&1 search/8192 AC1.40 \b, 1.4 # DROID PUID fmt/68 fmt-68-signature-id-103.dxf >>>>&1 search/8192 AC1.50 \b, 2.0 # DROID PUID fmt/69 fmt-69-signature-id-104.dxf >>>>&1 search/8192 AC2.10 \b, 2.1 # DROID PUID fmt/70 fmt-70-signature-id-105.dxf >>>>&1 search/8192 AC2.21 \b, 2.2 # DROID PUID fmt/71 fmt-71-signature-id-106.dxf >>>>&1 search/8192 AC1002 \b, 2.5 # DROID PUID fmt/72 fmt-72-signature-id-107.dxf >>>>&1 search/8192 AC1003 \b, 2.6 # DROID PUID fmt/73 fmt-73-signature-id-108.dxf >>>>&1 search/8192 AC1004 \b, R9 >>>>&1 search/8192 AC1006 \b, R10 # http://cd.textfiles.com/amigaenv/DXF/OBJEKTE/LASTMINUTE/apple.dxf #>>>>&1 search/8192 AC1008 \b, Rfoo >>>>&1 search/8192 AC1009 \b, R11/R12 >>>>&1 search/8192 AC1012 \b, R13 >>>>&1 search/8192 AC1013 \b, R13c3 >>>>&1 search/8192 AC1014 \b, R14 >>>>&1 search/8192 AC1015 \b, version 2000 >>>>&1 search/8192 AC1018 \b, version 2004 >>>>&1 search/8192 AC1021 \b, version 2007 >>>>&1 search/8192 AC1024 \b, version 2010 >>>>&1 search/8192 AC1027 \b, version 2013 >>>>&1 search/8192 AC1032 \b, version 2018 >>>>&1 search/8192 AC1035 \b, version 2021 # The Sketchup 3D model format https://www.sketchup.com/ 0 string \xff\xfe\xff\x0e\x53\x00\x6b\x00\x65\x00\x74\x00\x63\x00\x68\x00\x55\x00\x70\x00\x20\x00\x4d\x00\x6f\x00\x64\x00\x65\x00\x6c\x00 SketchUp Model !:mime application/vnd.sketchup.skp !:ext skp 4 regex/b P[0-9][0-9]\\.[0-9][0-9][0-9][0-9]\\.[0-9][0-9][0-9][0-9]\\.[0-9] NAXOS CAD System file from version %s !:strength +40 # glTF (GL Transmission Format) - by the Khronos Group # Reference: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#glb-file-format-specification 0 string glTF glTF binary model >4 ulelong x \b, version %d >8 ulelong x \b, length %d bytes !:mime model/gltf-binary !:ext glb # FBX (FilmBoX) - by Kaydara/Autodesk # Reference: https://code.blender.org/2013/08/fbx-binary-file-format-specification 0 string Kaydara\ FBX\ Binary\ \ \0 Kaydara FBX model, >&2 ulelong x version %d !:ext fbx # PLY (Polygon File Format/Stanford Triangle Format) - by Greg Turk # Reference: https://web.archive.org/web/20161204152348/http://www.dcs.ed.ac.uk/teaching/cs4/www/graphics/Web/ply.html 0 string ply\n PLY model, !:ext ply >4 string format\ ascii\ ASCII, >>&0 regex/6 [0-9.]+ version %s >4 string format\ binary binary, >>&0 string _little_endian\ little endian, >>>&0 regex/6 [0-9.]+ version %s >>&0 string _big_endian\ big endian, >>>&0 regex/6 [0-9.]+ version %s # VRML (Virtual Reality Modeling Language) - by the Web3D Consortium # From: Michel Briand # Reference: https://www.web3d.org/standards 0 string/w #VRML\ V1.0\ ascii VRML 1 file !:mime model/vrml !:ext wrl 0 string/w #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file !:mime model/vrml !:ext wrl # X3D, VRML encoded 0 string #X3D X3D (Extensible 3D) model, VRML format >4 string V >>5 regex/6 [0-9.]+ \b, version %s !:mime model/x3d+vrml !:ext x3dv ## XML-based 3D CAD Formats # From: Michel Briand , Oliver Galvin 0 string/w \20 search/1000/w \20 search/1000/w \20 search/1000/w xmlns="http://schemas.microsoft.com/3dmanufacturing 3MF (3D Manufacturing Format) model, XML document !:mime model/3mf !:ext 3mf # AMF (Additive Manufacturing File) # Reference: https://www.astm.org/Standards/ISOASTM52915.htm >20 search/1000/w \0 ubequad x CPU=%16.16llx # display CPU type as string like: i386 x86_64 ... armv7 armv7k ... >0 use mach-o-cpu \b # for debugging purpose print offset to 1st mach_header like: # 1000h 4000h seldom 2d000h 88000h 5b000h 10e000 h #>8 ubelong x at %#x offset >(8.L) indirect x \b: >0 belong x \b] # Reference: https://opensource.apple.com/source/cctools/cctools-949.0.1/ # include/mach-o/fat.h # include/mach/machine.h 0 belong 0xcafebabe >4 belong 1 Mach-O universal binary with 1 architecture: !:mime application/x-mach-binary >>8 use mach-o \b # nfat_arch; number of CPU architectures; highest is 18 for CPU_TYPE_POWERPC in 2020 >4 ubelong >1 >>4 ubelong <20 Mach-O universal binary with %d architectures: !:mime application/x-mach-binary >>>8 use mach-o \b >>>4 ubelong >1 >>>>28 use mach-o \b >>>4 ubelong >2 >>>>48 use mach-o \b >>>4 ubelong >3 >>>>68 use mach-o \b >>>4 ubelong >4 >>>>88 use mach-o \b >>>4 ubelong >5 >>>>108 use mach-o \b ### MACH-O END ### ### JAVA START ### # Reference: http://en.wikipedia.org/wiki/Java_class_file # Update: Joerg Jenderek >4 ubelong >30 compiled Java class data, !:mime application/x-java-applet #!:mime application/java-byte-code !:ext class >>6 ubeshort x version %d. >>4 ubeshort x \b%d # for debugging purpose version as hexadecimal to compare with Mach-O universal binary #>>4 ubelong x (%#8.8x) # Which is which? # https://docs.oracle.com/javase/specs/jvms/se6/html/ClassFile.doc.html #>>4 belong 0x002b (Java 0.?) #>>4 belong 0x032d (Java 1.0) #>>4 belong 0x032d (Java 1.1) >>4 belong 0x002e (Java 1.2) >>4 belong 0x002f (Java 1.3) >>4 belong 0x0030 (Java 1.4) >>4 belong 0x0031 (Java 1.5) >>4 belong 0x0032 (Java 1.6) >>4 belong 0x0033 (Java 1.7) >>4 belong 0x0034 (Java 1.8) >>4 belong 0x0035 (Java SE 9) >>4 belong 0x0036 (Java SE 10) >>4 belong 0x0037 (Java SE 11) >>4 belong 0x0038 (Java SE 12) >>4 belong 0x0039 (Java SE 13) >>4 belong 0x003A (Java SE 14) >>4 belong 0x003B (Java SE 15) >>4 belong 0x003C (Java SE 16) >>4 belong 0x003D (Java SE 17) >>4 belong 0x003E (Java SE 18) >>4 belong 0x003F (Java SE 19) >>4 belong 0x0040 (Java SE 20) >>4 belong 0x0041 (Java SE 21) >>4 belong 0x0042 (Java SE 22) >>4 belong 0x0043 (Java SE 23) >>4 belong 0x0044 (Java SE 24) >>4 belong 0x0045 (Java SE 25) >>4 belong 0x0046 (Java SE 26) # pool count unequal zero #>>8 beshort x \b, pool count %#x # pool table #>>10 ubequad x \b, pool %#16.16llx... 0 belong 0xcafed00d JAR compressed with pack200, >5 byte x version %d. >4 byte x \b%d !:mime application/x-java-pack200 ### JAVA END ### file-5.46/magic/Magdir/cbor000664 023540 023540 00000001143 14700541414 017263 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: cbor,v 1.2 2024/09/04 19:06:12 christos Exp $ # cbor: file(1) magic for CBOR files as defined in RFC 7049 0 string \xd9\xd9\xf7 Concise Binary Object Representation (CBOR) container !:mime application/cbor >3 ubyte <0x20 (positive integer) >3 ubyte <0x40 >>3 ubyte >0x1f (negative integer) >3 ubyte <0x60 >>3 ubyte >0x3f (byte string) >3 ubyte <0x80 >>3 ubyte >0x5f (text string) >3 ubyte <0xa0 >>3 ubyte >0x7f (array) >3 ubyte <0xc0 >>3 ubyte >0x9f (map) >3 ubyte <0xe0 >>3 ubyte >0xbf (tagged) >3 ubyte >0xdf (other) file-5.46/magic/Magdir/ccf000664 023540 023540 00000001127 14202721511 017066 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: ccf,v 1.1 2022/02/15 12:57:45 christos Exp $ # file(1) magic(5) data for Phillips remote controls # Exchange format for Philips Pronto universal infrared remote controls # A CCF file describes a learned/customized remote control, # i.e. it contains button UI and infrared pulse code definitions # (Georg Sauthoff) # http://files.remotecentral.com/download/45/pan-air-csakr.zip.html # https://github.com/gsauthof/pronto-ccf/blob/ 8 string @\xa5Z@_CCF >32 string CCF\x00 Philips Pronto IR remote control CCF file-5.46/magic/Magdir/cddb000664 023540 023540 00000000602 14015050424 017224 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: cddb,v 1.4 2009/09/19 16:28:08 christos Exp $ # CDDB: file(1) magic for CDDB(tm) format CD text data files # # From # # This is the /etc/magic entry to decode datafiles as used by # CDDB-enabled CD player applications. # 0 search/1/w #\040xmcd CDDB(tm) format CD text data file-5.46/magic/Magdir/chord000664 023540 023540 00000001101 14015050424 017422 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: chord,v 1.5 2010/09/20 19:19:16 rrt Exp $ # chord: file(1) magic for Chord music sheet typesetting utility input files # # From Philippe De Muyter # File format is actually free, but many distributed files begin with `{title' # 0 string {title Chord text file # Type: PowerTab file format # URL: http://www.power-tab.net/ # From: Jelmer Vernooij 0 string ptab\003\000 Power-Tab v3 Tablature File 0 string ptab\004\000 Power-Tab v4 Tablature File file-5.46/magic/Magdir/cisco000664 023540 023540 00000000757 14015050424 017443 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: cisco,v 1.4 2009/09/19 16:28:08 christos Exp $ # cisco: file(1) magic for cisco Systems routers # # Most cisco file-formats are covered by the generic elf code # # Microcode files are non-ELF, 0x8501 conflicts with NetBSD/alpha. 0 belong&0xffffff00 0x85011400 cisco IOS microcode >7 string >\0 for '%s' 0 belong&0xffffff00 0x8501cb00 cisco IOS experimental microcode >7 string >\0 for '%s' file-5.46/magic/Magdir/citrus000664 023540 023540 00000000716 14015050424 017647 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: citrus,v 1.5 2021/01/04 19:48:31 christos Exp $ # citrus locale declaration # 0 string RuneCT Citrus locale declaration for LC_CTYPE 0 string CtrsME Citrus locale declaration for LC_MESSAGES 0 string CtrsMO Citrus locale declaration for LC_MONETARY 0 string CtrsNU Citrus locale declaration for LC_NUMERIC 0 string CtrsTI Citrus locale declaration for LC_TIME file-5.46/magic/Magdir/clarion000664 023540 023540 00000001401 14015050424 017755 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: clarion,v 1.5 2014/04/30 21:41:02 christos Exp $ # clarion: file(1) magic for # Clarion Personal/Professional Developer # (v2 and above) # From: Julien Blache # Database files # signature 0 leshort 0x3343 Clarion Developer (v2 and above) data file # attributes >2 leshort &0x0001 \b, locked >2 leshort &0x0004 \b, encrypted >2 leshort &0x0008 \b, memo file exists >2 leshort &0x0010 \b, compressed >2 leshort &0x0040 \b, read only # number of records >5 lelong x \b, %d records # Memo files 0 leshort 0x334d Clarion Developer (v2 and above) memo data # Key/Index files # No magic? :( # Help files 0 leshort 0x49e0 Clarion Developer (v2 and above) help data file-5.46/magic/Magdir/claris000664 023540 023540 00000004315 14700541414 017617 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: claris,v 1.9 2024/07/07 14:36:49 christos Exp $ # claris: file(1) magic for claris # "H. Nanosecond" # Update: Joerg Jenderek 2024 May # URL: https://en.wikipedia.org/wiki/AppleWorks # Claris Works a word processor, etc. # Version 3.0 # .pct claris works clip art files #0000000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 #* #0001000 #010 250 377 377 377 377 000 213 000 230 000 021 002 377 014 000 #null to byte 1000 octal 514 string \377\377\377\377\000 # https://sembiance.com/fileFormatSamples/image/pict/ # Claris clip art (strength=80) after few Macintosh QuickDraw (strength=81=70+11 ./images) with corner coordinates -1/-1 and Y=0x00?? like PICT_2012.pict #!:strength +0 >0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 Claris clip art 514 string \377\377\377\377\001 # https://sembiance.com/fileFormatSamples/image/pict/ # Claris clip art (strength=80) after few Macintosh QuickDraw (strength=81=70+11 ./images) with corner coordinates -1/-1 and Y=0x01?? like PICT_129.pict #!:strength +0 >0 string \0\0\0\0\0\0\0\0\0\0\0\0\0 Claris clip art # Claris works files # .cwk # Moved to Apple AppleWorks document #0 string \002\000\210\003\102\117\102\117\000\001\206 Claris works document # .plt 0 string \020\341\000\000\010\010 Claris Works palette files .plt # .msp a dictionary file I am not sure about this I have only one .msp file 0 string \002\271\262\000\040\002\000\164 Claris works dictionary # .usp are user dictionary bits # I am not sure about a magic header: #0000000 001 123 160 146 070 125 104 040 136 123 015 012 160 157 144 151 # soh S p f 8 U D sp ^ S cr nl p o d i #0000020 141 164 162 151 163 164 040 136 123 015 012 144 151 166 040 043 # a t r i s t sp ^ S cr nl d i v sp # # .mth Thesaurus # starts with \0 but no magic header # .chy Hyphenation file # I am not sure: 000 210 034 000 000 # other claris files #./windows/claris/useng.ndx: data #./windows/claris/xtndtran.l32: data #./windows/claris/xtndtran.lst: data #./windows/claris/clworks.lbl: data #./windows/claris/clworks.prf: data #./windows/claris/userd.spl: data file-5.46/magic/Magdir/clipper000664 023540 023540 00000004134 14015050424 017772 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: clipper,v 1.9 2020/12/15 23:57:27 christos Exp $ # clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper. # # XXX - what byte order does the Clipper use? # # XXX - what's the "!" stuff: # # >18 short !074000,000000 C1 R1 # >18 short !074000,004000 C2 R1 # >18 short !074000,010000 C3 R1 # >18 short !074000,074000 TEST # # I shall assume it's ANDing the field with the first value and # comparing it with the second, and rewrite it as: # # >18 short&074000 000000 C1 R1 # >18 short&074000 004000 C2 R1 # >18 short&074000 010000 C3 R1 # >18 short&074000 074000 TEST # # as SVR3.1's "file" doesn't support anything of the "!074000,000000" # sort, nor does SunOS 4.x, so either it's something Intergraph added # in CLIX, or something AT&T added in SVR3.2 or later, or something # somebody else thought was a good idea; it's not documented in the # man page for this version of "magic", nor does it appear to be # implemented (at least not after I blew off the bogus code to turn # old-style "&"s into new-style "&"s, which just didn't work at all). # 0 short 0575 CLIPPER COFF executable (VAX #) >20 short 0407 (impure) >20 short 0410 (5.2 compatible) >20 short 0411 (pure) >20 short 0413 (demand paged) >20 short 0443 (target shared library) >12 long >0 not stripped >22 short >0 - version %d 0 short 0577 CLIPPER COFF executable >18 short&074000 000000 C1 R1 >18 short&074000 004000 C2 R1 >18 short&074000 010000 C3 R1 >18 short&074000 074000 TEST >20 short 0407 (impure) >20 short 0410 (pure) >20 short 0411 (separate I&D) >20 short 0413 (paged) >20 short 0443 (target shared library) >12 long >0 not stripped >22 short >0 - version %d >48 long&01 01 alignment trap enabled >52 byte 1 -Ctnc >52 byte 2 -Ctsw >52 byte 3 -Ctpw >52 byte 4 -Ctcb >53 byte 1 -Cdnc >53 byte 2 -Cdsw >53 byte 3 -Cdpw >53 byte 4 -Cdcb >54 byte 1 -Csnc >54 byte 2 -Cssw >54 byte 3 -Cspw >54 byte 4 -Cscb #4 string pipe CLIPPER instruction trace #4 string prof CLIPPER instruction profile file-5.46/magic/Magdir/clojure000664 023540 023540 00000002162 14015050424 017776 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # file: file(1) magic for Clojure # URL: https://clojure.org/ # From: Jason Felice 0 string/w #!\ /usr/bin/clj Clojure script text executable !:mime text/x-clojure 0 string/w #!\ /usr/local/bin/clj Clojure script text executable !:mime text/x-clojure 0 string/w #!\ /usr/bin/clojure Clojure script text executable !:mime text/x-clojure 0 string/w #!\ /usr/local/bin/clojure Clojure script text executable !:mime text/x-clojure 0 string/W #!/usr/bin/env\ clj Clojure script text executable !:mime text/x-clojure 0 string/W #!/usr/bin/env\ clojure Clojure script text executable !:mime text/x-clojure 0 string/W #!\ /usr/bin/env\ clj Clojure script text executable !:mime text/x-clojure 0 string/W #!\ /usr/bin/env\ clojure Clojure script text executable !:mime text/x-clojure 0 regex \^\\\(ns[[:space:]]+[a-z] Clojure module source text !:mime text/x-clojure 0 regex \^\\\(ns[[:space:]]+\\\^\\{: Clojure module source text !:mime text/x-clojure 0 regex \^\\\(defn-?[[:space:]] Clojure module source text !:mime text/x-clojure file-5.46/magic/Magdir/coff000664 023540 023540 00000020317 14714200551 017256 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: coff,v 1.15 2024/11/10 18:54:33 christos Exp $ # coff: file(1) magic for Common Object Files not specific to known cpu types or manufactures # # COFF # # by Joerg Jenderek at Oct 2015, Feb 2021, Mar 2024 # https://en.wikipedia.org/wiki/COFF # https://de.wikipedia.org/wiki/Common_Object_File_Format # http://www.delorie.com/djgpp/doc/coff/filhdr.html # https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#coff-file-header-object-and-image # https://formats.kaitai.io/uefi_te/index.html # Display COFF processor type, including MS COFF and PE/COFF 0 name display-coff-processor # PE/COFF, DJGPP, i386 COFF executable, MS Windows COFF Intel i386 object file (./intel) >0 uleshort 0x014c Intel i386 >0 uleshort 0x014d Intel i860 >0 uleshort 0x0160 MIPS R3000 (big-endian) >0 uleshort 0x0162 MIPS R3000 >0 uleshort 0x0166 MIPS R4000 >0 uleshort 0x0168 MIPS R10000 >0 uleshort 0x0169 MIPS WCE v2 >0 uleshort 0x0184 Alpha 32-bit >0 uleshort 0x01a2 Hitachi SH3 >0 uleshort 0x01a3 Hitachi SH3 DSP >0 uleshort 0x01a4 Hitachi SH4E >0 uleshort 0x01a6 Hitachi SH4 >0 uleshort 0x01a8 Hitachi SH5 >0 uleshort 0x01c0 ARMv4 >0 uleshort 0x01c2 ARMv4T >0 uleshort 0x01c4 ARMv7 >0 uleshort 0x01d3 Matsushita AM33 # executable (RISC System/6000 V3.1) or obj module (./ibm6000 v 1.15), not PE/COFF >0 uleshort 0x01df RISC System/6000 >0 uleshort 0x01f0 PowerPC 32-bit (little-endian) >0 uleshort 0x01f1 PowerPC 32-bit with FPU (little-endian) >0 uleshort 0x01f2 PowerPC 64-bit (big-endian) >0 uleshort 0x0200 Intel Itanium >0 uleshort 0x0266 MIPS16 >0 uleshort 0x0268 Motorola 68000 >0 uleshort 0x0284 Alpha 64-bit >0 uleshort 0x0290 PA-RISC >0 uleshort 0x0366 MIPS with FPU >0 uleshort 0x0466 MIPS16 with FPU # Hitachi SH big-endian COFF (./hitachi-sh), not PE/COFF >0 uleshort 0x0500 Hitachi SH (big-endian) >0 uleshort 0x0520 Tricore # Hitachi SH little-endian COFF (./hitachi-sh), not PE/COFF >0 uleshort 0x0550 Hitachi SH (little-endian) >0 uleshort 0x0601 PowerPC 32-bit (big-endian) # Windows CE 3.0 Common Executable Format, created by linkcef.exe with /MACHINE:CEF flag # https://web.archive.org/web/20000819035046/http://microsoft.com/windows/embedded/ce/downloads/cef.asp # https://web.archive.org/web/20000914080342/http://microsoft.com/windows/embedded/ce/developer/applications/appdevelopment/cef2.asp # https://web.archive.org/web/20021022055906/http://msdn.microsoft.com/library/en-us/dnce30/html/cef2.asp >0 uleshort 0x0cef Common Executable Format >0 uleshort 0x0ebc EFI byte code >0 uleshort 0x3a64 ARM64 (i386 ABI) >0 uleshort 0x5032 RISC-V 32-bit >0 uleshort 0x5064 RISC-V 64-bit >0 uleshort 0x5128 RISC-V 128-bit >0 uleshort 0x6232 LoongArch 32-bit >0 uleshort 0x6264 LoongArch 64-bit >0 uleshort 0x8664 x86-64 >0 uleshort 0x9041 Mitsubishi M32R >0 uleshort 0xa641 ARM64 (x86-64 ABI) >0 uleshort 0xa64e ARM64 (classic + x86-64 ABI) # PE/COFF ARM64 classic ABI, ARM COFF (./arm) >0 uleshort 0xaa64 ARM64 >0 uleshort 0xace1 OMNI VM (omniprox.dll) # Processor type CEE can be only in object files (created by older ilasm.exe with /OBJECT flag), not in PE executables >0 uleshort 0xc0ee COM+ Execution Engine >0 default x Unknown processor >>0 uleshort x 0x%04x # display name+variables+flags of Common Object Files Format (32bit) # Maybe used also in adi,att3b,clipper,hitachi-sh,hp,ibm6000,intel, # mips,motorola,msdos,osf1,sharc,varied.out,vax 0 name display-coff # test for unused flag bits (0x8000,x0080) in f_flags # flag bits (0x0800,0x0400,0x0200) now seems to be used in RISC System/6000 V3.1 >18 uleshort&0x8080 0 # skip DOCTOR.DAILY READER.NDA REDBOX.ROOT by looking for positive number of sections >>2 uleshort >0 # skip ega80woa.fnt svgafix.fnt HP3FNTS1.DAT HP3FNTS2.DAT INTRO.ACT LEARN.PIF by looking for low number of sections >>>2 uleshort <4207 # f_magic - magic number >>>>0 use display-coff-processor >>>>0 uleshort x COFF # F_EXEC flag bit >>>>18 leshort ^0x0002 object file !:mime application/x-coff !:ext o/obj/lib # no cof sample found #!:ext cof/o/obj/lib >>>>18 leshort &0x0002 executable #!:mime application/x-coffexec !:mime application/x-coff-executable # typically no file name suffix for executables !:ext / # F_RELFLG flag bit,static object >>>>18 leshort &0x0001 \b, no relocation info # F_LNNO flag bit >>>>18 leshort &0x0004 \b, no line number info # F_LSYMS flag bit >>>>18 leshort &0x0008 \b, stripped >>>>18 leshort ^0x0008 \b, not stripped # flags in other COFF versions #0x0010 F_FDPR_PROF #0x0020 F_FDPR_OPTI #0x0040 F_DSA # F_AR32WR flag bit #>>>>18 leshort &0x0100 \b, 32 bit little endian #0x1000 F_DYNLOAD #0x2000 F_SHROBJ #0x4000 F_LOADONLY # f_nscns - number of sections like: 1 2 3 4 5 7 8 9 11 12 15 16 19 20 21 22 26 30 36 40 42 56 80 89 96 124 >>>>2 uleshort <2 \b, %u section >>>>2 uleshort >1 \b, %u sections # f_symptr - symbol table pointer, only for not stripped # like: 0 0x7c 0xf4 0x104 0x182 0x1c2 0x1c6 0x468 0x948 0x416e 0x149a6 0x1c9d8 0x23a68 0x35120 0x7afa0 >>>>8 ulelong >0 \b, symbol offset=%#x # f_nsyms - number of symbols, only for not stripped # like: 0 2 7 9 10 11 20 35 41 63 71 80 105 146 153 158 170 208 294 572 831 1546 >>>>12 ulelong >0 \b, %d symbols # f_opthdr - optional header size. An object file should have a value of 0 # like: 72 (IBM\HH\HYPERHLP) >>>>16 uleshort >0 \b, optional header size %u # f_timdat - file time & date stamp >>>>4 ledate >0 \b, created %s # at offset 20 can be optional header, extra bytes FILHSZ-20 because # do not rely on sizeof(FILHDR) to give the correct size for header. # or first section header # additional variables for other COFF files >>>>16 uleshort =0 # most section names start with point character except samples created by "exotic" compilers # first section name s_name[8] like: .text .data .debug$S .drectve .testseg .rsrc .rsrc$01 .pad >>>>>(16.s+20) string x \b, 1st section name "%.8s" # physical address s_paddr like: 0 #>>>>>(16.s+28) lelong !0 \b, s_paddr %#8.8x # virtual address s_vaddr like: 0 #>>>>>(16.s+32) lelong !0 \b, s_vaddr %#8.8x # section size s_size #>>>>>(16.s+36) lelong x \b, s_size %#8.8x # file ptr to raw data for section s_scnpt #>>>>>(16.s+40) lelong x \b, s_scnpt %#8.8x # file ptr to relocation s_relptr like: 0 #>>>>>(16.s+44) lelong !0 \b, s_relptr %#8.8x # file ptr to gp histogram s_lnnoptr like: 0 #>>>>>(16.s+48) lelong !0 \b, s_lnnoptr %#8.8x # number of relocation entries s_nreloc like: 0 1 2 5 6 8 19h 26h 27h 38h 50h 5Fh 89h Dh 1Ch 69h A9h 1DCh 651h #>>>>>(16.s+52) uleshort x \b, s_nreloc %#4.4x # number of gp histogram entries s_nlnno like: 0 #>>>>>(16.s+54) uleshort !0 \b, s_nlnno %#4.4x # flags s_flags #>>>>>(16.s+56) lelong x \b, s_flags %#8.8x # second section name s_name[8] like: .bss .data .debug$S .rsrc$01 >>>>2 uleshort >1 >>>>>(16.s+60) string x \b, 2nd section name "%.8s" # >20 beshort 0407 (impure) # >20 beshort 0410 (pure) # >20 beshort 0413 (demand paged) # >20 beshort 0421 (standalone) # >22 leshort >0 - version %d # >168 string .lowmem Apple toolbox # PowerPC COFF object file or executable 0 leshort 0x01f0 >16 leshort 0 >>0 use display-coff # can be created by: LINK.EXE /MACHINE:powerpc /ROM >16 leshort !0 >>18 leshort &0x0002 >>>20 leshort 0x010b >>>>0 use display-coff 0 leshort 0x01f1 >16 leshort 0 >>0 use display-coff 0 leshort 0x01f2 >16 leshort 0 >>0 use display-coff 0 leshort 0x0601 >16 leshort 0 >>0 use display-coff # can be created by: LINK.EXE /MACHINE:MPPC /ROM >16 leshort !0 >>18 leshort &0x0002 >>>20 leshort 0x010b >>>>0 use display-coff 0 name display-subsystem >0 ubyte 0 unknown >0 ubyte 1 native >0 ubyte 2 windows_gui >0 ubyte 3 windows_cui >0 ubyte 7 posix_cui >0 ubyte 9 windows_ce_gui >0 ubyte 10 efi_application >0 ubyte 11 efi_boot_service_driver >0 ubyte 12 efi_runtime_driver >0 ubyte 13 efi_rom >0 ubyte 14 xbox >0 ubyte 16 windows_boot-application >0 default x Unknown subsystem >>0 ubyte x %#x # https://formats.kaitai.io/uefi_te/index.html 0 string VZ TE (Terse Executable) file >2 use display-coff-processor >4 byte x \b, sections %d >5 use display-subsystem >6 uleshort x \b, stripped-size %u >8 ulelong x \b, entry %#x >12 ulelong x \b, base_of_code %#x >16 ulequad x \b, image_base %#llx file-5.46/magic/Magdir/commands000664 023540 023540 00000017205 14714162563 020156 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: commands,v 1.77 2024/11/10 16:55:15 christos Exp $ # commands: file(1) magic for various shells and interpreters # #0 string/w : shell archive or script for antique kernel text 0 string/fwt #!\ /bin/sh POSIX shell script text executable !:mime text/x-shellscript 0 string/fwb #!\ /bin/sh POSIX shell script executable (binary data) !:mime text/x-shellscript >10 string #\040This\040script\040was\040generated\040using\040Makeself \b, self-executable archive >>53 string x \b, Makeself %s 0 string/fwt #!\ /bin/csh C shell script text executable !:mime text/x-shellscript # korn shell magic, sent by George Wu, gwu@clyde.att.com 0 string/fwt #!\ /bin/ksh Korn shell script text executable !:mime text/x-shellscript 0 string/fwb #!\ /bin/ksh Korn shell script executable (binary data) !:mime text/x-shellscript 0 string/fwt #!\ /bin/tcsh Tenex C shell script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/tcsh Tenex C shell script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/local/tcsh Tenex C shell script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/local/bin/tcsh Tenex C shell script text executable !:mime text/x-shellscript # # zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson) 0 string/fwt #!\ /bin/zsh Paul Falstad's zsh script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/zsh Paul Falstad's zsh script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/env\ zsh Paul Falstad's zsh script text executable !:mime text/x-shellscript 0 string/fwt #!\ /bin/ash Neil Brown's ash script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/ash Neil Brown's ash script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/local/bin/ash Neil Brown's ash script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/local/bin/ae Neil Brown's ae script text executable !:mime text/x-shellscript 0 string/fwt #!\ /bin/nawk new awk script text executable !:mime text/x-nawk 0 string/fwt #!\ /usr/bin/nawk new awk script text executable !:mime text/x-nawk 0 string/fwt #!\ /usr/local/bin/nawk new awk script text executable !:mime text/x-nawk 0 string/fwt #!\ /bin/gawk GNU awk script text executable !:mime text/x-gawk 0 string/wt #!\ /usr/bin/gawk GNU awk script text executable !:mime text/x-gawk 0 string/fwt #!\ /usr/local/bin/gawk GNU awk script text executable !:mime text/x-gawk # 0 string/fwt #!\ /bin/awk awk script text executable !:mime text/x-awk 0 string/fwt #!\ /usr/bin/awk awk script text executable !:mime text/x-awk 0 regex/4096 =^[\040\t\f\r\n]{0,100}BEGIN[\040\t\f\r\n]{0,100}[{] awk or perl script text # AT&T Bell Labs' Plan 9 shell 0 string/fwt #!\ /bin/rc Plan 9 rc shell script text executable # bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de) 0 string/fwt #!\ /bin/bash Bourne-Again shell script text executable !:mime text/x-shellscript 0 string/fwb #!\ /bin/bash Bourne-Again shell script executable (binary data) !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/bash Bourne-Again shell script text executable !:mime text/x-shellscript 0 string/fwb #!\ /usr/bin/bash Bourne-Again shell script executable (binary data) !:mime text/x-shellscript 0 string/fwt #!\ /usr/local/bash Bourne-Again shell script text executable !:mime text/x-shellscript 0 string/fwb #!\ /usr/local/bash Bourne-Again shell script executable (binary data) !:mime text/x-shellscript 0 string/fwt #!\ /usr/local/bin/bash Bourne-Again shell script text executable !:mime text/x-shellscript 0 string/fwb #!\ /usr/local/bin/bash Bourne-Again shell script executable (binary data) !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/env\ bash Bourne-Again shell script text executable !:mime text/x-shellscript 0 string/fwt #!\ /bin/env\ bash Bourne-Again shell script text executable !:mime text/x-shellscript 0 string/fwt #!\ /bin/dash Dash shell script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/dash Dash shell script text executable !:mime text/x-shellscript # Fish shell magic # From: Benjamin Lowry 0 string/fwt #!\ /usr/local/bin/fish fish shell script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/fish fish shell script text executable !:mime text/x-shellscript 0 string/fwt #!\ /usr/bin/env\ fish fish shell script text executable !:mime text/x-shellscript 0 search/1/fwt #!\ /usr/bin/tclsh Tcl/Tk script text executable !:mime text/x-tcl 0 search/1/fwt #!\ /usr/bin/texlua LuaTex script text executable !:mime text/x-luatex 0 search/1/fwt #!\ /usr/bin/luatex LuaTex script text executable !:mime text/x-luatex 0 search/1/fwt #!\ /usr/bin/stap Systemtap script text executable !:mime text/x-systemtap 0 search/1/fwt #!\ /sbin/openrc-run OpenRC script text executable !:mime text/x-shellscript # From: Kylie McClain # Type: execline scripts # URL: https://skarnet.org/software/execline/ 0 string/fwt #!\ /command/execlineb execline script text executable !:mime text/x-execline 0 string/fwt #!\ /bin/execlineb execline script text executable !:mime text/x-execline 0 string/fwt #!\ /usr/bin/execlineb execline script text executable !:mime text/x-execline 0 string/fwt #!\ /usr/bin/env\ execlineb execline script text executable !:mime text/x-execline 0 string #! >0 regex \^#!.*/bin/execlineb([[:space:]].*)*$ execline script text executable !:mime text/x-execline 0 string #!/nix/store/ >&-11 string/T x a %s script text executable # PHP scripts # Ulf Harnhammar 0 search/1/c = 0 string =5 regex [\ \n] >>6 string /*\ Smarty\ version Smarty compiled template >>>24 regex [0-9.]+ \b, version %s !:mime text/x-php 0 string Zend\x00 PHP script Zend Optimizer data # From: Anatol Belski 0 string OPCACHE >7 ubyte 0 PHP opcache filecache data 0 search/64 --TEST-- >16 search/64 --FILE-- >24 search/8192 --EXPECT PHP core test !:ext phpt # https://www.php.net/manual/en/phar.fileformat.signature.php -4 string GBMB PHP phar archive >-8 ubyte 0x1 with MD5 signature !:ext phar >-8 ubyte 0x2 with SHA1 signature !:ext phar >-8 ubyte 0x3 with SHA256 signature !:ext phar >-8 ubyte 0x4 with SHA512 signature !:ext phar >-8 ubyte 0x10 with OpenSSL signature !:ext phar >-8 ubyte 0x11 with OpenSSL SHA256 signature !:ext phar >-8 ubyte 0x12 with OpenSSL SHA512 signature !:ext phar 0 string/t $! DCL command file # Type: Pdmenu # URL: https://packages.debian.org/pdmenu # From: Edward Betts 0 string #!/usr/bin/pdmenu Pdmenu configuration file text # From Danny Weldon 0 string \x0b\x13\x08\x00 >0x04 uleshort <4 ksh byte-code version %d # From: arno # mozilla xpconnect typelib # see https://www.mozilla.org/scriptable/typelib_file.html 0 string XPCOM\nTypeLib\r\n\032 XPConnect Typelib >0x10 byte x version %d >>0x11 byte x \b.%d 0 string/fwt #!\ /usr/bin/env\ runghc GHC script executable 0 string/fwt #!\ /usr/bin/env\ runhaskell Haskell script executable 0 string/fwt #!\ /usr/bin/env\ julia Julia script executable file-5.46/magic/Magdir/communications000664 023540 023540 00000001525 14015050424 021365 0ustar00christoschristos000000 000000 #---------------------------------------------------------------------------- # $File: communications,v 1.5 2009/09/19 16:28:08 christos Exp $ # communication # TTCN is the Tree and Tabular Combined Notation described in ISO 9646-3. # It is used for conformance testing of communication protocols. # Added by W. Borgert . 0 string $Suite TTCN Abstract Test Suite >&1 string $SuiteId >>&1 string >\n %s >&2 string $SuiteId >>&1 string >\n %s >&3 string $SuiteId >>&1 string >\n %s # MSC (message sequence charts) are a formal description technique, # described in ITU-T Z.120, mainly used for communication protocols. # Added by W. Borgert . 0 string mscdocument Message Sequence Chart (document) 0 string msc Message Sequence Chart (chart) 0 string submsc Message Sequence Chart (subchart) file-5.46/magic/Magdir/compress000664 023540 023540 00000036550 14713772170 020214 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: compress,v 1.96 2024/11/09 23:47:04 christos Exp $ # compress: file(1) magic for pure-compression formats (no archives) # # compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. # # Formats for various forms of compressed data # Formats for "compress" proper have been moved into "compress.c", # because it tries to uncompress it to figure out what's inside. # standard unix compress 0 string \037\235 compress'd data !:mime application/x-compress !:apple LZIVZIVU !:ext Z >2 byte&0x80 >0 block compressed >2 byte&0x1f x %d bits # gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver) # URL: https://en.wikipedia.org/wiki/Gzip # Reference: https://tools.ietf.org/html/rfc1952 # Update: Joerg Jenderek, Apr 2019, Dec 2022 # Edited by Chris Chittleborough , March 2002 # * Original filename is only at offset 10 if "extra field" absent # * Produce shorter output - notably, only report compression methods # other than 8 ("deflate", the only method defined in RFC 1952). # Note: find defs -iname '*.trid.xml' -exec grep -q '1F8B08' {} \; -ls # TODO: # FBR Blueberry FlashBack screen Record https://www.flashbackrecorder.com/ # KPR KOffice/Calligra KPresenter application/x-kpresenter # KPT KOffice/Calligra KPresenter template? application/x-kpresenter # SAV Diggles Saved Game File http://www.innonics.com # SAV FarCry (demo) saved game http://www.farcry-thegame.com # DAT ZOAGZIP game data format http://en.wikipedia.org/wiki/SD_Gundam_Capsule_Fighter 0 string \037\213 # to display gzip compressed (strength=100=2*50) before other (strength=50)? #!:strength * 2 # no FNAME and FCOMMENT bit implies no file name/comment. That means only binary >3 byte&0x18 =0 # For binary gzipped no ASCII text should occur # mcd-monu-cad.trid.xml >>10 string MCD Monu-Cad Drawing, Component or Font #>>36 string Created\ with\ MONU-CAD #!:mime application/octet-stream # http://fileformats.archiveteam.org/wiki/Monu-CAD # http://www.monucad.com/downloads/FullDemo-2005.EXE # /HANDS96.MCC Component # /DEMO_DD01.MCD Drawing # /MCALF020.FNT Font !:ext mcc/mcd/fnt # http://www.generalcadd.com >>10 string GXD General CADD, Drawing or Component #!:mime application/octet-stream # /gxc/BUILDINGEDGE.gxc Component # /gxd/HOCKETT-STPAUL-WRHSE.gxd Drawing # /gxd/POWERLAND-MILL-ADD-11.gxd Drawing v9.1.06 !:ext gxc/gxd #>>>13 ubyte 0 \b, version 0 >>>13 string 09 \b, version 9 # other gzipped binary like gzipped tar, VirtualBox extension package,... >>10 default x gzip compressed data !:mime application/gzip >>>0 use gzip-info # size of the original (uncompressed) input data modulo 2^32 # TODO: check for GXD MCD cad the reported size >>>-4 ulelong x \b, original size modulo 2^32 %u # gzipped TAR or VirtualBox extension package #!:mime application/x-compressed-tar #!:mime application/x-virtualbox-vbox-extpack # https://www.w3.org/TR/SVG/mimereg.html #!:mime image/svg+xml-compressed # zlib.3.gz # microcode-20180312.tgz # tpz same as tgz # lua-md5_1.2-1_i386_i486.ipk https://en.wikipedia.org/wiki/Opkg # Oracle_VM_VirtualBox_Extension_Pack-5.0.12-104815.vbox-extpack # trees.blend http://fileformats.archiveteam.org/wiki/BLEND # 2020-07-19-Note-16-24.xoj https://xournal.sourceforge.net/manual.html # MYgnucash-gz.gnucash https://wiki.gnucash.org/wiki/GnuCash_XML_format # text-rotate.dia https://en.wikipedia.org/wiki/Dia_(software) # MYrdata.RData https://en.wikipedia.org/wiki/R_(programming_language) !:ext gz/tgz/tpz/ipk/vbox-extpack/svgz/blend/dia/gnucash/rdata/xoj # FNAME/FCOMMENT bit implies file name/comment as iso-8859-1 text >3 byte&0x18 >0 gzip compressed data !:mime application/gzip # gzipped tar, gzipped Abiword document #!:mime application/x-compressed-tar #!:mime application/x-abiword-compressed #!:mime image/image/svg+xml-compressed # kleopatra_splashscreen.svgz gzipped .svg # RSI-Mega-Demo_Disk1.adz gzipped .adf http://fileformats.archiveteam.org/wiki/ADF_(Amiga) # PostbankTest.kmy gzipped XML https://docs.kde.org/stable5/en/kmymoney/kmymoney/details.formats.compressed.html # Logo.xcfgz gzipped .xcf http://fileformats.archiveteam.org/wiki/XCF !:ext gz/tgz/tpz/zabw/svgz/adz/kmy/xcfgz >>0 use gzip-info # size of the original (uncompressed) input data modulo 2^32 >>-4 ulelong x \b, original size modulo 2^32 %u # display information of gzip compressed files 0 name gzip-info #>2 byte x THIS iS GZIP >2 byte <8 \b, reserved method >2 byte >8 \b, unknown method >3 byte &0x01 \b, ASCII >3 byte &0x02 \b, has CRC >3 byte &0x04 \b, extra field >3 byte&0xC =0x08 >>10 string x \b, was "%s" >3 byte &0x10 \b, has comment >3 byte &0x20 \b, encrypted >4 ledate >0 \b, last modified: %s >8 byte 2 \b, max compression >8 byte 4 \b, max speed >9 byte =0x00 \b, from FAT filesystem (MS-DOS, OS/2, NT) >9 byte =0x01 \b, from Amiga >9 byte =0x02 \b, from VMS >9 byte =0x03 \b, from Unix >9 byte =0x04 \b, from VM/CMS >9 byte =0x05 \b, from Atari >9 byte =0x06 \b, from HPFS filesystem (OS/2, NT) >9 byte =0x07 \b, from MacOS >9 byte =0x08 \b, from Z-System >9 byte =0x09 \b, from CP/M >9 byte =0x0A \b, from TOPS/20 >9 byte =0x0B \b, from NTFS filesystem (NT) >9 byte =0x0C \b, from QDOS >9 byte =0x0D \b, from Acorn RISCOS # size of the original (uncompressed) input data modulo 2^32 #>-4 ulelong x \b, original size modulo 2^32 %u #ERROR: line 114: non zero offset 1048572 at level 1 # packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis 0 string \037\036 packed data !:mime application/octet-stream !:ext z >2 belong >1 \b, %d characters originally >2 belong =1 \b, %d character originally # # This magic number is byte-order-independent. 0 short 0x1f1f old packed data !:mime application/octet-stream # XXX - why *two* entries for "compacted data", one of which is # byte-order independent, and one of which is byte-order dependent? # 0 short 0x1fff compacted data !:mime application/octet-stream # This string is valid for SunOS (BE) and a matching "short" is listed # in the Ultrix (LE) magic file. 0 string \377\037 compacted data !:mime application/octet-stream 0 short 0145405 huf output !:mime application/octet-stream # bzip2 0 string BZh bzip2 compressed data !:mime application/x-bzip2 !:ext bz2 >3 byte >47 \b, block size = %c00k # bzip a block-sorting file compressor # by Julian Seward and others 0 string BZ0 bzip compressed data !:mime application/x-bzip >3 byte >47 \b, block size = %c00k # lzip 0 string LZIP lzip compressed data !:mime application/x-lzip !:ext lz >4 byte x \b, version: %d # squeeze and crunch # Michael Haardt 0 beshort 0x76FF squeezed data, >4 string x original name %s 0 beshort 0x76FE crunched data, >2 string x original name %s 0 beshort 0x76FD LZH compressed data, >2 string x original name %s # Freeze 0 string \037\237 frozen file 2.1 0 string \037\236 frozen file 1.0 (or gzip 0.5) # SCO compress -H (LZH) 0 string \037\240 SCO compress -H (LZH) data # European GSM 06.10 is a provisional standard for full-rate speech # transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse # excitation/long term prediction) coding at 13 kbit/s. # # There's only a magic nibble (4 bits); that nibble repeats every 33 # bytes. This isn't suited for use, but maybe we can use it someday. # # This will cause very short GSM files to be declared as data and # mismatches to be declared as data too! #0 byte&0xF0 0xd0 data #>33 byte&0xF0 0xd0 #>66 byte&0xF0 0xd0 #>99 byte&0xF0 0xd0 #>132 byte&0xF0 0xd0 GSM 06.10 compressed audio # lzop from 0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data !:ext lzo !:mime application/x-lzop >9 beshort <0x0940 >>9 byte&0xf0 =0x00 - version 0. >>9 beshort&0x0fff x \b%03x, >>13 byte 1 LZO1X-1, >>13 byte 2 LZO1X-1(15), >>13 byte 3 LZO1X-999, ## >>22 bedate >0 last modified: %s, >>14 byte =0x00 os: MS-DOS >>14 byte =0x01 os: Amiga >>14 byte =0x02 os: VMS >>14 byte =0x03 os: Unix >>14 byte =0x05 os: Atari >>14 byte =0x06 os: OS/2 >>14 byte =0x07 os: MacOS >>14 byte =0x0A os: Tops/20 >>14 byte =0x0B os: WinNT >>14 byte =0x0E os: Win32 >9 beshort >0x0939 >>9 byte&0xf0 =0x00 - version 0. >>9 byte&0xf0 =0x10 - version 1. >>9 byte&0xf0 =0x20 - version 2. >>9 beshort&0x0fff x \b%03x, >>15 byte 1 LZO1X-1, >>15 byte 2 LZO1X-1(15), >>15 byte 3 LZO1X-999, ## >>25 bedate >0 last modified: %s, >>17 byte =0x00 os: MS-DOS >>17 byte =0x01 os: Amiga >>17 byte =0x02 os: VMS >>17 byte =0x03 os: Unix >>17 byte =0x05 os: Atari >>17 byte =0x06 os: OS/2 >>17 byte =0x07 os: MacOS >>17 byte =0x0A os: Tops/20 >>17 byte =0x0B os: WinNT >>17 byte =0x0E os: Win32 # 4.3BSD-Quasijarus Strong Compression # https://minnie.tuhs.org/Quasijarus/compress.html 0 string \037\241 Quasijarus strong compressed data # From: Cory Dikkers 0 string XPKF Amiga xpkf.library compressed data 0 string PP11 Power Packer 1.1 compressed data 0 string PP20 Power Packer 2.0 compressed data, >4 belong 0x09090909 fast compression >4 belong 0x090A0A0A mediocre compression >4 belong 0x090A0B0B good compression >4 belong 0x090A0C0C very good compression >4 belong 0x090A0C0D best compression # 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at) # https://www.7-zip.org or DOC/7zFormat.txt # 0 string 7z\274\257\047\034 7-zip archive data, >6 byte x version %d >7 byte x \b.%d !:mime application/x-7z-compressed !:ext 7z/cb7 0 name lzma LZMA compressed data, !:mime application/x-lzma !:ext lzma >5 lequad =0xffffffffffffffff streamed >5 lequad !0xffffffffffffffff non-streamed, size %lld # Type: LZMA 0 lelong&0xffffff =0x5d >12 leshort 0xff >>0 use lzma >12 leshort 0 >>0 use lzma # http://tukaani.org/xz/xz-file-format.txt 0 ustring \xFD7zXZ\x00 XZ compressed data, checksum !:strength * 2 !:mime application/x-xz !:ext xz >7 byte&0xf 0x0 NONE >7 byte&0xf 0x1 CRC32 >7 byte&0xf 0x4 CRC64 >7 byte&0xf 0xa SHA-256 # https://github.com/ckolivas/lrzip/blob/master/doc/magic.header.txt 0 string LRZI LRZIP compressed data !:mime application/x-lrzip >4 byte x - version %d >5 byte x \b.%d >22 byte 1 \b, encrypted # https://fastcompression.blogspot.fi/2013/04/lz4-streaming-format-final.html 0 lelong 0x184d2204 LZ4 compressed data (v1.4+) !:mime application/x-lz4 !:ext lz4 # Added by osm0sis@xda-developers.com 0 lelong 0x184c2103 LZ4 compressed data (v1.0-v1.3) !:mime application/x-lz4 0 lelong 0x184c2102 LZ4 compressed data (v0.1-v0.9) !:mime application/x-lz4 # Zstandard/LZ4 skippable frames # https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md 0 lelong&0xFFFFFFF0 0x184D2A50 >(4.l+8) indirect x # Zstandard Dictionary ID subroutine 0 name zstd-dictionary-id # Single Segment = True >0 byte &0x20 \b, Dictionary ID: >>0 byte&0x03 0 None >>0 byte&0x03 1 >>>1 byte x %u >>0 byte&0x03 2 >>>1 leshort x %u >>0 byte&0x03 3 >>>1 lelong x %u # Single Segment = False >0 byte ^0x20 \b, Dictionary ID: >>0 byte&0x03 0 None >>0 byte&0x03 1 >>>2 byte x %u >>0 byte&0x03 2 >>>2 leshort x %u >>0 byte&0x03 3 >>>2 lelong x %u # Zstandard compressed data # https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md 0 lelong 0xFD2FB522 Zstandard compressed data (v0.2) !:mime application/zstd !:ext zst 0 lelong 0xFD2FB523 Zstandard compressed data (v0.3) !:mime application/zstd !:ext zst 0 lelong 0xFD2FB524 Zstandard compressed data (v0.4) !:mime application/zstd !:ext zst 0 lelong 0xFD2FB525 Zstandard compressed data (v0.5) !:mime application/zstd !:ext zst 0 lelong 0xFD2FB526 Zstandard compressed data (v0.6) !:mime application/zstd !:ext zst 0 lelong 0xFD2FB527 Zstandard compressed data (v0.7) !:mime application/zstd !:ext zst >4 use zstd-dictionary-id 0 lelong 0xFD2FB528 Zstandard compressed data (v0.8+) !:mime application/zstd !:ext zst >4 use zstd-dictionary-id # https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md 0 lelong 0xEC30A437 Zstandard dictionary !:mime application/x-std-dictionary >4 lelong x (ID %u) # AFX compressed files (Wolfram Kleff) 2 string -afx- AFX compressed file data # Supplementary magic data for the file(1) command to support # rzip(1). The format is described in magic(5). # # Copyright (C) 2003 by Andrew Tridgell. You may do whatever you want with # this file. # 0 string RZIP rzip compressed data >4 byte x - version %d >5 byte x \b.%d >6 belong x (%d bytes) 0 string ArC\x01 FreeArc archive # Valve Pack (VPK) files # https://developer.valvesoftware.com/wiki/VPK_(file_format)#File_Format 0 lelong 0x55aa1234 Valve Pak file >0x4 lelong x \b, version %u >0x8 lelong x \b, tree size %u >0x12 lelong x \b, file data size %u >0x16 lelong x \b, archive MD5 size %u >0x20 lelong x \b, other MD5 size %u >0x24 lelong x \b, signature size %u # Snappy framing format # https://code.google.com/p/snappy/source/browse/trunk/framing_format.txt 0 string \377\006\0\0sNaPpY snappy framed data !:mime application/x-snappy-framed # qpress, https://www.quicklz.com/ 0 string qpress10 qpress compressed data !:mime application/x-qpress # Zlib https://www.ietf.org/rfc/rfc6713.txt 0 string/b x >0 beshort%31 =0 >>0 byte&0xf =8 >>>0 byte&0x80 =0 zlib compressed data !:mime application/zlib # BWC compression 0 string BWC >3 byte 0 BWC compressed data # UCL compression 0 bequad 0x00e955434cff011a UCL compressed data # Softlib archive 0 string SLIB Softlib archive >4 leshort x \b, version %d >6 leshort x (contains %d files) # URL: https://github.com/lzfse/lzfse/blob/master/src/lzfse_internal.h#L276 # From: Eric Hall 0 string bvx- lzfse encoded, no compression 0 string bvx1 lzfse compressed, uncompressed tables 0 string bvx2 lzfse compressed, compressed tables 0 string bvxn lzfse encoded, lzvn compressed # https://support-docs.illumina.com/SW/ORA_Format_Specification/Content/SW/ORA/ORAFormatSpecification.htm 0 uleshort 0x7c49 >2 lelong 0x80 ORA FASTQ compressed file >>6 ulelong x \b, DNA size %u >>10 ulelong x \b, read names size %u >>14 ulelong x \b, quality buffer 1 size %u >>18 ulelong x \b, quality buffer 2 size %u >>22 ulelong x \b, sequence buffer size %u >>26 ulelong x \b, N-position buffer size %u >>30 ulelong x \b, crypto buffer size %u >>34 ulelong x \b, misc buffer 1 size %u >>38 ulelong x \b, misc buffer 2 size %u >>42 ulelong x \b, flags %#x >>46 lelong x \b, read size %d >>50 lelong x \b, number of reads %d >>54 leshort x \b, version %d # https://github.com/kspalaiologos/bzip3/blob/master/doc/file_format.md 0 string/b BZ3v1 bzip3 compressed data >5 ulelong x \b, blocksize %u # https://support-docs.illumina.com/SW/ORA_Format_Specification/Content/\ # SW/ORA/ORAFormatSpecification.htm # From Guillaume Rizk 0 short =0x7C49 DRAGEN ORA file, >-261 short =0x7C49 with metadata: >-125 u8 x NB reads: %llu, >-109 u8 x NB bases: %llu. >-219 u4&0x02 2 File contains interleaved paired reads # https://github.com/xamarin/xamarin-android/pull/4686 0 string XALZ Xamarin LZ4-compressed assembly >8 ulelong x \b, uncompressed size %u file-5.46/magic/Magdir/console000664 023540 023540 00000135552 14714167601 020023 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: console,v 1.80 2024/11/09 23:55:02 christos Exp $ # Console game magic # Toby Deshane # ines: file(1) magic for Marat's iNES Nintendo Entertainment System ROM dump format # Updated by David Korth # References: # - https://wiki.nesdev.com/w/index.php/INES # - https://wiki.nesdev.com/w/index.php/NES_2.0 # Common header for iNES, NES 2.0, and Wii U iNES. 0 name nes-rom-image-ines >7 byte&0x0C =0x8 (NES 2.0) >4 byte x \b: %ux16k PRG >5 byte x \b, %ux8k CHR >6 byte&0x08 =0x8 [4-Scr] >6 byte&0x09 =0x0 [H-mirror] >6 byte&0x09 =0x1 [V-mirror] >6 byte&0x02 =0x2 [SRAM] >6 byte&0x04 =0x4 [Trainer] >7 byte&0x03 =0x2 [PC10] >7 byte&0x03 =0x1 [VS] >>7 byte&0x0C =0x8 # NES 2.0: VS PPU >>>13 byte&0x0F =0x0 \b, RP2C03B >>>13 byte&0x0F =0x1 \b, RP2C03G >>>13 byte&0x0F =0x2 \b, RP2C04-0001 >>>13 byte&0x0F =0x3 \b, RP2C04-0002 >>>13 byte&0x0F =0x4 \b, RP2C04-0003 >>>13 byte&0x0F =0x5 \b, RP2C04-0004 >>>13 byte&0x0F =0x6 \b, RP2C03B >>>13 byte&0x0F =0x7 \b, RP2C03C >>>13 byte&0x0F =0x8 \b, RP2C05-01 >>>13 byte&0x0F =0x9 \b, RP2C05-02 >>>13 byte&0x0F =0xA \b, RP2C05-03 >>>13 byte&0x0F =0xB \b, RP2C05-04 >>>13 byte&0x0F =0xC \b, RP2C05-05 # TODO: VS protection hardware? >>7 byte x \b] # NES 2.0-specific flags. >7 byte&0x0C =0x8 >>12 byte&0x03 =0x0 [NTSC] >>12 byte&0x03 =0x1 [PAL] >>12 byte&0x02 =0x2 [NTSC+PAL] # Standard iNES ROM header. 0 string NES\x1A NES ROM image (iNES) !:mime application/x-nes-rom >0 use nes-rom-image-ines # Wii U Virtual Console iNES ROM header. 0 belong 0x4E455300 NES ROM image (Wii U Virtual Console) !:mime application/x-nes-rom >0 use nes-rom-image-ines #------------------------------------------------------------------------------ # unif: file(1) magic for UNIF-format Nintendo Entertainment System ROM images # Reference: https://wiki.nesdev.com/w/index.php/UNIF # From: David Korth # # NOTE: The UNIF format uses chunks instead of a fixed header, # so most of the data isn't easily parseable. # 0 string UNIF >4 lelong <16 NES ROM image (UNIF v%d format) !:mime application/x-nes-rom #------------------------------------------------------------------------------ # fds: file(1) magic for Famicom Disk System disk images # Reference: https://wiki.nesdev.com/w/index.php/Family_Computer_Disk_System#.FDS_format # From: David Korth # TODO: Check "Disk info block" and get info from that in addition to the optional header. # Disk info block. (block 1) 0 name nintendo-fds-disk-info-block >23 byte !1 FMC- >23 byte 1 FSC- >16 string x \b%.3s >15 ubyte x \b, mfr %02X >20 ubyte x (Rev.%02u) # Headered version. 0 string FDS\x1A >0x11 string *NINTENDO-HVC* Famicom Disk System disk image: !:mime application/x-fds-disk >>0x10 use nintendo-fds-disk-info-block >4 byte 1 (%u side) >4 byte !1 (%u sides) # Unheadered version. 1 string *NINTENDO-HVC* Famicom Disk System disk image: !:mime application/x-fds-disk >0 use nintendo-fds-disk-info-block #------------------------------------------------------------------------------ # tnes: file(1) magic for TNES-format Nintendo Entertainment System ROM images # Used by Nintendo 3DS NES Virtual Console games. # From: David Korth # 0 string TNES NES ROM image (Nintendo 3DS Virtual Console) !:mime application/x-nes-rom >4 byte 100 \b: FDS, >>0x2010 use nintendo-fds-disk-info-block >4 byte !100 \b: TNES mapper %u >>5 byte x \b, %ux8k PRG >>6 byte x \b, %ux8k CHR >>7 byte&0x08 =1 [WRAM] >>8 byte&0x09 =1 [H-mirror] >>8 byte&0x09 =2 [V-mirror] >>8 byte&0x02 =3 [VRAM] #------------------------------------------------------------------------------ # gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format # Reference: http://gbdev.gg8.se/wiki/articles/The_Cartridge_Header # # Title (16 chars for GB; 15 chars for CGB) 0 name gameboy-title >0x143 byte&0x80 0x80 >>0x134 string >\0 \b: "%.15s" >0x143 byte&0x80 !0x80 >>0x134 string >\0 \b: "%.16s" >0x14c byte x (Rev.%02u) # Machine type (SGB, CGB, SGB+CGB) # Old licensee code 0x33 is required for SGB, but not CGB. 0 name gameboy-machine-type >0x14b byte 0x33 >>0x146 byte 0x03 >>>0x143 byte&0x80 0x80 [SGB+CGB] >>>0x143 byte&0x80 !0x80 [SGB] >>0x146 byte !0x03 >>>0x143 byte&0xC0 0x80 [CGB] >>>0x143 byte&0xC0 0xC0 [CGB ONLY] >0x14b byte !0x33 >>0x143 byte&0xC0 0x80 [CGB] >>0x143 byte&0xC0 0xC0 [CGB ONLY] # Mapper 0 name gameboy-mapper >0 byte 0x00 [ROM ONLY] >0 byte 0x01 [MBC1] >0 byte 0x02 [MBC1+RAM] >0 byte 0x03 [MBC1+RAM+BATT] >0 byte 0x05 [MBC2] >0 byte 0x06 [MBC2+BATTERY] >0 byte 0x08 [ROM+RAM] >0 byte 0x09 [ROM+RAM+BATTERY] >0 byte 0x0B [MMM01] >0 byte 0x0C [MMM01+SRAM] >0 byte 0x0D [MMM01+SRAM+BATT] >0 byte 0x0F [MBC3+TIMER+BATT] >0 byte 0x10 [MBC3+TIMER+RAM+BATT] >0 byte 0x11 [MBC3] >0 byte 0x12 [MBC3+RAM] >0 byte 0x13 [MBC3+RAM+BATT] >0 byte 0x19 [MBC5] >0 byte 0x1A [MBC5+RAM] >0 byte 0x1B [MBC5+RAM+BATT] >0 byte 0x1C [MBC5+RUMBLE] >0 byte 0x1D [MBC5+RUMBLE+SRAM] >0 byte 0x1E [MBC5+RUMBLE+SRAM+BATT] >0 byte 0xFC [Pocket Camera] >0 byte 0xFD [Bandai TAMA5] >0 byte 0xFE [Hudson HuC-3] >0 byte 0xFF [Hudson HuC-1] # ROM size 0 name gameboy-rom-size >0 byte 0 \b, ROM: 256Kbit >0 byte 1 \b, ROM: 512Kbit >0 byte 2 \b, ROM: 1Mbit >0 byte 3 \b, ROM: 2Mbit >0 byte 4 \b, ROM: 4Mbit >0 byte 5 \b, ROM: 8Mbit >0 byte 6 \b, ROM: 16Mbit >0 byte 7 \b, ROM: 32Mbit >0 byte 0x52 \b, ROM: 9Mbit >0 byte 0x53 \b, ROM: 10Mbit >0 byte 0x54 \b, ROM: 12Mbit # RAM size 0 name gameboy-ram-size >0 byte 1 \b, RAM: 16Kbit >0 byte 2 \b, RAM: 64Kbit >0 byte 3 \b, RAM: 256Kbit >0 byte 4 \b, RAM: 1Mbit >0 byte 5 \b, RAM: 512Kbit # Game Boy (Color) 0x104 bequad 0xCEED6666CC0D000B >0x143 byte&0x80 0x80 Game Boy Color ROM image !:mime application/x-gameboy-color-rom >0x143 byte&0x80 !0x80 Game Boy ROM image !:mime application/x-gameboy-rom >0 use gameboy-title >0 use gameboy-machine-type >0x147 use gameboy-mapper >0x148 use gameboy-rom-size >0x149 use gameboy-ram-size # Analogue Pocket 0x104 bequad 0x0110CEEF000044AA >0 byte x Analogue Pocket ROM image !:mime application/x-analogue-pocket-rom >0 use gameboy-title >0 use gameboy-machine-type >0x147 use gameboy-mapper >0x148 use gameboy-rom-size >0x149 use gameboy-ram-size #------------------------------------------------------------------------------ # genesis: file(1) magic for various Sega Mega Drive / Genesis ROM image and disc formats # Updated by David Korth # References: # - https://www.retrodev.com/segacd.html # - http://devster.monkeeh.com/sega/32xguide1.txt # # Common Sega Mega Drive header format. # FIXME: Name fields are 48 bytes, but have spaces for padding instead of 00s. 0 name sega-mega-drive-header # ROM title. (Use domestic if present; if not, use international.) >0x120 byte >0x20 >>0x120 string >\0 \b: "%.16s" >0x120 byte <0x21 >>0x150 string >\0 \b: "%.16s" # Other information. >0x180 string >\0 (%.14s >>0x110 string >\0 \b, %.16s >0x180 byte 0 >>0x110 string >\0 (%.16s >0 byte x \b) # TODO: Check for 32X CD? # Sega Mega CD disc images: 2048-byte sectors. 0 string SEGADISCSYSTEM\040\040 Sega Mega CD disc image !:mime application/x-sega-cd-rom >0 use sega-mega-drive-header >0 byte x \b, 2048-byte sectors 0 string SEGABOOTDISC\040\040\040\040 Sega Mega CD disc image !:mime application/x-sega-cd-rom >0 use sega-mega-drive-header >0 byte x \b, 2048-byte sectors # Sega Mega CD disc images: 2352-byte sectors. 0x10 string SEGADISCSYSTEM\040\040 Sega Mega CD disc image !:mime application/x-sega-cd-rom >0x10 use sega-mega-drive-header >0 byte x \b, 2352-byte sectors 0x10 string SEGABOOTDISC\040\040\040\040 Sega Mega CD disc image !:mime application/x-sega-cd-rom >0x10 use sega-mega-drive-header >0 byte x \b, 2352-byte sectors # Sega Mega Drive: Identify the system ID. 0x100 string SEGA >0x3C0 string MARS\040CHECK\040MODE Sega 32X ROM image !:mime application/x-genesis-32x-rom >>0 use sega-mega-drive-header >0x104 string \040PICO Sega Pico ROM image !:mime application/x-sega-pico-rom >>0 use sega-mega-drive-header >0x104 string TOYS\040PICO Sega Pico ROM image !:mime application/x-sega-pico-rom >>0 use sega-mega-drive-header >0x104 string \040TOYS\040PICO Sega Pico ROM image !:mime application/x-sega-pico-rom >>0 use sega-mega-drive-header >0x104 string \040IAC Sega Pico ROM image !:mime application/x-sega-pico-rom >>0 use sega-mega-drive-header >0x104 string \040TERA68K Sega Teradrive (68K) ROM image !:mime application/x-sega-teradrive-rom >>0 use sega-mega-drive-header >0x104 string \040TERA286 Sega Teradrive (286) ROM image !:mime application/x-sega-teradrive-rom >>0 use sega-mega-drive-header >0x180 string BR Sega Mega CD Boot ROM image !:mime application/x-genesis-rom >>0 use sega-mega-drive-header >0x104 default x Sega Mega Drive / Genesis ROM image !:mime application/x-genesis-rom >>0 use sega-mega-drive-header # Sega Mega Drive: Some ROMs have "SEGA" at 0x101, not 0x100. 0x100 string \040SEGA Sega Mega Drive / Genesis ROM image >0 use sega-mega-drive-header # Sega Pico ROMs that don't start with "SEGA". 0x100 string SAMSUNG\040PICO Samsung Pico ROM image !:mime application/x-sega-pico-rom >0 use sega-mega-drive-header 0x100 string IMA\040IKUNOUJYUKU Samsung Pico ROM image !:mime application/x-sega-pico-rom >0 use sega-mega-drive-header 0x100 string IMA\040IKUNOJYUKU Samsung Pico ROM image !:mime application/x-sega-pico-rom >0 use sega-mega-drive-header # Sega Picture Magic (modified 32X) 0x100 string Picture\040Magic >0x3C0 string PICTURE\040MAGIC-01 Sega 32X ROM image !:mime application/x-genesis-32x-rom >>0 use sega-mega-drive-header #------------------------------------------------------------------------------ # genesis: file(1) magic for the Super MegaDrive ROM dump format # # NOTE: Due to interleaving, we can't display anything # other than the copier header information. 0 name sega-genesis-smd-header >0 byte x %dx16k blocks >2 byte 0 \b, last in series or standalone >2 byte >0 \b, split ROM # "Sega Genesis" header. 0x280 string EAGN >8 beshort 0xAABB Sega Mega Drive / Genesis ROM image (SMD format): !:mime application/x-genesis-rom >>0 use sega-genesis-smd-header # "Sega Mega Drive" header. 0x280 string EAMG >8 beshort 0xAABB Sega Mega Drive / Genesis ROM image (SMD format): !:mime application/x-genesis-rom >>0 use sega-genesis-smd-header #------------------------------------------------------------------------------ # smsgg: file(1) magic for Sega Master System and Game Gear ROM images # Detects all Game Gear and export Sega Master System ROM images, # and some Japanese Sega Master System ROM images. # From: David Korth # Reference: https://www.smspower.org/Development/ROMHeader # # General SMS header rule. # The SMS boot ROM checks the header at three locations. 0 name sega-master-system-rom-header # Machine type. >0x0F ubyte&0xF0 0x30 Sega Master System !:mime application/x-sms-rom >0x0F ubyte&0xF0 0x40 Sega Master System !:mime application/x-sms-rom >0x0F ubyte&0xF0 0x50 Sega Game Gear !:mime application/x-gamegear-rom >0x0F ubyte&0xF0 0x60 Sega Game Gear !:mime application/x-gamegear-rom >0x0F ubyte&0xF0 0x70 Sega Game Gear !:mime application/x-gamegear-rom >0x0F default x Sega Master System / Game Gear !:mime application/x-sms-rom >0 byte x ROM image: # Product code. >0x0E ubyte&0xF0 0x10 1 >0x0E ubyte&0xF0 0x20 2 >0x0E ubyte&0xF0 0x30 3 >0x0E ubyte&0xF0 0x40 4 >0x0E ubyte&0xF0 0x50 5 >0x0E ubyte&0xF0 0x60 6 >0x0E ubyte&0xF0 0x70 7 >0x0E ubyte&0xF0 0x80 8 >0x0E ubyte&0xF0 0x90 9 >0x0E ubyte&0xF0 0xA0 10 >0x0E ubyte&0xF0 0xB0 11 >0x0E ubyte&0xF0 0xC0 12 >0x0E ubyte&0xF0 0xD0 13 >0x0E ubyte&0xF0 0xE0 14 >0x0E ubyte&0xF0 0xF0 15 # If the product code is 5 digits, we'll need to backspace here. >0x0E ubyte&0xF0 !0 >>0x0C uleshort x \b%04x >0x0E ubyte&0xF0 0 >>0x0C uleshort x %04x # Revision. >0x0E ubyte&0x0F x (Rev.%02d) # ROM size. (Used for the boot ROM checksum routine.) >0x0F ubyte&0x0F 0x0A (8 KB) >0x0F ubyte&0x0F 0x0B (16 KB) >0x0F ubyte&0x0F 0x0C (32 KB) >0x0F ubyte&0x0F 0x0D (48 KB) >0x0F ubyte&0x0F 0x0E (64 KB) >0x0F ubyte&0x0F 0x0F (128 KB) >0x0F ubyte&0x0F 0x00 (256 KB) >0x0F ubyte&0x0F 0x01 (512 KB) >0x0F ubyte&0x0F 0x02 (1 MB) # SMS/GG header locations. 0x7FF0 string TMR\040SEGA >0x7FF0 use sega-master-system-rom-header 0x3FF0 string TMR\040SEGA >0x3FF0 use sega-master-system-rom-header 0x1FF0 string TMR\040SEGA >0x1FF0 use sega-master-system-rom-header #------------------------------------------------------------------------------ # saturn: file(1) magic for the Sega Saturn disc image format. # From: David Korth # # Common Sega Saturn disc header format. # NOTE: Title is 112 bytes, but we're only showing 32 due to space padding. # TODO: Release date, device information, region code, others? 0 name sega-saturn-disc-header >0x60 string >\0 \b: "%.32s" >0x20 string >\0 (%.10s >>0x2A string >\0 \b, %.6s) >>0x2A byte 0 \b) # 2048-byte sector version. 0 string SEGA\040SEGASATURN\040 Sega Saturn disc image !:mime application/x-saturn-rom >0 use sega-saturn-disc-header >0 byte x (2048-byte sectors) # 2352-byte sector version. 0x10 string SEGA\040SEGASATURN\040 Sega Saturn disc image !:mime application/x-saturn-rom >0x10 use sega-saturn-disc-header >0 byte x (2352-byte sectors) #------------------------------------------------------------------------------ # dreamcast: file(1) magic for the Sega Dreamcast disc image format. # From: David Korth # Reference: https://mc.pp.se/dc/ip0000.bin.html # # Common Sega Dreamcast disc header format. # NOTE: Title is 128 bytes, but we're only showing 32 due to space padding. # TODO: Release date, device information, region code, others? 0 name sega-dreamcast-disc-header >0x80 string >\0 \b: "%.32s" >0x40 string >\0 (%.10s >>0x4A string >\0 \b, %.6s) >>0x4A byte 0 \b) # 2048-byte sector version. 0 string SEGA\040SEGAKATANA\040 Sega Dreamcast disc image !:mime application/x-dc-rom >0 use sega-dreamcast-disc-header >0 byte x (2048-byte sectors) # 2352-byte sector version. 0x10 string SEGA\040SEGAKATANA\040 Sega Dreamcast disc image !:mime application/x-dc-rom >0x10 use sega-dreamcast-disc-header >0 byte x (2352-byte sectors) #------------------------------------------------------------------------------ # dreamcast: file(1) uncertain magic for the Sega Dreamcast VMU image format # 0 belong 0x21068028 Sega Dreamcast VMU game image 0 string LCDi Dream Animator file #------------------------------------------------------------------------------ # z64: file(1) magic for the Z64 format N64 ROM dumps # Reference: http://forum.pj64-emu.com/showthread.php?t=2239 # From: David Korth # 0 bequad 0x803712400000000F Nintendo 64 ROM image !:mime application/x-n64-rom >0x20 string >\0 \b: "%.20s" >0x3B string x (%.4s >0x3F byte x \b, Rev.%02u) #------------------------------------------------------------------------------ # v64: file(1) magic for the V64 format N64 ROM dumps # Same as z64 format, but with 16-bit byteswapping. # 0 bequad 0x3780401200000F00 Nintendo 64 ROM image (V64) !:mime application/x-n64-rom #------------------------------------------------------------------------------ # n64-swap2: file(1) magic for the swap2 format N64 ROM dumps # Same as z64 format, but with swapped 16-bit words. # 0 bequad 0x12408037000F0000 Nintendo 64 ROM image (wordswapped) !:mime application/x-n64-rom #------------------------------------------------------------------------------ # n64-le32: file(1) magic for the 32-bit byteswapped format N64 ROM dumps # Same as z64 format, but with 32-bit byteswapping. # 0 bequad 0x401237800F000000 Nintendo 64 ROM image (32-bit byteswapped) !:mime application/x-n64-rom #------------------------------------------------------------------------------ # gba: file(1) magic for the Nintendo Game Boy Advance raw ROM format # Reference: https://problemkaputt.de/gbatek.htm#gbacartridgeheader # # Original version from: "Nelson A. de Oliveira" # Updated version from: David Korth # 4 bequad 0x24FFAE51699AA221 Game Boy Advance ROM image !:mime application/x-gba-rom >0xA0 string >\0 \b: "%.12s" >0xAC string x (%.6s >0xBC byte x \b, Rev.%02u) #------------------------------------------------------------------------------ # nds: file(1) magic for the Nintendo DS(i) raw ROM format # Reference: https://problemkaputt.de/gbatek.htm#dscartridgeheader # # Original version from: "Nelson A. de Oliveira" # Updated version from: David Korth # 0xC0 bequad 0x24FFAE51699AA221 Nintendo DS ROM image !:mime application/x-nintendo-ds-rom >0x00 string >\0 \b: "%.12s" >0x0C string x (%.6s >0x1E byte x \b, Rev.%02u) >0x12 byte 2 (DSi enhanced) >0x12 byte 3 (DSi only) # Secure Area check. >0x20 lelong <0x4000 (homebrew) >0x20 lelong >0x3FFF >>0x4000 lequad 0x0000000000000000 (multiboot) >>0x4000 lequad !0x0000000000000000 >>>0x4000 lequad 0xE7FFDEFFE7FFDEFF (decrypted) >>>0x4000 lequad !0xE7FFDEFFE7FFDEFF >>>>0x1000 lequad 0x0000000000000000 (encrypted) >>>>0x1000 lequad !0x0000000000000000 (mask ROM) #------------------------------------------------------------------------------ # nds_passme: file(1) magic for Nintendo DS ROM images for GBA cartridge boot. # This is also used for loading .nds files using the MSET exploit on 3DS. # Reference: https://github.com/devkitPro/ndstool/blob/master/source/ndscreate.cpp 0xC0 bequad 0xC8604FE201708FE2 Nintendo DS Slot-2 ROM image (PassMe) !:mime application/x-nintendo-ds-rom #------------------------------------------------------------------------------ # ngp: file(1) magic for the Neo Geo Pocket (Color) raw ROM format. # From: David Korth # References: # - https://neogpc.googlecode.com/svn-history/r10/trunk/src/core/neogpc.cpp # - https://www.devrs.com/ngp/files/ngpctech.txt # 0x0A string BY\040SNK\040CORPORATION Neo Geo Pocket !:mime application/x-neo-geo-pocket-rom >0x23 byte 0x10 Color >0 byte x ROM image >0x24 string >\0 \b: "%.12s" >0x21 uleshort x \b, NEOP%04X >0x1F ubyte 0xFF (debug mode enabled) #------------------------------------------------------------------------------ # msx: file(1) magic for MSX game cartridge dumps # Too simple - MPi #0 beshort 0x4142 MSX game cartridge dump #------------------------------------------------------------------------------ # Sony Playstation executables (Adam Sjoegren ) : 0 string PS-X\040EXE Sony Playstation executable >16 lelong x PC=%#08x, >20 lelong !0 GP=%#08x, >24 lelong !0 .text=[%#08x, >>28 lelong x \b%#x], >32 lelong !0 .data=[%#08x, >>36 lelong x \b%#x], >40 lelong !0 .bss=[%#08x, >>44 lelong x \b%#x], >48 lelong !0 Stack=%#08x, >48 lelong =0 No Stack!, >52 lelong !0 StackSize=%#x, #>76 string >\0 (%s) # Area: >113 string x (%s) # CPE executables 0 string CPE CPE executable >3 byte x (version %d) # Sony PlayStation archive (PSARC) # From: Alexandre Iooss # URL: https://www.psdevwiki.com/ps3/PlayStation_archive_(PSARC) 0 string PSAR Sony PlayStation Archive !:ext psarc >4 ubeshort x \b, version %d. >6 ubeshort x \b%d >8 string zlib \b, zlib compression >8 string lzma \b, LZMA compression >28 ubeshort&2 0 \b, relative paths >28 ubeshort&2 2 \b, absolute paths >28 ubeshort&1 1 \b, ignore case #------------------------------------------------------------------------------ # Microsoft Xbox executables .xbe (Esa Hyytia ) 0 string XBEH Microsoft Xbox executable !:mime audio/x-xbox-executable !:ext xbe # expect base address of 0x10000 >0x0104 ulelong =0x10000 >>(0x0118.l-0x0FFF4) lestring16 x \b: "%.40s" >>(0x0118.l-0x0FFF5) byte x (%c >>(0x0118.l-0x0FFF6) byte x \b%c- >>(0x0118.l-0x0FFF8) uleshort x \b%03u) >>(0x0118.l-0x0FF60) ulelong&0x80000007 0x80000007 \b, all regions >>(0x0118.l-0x0FF60) ulelong&0x80000007 !0x80000007 >>>(0x0118.l-0x0FF60) ulelong >0 (regions: >>>>(0x0118.l-0x0FF60) ulelong &0x00000001 NA >>>>(0x0118.l-0x0FF60) ulelong &0x00000002 Japan >>>>(0x0118.l-0x0FF60) ulelong &0x00000004 Rest_of_World >>>>(0x0118.l-0x0FF60) ulelong &0x80000000 Manufacturer >>>(0x0118.l-0x0FF60) ulelong >0 \b) # probabilistic checks whether signed or not >0x0004 ulelong =0x0 >>&2 ulelong =0x0 >>>&2 ulelong =0x0 \b, not signed >0x0004 ulelong >0 >>&2 ulelong >0 >>>&2 ulelong >0 \b, signed # -------------------------------- # Microsoft Xbox data file formats 0 string XIP0 XIP, Microsoft Xbox data 0 string XTF0 XTF, Microsoft Xbox data #------------------------------------------------------------------------------ # Microsoft Xbox 360 executables (.xex) # From: David Korth # References: # - https://free60project.github.io/wiki/XEX.html # - https://github.com/xenia-project/xenia/blob/HEAD/src/xenia/kernel/util/xex2_info.h # Title ID (part of Execution ID section) 0 name xbox-360-xex-execution-id >(0.L+0xC) byte x (%c >(0.L+0xD) byte x \b%c >(0.L+0xE) beshort x \b-%04u, media ID: >(0.L) belong x %08X) # Region code (part of Security Info) 0 name xbox-360-xex-region-code >0 ubelong 0xFFFFFFFF \b, all regions >0 ubelong !0xFFFFFFFF >>0 ubelong >0 (regions: >>0 ubelong&0x000000FF 0x000000FF USA >>0 ubelong&0x00000100 0x00000100 Japan >>0 ubelong&0x00000200 0x00000200 China >>0 ubelong&0x0000FC00 0x0000FC00 Asia >>0 ubelong&0x00FF0000 0x00FF0000 PAL >>0 ubelong&0x00FF0000 0x00FE0000 PAL [except AU/NZ] >>0 ubelong&0x00FF0000 0x00010000 AU/NZ >>0 ubelong&0xFF000000 0xFF000000 Other >>0 ubelong >0 \b) 0 string XEX2 Microsoft Xbox 360 executable !:mime audio/x-xbox360-executable !:ext xex >0x18 search/0x100 \x00\x04\x00\x06 >>&0 use xbox-360-xex-execution-id >(0x010.L+0x178) use xbox-360-xex-region-code 0 string XEX1 Microsoft Xbox 360 executable (XEX1) !:mime audio/x-xbox360-executable !:ext xex >0x18 search/0x100 \x00\x04\x00\x06 >>&0 use xbox-360-xex-execution-id >(0x010.L+0x154) use xbox-360-xex-region-code #------------------------------------------------------------------------------ # Microsoft Xbox 360 packages # From: David Korth # References: # - https://free60project.github.io/wiki/STFS.html # - https://github.com/xenia-project/xenia/blob/HEAD/src/xenia/kernel/util/xex2_info.h # TODO: More information for console-signed packages. 0 name xbox-360-package >0x360 byte x (%c >0x361 byte x \b%c >0x362 beshort x \b-%04u, media ID: >0x354 belong x %08X) >0x344 belong x \b, content type: >>0x344 belong 0x1 Saved Game >>0x344 belong 0x2 Marketplace Content >>0x344 belong 0x3 Publisher >>0x344 belong 0x1000 Xbox 360 Title >>0x344 belong 0x2000 IPTV Pause Buffer >>0x344 belong 0x4000 Installed Game >>0x344 belong 0x5000 Original Xbox Game >>0x344 belong 0x9000 Avatar Item >>0x344 belong 0x10000 Profile >>0x344 belong 0x20000 Gamer Picture >>0x344 belong 0x30000 Theme >>0x344 belong 0x40000 Cache File >>0x344 belong 0x50000 Storage Download >>0x344 belong 0x60000 Xbox Saved Game >>0x344 belong 0x70000 Xbox Download >>0x344 belong 0x80000 Game Demo >>0x344 belong 0x90000 Video >>0x344 belong 0xA0000 Game >>0x344 belong 0xB0000 Installer >>0x344 belong 0xC0000 Game Trailer >>0x344 belong 0xD0000 Arcade Title >>0x344 belong 0xE0000 XNA >>0x344 belong 0xF0000 License Store >>0x344 belong 0x100000 Movie >>0x344 belong 0x200000 TV >>0x344 belong 0x300000 Music Video >>0x344 belong 0x400000 Game Video >>0x344 belong 0x500000 Podcast Video >>0x344 belong 0x600000 Viral Video >>0x344 belong 0x2000000 Community Game 0 string CON\x20 Microsoft Xbox 360 package (console-signed) >0 use xbox-360-package 0 string PIRS >0 belong 0 Microsoft Xbox 360 package (non-Xbox Live) >>0 use xbox-360-package 0 string LIVE >0x104 belong 0 Microsoft Xbox 360 package (Xbox Live) >>0 use xbox-360-package # Atari Lynx cartridge dump (EXE/BLL header) # From: "Stefan A. Haubenthal" # Reference: # https://raw.githubusercontent.com/cc65/cc65/master/libsrc/lynx/exehdr.s # Double-check that the image type matches too, 0x8008 conflicts with # 8 character OMF-86 object file headers. 0 beshort 0x8008 >6 string BS93 Lynx homebrew cartridge !:mime application/x-atari-lynx-rom >>2 beshort x \b, RAM start $%04x # Update: Joerg Jenderek # Reference: http://mark0.net/download/triddefs_xml.7z/defs/l/lnx.trid.xml # Note: called "Atari Lynx ROM" by TrID 0 string LYNX Lynx cartridge !:mime application/x-atari-lynx-rom !:ext lnx # bank 0 page size like: 128 256 512 >4 leshort/4 >0 \b, bank 0 %dk >6 leshort/4 >0 \b, bank 1 %dk # 32 bytes cart name like: "jconnort.lyx" "viking~1.lyx" "Eye of the Beholder" "C:\EMU\LYNX\ROMS\ULTCHESS.LYX" >10 string >\0 \b, "%.32s" # 16 bytes manufacturer like: "Atari" "NuFX Inc." "Matthias Domin" >42 string >\0 \b, "%.16s" # version number #>8 leshort !1 \b, version number %u # rotation: 1~left Lexis (NA).lnx 2~right Centipede (Prototype).lnx >58 ubyte >0 \b, rotation %u # spare #>59 lelong !0 \b, spare %#x # Opera file system that is used on the 3DO console # From: Serge van den Boom 0 string \x01ZZZZZ\x01 3DO "Opera" file system # From: Alex Myczko # From: David Pflug # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Game_Boy_Sound # http://en.wikipedia.org/wiki/Game_Boy_Sound_System # Reference: http://mark0.net/download/triddefs_xml.7z/defs/g/gbs.trid.xml # Note: called "GameBoy Sound System dump" by TrID, # "Gameboy GBS rom image" by X11 Gameboy sound player xgbsplay and # verified by gbsplay `LANG=C gbsinfo /usr/share/doc/gbsplay/examples/nightmode.gbs` # is the offset 12 or the offset 16 correct? # GBS (Game Boy Sound) magic # http://ftp.modland.com/pub/documents/format_documentation/\ # Gameboy%20Sound%20System%20(.gbs).txt # skip Grand Theft Auto 2 Style data (*.sty via sty-gta2.trid.xml) and Opera (*.patch) by check for valid "low" version 0 string GBS\001 Nintendo Gameboy Music/Audio Data !:mime audio/x-nintendo-gbs # by gbsplay or xgbsplay tools #!:mime audio/gbs #!:mime audio/prs.gbs !:ext gbs # fields are right null-filled; no terminating \0 if all bytes are used; if field unknown, should be set to a single ? # title string like: "Blues Brothers" "Bugs Bunny Crazy Castle 3" #12 string GameBoy\040Music\040Module Nintendo Gameboy Music Module >16 string >\0 ("%.32s" by # author string like: , by Laxity, Justin Muir, 1993 Ocean >48 string >\0 %.32s, copyright # copyright string like: empty "1991 Titus" "2001 Imagineer/KT.Kodansha/P&B" "2000 Newline, Ubisoft, D. Eclip." >80 string >\0 %.32s # GBSVersion; 1 #>3 byte !1 version %u, # number of songs (1-255) >4 ubyte x \b), %u track # plural s >4 ubyte >1 \bs # default subsong; like: 1 (often) 2 29 60 79 82 >5 ubyte !1 \b, %u first # load address (400h-7fffh) >6 uleshort x \b, load address %#4.4x # init address (400h-7fffh) >8 uleshort x \b, init address %#4.4x # play address (400-7fffh) >10 uleshort x \b, play address %#4.4x # stack pointer; like: FFFEh (default) CFFFh DCFEh DDFEh DDFFh DEFFh E000h FFF4h >12 uleshort x \b, stack pointer %#4.4x # timer modulo; often 0 >14 ubyte !0 \b, timer modulo %#x # timer control; often 0 >15 ubyte !0 \b, timer control %#x # code and Data (see RST VECTORS) #>0x70 ubequad x \b, data %#16.16llx... # IPS Patch Files from: From: Thomas Klausner # see https://zerosoft.zophar.net/ips.php 0 string PATCH IPS patch file !:ext ips # BPS Patch Files - from: David Korth # Reference: https://www.romhacking.net/documents/746/ 0 string BPS1 BPS patch file !:ext bps # APS Patch Files - from: David Korth # Reference: https://github.com/btimofeev/UniPatcher/wiki/APS-(N64) 0 string APS10 APS patch file !:ext aps >5 byte 0 \b, simple patch >5 byte 1 \b, N64-specific patch for >>58 byte x N%c >>59 byte x \b%c >>60 byte x \b%c >7 byte !0x20 # FIXME: /T specifier isn't working with a fixed-length string. >>7 string x \b: "%.50s" # UPS Patch Files - from: David Korth # Reference: http://fileformats.archiveteam.org/wiki/UPS_(binary_patch_format) 0 string UPS1 UPS patch file !:ext ups # Playstations Patch Files from: From: Thomas Klausner 0 string PPF30 Playstation Patch File version 3.0 >5 byte 0 \b, PPF 1.0 patch >5 byte 1 \b, PPF 2.0 patch >5 byte 2 \b, PPF 3.0 patch >>56 byte 0 \b, Imagetype BIN (any) >>56 byte 1 \b, Imagetype GI (PrimoDVD) >>57 byte 0 \b, Blockcheck disabled >>57 byte 1 \b, Blockcheck enabled >>58 byte 0 \b, Undo data not available >>58 byte 1 \b, Undo data available >6 string x \b, description: %s 0 string PPF20 Playstation Patch File version 2.0 >5 byte 0 \b, PPF 1.0 patch >5 byte 1 \b, PPF 2.0 patch >>56 lelong >0 \b, size of file to patch %d >6 string x \b, description: %s 0 string PPF10 Playstation Patch File version 1.0 >5 byte 0 \b, Simple Encoding >6 string x \b, description: %s # Compressed ISO disc image (used mostly by PSP, PS2 and MegaDrive) # From: Alexandre Iooss # URL: https://en.wikipedia.org/wiki/.CSO # NOTE: This is NOT the same as Compact ISO or GameCube/Wii disc image, # though it has the same magic number. 0 string CISO # Match CISO version 1 with ISO-9660 sector size >20 ubyte <2 >>16 ulelong =2048 CSO v1 disk image !:mime application/x-compressed-iso !:ext ciso/cso >>>8 ulequad x \b, original size %llu bytes >>>16 ulelong x \b, datablock size %u bytes # Match CISO version 2 >20 ubyte =2 >>22 uleshort =0 >>>4 ulelong =24 CSO v2 disk image !:mime application/x-compressed-iso !:ext ciso/cso >>>>8 ulequad x \b, original size %llu bytes >>>>16 ulelong x \b, datablock size %u bytes # Type: Nintendo GameCube/Wii disc image (CISO format) # NOTE: This is NOT the same as Compact ISO or PSP CISO, # though it has the same magic number. # Other fields are used to determine what type of CISO this is: # - 0x04 == 0x00200000: GameCube/Wii CISO (block_size) # - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size) # - None of the above: Compact ISO. >4 lelong 0x200000 >>8 byte 1 >>>0x801C belong 0xC2339F3D Nintendo GameCube disc image (CISO format): !:mime application/x-wii-rom >>>>0x8000 use nintendo-gcn-disc-common >>>0x8018 belong 0x5D1C9EA3 Nintendo Wii disc image (CISO format): !:mime application/x-wii-rom >>>>0x8000 use nintendo-gcn-disc-common # .cso files # Reference: https://pismotec.com/ciso/ciso.h # NOTE: There are two other formats with the same magic but # completely incompatible specifications: # - GameCube/Wii CISO: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/DiscIO/CISOBlob.h # - PSP CISO: https://github.com/jamie/ciso/blob/master/ciso.h # Other fields are used to determine what type of CISO this is: # - 0x04 == 0x00200000: GameCube/Wii CISO (block_size) # - 0x10 == 0x00000800: PSP CISO (ISO-9660 sector size) # - 0x10 == 0x00004000: For >2GB files using maxcso... # https://github.com/unknownbrackets/maxcso/issues/26 # - None of the above: Compact ISO. >4 lelong !0 >>4 lelong !0x200000 >>>16 lelong !0x800 >>>>16 lelong !0x4000 Compressed ISO CD image # From: Daniel Dawson # SNES9x .smv "movie" file format. 0 string SMV\x1A SNES9x input recording >0x4 lelong x \b, version %d # version 4 is latest so far >0x4 lelong <5 >>0x8 ledate x \b, recorded at %s >>0xc lelong >0 \b, rerecorded %d times >>0x10 lelong x \b, %d frames long >>0x14 byte >0 \b, data for controller(s): >>>0x14 byte &0x1 #1 >>>0x14 byte &0x2 #2 >>>0x14 byte &0x4 #3 >>>0x14 byte &0x8 #4 >>>0x14 byte &0x10 #5 >>0x15 byte ^0x1 \b, begins from snapshot >>0x15 byte &0x1 \b, begins from reset >>0x15 byte ^0x2 \b, NTSC standard >>0x15 byte &0x2 \b, PAL standard >>0x17 byte &0x1 \b, settings: # WIP1Timing not used as of version 4 >>>0x4 lelong <4 >>>>0x17 byte &0x2 WIP1Timing >>>0x17 byte &0x4 Left+Right >>>0x17 byte &0x8 VolumeEnvX >>>0x17 byte &0x10 FakeMute >>>0x17 byte &0x20 SyncSound # New flag as of version 4 >>>0x4 lelong >3 >>>>0x17 byte &0x80 NoCPUShutdown >>0x4 lelong <4 >>>0x18 lelong >0x23 >>>>0x20 leshort !0 >>>>>0x20 lestring16 x \b, metadata: "%s" >>0x4 lelong >3 >>>0x24 byte >0 \b, port 1: >>>>0x24 byte 1 joypad >>>>0x24 byte 2 mouse >>>>0x24 byte 3 SuperScope >>>>0x24 byte 4 Justifier >>>>0x24 byte 5 multitap >>>0x24 byte >0 \b, port 2: >>>>0x25 byte 1 joypad >>>>0x25 byte 2 mouse >>>>0x25 byte 3 SuperScope >>>>0x25 byte 4 Justifier >>>>0x25 byte 5 multitap >>>0x18 lelong >0x43 >>>>0x40 leshort !0 >>>>>0x40 lestring16 x \b, metadata: "%s" >>0x17 byte &0x40 \b, ROM: >>>(0x18.l-26) lelong x CRC32 %#08x >>>(0x18.l-23) string x "%s" # Type: scummVM savegame files # From: Sven Hartge 0 string SCVM ScummVM savegame >12 string >\0 "%s" #------------------------------------------------------------------------------ # Nintendo GameCube / Wii file formats. # # Type: Nintendo GameCube/Wii common disc header data. # From: David Korth # Reference: https://wiibrew.org/wiki/Wii_Disc 0 name nintendo-gcn-disc-common >0x20 string x "%.64s" >0x00 string x (%.6s >0x06 byte >0 >>0x06 byte 1 \b, Disc 2 >>0x06 byte 2 \b, Disc 3 >>0x06 byte 3 \b, Disc 4 >0x07 byte x \b, Rev.%02u) >0x18 belong 0x5D1C9EA3 >>0x60 beshort 0x0101 \b (Unencrypted) >0x200 string NKIT \b (NKit compressed) # Type: Nintendo GameCube disc image # From: David Korth # Reference: https://wiibrew.org/wiki/Wii_Disc 0x1C belong 0xC2339F3D Nintendo GameCube disc image: !:mime application/x-gamecube-rom >0 use nintendo-gcn-disc-common # Type: Nintendo GameCube embedded disc image # Commonly found on demo discs. # From: David Korth # Reference: http://hitmen.c02.at/files/yagcd/yagcd/index.html#idx14.8 0 belong 0xAE0F38A2 >0x0C belong 0x00100000 >>(8.L+0x1C) belong 0xC2339F3D Nintendo GameCube embedded disc image: !:mime application/x-gamecube-rom >>>(8.L) use nintendo-gcn-disc-common # Type: Nintendo Wii disc image # From: David Korth # Reference: https://wiibrew.org/wiki/Wii_Disc 0x18 belong 0x5D1C9EA3 Nintendo Wii disc image: >0 use nintendo-gcn-disc-common # Type: Nintendo Wii disc image (WBFS format) # From: David Korth # Reference: https://wiibrew.org/wiki/Wii_Disc 0 string WBFS >0x218 belong 0x5D1C9EA3 Nintendo Wii disc image (WBFS format): !:mime application/x-wii-rom >>0x200 use nintendo-gcn-disc-common # Type: Nintendo GameCube/Wii disc image (GCZ format) # Due to zlib compression, we can't get the actual disc information. 0 lelong 0xB10BC001 >4 lelong 0 Nintendo GameCube disc image (GCZ format) !:mime application/x-gamecube-rom >4 lelong 1 Nintendo Wii disc image (GCZ format) !:mime application/x-wii-rom >4 default x Nintendo GameCube/Wii disc image (GCZ format) # Type: Nintendo GameCube/Wii disc image (WDF format) 0 string WII\001DISC >8 belong 1 # WDFv1 >>0x54 belong 0xC2339F3D Nintendo GameCube disc image (WDFv1 format): !:mime application/x-gamecube-rom >>>0x38 use nintendo-gcn-disc-common >>0x58 belong 0x5D1C9EA3 Nintendo Wii disc image (WDFv1 format): !:mime application/x-wii-rom >>>0x38 use nintendo-gcn-disc-common >8 belong 2 # WDFv2 >>(12.L+0x1C) belong 0xC2339F3D Nintendo GameCube disc image (WDFv2 format): !:mime application/x-gamecube-rom >>>(12.L) use nintendo-gcn-disc-common >>(12.L+0x18) belong 0x5D1C9EA3 Nintendo Wii disc image (WDFv2 format): !:mime application/x-wii-rom >>>(12.L) use nintendo-gcn-disc-common # Type: Nintendo GameCube/Wii disc image (WIA format) 0 string WIA\001 Nintendo >0x48 belong 1 GameCube !:mime application/x-gamecube-rom >0x48 belong 2 Wii !:mime application/x-wii-rom >0x48 default x GameCube/Wii >0x48 belong x disc image (WIA format): >>0x58 use nintendo-gcn-disc-common # Type: Nintendo GameCube/Wii disc image (with SDK header) # From: David Korth # Reference: https://wiibrew.org/wiki/Wii_Disc 0 belong 0xFFFF0000 >0x18 belong 0x00000000 >>0x1C belong 0x00000000 >>>0x8018 belong 0x5D1C9EA3 Nintendo Wii SDK disc image: !:mime application/x-wii-rom >>>>0x8000 use nintendo-gcn-disc-common >>>0x801C belong 0xC2339F3D Nintendo GameCube SDK disc image: !:mime application/x-gamecube-rom >>>>0x8000 use nintendo-gcn-disc-common # Type: Nintendo GameCube/Wii disc image (RVZ format) 0 string RVZ\001 Nintendo >0x48 belong 1 GameCube !:mime application/x-gamecube-rom >0x48 belong 2 Wii !:mime application/x-wii-rom >0x48 default x GameCube/Wii >0x48 belong x disc image (RVZ format): >>0x58 use nintendo-gcn-disc-common #------------------------------------------------------------------------------ # Nintendo 3DS file formats. # # Type: Nintendo 3DS "NCSD" image. (game cards and eMMC) # From: David Korth # Reference: https://www.3dbrew.org/wiki/NCSD 0x100 string NCSD >0x118 lequad 0 Nintendo 3DS Game Card image # NCCH header for partition 0. (game data) >>0x1150 string >\0 \b: "%.16s" >>0x312 byte x (Rev.%02u) >>0x118C byte 2 (New3DS only) >>0x18D byte 0 (inner device) >>0x18D byte 1 (Card1) >>0x18D byte 2 (Card2) >>0x18D byte 3 (extended device) >0x118 bequad 0x0102020202000000 Nintendo 3DS eMMC dump (Old3DS) >0x118 bequad 0x0102020203000000 Nintendo 3DS eMMC dump (New3DS) # Nintendo 3DS version code. # Reference: https://www.3dbrew.org/wiki/Titles # Format: leshort containing three fields: # - 6-bit: Major # - 6-bit: Minor # - 4-bit: Revision # NOTE: Only supporting major/minor versions from 0-15 right now. # NOTE: Should be prefixed with "v". 0 name nintendo-3ds-version-code # Raw version. >0 leshort x \b%u, # Major version. >0 leshort&0xFC00 0x0000 0 >0 leshort&0xFC00 0x0400 1 >0 leshort&0xFC00 0x0800 2 >0 leshort&0xFC00 0x0C00 3 >0 leshort&0xFC00 0x1000 4 >0 leshort&0xFC00 0x1400 5 >0 leshort&0xFC00 0x1800 6 >0 leshort&0xFC00 0x1C00 7 >0 leshort&0xFC00 0x2000 8 >0 leshort&0xFC00 0x2400 9 >0 leshort&0xFC00 0x2800 10 >0 leshort&0xFC00 0x2C00 11 >0 leshort&0xFC00 0x3000 12 >0 leshort&0xFC00 0x3400 13 >0 leshort&0xFC00 0x3800 14 >0 leshort&0xFC00 0x3C00 15 # Minor version. >0 leshort&0x03F0 0x0000 \b.0 >0 leshort&0x03F0 0x0010 \b.1 >0 leshort&0x03F0 0x0020 \b.2 >0 leshort&0x03F0 0x0030 \b.3 >0 leshort&0x03F0 0x0040 \b.4 >0 leshort&0x03F0 0x0050 \b.5 >0 leshort&0x03F0 0x0060 \b.6 >0 leshort&0x03F0 0x0070 \b.7 >0 leshort&0x03F0 0x0080 \b.8 >0 leshort&0x03F0 0x0090 \b.9 >0 leshort&0x03F0 0x00A0 \b.10 >0 leshort&0x03F0 0x00B0 \b.11 >0 leshort&0x03F0 0x00C0 \b.12 >0 leshort&0x03F0 0x00D0 \b.13 >0 leshort&0x03F0 0x00E0 \b.14 >0 leshort&0x03F0 0x00F0 \b.15 # Revision. >0 leshort&0x000F x \b.%u # Type: Nintendo 3DS "NCCH" container. # https://www.3dbrew.org/wiki/NCCH 0x100 string NCCH Nintendo 3DS >0x18D byte&2 0 File Archive (CFA) >0x18D byte&2 2 Executable Image (CXI) >0x150 string >\0 \b: "%.16s" >0x18D byte 0x05 >>0x10E leshort x (Old3DS System Update v >>0x10E use nintendo-3ds-version-code >>0x10E leshort x \b) >0x18D byte 0x15 >>0x10E leshort x (New3DS System Update v >>0x10E use nintendo-3ds-version-code >>0x10E leshort x \b) >0x18D byte !0x05 >>0x18D byte !0x15 >>>0x112 byte x (v >>>0x112 use nintendo-3ds-version-code >>>0x112 byte x \b) >0x18C byte 2 (New3DS only) # Type: Nintendo 3DS "SMDH" file. (application description) # From: David Korth # Reference: https://3dbrew.org/wiki/SMDH 0 string SMDH Nintendo 3DS SMDH file >0x208 leshort !0 >>0x208 lestring16 x \b: "%.128s" >>0x388 leshort !0 >>>0x388 lestring16 x by %.128s >0x208 leshort 0 >>0x008 leshort !0 >>>0x008 lestring16 x \b: "%.128s" >>>0x188 leshort !0 >>>>0x188 lestring16 x by %.128s # Type: Nintendo 3DS Homebrew Application. # From: David Korth # Reference: https://3dbrew.org/wiki/3DSX_Format 0 string 3DSX Nintendo 3DS Homebrew Application (3DSX) # Type: Nintendo 3DS Banner Model Data. # From: David Korth # Reference: https://3dbrew.org/wiki/CBMD 0 string CBMD\0\0\0\0 Nintendo 3DS Banner Model Data #------------------------------------------------------------------------------ # a7800: file(1) magic for the Atari 7800 raw ROM format. # From: David Korth # Reference: https://sites.google.com/site/atari7800wiki/a78-header 0 byte >0 >0 byte <3 >>1 string ATARI7800 Atari 7800 ROM image !:mime application/x-atari-7800-rom >>>0x11 string >\0 \b: "%.32s" # Display type. >>>0x39 byte 0 (NTSC) >>>0x39 byte 1 (PAL) >>>0x36 byte&1 1 (POKEY) #------------------------------------------------------------------------------ # vectrex: file(1) magic for the GCE Vectrex raw ROM format. # From: David Korth # Reference: http://www.playvectrex.com/designit/chrissalo/hello1.htm # # NOTE: Title is terminated with 0x80, not 0. # The header is terminated with a 0, so that will # terminate the title as well. # 0 string g\040GCE Vectrex ROM image >0x11 string >\0 \b: "%.16s" #------------------------------------------------------------------------------ # amiibo: file(1) magic for Nintendo amiibo NFC dumps. # From: David Korth # Reference: https://www.3dbrew.org/wiki/Amiibo 0x00 byte 0x04 >0x0A beshort 0x0FE0 >>0x0C belong 0xF110FFEE >>>0x208 beshort 0x0100 >>>>0x020A byte 0x0F >>>>>0x020C bequad 0x000000045F000000 >>>>>>0x5B byte 0x02 >>>>>>>0x54 belong x Nintendo amiibo NFC dump - amiibo ID: %08X- >>>>>>>0x58 belong x \b%08X #------------------------------------------------------------------------------ # Type: Nintendo Switch XCI (Game Cartridge Image) # From: Benjamin Lowry # Reference: https://switchbrew.org/wiki/Gamecard_Format 0x100 string HEAD >0x10D byte 0xFA Nintendo Switch cartridge image (XCI), 1GB >0x10D byte 0xF8 Nintendo Switch cartridge image (XCI), 2GB >0x10D byte 0xF0 Nintendo Switch cartridge image (XCI), 4GB >0x10D byte 0xE0 Nintendo Switch cartridge image (XCI), 8GB >0x10D byte 0xE1 Nintendo Switch cartridge image (XCI), 16GB >0x10D byte 0xE2 Nintendo Switch cartridge image (XCI), 32GB #------------------------------------------------------------------------------ # Type: Nintendo Switch Executable # From: Benjamin Lowry # Reference: https://switchbrew.org/wiki/NSO 0x00 string NSO0 Nintendo Switch executable (NSO) #------------------------------------------------------------------------------ # Type: Nintendo Switch PFS0 # From: Benjamin Lowry # Reference: https://switchbrew.org/wiki/NCA_Format#PFS0 0x00 string PFS0 Nintendo Switch partition filesystem (PFS0) >0x04 ulelong x \b, %d files #------------------------------------------------------------------------------ # amiibo: file(1) magic for Nintendo Badge Arcade files. # From: David Korth # References: # - https://github.com/GerbilSoft/rom-properties/issues/92 # - https://github.com/CaitSith2/BadgeArcadeTool # - https://github.com/TheMachinumps/Advanced-badge-editor # PRBS: Individual badge and/or mega badge. 0 string PRBS >0x44 byte >0x20 Nintendo Badge Arcade >>0xB8 ulelong <2 >>>0xBC ulelong <2 badge: >>>0xBC ulelong >1 Mega Badge >>>>0xB8 ulelong x (%ux >>>>0xBC ulelong x \b%u): >>0xB8 ulelong >1 Mega Badge >>>0xB8 ulelong x (%ux >>>0xBC ulelong x \b%u): >0x44 string x "%s" >0x3C ulelong x \b, badge ID: %u >0x74 byte >0x20 >>0x74 string x \b, set: "%s" >0xA8 ulelong !0xFFFFFFFF >>0xA8 ulelong x \b, launch title ID: %08X >>0xA4 ulelong x \b-%08X # CABS: Badge set. 0 string CABS >0x2C byte >0x20 Nintendo Badge Arcade badge set: >>0x2C string x "%.48s" >>0x24 ulelong x \b, set ID: %u #------------------------------------------------------------------------------ # sufami: file(1) magic for Sufami Turbo ROM images. # From: David Korth # References: # - https://problemkaputt.de/fullsnes.htm#snescartsufamiturbominicartridgeadaptor 0 string BANDAI\040SFC-ADX >0x10 string !SFC-ADX\040BACKUP Sufami Turbo ROM image: >>0x10 string/T x "%.14s" >>0x30 byte x \b, ID %02X >>0x31 byte x \b%02X >>0x32 byte x \b%02X >>0x33 ubyte >0 \b, series index %u >>0x34 ubyte 0 [SlowROM] >>0x34 ubyte 1 [FastROM] >>0x35 ubyte 1 [SRAM] >>0x35 ubyte 3 [Special] #------------------------------------------------------------------------------ # Type: Super NES ROM image # From: Alexandre Iooss # Reference: https://snes.nesdev.org/wiki/ROM_header 0 name snes-rom-hdr # cartridge title is encoded in JIS X 0201, 21 chars padded with spaces >0 ubyte-0x20 <0xC0 >>1 ubyte-0x20 <0xC0 >>>2 ubyte-0x20 <0xC0 >>>>3 ubyte-0x20 <0xC0 >>>>>4 ubyte-0x20 <0xC0 >>>>>>5 ubyte-0x20 <0xC0 >>>>>>>6 ubyte-0x20 <0xC0 >>>>>>>>7 ubyte-0x20 <0xC0 >>>>>>>>>8 ubyte-0x20 <0xC0 >>>>>>>>>>9 ubyte-0x20 <0xC0 >>>>>>>>>>>10 ubyte-0x20 <0xC0 >>>>>>>>>>>>21 ubyte-0x20 <0xC0 Super NES ROM image >>>>>>>>>>>>>0 string/21/T x "%s" >>>>>>>>>>>>>25 byte 0 (Japan) >>>>>>>>>>>>>25 byte 1 (USA) >>>>>>>>>>>>>25 byte 2 (Europe) >>>>>>>>>>>>>25 byte 6 (France) >>>>>>>>>>>>>25 byte 7 (Netherlands) >>>>>>>>>>>>>25 byte 9 (Germany) >>>>>>>>>>>>>25 byte 10 (Brazil) >>>>>>>>>>>>>27 byte >0 (Rev.%02u) >>>>>>>>>>>>>21 byte&0xF 0x0 \b, LoROM >>>>>>>>>>>>>21 byte&0xF 0x1 \b, HiROM >>>>>>>>>>>>>21 byte&0x10 0x10 \b, FastROM >>>>>>>>>>>>>23 byte 8 \b, ROM size: 256KB >>>>>>>>>>>>>23 byte 9 \b, ROM size: 512KB >>>>>>>>>>>>>23 byte 10 \b, ROM size: 1024KB >>>>>>>>>>>>>23 byte 11 \b, ROM size: 2048KB >>>>>>>>>>>>>23 byte 12 \b, ROM size: 4096KB >>>>>>>>>>>>>24 byte 0 \b, RAM size: 1KB >>>>>>>>>>>>>24 byte 1 \b, RAM size: 2KB >>>>>>>>>>>>>24 byte 2 \b, RAM size: 4KB >>>>>>>>>>>>>24 byte 3 \b, RAM size: 8KB >>>>>>>>>>>>>24 byte 4 \b, RAM size: 16KB >>>>>>>>>>>>>24 byte 5 \b, RAM size: 32KB >>>>>>>>>>>>>24 byte 6 \b, RAM size: 64KB # header position for LoROM: $007FC0 32725 ubyte&0xEF 0x20 # ROM is <=4096KB, RAM is <=64KB and country<=10 >32727 ubyte <13 >>32728 ubyte <7 >>>32729 ubyte <11 >>>>32704 use snes-rom-hdr # HiROM header at $00FFC0 65493 ubyte&0xEF 0x21 # ROM is <=4096KB, RAM is <=64KB and country<=10 >65495 ubyte <13 >>65496 ubyte <7 >>>65497 ubyte <11 >>>>65472 use snes-rom-hdr #------------------------------------------------------------------------------ # ancast: file(1) magic for Wii U firmware images, aka "ancast" images. # From: David Korth # References: # - https://wiiubrew.org/wiki/Ancast_image 0 ubelong 0xEFA282D9 Wii U firmware image: >0x20 ubelong 2 ARM >>0x1A4 ubelong 0x21 \b, NAND boot >>0x1A4 ubelong 0x22 \b, SD boot >>0x1A8 ubelong 1 \b, for devkits >>0x1A8 ubelong 2 \b, for retail >0x20 ubelong 1 PowerPC >>0xA4 ubelong 0x11 \b, Wii U mode >>0xA4 ubelong 0x12 \b, Wii mode file-5.46/magic/Magdir/convex000664 023540 023540 00000005121 14015050424 017633 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: convex,v 1.8 2012/10/03 23:44:43 christos Exp $ # convex: file(1) magic for Convex boxes # # Convexes are big-endian. # # /*\ # * Below are the magic numbers and tests added for Convex. # * Added at beginning, because they are expected to be used most. # \*/ 0 belong 0507 Convex old-style object >16 belong >0 not stripped 0 belong 0513 Convex old-style demand paged executable >16 belong >0 not stripped 0 belong 0515 Convex old-style pre-paged executable >16 belong >0 not stripped 0 belong 0517 Convex old-style pre-paged, non-swapped executable >16 belong >0 not stripped 0 belong 0x011257 Core file # # The following are a series of dump format magic numbers. Each one # corresponds to a drastically different dump format. The first on is # the original dump format on a 4.1 BSD or earlier file system. The # second marks the change between the 4.1 file system and the 4.2 file # system. The Third marks the changing of the block size from 1K # to 2K to be compatible with an IDC file system. The fourth indicates # a dump that is dependent on Convex Storage Manager, because data in # secondary storage is not physically contained within the dump. # The restore program uses these number to determine how the data is # to be extracted. # 24 belong =60013 dump format, 4.2 or 4.3 BSD (IDC compatible) 24 belong =60014 dump format, Convex Storage Manager by-reference dump # # what follows is a bunch of bit-mask checks on the flags field of the opthdr. # If there is no `=' sign, assume just checking for whether the bit is set? # 0 belong 0601 Convex SOFF >88 belong&0x000f0000 =0x00000000 c1 >88 belong &0x00010000 c2 >88 belong &0x00020000 c2mp >88 belong &0x00040000 parallel >88 belong &0x00080000 intrinsic >88 belong &0x00000001 demand paged >88 belong &0x00000002 pre-paged >88 belong &0x00000004 non-swapped >88 belong &0x00000008 POSIX # >84 belong &0x80000000 executable >84 belong &0x40000000 object >84 belong&0x20000000 =0 not stripped >84 belong&0x18000000 =0x00000000 native fpmode >84 belong&0x18000000 =0x10000000 ieee fpmode >84 belong&0x18000000 =0x18000000 undefined fpmode # 0 belong 0605 Convex SOFF core # 0 belong 0607 Convex SOFF checkpoint >88 belong&0x000f0000 =0x00000000 c1 >88 belong &0x00010000 c2 >88 belong &0x00020000 c2mp >88 belong &0x00040000 parallel >88 belong &0x00080000 intrinsic >88 belong &0x00000008 POSIX # >84 belong&0x18000000 =0x00000000 native fpmode >84 belong&0x18000000 =0x10000000 ieee fpmode >84 belong&0x18000000 =0x18000000 undefined fpmode file-5.46/magic/Magdir/coverage000664 023540 023540 00000005762 14015050576 020147 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: coverage,v 1.3 2021/02/23 00:51:10 christos Exp $ # xoverage: file(1) magic for test coverage data # File formats used to store test coverage data # 2016-05-21, Georg Sauthoff # - GCC gcno - written by GCC at compile time when compiling with # gcc -ftest-coverage # - GCC gcda - written by a program that was compiled with # gcc -fprofile-arcs # - LLVM raw profiles - generated by a program compiled with # clang -fprofile-instr-generate -fcoverage-mapping ... # - LLVM indexed profiles - generated by # llvm-profdata # - GCOV reports, i.e. the annotated source code # - LCOV trace files, i.e. aggregated GCC profiles # # GCC coverage tracefiles # .gcno file are created during compile time, # while data collected during runtime is stored in .gcda files # cf. gcov-io.h # https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/Gcov-Data-Files.html # Examples: # Fedora 23/x86-64/gcc-5.3.1: 6f 6e 63 67 52 33 30 35 # Debian 8 PPC64/gcc-4.9.2 : 67 63 6e 6f 34 30 39 2a 0 lelong 0x67636e6f GCC gcno coverage (-ftest-coverage), >&3 byte x version %c. >&1 byte x \b%c # big endian 0 belong 0x67636e6f GCC gcno coverage (-ftest-coverage), >&0 byte x version %c. >&2 byte x \b%c (big-endian) # Examples: # Fedora 23/x86-64/gcc-5.3.1: 61 64 63 67 52 33 30 35 # Debian 8 PPC64/gcc-4.9.2 : 67 63 64 61 34 30 39 2a 0 lelong 0x67636461 GCC gcda coverage (-fprofile-arcs), >&3 byte x version %c. >&1 byte x \b%c # big endian 0 belong 0x67636461 GCC gcda coverage (-fprofile-arcs), >&0 byte x version %c. >&2 byte x \b%c (big-endian) # LCOV tracefiles # cf. http://ltp.sourceforge.net/coverage/lcov/geninfo.1.php 0 string TN: >&0 search/64 \nSF:/ LCOV coverage tracefile # Coverage reports generated by gcov # i.e. source code annotated with coverage information 0 string \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Source: >&0 search/128 \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Graph: >>&0 search/128 \x20\x20\x20\x20\x20\x20\x20\x20-:\x20\x20\x20\ 0:Data: GCOV coverage report # LLVM coverage files # raw data after running a program compiled with: # `clang -fprofile-instr-generate -fcoverage-mapping ...` # default name: default.profraw # magic is: \xFF lprofr \x81 # cf. https://llvm.org/docs/doxygen/html/InstrProfData_8inc_source.html 0 lequad 0xff6c70726f667281 LLVM raw profile data, >&0 byte x version %d # big endian 0 bequad 0xff6c70726f667281 LLVM raw profile data, >&7 byte x version %d (big-endian) # LLVM indexed instruction profile (as generated by llvm-profdata) # magic is: reverse(\xFF lprofi \x81) # cf. https://llvm.org/docs/CoverageMappingFormat.html # https://llvm.org/docs/doxygen/html/namespacellvm_1_1IndexedInstrProf.html # https://llvm.org/docs/CommandGuide/llvm-cov.html # https://llvm.org/docs/CommandGuide/llvm-profdata.html 0 lequad 0x8169666f72706cff LLVM indexed profile data, >&0 byte x version %d # big endian 0 bequad 0x8169666f72706cff LLVM indexed profile data, >&7 byte x version %d (big-endian) file-5.46/magic/Magdir/cracklib000664 023540 023540 00000001023 14015050424 020100 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: cracklib,v 1.7 2009/09/19 16:28:08 christos Exp $ # cracklib: file (1) magic for cracklib v2.7 0 lelong 0x70775631 Cracklib password index, little endian >4 long >0 (%i words) >4 long 0 ("64-bit") >>8 long >-1 (%i words) 0 belong 0x70775631 Cracklib password index, big endian >4 belong >-1 (%i words) # really bellong 0x0000000070775631 0 search/1 \0\0\0\0pwV1 Cracklib password index, big endian ("64-bit") >12 belong >0 (%i words) file-5.46/magic/Magdir/crypto000664 023540 023540 00000003015 14460530675 017670 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: crypto,v 1.4 2023/07/17 16:41:48 christos Exp $ # crypto: file(1) magic for crypto formats # # Bitcoin block files 0 lelong 0xD9B4BEF9 Bitcoin >(4.l+40) lelong 0xD9B4BEF9 reverse block >>4 lelong x \b, size %u # normal block below >0 default x block >>4 lelong x \b, size %u >>8 lelong&0xE0000000 0x20000000 >>>8 lelong x \b, BIP9 0x%x >>8 lelong&0xE0000000 !0x20000000 >>>8 lelong x \b, version 0x%x >>76 ledate x \b, %s UTC # VarInt counter >>88 ubyte <0xfd \b, txcount %u >>88 ubyte 0xfd >>>89 leshort x \b, txcount %u >>88 ubyte 0xfe >>>89 lelong x \b, txcount %u >>88 ubyte 0xff >>>89 lequad x \b, txcount %llu !:ext dat # option to find more blocks in the file #>>(4.l+8) indirect x ; # LevelDB -8 lequad 0xdb4775248b80fb57 LevelDB table data # http://www.tarsnap.com/scrypt.html # see scryptenc_setup() in lib/scryptenc/scryptenc.c 0 string scrypt\0 scrypt encrypted file >7 byte x \b, N=2**%d >8 belong x \b, r=%d >12 belong x \b, p=%d # https://age-encryption.org/ # Only the first recipient is printed in detail to prevent repetitive output # in extreme cases ("ssh-rsa, ssh-rsa, ssh-rsa, ..."). 0 string age-encryption.org/v1\n age encrypted file >25 regex/128 \^[^\040]+ \b, %s recipient >>25 string scrypt >>>&0 regex/64 [0-9]+\$ (N=2**%s) >>&0 search/256 \n->\040 \b, among others 0 string -----BEGIN\040AGE\040ENCRYPTED\040FILE----- age encrypted file, ASCII armored file-5.46/magic/Magdir/ctags000664 023540 023540 00000000451 14015050424 017433 0ustar00christoschristos000000 000000 # ---------------------------------------------------------------------------- # $File: ctags,v 1.6 2009/09/19 16:28:08 christos Exp $ # ctags: file (1) magic for Exuberant Ctags files # From: Alexander Mai 0 search/1 =!_TAG Exuberant Ctags tag file text file-5.46/magic/Magdir/ctf000664 023540 023540 00000001556 14634600770 017131 0ustar00christoschristos000000 000000 #-------------------------------------------------------------- # $File: ctf,v 1.5 2024/06/10 23:09:52 christos Exp $ # ctf: file(1) magic for CTF (Common Trace Format) trace files # # Specs. available here: #-------------------------------------------------------------- # CTF trace data 0 lelong 0xc1fc1fc1 Common Trace Format (CTF) trace data (LE) 0 belong 0xc1fc1fc1 Common Trace Format (CTF) trace data (BE) # CTF metadata (packetized) 0 lelong 0x75d11d57 Common Trace Format (CTF) packetized metadata (LE) >35 byte x \b, v%d >36 byte x \b.%d 0 belong 0x75d11d57 Common Trace Format (CTF) packetized metadata (BE) >35 byte x \b, v%d >36 byte x \b.%d # CTF metadata (plain text) 0 string /*\x20CTF\x20 Common Trace Format (CTF) plain text metadata !:strength + 5 # this is to make sure we beat C >&0 regex [0-9]+\\.[0-9]+ \b, v%s file-5.46/magic/Magdir/cubemap000664 023540 023540 00000000623 14015050424 017747 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: cubemap,v 1.1 2012/06/06 13:03:20 christos Exp $ # file(1) magic(5) data for cubemaps Martin Erik Werner # 0 string ACMP Map file for the AssaultCube FPS game 0 string CUBE Map file for cube and cube2 engine games 0 string MAPZ) Map file for the Blood Frontier/Red Eclipse FPS games file-5.46/magic/Magdir/cups000664 023540 023540 00000003401 14015050424 017302 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: cups,v 1.6 2019/04/19 00:42:27 christos Exp $ # Cups: file(1) magic for the cups raster file format # From: Laurent Martelli # https://www.cups.org/documentation.php/spec-raster.html # 0 name cups-le >280 lelong x \b, %d >284 lelong x \bx%d dpi >376 lelong x \b, %dx >380 lelong x \b%d pixels >388 lelong x %d bits/color >392 lelong x %d bits/pixel >400 lelong 0 ColorOrder=Chunky >400 lelong 1 ColorOrder=Banded >400 lelong 2 ColorOrder=Planar >404 lelong 0 ColorSpace=gray >404 lelong 1 ColorSpace=RGB >404 lelong 2 ColorSpace=RGBA >404 lelong 3 ColorSpace=black >404 lelong 4 ColorSpace=CMY >404 lelong 5 ColorSpace=YMC >404 lelong 6 ColorSpace=CMYK >404 lelong 7 ColorSpace=YMCK >404 lelong 8 ColorSpace=KCMY >404 lelong 9 ColorSpace=KCMYcm >404 lelong 10 ColorSpace=GMCK >404 lelong 11 ColorSpace=GMCS >404 lelong 12 ColorSpace=WHITE >404 lelong 13 ColorSpace=GOLD >404 lelong 14 ColorSpace=SILVER >404 lelong 15 ColorSpace=CIE XYZ >404 lelong 16 ColorSpace=CIE Lab >404 lelong 17 ColorSpace=RGBW >404 lelong 18 ColorSpace=sGray >404 lelong 19 ColorSpace=sRGB >404 lelong 20 ColorSpace=AdobeRGB # Cups Raster image format, Big Endian 0 string RaS >3 string t Cups Raster version 1, Big Endian >3 string 2 Cups Raster version 2, Big Endian >3 string 3 Cups Raster version 3, Big Endian !:mime application/vnd.cups-raster >0 use \^cups-le # Cups Raster image format, Little Endian 1 string SaR >0 string t Cups Raster version 1, Little Endian >0 string 2 Cups Raster version 2, Little Endian >0 string 3 Cups Raster version 3, Little Endian !:mime application/vnd.cups-raster >0 use cups-le file-5.46/magic/Magdir/dact000664 023540 023540 00000000573 14015050424 017252 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: dact,v 1.4 2009/09/19 16:28:08 christos Exp $ # dact: file(1) magic for DACT compressed files # 0 long 0x444354C3 DACT compressed data >4 byte >-1 (version %i. >5 byte >-1 $BS%i. >6 byte >-1 $BS%i) >7 long >0 $BS, original size: %i bytes >15 long >30 $BS, block size: %i bytes file-5.46/magic/Magdir/database000664 023540 023540 00000103516 14713743455 020126 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: database,v 1.73 2024/11/09 19:54:36 christos Exp $ # database: file(1) magic for various databases # # extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk) # # # GDBM magic numbers # Will be maintained as part of the GDBM distribution in the future. # 0 belong 0x13579acd GNU dbm 1.x or ndbm database, big endian, 32-bit !:mime application/x-gdbm 0 belong 0x13579ace GNU dbm 1.x or ndbm database, big endian, old !:mime application/x-gdbm 0 belong 0x13579acf GNU dbm 1.x or ndbm database, big endian, 64-bit !:mime application/x-gdbm 0 lelong 0x13579acd GNU dbm 1.x or ndbm database, little endian, 32-bit !:mime application/x-gdbm 0 lelong 0x13579ace GNU dbm 1.x or ndbm database, little endian, old !:mime application/x-gdbm 0 lelong 0x13579acf GNU dbm 1.x or ndbm database, little endian, 64-bit !:mime application/x-gdbm 0 string GDBM GNU dbm 2.x database !:mime application/x-gdbm # # Berkeley DB # # Ian Darwin's file /etc/magic files: big/little-endian version. # # Hash 1.85/1.86 databases store metadata in network byte order. # Btree 1.85/1.86 databases store the metadata in host byte order. # Hash and Btree 2.X and later databases store the metadata in host byte order. 0 long 0x00061561 Berkeley DB !:mime application/x-dbm >8 belong 4321 >>4 belong >2 1.86 >>4 belong <3 1.85 >>4 belong >0 (Hash, version %d, native byte-order) >8 belong 1234 >>4 belong >2 1.86 >>4 belong <3 1.85 >>4 belong >0 (Hash, version %d, little-endian) 0 belong 0x00061561 Berkeley DB >8 belong 4321 >>4 belong >2 1.86 >>4 belong <3 1.85 >>4 belong >0 (Hash, version %d, big-endian) >8 belong 1234 >>4 belong >2 1.86 >>4 belong <3 1.85 >>4 belong >0 (Hash, version %d, native byte-order) 0 long 0x00053162 Berkeley DB 1.85/1.86 >4 long >0 (Btree, version %d, native byte-order) 0 belong 0x00053162 Berkeley DB 1.85/1.86 >4 belong >0 (Btree, version %d, big-endian) 0 lelong 0x00053162 Berkeley DB 1.85/1.86 >4 lelong >0 (Btree, version %d, little-endian) 12 long 0x00061561 Berkeley DB >16 long >0 (Hash, version %d, native byte-order) 12 belong 0x00061561 Berkeley DB >16 belong >0 (Hash, version %d, big-endian) 12 lelong 0x00061561 Berkeley DB >16 lelong >0 (Hash, version %d, little-endian) 12 long 0x00053162 Berkeley DB >16 long >0 (Btree, version %d, native byte-order) 12 belong 0x00053162 Berkeley DB >16 belong >0 (Btree, version %d, big-endian) 12 lelong 0x00053162 Berkeley DB >16 lelong >0 (Btree, version %d, little-endian) 12 long 0x00042253 Berkeley DB >16 long >0 (Queue, version %d, native byte-order) 12 belong 0x00042253 Berkeley DB >16 belong >0 (Queue, version %d, big-endian) 12 lelong 0x00042253 Berkeley DB >16 lelong >0 (Queue, version %d, little-endian) # From Max Bowsher. 12 long 0x00040988 Berkeley DB >16 long >0 (Log, version %d, native byte-order) 12 belong 0x00040988 Berkeley DB >16 belong >0 (Log, version %d, big-endian) 12 lelong 0x00040988 Berkeley DB >16 lelong >0 (Log, version %d, little-endian) # # # Round Robin Database Tool by Tobias Oetiker 0 string/b RRD\0 RRDTool DB >4 string/b x version %s >>10 short !0 16bit aligned >>>10 bedouble 8.642135e+130 big-endian >>>>18 short x 32bit long (m68k) >>10 short 0 >>>12 long !0 32bit aligned >>>>12 bedouble 8.642135e+130 big-endian >>>>>20 long 0 64bit long >>>>>20 long !0 32bit long >>>>12 ledouble 8.642135e+130 little-endian >>>>>24 long 0 64bit long >>>>>24 long !0 32bit long (i386) >>>>12 string \x43\x2b\x1f\x5b\x2f\x25\xc0\xc7 middle-endian >>>>>24 short !0 32bit long (arm) >>8 quad 0 64bit aligned >>>16 bedouble 8.642135e+130 big-endian >>>>24 long 0 64bit long (s390x) >>>>24 long !0 32bit long (hppa/mips/ppc/s390/SPARC) >>>16 ledouble 8.642135e+130 little-endian >>>>28 long 0 64bit long (alpha/amd64/ia64) >>>>28 long !0 32bit long (armel/mipsel) #---------------------------------------------------------------------- # ROOT: file(1) magic for ROOT databases # 0 string root\0 ROOT file >4 belong x Version %d >33 belong x (Compression: %d) # XXX: Weak magic. # Alex Ott ## Paradox file formats #2 leshort 0x0800 Paradox #>0x39 byte 3 v. 3.0 #>0x39 byte 4 v. 3.5 #>0x39 byte 9 v. 4.x #>0x39 byte 10 v. 5.x #>0x39 byte 11 v. 5.x #>0x39 byte 12 v. 7.x #>>0x04 byte 0 indexed .DB data file #>>0x04 byte 1 primary index .PX file #>>0x04 byte 2 non-indexed .DB data file #>>0x04 byte 3 non-incrementing secondary index .Xnn file #>>0x04 byte 4 secondary index .Ynn file #>>0x04 byte 5 incrementing secondary index .Xnn file #>>0x04 byte 6 non-incrementing secondary index .XGn file #>>0x04 byte 7 secondary index .YGn file #>>>0x04 byte 8 incrementing secondary index .XGn file ## XBase database files # updated by Joerg Jenderek at Feb 2013 # https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm # https://www.clicketyclick.dk/databases/xbase/format/dbf.html # inspect VVYYMMDD , where 1<= MM <= 12 and 1<= DD <= 31 0 ubelong&0x0000FFFF <0x00000C20 !:strength +10 # skip Infocom game Z-machine >2 ubyte >0 # skip Androids *.xml >>3 ubyte >0 >>>3 ubyte <32 # 1 < version VV >>>>0 ubyte >1 # skip HELP.CA3 by test for reserved byte ( NULL ) >>>>>27 ubyte 0 # reserved bytes not always 0 ; also found 0x3901 (T4.DBF) ,0x7101 (T5.DBF,T6.DBF) #>>>>>30 ubeshort x 30NULL?%x # possible production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL) >>>>>>24 ubelong&0xffFFFFff >0x01302000 # .DBF or .MDX >>>>>>24 ubelong&0xffFFFFff <0x01302001 # for Xbase Database file (*.DBF) reserved (NULL) for multi-user >>>>>>>24 ubelong&0xffFFFFff =0 # test for 2 reserved NULL bytes,transaction and encryption byte flag >>>>>>>>12 ubelong&0xFFFFfEfE 0 # test for MDX flag >>>>>>>>>28 ubyte x >>>>>>>>>28 ubyte&0xf8 0 # header size >= 32 >>>>>>>>>>8 uleshort >31 # skip PIC15736.PCX by test for language driver name or field name >>>>>>>>>>>32 ubyte >0 #!:mime application/x-dbf; charset=unknown-8bit ?? #!:mime application/x-dbase >>>>>>>>>>>>0 use xbase-type # database file >>>>>>>>>>>>28 ubyte&0x04 =0 \b DBF !:ext dbf >>>>>>>>>>>>28 ubyte&0x04 =4 \b DataBaseContainer !:ext dbc >>>>>>>>>>>>4 lelong 0 \b, no records >>>>>>>>>>>>4 lelong >0 \b, %d record # plural s appended >>>>>>>>>>>>>4 lelong >1 \bs # https://www.clicketyclick.dk/databases/xbase/format/dbf_check.html#CHECK_DBF # 1 <= record size <= 4000 (dBase 3,4) or 32 * KB (=0x8000) >>>>>>>>>>>>10 uleshort x * %d # file size = records * record size + header size >>>>>>>>>>>>1 ubyte x \b, update-date >>>>>>>>>>>>1 use xbase-date # https://msdn.microsoft.com/de-de/library/cc483186(v=vs.71).aspx #>>>>>>>>>>>>29 ubyte =0 \b, codepage ID=%#x # 2~cp850 , 3~cp1252 , 0x1b~?? ; what code page is 0x1b ? >>>>>>>>>>>>29 ubyte >0 \b, codepage ID=%#x #>>>>>>>>>>>>28 ubyte&0x01 0 \b, no index file # MDX or CDX index >>>>>>>>>>>>28 ubyte&0x01 1 \b, with index file .MDX >>>>>>>>>>>>28 ubyte&0x02 2 \b, with memo .FPT #>>>>>>>>>>>>28 ubyte&0x04 4 \b, DataBaseContainer # 1st record offset + 1 = header size >>>>>>>>>>>>8 uleshort >0 >>>>>>>>>>>>(8.s+1) ubyte >0 >>>>>>>>>>>>>8 uleshort >0 \b, at offset %d >>>>>>>>>>>>>(8.s+1) ubyte >0 >>>>>>>>>>>>>>&-1 string >\0 1st record "%s" # for multiple index files (*.MDX) Production flag,tag numbers(<=0x30),tag length(<=0x20), reserved (NULL) >>>>>>>24 ubelong&0x0133f7ff >0 # test for reserved NULL byte >>>>>>>>47 ubyte 0 # test for valid TAG key format (0x10 or 0) >>>>>>>>>559 ubyte&0xeF 0 # test MM <= 12 >>>>>>>>>>45 ubeshort <0x0C20 >>>>>>>>>>>45 ubyte >0 >>>>>>>>>>>>46 ubyte <32 >>>>>>>>>>>>>46 ubyte >0 #!:mime application/x-mdx >>>>>>>>>>>>>>0 use xbase-type >>>>>>>>>>>>>>0 ubyte x \b MDX >>>>>>>>>>>>>>1 ubyte x \b, creation-date >>>>>>>>>>>>>>1 use xbase-date >>>>>>>>>>>>>>44 ubyte x \b, update-date >>>>>>>>>>>>>>44 use xbase-date # No.of tags in use (1,2,5,12) >>>>>>>>>>>>>>28 uleshort x \b, %d # No. of entries in tag (0x30) >>>>>>>>>>>>>>25 ubyte x \b/%d tags # Length of tag >>>>>>>>>>>>>>26 ubyte x * %d # 1st tag name_ >>>>>>>>>>>>>548 string x \b, 1st tag "%.11s" # 2nd tag name #>>>>>>>>>>>>(26.b+548) string x \b, 2nd tag "%.11s" # # Print the xBase names of different version variants 0 name xbase-type >0 ubyte <2 # 1 < version >0 ubyte >1 >>0 ubyte 0x02 FoxBase !:mime application/x-dbf # like: ACCESS.DBF USER.DBF dbase3date.dbf mitarbei.dbf produkte.dbf umlaut-test-v2.dbf # FoxBase+/dBaseIII+, no memo >>0 ubyte 0x03 FoxBase+/dBase III !:mime application/x-dbf # like: 92DATA.DBF MSCATLOG.DBF SYLLABI2.DBF SYLLABUS.DBF T4.DBF Teleadr.dbf us_city.dbf # dBASE IV no memo file >>0 ubyte 0x04 dBase IV !:mime application/x-dbf # like: Quattro-test11.dbf umlaut-test-v4.dbf # dBASE V no memo file >>0 ubyte 0x05 dBase V !:mime application/x-dbf # like: dbase4double.dbf Quattro-test2.dbf umlaut-test7.dbf !:ext dbf # probably Apollo Database Server 9.7? xBase (0x6) >>0 ubyte 0x06 Apollo !:mime application/x-dbf # like: ALIAS.DBF CRYPT.DBF PROCS.DBF USERS.DBF # https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80) >>0 ubyte 0x2F FoxBase+/Dbase III plus, no memo !:mime application/x-dbf # no example >>0 ubyte 0x30 Visual FoxPro !:mime application/x-dbf # like: 26FRX.DBF 30DBC.DBF 30DBCPRO.DBF BEHINDSC.DBF USER_LEV.DBF # Microsoft Visual FoxPro Database Container File like: FOXPRO-DB-TEST.DBC TESTDATA.DBC TASTRADE.DBC >>0 ubyte 0x31 Visual FoxPro, autoincrement !:mime application/x-dbf # like: AI_Table.DBF dbase_31.dbf w_cityFoxpro.dbf # Visual FoxPro, with field type Varchar or Varbinary >>0 ubyte 0x32 Visual FoxPro, with field type Varchar !:mime application/x-dbf # like: dbase_32.dbf # dBASE IV SQL, no memo;dbv memo var size (Flagship) >>0 ubyte 0x43 dBase IV, with SQL table !:mime application/x-dbf # like: ASSEMBLY.DBF INVENTRY.DBF STAFF.DBF # https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80) >>0 ubyte 0x62 dBase IV, with SQL table #!:mime application/x-dbf # no example # dBASE IV, with memo!! >>0 ubyte 0x7b dBase IV, with memo !:mime application/x-dbf # like: test3memo.DBF dbase5.DBF # https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80) >>0 ubyte 0x82 dBase IV, with SQL system #!:mime application/x-dbf # no example # FoxBase+/dBaseIII+ with memo .DBT! >>0 ubyte 0x83 FoxBase+/dBase III, with memo .DBT !:mime application/x-dbf # like: T2.DBF t3.DBF biblio.dbf dbase_83.dbf dbase3dbt0_4.dbf fsadress.dbf stop.dbf # VISUAL OBJECTS (first 1.0 versions) for the Dbase III files (NTX clipper driver); memo file >>0 ubyte 0x87 VISUAL OBJECTS, with memo file !:mime application/x-dbf # like: ACCESS.DBF dbase3date.dbf dbase3float.dbf holdings.dbf mitarbei.dbf # https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80) >>0 ubyte 0x8A FoxBase+/dBase III, with memo .DBT #!:mime application/x-dbf # no example # dBASE IV with memo! >>0 ubyte 0x8B dBase IV, with memo .DBT !:mime application/x-dbf # like: animals.dbf archive.dbf callin.dbf dbase_8b.dbf phnebook.dbf t6.dbf # dBase IV with SQL Table,no memo? >>0 ubyte 0x8E dBase IV, with SQL table !:mime application/x-dbf # like: dbase5.DBF test3memo.DBF test-memo.DBF # .dbv and .dbt memo (Flagship)? >>0 ubyte 0xB3 Flagship !:mime application/x-dbf # no example # https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80) >>0 ubyte 0xCA dBase IV with memo .DBT #!:mime application/x-dbf # no example # dBASE IV with SQL table, with memo .DBT >>0 ubyte 0xCB dBase IV with SQL table, with memo .DBT !:mime application/x-dbf # like: dbase5.DBF test3memo.DBF test-memo.DBF # HiPer-Six format;Clipper SIX, with SMT memo file >>0 ubyte 0xE5 Clipper SIX with memo !:mime application/x-dbf # like: dbase5.DBF test3memo.DBF test-memo.DBF testClipper.dbf DATA.DBF # https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80) >>0 ubyte 0xF4 dBase IV, with SQL table, with memo #!:mime application/x-dbf # no example >>0 ubyte 0xF5 FoxPro with memo !:mime application/x-dbf # like: CUSTOMER.DBF FOXUSER1.DBF Invoice.DBF NG.DBF OBJSAMP.DBF dbase_f5.dbf kunde.dbf # probably Apollo Database Server 9.7 with SQL and memo mask? xBase (0xF6) >>0 ubyte 0xF6 Apollo, with SQL table with memo !:mime application/x-dbf # like: SCRIPTS.DBF # https://docs.microsoft.com/en-us/previous-versions/visualstudio/foxpro/st4a0s68(v=vs.80) #>>0 ubyte 0xFA FoxPro 2.x, with memo #!:mime application/x-dbf # no example # unknown version (should not happen) >>0 default x xBase !:mime application/x-dbf >>>0 ubyte x (%#x) # flags in version byte # DBT flag (with dBASE III memo .DBT)!! # >>0 ubyte&0x80 >0 DBT_FLAG=%x # memo flag ?? # >>0 ubyte&0x08 >0 MEMO_FLAG=%x # SQL flag ?? # >>0 ubyte&0x70 >0 SQL_FLAG=%x # test and print the date of xBase .DBF .MDX 0 name xbase-date # inspect YYMMDD , where 1<= MM <= 12 and 1<= DD <= 31 >0 ubelong x >1 ubyte <13 >>1 ubyte >0 >>>2 ubyte >0 >>>>2 ubyte <32 >>>>>0 ubyte x # YY is interpreted as 20YY or 19YY >>>>>>0 ubyte <100 \b %.2d # YY is interpreted 1900+YY; TODO: display yy or 20yy instead 1YY >>>>>>0 ubyte >99 \b %d >>>>>1 ubyte x \b-%d >>>>>2 ubyte x \b-%d # dBase memo files .DBT or .FPT # https://msdn.microsoft.com/en-us/library/8599s21w(v=vs.80).aspx 16 ubyte <4 >16 ubyte !2 >>16 ubyte !1 # next free block index is positive >>>0 ulelong >0 # skip many JPG. ZIP, BZ2 by test for reserved bytes NULL , 0|2 , 0|1 , low byte of block size >>>>17 ubelong&0xFFfdFEff 0x00000000 # skip many RAR by test for low byte 0 ,high byte 0|2|even of block size, 0|a|e|d7 , 0|64h >>>>>20 ubelong&0xFF01209B 0x00000000 # dBASE III >>>>>>16 ubyte 3 # skip with invalid "low" 1st item "\0\0\0\0" StateRepository-Deployment.srd-shm "\001\010\0\0" gcry_cast5.mod >>>>>>>512 ubyte >040 # skip with valid 1st item "rintf" keylayouts.mod # by looking for valid terminating character Ctrl-Z like in test.dbt >>>>>>>>513 search/3308 \032 # skip GRUB plan9.mod with invalid second terminating character 007 # by checking second terminating character Ctrl-Z like in test.dbt >>>>>>>>>&0 ubyte 032 # dBASE III DBT with two Ctr-Z terminating characters >>>>>>>>>>0 use dbase3-memo-print # second terminating character \0 like in dbase-memo.dbt or GRUB nativedisk.mod >>>>>>>>>&0 ubyte 0 # skip GRUB nativedisk.mod with grub_mod_init\0grub_mod_fini\0grub_fs_autoload_hook\0 >>>>>>>>>>0x1ad string !grub_mod_init # like dbase-memo.dbt >>>>>>>>>>>0 use dbase3-memo-print # dBASE III DBT without version, dBASE IV DBT , FoxPro FPT , or many ZIP , DBF garbage >>>>>>16 ubyte 0 # unusual dBASE III DBT like angest.dbt, dBASE IV DBT with block size 0 , FoxPro FPT , or garbage PCX DBF >>>>>>>20 uleshort 0 # FoxPro FPT , unusual dBASE III DBT like biblio.dbt or garbage >>>>>>>>8 ulong =0 >>>>>>>>>6 ubeshort >0 # skip emacs.PIF >>>>>>>>>>4 ushort 0 # check for valid FoxPro field type >>>>>>>>>>>512 ubelong <3 # skip LXMDCLN4.OUT LXMDCLN6.OUT LXMDALG6.OUT with invalid blocksize 170=AAh >>>>>>>>>>>>6 ubeshort&0x002f 0 >>>>>>>>>>>>>0 use foxpro-memo-print # dBASE III DBT , garbage # skip WORD1XW.DOC with improbably high free block index >>>>>>>>>0 ulelong <0x400000 # skip WinStore.App.exe by looking for printable 2nd character of 1st memo item >>>>>>>>>>513 ubyte >037 # skip DOS executables CPQ0TD.DRV E30ODI.COM IBM0MONO.DRV by looking for printable 1st character of 1st memo item >>>>>>>>>>>512 ubyte >037 # skip few (14/758) Microsoft Event Trace Logs (boot_BASE+CSWITCH_1.etl DlTel-Merge.etl UpdateUx.006.etl) with invalid "high" 1st item \377\377 >>>>>>>>>>>>512 ubyte <0377 # skip some Commodore 64 Art Studio (Deep_Strike.aas dragon's_lair_ii.aas), some Atari DEGAS Elite bitmap (ELEPHANT.PC3 ST.PC2) # some probably old GRUB modules (part_sun.mod) and virtual-boy-wario-land.vb. # by looking for valid terminating character Ctrl-Z >>>>>>>>>>>>>513 search/523 \032 # Atari DEGAS bitmap ST.PC2 with 0370 as second terminating character #>>>>>>>>>>>>>>&0 ubyte x 2ND_CHAR_IS=%o # dBASE III DBT with two Ctr-Z terminating characters like dbase3dbt0_1.dbt dbase_83.dbt >>>>>>>>>>>>>>&0 ubyte 032 >>>>>>>>>>>>>>>0 use dbase3-memo-print # second terminating character \0 like in pcidump.mod or fsadress.dbt umlaut-dbf-cmd.dbt >>>>>>>>>>>>>>&0 ubyte 0 # look for old GRUB module pcidump.mod with specific content "pcidump\0Show raw dump of the PCI configuration space" >>>>>>>>>>>>>>>514 search/0x11E pcidump\0Show # dBASE III DBT with Ctr-Z + \0 terminating characters like fsadress.dbt >>>>>>>>>>>>>>>514 default x # unusual dBASE III DBT like fsadress.dbt umlaut-dbf-cmd.dbt >>>>>>>>>>>>>>>>0 use dbase3-memo-print # dBASE III DBT like angest.dbt, or garbage PCX DBF >>>>>>>>8 ubelong !0 # skip PCX and some DBF by test for for reserved NULL bytes >>>>>>>>>510 ubeshort 0 # skip bad symples with improbably high free block index above 2 GiB file limit >>>>>>>>>>0 ulelong <0x400000 # skip AI070GEP.EPS by printable 1st character of 1st memo item >>>>>>>>>>>512 ubyte >037 # skip some Microsoft Visual C, OMF library like: BZ2.LIB WATTCPWL.LIB ZLIB.LIB >>>>>>>>>>>>512 ubyte <0200 # skip gluon-ffhat-1.0-tp-link-tl-wr1043n-nd-v2-sysupgrade.bin by printable 2nd character >>>>>>>>>>>>>513 ubyte >037 # skip few (8/758) Microsoft Event Trace Logs (WBEngine.3.etl Wifi.etl) with valid 1st item like # "9600.20369.amd64fre.winblue_ltsb_escrow.220427-1727" # "9600.19846.amd64fre.winblue_ltsb_escrow.200923-1735" # "10586.494.amd64fre.th2_release_sec.160630-1736" # by looking for valid terminating character Ctrl-Z >>>>>>>>>>>>>>513 search/0x11E \032 # followed by second character Ctrl-Z implies typical DBT >>>>>>>>>>>>>>>&0 ubyte 032 # examples like: angest.dbt >>>>>>>>>>>>>>>>0 use dbase3-memo-print >>>>>>>>>>>>>>>&0 ubyte 0 # no example found here with terminating sequence CTRL-Z + \0 >>>>>>>>>>>>>>>>0 use dbase3-memo-print # dBASE IV DBT with positive block size >>>>>>>20 uleshort >0 # dBASE IV DBT with valid block length like 512, 1024 # multiple of 2 in between 16 and 16 K ,implies upper and lower bits are zero # skip also 3600h 3E00h size >>>>>>>>20 uleshort&0xE00f 0 >>>>>>>>>0 use dbase4-memo-print # Print the information of dBase III DBT memo file 0 name dbase3-memo-print >0 ubyte x dBase III DBT !:mime application/x-dbt !:ext dbt # instead 3 as version number 0 for unusual examples like biblio.dbt >16 ubyte !3 \b, version number %u # Number of next available block for appending data #>0 lelong =0 \b, next free block index %u >0 lelong !0 \b, next free block index %u # no positive block length #>20 uleshort =0 \b, block length %u >20 uleshort !0 \b, block length %u # dBase III memo field terminated often by \032\032 # like: "WHAT IS XBASE" test.dbt "Borges, Malte" biblio.dbt "First memo\032\032" T2.DBT >512 string >\0 \b, 1st item "%s" # For DEBUGGING #>512 ubelong x \b, 1ST item %#8.8x #>513 search/0x225 \032 FOUND_TERMINATOR #>>&0 ubyte 032 2xCTRL_Z # fsadress.dbt has 1 Ctrl-Z terminator followed by nil byte #>>&0 ubyte 0 1xCTRL_Z # https://www.clicketyclick.dk/databases/xbase/format/dbt.html # Print the information of dBase IV DBT memo file 0 name dbase4-memo-print >0 lelong x dBase IV DBT !:mime application/x-dbt !:ext dbt # 8 character shorted main name of corresponding dBASE IV DBF file >8 ubelong >0x20000000 # skip unusual like for angest.dbt >>20 uleshort >0 >>>8 string >\0 \b of %-.8s.DBF # value 0 implies 512 as size #>4 ulelong =0 \b, blocks size %u # size of blocks not reliable like 0x2020204C in angest.dbt >4 ulelong !0 >>4 ulelong&0x0000003f 0 \b, blocks size %u # dBase IV DBT with positive block length (found 512 , 1024) >20 uleshort >0 \b, block length %u # next available block #>0 lelong =0 \b, next free block index %u >0 lelong !0 \b, next free block index %u >20 uleshort >0 >>(20.s) ubelong x >>>&-4 use dbase4-memofield-print # unusual dBase IV DBT without block length (implies 512 as length) >20 uleshort =0 >>512 ubelong x >>>&-4 use dbase4-memofield-print # Print the information of dBase IV memo field 0 name dbase4-memofield-print # free dBase IV memo field >0 ubelong !0xFFFF0800 >>0 lelong x \b, next free block %u >>4 lelong x \b, next used block %u # used dBase IV memo field >0 ubelong =0xFFFF0800 # length of memo field >>4 lelong x \b, field length %d >>>8 string >\0 \b, 1st used item "%s" # http://www.dbfree.org/webdocs/1-documentation/0018-developers_stuff_(advanced)/os_related_stuff/xbase_file_format.htm # Print the information of FoxPro FPT memo file 0 name foxpro-memo-print >0 belong x FoxPro FPT !:mime application/x-fpt !:ext fpt # Size of blocks for FoxPro ( 64,256 ); probably a multiple of two >6 ubeshort x \b, blocks size %u # next available block #>0 belong =0 \b, next free block index %u >0 belong !0 \b, next free block index %u # field type ( 0~picture, 1~memo, 2~object ) >512 ubelong <3 \b, field type %u # length of memo field >512 ubelong 1 >>516 belong >0 \b, field length %d >>>520 string >\0 \b, 1st item "%s" # Summary: DBASE Compound Index file *.CDX and FoxPro index *.IDX # From: Joerg Jenderek # URL: https://www.clicketyclick.dk/databases/xbase/format/cdx.html # https://www.clicketyclick.dk/databases/xbase/format/idx.html # https://www.clicketyclick.dk/databases/xbase/format/idx_comp.html # Reference: https://mark0.net/download/triddefs_xml.7z/defs/s/sybase-ianywhere-cdx.trid.xml # https://mark0.net/download/triddefs_xml.7z/defs/c/cdx-vfp7.trid.xml # like: kunde.cdx 0 ulelong 0x1C00 >0 use xbase-index # like: SYLLABI2.CDX SYLLABUS.CDX 0 ulelong 0x0800 >0 use xbase-index # often in xBase index pointer to root node 400h 0 ulelong 0x0400 # skip most Maple help database *.hdb with version tag handled by ./maple >1028 string !version # skip Maple help database hsum.hdb checking for valid reserved area >>492 quad =0 # skip remaining Maple help database *.hdb by checking key length #>>>12 uleshort !0x000F KEY_LENGTHVALID >>>0 use xbase-index # display information about dBase/FoxPro index 0 name xbase-index >0 ulelong x xBase !:mime application/x-dbase-index >14 ubyte &0x40 compound index # DCX for FoxPro database index like: TESTDATA.DCX !:ext cdx/dcx >14 ubyte ^0x40 index # only 1 example like: TEST.IDX !:ext idx # pointer to root node like: 1C00h 800h often 400h >0 ulelong !0x400 \b, root pointer %#x # Pointer to free node list: often 0 but -1 if not present >4 ulelong !0 \b, free node pointer %#x # MAYBE number of pages in file (Foxbase, FoxPro 1.x) or # http://www.foxpert.com/foxpro/knowlbits/files/knowlbits_200708_1.HTM # Whenever Visual FoxPro updates the index file it increments this reserved field # Reserved for internal use like: 02000000h 03000000h 460c0000h 780f0000h 89000000h 9fdc0100h often 0 >8 ulelong !0 \b, reserved counter %#x # length of key like: mostly 000Ah 0028h (TEST.IDX) >12 uleshort !0x000A \b, key length %#x # index options like: 24h E0h E8h # 1~a unique index 8~index has FOR clause 32~compact index format 64~compound index header # 16~Bit vector (SoftC) 128~Structure index (FoxPro) >14 ubyte x \b, index options (%#x >14 ubyte &0x01 \b, unique >14 ubyte &0x08 \b, has FOR clause >14 ubyte &0x10 \b, bit vector (SoftC) >14 ubyte &0x20 \b, compact format #>14 ubyte &0x40 \b, compound header >14 ubyte &0x80 \b, structure >14 ubyte x \b) # WHAT EXACTLY IS THAT? index signature like: 0 (sybase-ianywhere-cdx.trid.xml) 1 (cdx-vfp7.trid.xml) >15 ubyte !0 \b, index signature %u # reserved area (0-bytes) til about 500, but not for uncompressed Index files *.idx >16 quad !0 \b, at 16 reserved %#llx >492 quad !0 \b, at 492 reserved %#llx # for IDX variant #>14 ubyte ^0x40 IDX # for CDX variant >14 ubyte &0x40 # Ascending or descending: 0~ascending 1~descending >>502 uleshort x \b, sort order %u # Total expression length (FoxPro 2) like: 0 1 >>504 uleshort !0 \b, expression length %u # FOR expression pool length like: 1 >>506 uleshort !1 \b, FOR expression pool length %#x # reserved for internal use like: 0 >>508 uleshort !0 \b, at 0x508 reserved %#x # Key expression pool length like: 1 >>510 uleshort !1 \b, key expression pool length %#x # 512 - 1023 Key & FOR expression pool (uncompiled) >>512 quad !0 \b, key expression pool %#llx #>>520 quad !0 \b, key expression pool %#llx # Summary: dBASE IV Printer Form *.PRF # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/.dbf#Other_file_types_found_in_dBASE # Reference: https://mark0.net/download/triddefs_xml.7z/defs/p/prf-dbase.trid.xml 0 ubeshort 0x0400 # skip some Xbase Index files *.ndx and Infocom (Z-machine 4) *.z4 handled by ./adventure # by looking for valid printer driver name extension >0x58 search/8 .PR2 >>0 use xbase-prf # display information of dbase print form like printer driver *.PR2 0 name xbase-prf dBase Printer Form !:mime application/x-dbase-prf !:ext prf # MAYBE version? like: 4~DBASE IV #>0 ubyte x \b, version %u # MAYBE flag like: 1~with output file name 0~not #>2 ubyte !0 \b, flag %u # optional printer text output file name like E:\DBASE\IV\T6.txt >3 string >\0 \b, output file %s # probably padding with nils til 0x53 #>0x48 uquad !0 \b, at 0x48 padding %#llx # dBASE IV printer driver name like: Generic.PR2 ASCII.PR2 >0x56 string >\0 \b, using printer driver %s # 2 is probably last character of previous dBASE printer driver name #>0x60 ubyte !0x32 \b, at 0x60 %#x # probably padding with nils til 0xa8 #>0x61 uquad !0 \b, at 0x61 padding %#llx # unknown 0x03020300 0x03020100 at 0xa8 >0xa8 ubelong x \b, at 0xa8 unknown %#8.8x # probably padding with nils til 0x2aa #>0x2a0 uquad !0 \b, at 0x2a0 padding %#llx # unknown 0x100ff7f01000001 at 0x2AB >0x2ab ubequad !0x100ff7f01000001 \b, at 0x2ab unknown %#llx # unknown 0x0042 at 0x2b3 >0x2b3 ubeshort !0x0042 \b, at 0x2b3 unknown %#4.4x # unknown last 4 bytes at 0x2b6 like: 0 0x23 >0x2b6 ubelong !0 \b, at 0x2b6 unknown %#8.8x # TODO: # DBASE index file *.NDX # dBASE compiled Format *.FMO # FoxPro Database memo file *.DCT # FoxPro Forms Memo *.SCT # FoxPro Generated Menu Program *.MPR # FoxPro Report *.FRX # FoxPro Report Memo *.FRT # Foxpro Generated Screen Program *.SPR # Foxpro memo *.PJT ## End of XBase database stuff # MS Access database 4 string Standard\ Jet\ DB Microsoft Access Database !:mime application/x-msaccess 4 string Standard\ ACE\ DB Microsoft Access Database !:mime application/x-msaccess # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Extensible_Storage_Engine # Reference: https://github.com/libyal/libesedb/archive/master.zip # libesedb-master/documentation/ # Extensible Storage Engine (ESE) Database File (EDB) format.asciidoc # Note: also known as "JET Blue". Used by numerous Windows components such as # Windows Search, Mail, Exchange and Active Directory. 4 ubelong 0xefcdab89 # unknown1 >132 ubelong 0 Extensible storage engine !:mime application/x-ms-ese # file_type 0~database 1~stream >>12 ulelong 0 DataBase # Security DataBase (sdb) !:ext edb/sdb >>12 ulelong 1 STreaMing !:ext stm # format_version 620h >>8 uleshort x \b, version %#x >>10 uleshort >0 revision %#4.4x >>0 ubelong x \b, checksum %#8.8x # Page size 4096 8192 32768 >>236 ulequad x \b, page size %lld # database_state >>52 ulelong 1 \b, JustCreated >>52 ulelong 2 \b, DirtyShutdown #>>52 ulelong 3 \b, CleanShutdown >>52 ulelong 4 \b, BeingConverted >>52 ulelong 5 \b, ForceDetach # Windows NT major version when the databases indexes were updated. >>216 ulelong x \b, Windows version %d # Windows NT minor version >>220 ulelong x \b.%d # From: Joerg Jenderek # URL: https://forensicswiki.org/wiki/Windows_Application_Compatibility # Note: files contain application compatibility fixes, application compatibility modes and application help messages. 8 string sdbf >7 ubyte 0 # TAG_TYPE_LIST+TAG_INDEXES >>12 uleshort 0x7802 Windows application compatibility Shim DataBase # version? 2 3 #>>>0 ulelong x \b, version %d !:mime application/x-ms-sdb !:ext sdb # TDB database from Samba et al - Martin Pool 0 string TDB\ file TDB database >32 lelong 0x2601196D version 6, little-endian >>36 lelong x hash size %d bytes # ICE authority file data (Wolfram Kleff) 2 string ICE ICE authority data # X11 Xauthority file (Wolfram Kleff) 10 string MIT-MAGIC-COOKIE-1 X11 Xauthority data 11 string MIT-MAGIC-COOKIE-1 X11 Xauthority data 12 string MIT-MAGIC-COOKIE-1 X11 Xauthority data 13 string MIT-MAGIC-COOKIE-1 X11 Xauthority data 14 string MIT-MAGIC-COOKIE-1 X11 Xauthority data 15 string MIT-MAGIC-COOKIE-1 X11 Xauthority data 16 string MIT-MAGIC-COOKIE-1 X11 Xauthority data 17 string MIT-MAGIC-COOKIE-1 X11 Xauthority data 18 string MIT-MAGIC-COOKIE-1 X11 Xauthority data # From: Maxime Henrion # PostgreSQL's custom dump format, Maxime Henrion 0 string PGDMP PostgreSQL custom database dump >5 byte x - v%d >6 byte x \b.%d >5 beshort <0x101 \b-0 >5 beshort >0x100 >>7 byte x \b-%d # Type: Advanced Data Format (ADF) database # URL: https://www.grc.nasa.gov/WWW/cgns/adf/ # From: Nicolas Chauvat 0 string @(#)ADF\ Database CGNS Advanced Data Format # Tokyo Cabinet magic data # http://tokyocabinet.sourceforge.net/index.html 0 string ToKyO\ CaBiNeT\n Tokyo Cabinet >14 string x \b (%s) >32 byte 0 \b, Hash !:mime application/x-tokyocabinet-hash >32 byte 1 \b, B+ tree !:mime application/x-tokyocabinet-btree >32 byte 2 \b, Fixed-length !:mime application/x-tokyocabinet-fixed >32 byte 3 \b, Table !:mime application/x-tokyocabinet-table >33 byte &1 \b, [open] >33 byte &2 \b, [fatal] >34 byte x \b, apow=%d >35 byte x \b, fpow=%d >36 byte &0x01 \b, [large] >36 byte &0x02 \b, [deflate] >36 byte &0x04 \b, [bzip] >36 byte &0x08 \b, [tcbs] >36 byte &0x10 \b, [excodec] >40 lequad x \b, bnum=%lld >48 lequad x \b, rnum=%lld >56 lequad x \b, fsiz=%lld # Type: QDBM Quick Database Manager # From: Benoit Sibaud 0 string \\[depot\\]\n\f Quick Database Manager, little endian 0 string \\[DEPOT\\]\n\f Quick Database Manager, big endian # Type: TokyoCabinet database # URL: http://tokyocabinet.sourceforge.net/ # From: Benoit Sibaud 0 string ToKyO\ CaBiNeT\n TokyoCabinet database >14 string x (version %s) # From: Stephane Blondon https://www.yaal.fr # Database file for Zope (done by FileStorage) 0 string FS21 Zope Object Database File Storage v3 (data) 0 string FS30 Zope Object Database File Storage v4 (data) # Cache file for the database of Zope (done by ClientStorage) 0 string ZEC3 Zope Object Database Client Cache File (data) # IDA (Interactive Disassembler) database 0 string IDA0 IDA (Interactive Disassembler) database 0 string IDA1 IDA (Interactive Disassembler) database 0 string IDA2 IDA (Interactive Disassembler) database # Hopper (reverse engineering tool) https://www.hopperapp.com/ 0 string hopperdb Hopper database # URL: https://en.wikipedia.org/wiki/Panorama_(database_engine) # Reference: http://www.provue.com/Panorama/ # From: Joerg Jenderek # NOTE: test only versions 4 and 6.0 with Windows # length of Panorama database name 5 ubyte >0 # look after database name for "some" null bits >(5.B+7) ubelong&0xF3ffF000 0 # look for first keyword >>&1 search/2 DESIGN Panorama database #!:mime application/x-panorama-database !:apple KASXZEPD !:ext pan # database name >>>5 pstring x \b, "%s" # # # askSam Database by Stefan A. Haubenthal 0 string askw40\0 askSam DB # # # MUIbase Database Tool by Stefan A. Haubenthal 0 string MBSTV\040 MUIbase DB >6 string x version %s # # CDB database 0 string NBCDB\012 NetBSD Constant Database >7 byte x \b, version %d >8 string x \b, for '%s' >24 lelong x \b, datasize %d >28 lelong x \b, entries %d >32 lelong x \b, index %d >36 lelong x \b, seed %#x # # Redis RDB - https://redis.io/topics/persistence 0 string REDIS Redis RDB file, >5 regex [0-9][0-9][0-9][0-9] version %s # Mork database. # Used by older versions of Mozilla Suite and Firefox, # and current versions of Thunderbird. # From: David Korth # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Mork # https://en.wikipedia.org/wiki/Mork_(file_format) # Note: called "Mork" by DROID via fmt/612 0 string //\ SubRip !:mime application/x-subrip !:ext srt # WebVTT subtitles # https://www.w3.org/TR/webvtt1/ 0 string/t WEBVTT >&0 regex/255 =[0-9]{2}:[0-9]{2}\\.[0-9]{3}\040--> WebVTT subtitles !:mime text/vtt !:ext vtt # XML TTML subtitles # https://www.w3.org/TR/ttml2/ 0 string/t \20 search/400 \020xmlns= >>&0 regex ['"]http://www.w3.org/ns/ttml TTML subtitles !:mime application/ttml+xml # Augment strength to beat plain XML !:strength * 3 !:ext ttml file-5.46/magic/Magdir/sun000664 023540 023540 00000011402 14604537143 017151 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: sun,v 1.29 2024/03/31 15:06:56 christos Exp $ # sun: file(1) magic for Sun machines # # Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x # releases. (5.x uses ELF.) Entries for executables without an # architecture type, used before the 68020-based Sun-3's came out, # are in aout, as they're indistinguishable from other big-endian # 32-bit a.out files. # # Note: already handled as "SPARC demand paged" by ./bsdi #0 belong&077777777 0600413 a.out SunOS SPARC demand paged #>0 byte &0x80 #>>20 belong <4096 shared library #>>20 belong =4096 dynamically linked executable~ #>>20 belong >4096 dynamically linked executable #>0 byte ^0x80 executable #>16 belong >0 not stripped 0 belong&077777777 0600410 a.out SunOS SPARC pure >0 byte &0x80 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped 0 belong&077777777 0600407 a.out SunOS SPARC >0 byte &0x80 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped 0 belong&077777777 0400413 a.out SunOS mc68020 demand paged >0 byte &0x80 >>20 belong <4096 shared library >>20 belong =4096 dynamically linked executable >>20 belong >4096 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped 0 belong&077777777 0400410 a.out SunOS mc68020 pure >0 byte &0x80 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped 0 belong&077777777 0400407 a.out SunOS mc68020 >0 byte &0x80 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped 0 belong&077777777 0200413 a.out SunOS mc68010 demand paged >0 byte &0x80 >>20 belong <4096 shared library >>20 belong =4096 dynamically linked executable >>20 belong >4096 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped 0 belong&077777777 0200410 a.out SunOS mc68010 pure >0 byte &0x80 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped 0 belong&077777777 0200407 a.out SunOS mc68010 >0 byte &0x80 dynamically linked executable >0 byte ^0x80 executable >16 belong >0 not stripped # # Core files. "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC # binary executed in compatibility mode under SunOS 5.x". # 0 belong 0x080456 SunOS core file >4 belong 432 (SPARC) >>132 string >\0 from '%s' >>116 belong =3 (quit) >>116 belong =4 (illegal instruction) >>116 belong =5 (trace trap) >>116 belong =6 (abort) >>116 belong =7 (emulator trap) >>116 belong =8 (arithmetic exception) >>116 belong =9 (kill) >>116 belong =10 (bus error) >>116 belong =11 (segmentation violation) >>116 belong =12 (bad argument to system call) >>116 belong =29 (resource lost) >>120 belong x (T=%dK, >>124 belong x D=%dK, >>128 belong x S=%dK) >4 belong 826 (68K) >>128 string >\0 from '%s' >4 belong 456 (SPARC 4.x BCP) >>152 string >\0 from '%s' # Sun SunPC 0 long 0xfa33c08e SunPC 4.0 Hard Disk 0 string #SUNPC_CONFIG SunPC 4.0 Properties Values # Sun snoop (see RFC 1761, which describes the capture file format, # RFC 3827, which describes some additional datalink types, and # https://www.iana.org/assignments/snoop-datalink-types/snoop-datalink-types.xml, # which is the IANA registry of Snoop datalink types) # 0 string snoop Snoop capture file >8 belong >0 - version %d >12 belong 0 (IEEE 802.3) >12 belong 1 (IEEE 802.4) >12 belong 2 (IEEE 802.5) >12 belong 3 (IEEE 802.6) >12 belong 4 (Ethernet) >12 belong 5 (HDLC) >12 belong 6 (Character synchronous) >12 belong 7 (IBM channel-to-channel adapter) >12 belong 8 (FDDI) >12 belong 9 (Other) >12 belong 10 (type %d) >12 belong 11 (type %d) >12 belong 12 (type %d) >12 belong 13 (type %d) >12 belong 14 (type %d) >12 belong 15 (type %d) >12 belong 16 (Fibre Channel) >12 belong 17 (ATM) >12 belong 18 (ATM Classical IP) >12 belong 19 (type %d) >12 belong 20 (type %d) >12 belong 21 (type %d) >12 belong 22 (type %d) >12 belong 23 (type %d) >12 belong 24 (type %d) >12 belong 25 (type %d) >12 belong 26 (IP over Infiniband) >12 belong >26 (type %d) #--------------------------------------------------------------------------- # The following entries have been tested by Duncan Laurie (a # lead Sun/Cobalt developer) who agrees that they are good and worthy of # inclusion. # Boot ROM images for Sun/Cobalt Linux server appliances 0 string Cobalt\ Networks\ Inc.\nFirmware\ v Paged COBALT boot rom >38 string x V%.4s # New format for Sun/Cobalt boot ROMs is annoying, it stores the version code # at the very end where file(1) can't get it. 0 string CRfs COBALT boot rom data (Flat boot rom or file system) file-5.46/magic/Magdir/svf000664 023540 023540 00000000334 14435454756 017156 0ustar00christoschristos000000 000000 # $File: svf,v 1.2 2023/05/23 13:37:32 christos Exp $ # # file(1) magic(5) data for SmartVersion files with the .svf extension. 0 string DFS\ File\x0D\x0Ahttp://www.difstream.com\x0D\x0A SmartVersion binary patch file file-5.46/magic/Magdir/sylk000664 023540 023540 00000002351 14015050424 017315 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: sylk,v 1.1 2020/04/05 22:18:34 christos Exp $ # sylk: file(1) magic for SYLK text files # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/SYmbolic_LinK_%28SYLK%29 # http://fileformats.archiveteam.org/wiki/SYLK # Note: called by TrID "SYLK - SYmbolic LinK data", # by DROID "Microsoft Symbolic Link (SYLK) File" # by FreeDesktop.org "spreadsheet interchange document" 0 string ID;P # skip short DROID x-fmt-106-signature-id-603.slk >7 ubyte >0 spreadsheet interchange document # https://reposcope.com/mimetype/text/spreadsheet #!:mime text/spreadsheet # https://reposcope.com/mimetype/application/x-sylk by Gnumeric !:mime application/x-sylk !:ext slk/sylk >>4 ubyte >037 \b, created by # Gnumeric, pmw~PlanMaker, CALCOOO32~LibreOffice OpenOffice, SCALC3~StarOffice # MP~Multiplan, XL~Excel WXL~Excel Windows >>>4 string Gnumeric Gnumeric >>>4 string pmw PlanMaker >>>4 string CALCOOO32 Libre/OpenOffice Calc >>>4 string SCALC3 StarOffice Calc >>>4 string XL Excel # Excel, version probably running on Windows >>>4 string WXL Excel # not tested >>>4 string MP Multiplan # unknown spreadsheet software >>>4 default x >>>>4 string x %s file-5.46/magic/Magdir/symbos000664 023540 023540 00000001717 14634600770 017670 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: symbos,v 1.3 2024/06/10 23:09:52 christos Exp $ # symbos: file(1) magic for the SymbOS operating system # http://www.symbos.de # Fabio R. Schmidlin # SymbOS EXE file 0x30 string SymExe SymbOS executable >0x36 ubyte x v%c >0x37 ubyte x \b.%c >0xF string x \b, name: %s # SymbOS DOX document 0 string INFOq\0 SymbOS DOX document # Symbos driver 0 string SMD1 SymbOS driver >19 byte x \b, name: %c >20 byte x \b%c >21 byte x \b%c >22 byte x \b%c >23 byte x \b%c >24 byte x \b%c >25 byte x \b%c >26 byte x \b%c >27 byte x \b%c >28 byte x \b%c >29 byte x \b%c >30 byte x \b%c >31 byte x \b%c # Symbos video 0 string SymVid SymbOS video >6 ubyte x v%c >7 ubyte x \b.%c # Soundtrakker 128 ST2 music 0 byte 0 >0xC string \x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x40\x00 Soundtrakker 128 ST2 music, >>1 string x name: %s file-5.46/magic/Magdir/sysex000664 023540 023540 00000037567 14331776734 017553 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------ # $File: sysex,v 1.12 2022/10/31 13:22:26 christos Exp $ # sysex: file(1) magic for MIDI sysex files # # GRR: original 1 byte test at offset was too general as it catches also many FATs of DOS filesystems # where real SYStem EXclusive messages at offset 1 are limited to seven bits # https://en.wikipedia.org/wiki/MIDI # test for StartSysEx byte and upper unsed bit of vendor ID 0 ubeshort&0xFF80 0xF000 # MIDI System Exclusive (SysEx) messages (strength=50) after Microsoft Visual C library (strength=70) #!:strength +0 # skip Microsoft Visual C library with page size 16 misidentified as ADA and # page size 32 misidentified as Inventronics by looking for terminating End Of eXclusive byte (EOX) >2 search/12 \xF7 >>0 use midi-sysex # display information about MIDI System Exclusive (SysEx) messages 0 name midi-sysex # https://fileinfo.com/extension/syx >1 ubyte x MIDI audio System Exclusive (SysEx) message - # Note: file (version 5.41) labeled the above entry as "SysEx File" #!:mime application/octet-stream !:mime audio/x-syx # https://onsongapp.com/docs/features/formats/sysex !:ext syx/sysex # https://www.midi.org/specifications-old/item/manufacturer-id-numbers # https://raw.githubusercontent.com/insolace/MIDI-Sysex-MFG-IDs/master/Sysex%20ID%20Tables/MIDI%20Sysex%20MFG%20IDs.csv # SysEx manufacturer ID; originally one byte, but now 0 is used as an escapement to reach the next two # North American Group #>1 byte 0x01 Sequential >1 byte 0x01 Sequential Circuits >1 byte 0x02 IDP #>1 byte 0x03 OctavePlateau >1 byte 0x03 Voyetra Turtle Beach >1 byte 0x04 Moog #>1 byte 0x05 Passport >1 byte 0x05 Passport Designs #>1 byte 0x06 Lexicon >1 byte 0x06 Lexicon Inc. >1 byte 0x07 Kurzweil/Future Retro >>3 byte 0x77 777 >>4 byte 0x00 Bank >>4 byte 0x01 Song >>5 byte 0x0f 16 >>5 byte 0x0e 15 >>5 byte 0x0d 14 >>5 byte 0x0c 13 >>5 byte 0x0b 12 >>5 byte 0x0a 11 >>5 byte 0x09 10 >>5 byte 0x08 9 >>5 byte 0x07 8 >>5 byte 0x06 7 >>5 byte 0x05 6 >>5 byte 0x04 5 >>5 byte 0x03 4 >>5 byte 0x02 3 >>5 byte 0x01 2 >>5 byte 0x00 1 >>5 byte 0x10 (ALL) >>2 byte x \b, Channel %d >1 byte 0x08 Fender #>1 byte 0x09 Gulbransen >1 byte 0x09 MIDI9 #>1 byte 0x0a AKG >1 byte 0x0a AKG Acoustics >1 byte 0x0b Voyce >1 byte 0x0c Waveframe # not ADA programming language #>1 byte 0x0d ADA >1 byte 0x0d ADA Signal Processors Inc. #>1 byte 0x0e Garfield >1 byte 0x0e Garfield Electronics >1 byte 0x0f Ensoniq >1 byte 0x10 Oberheim >>2 byte 0x06 Matrix 6 series >>3 byte 0x0A Dump (All) >>3 byte 0x01 Dump (Bank) >>4 belong 0x0002040E Matrix 1000 >>>11 byte <2 User bank %d >>>11 byte >1 Preset bank %d >1 byte 0x11 Apple >1 byte 0x12 GreyMatter >1 byte 0x14 PalmTree >1 byte 0x15 JLCooper >1 byte 0x16 Lowrey >1 byte 0x17 AdamsSmith >1 byte 0x18 E-mu #>1 byte 0x19 Harmony >1 byte 0x19 Harmony Systems >1 byte 0x1a ART >1 byte 0x1b Baldwin >1 byte 0x1c Eventide >1 byte 0x1d Inventronics >1 byte 0x1f Clarity # European Group #>1 byte 0x21 SIEL >1 byte 0x21 Proel Labs (SIEL) >1 byte 0x22 Synthaxe >1 byte 0x24 Hohner >1 byte 0x25 Twister #>1 byte 0x26 Solton >1 byte 0x26 Ketron s.r.l. >1 byte 0x27 Jellinghaus >1 byte 0x28 Southworth >1 byte 0x29 PPG >1 byte 0x2a JEN #>1 byte 0x2b SSL >1 byte 0x2b Solid State Logic Organ Systems #>1 byte 0x2c AudioVertrieb >1 byte 0x2c Audio Veritrieb-P. Struven >1 byte 0x2f ELKA >>3 byte 0x09 EK-44 >1 byte 0x30 Dynacord #>1 byte 0x31 Jomox >1 byte 0x31 Viscount International Spa >1 byte 0x33 Clavia >1 byte 0x39 Soundcraft # Some Waldorf info from http://Stromeko.Synth.net/Downloads#WaldorfDocs >1 byte 0x3e Waldorf >>2 byte 0x00 microWave >>2 byte 0x0E microwave2 / XT >>2 byte 0x0F Q / Q+ >>3 byte =0 (default id) >>3 byte >0 ( >>>3 byte <0x7F \bdevice %d) >>>3 byte =0x7F \bbroadcast id) >>3 byte 0x7f Microwave I >>>4 byte 0x00 SNDR (Sound Request) >>>4 byte 0x10 SNDD (Sound Dump) >>>4 byte 0x20 SNDP (Sound Parameter Change) >>>4 byte 0x30 SNDQ (Sound Parameter Inquiry) >>>4 byte 0x70 BOOT (Sound Reserved) >>>4 byte 0x01 MULR (Multi Request) >>>4 byte 0x11 MULD (Multi Dump) >>>4 byte 0x21 MULP (Multi Parameter Change) >>>4 byte 0x31 MULQ (Multi Parameter Inquiry) >>>4 byte 0x71 OS (Multi Reserved) >>>4 byte 0x02 DRMR (Drum Map Request) >>>4 byte 0x12 DRMD (Drum Map Dump) >>>4 byte 0x22 DRMP (Drum Map Parameter Change) >>>4 byte 0x32 DRMQ (Drum Map Parameter Inquiry) >>>4 byte 0x72 BIN (Drum Map Reserved) >>>4 byte 0x03 PATR (Sequencer Pattern Request) >>>4 byte 0x13 PATD (Sequencer Pattern Dump) >>>4 byte 0x23 PATP (Sequencer Pattern Parameter Change) >>>4 byte 0x33 PATQ (Sequencer Pattern Parameter Inquiry) >>>4 byte 0x73 AFM (Sequencer Pattern Reserved) >>>4 byte 0x04 GLBR (Global Parameter Request) >>>4 byte 0x14 GLBD (Global Parameter Dump) >>>4 byte 0x24 GLBP (Global Parameter Parameter Change) >>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry) >>>4 byte 0x07 MODR (Mode Parameter Request) >>>4 byte 0x17 MODD (Mode Parameter Dump) >>>4 byte 0x27 MODP (Mode Parameter Parameter Change) >>>4 byte 0x37 MODQ (Mode Parameter Parameter Inquiry) >>2 byte 0x10 microQ >>>4 byte 0x00 SNDR (Sound Request) >>>4 byte 0x10 SNDD (Sound Dump) >>>4 byte 0x20 SNDP (Sound Parameter Change) >>>4 byte 0x30 SNDQ (Sound Parameter Inquiry) >>>4 byte 0x70 (Sound Reserved) >>>4 byte 0x01 MULR (Multi Request) >>>4 byte 0x11 MULD (Multi Dump) >>>4 byte 0x21 MULP (Multi Parameter Change) >>>4 byte 0x31 MULQ (Multi Parameter Inquiry) >>>4 byte 0x71 OS (Multi Reserved) >>>4 byte 0x02 DRMR (Drum Map Request) >>>4 byte 0x12 DRMD (Drum Map Dump) >>>4 byte 0x22 DRMP (Drum Map Parameter Change) >>>4 byte 0x32 DRMQ (Drum Map Parameter Inquiry) >>>4 byte 0x72 BIN (Drum Map Reserved) >>>4 byte 0x04 GLBR (Global Parameter Request) >>>4 byte 0x14 GLBD (Global Parameter Dump) >>>4 byte 0x24 GLBP (Global Parameter Parameter Change) >>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry) >>2 byte 0x11 rackAttack >>>4 byte 0x00 SNDR (Sound Parameter Request) >>>4 byte 0x10 SNDD (Sound Parameter Dump) >>>4 byte 0x20 SNDP (Sound Parameter Parameter Change) >>>4 byte 0x30 SNDQ (Sound Parameter Parameter Inquiry) >>>4 byte 0x01 PRGR (Program Parameter Request) >>>4 byte 0x11 PRGD (Program Parameter Dump) >>>4 byte 0x21 PRGP (Program Parameter Parameter Change) >>>4 byte 0x31 PRGQ (Program Parameter Parameter Inquiry) >>>4 byte 0x71 OS (Program Parameter Reserved) >>>4 byte 0x03 PATR (Pattern Parameter Request) >>>4 byte 0x13 PATD (Pattern Parameter Dump) >>>4 byte 0x23 PATP (Pattern Parameter Parameter Change) >>>4 byte 0x33 PATQ (Pattern Parameter Parameter Inquiry) >>>4 byte 0x04 GLBR (Global Parameter Request) >>>4 byte 0x14 GLBD (Global Parameter Dump) >>>4 byte 0x24 GLBP (Global Parameter Parameter Change) >>>4 byte 0x34 GLBQ (Global Parameter Parameter Inquiry) >>>4 byte 0x05 EFXR (FX Parameter Request) >>>4 byte 0x15 EFXD (FX Parameter Dump) >>>4 byte 0x25 EFXP (FX Parameter Parameter Change) >>>4 byte 0x35 EFXQ (FX Parameter Parameter Inquiry) >>>4 byte 0x07 MODR (Mode Command Request) >>>4 byte 0x17 MODD (Mode Command Dump) >>>4 byte 0x27 MODP (Mode Command Parameter Change) >>>4 byte 0x37 MODQ (Mode Command Parameter Inquiry) >>2 byte 0x03 Wave >>>4 byte 0x00 SBPR (Soundprogram) >>>4 byte 0x01 SAPR (Performance) >>>4 byte 0x02 SWAVE (Wave) >>>4 byte 0x03 SWTBL (Wave control table) >>>4 byte 0x04 SVT (Velocity Curve) >>>4 byte 0x05 STT (Tuning Table) >>>4 byte 0x06 SGLB (Global Parameters) >>>4 byte 0x07 SARRMAP (Performance Program Change Map) >>>4 byte 0x08 SBPRMAP (Sound Program Change Map) >>>4 byte 0x09 SBPRPAR (Sound Parameter) >>>4 byte 0x0A SARRPAR (Performance Parameter) >>>4 byte 0x0B SINSPAR (Instrument/External Parameter) >>>4 byte 0x0F SBULK (Bulk Switch on/off) # Japanese Group >1 byte 0x40 Kawai >>3 byte 0x20 K1 >>3 byte 0x22 K4 >1 byte 0x41 Roland >>3 byte 0x14 D-50 >>3 byte 0x2b U-220 >>3 byte 0x02 TR-707 >1 byte 0x42 Korg >>3 byte 0x19 M1 >1 byte 0x43 Yamaha >1 byte 0x44 Casio >1 byte 0x46 Kamiya >1 byte 0x47 Akai #>1 byte 0x48 Victor >1 byte 0x48 Victor Company of Japan. Ltd. >1 byte 0x49 Mesosha >1 byte 0x4b Fujitsu >1 byte 0x4c Sony >1 byte 0x4e Teac >1 byte 0x50 Matsushita >1 byte 0x51 Fostex #>1 byte 0x52 Zoom >1 byte 0x52 Zoom Corporation >1 byte 0x54 Matsushita >1 byte 0x57 Acoustic tech. lab. # https://www.midi.org/techspecs/manid.php >1 belong&0xffffff00 0x00007400 Ta Horng >1 belong&0xffffff00 0x00007500 e-Tek >1 belong&0xffffff00 0x00007600 E-Voice >1 belong&0xffffff00 0x00007700 Midisoft >1 belong&0xffffff00 0x00007800 Q-Sound >1 belong&0xffffff00 0x00007900 Westrex >1 belong&0xffffff00 0x00007a00 Nvidia* >1 belong&0xffffff00 0x00007b00 ESS >1 belong&0xffffff00 0x00007c00 Mediatrix >1 belong&0xffffff00 0x00007d00 Brooktree >1 belong&0xffffff00 0x00007e00 Otari >1 belong&0xffffff00 0x00007f00 Key Electronics >1 belong&0xffffff00 0x00010000 Shure >1 belong&0xffffff00 0x00010100 AuraSound >1 belong&0xffffff00 0x00010200 Crystal >1 belong&0xffffff00 0x00010300 Rockwell >1 belong&0xffffff00 0x00010400 Silicon Graphics >1 belong&0xffffff00 0x00010500 Midiman >1 belong&0xffffff00 0x00010600 PreSonus >1 belong&0xffffff00 0x00010800 Topaz >1 belong&0xffffff00 0x00010900 Cast Lightning >1 belong&0xffffff00 0x00010a00 Microsoft >1 belong&0xffffff00 0x00010b00 Sonic Foundry >1 belong&0xffffff00 0x00010c00 Line 6 >1 belong&0xffffff00 0x00010d00 Beatnik Inc. >1 belong&0xffffff00 0x00010e00 Van Koerving >1 belong&0xffffff00 0x00010f00 Altech Systems >1 belong&0xffffff00 0x00011000 S & S Research >1 belong&0xffffff00 0x00011100 VLSI Technology >1 belong&0xffffff00 0x00011200 Chromatic >1 belong&0xffffff00 0x00011300 Sapphire >1 belong&0xffffff00 0x00011400 IDRC >1 belong&0xffffff00 0x00011500 Justonic Tuning >1 belong&0xffffff00 0x00011600 TorComp >1 belong&0xffffff00 0x00011700 Newtek Inc. >1 belong&0xffffff00 0x00011800 Sound Sculpture >1 belong&0xffffff00 0x00011900 Walker Technical >1 belong&0xffffff00 0x00011a00 Digital Harmony >1 belong&0xffffff00 0x00011b00 InVision >1 belong&0xffffff00 0x00011c00 T-Square >1 belong&0xffffff00 0x00011d00 Nemesys >1 belong&0xffffff00 0x00011e00 DBX >1 belong&0xffffff00 0x00011f00 Syndyne >1 belong&0xffffff00 0x00012000 Bitheadz >1 belong&0xffffff00 0x00012100 Cakewalk >1 belong&0xffffff00 0x00012200 Staccato >1 belong&0xffffff00 0x00012300 National Semicon. >1 belong&0xffffff00 0x00012400 Boom Theory >1 belong&0xffffff00 0x00012500 Virtual DSP Corp >1 belong&0xffffff00 0x00012600 Antares >1 belong&0xffffff00 0x00012700 Angel Software >1 belong&0xffffff00 0x00012800 St Louis Music >1 belong&0xffffff00 0x00012900 Lyrrus dba G-VOX >1 belong&0xffffff00 0x00012a00 Ashley Audio >1 belong&0xffffff00 0x00012b00 Vari-Lite >1 belong&0xffffff00 0x00012c00 Summit Audio >1 belong&0xffffff00 0x00012d00 Aureal Semicon. >1 belong&0xffffff00 0x00012e00 SeaSound >1 belong&0xffffff00 0x00012f00 U.S. Robotics >1 belong&0xffffff00 0x00013000 Aurisis >1 belong&0xffffff00 0x00013100 Nearfield Multimedia >1 belong&0xffffff00 0x00013200 FM7 Inc. >1 belong&0xffffff00 0x00013300 Swivel Systems >1 belong&0xffffff00 0x00013400 Hyperactive >1 belong&0xffffff00 0x00013500 MidiLite >1 belong&0xffffff00 0x00013600 Radical >1 belong&0xffffff00 0x00013700 Roger Linn >1 belong&0xffffff00 0x00013800 Helicon >1 belong&0xffffff00 0x00013900 Event >1 belong&0xffffff00 0x00013a00 Sonic Network >1 belong&0xffffff00 0x00013b00 Realtime Music >1 belong&0xffffff00 0x00013c00 Apogee Digital >1 belong&0xffffff00 0x00202b00 Medeli Electronics >1 belong&0xffffff00 0x00202c00 Charlie Lab >1 belong&0xffffff00 0x00202d00 Blue Chip Music >1 belong&0xffffff00 0x00202e00 BEE OH Corp >1 belong&0xffffff00 0x00202f00 LG Semicon America >1 belong&0xffffff00 0x00203000 TESI >1 belong&0xffffff00 0x00203100 EMAGIC >1 belong&0xffffff00 0x00203200 Behringer >1 belong&0xffffff00 0x00203300 Access Music >1 belong&0xffffff00 0x00203400 Synoptic >1 belong&0xffffff00 0x00203500 Hanmesoft Corp >1 belong&0xffffff00 0x00203600 Terratec >1 belong&0xffffff00 0x00203700 Proel SpA >1 belong&0xffffff00 0x00203800 IBK MIDI >1 belong&0xffffff00 0x00203900 IRCAM >1 belong&0xffffff00 0x00203a00 Propellerhead Software >1 belong&0xffffff00 0x00203b00 Red Sound Systems >1 belong&0xffffff00 0x00203c00 Electron ESI AB >1 belong&0xffffff00 0x00203d00 Sintefex Audio >1 belong&0xffffff00 0x00203e00 Music and More >1 belong&0xffffff00 0x00203f00 Amsaro >1 belong&0xffffff00 0x00204000 CDS Advanced Technology >1 belong&0xffffff00 0x00204100 Touched by Sound >1 belong&0xffffff00 0x00204200 DSP Arts >1 belong&0xffffff00 0x00204300 Phil Rees Music >1 belong&0xffffff00 0x00204400 Stamer Musikanlagen GmbH >1 belong&0xffffff00 0x00204500 Soundart >1 belong&0xffffff00 0x00204600 C-Mexx Software >1 belong&0xffffff00 0x00204700 Klavis Tech. >1 belong&0xffffff00 0x00204800 Noteheads AB # Update: Joerg Jenderek; January 2022 >1 byte 0x00 ID EXTENSIONS >1 byte 0x13 Digidesign Inc. >1 byte 0x1e Key Concepts >1 byte 0x20 Passac >1 byte 0x23 Stepp >1 byte 0x2d Neve >1 byte 0x2e Soundtracs Ltd. >1 byte 0x32 Drawmer >1 byte 0x34 Audio Architecture >1 byte 0x35 Generalmusic Corp SpA >1 byte 0x36 Cheetah Marketing >1 byte 0x37 C.T.M. >1 byte 0x38 Simmons UK >1 byte 0x3a Steinberg >1 byte 0x3b Wersi GmbH >1 byte 0x3c AVAB Niethammer AB >1 byte 0x3d Digigram >1 byte 0x3f Quasimidi # >1 byte 0x40 Kawai Musical Instruments MFG. CO. Ltd #>1 byte 0x45 foo #>1 byte 0x4a foo #>1 byte 0x4d foo #>1 byte 0x4f foo #>1 byte 0x53 foo >1 byte 0x55 Suzuki Musical Instruments MFG. Co. Ltd. >1 byte 0x56 Fuji Sound Corporation Ltd. #>1 byte 0x58 foo >1 byte 0x59 Faith. Inc. >1 byte 0x5a Internet Corporation #>1 byte 0x5b foo >1 byte 0x5c Seekers Co. Ltd. #>1 byte 0x5d foo #>1 byte 0x5e foo >1 byte 0x5f SD Card Association # Reserved for other uses for 60H to 7FH # URL: https://www.philscomputerlab.com/roland-midi-emulator-project-20.html # Reference: http://mark0.net/download/triddefs_xml.7z/defs/s/syx--midiemu.trid.xml # Note: called by TrID "MIDI Emulator Project SysEx preset command" >1 byte 0x66 MIDI Emulator # https://electronicmusic.fandom.com/wiki/List_of_MIDI_Manufacturer_IDs # Educational, prototyping, test, private use and experimentation >1 byte 0x7D PROTOTYPING # universal non-real-time (sample dump, tuning table, etc.) >1 byte 0x7E UNIVERSAL # universal real time (MIDI time code, MIDI Machine control, etc.) >1 byte 0x7F universal real time # display information about End Of eXclusive byte (EOX=F7) #>2 ubyte 0xF7 \b, at 2 EOX #>3 ubyte 0xF7 \b, at 3 EOX # https://tttapa.github.io/Control-Surface-doc/new-input/Doxygen/d2/d93/SysEx-Send-Receive_8ino-example.html >4 ubyte 0xF7 \b, at 4 EOX # http://www.1manband.nl/tutorials2/sysex.htm >5 ubyte 0xF7 \b, at 5 EOX # http://www.somascape.org/midi/tech/mfile.html#sysex >6 ubyte 0xF7 \b, at 6 EOX # >7 ubyte 0xF7 \b, at 7 EOX # https://webmidijs.org/forum/discussion/34/how-to-send-or-receive-system-exclusive-messages >8 ubyte 0xF7 \b, at 8 EOX # >9 ubyte 0xF7 \b, at 9 EOX # https://www.chd-el.cz/wp-content/uploads/845010_syxcom.pdf >10 ubyte 0xF7 \b, at 10 EOX # https://stackoverflow.com/questions/52906076/handling-midi-the-input-of-multiple-system-exclusive-messages-in-vb >11 ubyte 0xF7 \b, at 11 EOX # https://www.2writers.com/eddie/TutSysEx.htm >12 ubyte 0xF7 \b, at 12 EOX >13 ubyte 0xF7 \b, at 13 EOX # http://www.chromakinetics.com/handsonic/rolSysEx.htm >14 ubyte 0xF7 \b, at 14 EOX #>15 ubyte 0xF7 \b, at 15 EOX 0 string T707 Roland TR-707 Data file-5.46/magic/Magdir/tcl000664 023540 023540 00000001755 14015050424 017124 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # file: file(1) magic for Tcl scripting language # URL: https://www.tcl.tk/ # From: gustaf neumann # Tcl scripts 0 search/1/w #!\ /usr/bin/tcl Tcl script text executable !:mime text/x-tcl 0 search/1/w #!\ /usr/local/bin/tcl Tcl script text executable !:mime text/x-tcl 0 search/1 #!/usr/bin/env\ tcl Tcl script text executable !:mime text/x-tcl 0 search/1 #!\ /usr/bin/env\ tcl Tcl script text executable !:mime text/x-tcl 0 search/1/w #!\ /usr/bin/wish Tcl/Tk script text executable !:mime text/x-tcl 0 search/1/w #!\ /usr/local/bin/wish Tcl/Tk script text executable !:mime text/x-tcl 0 search/1 #!/usr/bin/env\ wish Tcl/Tk script text executable !:mime text/x-tcl 0 search/1 #!\ /usr/bin/env\ wish Tcl/Tk script text executable !:mime text/x-tcl # check the first line 0 search/1 package\ req >0 regex \^package[\ \t]+req Tcl script # not 'p', check other lines 0 search/1 !p >0 regex \^package[\ \t]+req Tcl script file-5.46/magic/Magdir/teapot000664 023540 023540 00000000412 14015050424 017623 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: teapot,v 1.4 2009/09/19 16:28:12 christos Exp $ # teapot: file(1) magic for "teapot" spreadsheet # 0 string #!teapot\012xdr teapot work sheet (XDR format) file-5.46/magic/Magdir/terminfo000664 023540 023540 00000005162 14700541414 020166 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: terminfo,v 1.14 2024/09/04 19:06:12 christos Exp $ # terminfo: file(1) magic for terminfo # # URL: https://invisible-island.net/ncurses/man/term.5.html # URL: https://invisible-island.net/ncurses/man/scr_dump.5.html # # Workaround for Targa image type by Joerg Jenderek # GRR: line below too general as it catches also # Targa image type 1 with 26 long identification field # and HELP.DSK 0 string \032\001 # 5th character of terminal name list, but not Targa image pixel size (15 16 24 32) >16 ubyte >32 # namelist, if more than 1 separated by "|" like "st|stterm| simpleterm 0.4.1" >>12 regex \^[a-zA-Z0-9][a-zA-Z0-9.][^|]* Compiled terminfo entry "%-s" !:mime application/x-terminfo # no extension #!:ext # #------------------------------------------------------------------------------ # The following was added for ncurses6 development: #------------------------------------------------------------------------------ # 0 string \036\002 # imitate the legacy compiled-format, to get the entry-name printed >16 ubyte >32 # namelist, if more than 1 separated by "|" like "st|stterm| simpleterm 0. 4.1" >>12 regex \^[a-zA-Z0-9][a-zA-Z0-9.][^|]* Compiled 32-bit terminfo entry "%-s" !:mime application/x-terminfo2 # # While the compiled terminfo uses little-endian format regardless of # platform, SystemV screen dumps do not. They came later, and that detail was # overlooked. # # AIX and HPUX use the SVr4 big-endian format # Solaris uses the SVr3 formats (sparc and x86 differ endian-ness) 0 beshort 0433 SVr2 curses screen image, big-endian # GRR: line below too general as it catches Commodore C128 program (crc32.prg XLINK.PRG) with start address 1C01h handled by ./c64 0 beshort 0434 SVr3 curses screen image, big-endian 0 beshort 0435 SVr4 curses screen image, big-endian # 0 leshort 0433 SVr2 curses screen image, little-endian 0 leshort 0434 SVr3 curses screen image, little-endian 0 leshort 0435 SVr4 curses screen image, little-endian # # Rather than SVr4, Solaris "xcurses" writes this header: 0 regex \^MAX=[0-9]+,[0-9]+$ >1 regex \^BEG=[0-9]+,[0-9]+$ >>2 regex \^SCROLL=[0-9]+,[0-9]+$ >>>3 regex \^VMIN=[0-9]+$ >>>>4 regex \^VTIME=[0-9]+$ >>>>>5 regex \^FLAGS=0x[[:xdigit:]]+$ >>>>>>6 regex \^FG=[0-9],[0-9]+$ >>>>>>>7 regex \^BG=[0-9]+,[0-9]+, Solaris xcurses screen image # # ncurses5 (and before) did not use a magic number, making screen dumps "data". # ncurses6 (2015) uses this format, ignoring byte-order 0 string \210\210\210\210ncurses ncurses6 screen image # # PDCurses added this in 2005 0 string PDC\001 PDCurses screen image file-5.46/magic/Magdir/tex000664 023540 023540 00000011147 14351670375 017156 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: tex,v 1.22 2022/12/21 16:50:04 christos Exp $ # tex: file(1) magic for TeX files # # XXX - needs byte-endian stuff (big-endian and little-endian DVI?) # # From # Although we may know the offset of certain text fields in TeX DVI # and font files, we can't use them reliably because they are not # zero terminated. [but we do anyway, christos] 0 string \367\002 >(14.b+15) string \213 >>14 pstring >\0 TeX DVI file (%s) !:mime application/x-dvi 0 string \367\203 TeX generic font data 0 string \367\131 TeX packed font data >3 string >\0 (%s) 0 string \367\312 >(2.b+11) string \363 TeX virtual font data 0 search/1 This\ is\ TeX, TeX transcript text 0 search/1 This\ is\ METAFONT, METAFONT transcript text # There is no way to detect TeX Font Metric (*.tfm) files without # breaking them apart and reading the data. The following patterns # match most *.tfm files generated by METAFONT or afm2tfm. 2 string \000\021 TeX font metric data !:mime application/x-tex-tfm >33 string >\0 (%s) 2 string \000\022 TeX font metric data !:mime application/x-tex-tfm >33 string >\0 (%s) # Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com) 0 search/1 \\input\ texinfo Texinfo source text !:mime text/x-texinfo 0 search/1 This\ is\ Info\ file GNU Info text !:mime text/x-info # TeX documents, from Daniel Quinlan (quinlan@yggdrasil.com) 0 search/4096 \\input TeX document text !:mime text/x-tex !:strength + 15 0 search/4096 \\begin LaTeX document text !:mime text/x-tex !:strength + 15 0 search/4096 \\section LaTeX document text !:mime text/x-tex !:strength + 18 0 search/4096 \\setlength LaTeX document text !:mime text/x-tex !:strength + 15 0 search/4096 \\documentstyle LaTeX document text !:mime text/x-tex !:strength + 18 0 search/4096 \\chapter LaTeX document text !:mime text/x-tex !:strength + 18 0 search/4096 \\documentclass LaTeX 2e document text !:mime text/x-tex !:strength + 15 0 search/4096 \\relax LaTeX auxiliary file !:mime text/x-tex !:strength + 15 0 search/4096 \\contentsline LaTeX table of contents !:mime text/x-tex !:strength + 15 0 search/4096 %\ -*-latex-*- LaTeX document text !:mime text/x-tex # Tex document, from Hendrik Scholz 0 search/1 \\ifx TeX document text # Index and glossary files 0 search/4096 \\indexentry LaTeX raw index file 0 search/4096 \\begin{theindex} LaTeX sorted index 0 search/4096 \\glossaryentry LaTeX raw glossary 0 search/4096 \\begin{theglossary} LaTeX sorted glossary 0 search/4096 This\ is\ makeindex Makeindex log file # End of TeX #------------------------------------------------------------------------------ # file(1) magic for BibTex text files # From Hendrik Scholz 0 search/1/c @article{ BibTeX text file 0 search/1/c @book{ BibTeX text file 0 search/1/c @inbook{ BibTeX text file 0 search/1/c @incollection{ BibTeX text file 0 search/1/c @inproceedings{ BibTeX text file 0 search/1/c @manual{ BibTeX text file 0 search/1/c @misc{ BibTeX text file 0 search/1/c @preamble{ BibTeX text file 0 search/1/c @phdthesis{ BibTeX text file 0 search/1/c @techreport{ BibTeX text file 0 search/1/c @unpublished{ BibTeX text file 73 search/1 %%%\ \ BibTeX-file{ BibTex text file (with full header) 73 search/1 %%%\ \ @BibTeX-style-file{ BibTeX style text file (with full header) 0 search/1 %\ BibTeX\ standard\ bibliography\ BibTeX standard bibliography style text file 0 search/1 %\ BibTeX\ ` BibTeX custom bibliography style text file 0 search/1 @c\ @mapfile{ TeX font aliases text file 0 string #LyX LyX document text # ConTeXt documents # https://wiki.contextgarden.net/ 0 search/4096 \\setupcolors[ ConTeXt document text !:strength + 15 0 search/4096 \\definecolor[ ConTeXt document text !:strength + 15 0 search/4096 \\setupinteraction[ ConTeXt document text !:strength + 15 0 search/4096 \\useURL[ ConTeXt document text !:strength + 15 0 search/4096 \\setuppapersize[ ConTeXt document text !:strength + 15 0 search/4096 \\setuplayout[ ConTeXt document text !:strength + 15 0 search/4096 \\setupfooter[ ConTeXt document text !:strength + 15 0 search/4096 \\setupfootertexts[ ConTeXt document text !:strength + 15 0 search/4096 \\setuppagenumbering[ ConTeXt document text !:strength + 15 0 search/4096 \\setupbodyfont[ ConTeXt document text !:strength + 15 0 search/4096 \\setuphead[ ConTeXt document text !:strength + 15 0 search/4096 \\setupitemize[ ConTeXt document text !:strength + 15 0 search/4096 \\setupwhitespace[ ConTeXt document text !:strength + 15 0 search/4096 \\setupindenting[ ConTeXt document text !:strength + 15 file-5.46/magic/Magdir/tgif000664 023540 023540 00000000406 14015050424 017263 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: tgif,v 1.7 2010/09/20 19:03:46 rrt Exp $ # file(1) magic for tgif(1) files # From Hendrik Scholz 0 string %TGIF\ Tgif file version >6 string x %s file-5.46/magic/Magdir/ti-8x000664 023540 023540 00000017065 14015050424 017314 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: ti-8x,v 1.8 2020/02/12 22:13:01 christos Exp $ # ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators. # # From: Ryan McGuire (rmcguire@freenet.columbus.oh.us). # # Update: Romain Lievin (roms@lpg.ticalc.org). # # NOTE: This list is not complete. # Files for the TI-80 and TI-81 are pretty rare. I'm not going to put the # program/group magic numbers in here because I cannot find any. 0 string **TI80** TI-80 Graphing Calculator File. 0 string **TI81** TI-81 Graphing Calculator File. # # Magic Numbers for the TI-73 # 0 string **TI73** TI-73 Graphing Calculator >0x00003B byte 0x00 (real number) >0x00003B byte 0x01 (list) >0x00003B byte 0x02 (matrix) >0x00003B byte 0x03 (equation) >0x00003B byte 0x04 (string) >0x00003B byte 0x05 (program) >0x00003B byte 0x06 (assembly program) >0x00003B byte 0x07 (picture) >0x00003B byte 0x08 (gdb) >0x00003B byte 0x0C (complex number) >0x00003B byte 0x0F (window settings) >0x00003B byte 0x10 (zoom) >0x00003B byte 0x11 (table setup) >0x00003B byte 0x13 (backup) # Magic Numbers for the TI-82 # 0 string **TI82** TI-82 Graphing Calculator >0x00003B byte 0x00 (real) >0x00003B byte 0x01 (list) >0x00003B byte 0x02 (matrix) >0x00003B byte 0x03 (Y-variable) >0x00003B byte 0x05 (program) >0x00003B byte 0x06 (protected prgm) >0x00003B byte 0x07 (picture) >0x00003B byte 0x08 (gdb) >0x00003B byte 0x0B (window settings) >0x00003B byte 0x0C (window settings) >0x00003B byte 0x0D (table setup) >0x00003B byte 0x0E (screenshot) >0x00003B byte 0x0F (backup) # # Magic Numbers for the TI-83 # 0 string **TI83** TI-83 Graphing Calculator >0x00003B byte 0x00 (real) >0x00003B byte 0x01 (list) >0x00003B byte 0x02 (matrix) >0x00003B byte 0x03 (Y-variable) >0x00003B byte 0x04 (string) >0x00003B byte 0x05 (program) >0x00003B byte 0x06 (protected prgm) >0x00003B byte 0x07 (picture) >0x00003B byte 0x08 (gdb) >0x00003B byte 0x0B (window settings) >0x00003B byte 0x0C (window settings) >0x00003B byte 0x0D (table setup) >0x00003B byte 0x0E (screenshot) >0x00003B byte 0x13 (backup) # # Magic Numbers for the TI-83+ # 0 string **TI83F* TI-83+ Graphing Calculator >0x00003B byte 0x00 (real number) >0x00003B byte 0x01 (list) >0x00003B byte 0x02 (matrix) >0x00003B byte 0x03 (equation) >0x00003B byte 0x04 (string) >0x00003B byte 0x05 (program) >0x00003B byte 0x06 (assembly program) >0x00003B byte 0x07 (picture) >0x00003B byte 0x08 (gdb) >0x00003B byte 0x0C (complex number) >0x00003B byte 0x0F (window settings) >0x00003B byte 0x10 (zoom) >0x00003B byte 0x11 (table setup) >0x00003B byte 0x13 (backup) >0x00003B byte 0x15 (application variable) >0x00003B byte 0x17 (group of variable) # # Magic Numbers for the TI-85 # 0 string **TI85** TI-85 Graphing Calculator >0x00003B byte 0x00 (real number) >0x00003B byte 0x01 (complex number) >0x00003B byte 0x02 (real vector) >0x00003B byte 0x03 (complex vector) >0x00003B byte 0x04 (real list) >0x00003B byte 0x05 (complex list) >0x00003B byte 0x06 (real matrix) >0x00003B byte 0x07 (complex matrix) >0x00003B byte 0x08 (real constant) >0x00003B byte 0x09 (complex constant) >0x00003B byte 0x0A (equation) >0x00003B byte 0x0C (string) >0x00003B byte 0x0D (function GDB) >0x00003B byte 0x0E (polar GDB) >0x00003B byte 0x0F (parametric GDB) >0x00003B byte 0x10 (diffeq GDB) >0x00003B byte 0x11 (picture) >0x00003B byte 0x12 (program) >0x00003B byte 0x13 (range) >0x00003B byte 0x17 (window settings) >0x00003B byte 0x18 (window settings) >0x00003B byte 0x19 (window settings) >0x00003B byte 0x1A (window settings) >0x00003B byte 0x1B (zoom) >0x00003B byte 0x1D (backup) >0x00003B byte 0x1E (unknown) >0x00003B byte 0x2A (equation) >0x000032 string ZS4 - ZShell Version 4 File. >0x000032 string ZS3 - ZShell Version 3 File. # # Magic Numbers for the TI-86 # 0 string **TI86** TI-86 Graphing Calculator >0x00003B byte 0x00 (real number) >0x00003B byte 0x01 (complex number) >0x00003B byte 0x02 (real vector) >0x00003B byte 0x03 (complex vector) >0x00003B byte 0x04 (real list) >0x00003B byte 0x05 (complex list) >0x00003B byte 0x06 (real matrix) >0x00003B byte 0x07 (complex matrix) >0x00003B byte 0x08 (real constant) >0x00003B byte 0x09 (complex constant) >0x00003B byte 0x0A (equation) >0x00003B byte 0x0C (string) >0x00003B byte 0x0D (function GDB) >0x00003B byte 0x0E (polar GDB) >0x00003B byte 0x0F (parametric GDB) >0x00003B byte 0x10 (diffeq GDB) >0x00003B byte 0x11 (picture) >0x00003B byte 0x12 (program) >0x00003B byte 0x13 (range) >0x00003B byte 0x17 (window settings) >0x00003B byte 0x18 (window settings) >0x00003B byte 0x19 (window settings) >0x00003B byte 0x1A (window settings) >0x00003B byte 0x1B (zoom) >0x00003B byte 0x1D (backup) >0x00003B byte 0x1E (unknown) >0x00003B byte 0x2A (equation) # # Magic Numbers for the TI-89 # 0 string **TI89** TI-89 Graphing Calculator >0x000048 byte 0x00 (expression) >0x000048 byte 0x04 (list) >0x000048 byte 0x06 (matrix) >0x000048 byte 0x0A (data) >0x000048 byte 0x0B (text) >0x000048 byte 0x0C (string) >0x000048 byte 0x0D (graphic data base) >0x000048 byte 0x0E (figure) >0x000048 byte 0x10 (picture) >0x000048 byte 0x12 (program) >0x000048 byte 0x13 (function) >0x000048 byte 0x14 (macro) >0x000048 byte 0x1C (zipped) >0x000048 byte 0x21 (assembler) # # Magic Numbers for the TI-92 # 0 string **TI92** TI-92 Graphing Calculator >0x000048 byte 0x00 (expression) >0x000048 byte 0x04 (list) >0x000048 byte 0x06 (matrix) >0x000048 byte 0x0A (data) >0x000048 byte 0x0B (text) >0x000048 byte 0x0C (string) >0x000048 byte 0x0D (graphic data base) >0x000048 byte 0x0E (figure) >0x000048 byte 0x10 (picture) >0x000048 byte 0x12 (program) >0x000048 byte 0x13 (function) >0x000048 byte 0x14 (macro) >0x000048 byte 0x1D (backup) # # Magic Numbers for the TI-92+/V200 # 0 string **TI92P* TI-92+/V200 Graphing Calculator >0x000048 byte 0x00 (expression) >0x000048 byte 0x04 (list) >0x000048 byte 0x06 (matrix) >0x000048 byte 0x0A (data) >0x000048 byte 0x0B (text) >0x000048 byte 0x0C (string) >0x000048 byte 0x0D (graphic data base) >0x000048 byte 0x0E (figure) >0x000048 byte 0x10 (picture) >0x000048 byte 0x12 (program) >0x000048 byte 0x13 (function) >0x000048 byte 0x14 (macro) >0x000048 byte 0x1C (zipped) >0x000048 byte 0x21 (assembler) # # Magic Numbers for the TI-73/83+/89/92+/V200 FLASH upgrades # #0x0000016 string Advanced TI-XX Graphing Calculator (FLASH) 0 string **TIFL** TI-XX Graphing Calculator (FLASH) >8 byte >0 - Revision %d >>9 byte x \b.%d, >12 byte >0 Revision date %02x >>13 byte x \b/%02x >>14 beshort x \b/%04x, >17 string >/0 name: '%s', >48 byte 0x74 device: TI-73, >48 byte 0x73 device: TI-83+, >48 byte 0x98 device: TI-89, >48 byte 0x88 device: TI-92+, >49 byte 0x23 type: OS upgrade, >49 byte 0x24 type: application, >49 byte 0x25 type: certificate, >49 byte 0x3e type: license, >74 lelong >0 size: %d bytes # VTi & TiEmu skins (TI Graphing Calculators). # From: Romain Lievin (roms@lpg.ticalc.org). # Magic Numbers for the VTi skins 0 string VTI Virtual TI skin >3 string v - Version >>4 byte >0 \b %c >>6 byte x \b.%c # Magic Numbers for the TiEmu skins 0 string TiEmu TiEmu skin >6 string v - Version >>7 byte >0 \b %c >>9 byte x \b.%c >>10 byte x \b%c file-5.46/magic/Magdir/timezone000664 023540 023540 00000003245 14076060000 020166 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: timezone,v 1.13 2021/07/21 17:57:20 christos Exp $ # timezone: file(1) magic for timezone data # # from Daniel Quinlan (quinlan@yggdrasil.com) # this should work on Linux, SunOS, and maybe others # Added new official magic number for recent versions of the Olson code 0 name timezone >4 byte 0 \b, old version >4 byte >0 \b, version %c >20 belong 0 \b, no gmt time flags >20 belong 1 \b, 1 gmt time flag >20 belong >1 \b, %d gmt time flags >24 belong 0 \b, no std time flags >24 belong 1 \b, 1 std time flag >24 belong >1 \b, %d std time flags >28 belong 0 \b, no leap seconds >28 belong 1 \b, 1 leap second >28 belong >1 \b, %d leap seconds >32 belong 0 \b, no transition times >32 belong 1 \b, 1 transition time >32 belong >1 \b, %d transition times >36 belong 0 \b, no local time types >36 belong 1 \b, 1 local time type >36 belong >1 \b, %d local time types >40 belong 0 \b, no abbreviation chars >40 belong 1 \b, 1 abbreviation char >40 belong >1 \b, %d abbreviation chars 0 string TZif timezone data >51 string TZif \b(slim) >>51 use timezone >51 default x \b(fat) >>0 use timezone 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0 old timezone data 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0 old timezone data 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0 old timezone data 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0 old timezone data 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0 old timezone data 0 string \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\0 old timezone data file-5.46/magic/Magdir/tplink000664 023540 023540 00000006454 14432440365 017656 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: tplink,v 1.8 2023/05/15 16:41:02 christos Exp $ # tplink: File magic for openwrt firmware files # URL: https://wiki.openwrt.org/doc/techref/header # Reference: https://git.openwrt.org/?p=openwrt.git;a=blob;f=tools/firmware-utils/src/mktplinkfw.c # http://mark0.net/download/triddefs_xml.7z/defs/b/bin-tplink-v1.trid.xml # Note: called "TP-Link router firmware (v1)" by TrID # From: Joerg Jenderek # check for valid header version 1 or 2 0 ulelong <3 >0 ulelong !0 # test for header padding with nulls >>0x100 long 0 # skip Norton Commander Cleanup Utility NCCLEAN.INI by looking for valid vendor name >>>4 ubelong >0x1F000000 # skip user.dbt by looking for positive hardware id >>>>0x40 ubeshort >0 # skip cversions.1.db cversions.2.db cversions.3.db inside # c:\ProgramData\Microsoft\Windows\Caches # with invalid vendor names \240\0\0\0 \140\0\0\0 \040\0\0\0 >>>>>5 short !0 >>>>>>0 use firmware-tplink 0 name firmware-tplink >0 ubyte x firmware !:mime application/x-tplink-bin # like: TL-WR1043ND-V1-FW0.0.3-stripped.bin gluon-ffrefugee-0.9.2-tp-link-archer-c5-v1-sysupgrade.bin !:ext bin # hardware id like 10430001 07410001 09410004 09410006 >0x40 ubeshort x %x >0x42 ubeshort x v%x # hardware revision like 1 >0x44 ubelong !1 (revision %u) # vendor_name[24] like OpenWrt or TP-LINK Technologies >4 string x %.24s # fw_version[36] like r49389 or ver. 1.0 >0x1c string x %.36s # header version 1 or 2 >0 ubyte !1 V%X # ver_hi.ver_mid.ver_lo >0x98 long !0 \b, version >>0x98 ubeshort x %u >>0x9A ubeshort x \b.%u >>0x9C ubeshort x \b.%u # region code 0~universal 1~US >0x48 ubelong x #>>0x48 ubelong 0 (universal) >>0x48 ubelong 1 (US) >>0x48 ubelong >1 (region %u) # total length of the firmware. not always true >0x7C ubelong x \b, %u bytes or less # unknown 1 >0x48 ubelong !0 \b, UNKNOWN1 %#x # md5sum1[16] #>0x4c ubequad x \b, MD5 %llx #>>0x54 ubequad x \b%llx # unknown 2 >0x5c ubelong !0 \b, UNKNOWN2 %#x # md5sum2[16] #>0x60 ubequad !0 \b, 2nd MD5 %llx #>>0x68 ubequad x \b%llx # unknown 3 >0x70 ubelong !0 \b, UNKNOWN3 %#x # kernel load address #>0x74 ubelong x \b, %#x load # kernel entry point #>0x78 ubelong x \b, %#x entry # kernel data offset. 200h means direct after header >0x80 ubelong x \b, at %#x # kernel data length and 1 space >0x84 ubelong x %u bytes # look for kernel type (gzip compressed vmlinux.bin by ./compress) >(0x80.L) indirect x # root file system data offset # WRONG in 5.35 with above indirect expression >0x88 ubelong x \b, at %#x # rootfs data length and 1 space >0x8C ubelong x %u bytes # in 5.32 only true for offset ~< FILE_BYTES_MAX=9 MB defined in ../../src/file.h >(0x88.L) indirect x # 'qshs' for wr940nv1_en_3_13_7_up(111228).bin #>(0x88.L) string x \b, file system '%.4s' #>(0x88.L) ubequad x \b, file system %#llx # bootloader data offset >0x90 ubelong !0 \b, at %#x # bootloader data length only reasonable if bootloader offset not null >>0x94 ubelong !0 %u bytes # pad[354] should be 354 null bytes. #>0x9E ubequad !0 \b, padding %#llx # But at 0x120 18 non null bytes in examples like # wr940nv4_eu_3_16_9_up_boot(160620).bin # wr940nv6_us_3_18_1_up_boot(171030).bin #>0x120 ubequad !0 \b, other padding %#llx file-5.46/magic/Magdir/troff000664 023540 023540 00000002500 14436140256 017461 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: troff,v 1.14 2023/06/01 16:00:46 christos Exp $ # troff: file(1) magic for *roff # # updated by Daniel Quinlan (quinlan@yggdrasil.com) # troff input 0 search/1 .\\" troff or preprocessor input text !:strength +12 !:mime text/troff 0 search/1 '\\" troff or preprocessor input text !:strength +12 !:mime text/troff 0 search/1 '.\\" troff or preprocessor input text !:strength +12 !:mime text/troff 0 search/1 \\" troff or preprocessor input text !:strength +12 !:mime text/troff #0 search/1 ''' troff or preprocessor input text #!:mime text/troff 0 regex/20l \^\\.[A-Za-z][A-Za-z0-9][\ \t] troff or preprocessor input text !:strength +12 !:mime text/troff 0 regex/20l \^\\.[A-Za-z][A-Za-z0-9]$ troff or preprocessor input text !:strength +12 !:mime text/troff # ditroff intermediate output text 0 search/1 x\ T ditroff output text >4 search/1 cat for the C/A/T phototypesetter >4 search/1 ps for PostScript >4 search/1 dvi for DVI >4 search/1 ascii for ASCII >4 search/1 lj4 for LaserJet 4 >4 search/1 latin1 for ISO 8859-1 (Latin 1) >4 search/1 X75 for xditview at 75dpi >>7 search/1 -12 (12pt) >4 search/1 X100 for xditview at 100dpi >>8 search/1 -12 (12pt) # output data formats 0 string \100\357 very old (C/A/T) troff output data file-5.46/magic/Magdir/tuxedo000664 023540 023540 00000000462 14015050424 017644 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: tuxedo,v 1.4 2009/09/19 16:28:13 christos Exp $ # tuxedo: file(1) magic for BEA TUXEDO data files # # from Ian Springer # 0 string \0\0\1\236\0\0\0\0\0\0\0\0\0\0\0\0 BEA TUXEDO DES mask data file-5.46/magic/Magdir/typeset000664 023540 023540 00000000436 14015050424 020032 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: typeset,v 1.8 2009/09/19 16:28:13 christos Exp $ # typeset: file(1) magic for other typesetting # 0 string Interpress/Xerox Xerox InterPress data >16 string / (version >>17 string >\0 %s) file-5.46/magic/Magdir/uf2000664 023540 023540 00000007552 14700541414 017044 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: uf2,v 1.6 2024/09/04 19:08:08 christos Exp $ # uf2: file(1) magic for UF2 firmware image files # # https://github.com/microsoft/uf2 # # Created by Blake Ramsdell 0 string UF2\n UF2 firmware image !:ext uf2 # This is for checking the other magic numbers, do we want to do that? #>4 lelong 0x9E5D5157 howdy #>>508 lelong 0x0AB16F30 doody >8 lelong &0x0001 \b, not main flash >8 lelong &0x1000 \b, file container >8 lelong &0x2000 \b, family # To update the UF2 family data, use this fine command # # families=`curl \ # https://raw.githubusercontent.com/microsoft/uf2/master/utils/uf2families.json \ # | jq -r '.[] | ">>28\tlelong\t\(.id)\t\(.description)"' | sort -n -k 3` && \ # perl -0777 -i -pe \ # "s/(### BEGIN UF2 FAMILIES\\n).*(\\n### END UF2 FAMILIES)/\$1$families\$2/s" \ # uf2 ### BEGIN UF2 FAMILIES >>28 lelong 0x00ff6919 ST STM32L4xx >>28 lelong 0x04240bdf ST STM32L5xx >>28 lelong 0x06d1097b ST STM32F411xC >>28 lelong 0x11de784a M0SENSE BL702 >>28 lelong 0x16573617 Microchip (Atmel) ATmega32 >>28 lelong 0x1851780a Microchip (Atmel) SAML21 >>28 lelong 0x1b57745f Nordic NRF52 >>28 lelong 0x1c5f21b0 ESP32 >>28 lelong 0x1e1f432d ST STM32L1xx >>28 lelong 0x202e3a91 ST STM32L0xx >>28 lelong 0x21460ff0 ST STM32WLxx >>28 lelong 0x22e0d6fc Realtek AmebaZ RTL8710B >>28 lelong 0x2abc77ec NXP LPC55xx >>28 lelong 0x2b88d29c ESP32-C2 >>28 lelong 0x2dc309c5 ST STM32F411xE >>28 lelong 0x300f5633 ST STM32G0xx >>28 lelong 0x31d228c6 GD32F350 >>28 lelong 0x332726f6 ESP32-H2 >>28 lelong 0x3379CFE2 Realtek AmebaD RTL8720D >>28 lelong 0x3d308e94 ESP32-P4 >>28 lelong 0x4b684d71 Sipeed MaixPlay-U4 (BL618) >>28 lelong 0x4c71240a ST STM32G4xx >>28 lelong 0x4f6ace52 LISTENAI CSK300x/400x >>28 lelong 0x4fb2d5bd NXP i.MX RT10XX >>28 lelong 0x51e903a8 Xradiotech 809 >>28 lelong 0x53b80f00 ST STM32F7xx >>28 lelong 0x540ddf62 ESP32-C6 >>28 lelong 0x55114460 Microchip (Atmel) SAMD51 >>28 lelong 0x57755a57 ST STM32F4xx >>28 lelong 0x5a18069b Cypress FX2 >>28 lelong 0x5d1a0a2e ST STM32F2xx >>28 lelong 0x5ee21072 ST STM32F103 >>28 lelong 0x621e937a Nordic NRF52833 >>28 lelong 0x647824b6 ST STM32F0xx >>28 lelong 0x675a40b0 Beken 7231U/7231T >>28 lelong 0x68ed2b88 Microchip (Atmel) SAMD21 >>28 lelong 0x699b62ec WCH CH32V2xx and CH32V3xx >>28 lelong 0x6a82cc42 Beken 7251/7252 >>28 lelong 0x6b846188 ST STM32F3xx >>28 lelong 0x6d0922fa ST STM32F407 >>28 lelong 0x6db66082 ST STM32H7xx >>28 lelong 0x6e7348a8 LISTENAI CSK60xx >>28 lelong 0x6f752678 Nordic NRF52832xxAB >>28 lelong 0x70d16653 ST STM32WBxx >>28 lelong 0x72721d4e Nordic NRF52832xxAA >>28 lelong 0x77d850c4 ESP32-C61 >>28 lelong 0x7b3ef230 Beken 7231N >>28 lelong 0x7be8976d Renesas RA4M1 >>28 lelong 0x7eab61ed ESP8266 >>28 lelong 0x7f83e793 NXP KL32L2x >>28 lelong 0x8fb060fe ST STM32F407VG >>28 lelong 0x9517422f Renesas RZ/A1LU (R7S7210xx) >>28 lelong 0x9af03e33 GigaDevice GD32VF103 >>28 lelong 0x9fffd543 Realtek Ameba1 RTL8710A >>28 lelong 0xa0c97b8e ArteryTek AT32F415 >>28 lelong 0xada52840 Nordic NRF52840 >>28 lelong 0xbfdd4eee ESP32-S2 >>28 lelong 0xc47e5767 ESP32-S3 >>28 lelong 0xd42ba06c ESP32-C3 >>28 lelong 0xde1270b7 Boufallo 602 >>28 lelong 0xe08f7564 Realtek AmebaZ2 RTL8720C >>28 lelong 0xe48bff56 Raspberry Pi RP2040 >>28 lelong 0xe48bff57 Raspberry Pi MC: Absolute (unpartitioned) download >>28 lelong 0xe48bff58 Raspberry Pi MC: Data partition download >>28 lelong 0xe48bff59 Raspberry Pi RP2350, Secure Arm image >>28 lelong 0xe48bff5a Raspberry Pi RP2350, RISC-V image >>28 lelong 0xe48bff5b Raspberry Pi RP2350, Non-secure Arm image >>28 lelong 0xf71c0343 ESP32-C5 ### END UF2 FAMILIES >>28 default x >>>28 lelong x %#08x >8 lelong&0x2000 0 \b, file size >>28 lelong x %#08x >8 lelong &0x4000 \b, MD5 checksum present >8 lelong &0x8000 \b, extension tags present >12 lelong x \b, base address %#08x >24 lelong x \b, %u total blocks file-5.46/magic/Magdir/unicode000664 023540 023540 00000001403 14015050424 017756 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: unicode,v 1.7 2019/02/19 20:34:42 christos Exp $ # Unicode: BOM prefixed text files - Adrian Havill # These types are recognised in file_ascmagic so these encodings can be # treated by text patterns. Missing types are already dealt with internally. # 0 string +/v8 Unicode text, UTF-7 0 string +/v9 Unicode text, UTF-7 0 string +/v+ Unicode text, UTF-7 0 string +/v/ Unicode text, UTF-7 0 string \335\163\146\163 Unicode text, UTF-8-EBCDIC 0 string \000\000\376\377 Unicode text, UTF-32, big-endian 0 string \377\376\000\000 Unicode text, UTF-32, little-endian 0 string \016\376\377 Unicode text, SCSU (Standard Compression Scheme for Unicode) file-5.46/magic/Magdir/unisig000664 023540 023540 00000000622 14015050424 017630 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: unisig,v 1.1 2020/04/09 19:05:44 christos Exp $ # unisig: file(1) magic for files carrying a uniform signature (Unisig) # From: Lassi Kortela, John Cowan # URL: https://github.com/unisig # 0 string \xDC\xDC\x0D\x0A\x1A\x0A\x00 Unisig: >7 ubyte =0 UUID >>8 guid x %s >7 ubyte >0 URI >>7 pstring x %s file-5.46/magic/Magdir/unknown000664 023540 023540 00000002532 14015050424 020033 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: unknown,v 1.8 2013/01/09 22:37:24 christos Exp $ # unknown: file(1) magic for unknown machines # # 0x107 is 0407, 0x108 is 0410, and 0x109 is 0411; those are all PDP-11 # (executable, pure, and split I&D, respectively), but the PDP-11 version # doesn't have the "version %ld", which may be a bogus COFFism (I don't # think there was ever COFF for the PDP-11). # # 0x10B is 0413; that's VAX demand-paged, but this is a short, not a # long, as it would be on a VAX. In any case, that could collide with # VAX demand-paged files, as the magic number is little-endian on those # binaries, so the first 16 bits of the file would contain 0x10B. # # Therefore, those entries are commented out. # # 0x10C is 0414 and 0x10E is 0416; those *are* unknown. # #0 short 0x107 unknown machine executable #>8 short >0 not stripped #>15 byte >0 - version %ld #0 short 0x108 unknown pure executable #>8 short >0 not stripped #>15 byte >0 - version %ld #0 short 0x109 PDP-11 separate I&D #>8 short >0 not stripped #>15 byte >0 - version %ld #0 short 0x10b unknown pure executable #>8 short >0 not stripped #>15 byte >0 - version %ld 0 long 0x10c unknown demand paged pure executable >16 long >0 not stripped 0 long 0x10e unknown readable demand paged pure executable file-5.46/magic/Magdir/usd000664 023540 023540 00000001070 14015050424 017123 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: usd,v 1.2 2020/05/21 22:17:00 christos Exp $ # # From Christian Schmidbauer # # https://github.com/PixarAnimationStudios/USD # USD crate file # https://github.com/PixarAnimationStudios/USD/blob/ebac0a8b6703f4fa1c27115f1f013bb9819662f4/pxr/usd/usd/crateFile.h#L441-L450 0 string PXR-USDC USD crate >8 byte x \b, version %x. >9 byte x \b%x. >10 byte x \b%x !:ext usd # USD ASCII file 0 string #usda\040 USD ASCII >6 string x \b, version %s !:mime text/plain !:ext usd file-5.46/magic/Magdir/uterus000664 023540 023540 00000000725 14331776734 017711 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: uterus,v 1.4 2022/10/31 13:22:26 christos Exp $ # file(1) magic for uterus files # http://freecode.com/projects/uterus # 0 string UTE+ uterus file >4 string v \b, version >5 byte x %c >6 string . \b. >7 byte x \b%c >8 string \<\> \b, big-endian >>16 belong >0 \b, slut size %u >8 string \>\< \b, little-endian >>16 lelong >0 \b, slut size %u >10 byte &8 \b, compressed file-5.46/magic/Magdir/uuencode000664 023540 023540 00000002250 14145760370 020154 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: uuencode,v 1.9 2021/11/13 17:48:10 christos Exp $ # uuencode: file(1) magic for ASCII-encoded files # # The first line of xxencoded files is identical to that in uuencoded files, # but the first character in most subsequent lines is 'h' instead of 'M'. # (xxencoding uses lowercase letters in place of most of uuencode's # punctuation and survives BITNET gateways better.) 0 regex/1024 \^begin\040[0-7]{3}\040 >&0 regex/256 [\012\015]+M[\040-\140]{60}[\012\015]+ uuencoded text >&0 regex/256 [\012\015]+h[0-9A-Za-z\053\055]{60}[\012\015]+ xxencoded text >&0 default x uuencoded or xxencoded text >&0 string >\0 \b, file name "%s" # btoa(1) is an alternative to uuencode that requires less space. 0 search/1 xbtoa\ Begin btoa'd text # ship(1) is another, much cooler alternative to uuencode. # Greg Roelofs, newt@uchicago.edu 0 search/1 $\012ship ship'd binary text # bencode(8) is used to encode compressed news batches (Bnews/Cnews only?) # Greg Roelofs, newt@uchicago.edu 0 search/1 Decode\ the\ following\ with\ bdeco bencoded News text # GRR: handle BASE64 file-5.46/magic/Magdir/uxn000664 023540 023540 00000001067 14652264124 017163 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: uxn,v 1.1 2024/07/30 22:25:24 christos Exp $ # uxn: file(1) magic for Uxn ROM files # # https://100r.co/site/uxn.html # https://wiki.xxiivv.com/site/uxn.html # # Created by Samuel Dionne-Riel # https://wiki.xxiivv.com/site/metadata.html 0x00 byte =0xa0 >0x01 ubeshort x >>0x03 byte =0x80 >>>0x04 byte =0x06 >>>>0x05 byte =0x37 Varvara Uxn ROM >>>>>0x01 ubeshort x with metadata at 0x%x >>>>>>(0x01.S-0x0ff) string x (%s) file-5.46/magic/Magdir/vacuum-cleaner000664 023540 023540 00000004075 14015050424 021247 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: vacuum-cleaner,v 1.1 2015/11/14 13:38:35 christos Exp $ # vacuum cleaner magic by Thomas M. Ott (ThMO) # # navigation map for LG robot vacuum cleaner models VR62xx, VR64xx, VR63xx # file: MAPDATAyyyymmddhhmmss_xxxxxx_cc.blk # -> yyyymmdd: year, month, day of cleaning # -> hhmmss: hour, minute, second of cleaning # -> xxxxxx: 6 digits # -> cc: cleaning runs counter # size: 136044 bytes # # struct maphdr { # int32_t map_cnt; /* 0: single map */ # int32_t min_ceil; /* 4: 100 mm == 10 cm == min. ceil */ # int32_t max_ceil; /* 8: 10000 mm == 100 m == max. ceil */ # int32_t max_climb; /* 12: 50 mm = 5 cm == max. height to climb */ # int32_t unknown; /* 16: 50000 ??? */ # int32_t cell_bytes; /* 20: # of bytes for cells per block */ # int32_t block_max; /* 24: 1000 == max. # of blocks */ # int32_t route_max; /* 28: 1000 == max. # of routes */ # int32_t used_blocks; /* 32: 5/45/33/... == # of block entries used! */ # int32_t cell_dim; /* 36: 10 == cell dimension */ # int32_t clock_tick; /* 40: 100 == clock ticks */ # #if 0 # struct { /* 44: 1000 blocks for 10x10 cells */ # int32_t yoffset; # int32_t xoffset; # int32_t posxy; # int32_t timecode; # } blocks[ 1000]; # char cells[ 1000* 100]; /* 16044: 1000 10x10 cells */ # int16_t routes[ 1000* 10]; /* 116044: 1000 10-routes */ # #endif # }; 0 lelong =1 >4 lelong =100 >>8 lelong =10000 >>>12 lelong =50 >>>>16 lelong =50000 >>>>>20 lelong =100 >>>>>>24 lelong =1000 >>>>>>>28 lelong =1000 >>>>>>>>36 lelong =10 >>>>>>>>>40 lelong =100 >>>>>>>>>>32 lelong x LG robot VR6[234]xx %dm^2 navigation >>>>>>>>>>136040 lelong =-1 reuse map data >>>>>>>>>>136040 lelong =0 map data >>>>>>>>>>136040 lelong >0 spurious map data >>>>>>>>>>136040 lelong <-1 spurious map data file-5.46/magic/Magdir/varied.out000664 023540 023540 00000003200 14015050424 020405 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: varied.out,v 1.23 2014/04/30 21:41:02 christos Exp $ # varied.out: file(1) magic for various USG systems # # Herewith many of the object file formats used by USG systems. # Most have been moved to files for a particular processor, # and deleted if they duplicate other entries. # 0 short 0610 Perkin-Elmer executable # AMD 29K 0 beshort 0572 amd 29k coff noprebar executable 0 beshort 01572 amd 29k coff prebar executable 0 beshort 0160007 amd 29k coff archive # Cray 6 beshort 0407 unicos (cray) executable # Ultrix 4.3 596 string \130\337\377\377 Ultrix core file >600 string >\0 from '%s' # BeOS and MAcOS PEF executables # From: hplus@zilker.net (Jon Watte) 0 string Joy!peffpwpc header for PowerPC PEF executable # # ava assembler/linker Uros Platise 0 string avaobj AVR assembler object code >7 string >\0 version '%s' # gnu gmon magic From: Eugen Dedu 0 string gmon GNU prof performance data >4 long x - version %d # From: Dave Pearson # Harbour HRB files. 0 string \xc0HRB Harbour HRB file >4 leshort x version %d # Harbour HBV files 0 string \xc0HBV Harbour variable dump file >4 leshort x version %d # From: Alex Beregszaszi # 0 string exec BugOS executable # 0 string pack BugOS archive # From: Jason Spence # Generated by the "examples" in STM's ST40 devkit, and derived code. 0 lelong 0x13a9f17e ST40 component image format >4 string >\0 \b, name '%s' file-5.46/magic/Magdir/varied.script000664 023540 023540 00000001155 14571207705 021126 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: varied.script,v 1.16 2024/02/04 19:26:02 christos Exp $ # varied.script: file(1) magic for various interpreter scripts 0 string #![ Rust Source file !:ext rs 0 string/wt #!\ a >&-1 string/T x %s script text executable !:strength / 3 0 string/wb #!\ a >&-1 string/T x %s script executable (binary data) !:strength / 3 # using env 0 string/wt #!\ /usr/bin/env a >15 string/T >\0 %s script text executable !:strength / 6 0 string/wb #!\ /usr/bin/env a >15 string/T >\0 %s script executable (binary data) !:strength / 6 file-5.46/magic/Magdir/vax000664 023540 023540 00000001752 14571207705 017152 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: vax,v 1.11 2024/02/29 03:42:40 christos Exp $ # vax: file(1) magic for VAX executable/object and APL workspace # 0 lelong 0101557 VAX single precision APL workspace 0 lelong 0101556 VAX double precision APL workspace # # VAX a.out (BSD; others collide with i386 and other 32-bit little-endian # executables, and are handled in aout) # 0 lelong 0420 a.out VAX demand paged (first page unmapped) pure executable >16 lelong >0 not stripped # # VAX COFF # # The `versions' were commented out, but have been un-commented out. # (Was the problem just one of endianness?) # 0 leshort 0570 >2 uleshort <100 VAX COFF executable, sections %d >>4 ledate x \b, created %s >>12 lelong >0 \b, not stripped >>22 leshort >0 \b, version %d 0 leshort 0575 >2 uleshort <100 VAX COFF pure executable, sections %d >>4 ledate x \b, created %s >>12 lelong >0 \b, not stripped >>22 leshort >0 \b, version %d file-5.46/magic/Magdir/vicar000664 023540 023540 00000001367 14015050424 017445 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: vicar,v 1.4 2009/09/19 16:28:13 christos Exp $ # vicar: file(1) magic for VICAR files. # # From: Ossama Othman 32 string BYTE \b, 8 bits = VAX byte >32 string HALF \b, 16 bits = VAX word = Fortran INTEGER*2 >32 string FULL \b, 32 bits = VAX longword = Fortran INTEGER*4 >32 string REAL \b, 32 bits = VAX longword = Fortran REAL*4 >32 string DOUB \b, 64 bits = VAX quadword = Fortran REAL*8 >32 string COMPLEX \b, 64 bits = VAX quadword = Fortran COMPLEX*8 # VICAR label file 43 string SFDU_LABEL VICAR label file file-5.46/magic/Magdir/virtual000664 023540 023540 00000031525 14700541414 020033 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: virtual,v 1.21 2024/09/04 19:09:00 christos Exp $ # From: James Nobis # Microsoft hard disk images for: # Virtual Server # Virtual PC # VirtualBox # URL: http://fileformats.archiveteam.org/wiki/VHD_(Virtual_Hard_Disk) # Reference: https://download.microsoft.com/download/f/f/e/ffef50a5-07dd-4cf8-aaa3-442c0673a029/ # Virtual%20Hard%20Disk%20Format%20Spec_10_18_06.doc 0 string conectix Microsoft Disk Image, Virtual Server or Virtual PC # alternative shorter names #0 string conectix Microsoft Virtual Hard Disk image #0 string conectix Microsoft Virtual HD image !:mime application/x-virtualbox-vhd !:ext vhd # Features is a bit field used to indicate specific feature support #>8 ubelong !0x00000002 \b, Features %#x # Reserved. This bit must always be set to 1. #>8 ubelong &0x00000002 \b, Reserved %#x # File Format Version for the current specification 0x00010000 #>12 ubelong !0x00010000 \b, Version %#8.8x # Data Offset only found 0x200 #>16 ubequad !0x200 \b, Data Offset %#llx #>16 ubequad x \b, at %#llx # Dynamic Disk Header cookie like cxsparse #>(16.Q) string x "%-.8s" # This field contains a Unicode string (UTF-16) of the parent hard disk filename #>(16.Q+64) ubequad x \b, parent name %#llx # Creator Application # vpc~Microsoft Virtual PC, vs~Microsoft Virtual Server, vbox~VirtualBox, d2v~disk2vhd >28 string x \b, Creator %-4.4s # Creator Version: 0x00010000~Virtual Server 2004, 0x00050000~Virtual PC 2004 # holds the major/minor version of the application that created the image >32 ubeshort x %x >34 ubeshort x \b.%x #>32 ubelong x \b, Version %#8.8x # Creator Host OS: 0x5769326B~Windows (Wi2k), 0x4D616320~Macintosh (Mac) >36 ubelong x ( >>36 ubelong 0x5769326B \bW2k >>36 ubelong 0x4D616320 \bMac >>36 default x \b0x >>>36 ubelong x \b%8.8x # creation Time in seconds since 1 Jan 2000 UTC~946684800 sec. since Unix Epoch >24 bedate+946684800 x \b) %s # Original Size #>40 ubequad x \b, o.-Size %#llx # Current Size is same as original size, but change when disk is expanded #>48 ubequad x \b, Size %#llx >48 ubequad x \b, %llu bytes # Disk Geometry: cylinder, heads, and sectors/track for hard disk #>56 ubeshort x \b, Cylinder %#x >56 ubeshort x \b, CHS %u # Heads #>58 ubyte x \b, Heads %#x >58 ubyte x \b/%u # Sectors per track #>59 ubyte x \b, Sectors %#x >59 ubyte x \b/%u # Disk Type: 3~Dynamic hard disk >60 ubelong !0x3 \b, type %#x # Checksum #>64 ubelong x \b, cksum %#x # universally unique identifier (UUID) to associate a parent with its differencing image #>68 ubequad x \b, id %#16.16llx #>76 ubequad x \b-%16.16llx # Saved State: 1~Saved State >84 ubyte !0 \b, State %#x # Reserved 427 bytes with nils #>85 ubequad !0 \b, Reserved %#16.16llx # From: Joerg Jenderek # URL: https://msdn.microsoft.com/en-us/library/mt740058.aspx # Reference: https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/ # MS-VHDX/[MS-VHDX].pdf # Note: extends the VHD format with new capabilities, such as a 16TB maximum size # TODO: find and display values like virtual size, disk size, cluster_size, etc # display id in GUID format # # VHDX_FILE_IDENTIFIER signature 0x656C696678646876 0 string vhdxfile # VHDX_HEADER signature. 1 header is stored at offset 64KB and the other at 128KB >0x10000 string head Microsoft Disk Image eXtended #>0x20000 string head \b, 2nd header #!:mime application/x-virtualbox-vhdx !:ext vhdx # Creator[256] like "QEMU v3.0.0", "Microsoft Windows 6.3.9600.18512" >>8 lestring16 x \b, by %.256s # The Checksum field is a CRC-32C hash over the entire 4 KB structure #>>0x10004 ulelong x \b, CRC %#x # SequenceNumber >>0x10008 ulequad x \b, sequence %#llx # FileWriteGuid #>>0x10010 ubequad x \b, file id %#llx #>>>0x10018 ubequad x \b-%llx # DataWriteGuid #>>0x10020 ubequad x \b, data id %#llx #>>>0x10028 ubequad x \b-%llx # LogGuid. If this field is zero, then the log is empty or has no valid entries >>0x10030 ubequad >0 \b, log id %#llx >>>0x10038 ubequad x \b-%llx # LogVersion. If not 0 there is a log to replay >>0x10040 uleshort >0 \b, LogVersion %#x # Version. This field must be set to 1 >>0x10042 uleshort !1 \b, Version %#x # LogLength must be multiples of 1 MB >>0x10044 ulelong/1048576 >1 \b, LogLength %u MB # LogOffset (normally 0x100000 when log direct after header); multiples of 1 MB >>0x10048 ulequad !0x100000 \b, LogOffset %#llx # Log Entry Signature must be 0x65676F6C~loge >>(0x10048.q) ulelong !0x65676F6C \b, NO Log Signature >>(0x10048.q) ulelong =0x65676F6C \b; LOG # Log Entry Checksum #>>>(0x10048.q+4) ulelong x \b, Log CRC %#x # Log Entry Length must be a multiple of 4 KB >>>(0x10048.q+8) ulelong/1024 >4 \b, EntryLength %u KB # Log Entry Tail must be a multiple of 4 KB #>>>(0x10048.q+12) ulelong x \b, Tail %#x # Log Entry SequenceNumber #>>>(0x10048.q+16) ulequad x \b, # %#llx # Log Entry DescriptorCount may be zero. only 4 bytes in other docs instead 8 #>>>(0x10048.q+24) ulelong x \b, DescriptorCount %#llx # Log Entry Reserved must be set to 0 >>>(0x10048.q+28) ulelong !0 \b, Reserved %#x # Log Entry LogGuid #>>>(0x10048.q+32) ubequad x \b, Log id %#llx #>>>(0x10048.q+40) ubequad x \b-%llx # Log Entry FlushedFileOffset should VHDX size when entry is written. #>>>(0x10048.q+48) ulequad x \b, FlushedFileOffset %llu # Log Entry LastFileOffset #>>>(0x10048.q+56) ulequad x \b, LastFileOffset %llu # filling #>>>(0x10048.q+64) ulequad >0 \b, filling %llx # Reserved[4016] #>>0x10050 ulequad >0 \b, Reserved %#llx # VHDX_REGION_TABLE_HEADER Signature 0x69676572~regi at offset 192 KB and 256 KB >0x30000 ulelong !0x69676572 Microsoft Disk Image Extended, 1st region INVALID >0x30000 ulelong =0x69676572 Microsoft Disk Image Extended; region # region Checksum. CRC-32C hash over the entire 64-KB table #>>0x30004 ulelong x \b, CRC %#x # The EntryCount specifies number of valid entries; Found 2; This must be =< 2047. >>0x30008 ulelong x \b, %u entries # reserved must be zero #>>0x3000C ulelong !0 \b, RESERVED %#x # Region Table Entry starts with identifier for the object. often BAT id >>0x30010 use vhdx-id # FileOffset >>0x30020 ulequad x \b, at %#llx # Length. Specifies the length of the object within the file #>>0x30028 ulelong x \b, Length %#x # 1 means region entry is required. if region not recognized, then REFUSE to load VHDX >>0x3002C ulelong x \b, Required %u # 2nd region entry often metadata id >>0x30030 use vhdx-id # 2nd entry FileOffset >>0x30040 ulequad x \b, at %#llx # 1 means region entry is required. if region not recognized, then REFUSE to load VHDX >>0x3004C ulelong x \b, Required %u # 2nd region >>0x40000 ulelong !0x69676572 \b, 2nd region INVALID # check in vhdx images for known id and show names instead hexadecimal 0 name vhdx-id # https://www.windowstricks.in/online-windows-guid-converter # 2DC27766-F623-4200-9D64-115E9BFD4A08 BAT GUID # 6677C22D23F600429D64115E9BFD4A08 BAT ID >0 ubequad =0x6677C22D23F60042 >>8 ubequad =0x9D64115E9BFD4A08 \b, id BAT # no BAT id >>8 default x >>>0 use vhdx-id-hex # 8B7CA206-4790-4B9A-B8FE-575F050F886E Metadata region GUID # 06A27C8B90479A4BB8FE575F050F886E Metadata region ID >0 ubequad =0x06A27C8B90479A4B >>8 ubequad =0xB8FE575F050F886E \b, id Metadata # no Metadata id >>8 default x >>>0 use vhdx-id-hex # 2FA54224-CD1B-4876-B211-5DBED83BF4B8 Virtual Disk Size GUID # 2442A52F1BCD7648B2115DBED83BF4B8 Virtual Disk Size ID # value "virtual size" can be verified by command `qemu-img info ` >0 ubequad =0x2442A52F1BCD7648 >>8 ubequad =0xB2115DBED83BF4B8 \b, id vsize # no Virtual Disk Size ID >>8 default x >>>0 use vhdx-id-hex # other ids >0 default x >>0 use vhdx-id-hex # in vhdx images show id as hexadecimal 0 name vhdx-id-hex >0 ubequad x \b, ID %#16.16llx >8 ubequad x \b-%16.16llx # # libvirt # From: Philipp Hahn 0 string LibvirtQemudSave Libvirt QEMU Suspend Image >0x10 lelong x \b, version %u >0x14 lelong x \b, XML length %u >0x18 lelong 1 \b, running >0x1c lelong 1 \b, compressed 0 string LibvirtQemudPart Libvirt QEMU partial Suspend Image # From: Alex Beregszaszi 0 string/b COWD VMWare3 >4 byte 3 disk image >>32 lelong x (%d/ >>36 lelong x \b%d/ >>40 lelong x \b%d) >4 byte 2 undoable disk image >>32 string >\0 (%s) 0 string/b VMDK VMware4 disk image 0 string/b KDMV VMware4 disk image #-------------------------------------------------------------------- # Qemu Emulator Images # Lines written by Friedrich Schwittay (f.schwittay@yousable.de) # Updated by Adam Buchbinder (adam.buchbinder@gmail.com) # Made by reading sources, reading documentation, and doing trial and error # on existing QCOW files 0 string/b QFI\xFB QEMU QCOW Image !:mime application/x-qemu-disk # Uncomment the following line to display Magic (only used for debugging # this magic number) #>0 string/b x , Magic: %s # There are currently 2 Versions: "1" and "2". # https://www.gnome.org/~markmc/qcow-image-format-version-1.html >4 belong x (v%d) # Using the existence of the Backing File Offset to determine whether # to read Backing File Information >>12 belong >0 \b, has backing file ( # Note that this isn't a null-terminated string; the length is actually # (16.L). Assuming a null-terminated string happens to work usually, but it # may spew junk until it reaches a \0 in some cases. >>>(12.L) string >\0 \bpath %s # Modification time of the Backing File # Really useful if you want to know if your backing # file is still usable together with this image >>>>20 bedate >0 \b, mtime %s) >>>>20 default x \b) # Size is stored in bytes in a big-endian u64. >>24 bequad x \b, %lld bytes # 1 for AES encryption, 0 for none. >>36 belong 1 \b, AES-encrypted # https://www.gnome.org/~markmc/qcow-image-format.html >4 belong 2 (v2) # Using the existence of the Backing File Offset to determine whether # to read Backing File Information >>8 bequad >0 \b, has backing file # Note that this isn't a null-terminated string; the length is actually # (16.L). Assuming a null-terminated string happens to work usually, but it # may spew junk until it reaches a \0 in some cases. Also, since there's no # .Q modifier, we just use the bottom four bytes as an offset. Note that if # the file is over 4G, and the backing file path is stored after the first 4G, # the wrong filename will be printed. (This should be (8.Q), when that syntax # is introduced.) >>>(12.L) string >\0 (path %s) >>24 bequad x \b, %lld bytes >>32 belong 1 \b, AES-encrypted >4 belong 3 (v3) # Using the existence of the Backing File Offset to determine whether # to read Backing File Information >>8 bequad >0 \b, has backing file # Note that this isn't a null-terminated string; the length is actually # (16.L). Assuming a null-terminated string happens to work usually, but it # may spew junk until it reaches a \0 in some cases. Also, since there's no # .Q modifier, we just use the bottom four bytes as an offset. Note that if # the file is over 4G, and the backing file path is stored after the first 4G, # the wrong filename will be printed. (This should be (8.Q), when that syntax # is introduced.) >>>(12.L) string >\0 (path %s) >>24 bequad x \b, %lld bytes >>32 belong 1 \b, AES-encrypted >4 default x (unknown version) 0 string/b QEVM QEMU suspend to disk image # QEMU QED Image # https://wiki.qemu.org/Features/QED/Specification 0 string/b QED\0 QEMU QED Image # VDI Image # Sun xVM VirtualBox Disk Image # From: Richard W.M. Jones # VirtualBox Disk Image 0x40 ulelong 0xbeda107f VirtualBox Disk Image >0x44 uleshort >0 \b, major %u >0x46 uleshort >0 \b, minor %u >0 string >\0 (%s) >368 lequad x \b, %lld bytes # From: Joerg Jenderek # URL: https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifynvram # Reference: http://mark0.net/download/triddefs_xml.7z/defs/n/nvram-virtualbox.trid.xml # Note: called "VirtualBox saved (U)EFI BIOS settings" by TrID and # verfied partly by VirtualBox version 7.0.12 `VBoxManage modifynvram listvars` # first 64 bytes seems to be constant 0 long 0 >0x28 string _FVH >>0x64 beshort 0xAA55 >>>0 use virtualbox-nvram # display information of virtualbox *.nvram 0 name virtualbox-nvram >0x64 beshort x VirtualBox NVRAM file #!:mime application/octet-stream !:mime application/x-virtualbox-nvram !:ext nvram 0 string/b Bochs\ Virtual\ HD\ Image Bochs disk image, >32 string x type %s, >48 string x subtype %s 0 lelong 0x02468ace Bochs Sparse disk image # QEMU replay image # From: Alexandre Iooss # URL: https://www.qemu.org/docs/master/system/replay.html # Reference: https://gitlab.com/qemu/qemu/-/blob/master/replay/replay.c 0 ubelong&0xFFFFFFF0 0x00e02000 >3 byte >5 >>4 quad 0 >>>12 ulelong <40 QEMU replay >>>>3 byte x \b, version %d >>>>3 byte 6 (QEMU 2.10-2.11) >>>>3 byte 7 (QEMU 2.12-4.1) >>>>3 byte 8 (QEMU 4.2) >>>>3 byte 9 (QEMU 5.0) >>>>3 byte 10 (QEMU 5.1-7.0) >>>>3 byte 12 (QEMU 7.1+) file-5.46/magic/Magdir/virtutech000664 023540 023540 00000001014 14015050424 020343 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: virtutech,v 1.4 2009/09/19 16:28:13 christos Exp $ # Virtutech Compressed Random Access File Format # # From 0 string \211\277\036\203 Virtutech CRAFF >4 belong x v%d >20 belong 0 uncompressed >20 belong 1 bzipp2ed >20 belong 2 gzipped >24 belong 0 not clean file-5.46/magic/Magdir/visx000664 023540 023540 00000001714 14015050424 017326 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: visx,v 1.5 2009/09/19 16:28:13 christos Exp $ # visx: file(1) magic for Visx format files # 0 short 0x5555 VISX image file >2 byte 0 (zero) >2 byte 1 (unsigned char) >2 byte 2 (short integer) >2 byte 3 (float 32) >2 byte 4 (float 64) >2 byte 5 (signed char) >2 byte 6 (bit-plane) >2 byte 7 (classes) >2 byte 8 (statistics) >2 byte 10 (ascii text) >2 byte 15 (image segments) >2 byte 100 (image set) >2 byte 101 (unsigned char vector) >2 byte 102 (short integer vector) >2 byte 103 (float 32 vector) >2 byte 104 (float 64 vector) >2 byte 105 (signed char vector) >2 byte 106 (bit plane vector) >2 byte 121 (feature vector) >2 byte 122 (feature vector library) >2 byte 124 (chain code) >2 byte 126 (bit vector) >2 byte 130 (graph) >2 byte 131 (adjacency graph) >2 byte 132 (adjacency graph library) >2 string .VISIX (ascii text) file-5.46/magic/Magdir/vms000664 023540 023540 00000002644 14015050424 017145 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: vms,v 1.10 2017/03/17 21:35:28 christos Exp $ # vms: file(1) magic for VMS executables (experimental) # # VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu) # GRR 950122: I'm just guessing on these, based on inspection of the headers # of three executables each for Alpha and VAX architectures. The VAX files # all had headers similar to this: # # 00000 b0 00 30 00 44 00 60 00 00 00 00 00 30 32 30 35 ..0.D.`.....0205 # 00010 01 01 00 00 ff ff ff ff ff ff ff ff 00 00 00 00 ................ # 0 string \xb0\0\x30\0 VMS VAX executable >44032 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption # # The AXP files all looked like this, except that the byte at offset 0x22 # was 06 in some of them and 07 in others: # # 00000 03 00 00 00 00 00 00 00 ec 02 00 00 10 01 00 00 ................ # 00010 68 00 00 00 98 00 00 00 b8 00 00 00 00 00 00 00 h............... # 00020 00 00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ # 00030 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ................ # 00040 00 00 00 00 ff ff ff ff ff ff ff ff 02 00 00 00 ................ # # GRR this test is still too general as it catches example adressen.dbt 0 belong 0x03000000 >8 ubelong 0xec020000 VMS Alpha executable >>75264 string PK\003\004 \b, Info-ZIP SFX archive v5.12 w/decryption file-5.46/magic/Magdir/vmware000664 023540 023540 00000000433 14015050424 017633 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: vmware,v 1.8 2017/03/17 21:35:28 christos Exp $ # VMware specific files (deducted from version 1.1 and log file entries) # Anthon van der Neut (anthon@mnt.org) 0 belong 0x4d52564e VMware nvram file-5.46/magic/Magdir/vorbis000664 023540 023540 00000013740 14015050424 017643 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: vorbis,v 1.26 2020/08/22 18:30:55 christos Exp $ # vorbis: file(1) magic for Ogg/Vorbis files # # From Felix von Leitner # Extended by Beni Cherniavsky # Further extended by Greg Wooledge # # Most (everything but the number of channels and bitrate) is commented # out with `##' as it's not interesting to the average user. The most # probable things advanced users would want to uncomment are probably # the number of comments and the encoder version. # # FIXME: The first match has been made a search, so that it can skip # over prepended ID3 tags. This will work for MIME type detection, but # won't work for detecting other properties of the file (they all need # to be made relative to the search). In any case, if the file has ID3 # tags, the ID3 information will be printed, not the Ogg information, # so until that's fixed, this doesn't matter. # FIXME[2]: Disable the above for now, since search assumes text mode. # # --- Ogg Framing --- #0 search/1000 OggS Ogg data 0 string OggS Ogg data >4 byte !0 UNKNOWN REVISION %u ##>4 byte 0 revision 0 >4 byte 0 ##>>14 lelong x (Serial %lX) # non-Vorbis content: FLAC (Free Lossless Audio Codec, http://flac.sourceforge.net) >>28 string \x7fFLAC \b, FLAC audio # non-Vorbis content: Theora !:mime audio/ogg >>28 string \x80theora \b, Theora video !:mime video/ogg # non-Vorbis content: Kate >>28 string \x80kate\0\0\0\0 \b, Kate (Karaoke and Text) !:mime application/ogg >>>37 ubyte x v%u >>>38 ubyte x \b.%u, >>>40 byte 0 utf8 encoding, >>>40 byte !0 unknown character encoding, >>>60 string >\0 language %s, >>>60 string \0 no language set, >>>76 string >\0 category %s >>>76 string \0 no category set # non-Vorbis content: Skeleton >>28 string fishead\0 \b, Skeleton !:mime video/ogg >>>36 leshort x v%u >>>40 leshort x \b.%u # non-Vorbis content: Speex >>28 string Speex\ \ \ \b, Speex audio !:mime audio/ogg # non-Vorbis content: OGM >>28 string \x01video\0\0\0 \b, OGM video !:mime video/ogg >>>37 string/c div3 (DivX 3) >>>37 string/c divx (DivX 4) >>>37 string/c dx50 (DivX 5) >>>37 string/c xvid (XviD) # --- First vorbis packet - general header --- >>28 string \x01vorbis \b, Vorbis audio, !:mime audio/ogg >>>35 lelong !0 UNKNOWN VERSION %u, ##>>>35 lelong 0 version 0, >>>35 lelong 0 >>>>39 ubyte 1 mono, >>>>39 ubyte 2 stereo, >>>>39 ubyte >2 %u channels, >>>>40 lelong x %u Hz # Minimal, nominal and maximal bitrates specified when encoding >>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff \b, # The above tests if at least one of these is specified: >>>>>52 lelong !-1 # Vorbis RC2 has a bug which puts -1000 in the min/max bitrate fields # instead of -1. # Vorbis 1.0 uses 0 instead of -1. >>>>>>52 lelong !0 >>>>>>>52 lelong !-1000 >>>>>>>>52 lelong x <%u >>>>>48 lelong !-1 >>>>>>48 lelong x ~%u >>>>>44 lelong !-1 >>>>>>44 lelong !-1000 >>>>>>>44 lelong !0 >>>>>>>>44 lelong x >%u >>>>>48 string <\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff bps # -- Second vorbis header packet - the comments # A kludge to read the vendor string. It's a counted string, not a # zero-terminated one, so file(1) can't read it in a generic way. # libVorbis is the only one existing currently, so I detect specifically # it. The interesting value is the cvs date (8 digits decimal). # Post-RC1 Ogg files have the second header packet (and thus the version) # in a different place, so we must use an indirect offset. >>>(84.b+85) string \x03vorbis >>>>(84.b+96) string/c Xiphophorus\ libVorbis\ I \b, created by: Xiphophorus libVorbis I >>>>>(84.b+120) string >00000000 # Map to beta version numbers: >>>>>>(84.b+120) string <20000508 (>>>>>(84.b+120) string 20000508 (1.0 beta 1 or beta 2) >>>>>>(84.b+120) string >20000508 >>>>>>>(84.b+120) string <20001031 (beta2-3) >>>>>>(84.b+120) string 20001031 (1.0 beta 3) >>>>>>(84.b+120) string >20001031 >>>>>>>(84.b+120) string <20010225 (beta3-4) >>>>>>(84.b+120) string 20010225 (1.0 beta 4) >>>>>>(84.b+120) string >20010225 >>>>>>>(84.b+120) string <20010615 (beta4-RC1) >>>>>>(84.b+120) string 20010615 (1.0 RC1) >>>>>>(84.b+120) string 20010813 (1.0 RC2) >>>>>>(84.b+120) string 20010816 (RC2 - Garf tuned v1) >>>>>>(84.b+120) string 20011014 (RC2 - Garf tuned v2) >>>>>>(84.b+120) string 20011217 (1.0 RC3) >>>>>>(84.b+120) string 20011231 (1.0 RC3) # Some pre-1.0 CVS snapshots still had "Xiphphorus"... >>>>>>(84.b+120) string >20011231 (pre-1.0 CVS) # For the 1.0 release, Xiphophorus is replaced by Xiph.Org >>>>(84.b+96) string/c Xiph.Org\ libVorbis\ I \b, created by: Xiph.Org libVorbis I >>>>>(84.b+117) string >00000000 >>>>>>(84.b+117) string <20020717 (pre-1.0 CVS) >>>>>>(84.b+117) string 20020717 (1.0) >>>>>>(84.b+117) string 20030909 (1.0.1) >>>>>>(84.b+117) string 20040629 (1.1.0 RC1) >>>>>>(84.b+117) string 20050304 (1.1.2) >>>>>>(84.b+117) string 20070622 (1.2.0) >>>>>>(84.b+117) string 20090624 (1.2.2) >>>>>>(84.b+117) string 20090709 (1.2.3) >>>>>>(84.b+117) string 20100325 (1.3.1) >>>>>>(84.b+117) string 20101101 (1.3.2) >>>>>>(84.b+117) string 20120203 (1.3.3) >>>>>>(84.b+117) string 20140122 (1.3.4) >>>>>>(84.b+117) string 20150105 (1.3.5) # non-Vorbis content: Opus https://tools.ietf.org/html/rfc7845#section-5 >>28 string OpusHead \b, Opus audio, !:mime audio/ogg >>>36 ubyte >0x0F UNKNOWN VERSION %u, >>>36 ubyte&0x0F !0 version 0.%u, >>>>46 ubyte >1 >>>>>46 ubyte !255 unknown channel mapping family %u, >>>>>37 ubyte x %u channels >>>>46 ubyte 0 >>>>>37 ubyte 1 mono >>>>>37 ubyte 2 stereo >>>>46 ubyte 1 >>>>>37 ubyte 1 mono >>>>>37 ubyte 2 stereo >>>>>37 ubyte 3 linear surround >>>>>37 ubyte 4 quadraphonic >>>>>37 ubyte 5 5.0 surround >>>>>37 ubyte 6 5.1 surround >>>>>37 ubyte 7 6.1 surround >>>>>37 ubyte 8 7.1 surround >>>>40 lelong !0 \b, %u Hz (Input Sample Rate)file-5.46/magic/Magdir/vxl000664 023540 023540 00000000751 14015050424 017146 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: vxl,v 1.4 2009/09/19 16:28:13 christos Exp $ # VXL: file(1) magic for VXL binary IO data files # # from Ian Scott # # VXL is a collection of C++ libraries for Computer Vision. # See the vsl chapter in the VXL Book for more info # http://www.isbe.man.ac.uk/public_vxl_doc/books/vxl/book.html # http:/vxl.sf.net 2 lelong 0x472b2c4e VXL data file, >0 leshort >0 schema version no %d file-5.46/magic/Magdir/warc000664 023540 023540 00000001124 14015050424 017264 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: warc,v 1.4 2019/04/19 00:42:27 christos Exp $ # warc: file(1) magic for WARC files 0 string WARC/ WARC Archive >5 string x version %.4s !:mime application/warc #------------------------------------------------------------------------------ # Arc File Format from Internet Archive # see https://www.archive.org/web/researcher/ArcFileFormat.php 0 string filedesc:// Internet Archive File !:mime application/x-ia-arc >11 search/256 \x0A \b >>&0 ubyte >0 \b version %c file-5.46/magic/Magdir/web000664 023540 023540 00000001012 14331776734 017125 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: web,v 1.2 2022/10/29 16:02:37 christos Exp $ # http://www.rdfhdt.org/ # From Christoph Biedl # http://www.rdfhdt.org/hdt-internals/ # https://github.com/rdfhdt/hdt-cpp 0 string $HDT\x01 HDT file (binary compressed indexed RDF triples) type 1 !:mime application/vnd.hdt !:ext hdt 0 string [Adblock\040Plus Adblock Plus >&1 regex [0-9.]+ %s >1 string x rules file >10 search/100 Version: >>&1 regex [0-9]+ \b, version %s file-5.46/magic/Magdir/weak000664 023540 023540 00000001254 14634600770 017277 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: weak,v 1.3 2024/06/10 23:09:52 christos Exp $ # weak: file(1) magic for very weak magic entries, disabled by default # # These entries are so weak that they might interfere identification of # other formats. Example include: # - Only identify for 1 or 2 bytes # - Match against very wide range of values # - Match against generic word in some spoken languages (e.g. English) # Summary: Computer Graphics Metafile # Extension: .cgm #0 beshort&0xffe0 0x0020 binary Computer Graphics Metafile #0 beshort 0x3020 character Computer Graphics Metafile #0 string =!! Bennet Yee's "face" format file-5.46/magic/Magdir/webassembly000664 023540 023540 00000001237 14276676227 020702 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: webassembly,v 1.4 2022/08/16 11:16:39 christos Exp $ # webassembly: file(1) magic for WebAssembly modules # # WebAssembly is a virtual architecture developed by a W3C Community # Group at https://webassembly.org/. The file extension is .wasm, and # the MIME type is application/wasm. # # https://webassembly.org/docs/binary-encoding/ is the main # document describing the binary format. # From: Pip Cet and Joel Martin 0 string \0asm WebAssembly (wasm) binary module >4 lelong =1 version %#x (MVP) !:mime application/wasm !:ext wasm >4 lelong >1 version %#x file-5.46/magic/Magdir/windows000664 023540 023540 00000232403 14713772160 020045 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: windows,v 1.67 2024/11/09 22:43:01 christos Exp $ # windows: file(1) magic for Microsoft Windows # # This file is mainly reserved for files where programs # using them are run almost always on MS Windows 3.x or # above, or files only used exclusively in Windows OS, # where there is no better category to allocate for. # For example, even though WinZIP almost run on Windows # only, it is better to treat them as "archive" instead. # For format usable in DOS, such as generic executable # format, please specify under "msdos" file. # # Summary: Outlook Express DBX file # Created by: Christophe Monniez # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Outlook_Express_Database # Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/dbx.trid.xml # https://sourceforge.net/projects/ol2mbox/files/LibDBX/ # v1.0.4/libdbx_1.0.4.tar.gz/FILE-FORMAT # Note: called "Outlook Express Database" by TrID and DROID via PUID fmt/838 fmt/839 # and partly verified by `undbx --verbosity 4 Posteingang.dbx` 0 string \xCF\xAD\x12\xFE # skip DROID fmt-838-signature-id-1193.dbx fmt-839-signature-id-1194.dbx by check for valid file size >0x7C ulelong >0 MS Outlook Express DBX file #!:mime application/octet-stream #!:mime application/vnd.ms-outlook !:mime application/x-ms-dbx !:ext dbx >>4 byte =0xC5 \b, message database >>4 byte =0xC6 \b, folder database >>4 byte =0xC7 \b, account information >>4 byte =0x30 \b, offline database # version like: 5.2 5.5 (typical) >>20 ulequad !0x0000000500000005 \b, version # major version >>>24 ulelong x %u # minor version >>>20 ulelong x \b.%u # CLSID: 6F74FDC5-E366-11d1-9A4E-00C04FA309D4~Message 6F74FDC6-E366-11D1-9A4E-00C04FA309D4~Folder # 26FE9D30-1A8F-11D2-AABF-006097D474C4~offline #>>4 guid x \b, CLSID %s # file size; total size of file; sometimes real size a little bit higher >>0x7C ulelong x \b, ~ %u bytes # highest Email ID; the next email will have a number one higher than this >>0x5c ulelong x \b, highest ID %#x # item count; number of items stored in this DBX file >>0xC4 ulelong x \b, %u item # plural s >>0xC4 ulelong !1 \bs # index pointer; file offset pointing to a page of Data Indexes >>0xE4 ulelong >0 \b, index pointer %#x # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Nickfile # https://www.nirsoft.net/utils/outlook_nk2_edit.html # Reference: http://mark0.net/download/triddefs_xml.7z/defs/n/nk2.trid.xml # https://github.com/libyal/libnk2/blob/main/documentation # Nickfile%20(NK2)%20format.asciidoc # Note: called "Outlook Nickfile" by TrID & TestDisk and # "Outlook Nickname File" by Microsoft Outlook and # "Outlook AutoComplete File" by Nirsoft NK2Edit # partly verfied by NK2Edit Raw Text Edit Mode 0 ubelong 0x0DF0ADBA MS Outlook Nickfile #!:mime application/octet-stream #!:mime application/vnd.ms-outlook !:mime application/x-ms-nickfile !:ext nk2/dat/bak # nick is used by "older" Outlook; dat is used by "newer" Outlook (probably 2010 - 2016); bak is used for backup #!:ext nick/nk2/dat/bak # Unknown; probably a version indicator like: 0000000Ah 0000000Ch >4 ulelong x \b, probably version %u # Unknown2; probably a version indicator like: 1 0 >8 ulelong x \b.%u # number of rows (nickname or alias items) in file >12 ulelong x \b, %u items # number of item entries/columns/properties value like: 17h >16 ulelong x \b, %u entries # value type/property tag: 001Fh~4 bytes for data size of UTF-16 LE string >20 uleshort x \b, value type %#4.4x # entry type/property identifier: 6001h~PR_DOTSTUFF_STATE/PR_NICK_NAME_W >22 uleshort x \b, entry type %#4.4x # Reserved like: 0013FD90h #>24 ulelong x \b, reserved %#8.8x # value data array/Irrelevant Union like: 0000000004E31A80h #>28 ulequad x \b, data %#16.16llx # UTF-16 >20 uleshort =0x001F # unicode string bytes like: 2Ch >>36 ulelong x \b, %u bytes # unicode string value PT_UNICODE like: janesmith@contoso.org >>40 lestring16 x "%s" # Summary: Windows crash dump # Created by: Andreas Schuster (https://computer.forensikblog.de/) # https://web.archive.org/web/20101125060849/https://computer.forensikblog.de/en/2008/02/64bit_magic.html # Modified by (1): Abel Cheung (Avoid match with first 4 bytes only) # Modified by (2): Joerg Jenderek (addtional fields, extension, URL) # Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/dmp.trid.xml # https://gitlab.com/qemu-project/qemu/-/blob/master/include/qemu/win_dump_defs.h # Note: called "Windows memory dump" by TrID # and verified by like Windows Kit `Dumpchk.exe 043022-18703-01.dmp` # and partly by NirSoft `BlueScreenView.exe 043022-18703-01.dmp` # char Signature[4] 0 string PAGE # char ValidDump[4] >4 string DUMP MS Windows 32bit crash dump #!:mime application/octet-stream !:mime application/x-ms-dmp # like: Mini111013-01.dmp !:ext dmp # major version like: 15 >>8 ulelong x \b, version %u # minor version like: 2600 >>12 ulelong x \b.%u # DirectoryTableBase like: 709000 #>>16 ulelong x \b, DirectoryTableBase %#x # PfnDatabase like: 805620c8 #>>20 ulelong x \b, PfnDatabase %#x # PsLoadedModuleList like: 8055d720 #>>24 ulelong x \b, PsLoadedModuleList %#x # PsActiveProcessHead like:805638b8 #>>28 ulelong x \b, PsActiveProcessHead %#x # MachineImageType like: 14c (intel x86) >>32 ulelong !0x14c \b, MachineImageType %#x # NumberProcessors like: 2 >>36 ulelong x \b, %u processors # BugcheckCode like: e2 #>>40 ulelong x \b, BugcheckCode %#x # BugcheckParameter1 like: 0 #>>44 ulelong x \b, BugcheckParameter1 %#x # BugcheckParameter2 like: 0 #>>48 ulelong x \b, BugcheckParameter2 %#x # BugcheckParameter3 like: 0 #>>52 ulelong x \b, BugcheckParameter3 %#x # BugcheckParameter4 like: 0 #>>56 ulelong x \b, BugcheckParameter4 %#x # VersionUser[32]; like "PAGEPAGEPAGEPAGEPAGEPAGEPAGEPAGE" "" #>>60 string x \b, VersionUser "%.32s" # uint32_t reserved0 like: 45474101 #>>92 ulelong x \b, reserved0 %#x >>0x05c byte 0 \b, no PAE >>0x05c byte 1 \b, PAE # KdDebuggerDataBlock like: 8054d2e0 #>>96 ulelong x \b, KdDebuggerDataBlock %#x # uint8_t PhysicalMemoryBlockBuffer[700] # WinDumpPhyMemDesc32 NumberOfRuns like: 45474150 #>>100 ulelong x \b, NumberOfRuns %#x # WinDumpPhyMemDesc32 uint32_t NumberOfPages like: 1162297680 #>>104 ulelong x \b, NumberOfPages %#x # WinDumpPhyMemRun32 Run[86]; 688 bytes #>>108 ulelong x \b, BasePage %#x #>>112 ulelong x \b, PageCount %#x # uint8_t reserved1[3200] #>>800 string x \b, reserved "%s" #>>4000 ulelong x \b, RequiredDumpSpace %#x # uint8_t reserved2[92]; #>>4004 string x \b, reserved2 "%s" >>0xf88 lelong 1 \b, full dump >>0xf88 lelong 2 \b, kernel dump >>0xf88 lelong 3 \b, small dump # like: 4 >>0xf88 lelong >3 \b, dump type (%#x) # WinDumpPhyMemDesc32 uint32_t NumberOfPages like: 1162297680 # GRR: IS THIS TRUE? VALUE IS SOMETIMES VERY HIGH! #>>104 ulelong x \b, NumberOfPages %#x >>0x068 lelong x \b, %d pages # Reference: http://mark0.net/download/triddefs_xml.7z/defs/d/dmp-64.trid.xml113o # Note: called "Windows 64bit Memory Dump" by TrID # char ValidDump[4] >4 string DU64 MS Windows 64bit crash dump #!:mime application/octet-stream !:mime application/x-ms-dmp # like: c:\Windows\Minidump\020322-18890-01.dmp c:\Windows\MEMORY.DMP !:ext dmp # major version like: 15 >>8 ulelong x \b, version %u # minor version like: 9600 19041 22621 >>12 ulelong x \b.%u # DirectoryTableBase like: 001ab000 #>>16 ulequad x \b, DirectoryTableBase %#llx # PfnDatabase like: fffffa8000000000 #>>24 ulequad x \b, PfnDatabase %#llx # PsLoadedModuleList like: fffff800c553f650 #>>32 ulequad x \b, PsLoadedModuleList %#llx # PsActiveProcessHead like: fffff800c5525400 #>>40 ulequad x \b, PsActiveProcessHead %#llx # MachineImageType like: 00008664 >>48 ulelong !0x8664 \b, MachineImageType %#x # NumberProcessors like: 2 4 >>52 ulelong x \b, %u processors # BugcheckCode like: 1000007e #>>56 ulelong x \b, BugcheckCode %#x # unused0 #>>60 ulelong x \b, unused0 %#x # BugcheckParameter1 like: ffffffffc0000005 #>>64 ulequad x \b, BugcheckParameter1 %#llx # BugcheckParameter2 like: fffff801abb2158f #>>72 ulequad x \b, BugcheckParameter2 %#llx # BugcheckParameter3 like: ffffd000290d4288 #>>80 ulequad x \b, BugcheckParameter3 %#llx # BugcheckParameter4 like: ffffd000290d3aa0 #>>88 ulequad x \b, BugcheckParameter4 %#llx # VersionUser[32]; like "" "PAGEPAGEPAGEPAGEPAGEPAGEPAGEPAGE" "" #>>96 string x \b, VersionUser "%.32s" # KdDebuggerDataBlock like: fffff800c550c530 #>>128 ulequad x \b, KdDebuggerDataBlock %#llx # uint8_t PhysicalMemoryBlockBuffer[704] # WinDumpPhyMemDesc64 NumberOfRuns like: 6 7 0x45474150 #>>136 ulelong x \b, NumberOfRuns %#x # WinDumpPhyMemDesc64 unused like: 0 0x45474150 #>>140 ulelong x \b, unused %#x # WinDumpPhyMemRun64 Run[43] BasePage like: 1 #>>152 ulequad x \b, BasePage %#llx # WinDumpPhyMemRun64 Run[43] PageCount like: 57h #>>160 ulequad x \b, PageCount %#llx # uint8_t ContextBuffer[3000] like: "" "\001" "\0207J\266\001\340\377\377&8\007\312" #>>840 string x \b, ContextBuffer "%s" # WinDumpExceptionRecord ExceptionCode #>>3840 ulelong x \b, ExceptionCode %#x # WinDumpExceptionRecord ExceptionFlags #>>3844 ulelong x \b, ExceptionFlags %#x # WinDumpExceptionRecord ExceptionRecord #>>3848 ulequad x \b, ExceptionRecord %#llx # WinDumpExceptionRecord ExceptionAddress #>>3856 ulequad x \b, ExceptionAddress %#llx # WinDumpExceptionRecord NumberParameters #>>3864 ulelong x \b, NumberParameters %#x # WinDumpExceptionRecord unused #>>3868 ulelong x \b, unsed %#x # WinDumpExceptionRecord ExceptionInformation[15] #>>3872 ulequad x \b, ExceptionInformation[0] %#llx # https://learn.microsoft.com/en-us/troubleshoot/windows-server/performance/memory-dump-file-options # but DumpType like: 4~small 5~full (MEMORY.DMP) 6~kernel (MEMORY.DMP) >>0xf98 ulelong x \b, >>>0xf98 lelong 5 full dump >>>0xf98 lelong 6 kernel dump >>>0xf98 lelong 4 small dump # This probably never occur >>>0xf98 default x DumpType >>>>0xf98 ulelong x (%#x) # WinDumpPhyMemDesc64 uint64_t NumberOfPages like: 3142425 8341923 8366500 1162297680 4992030524978970960 # GRR: IS THIS TRUE? VALUE IS SOMETIMES VERY HIGH! >>0x090 lequad x \b, %lld pages # Summary: Vista Event Log # Created by: Andreas Schuster (https://computer.forensikblog.de/) # Update: Joerg Jenderek # URL: https://github.com/libyal/libevtx/blob/main/documentation/Windows%20XML%20Event%20Log%20(EVTX).asciidoc # Reference (1): https://web.archive.org/web/20110803085000/ # https://computer.forensikblog.de/en/2007/05/some_magic.html # http://mark0.net/download/triddefs_xml.7z/defs/e/evtx.trid.xml # Note: called "Vista Event Log" by TrID and "Event Log" by Windows # verified partly by `wevtutil.exe gli /lf:true dumpfile.evtx` 0 string ElfFile\0 MS Windows #!:mime application/octet-stream !:mime application/x-ms-evtx !:ext evtx # Major+Minor format version: 3.1~Vista and later 3.2~Windows 10 (2004) and later >0x24 ulelong =0x00030001 Vista-8.1 Event Log >0x24 ulelong !0x00030001 10-11 Event Log, version >>0x26 uleshort x %u >>0x24 uleshort x \b.%u >0x2a leshort x \b, %d chunks >>0x10 lelong x \b (no. %d in use) >0x18 lelong >1 \b, next record no. %d >0x18 lelong =1 \b, empty >0x78 lelong &1 \b, DIRTY >0x78 lelong &2 \b, FULL # Summary: Windows Event Trace Log # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/ETL # Reference: http://mark0.net/download/triddefs_xml.7z/defs/e/etl.trid.xml # https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/etw/tracelog/trace_logfile_header.htm # Note: called "Window tracing/diagnostic binary log" by TrID # verified by `tracerpt.EXE Wifi.etl -of EVTX` # and by etl-parser `etl2xml --input AMSITrace.etl --output AMSITrace.xml` # Every ETL file begins with a WMI_BUFFER_HEADER, a SYSTEM_TRACE_HEADER and a TRACE_LOGFILE_HEADER 0 ubyte 0 # look for corresponding encoded as UTF-16 file name extension like in: boot_BASE+CSWITCH_1.etl >0 search/0x699087/b .\0e\0t\0l\0\0\0 # GRR: line above only works if in ../../src/file.h FILE_BYTES_MAX is raised above 699086h (6,59 MiB) >>0 use trace-etl # display information of Windows Performance Analyzer Trace File (file name) 0 name trace-etl >0 ubyte x Windows Event Trace Log #!:mime application/x-ms-etl # http://extension.nirsoft.net/etl !:mime application/etl !:ext etl # look for DOS drive letter part of log file name like: PhotosAppTracing_startedInBGMode.etl >0 search/0x2b4/sb :\0\x5c\0 # like: "c:\Windows\Logs\NetSetup\service.0.etl" "C:\Windows\System32\LogFiles\WMI\Wifi.etl" >>&-2 lestring16 x "%s" # Summary: Windows System Deployment Image # Created by: Joerg Jenderek # URL: http://en.wikipedia.org/wiki/System_Deployment_Image # Reference: http://skolk.livejournal.com/1320.html 0 string $SDI >4 string 0001 System Deployment Image !:mime application/x-ms-sdi #!:mime application/octet-stream # \Boot\boot.sdi !:ext sdi # MDBtype: 0~Unspecified 1~RAM 2~ROM >>8 ulequad !0 \b, MDBtype %#llx # BootCodeOffset >>16 ulequad !0 \b, BootCodeOffset %#llx # BootCodeSize >>24 ulequad !0 \b, BootCodeSize %#llx # VendorID >>32 ulequad !0 \b, VendorID %#llx # DeviceID >>40 ulequad !0 \b, DeviceID %#llx # DeviceModel >>48 ulequad !0 \b, DeviceModel %#llx >>>56 ulequad !0 \b%llx # DeviceRole >>64 ulequad !0 \b, DeviceRole %#llx # Reserved1; reserved fields and gaps between BLOBs are padded with \0 #>>72 ulequad !0 \b, Reserved1 %#llx # RuntimeGUID >>80 ulequad !0 \b, RuntimeGUID %#llx >>>88 ulequad !0 \b%llx # RuntimeOEMrev >>96 ulequad !0 \b, RuntimeOEMrev %#llx # Reserved2 #>>104 ulequad !0 \b, Reserved2 %#llx # BLOB alignment value in pages, as specified in sdimgr /pack: 1~4K 2~8k >>112 ulequad !0 \b, PageAlignment %llu # Reserved3[48] #>>120 ulequad !0 \b, Reserved3 %#llx # SDI checksum 39h >>0x1f8 ulequad x \b, checksum %#llx # BLOBtype[8] \0-padded: PART, WIM , BOOT, LOAD, DISK >>0x400 string >\0 \b, type %-3.8s # 0~non-filesystem 7~NTFS 6~BIGFAT >>>0x420 ulequad !0 (%#llx) # ATTRibutes >>>0x408 ulequad !0 %#llx attributes # Offset >>>0x410 ulequad x at %#llx # print 1 space after size and then handles NTFS boot sector by ./filesystems >>>0x418 ulequad >0 %llu bytes >>>>(0x410.l) indirect x # 2nd BLOB: WIM >>0x440 string >\0 \b, type %-3.8s >>>0x428 ulequad !0 (%#llx) # ATTRibutes >>>0x448 ulequad !0 %#llx attributes # Offset >>>0x450 ulequad x at %#llx >>>0x458 ulequad >0 %llu bytes >>>>(0x450.l) indirect x # 3rd BLOB >>0x480 string >\0 \b, type %-3.8s # Summary: Windows boot status log BOOTSTAT.DAT # From: Joerg Jenderek # Reference: https://www.geoffchappell.com/notes/windows/boot/bsd.htm # Note: mainly refers to older Windows Vista, sometimes # BOOTSTAT.DAT only contains nulls or invalid data # checking for valid version below 5 0 ulelong <5 # skip many ISO images by checking for valid 64 KiB file size >8 ulelong =0x00010000 >>0 use bootstat-dat # display information of BOOTSTAT.DAT 0 name bootstat-dat >0 ulelong x Windows boot log #!:mime application/octet-stream !:mime application/x-ms-dat # BOOTSTAT.DAT in BOOT subdirectory !:ext dat # apparently a version number: 2 for older like Vista, 3, 4 Windows 10 >0 ulelong >2 \b, version %u # apparently the size of the header: often 10h in older Windows, 14h, 18h >4 ulelong !0x10 \b, header size %#x #>4 ulelong !0x10 \b, header size %u # apparently the size of the file: always 0x00010000~64KiB # the file is acceptable to BOOTMGR only if it is exactly 64 KiB >8 ulelong !0x00010000 \b, file size %#x # size of valid data, in bytes: C8h 50h 172h 5D5Ch >0xc ulelong x \b, %#x valid bytes # skip header and jump to first bootstat entry and display information >(0x4.l-1) ubyte x >>&0 use bootstat-entry # jump to first entry again because pointer are bad after "use" >(0x4.l-1) ubyte x # by 1st entry size jump to 2nd entry and display information >>&(&0x18.l-1) ubyte x >>>&0 use bootstat-entry # jump to possible 3rd boot entry and display information # >(0x4.l-1) ubyte x # >>&(&0x18.l-1) ubyte x # >>>&(&0x18.l-1) ubyte x # >>>>&0 use bootstat-entry # display BOOTSTAT.DAT entry 0 name bootstat-entry #>0x00 ubequad x \b, ENTRY %16.16llx # size of entry, in bytes: 40h(init) 78h(launced) 9Ch #>0x18 ulelong x \b; entry size %u >0x18 ulelong x \b; entry size %#x # time stamp, in seconds >0x00 ulelong x \b, %#x seconds # always zero, significance unknown >0x04 ulelong !0 \b, not null %u # GUID of event source; but empty if event source is BOOTMGR >0x08 ubequad !0 \b, GUID %#16.16llx >>0x10 ubequad x \b%16.16llx # severity code: 1~informational 3~errors >0x1C ulelong !1 \b, severity %#x # apparently a version number: 2 >0x20 ulelong !2 \b, version %u # event identifier 1~log file initialised 11h~boot application launched #>0x24 ulelong x \b, event %#x >0x24 ulelong !1 >>0x24 ulelong !0x11 \b, event %#x # entry data; size depends on event identifier #>0x28 ubequad x \b, data %#16.16llx >0x24 ulelong =0x1 \b, Init # always 0, significance unknown >>0x34 uleshort !0 \b, not null %u # always 7, significance unknown >>0x36 uleshort !7 \b, not seven %u # year >>0x28 uleshort x %u # month >>0x2A uleshort x \b-%u # day >>0x2C uleshort x \b-%u # hour >>0x2E uleshort x %u # minute >>0x30 uleshort x \b:%u # second >>0x32 uleshort x \b:%u # boot application launched >0x24 ulelong =0x11 \b, launched # type of start: 0 normally, 1 or 2 maybe in a recovery sequence >>0x38 uleshort !0 \b, type %u # pathname of boot application, as null-terminated Unicode string; typically # \Windows\system32\winload.exe \Windows\system32\winload.efi >>0x3C lestring16 x %s # Summary: Windows Error Report text files # URL: https://en.wikipedia.org/wiki/Windows_Error_Reporting # Reference: https://www.nirsoft.net/utils/app_crash_view.html # Created by: Joerg Jenderek # Note: in directories %ProgramData%\Microsoft\Windows\WER\{ReportArchive,ReportQueue} # %LOCALAPPDATA%\Microsoft\Windows\WER\{ReportArchive,ReportQueue} 0 lestring16 Version= >22 lestring16 EventType Windows Error Report !:mime text/plain # Report.wer !:ext wer # Summary: Windows 3.1 group files # Extension: .grp # Created by: unknown 0 string \120\115\103\103 MS Windows 3.1 group files # Summary: Old format help files # URL: https://en.wikipedia.org/wiki/WinHelp # Reference: https://www.oocities.org/mwinterhoff/helpfile.htm # Update: Joerg Jenderek # Created by: Dirk Jagdmann # # check and then display version and date inside MS Windows HeLP file fragment 0 name help-ver-date # look for Magic of SYSTEMHEADER >0 leshort 0x036C # version Major 1 for right file fragment >>4 leshort 1 Windows # print non empty string above to avoid error message # Warning: Current entry does not yet have a description for adding a MIME type # not officially registered at IANA #!:mime application/winhelp #!:mime application/winhlp !:mime application/x-winhelp # version Minor of help file format is hint for windows version # HC30 Windows 3.0 help file >>>2 leshort 15 3.0 # HC31 Windows 3.1 help file >>>2 leshort 21 3.1 # WMVC/MMVC media view file >>>2 leshort 27 # MVC or HCW 4.00 Windows 95 >>>2 leshort 33 95 # next line should not happen >>>2 default x y.z >>>>2 leshort x %#x # to complete message string like "MS Windows 3.x help file" >>>2 leshort !27 # HLP or few MVB like NOTEPLAY.MVB >>>>2 leshort x help !:ext hlp # URL: http://fileformats.archiveteam.org/wiki/Multimedia_Viewer_Book # Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mvb.trid.xml # Note: called "Multimedia Viewer Book" by TrID and by DROID via PUID fmt/1800 >>>2 leshort =27 Multimedia Viewer Book !:ext mvb # GenDate often older than file creation date >>>6 ldate x \b, %s # flags determine the compression #>>>10 uleshort x \b, flags %#x >>>2 leshort <17 # HelpFileTitle >>>>12 string x \b, title "%s" >>>2 leshort >16 # SYSTEMREC[].RecordType type of data in record; 1~help file title 2~COPYRIGHT 3~TOPICOFFSET Contents 4~Macro 5~*.ICO 6~HPJ-structure #>>>>12 uleshort x \b, RecordType %u # DataSize size of data #>>>>14 uleshort x \b, DataSize %u >>>>12 uleshort 1 >>>>>14 pstring/h >\0 \b, title "%s" # Magic for HeLP files # URL: http://fileformats.archiveteam.org/wiki/HLP_(WinHelp) # Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/hlp.trid.xml # Note: called "Windows HELP File" by TrID, "Windows Help File" by DROID via PUID fmt/474 and # "WinHelp help file" by shared MIME-info database from freedesktop.org 0 lelong 0x00035f3f # ./windows (version 5.25) labeled the entry as "MS Windows 3.x help file" # file header magic 0x293B at DirectoryStart+9 >(4.l+9) uleshort 0x293B MS # URL: http://fileformats.archiveteam.org/wiki/WinHelp_annotation # Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/ann.trid.xml # look for @VERSION bmf.. like IBMAVW.ANN >>0xD4 string =\x62\x6D\x66\x01\x00 Windows help annotation !:mime application/x-winhelp !:ext ann >>0xD4 string !\x62\x6D\x66\x01\x00 # "GID Help index" by TrID by gid.trid.xml # sometimes at little higher offset like in corelap.GID >>>(4.l+0x65) search/26 |Pete Windows help Global Index !:mime application/x-winhelp !:ext gid # HeLP Bookmark or # Multimedia_Viewer_Book or # "Windows HELP File" by TrID by hlp.trid.xml >>>(4.l+0x65) default x # maybe there exist a cleaner way to detect HeLP fragments # brute search for Magic 0x036C with matching Major maximal 13 iterations # https://sembiance.com/fileFormatSamples/document/multimediaViewerBook/viewerht.mvb >>>>16 search/0x1bbc370/s \x6c\x03 >>>>>&0 use help-ver-date >>>>>&4 leshort !1 # viewerht.mvb >>>>>>&-2 search/0x1c4b6f0/s \x6c\x03 >>>>>>>&0 use help-ver-date >>>>>>>&4 leshort !1 # https://sembiance.com/fileFormatSamples/document/multimediaViewerBook/clarkhow.mvb >>>>>>>>&0 search/0x34ab80/s \x6c\x03 >>>>>>>>>&0 use help-ver-date >>>>>>>>>&4 leshort !1 >>>>>>>>>>&0 search/0x473ab0/s \x6c\x03 >>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>&4 leshort !1 >>>>>>>>>>>>&0 search/0x739680/s \x6c\x03 >>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>&4 leshort !1 >>>>>>>>>>>>>>&0 search/0x76c030/s \x6c\x03 >>>>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>>>&4 leshort !1 >>>>>>>>>>>>>>>>&0 search/0x805c80/s \x6c\x03 # GCC.HLP is detected after 7 iterations >>>>>>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>>>>>&4 leshort !1 >>>>>>>>>>>>>>>>>>&0 search/0x805c80/s \x6c\x03 >>>>>>>>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>>>>>>>&4 leshort !1 >>>>>>>>>>>>>>>>>>>>&0 search/0xb63480/s \x6c\x03 >>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>>>>>>>>>&4 leshort !1 >>>>>>>>>>>>>>>>>>>>>>&0 search/0xb7fe80/s \x6c\x03 >>>>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>>>>>>>>>>>&4 leshort !1 >>>>>>>>>>>>>>>>>>>>>>>>&0 search/0xb8ade0/s \x6c\x03 >>>>>>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>>>>>>>>>>>>>&4 leshort !1 >>>>>>>>>>>>>>>>>>>>>>>>>>&0 search/0x371d4/s \x6c\x03 >>>>>>>>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>>>>>>>>>>>>>>>&4 leshort !1 >>>>>>>>>>>>>>>>>>>>>>>>>>>>&0 search/0x371d4/s \x6c\x03 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>&0 use help-ver-date >>>>>>>>>>>>>>>>>>>>>>>>>>>>>&4 leshort !1 # https://sembiance.com/fileFormatSamples/document/multimediaViewerBook/arivideo.mvb >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>8 lelong !0xFFffFFff Windows Multimedia Viewer Book !:mime application/x-winhelp !:ext mvb # repeat search again or following default line does not work >>>>16 search/0x49AF/s \x6c\x03 # remaining files should be HeLP Bookmark WinHlp32.BMK (XP 32-bit) or WinHlp32 (Windows 7 8.1 64-bit) # typically found inside directory %LOCALAPPDATA%\Help >>>>16 default x Windows help Bookmark !:mime application/x-winhelp !:ext /bmk # DirectoryStart offset of FILEHEADER of internal directory #>4 lelong x \b, DirectoryStart %8.8x ## FirstFreeBlock normally for *HLP FFFFFFFFh if no free list or 10h for *ANN #>>8 lelong x \b, FirstFreeBlock %#8.8x ## ReservedSpace normally 042Fh AFh for *.ANN #>>(4.l) lelong x \b, ReservedSpace %#8.8x ## UsedSpace normally 0426h A6h for *.ANN #>>(4.l+4) lelong x \b, UsedSpace %#8.8x ## FileFlags normally 04... #>>(4.l+5) lelong x \b, FileFlags %#8.8x ## file header magic 0x293B #>>(4.l+9) uleshort x \b, file header magic %#4.4x ## file header Flags 0x0402 #>>(4.l+11) uleshort x \b, file header Flags %#4.4x ## file header PageSize 0400h 80h for *.ANN #>>(4.l+13) uleshort x \b, PageSize %#4.4x ## Structure[16] z4 #>>(4.l+15) string >\0 \b, Structure_"%-.16s" ## MustBeZero 0 #>>(4.l+31) uleshort x \b, MustBeZero %#4.4x ## PageSplits #>>(4.l+33) uleshort x \b, PageSplits %#4.4x ## RootPage #>>(4.l+35) uleshort x \b, RootPage %#4.4x ## MustBeNegOne 0xffff #>>(4.l+37) uleshort x \b, MustBeNegOne %#4.4x ## TotalPages 1 #>>(4.l+39) uleshort x \b, TotalPages %#4.4x ## NLevels 0x0001 #>>(4.l+41) uleshort x \b, NLevels %#4.4x ## TotalBtreeEntries #>>(4.l+43) ulelong x \b, TotalBtreeEntries %#8.8x ## pages of the B+ tree #>>(4.l+47) ubequad x \b, PageStart %#16.16llx # GRR: offset is not reachable in few samples like STMMHLP.MVB because probably damaged file # or DROID fmt-474-signature-id-748.hlp # or for example run file command with higher --parameter bytes=30335189 >(4.l+9) uleshort !0x293B MS Windows Multimedia Viewer Book #!:mime application/octet-stream !:ext mvb # GRR: next line is not executed! >>12 lelong x (damaged or use higher '-P bytes' option) # EntireFileSize; biggest 1551334 for CORELDRW.HLP 30335189 for viewerht.mvb; smallest 28672 for open.mvb >12 lelong x \b, %d bytes # start with colon or semicolon for comment line like Back2Life.cnt 0 regex \^(:|;) # look for first keyword Base >0 search/45 :Base >>&0 use cnt-name # only solution to search again from beginning , because relative offsets changes when use is called >0 search/45 :Base >0 default x # look for other keyword Title like in putty.cnt >>0 search/45 :Title >>>&0 use cnt-name # # display mime type and name of Windows help Content source 0 name cnt-name # skip space at beginning >0 string \040 # name without extension and greater character or name with hlp extension >>1 regex/c \^([^\xd>]*|.*\\.hlp) MS Windows help file Content, based "%s" !:mime text/plain !:apple ????TEXT !:ext cnt # URL: https://en.wikipedia.org/wiki/WinHelp # Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/fts.trid.xml # Note: called "Windows Help Full-Text Search index" by TrID # Windows creates a full text search from hlp file, if the user clicks the "Find" tab and enables keyword indexing 0 string tfMR MS Windows help Full Text Search index !:mime application/x-winhelp-fts !:ext fts # path of corresponding MS Windows help like: "C:\CDCREATR\creatr32.hlp" "C:\PROGRAMME\IPHOTO PLUS 4\PROGRAMS\Guide.hlp" >16 string >\0 for "%s" # From: Joerg Jenderek # Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/ftg-winhelp.trid.xml # Note: called "Windows Help Full-Text search Group" by TrID 0 string gfMR MS Windows help Full Text search Group !:mime application/x-winhelp-ftg !:ext ftg # path of corresponding FTS like: "C:\Windows\Help\winhlp32.FTS" >16 string >\0 for "%s" # Summary: Hyper terminal # Created by: unknown # Update: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/HyperACCESS # https://www.hilgraeve.com/hyperterminal/ # Reference: http://mark0.net/download/triddefs_xml.7z/defs/h/ht.trid.xml # Note: called "HyperTerminal data file" by TrID and "HyperTerminal File" on English Windows 0 string HyperTerminal\040 >14 string 1.0\ --\ HyperTerminal\ data\ file MS Windows HyperTerminal profile #!:mime application/octet-stream !:mime application/x-ms-ht !:ext ht # https://ithreats.files.wordpress.com/2009/05/\040 # lnk_the_windows_shortcut_file_format.pdf # Summary: Windows shortcut # Created by: unknown # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Windows_Shortcut # https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-shllink/ # Reference: http://mark0.net/download/triddefs_xml.7z/defs/l/lnk-shortcut.trid.xml # https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-SHLLINK/%5bMS-SHLLINK%5d.pdf # Note: called "Windows Shortcut" by TrID, "Microsoft Windows Shortcut" by DROID via PUID x-fmt/428 and "Windows shortcut file" by ./msdos (v 1.158) # partly verified by command like `lnkinfo AOL.lnk` # 'L' + GUUID # HeaderSize + LinkCLSID 00021401-0000-0000-C000-000000000046 0 string \114\0\0\0\001\024\002\0\0\0\0\0\300\0\0\0\0\0\0\106 MS Windows shortcut !:mime application/x-ms-shortcut !:ext lnk # LinkFlags # HasLinkTargetIDList; if set a LinkTargetIDList structure MUST follow the ShellLinkHeader; If is not set, structure MUST NOT be present >20 lelong&1 1 \b, Item id list present # HasLinkInfo; if set a LinkInfo structure MUST follow the ShellLinkHeader or LinkTargetIDList; If is not set, structure MUST NOT be present >20 lelong&2 2 \b, Points to a file or directory >20 lelong&4 4 \b, Has Description string >20 lelong&8 8 \b, Has Relative path >20 lelong&16 16 \b, Has Working directory >20 lelong&32 32 \b, Has command line arguments >20 lelong&64 64 \b, Icon # IconIndex >>56 lelong x \b number=%d # IsUnicode; If set then StringData section contains Unicode-encoded strings >20 lelong&128 128 \b, Unicoded # ForceNoLinkInfo; LinkInfo structure is ignored >20 lelong&256 256 \b, NoLinkInfo # HasExpString; with an EnvironmentVariableDataBlock >20 lelong&512 512 \b, HasEnvironment # look for BlockSize 314h and EnvironmentVariableDataBlock BlockSignature A0000001h >>76 search/1972 \x14\x03\x00\x00\x01\x00\x00\xa0 # TargetAnsi (260 bytes); NULL-terminated path to environment variable encoded with system default code page #>>>&0 string x '%s' # TargetUnicode (520 bytes): optional NULL-terminated path to same environment variable Unicode encoded # like: "%windir%\system32\calc.exe" >>>&260 lestring16 x "%s" # RunInSeparateProcess; run in a separate virtual machine when launching a 16-bit application; no examples found >20 lelong&1024 1024 \b, RunInSeparateProcess # Unused1; undefined and MUST be ignored #>20 lelong&2048 2048 \b, Unused1 # HasDarwinID; with a DarwinDataBlock >20 lelong&4096 4096 \b, HasDarwinID # look for BlockSize 314h and DarwinDataBlock BlockSignature A0000006h >>76 search/1972 \x14\x03\x00\x00\x06\x00\x00\xa0 # DarwinDataAnsi (260 bytes); NULL-terminated application identifier encoded with system default code page; SHOULD be ignored #>>>&0 string x '%s' # DarwinDataUnicode (520 bytes); NULL-terminated application identifier Unicode encoded >>>&260 lestring16 x "%s" # RunAsUser; target application is run as a different user >20 lelong&8192 8192 \b, RunAsUser # HasExpIcon; with an IconEnvironmentDataBlock >20 lelong&16384 16384 \b, HasExpIcon # look for BlockSize 314h and IconEnvironmentDataBlock BlockSignature A0000007h >>76 search/1972 \x14\x03\x00\x00\x07\x00\x00\xa0 # TargetAnsi (260 bytes); NULL-terminated path to environment icon variable encoded with system default code page #>>>&0 string x '%s' # TargetUnicode (520 bytes); optional NULL-terminated path to same icon environment variable Unicode encoded # like: "%SystemDrive%\Program Files\YaCy\addon\YaCy.ico" >>>&260 lestring16 x "%s" # NoPidlAlias; represented in the shell namespace; no examples found >20 lelong&32768 32768 \b, NoPidlAlias # Unused2; undefined and MUST be ignored #>20 lelong&65536 65536 \b, Unused2 # RunWithShimLayer; with a ShimDataBlock; no examples found >20 lelong&131072 131072 \b, RunWithShimLayer # ForceNoLinkTrack; TrackerDataBlock is ignored; no examples found >20 lelong&262144 262144 \b, ForceNoLinkTrack >20 lelong&262144 0 # look for BlockSize 60h, TrackerDataBlock BlockSignature A0000003h, it length 58h and Version 0 >>76 search/1972 \x60\x00\x00\x00\x03\x00\x00\xa0\x58\x00\x00\x00\0\0\0\0 # MachineID (16 bytes); a NULL-terminated NetBIOS name encoded with system default code page of the machine >>>&0 string x \b, MachineID %0.16s # Droid (32 bytes) # # DroidBirth (32 bytes) # # EnableTargetMetadata; collect target properties and store in PropertyStoreDataBlock >20 lelong&524288 524288 \b, EnableTargetMetadata # look for BlockSize >= Ch, PropertyStoreDataBlock BlockSignature A0000009h #>>76 search/1972 \x00\x00\x09\x00\x00\xa0 # PropertyStore (variable) # # DisableLinkPathTracking; EnvironmentVariableDataBlock is ignored; no examples found >20 lelong&1048576 1048576 \b, DisableLinkPathTracking # DisableKnownFolderTracking; SpecialFolderDataBlock and KnownFolderDataBlock are ignored and not saved >20 lelong&2097152 2097152 \b, DisableKnownFolderTracking >20 lelong&2097152 0 # look for BlockSize 1Ch and KnownFolderDataBlock BlockSignature A000000Bh >>76 search/1972 \x1c\x00\x00\x00\x0B\x00\x00\xa0 # https://learn.microsoft.com/en-us/dotnet/desktop/winforms/controls/known-folder-guids-for-file-dialog-custom-places # KnownFolderID specifies the folder GUID ID # ProgramFiles 905E63B6-C1BF-494E-B29C-65B732D3D21A # ProgramFilesX86 7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E >>>&0 guid x KnownFolderID %s # DisableKnownFolderAlias; unaliased form of the known folder IDList SHOULD be used; no examples found >20 lelong&4194304 4194304 \b, DisableKnownFolderAlias # AllowLinkToLink; link that references another link is enabled; no examples found >20 lelong&8388608 8388608 \b, AllowLinkToLink # UnaliasOnSave; unaliased form of that known folder or the target IDList SHOULD be used; no examples found >20 lelong&16777216 16777216 \b, UnaliasOnSave # PreferEnvironmentPath; path specified in the EnvironmentVariableDataBlock SHOULD be used >20 lelong&33554432 33554432 \b, PreferEnvironmentPath # KeepLocalIDListForUNCTarget; UNC name SHOULD be stored in local path IDList in PropertyStoreDataBlock; no examples found >20 lelong&67108864 67108864 \b, KeepLocalIDListForUNCTarget # FileAttributes >24 lelong&1 1 \b, Read-Only >24 lelong&2 2 \b, Hidden >24 lelong&4 4 \b, System # Reserved1; MUST be zero >24 lelong&8 8 \b, Reserved1 >24 lelong&16 16 \b, Directory >24 lelong&32 32 \b, Archive # Reserved2; MUST be zero >24 lelong&64 64 \b, Reserved2 >24 lelong&128 128 \b, Normal >24 lelong&256 256 \b, Temporary # no examples found >24 lelong&512 512 \b, Sparse # no examples found >24 lelong&1024 1024 \b, Reparse point >24 lelong&2048 2048 \b, Compressed >24 lelong&4096 4096 \b, Offline # FILE_ATTRIBUTE_NOT_CONTENT_INDEXED; contents need to be indexed >24 lelong&8192 8192 \b, NeedIndexed # FILE_ATTRIBUTE_ENCRYPTED; file or directory is encrypted >24 lelong&16384 16384 \b, Encrypted # value zero means there is no time set on the target >28 leqwdate !0 \b, ctime=%s # Access time of target in UTC >36 leqwdate !0 \b, atime=%s # write time of target in UTC >44 leqwdate !0 \b, mtime=%s # FileSize; 32 bit size of target in bytes >52 lelong x \b, length=%u, window= # ShowCommand; 1~SW_SHOWNORMAL 3~SW_SHOWMAXIMIZED HerzlichMEDION.lnk 7~SW_SHOWMINNOACTIVE YaCy.lnk Privoxy.lnk; All other values like 2 MUST be treated as SW_SHOWNORMAL #>60 lelong x ShowCommand=%#x >60 lelong x >>60 lelong 3 \bshowmaximized >>60 lelong 7 \bshowminnoactive >>60 default x \bnormal # Hotkey >64 uleshort >0 \b, hot key # 41h~A 42h~B ... >>64 ubyte x %c # modifier keys: 0x01~HOTKEYF_SHIFT 0x02~HOTKEYF_CONTROL 0x04~HOTKEYF_ALT >>65 ubyte&1 1 \b+SHIFT >>65 ubyte&2 2 \b+CONTROL >>65 ubyte&4 4 \b+ALT # Reserved; MUST be zero #>66 uleshort !0 \b, reserved %#x # Reserved2; MUST be zero #>68 ulelong !0 \b, reserved2 %#x # Reserved3; MUST be zero #>72 ulelong !0 \b, reserved3 %#x # optional LINKTARGET_IDLIST if LinkFlags bit HasLinkTargetIDList is set >20 lelong&1 1 # IDListSize; size of IDList >>76 uleshort x \b, IDListSize %#4.4x # 1st item >>78 use lnk-item # 2nd possible item >>(78.s+78) uleshort >0 >>>(78.s+78) use lnk-item # 3rd possible item >>>&(&-2.s-2) uleshort >0 >>>>&-2 use lnk-item # 4th possible item >>>>&(&-2.s-2) uleshort >0 >>>>>&-2 use lnk-item # Because HasLinkInfo is set, a LinkInfo structure follows >20 lelong&2 2 # if no LINKTARGET_IDLIST (no HasLinkTargetIDList) then direct after header; no example found >>20 lelong&1 =0 >>>76 use lnk-info # if LINKTARGET_IDLIST (HasLinkTargetIDList) then after LINKTARGET_IDLIST by addtional IDListSize bytes >>20 lelong&1 =1 >>>76 uleshort >0 #>>>>(76.s+78) use lnk-info >>>>(76.s+78) ubelong x # move pointer to beginnig of LinkInfo structure >>>>>&-8 ubelong x #>>>>>>&16 ulelong x \b, LocalBasePathOffset=%#8.8x >>>>>>&(&16.l) string x \b, LocalBasePath "%s" # check and then display link item (size,data) 0 name lnk-item # size value 0x0000 means TerminalID; indicates the end of the item IDs list >0 uleshort >0 #>>0 uleshort x \b, ItemIDSize %#4.4x # item Data #>>2 ubequad x \b, Item data=%#16.16llx #>>2 ubyte x \b, Item type=%#x >>2 ubyte =0x1f \b, Root folder # like: "26EE0668-A00A-44D7-9371-BEB064C98683" Control Panel # "20D04FE0-3AEA-1069-A2D8-08002B30309D" My Computer # "871C5380-42A0-1069-A2EA-08002B30309D" Internet Explorer >>>4 guid x "%s" >>2 ubyte =0x2f \b, Volume # like: "C:\" "D:\" >>>3 string x "%s" # Control panel category #>>2 ubyte foo \b, Control panel category # display LinkInfo structure (size,flags,offsets) 0 name lnk-info # LinkInfoSize; size of the LinkInfo structure >0 ulelong x \b, LinkInfoSize %#x # LinkInfoHeaderSize; if 1C no optional fields; >=24 optional fields are specified >4 ulelong x \b, LinkInfoHeaderSize %#x # LinkInfoFlags; #>8 ulelong x \b, LinkInfoFlags=%#x >8 ulelong&1 1 \b, VolumeIDAndLocalBasePath # VolumeIDOffset; location of the VolumeID field (VolumeIDSize DriveType DriveSerialNumber VolumeLabelOffset ... ) inside LinkInfo structure >>12 ulelong x \b, VolumeIDOffset %#x # LocalBasePathOffset; location of LocalBasePath field like "C:\test\a.txt" inside LinkInfo structure >>16 ulelong x \b, LocalBasePathOffset %#x # LocalBasePathOffsetUnicode; location of the LocalBasePathUnicode field inside LinkInfo structure >>4 ulelong >23 >>>28 ulelong x \b, LocalBasePathOffsetUnicode %#x >8 ulelong&2 2 \b, CommonNetworkRelativeLinkAndPathSuffix # CommonNetworkRelativeLinkOffset; location of the CommonNetworkRelativeLink field inside LinkInfo structure >>20 ulelong x \b, CommonNetworkRelativeLinkOffset %#x # CommonPathSuffixOffset; location of CommonPathSuffix field >24 ulelong x \b, CommonPathSuffixOffset %#x # CommonPathSuffixOffsetUnicode; location of CommonPathSuffixUnicode field inside LinkInfo structure >4 ulelong >23 >>32 ulelong x \b, CommonPathSuffixOffsetUnicode %#x # Summary: Outlook Personal Folders # Created by: unknown # Update: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/Personal_Folder_File # https://en.wikipedia.org/wiki/Personal_Storage_Table # Reference: https://interoperability.blob.core.windows.net/files/MS-PST/%5bMS-PST%5d.pdf # http://mark0.net/download/triddefs_xml.7z/defs/p/pab.trid.xml # dwMagic !BDN 0 lelong 0x4E444221 # skip DROID x-fmt-75-signature-id-472.pab x-fmt-248-signature-id-260.pst x-fmt-249-signature-id-261.pst # by check for existance of bPlatformCreate value >14 ubyte x Microsoft Outlook #!:mime application/octet-stream # NOT official registered ! !:mime application/vnd.ms-outlook # dwCRCPartial; 32-bit cyclic redundancy check (CRC) value of followin 471 bytes; zero for 64-bit #>>4 ulelong !0 \b, CRC %#x # wMagicClient; AB (4142h) is used for PAB files; SM (534Dh) is used for PST files; SO (534Fh) is used for OST files #>>8 leshort x \b, wMagicClient=%#x # Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/pab.trid.xml # Note: called "Microsoft Personal Address Book" by TrID and # "Microsoft Outlook Personal Address Book" by DROID via x-fmt/75 >>8 leshort 0x4142 Personal Address Book #!:mime application/x-ms-pab !:ext pab # Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/pst.trid.xml # http://mark0.net/download/triddefs_xml.7z/defs/p/pst-unicode.trid.xml # Note: called "Microsoft OutLook Personal Folder" by TrID and # by DROID via x-fmt/248 for ANSI and via x-fmt/249 for Unicode #>>8 leshort 0x4D53 \b, PST~ # called "Microsoft Outlook email folder" in ./windows version 1.37 and older >>8 leshort 0x4D53 Personal Storage #!:mime application/x-ms-pst !:ext pst # Reference: http://mark0.net/download/triddefs_xml.7z/defs/o/ost.trid.xml # Note: called "Outlook Exchange Offline Storage" by TrID >>8 leshort 0x4F53 Offline Storage #!:mime application/x-ms-ost !:ext ost # wVer; file format version. 14 or 15 if the file is ANSI; > 21 or 23(=17h) if Unicode; 37 for written by Outlook with WIP >>10 uleshort x ( # probably NO intermediate versions exist >>10 leshort <0x10 \b<=2002, ANSI, >>10 leshort >0x14 \b>=2003, Unicode, >>10 uleshort x version %u) # wVerClient; client file format version like: 19 22 #>>12 uleshort x \b, wVerClient=%u # bPlatformCreate; This value MUST be set to 1 but also found 2 >>14 ubyte >1 \b, bPlatformCreate=%u # bPlatformAccess; This value MUST be set to 1 but also found 2 >>15 ubyte >1 \b, bPlatformAccess=%u # dwReserved1; SHOULD ignore and NOT modify this value; SHOULD initialize to zero >>16 ulelong !0 \b, dwReserved1=%#x # dwReserved2; SHOULD ignore and NOT modify this value; SHOULD initialize to zero >>20 ulelong !0 \b, dwReserved2=%#x # ANSI 32-bit variant Outlook 1997-2002 >>10 uleshort <16 # bidNextB; next BlockID (ANSI 4 bytes) #>>>24 ulelong !0 \b, bidNextB=%#x # bidNextP; Next available back BlockID pointer #>>>28 ulelong !0 \b, bidNextP=%#x # dwUnique; value monotonically increased when modifying PST; so CRC is changing >>>32 ulelong !0 \b, dwUnique=%#x # rgnid[128]; A fixed array of 32 NodeIDs, each corresponding to one of the 32 possible NID_TYPEs #>>>36 ubequad x \b, rgnid=%#llx... # dwReserved; Implementations SHOULD ignore this value and SHOULD NOT modify it; Initialized zero >>>164 ulelong !0 \b, dwReserved=%#x # ibFileEof; the size of the PST file, in bytes (ANSI 4 bytes) >>>168 ulelong x \b, %u bytes # ibAMapLast; offset to the last AMap page #>>>172 ulelong x \b, ibAMapLast=%#x # bSentinel; MUST be set to 0x80 >>>460 ubyte !0x80 \b, bSentinel=%#x # bCryptMethod: 0~No encryption 1~encryption with permutation 2~encryption with cyclic 16~encryption with Windows Information Protection (WIP) >>>461 ubyte >0 \b, bCryptMethod=%u # UNICODE 64-bit variant Outlook 2003-2007 >>10 uleshort >20 # bidUnused; Unused 8 bytes padding (Unicode only); sometimes like: 0x0000000100000004 >>>24 ulequad !0x0000000100000004 \b, bidUnused=%#16.16llx # dwUnique; value monotonically increased when modifying PST; so CRC is changing >>>40 ulelong !0 \b, dwUnique=%#x # rgnid[] (128 bytes): A fixed array of 32 NIDs, each corresponding to one of the 32 possible #>>>44 ubequad x \b, rgnid=%#llx... # ibFileEof; the size of the PST file, in bytes (Unicode 8 bytes) >>>184 ulequad x \b, %llu bytes # bSentinel; MUST be set to 0x80 >>>512 ubyte !0x80 \b, bSentinel=%#x # bCryptMethod; Encryption type like: 0 1 2 16 >>>513 ubyte >0 \b, bCryptMethod=%u # dwCRC; 32-bit CRC of the of the previous 516 bytes >>>524 ulelong x \b, CRC32 %#x # Summary: Windows help cache # Created by: unknown 0 string \164\146\115\122\012\000\000\000\001\000\000\000 MS Windows help cache # Summary: IE cache file # Created by: Christophe Monniez 0 string Client\ UrlCache\ MMF Internet Explorer cache file >20 string >\0 version %s # Summary: Registry files # Created by: unknown # Modified by (1): Joerg Jenderek 0 string regf MS Windows registry file, NT/2000 or above 0 string CREG MS Windows 95/98/ME registry file 0 string SHCC3 MS Windows 3.1 registry file # Summary: Windows Registry text # URL: https://en.wikipedia.org/wiki/Windows_Registry#.REG_files # Reference: http://fileformats.archiveteam.org/wiki/Windows_Registry # Submitted by: Abel Cheung # Update: Joerg Jenderek # Windows 3-9X variant 0 string REGEDIT # skip ASCII text like "REGEDITor.txt" but match # L1WMAP.REG with only 1 CRNL or org.gnome.gnumeric.reg with 2 NL >7 search/3 \n Windows Registry text !:mime text/x-ms-regedit !:ext reg # Windows 9X variant >>0 string REGEDIT4 (Win95 or above) # Windows 2K ANSI variant 0 string Windows\ Registry\ Editor\ >&0 string Version\ 5.00\r\n\r\n Windows Registry text (Win2K or above) !:mime text/x-ms-regedit !:ext reg # Windows 2K UTF-16 variant 2 lestring16 Windows\ Registry\ Editor\ >0x32 lestring16 Version\ 5.00\r\n\r\n Windows Registry little-endian text (Win2K or above) # relative offset not working #>&0 lestring16 Version\ 5.00\r\n\r\n Windows Registry little-endian text (Win2K or above) !:mime text/x-ms-regedit !:ext reg # WINE variant # URL: https://en.wikipedia.org/wiki/Wine_(software) # Reference: https://www.winehq.org/pipermail/wine-cvs/2005-October/018763.html # Note: WINE use text based registry (system.reg,user.reg,userdef.reg) # instead binary hiv structure like Windows 0 string WINE\ REGISTRY\ Version\ WINE registry text # version 2 >&0 string x \b, version %s !:mime text/x-wine-extension-reg !:ext reg # Windows *.INF *.INI files updated by Joerg Jenderek at Apr 2013, Feb 2018 # empty ,comment , section # PR/383: remove unicode BOM because it is not portable across regex impls #0 regex/s \\`(\\r\\n|;|[[]) # empty line CRLF 0 ubeshort 0x0D0A >0 use ini-file # comment line starting with semicolon 0 string ; # look for phrase of Windows policy ADMinistrative template (with starting remark) # like: WINDOW_95_CD/TOOLS/RESKIT/netadmin/poledit/conf.adm >1 search/3548 END\040CATEGORY # ADM with remark (by adm-rem.trid.xml) already done by generic ASCII variant # if no Windows policy ADMinistrative template then Windows INItialization >1 default x >>0 use ini-file # section line starting with left bracket 0 string [ >0 use ini-file # check and then display Windows INItialization configuration 0 name ini-file # look for left bracket in section line >0 search/8192 [ # https://en.wikipedia.org/wiki/Autorun.inf # https://msdn.microsoft.com/en-us/library/windows/desktop/cc144200.aspx # space after right bracket # or AutoRun.Amd64 for 64 bit systems # or only NL separator >>&0 regex/c \^autorun # but sometimes total commander directory tree file "treeinfo.wc" with lines like # [AUTORUN] # [boot] >>>&0 string =]\r\n[ Total commander directory treeinfo.wc !:mime text/plain !:ext wc # From: Pal Tamas # Autorun File >>>&0 string !]\r\n[ Microsoft Windows Autorun file !:mime application/x-setupscript !:ext inf # https://msdn.microsoft.com/en-us/library/windows/hardware/ff549520(v=vs.85).aspx # version strings ASCII coded case-independent for Windows setup information script file >>&0 regex/c \^(version|strings)] Windows setup INFormation !:mime application/x-setupscript #!:mime application/x-wine-extension-inf !:ext inf # NETCRC.INF OEMCPL.INF >>&0 regex/c \^(WinsockCRCList|OEMCPL)] Windows setup INFormation !:mime application/x-setupscript !:ext inf # http://www.winfaq.de/faq_html/Content/tip2500/onlinefaq.php?h=tip2653.htm # https://msdn.microsoft.com/en-us/library/windows/desktop/cc144102.aspx # .ShellClassInfo DeleteOnCopy LocalizedFileNames ASCII coded case-independent >>&0 regex/1024c \^(\\.ShellClassInfo|DeleteOnCopy|LocalizedFileNames)] Windows desktop.ini !:mime application/x-wine-extension-ini #!:mime text/plain # https://support.microsoft.com/kb/84709/ >>&0 regex/c \^don't\ load] Windows CONTROL.INI !:mime application/x-wine-extension-ini !:ext ini >>&0 regex/c \^(ndishlp\\$|protman\\$|NETBEUI\\$)] Windows PROTOCOL.INI !:mime application/x-wine-extension-ini !:ext ini # https://technet.microsoft.com/en-us/library/cc722567.aspx # http://www.winfaq.de/faq_html/Content/tip0000/onlinefaq.php?h=tip0137.htm >>&0 regex/c \^(windows|Compatibility|embedding)] Windows WIN.INI !:mime application/x-wine-extension-ini !:ext ini # https://en.wikipedia.org/wiki/SYSTEM.INI >>&0 regex/c \^(boot|386enh|drivers)] Windows SYSTEM.INI !:mime application/x-wine-extension-ini !:ext ini # http://www.mdgx.com/newtip6.htm >>&0 regex/c \^SafeList] Windows IOS.INI !:mime application/x-wine-extension-ini !:ext ini # https://en.wikipedia.org/wiki/NTLDR Windows Boot Loader information >>&0 regex/c \^boot\x20loader] Windows boot.ini !:mime application/x-wine-extension-ini !:ext ini # https://en.wikipedia.org/wiki/CONFIG.SYS >>&0 regex/c \^menu] MS-DOS CONFIG.SYS # @CONFIG.UI configuration file of previous DOS version saved by Caldera OPENDOS INSTALL.EXE # CONFIG.PSS saved version of file CONFIG.SYS created by %WINDIR%\SYSTEM\MSCONFIG.EXE # CONFIG.TSH renamed file CONFIG.SYS.BAT by %WINDIR%\SYSTEM\MSCONFIG.EXE # dos and w40 used in dual booting scene !:ext sys/dos/w40 # https://support.microsoft.com/kb/118579/ >>&0 regex/c \^Paths]\r\n MS-DOS MSDOS.SYS !:ext sys/dos # http://chmspec.nongnu.org/latest/INI.html#HHP >>&0 regex/c \^options]\r\n Microsoft HTML Help Project !:mime text/plain !:ext hhp # From: Joerg Jenderek # URL: https://documentation.basis.com/BASISHelp/WebHelp/b3odbc/ODBC_Driver/obdcdriv_character_translation.htm # Reference: https://www.garykessler.net/library/file_sigs.html # http://mark0.net/download/triddefs_xml.7z/defs/c/cpx.trid.xml # Note: stored in directory %WINDIR%\SysWOW64 or %WINDIR%\system # second word often Latin but sometimes Cyrillic like in 12510866.CPX >>&0 regex/c \^Windows\ (Latin|Cyrillic) Windows codepage translator #!:mime text/plain !:mime text/x-ms-cpx # like: 12510866.CPX !:ext cpx # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/File_Explorer # Reference: http://mark0.net/download/triddefs_xml.7z/defs/s/scf-exp.trid.xml,scf-exp-old.trid.xml # Note: called "Windows Explorer Command Shell File" by TrID and "File Explorer Command" by Windows via SHCmdFile >>&0 regex/c \^Shell]\r\n Windows Explorer Shell Command File #!:mime text/plain !:mime text/x-ms-scf # like: channels.scf desktop.scf explorer.scf "Desktop anzeigen.scf" !:ext scf # look for icon file directive maybe pointing to malicious file >>>1 search/128 IconFile= \b, icon >>>>&0 string x "%s" # From: Joerg Jenderek # URL: http://en.wikipedia.org/wiki/VIA_Technologies # Reference: http://mark0.net/download/triddefs_xml.7z/defs/s/scf-via.trid.xml # Note: called "VIA setup configuration file" by TrID >>&0 regex/c \^SCF]\r\n VIA setup configuration #!:mime text/plain !:mime text/x-via-scf # like: SETUP.SCF !:ext scf # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/InstallShield # Reference: http://mark0.net/download/triddefs_xml.7z/defs/l/lid-is.trid.xml # Note: contain also 3 keywords like: count Default key0 >>&0 regex/c \^Languages] InstallShield Language Identifier #!:mime text/plain !:mime text/x-installshield-lid # like: SETUP.LID !:ext lid # From: Joerg Jenderek # URL: https://www.file-extensions.org/tag-file-extension # Reference: http://mark0.net/download/triddefs_xml.7z/defs/t/taginfo.trid.xml # Note: contain also keywords like: Application Category Company Misc Version >>&0 regex/c \^TagInfo] TagInfo #!:mime text/plain #!:mime text/prs.lines.tag !:mime text/x-ms-tag # like: DATA.TAG !:ext tag # URL: https://en.wikipedia.org/wiki/Flatpak # Reference: http://mark0.net/download/triddefs_xml.7z/defs/f/flatpakref.trid.xml # Note: called "Flatpack Reference" by TrID >>&0 string Flatpak\ Ref] Flatpak repository reference #!:mime text/plain # https://reposcope.com/mimetype/application/vnd.flatpak.ref !:mime application/vnd.flatpak.ref !:ext flatpakref # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/CloneCD # Reference: https://en.wikipedia.org/wiki/CloneCD_Control_File # http://mark0.net/download/triddefs_xml.7z/defs/c/cdimage-clonecd-cue.trid.xml # Note: called "CloneCD CDImage (description)" by TrID and "CloneCD Control File" by DROID via PUID fmt/1760 >>&0 string CloneCD] CloneCD CD-image Description #!:mime text/plain !:mime text/x-ccd !:ext ccd # unknown keyword after opening bracket >>&0 default x #>>>&0 string/c x UNKNOWN [%s # look for left bracket of second section >>>&0 search/8192 [ # version Strings FileIdentification >>>>&0 string/c version Windows setup INFormation !:mime application/x-setupscript !:ext inf # From: Joerg Jenderek # URL: https://cdrtfe.sourceforge.io/ # Reference: http://mark0.net/download/triddefs_xml.7z/defs/c/cfp-cdrtfe.trid.xml >>>>&0 string FileExplorer] cdrtfe Project !:mime text/x-cfp !:ext cfp # https://en.wikipedia.org/wiki/Initialization_file Windows Initialization File or other >>>>&0 default x >>>>>&0 ubyte x # characters, digits, underscore and white space followed by right bracket # terminated by CR implies section line to skip BOOTLOG.TXT DETLOG.TXT >>>>>>&-1 regex/T \^([A-Za-z0-9_\(\)\ ]+)\]\r Generic INItialization configuration [%-.40s # NETDEF.INF multiarc.ini #!:mime application/x-setupscript !:mime application/x-wine-extension-ini #!:mime text/plain !:ext ini/inf # samples with only 1 and unknown section name # XXX: matches a file containing '[1] 2' #>>>&0 default x Generic INItialization configuration #>>>>0 string x \b, 1st line "%s" # UTF-16 BOM 0 ubeshort =0xFFFE # look for phrase of Windows policy ADMinistrative template (UTF-16 by adm-uni.trid.xml) # like: wuau.adm >2 search/0x384A E\0N\0D\0\040\0C\0A\0T\0E\0G\0O\0R\0Y\0 >>0 use windows-adm # if no Windows policy ADMinistrative template then Windows INFormation >2 default x # UTF-16 BOM followed by CR~0D00 , comment~semicolon~3B00 , section~bracket~5B00 >>0 ubelong&0xFFff89FF =0xFFFE0900 # look for left bracket in section line >>>2 search/8192 [ # keyword without 1st letter which is maybe up-/down-case >>>>&3 lestring16 ersion] Windows setup INFormation !:mime application/x-setupscript # like: hdaudio.inf iscsi.inf spaceport.inf tpm.inf usbhub3.inf UVncVirtualDisplay.inf !:ext inf >>>>&3 lestring16 trings] Windows setup INFormation !:mime application/x-setupscript # like: arduino_gemma.inf iis.inf MSM8960.inf !:ext inf >>>>&3 lestring16 ourceDisksNames] Windows setup INFormation !:mime application/x-setupscript # like: atiixpag.inf mdmnokia.inf netefe32.inf rdpbus.inf !:ext inf # netnwcli.inf start with ;---[ NetNWCli.INX ] >>>>&3 default x # look for NL followed by left bracket >>>>>&0 search/8192 \x0A\x00\x5b # like: defltwk.inf netvwifibus.inf WSDPrint.inf >>>>>>&3 lestring16 ersion] Windows setup INFormation !:mime application/x-setupscript !:ext inf # Summary: Windows Policy ADMinistrative template # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Administrative_Template # Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/adm.trid.xml # Note: typically stored in directory like: %WINDIR%\system32\GroupPolicy\ADM # worst case ASCII variant starting with remark line like: inetset.adm 0 search/0x4E CLASS\040 >&0 string MACHINE >>0 use windows-adm >&0 string USER >>0 use windows-adm # display information about Windows policy ADMinistrative template 0 name windows-adm Windows Policy Administrative Template !:mime text/x-ms-adm !:ext adm # UTF-16 BOM implies UTF-16 encoded ADM (by adm-uni.trid.xml) >0 ubeshort =0xFFFE >>2 lestring16 x \b, 1st line "%s" # look for UTF-16 encoded CarriageReturn LineFeed >>>2 search/0x3A \r\0\n\0 >>>>&0 lestring16 x \b, 2nd line "%s" # no UTF-16 BOM implies "ASCII" encoded ADM (by adm.trid.xml) >0 ubeshort !0xFFFE >>0 string x \b, 1st line "%s" #>>>&0 ubequad x \b, 2ND %16.16llx # 2nd line empty >>>&2 beshort =0x0D0A >>>>&0 beshort !0x0D0A \b, 3th line >>>>>&-2 string x "%s" # 2nd line with content >>>&2 beshort !0x0D0A \b, 2nd line >>>>&-2 string x "%s" # Windows Precompiled INF files *.PNF added by Joerg Jenderek at Mar 2013 of _PNF_HEADER inf.h # http://read.pudn.com/downloads3/sourcecode/windows/248345/win2k/private/windows/setup/setupapi/inf.h__.htm # URL: http://fileformats.archiveteam.org/wiki/INF_(Windows) # Reference: http://en.verysource.com/code/10350344_1/inf.h.html # Note: stored in %Windir%\Inf %Windir%\System32\DriverStore\FileRepository # check for valid major and minor versions: 101h - 303h 0 leshort&0xFcFc =0x0000 # GRR: line above (strength 50) is too general as it catches also "PDP-11 UNIX/RT ldp" ./pdp >0 leshort&0x0303 !0x0000 # test for valid InfStyles: 1 2 >>2 uleshort >0 >>>2 uleshort <3 # look for colon in WinDirPath after PNF header #>>>>0x59 search/18 : # skip few Adobe Photoshop Color swatch ("Mac OS.aco" TRUMATCH-Farben.aco Windows.aco) and some # Targa image (money-256.tga XING_B_UCM8.tga x-fmt-367-signature-id-604.tga) with "invalid low section name" \0 >>>>(20.l) ubelong >0x40004000 >>>>>0 use PreCompiledInf 0 name PreCompiledInf >0 uleshort x Windows Precompiled iNF !:mime application/x-pnf !:ext pnf # major version 1 for older Windows like XP and 3 since about Windows Vista # 101h~95-XP; 301h~Windows Vista-7 ; 302h~Windows 10 14393; 303h~Windows 10 18362-Windows11 >1 ubyte x \b, version %u >0 ubyte x \b.%u >0 uleshort =0x0101 (Windows >>4 ulelong&0x00000001 !0x00000001 95-98) >>4 ulelong&0x00000001 =0x00000001 XP) >0 uleshort =0x0301 (Windows Vista-8.1) >0 uleshort =0x0302 (Windows 10 older) >0 uleshort =0x0303 (Windows 10-11) # 1 ,2 (windows 98 SE) >2 uleshort !2 \b, InfStyle %u # PNF_FLAG_IS_UNICODE 0x00000001 # PNF_FLAG_HAS_STRINGS 0x00000002 # PNF_FLAG_SRCPATH_IS_URL 0x00000004 # PNF_FLAG_HAS_VOLATILE_DIRIDS 0x00000008 # PNF_FLAG_INF_VERIFIED 0x00000010 # PNF_FLAG_INF_DIGITALLY_SIGNED 0x00000020 # UNKNOWN8 0x00000080 # UNKNOWN 0x00000100 # UNKNOWN1 0x01000000 # UNKNOWN2 0x02000000 >4 ulelong&0x03000180 >0 \b, flags >>4 ulelong x %#x >4 ulelong&0x00000001 0x00000001 \b, unicoded >4 ulelong&0x00000002 0x00000002 \b, has strings >4 ulelong&0x00000004 0x00000004 \b, src URL >4 ulelong&0x00000008 0x00000008 \b, volatile dir ids >4 ulelong&0x00000010 0x00000010 \b, verified >4 ulelong&0x00000020 0x00000020 \b, digitally signed # >4 ulelong&0x00000080 0x00000080 \b, UNKNOWN8 # >4 ulelong&0x00000100 0x00000100 \b, UNKNOWN # >4 ulelong&0x01000000 0x01000000 \b, UNKNOWN1 # >4 ulelong&0x02000000 0x02000000 \b, UNKNOWN2 #>8 ulelong x \b, InfSubstValueListOffset %#x # many 0, 1 lmouusb.PNF, 2 linkfx10.PNF , f webfdr16.PNF # , 6 bth.PNF, 9 usbport.PNF, d netnwifi.PNF, 10h nettcpip.PNF #>12 uleshort x \b, InfSubstValueCount %#x # only < 9 found: 8 hcw85b64.PNF #>14 uleshort x \b, InfVersionDatumCount %#x # only found values lower 0x0000ffff ?? #>16 ulelong x \b, InfVersionDataSize %#x # only found positive values lower 0x00ffFFff for InfVersionDataOffset >20 ulelong x \b, at %#x >4 ulelong&0x00000001 =0x00000001 # case independent: CatalogFile Class DriverVer layoutfile LayoutFile SetupClass signature Signature >>(20.l) lestring16 x "%s" >4 ulelong&0x00000001 !0x00000001 >>(20.l) string x "%s" # FILETIME is number of 100-nanosecond intervals since 1 January 1601 #>24 ulequad x \b, InfVersionLastWriteTime %16.16llx >24 qwdate x \b, InfVersionLastWriteTime %s # for Windows 98, XP >0 uleshort <0x0102 # only found values lower 0x00ffFFff # often 70 but also 78h for corelist.PNF # >>32 ulelong x \b, StringTableBlockOffset %#x # >>36 ulelong x \b, StringTableBlockSize %#x # >>40 ulelong x \b, InfSectionCount %#x # >>44 ulelong x \b, InfSectionBlockOffset %#x # >>48 ulelong x \b, InfSectionBlockSize %#x # >>52 ulelong x \b, InfLineBlockOffset %#x # >>56 ulelong x \b, InfLineBlockSize %#x # >>60 ulelong x \b, InfValueBlockOffset %#x # >>64 ulelong x \b, InfValueBlockSize %#x # WinDirPathOffset # like 58h, which means direct after PNF header #>>68 ulelong x \b, at %#x >>68 ulelong x >>>4 ulelong&0x00000001 =0x00000001 #>>>>(68.l) ubequad =0x43003a005c005700 # normally unicoded C:\Windows #>>>>>(68.l) lestring16 x \b, WinDirPath "%s" >>>>(68.l) ubequad !0x43003a005c005700 >>>>>(68.l) lestring16 x \b, WinDirPath "%s" >>>4 ulelong&0x00000001 !0x00000001 # normally ASCII C:\WINDOWS #>>>>(68.l) string =C:\\WINDOWS \b, WinDirPath "%s" >>>>(68.l) string !C:\\WINDOWS >>>>>(68.l) string x \b, WinDirPath "%s" # found OsLoaderPathOffset values often 0 , once 70h corelist.PNF, once 68h ASCII machine.PNF >>>72 ulelong >0 \b, >>>>4 ulelong&0x00000001 =0x00000001 >>>>>(72.l) lestring16 x OsLoaderPath "%s" >>>>4 ulelong&0x00000001 !0x00000001 # seldom C:\ instead empty >>>>>(72.l) string x OsLoaderPath "%s" # 1fdh #>>>76 uleshort x \b, StringTableHashBucketCount %#x # https://docs.microsoft.com/en-us/openspecs/office_standards/ms-oe376/6c085406-a698-4e12-9d4d-c3b0ee3dbc4a # only 407h found >>>78 uleshort !0x409 \b, LanguageID %x #>>>78 uleshort =0x409 \b, LanguageID %x # InfSourcePathOffset often 0 >>>80 ulelong >0 \b, at %#x >>>>4 ulelong&0x00000001 =0x00000001 >>>>>(80.l) lestring16 x SourcePath "%s" >>>>4 ulelong&0x00000001 !0x00000001 >>>>>(80.l) string >\0 SourcePath "%s" # OriginalInfNameOffset often 0 >>>84 ulelong >0 \b, at %#x >>>>4 ulelong&0x00000001 =0x00000001 >>>>>(84.l) lestring16 x InfName "%s" >>>>4 ulelong&0x00000001 !0x00000001 >>>>>(84.l) string >\0 InfName "%s" # for newer Windows like Vista, 7 , 8.1 , 10 >0 uleshort >0x0101 >>80 ulelong x \b, at %#x WinDirPath >>>4 ulelong&0x00000001 0x00000001 # normally unicoded C:\Windows #>>>>(80.l) ubequad =0x43003a005c005700 #>>>>>(80.l) lestring16 x "%s" >>>>(80.l) ubequad !0x43003a005c005700 >>>>>(80.l) lestring16 x "%s" # language id: 0 407h~german 409h~English_US >>90 uleshort !0x409 \b, LanguageID %x #>>90 uleshort =0x409 \b, LanguageID %x >>92 ulelong >0 \b, at %#x >>>4 ulelong&0x00000001 0x00000001 # language string like: de-DE en-US >>>>(92.l) lestring16 x language %s # Summary: backup file created with utility like NTBACKUP.EXE shipped with Windows NT/2K/XP/2003 # Extension: .bkf # Created by: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/NTBackup # Reference: http://laytongraphics.com/mtf/MTF_100a.PDF # Descriptor BloCK name of Microsoft Tape Format 0 string TAPE # Format Logical Address is zero >20 ulequad 0 # Reserved for MBC is zero >>28 uleshort 0 # Control Block ID is zero >>>36 ulelong 0 # BIT4-BIT15, BIT18-BIT31 of block attributes are unused >>>>4 ulelong&0xFFfcFFe0 0 Windows NTbackup archive #!:mime application/x-ntbackup !:ext bkf # OS ID >>>>>10 ubyte 1 \b NetWare >>>>>10 ubyte 13 \b NetWare SMS >>>>>10 ubyte 14 \b NT >>>>>10 ubyte 24 \b 3 >>>>>10 ubyte 25 \b OS/2 >>>>>10 ubyte 26 \b 95 >>>>>10 ubyte 27 \b Macintosh >>>>>10 ubyte 28 \b UNIX # OS Version (2) #>>>>>11 ubyte x OS V=%x # MTF_CONTINUATION Media Sequence Number > 1 #>>>>>4 ulelong&0x00000001 !0 \b, continued # MTF_COMPRESSION >>>>>4 ulelong&0x00000004 !0 \b, compressed # MTF_EOS_AT_EOM End Of Medium was hit during end of set processing >>>>>4 ulelong&0x00000008 !0 \b, End Of Medium hit >>>>>4 ulelong&0x00020000 0 # MTF_SET_MAP_EXISTS A Media Based Catalog Set Map may exist on tape >>>>>>4 ulelong&0x00010000 !0 \b, with catalog # MTF_FDD_ALLOWED However File/Directory Detail can only exist if a Set Map is also present >>>>>4 ulelong&0x00020000 !0 \b, with file catalog # Offset To First Event 238h,240h,28Ch #>>>>>8 uleshort x \b, event offset %4.4x # Displayable Size (20e0230h 20e024ch 20e0224h) #>>>>>8 ulequad x dis. size %16.16llx # Media Family ID (455288C4h 4570BD1Ah 45708F2Fh 4570BBF5h) #>>>>>52 ulelong x family ID %8.8x # TAPE Attributes (3) #>>>>>56 ulelong x TAPE %8.8x # Media Sequence Number >>>>>60 uleshort >1 \b, sequence %u # Password Encryption Algorithm (3) >>>>>62 uleshort >0 \b, %#x encrypted # Soft Filemark Block Size * 512 (2) #>>>>>64 uleshort =2 \b, soft size %u*512 >>>>>64 uleshort !2 \b, soft size %u*512 # Media Based Catalog Type (1,2) #>>>>>66 uleshort x \b, catalog type %4.4x # size of Media Name (66,68,6Eh) >>>>>68 uleshort >0 # offset of Media Name (5Eh) >>>>>>70 uleshort >0 # 0~, 1~ANSI, 2~UNICODE >>>>>>>48 ubyte 1 # size terminated ansi coded string normally followed by "MTF Media Label" >>>>>>>>(70.s) string >\0 \b, name: %s >>>>>>>48 ubyte 2 # Not null, but size terminated unicoded string >>>>>>>>(70.s) lestring16 x \b, name: %s # size of Media Label (104h) #>>>>>72 uleshort >0 # offset of Media Label (C4h,C6h,CCh) >>>>>74 uleshort >0 >>>>>>48 ubyte 1 #Tag|Version|Vendor|Vendor ID|Creation Time Stamp|Cartridge Label|Side|Media ID|Media Domain ID|Vendor Specific fields >>>>>>>(74.s) string >\0 \b, label: %s >>>>>>48 ubyte 2 >>>>>>>(74.s) lestring16 x \b, label: %s # size of password name (0,1Ch) #>>>>>76 uleshort >0 \b, password size %4.4x # Software Vendor ID (CBEh) >>>>>86 uleshort x \b, software (%#x) # size of Software Name (6Eh) >>>>>80 uleshort >0 # offset of Software Name (1C8h,1CAh,1D0h) >>>>>>82 uleshort >0 # 1~ANSI, 2~UNICODE >>>>>>>48 ubyte 1 >>>>>>>>(82.s) string >\0 \b: %s >>>>>>>48 ubyte 2 # size terminated unicoded coded string normally followed by "SPAD" >>>>>>>>(82.s) lestring16 x \b: %s # Format Logical Block Size (512,1024) #>>>>>84 uleshort =1024 \b, block size %u >>>>>84 uleshort !1024 \b, block size %u # Media Date of MTF_DATE_TIME type with 5 bytes #>>>>>>88 ubequad x DATE %16.16llx # MTF Major Version (1) #>>>>>>93 ubyte x \b, MFT version %x # # URL: https://en.wikipedia.org/wiki/PaintShop_Pro # Reference: https://www.cryer.co.uk/file-types/p/pal.htm # Created by: Joerg Jenderek # Note: there exist other color palette formats also with .pal extension 0 string JASC-PAL\r\n PaintShop Pro color palette #!:mime text/plain # PspPalette extension is used by newer (probably 8) PaintShopPro versions !:ext pal/PspPalette # 2nd line contains palette file version. For example "0100" >10 string !0100 \b, version %.4s # third line contains the number of colours: 16 256 ... >16 string x \b, %.3s colors # URL: https://en.wikipedia.org/wiki/Innosetup # Reference: https://github.com/jrsoftware/issrc/blob/master/Projects/Undo.pas # Created by: Joerg Jenderek # Note: created by like "InnoSetup self-extracting archive" inside ./msdos # TrID labeles the entry as "Inno Setup Uninstall Log" # TUninstallLogID 0 string Inno\ Setup\ Uninstall\ Log\ (b) InnoSetup Log !:mime application/x-innosetup # unins000.dat, unins001.dat, ... !:ext dat # " 64-bit" variant >0x1c string >\0 \b%.7s # AppName[0x80] like "Minimal SYStem", ClamWin Free Antivirus , ... >0xc0 string x %s # AppId[0x80] is similar to AppName or # GUID like {4BB0DCDC-BC24-49EC-8937-72956C33A470} start with left brace >0x40 ubyte 0x7b >>0x40 string x %-.38s # do not know how this log version correlates to program version >0x140 ulelong x \b, version %#x # NumRecs #>0x144 ulelong x \b, %#4.4x records # EndOffset means files size >0x148 ulelong x \b, %u bytes # Flags 5 25h 35h #>0x14c ulelong x \b, flags %8.8x # Reserved: array[0..26] of Longint # the non Unicode HighestSupportedVersion may never become greater than or equal to 1000 >0x140 ulelong <1000 # hostname >>0x1d6 pstring x \b, %s # user name >>>&0 pstring x \b\%s # directory like C:\Program Files (x86)\GnuWin32 >>>>&0 pstring x \b, "%s" # version 1000 or higher implies unicode >0x140 ulelong >999 # hostname >>0x1db lestring16 x \b, %-.9s # utf string variant with prepending fe??ffFFff >>0x1db search/43 \xFF\xFF\xFF # user name >>>&0 lestring16 x \b\%-.9s >>>&0 search/43 \xFF\xFF\xFF # directory like C:\Program Files\GIMP 2 >>>>&0 lestring16 x \b, %-.42s # URL: https://jrsoftware.org/ishelp/index.php?topic=setup_signeduninstaller # Reference:https://github.com/jrsoftware/issrc/blob/main/Projects/Struct.pas # From: Joerg Jenderek 0 string Inno\ Setup\ Messages\ ( # null padded til 0x40 boundary >0x38 quad 0 InnoSetup messages !:mime application/x-innosetup-msg # unins000.msg, unins001.msg, ... !:ext msg # version like 5.1.1 5.1.11 5.5.0 5.5.3 6.0.0 >>0x15 string x \b, version %.5s # look for 6th char of version string or terminating right parentheses >>>0x1a ubyte !0x29 \b%c # NumMessages >>0x40 ulelong x \b, %u messages # TotalSize: Cardinal; #>>0x44 ulelong x \b, TotalSize %u # NotTotalSize: Cardinal; #>>0x48 ulelong x \b, NotTotalSize %u # CRCMessages: Longint; #>>0x4C ulelong x \b, CRC %#x >>0x40 ulelong x # (u) after version means unicoded messages >>>0x1c search/2 (u) (UTF-16), >>>>0x50 lestring16 x %s # ASCII coded message >>>0x1c default x (ASCII), >>>>0x50 string x %s # Windows Imaging (WIM) Image # Update: Joerg Jenderek at Mar 2019, 2021 # URL: https://en.wikipedia.org/wiki/Windows_Imaging_Format # http://fileformats.archiveteam.org/wiki/Windows_Imaging_Format # Reference: https://download.microsoft.com/download/f/e/f/ # fefdc36e-392d-4678-9e4e-771ffa2692ab/Windows%20Imaging%20File%20Format.rtf # Note: verified by like `7z t boot.wim` `wiminfo install.esd --header` 0 string MSWIM\000\000\000 >0 use wim-archive # https://wimlib.net/man1/wimoptimize.html 0 string WLPWM\000\000\000 >0 use wim-archive 0 name wim-archive # _WIMHEADER_V1_PACKED ImageTag[8] >0 string x Windows imaging !:mime application/x-ms-wim # TO avoid in file version 5.36 error like # Magdir/windows, 760: Warning: Current entry does not yet have a description # file: could not find any valid magic files! (No error) # split WIM >16 ulelong &0x00000008 (SWM !:ext swm # usPartNumber; 1, unless the file was split into multiple parts >>40 uleshort x \b %u # usTotalParts; The total number of WIM file parts in a spanned set >>42 uleshort x \b of %u) image # non split WIM >16 ulelong ^0x00000008 # https://wimlib.net/man1/wimmount.html # solid WIMs; version 3584; usually contain LZMS-compressed and the .esd extension >>12 ulelong 3584 (ESD) image !:ext esd >>12 ulelong !3584 ( # look for archive member RunTime.xml like in Microsoft.Windows.Cosa.Desktop.Client.ppkg >>>156 search/68233/s RunTime.xml \bWindows provisioning package) !:ext ppkg # if is is not a Windows provisioning package, then it is a WIM >>>156 default x \bWIM) image # second disk image part created by Microsoft's RecoveryDrive.exe has name Reconstruct.WIM2 !:ext wim/wim2 >0 string/b WLPWM\000\000\000 \b, wimlib pipable format # cbSize size of the WIM header in bytes like 208 #>8 ulelong x \b, headersize %u # dwVersion version of the WIM file 00010d00h~1.13 00000e00h~0.14 >14 uleshort x v%u >13 ubyte x \b.%u # dwImageCount; The number of images contained in the WIM file >44 ulelong >1 \b, %u images # dwBootIndex # 1-based index of the bootable image of the WIM, or 0 if no image is bootable >0x78 ulelong >0 \b, bootable no. %u # dwFlags #>16 ulelong x \b, flags %#8.8x #define FLAG_HEADER_COMPRESSION 0x00000002 #define FLAG_HEADER_READONLY 0x00000004 #define FLAG_HEADER_SPANNED 0x00000008 #define FLAG_HEADER_RESOURCE_ONLY 0x00000010 #define FLAG_HEADER_METADATA_ONLY 0x00000020 #define FLAG_HEADER_WRITE_IN_PROGRESS 0x00000040 #define FLAG_HEADER_RP_FIX 0x00000080 reparse point fixup #define FLAG_HEADER_COMPRESS_RESERVED 0x00010000 #define FLAG_HEADER_COMPRESS_XPRESS 0x00020000 #define FLAG_HEADER_COMPRESS_LZX 0x00040000 #define FLAG_HEADER_COMPRESS_LZMS 0x00080000 #define FLAG_HEADER_COMPRESS_XPRESS2 0x00100000 wimlib-1.13.0\include\wimlib\header.h # XPRESS, with small chunk size >16 ulelong &0x00100000 \b, XPRESS2 >16 ulelong &0x00080000 \b, LZMS >16 ulelong &0x00040000 \b, LZX >16 ulelong &0x00020000 \b, XPRESS >16 ulelong &0x00000002 compressed >16 ulelong &0x00000004 \b, read only >16 ulelong &0x00000010 \b, resource only >16 ulelong &0x00000020 \b, metadata only >16 ulelong &0x00000080 \b, reparse point fixup #>16 ulelong &0x00010000 \b, RESERVED # dwCompressionSize; Uncompressed chunk size for resources or 0 if uncompressed #>20 ulelong >0 \b, chunk size %u bytes # gWIMGuid #>24 ubequad x \b, GUID %#16.16llx #>>32 ubequad x \b%16.16llx # rhOffsetTable; the location of the resource lookup table # wim_reshdr_disk[24]= u8 size_in_wim[7] + u8 flags + le64 offset_in_wim + le64 uncompressed_size #>48 ubequad x \b, rhOffsetTable %#16.16llx # rhXmlData; the location of the XML data #>0x50 ulelong x \b, at %#8.8x # NOT WORKING \xff\xfe<\0W\0I\0M\0 #>(0x50.l) ubequad x \b, xml=%16.16llx # rhBootMetadata; the location of the metadata resource #>0x60 ubequad x \b, rhBootMetadata %#16.16llx # rhIntegrity; the location of integrity table used to verify files #>0x7c ubequad x \b, rhIntegrity %#16.16llx # Unused[60] #>148 ubequad !0 \b,unused %#16.16llx # # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Windows_Easy_Transfer # Reference: http://mark0.net/download/triddefs_xml.7z/defs/m/mig.trid.xml # Note: called "Windows Easy Transfer migration data" by TrID, # "Migration Store" or "EasyTransfer file" by Microsoft 0 string 1giM Windows Easy Transfer migration data #!:mime application/octet-stream !:mime application/x-ms-mig !:ext mig >0x18 string =MRTS without password # data offset with 1 space at end >>0x1c ulelong+0x38 x \b, at %#x # look for zlib compressed data by ./compress >>(0x1c.l+0x38) ubyte x >>>&-1 indirect x # in password protected examples MRTS comes some bytes further >0x18 string !MRTS with password # look for first MRTS tag >0x18 search/29/b MRTS # probably first file name length like 178, ... #>>&0 ulelong x \b, 1st length %u # URL like File\C:\Users\nutzer\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\desktop.ini >>&20 lestring16 x \b, 1st %-s # Microsoft SYLK # https://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) # https://outflank.nl/upload/sylksum.txt 0 string ID;P Microsoft SYLK program >4 string >0 \b, created by %s !:ext slk/sylk # Summary: Windows Performance Monitor Alert # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Performance_Monitor # Reference: http://mark0.net/download/triddefs_xml.7z/defs/p/pma.trid.xml # Note: called "Windows Performance Monitor Alert" by TrID 0 ubelong =0xDC058340 >4 ubyte =0 Windows Performance Monitor Alert #!:mime application/octet-stream # https://www.thoughtco.com/mime-types-by-content-type-3469108 # https://filext.com/file-extension/PAM !:mime application/x-perfmon #!:mime application/x-ms-pma !:ext pma # metric type like: "BrowserMetrics" "CrashpadMetrics" "SetupMetrics" >>80 string x \b, "%s" # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/InstallShield # Reference: http://mark0.net/download/triddefs_xml.7z/defs/i/ins.trid.xml # Note: contain also keywords like: BATCH_INSTALL ISVERSION LOGHANDLE SRCDIR SRCDISK WINDIR WINSYSDISK 0 ubelong 0xB8C90C00 InstallShield Script #!:mime application/octet-stream !:mime application/x-installshield-ins # like test.ins Setup.ins !:ext ins # UNKNOWN like: 160034121de07e00 1600341260befe00 16003412e0783700 # 5000010021083f00 50000100b0335600 50000100cbfdf800 50000100dfbc4700 #>4 ubequad x \b, at 4 %#16.16llx # copyright text like: "Stirling Technologies, Inc. (c) 1990-1994" # "InstallSHIELD Software Corporation (c) 1990-1997" >13 pstring/h x "%s" # look for specific ASCII variable names >1 search/0x121/s SRCDIR \b, variable names: # 1st like: SRCDIR >>&-4 leshort x #%u >>&-2 pstring/h x %s # 2nd like: SRCDISK >>>&0 leshort x #%u >>>&2 pstring/h x %s # 3rd like: TARGETDISK >>>>&0 leshort x #%u >>>>&2 pstring/h x %s # 4th like: TARGETDIR #>>>>>&0 leshort x #%u #>>>>>&2 pstring/h x %s # 5th like: WINDIR #>>>>>>&0 leshort x #%u #>>>>>>&2 pstring/h x %s # 6th like: WINDISK #>>>>>>>&0 leshort x #%u #>>>>>>>&2 pstring/h x %s # 7th like: WINSYSDIR #>>>>>>>>&0 leshort x #%u #>>>>>>>>&2 pstring/h x %s # ... LOGHANDLE >0 ubelong x ... # # Summary: Microsoft Remote Desktop Protocol connection # From: Joerg Jenderek # URL: https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/clients/rdp-files # Reference: http://mark0.net/download/triddefs_xml.7z/defs/r/rdp.trid.xml # Note: called "Remote Desktop Connection Settings" by TrID 0 string screen\040mode\040id:i: Remote Desktop Protocol connection #!:mime text/plain !:mime text/x-ms-rdp !:ext rdp # Screen mode: 1~session appear in a window 2~session appear full screen >17 string 1 \b, window mode >17 string 2 \b, full screen mode 0 guid 7B5C52E4-D88C-4DA7-AEB1-5378D02996D3 Microsoft OneNote !:ext one !:mime application/onenote 0 guid 43FF2FA1-EFD9-4C76-9EE2-10EA5722765F Microsoft OneNote Revision Store File # Microsoft XAML Binary Format # From: Alexandre Iooss # URL: https://github.com/WalkingCat/XbfDump/blob/8832d2ffcaa738434d803fefa2ba99d3af37ed29/xbf_data.h 0 string XBF\0 >12 ulelong <0xFF >>16 ulelong <0xFF Microsoft XAML Binary Format !:ext xbf >>>12 ulelong x %d >>>16 ulelong x \b.%d >>>4 ulelong x \b, metadata size: %d bytes >>>8 ulelong x \b, node size: %d bytes # Metaswitch MetaView Service Assurance Server exports 0 string MetaView\x20Service\x20Assurance\x20Export\x20File MetaView SAS export >39 string Version\x20 >>47 byte x \b, version %c # Active Directory Group Policy Registry Policy File Format # From: Yuuta Liang # URL: https://learn.microsoft.com/en-us/previous-versions/windows/desktop/policy/registry-policy-file-format 0 string PReg >4 lelong x Group Policy Registry Policy, Version=%d # Microsoft Type Library Format (.TLB file) # Stores metadata on calling COM APIs (method parameters/etc) # Exists in two formats: the original (SLTG aka Type 1) and a newer format (MSFT aka Type 2) # SLTG: https://www.nationalarchives.gov.uk/PRONOM/fmt/1601 # MSFT: https://www.nationalarchives.gov.uk/PRONOM/fmt/1602 # (Pronom claims these formats are due to Borland, but that appears to be incorrect, Microsoft invented them.) # The MSFT format is documented here: https://gist.github.com/djhohnstein/e4a346ee1506895000ca0fa93e5a0024 # Which is a copy of original: http://theircorp.byethost11.com/files/TypeLib.txt (but which displays incorrectly due to encoding issues) # The MSFT format is generated by the Windows CreateTypeLib2 API: https://learn.microsoft.com/en-us/windows/win32/api/oleauto/nf-oleauto-createtypelib2 # The SLTG format is generated by the Windows CreateTypeLib API: https://learn.microsoft.com/en-us/windows/win32/api/oleauto/nf-oleauto-createtypelib # # Note type libraries can also be embedded as resources inside executables/DLL. No attempt is made here to detect that scenario. # Legacy SLTG format 0 string SLTG >-36 string TYPELIB Type Library (legacy SLTG format) # MSFT format 0 string MSFT\x02\x00\x01\x00 Type Library (MSFT format) file-5.46/magic/Magdir/wireless000664 023540 023540 00000000447 14015050424 020174 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: wireless,v 1.2 2009/09/19 16:28:13 christos Exp $ # wireless-regdb: file(1) magic for CRDA wireless-regdb file format # 0 string RGDB CRDA wireless regulatory database file >4 belong 19 (Version 1) file-5.46/magic/Magdir/wordprocessors000664 023540 023540 00000060422 14713772160 021451 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: wordprocessors,v 1.39 2024/11/09 23:26:33 christos Exp $ # wordprocessors: file(1) magic fo word processors. # ####### PWP file format used on Smith Corona Personal Word Processors: 2 string \040\040\040\040\040\040\040\040\040\040\040ML4D\040'92 Smith Corona PWP >24 byte 2 \b, single spaced >24 byte 3 \b, 1.5 spaced >24 byte 4 \b, double spaced >25 byte 0x42 \b, letter >25 byte 0x54 \b, legal >26 byte 0x46 \b, A4 # URL: http://fileformats.archiveteam.org/wiki/Microsoft_Works_Word_Processor # reference: http://mark0.net/download/triddefs_xml.7z # /defs/w/wps-works-dos.trid.xml # From: Joerg Jenderek # Note: older non OLE 2 Compound based versions 0 ubeshort =0x01FE >112 ubeshort =0x0100 Microsoft Works 1-3 (DOS) or 2 (Windows) document # title like THE GREAT KHAN GAME >>0x100 string x %s !:mime application/vnd-ms-works #!:mime application/x-msworks # https://www.macdisk.com/macsigen.php !:apple ????AWWP !:ext wps # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/Microsoft_Publisher # Reference: http://fileformats.archiveteam.org/wiki/Microsoft_Publisher # Note: older non OLE 2 (./ole2compounddocs) Compound based version 0 ubelong =0xE7AC2C00 Microsoft Publisher (1.0) #!:mime application/x-mspublisher # Not registered at IANA but # https://web.archive.org/web/20200930085807/https://reposcope.com/mimetype/application/vnd.ms-publisher !:mime application/vnd.ms-publisher !:ext pub # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/COSMI_MultiMedia # https://en.wikipedia.org/wiki/Cosmi_Corporation # Reference: http://mark0.net/download/triddefs_xml.7z/defs/c/cosmi.trid.xml # Note: called "COSMI document (generic)" by TrID 0 string/b LCP COSMI document #!:mime application/octet-stream !:mime application/x-cosmi # BCD~Business Card Maker BRO~Brochure Magic CRD~Greeting Card Magic DTP~Print Perfect PUB~Desktop Publisher !:ext bcd/bro/crd/dtp/pub/ # Corel/WordPerfect # URL: https://en.wikipedia.org/wiki/WordPerfect # Reference: https://github.com/OneWingedShark/WordPerfect/blob/master/doc/SDK_Help/FileFormats/WPFF_DocumentStructure.htm # http://mark0.net/download/triddefs_xml.7z/defs/w/wp-generic.trid.xml 0 string \xffWPC # WordPerfect >8 byte 1 # Reference: http://mark0.net/download/triddefs_xml.7z/defs/w/wpm-macro.trid.xml # Note: there exist other macro variants >>9 byte 1 WordPerfect macro #!:mime application/octet-stream !:mime application/x-wordperfect-wpm # like: ALTD.WPM ENDFOOT.WPM FOOTEND.WPM LABELS.WPM REVEALTX.WPM !:ext wpm # Note: used in WordPerfect 5.1; there exist other FIL variants >>9 byte 2 WordPerfect help file #!:mime application/octet-stream !:mime application/x-wordperfect-help # like: WPHELP.FIL !:ext fil # pointer to document area like: 10h >>>4 ulelong !0x10 \b, at %#x document area >>9 byte 3 WordPerfect keyboard file #!:mime application/octet-stream !:mime application/x-wordperfect-keyboard !:ext wpk # no document area, so point to end of file; so this is file size like: 23381 2978 32835 3355 3775 919 >>>4 ulelong x \b, %u bytes >>9 byte 4 WordPerfect VAX keyboard definition #!:mime application/octet-stream !:mime application/x-wordperfect-keyboard #!:ext foo # URL: http://fileformats.archiveteam.org/wiki/WordPerfect # Reference: http://mark0.net/download/triddefs_xml.7z/defs/w/wpd-doc-gen.trid.xml >>9 byte 10 WordPerfect document # https://www.iana.org/assignments/media-types/application/vnd.wordperfect !:mime application/vnd.wordperfect #!:apple ????WPC2 # TODO: distinguish different suffix !:ext wpd/wpt/wkb/icr/tut/sty/tst/crs >>9 byte 11 WordPerfect dictionary >>9 byte 12 WordPerfect thesaurus >>9 byte 13 WordPerfect block >>9 byte 14 WordPerfect rectangular block >>9 byte 15 WordPerfect column block >>9 byte 16 WordPerfect printer data #!:mime application/octet-stream !:mime application/x-wordperfect-prs # like: STANDARD.PRS WORKBOOK.PRS !:ext prs # like: "Standard Printer" "Workbook Printer" >>>0x64 pstring/B >A "%s" #>>9 byte 18 WordPerfect Prefix information file # printer resource .ALL >>9 byte 19 WordPerfect printer data #!:mime application/octet-stream !:mime application/x-wordperfect-all !:ext all # display Resource >>9 byte 20 WordPerfect driver resource data #!:mime application/octet-stream !:mime application/x-wordperfect-drs # like: WPSMALL.DRS !:ext drs # pointer to index area with string "smalldrs" like: 46h >>>4 uleshort !0x46 \b, at %#x index area >>9 byte 21 WordPerfect Overlay file #!:mime application/octet-stream !:mime application/x-wordperfect-fil # like: WP.FIL !:ext fil # URL: http://fileformats.archiveteam.org/wiki/WordPerfect_Graphics # Reference: http://mark0.net/download/triddefs_xml.7z/defs/b/bitmap-wpg.trid.xml # Note: called "WordPerfect Graphics bitmap" by TrID and # "WordPerfect Graphics Metafile" by DROID via x-fmt/395 fmt/1042 # "WPG (Word Perfect Graphics)" by ImageMagick `identify -verbose BUTTRFLY.WPG` >>9 byte 22 WordPerfect graphic image # TODO: skip DROID x-fmt-395-signature-id-132.wpg by check for existing document area #>>>4 ulelong >15 WordPerfect_graphic_OK #!:mime application/octet-stream # http://extension.nirsoft.net/wpg !:mime image/x-wordperfect-graphics # https://reposcope.com/mimetype/application/x-wpg #!:mime application/x-wpg # like: BUTTRFLY.WPG STAR-5.WPG input.wpg WORDPFCT.WPG !:ext wpg # pointer to document area like: 10h 1Ah >>>4 ulelong !0x1A \b, at %#x document area >>9 byte 23 WordPerfect hyphenation code >>9 byte 24 WordPerfect hyphenation data >>9 byte 25 WordPerfect macro resource data #!:mime application/octet-stream !:mime application/x-wordperfect-mrs # like: WP.MRS !:ext mrs >>9 byte 27 WordPerfect hyphenation lex >>9 byte 29 WordPerfect wordlist >>9 byte 30 WordPerfect equation resource data #!:mime application/octet-stream !:mime application/x-wordperfect-qrs # like: WQ.QRS wpDE.qrs wpen.qrs !:ext qrs # jump to document area with some marker and equation >>>(4.l) ubyte x # equation like: "Fraction: x OVER y" >>>>&1 string >A (...%-.19s...) # pointer to document area like: 17C4h >>>4 ulelong x \b, at %#x document area #>>9 byte 31 reserved #>>9 byte 32 WordPerfect VAX .SET >>9 byte 33 WordPerfect spell rules >>9 byte 34 WordPerfect dictionary rules #>>9 byte 35 reserved # video resource device driver # Note: filetype 26 for VRS and filetype 36 for WPD apparently is wrong >>9 byte 36 WordPerfect Video Resource #!:mime application/octet-stream !:mime application/x-wordperfect-vrs # like: STANDARD.VRS !:ext vrs # like: "IBM CGA (& compatibles)" >>>0x20 string >A "%.23s" >>9 byte 39 WordPerfect spell rules (Microlytics) #>>9 byte 40 reserved >>9 byte 41 WordPerfect Install options #!:mime application/octet-stream !:mime application/x-wordperfect-ins # like: WP51.INS !:ext ins # probably default directory name like: "C:\WP51\" >>>0x12 string >A "%.8s" # maybe mouse driver for WP5.1 >>9 byte 42 WordPerfect Resource #!:mime application/octet-stream !:mime application/x-wordperfect-irs # like: STANDARD.IRS !:ext irs # like: "Mouse Driver (MOUSE.COM)" >>>0x28 string >A "%.24s" >>9 byte 43 WordPerfect settings file # maybe Macintosh WP2.0 document >>9 byte 44 WordPerfect 3.5 document !:mime application/vnd.wordperfect !:apple ????WPD3 # like: WP3.wpd !:ext wpd >>9 byte 45 WordPerfect 4.2 document # External spell code module (WP5.1) #>>9 byte 46 WordPerfect external spell # external spell dictionary .LEX #>>9 byte 47 WordPerfect external spell dictionary # Macintosh SOFT graphics file (SOFT (Sequential Object Format) #>>9 byte 48 WordPerfect SOFT graphics #>>9 byte 49 reserved #>>9 byte 50 reserved # WPWin 5.1 Application Resource Library added for WPWin 5.1 #>>9 byte 51 WordPerfect application resource library >>9 byte 69 WordPerfect dialog file # From: Joerg Jenderek # Note: found in sub directory WritingTools inside WordPerfect 2021 program directory >>9 byte 70 WordPerfect Writing Tools #!:mime application/octet-stream !:mime application/x-wordperfect-cbt # like: Wt13cbede.cbt Wt13cbeit.cbt Wt13cbefr.cbt WT21cbede.cbt Wt13cbeEN.CBD WT21cbeEN.CBD !:ext cbd/cbt >>9 byte 76 WordPerfect button bar >>9 default x >>>9 byte x Corel WordPerfect: Unknown filetype %d # Corel Shell >8 byte 2 >>9 byte 1 Corel shell macro >>9 byte 10 Corel shell definition >>9 default x >>>9 byte x Corel Shell: Unknown filetype %d # Corel Notebook >8 byte 3 >>9 byte 1 Corel Notebook macro >>9 byte 2 Corel Notebook help file >>9 byte 3 Corel Notebook keyboard file >>9 byte 10 Corel Notebook definition >>9 default x >>>9 byte x Corel Notebook: Unknown filetype %d # Corel Calculator >8 byte 4 >>9 byte 2 Corel Calculator help file >>9 default x >>>9 byte x Corel Calculator: Unknown filetype %d # Corel File Manager >8 byte 5 >>9 default x >>>9 byte x Corel File Manager: Unknown filetype %d # Corel Calendar >8 byte 6 >>9 byte 2 Corel Calendar help file >>9 byte 10 Corel Calendar data file >>9 default x >>>9 byte x Corel Calendar: Unknown filetype %d # Corel Program Editor/Ed Editor >8 byte 7 >>9 byte 1 Corel Editor macro >>9 byte 2 Corel Editor help file >>9 byte 3 Corel Editor keyboard file >>9 byte 25 Corel Editor macro resource file >>9 default x >>>9 byte x Corel Program Editor/Ed Editor: Unknown filetype %d # Corel Macro Editor >8 byte 8 >>9 byte 1 Corel Macro editor macro >>9 byte 2 Corel Macro editor help file >>9 byte 3 Corel Macro editor keyboard file >>9 default x >>>9 byte x Corel Macro Editor: Unknown filetype %d # Corel Plan Perfect >8 byte 9 >>9 default x >>>9 byte x Corel Plan Perfect: Unknown filetype %d # Corel DataPerfect >8 byte 10 # CHECK: Don't these belong into product 9? >>9 byte 1 Corel PlanPerfect macro >>9 byte 2 Corel PlanPerfect help file >>9 byte 3 Corel PlanPerfect keyboard file >>9 byte 10 Corel PlanPerfect worksheet >>9 byte 15 Corel PlanPerfect printer definition >>9 byte 18 Corel PlanPerfect graphic definition >>9 byte 19 Corel PlanPerfect data >>9 byte 20 Corel PlanPerfect temporary printer >>9 byte 25 Corel PlanPerfect macro resource data >>9 default x >>>9 byte x Corel DataPerfect: Unknown filetype %d # Corel Mail >8 byte 11 >>9 byte 2 Corel Mail help file >>9 byte 5 Corel Mail distribution list >>9 byte 10 Corel Mail out box >>9 byte 11 Corel Mail in box >>9 byte 20 Corel Mail users archived mailbox >>9 byte 21 Corel Mail archived message database >>9 byte 22 Corel Mail archived attachments >>9 default x >>>9 byte x Corel Mail: Unknown filetype %d # Corel Printer >8 byte 12 >>9 byte 11 Corel Printer temporary file >>9 default x >>>9 byte x Corel Printer: Unknown filetype %d # Corel Scheduler >8 byte 13 >>9 byte 2 Corel Scheduler help file >>9 byte 10 Corel Scheduler in file >>9 byte 11 Corel Scheduler out file >>9 default x >>>9 byte x Corel Scheduler: Unknown filetype %d # Corel WordPerfect Office >8 byte 14 >>9 byte 10 Corel GroupWise settings file >>9 byte 17 Corel GroupWise directory services >>9 byte 43 Corel GroupWise settings file >>9 default x >>>9 byte x Corel WordPerfect Office: Unknown filetype %d # Corel DrawPerfect # URL: http://fileformats.archiveteam.org/wiki/Corel_Presentations # Update: Joerg Jenderek >8 byte 15 # Reference: http://mark0.net/download/triddefs_xml.7z/defs/s/shw-wp-2.trid.xml # Note: called "WordPerfect Presentations (v2)" by TrID and # "Corel Presentation" with version "7-8-9" by DROID via PUID fmt/877 >>9 byte 10 WordPerfect Presentation #!:mime application/octet-stream #!:mime application/vnd.wordperfect !:mime application/x-drawperfect-shw # like: BENEFITS.SHW chartbar.shw chartbul.shw chartgal.shw chartorg.shw fig-demo.shw figurgal.shw mastrgal.shw scuba.shw tutorial.shw !:ext shw # pointer to document area like: 10h >>>4 ulelong !0x10 \b, at %#x document area # according to TrID this is nil >>>12 ulelong !0 \b, at 0xC %#x # search for embedded WP file like in tutorial.shw #>>>16 search/638/sb \xffWPC WPC_MAGIC_FOUND # GRR: indirect call leads to recursion! WHY? #>>>>&0 indirect x \b; contains # Reference: http://mark0.net/download/triddefs_xml.7z/defs/s/shw-wp-3.trid.xml # Note: called "WordPerfect/Corel Presentations (v3)" by TrID and # "Corel Presentation" with version "3" by DROID via PUID fmt/878 >>9 byte 15 Corel Presentation #!:mime application/octet-stream #!:mime application/vnd.wordperfect !:mime application/x-drawperfect-shw # like: FIG_ANIM.SHW presenta.shw !:ext shw # pointer to document area like: 1ah >>>4 ulelong !0x1a \b, at %#x document area # according to TrID this is nil >>>12 ulelong !0 \b, at 0xC %#x # reserved like: 3 >>>16 ulelong !0x3 \b, at 0x10 %#x # file size, not including pad characters at EOF >>>0x14 ulelong x \b, %u bytes # search for embedded WP file like in foo #>>>24 search/638/sb \xffWPC WPC_MAGIC_FOUND # GRR: indirect call leads to recursion! WHY? #>>>>&0 indirect x \b; contains # embedded inside Compound Document variant handled by ./ole2compounddocs >>9 byte 16 Corel Presentation (embeded) #!:mime application/octet-stream #!:mime application/vnd.wordperfect !:mime application/x-corelpresentations # like: PerfectOffice_MAIN !:ext / # pointer to document area like: 1ah >>>4 ulelong !0x1a \b, at %#x document area >>>12 ulelong !0 \b, at 0xC %#x # reserved like: 3 >>>16 ulelong !0x3 \b, at 0x10 %#x # file size, not including pad characters at EOF >>>0x14 ulelong x \b, %u bytes # search for embedded WP file #>>>24 search/638/sb \xffWPC WPC_MAGIC_FOUND # GRR: indirect call leads to recursion! WHY? #>>>>&0 indirect x \b; contains >>9 default x >>>9 byte x Corel DrawPerfect: Unknown filetype %d # Corel LetterPerfect >8 byte 16 >>9 default x >>>9 byte x Corel LetterPerfect: Unknown filetype %d # Corel Terminal >8 byte 17 >>9 byte 10 Corel Terminal resource data >>9 byte 11 Corel Terminal resource data >>9 byte 43 Corel Terminal resource data >>9 default x >>>9 byte x Corel Terminal: Unknown filetype %d # Corel loadable file >8 byte 18 >>9 byte 10 Corel loadable file >>9 byte 11 Corel GUI loadable text >>9 byte 12 Corel graphics resource data >>9 byte 13 Corel printer settings file >>9 byte 14 Corel port definition file >>9 byte 15 Corel print queue parameters >>9 byte 16 Corel compressed file >>9 default x >>>9 byte x Corel loadable file: Unknown filetype %d >>15 byte 0 \b, optimized for Intel >>15 byte 1 \b, optimized for Non-Intel # Network service >8 byte 20 >>9 byte 10 Corel Network service msg file >>9 byte 11 Corel Network service msg file >>9 byte 12 Corel Async gateway login msg >>9 byte 14 Corel GroupWise message file >>9 default x >>>9 byte x Corel Network service: Unknown filetype %d # GroupWise >8 byte 31 >>9 byte 20 GroupWise admin domain database >>9 byte 21 GroupWise admin host database >>9 byte 23 GroupWise admin remote host database >>9 byte 24 GroupWise admin ADS deferment data file >>9 default x >>>9 byte x GroupWise: Unknown filetype %d # Corel Writing Tools WT*.* # From: Joerg Jenderek # URL: https://support.corel.com/hc/en-us/articles/215876258-Writing-Tools-Spell-Check-Dictionary-does-not-work-in-WordPerfect-X5 # http://wordperfect.helpmax.net/en/editing-and-formatting-documents/using-the-writing-tools/working-with-user-word-lists/ # Reference: http://mark0.net/download/triddefs_xml.7z/defs/u/uwl-wp.trid.xml >8 byte 32 >>9 byte 10 Corel Writing Tools User Word List #!:mime application/octet-stream !:mime application/x-wordperfect-wordlist # personal user word list UWL under user directory like: WTDE.UWL WTUS.UWL WT21DE.UWL WT21US.UWL WT13DE.UWL ... # and "template" SAV/HWL variant under program directory like: wt13en.hwl Wt13de.sav Wt13it.sav wt13ru.sav WT21us.sav Wtcz.sav ... !:ext uwl/hwl/sav # jump to document area with some marker and word list >>>(4.l) ubyte x # look for beginning of word list starting mostly with letter a as UTF-16 like: Wt13es.sav # but not found in russian wt13ru.sav >>>>&0 search/91/sb a\0 # word list starting like: "acsesory\022accessory.\001\026acomodate\026accommodate4\001" >>>>>&0 lestring16 x (...%-.33s...) # pointer to document area like: 200h >>>4 ulelong !0x200 \b, at %#x document area # file size, not including pad characters at EOF >>>0x14 uleshort x \b, %u bytes # IntelliTAG >8 byte 33 >>9 byte 10 IntelliTAG (SGML) compiled DTD >>9 default x >>>9 byte x IntelliTAG: Unknown filetype %d # Summary: Corel WordPerfect WritingTools advise part # From: Joerg Jenderek # Reference: http://mark0.net/download/triddefs_xml.7z/defs/a/adv-wp.trid.xml >8 byte 34 >>9 byte 11 Corel WordPerfect dictionary advise #!:mime application/octet-stream !:mime application/x-wordperfect-adv #!:mime application/vnd.wordperfect.adv # like: WT21de.adv Wt13de.adv Wt13es.adv Wt13fr.adv wt13us.adv !:ext adv # advise text part often start with tag like: 580A #>>>(16.s) ubequad x ADVISE PART %#llx # part of advise text like: "This is too informal for most writing." >>>(16.s+16) string x (...%-.33s...) # everything else >8 default x >>8 byte x Unknown Corel/Wordperfect product %d, >>>9 byte x file type %d >10 byte 0 \b, v5. # version of WP file; 2.1~WP 8.0 # major version of WP file like: 1 2 >10 byte !0 \b, v%d. # minor version of WP file like: 0 1 >11 byte x \b%d # Hancom HWP (Hangul Word Processor) # Hangul Word Processor 3.0 through 97 used HWP 3.0 format. # URL: https://www.hancom.com/etc/hwpDownload.do 0 string HWP\ Document\ File Hancom HWP (Hangul Word Processor) file, version 3.0 !:ext hwp # CosmicBook, from Benoit Rouits 0 string CSBK Ted Neslson's CosmicBook hypertext file 2 string EYWR AmigaWriter file # chi: file(1) magic for ChiWriter files 0 string \\1cw\ ChiWriter file >5 string >\0 version %s 0 string \\1cw ChiWriter file # Quark Express from https://www.garykessler.net/library/file_sigs.html 2 string IIXPR3 Intel Quark Express Document (English) 2 string IIXPRa Intel Quark Express Document (Korean) 2 string MMXPR3 Motorola Quark Express Document (English) !:mime application/x-quark-xpress-3 2 string MMXPRa Motorola Quark Express Document (Korean) # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/PageMaker # https://en.wikipedia.org/wiki/Adobe_PageMaker # Reference: http://mark0.net/download/triddefs_xml.7z/defs/p # pm4-pagemaker.trid.xml # pm5-pagemaker.trid.xml # Note: since version 6 in 1995 called Adobe PageMaker and # embedded in Compound Document handled by ./ole2compounddocs # mainly tested little endian variant 4 ubelong =0x0000FF99 >0 use PageMaker # big endian variant 4 ubelong =0x000099FF >0 use \^PageMaker # display information of Aldus/Adobe PageMaker document/publication 0 name PageMaker >110 uleshort <0x0600 Aldus >110 uleshort >0x05FF Adobe >110 uleshort x PageMaker # "MP" marker for newer version 4 and above according to TrID #>108 string x \b, MARKER "%.2s" # http://www.nationalarchives.gov.uk/pronom/fmt/876 !:mime application/vnd.pagemaker #!:mime application/x-pagemaker # different file name extensions are used depending on version # older version like 3 >110 uleshort/256 =0 document # https://www.macdisk.com/macsigen.php !:apple ALB3ALD3 # PT3 for template and no example for PageMaker document/publication with PM3 extension !:ext pm3/pt3 >110 uleshort/256 =4 document !:apple ALD4ALB4 # no example for PT4 template !:ext pm4/pt4 >110 uleshort/256 =5 document !:apple ALD5ALB5 # no example for PT5 template !:ext pm5/pt5 >110 uleshort =0x0600 document !:apple ALD6ALB6 # PT6 for template !:ext pm6/pt6 # HOWTO to distinguish version 7 from 6.5 ? >110 uleshort =0x0632 document !:apple AD65AB65 # no example for T65 template !:ext p65/t65/pmd/pmt # version 7 with PMT extension for template #!:ext pmd/pmt #!:apple ????PUBF # endian marker FF 99 for little endian >6 ubyte =0xFF \b, little-endian >6 ubyte =0x99 \b, big-endian # newer numeric version like: 4 5 6 6.50 #>110 uleshort x \b, VERSION=%#x >110 uleshort >0x03FF >>110 uleshort/256 x \b, version %u >>110 uleshort%256 >0 \b.%u # older version like 3 >110 uleshort <0x0400 \b, maybe version 3 # adobe indesign (document, whatever...) from querkan 0 belong 0x0606edf5 Adobe InDesign >16 string DOCUMENT Document #------------------------------------------------------------------------------ # ichitaro456: file(1) magic for Just System Word Processor Ichitaro # # Contributor kenzo-: # Reversed-engineered JS Ichitaro magic numbers # 0 string DOC >43 byte 0x14 Just System Word Processor Ichitaro v4 !:mime application/x-ichitaro4 >43 byte 0x15 Just System Word Processor Ichitaro v5 !:mime application/x-ichitaro5 >43 byte 0x16 Just System Word Processor Ichitaro v6 !:mime application/x-ichitaro6 >144 string JDASH application/x-ichitaro4 # Type: Freemind mindmap documents # From: Jamie Thompson 0 string/w \ 0 string/w \ en.html` # markups page=0x04,label=0x12, followed by strings like "opt" or "main" and title=0x14 0 ulelong&0x8080FFFF 0x00001204 # display "gfxboot compiled html help file" (strength=70) after one "TeX font metric data" (tri10u.tfm strength=71=50+21) handled by ./tex #!:strength +0 >2 regex \^(main|opt) gfxboot compiled html help file, label %s #!:mime application/octet-stream !:mime application/x-gfxboot-hlp !:ext hlp # check for title token \x14 >>&0 ubyte 0x14 \b, title # title text ends with \x10 >>>&0 regex \^[[:print:]]+ '%s' # From: Joerg Jenderek # URL: https://en.wikipedia.org/wiki/StarOffice # Reference: http://mark0.net/download/triddefs_xml.7z # /defs/t/thm-staroffice.trid.xml # Note: used in Star-, Open- and Libre-Office # named as soffice.StarConfigFile.6 or OpenOffice.org configuration by others 0 ubeshort 0x0400 # non nil gap #>(2.s+8) ubequad x \b, gap %#16.16llx # test for null value in gap after theme name maybe unreliable #>(2.s+9) ubyte 0 \b, 0-byte # look for keyword GALRESRV near the end # "C:\Program Files (x86)\StarOffice6.0\share\gallery\sg27.thm" Navigation, 238 objects #>0 search/8415 GALRESRV \b, GALRESRV found # "neues thema6.thm" MorePictures, 315 objects #>0 search/19299 GALRESRV \b, GALRESRV FOUND #>2 uleshort x \b, name length %u # skip file2147.chk by check for positive name length like for sg16.thm "3D" >2 uleshort >0 # skip dBase printer form T6.PRF with misidentified gallery # name :\DBASE\IV\T6.txts by check for 1st object name or RESRV keyword # https://www.clicketyclick.dk/databases/xbase/xbase/dbase_ex.zip # template/t6/with_data/T6.PRF # by first char of object name or RESRV part of keyword GALRESRV >>(2.s+13) ubyte >0x1F StarOffice Gallery theme !:mime application/x-stargallery-thm # thm is also used for JPEG thumbnail images !:ext thm # gallery name often 1 word like: 3D sounds Diagrams Flussdiagramme Fotos # or like private://gallery/hidden/imgppt "Cisco - WAN - LAN" >>>2 pstring/h x %s # number of objects >>>(2.s+4) ulelong x \b, %u object # plural s >>>(2.s+4) ulelong !1 \bs # if available then display first object name >>>(2.s+4) ulelong >0 # partial file name, URL or internal name like "dd2*" of 1st object or RESRV >>>>(2.s+11) pstring/h x \b, 1st %s # From: Joerg Jenderek # URL: http://fileformats.archiveteam.org/wiki/StarOffice_Gallery # Note: used in Star-, Open- and Libre-Office and found in directories like # %APPDATA%\Roaming\LibreOffice\4\user\gallery # $HOME/.config/libreoffice/4/user/gallery 0 string SGA3 StarOffice Gallery thumbnails # Unknown like 0x04000?0001000142 #>4 ubequad x \b, UNKNOWN %#16.16llx #!:mime application/x-sdg !:mime application/x-stargallery-sdg !:ext sdg # display image magic for debugging purpose like 'BM' # looking like PC bitmap, Windows 3.x format with unknown compression #>11 string x \b, image magic '%-.2s' # inspect 1st GALLERY thumbnail magic by ./images with 1 space at end #>11 indirect x \b; contains # Atari ST Hypertext files 0 string HDOC\0 ST-Guide file 0 string HREF\0 ST-Guide reference file file-5.46/magic/Magdir/wsdl000664 023540 023540 00000001370 14067036307 017317 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: wsdl,v 1.6 2021/04/26 15:56:00 christos Exp $ # wsdl: PHP WSDL Cache, https://www.php.net/manual/en/book.soap.php # Cache format extracted from source: # https://svn.php.net/viewvc/php/php-src/trunk/ext/soap/php_sdl.c?revision=HEAD&view=markup # Requires file >= 5.05 # By Elan Ruusamae , Patryk Zawadzki , 2010-2011 0 string wsdl PHP WSDL cache, >4 byte x version %#02x >6 ledate x \b, created %s # uri >10 lelong <0x7fffffff >>10 pstring/l x \b, uri: "%s" # source >>>&0 lelong <0x7fffffff >>>>&-4 pstring/l x \b, source: "%s" # target_ns >>>>>&0 lelong <0x7fffffff >>>>>>&-4 pstring/l x \b, target_ns: "%s" file-5.46/magic/Magdir/x68000000644 023540 023540 00000001347 14015050424 017202 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # x68000: file(1) magic for the Sharp Home Computer # v1.0 # Fabio R. Schmidlin # Yanagisawa PIC picture 0 string PIC >3 search/0x200 \x1A >>&0 search/0x200 \x0 >>>&0 ubyte 0 Yanagisawa PIC image file, >>>>&0 ubyte&15 0 model: X68000, >>>>&0 ubyte&15 1 model: PC-88VA, >>>>&0 ubyte&15 2 model: FM-TOWNS, >>>>&0 ubyte&15 3 model: MAC, >>>>&0 ubyte&15 15 model: Generic, >>>>&3 ubeshort x %dx >>>>&5 ubeshort x \b%d, >>>>&1 ubeshort 4 colors: 16 >>>>&1 ubeshort 8 colors: 256 >>>>&1 ubeshort 12 colors: 4096 >>>>&1 ubeshort 15 colors: 32768 >>>>&1 ubeshort 16 colors: 65536 >>>>&1 ubeshort >16 colors: %d-bit file-5.46/magic/Magdir/xdelta000664 023540 023540 00000001044 14015050424 017612 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: xdelta,v 1.5 2011/08/08 09:01:05 christos Exp $ # file(1) magic(5) data for xdelta Josh MacDonald # 0 string %XDELTA% XDelta binary patch file 0.14 0 string %XDZ000% XDelta binary patch file 0.18 0 string %XDZ001% XDelta binary patch file 0.20 0 string %XDZ002% XDelta binary patch file 1.0 0 string %XDZ003% XDelta binary patch file 1.0.4 0 string %XDZ004% XDelta binary patch file 1.1 0 string \xD6\xC3\xC4\x00 VCDIFF binary diff file-5.46/magic/Magdir/xenix000664 023540 023540 00000016607 14571207705 017514 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: xenix,v 1.17 2024/02/29 03:42:40 christos Exp $ # xenix: file(1) magic for Microsoft Xenix # # "Middle model" stuff, and "Xenix 8086 relocatable or i286 small # model" lifted from "magic.xenix", with comment "derived empirically; # treat as folklore until proven" # # "small model", "large model", "huge model" stuff lifted from XXX # # XXX - "x.out" collides with PDP-11 archives # 0 string core core file (Xenix) # URL: http://www.polarhome.com/service/man/?qf=86rel&tf=2&of=Xenix # http://fileformats.archiveteam.org/wiki/OMF # Reference: http://www.azillionmonkeys.com/qed/Omfg.pdf # Update: Joerg Jenderek # recordtype~TranslatorHEADerRecord 0 byte 0x80 # GRR: line above is too general as it catches also Extensible storage engine DataBase, # all lif files like forth.lif hpcc88.lif lex90b.lif ( See ./lif) # and all compressed DEGAS low-res bitmaps like: MUNCHIE.PC1 PIDER1.PC1 # skip examples like GENA.SND Switch.Snd by looking for record length maximal 1024-3 >1 uleshort <1022 # skip examples like GAME.PICTURE Strange.Pic by looking for positive record length >>1 uleshort >0 # skip examples like Xtable.Data FRACTAL.GEN SHR.VIEW by looking for positive string length >>>3 ubyte >0 # skip examples like OMBRE.6 with "UUUUUU" name by looking for valid high second record type >>>>(1.s+3) ubyte >0x6D # skip few Atari DEGAS bitmap TPDEMO.PC2 RECIPE.PC2 with invalid "high" second record type FEh FFh >>>>>(1.s+3) ubyte <0xF2 8086 relocatable (Microsoft) #!:mime application/octet-stream !:mime application/x-object !:ext obj/o/a # T-module name often source name like "hello.c" or "jmppm32.asm" in JMPPM32.OBJ or # "kbhit" in KBHITS.OBJ or "CAUSEWAY_KERNAL" in CWAPI.OBJ >>>>>>3 pstring x \b, "%s" # data length probably lower 256 according to TrID obj_omf.trid.xml >>>>>>1 uleshort x \b, 1st record data length %u # checksum #>>>>>>(3.b+4) ubyte x \b, checksum %#2.2x # second recordtype: 96h~LNAMES 88h~COMENT 8CH~EXTDEF # highest F1h~Library End Record >>>>>>(1.s+3) ubyte x \b, 2nd record type %#x >>>>>>(1.s+4) uleshort x \b, 2nd record data length %u # Microsoft Xenix archive header 0 leshort 0xff65 Microsoft x.out >2 string __.SYMDEF randomized >0 byte x archive # Microsoft Xenix x.out header # Used by Xenix and also by Windows/386 2.x for WIN386.386 file # URL: http://www.polarhome.com/service/man/?qf=a.out&tf=2&of=Xenix # http://lock.cmpxchg8b.com/files/a.out.h # https://www.geoffchappell.com/notes/windows/retro/win386.htm # Big-endian examples: # - static executables for Xenix V2.x from Motorola 6800 files in IMD tar archive: # https://github.com/pski/model2archive/blob/master/Software/Xenix/Xenix_Games/GAMES1.IMD # Little-endian examples: # - static executables from Windows/386 2.x: WIN386.386, CGA.386, EGA.386, CTVGA.386, HERCULES.386, 8514.386 # - static executables from SCO Xenix 2.1.3 for 8086: /bin/vi, /bin/file, ... # - standalone kernel executables from SCO Xenix 2.1.3 for 8086: /boot, /dos, /xenix 0 leshort 0x206 >0x1c byte&0xc0 =0x40 Microsoft x.out little-endian >>0 use microsoft-x.out 0 beshort 0x206 >0x1c byte&0xc0 =0x00 Microsoft x.out PDP-11-endian # PDP-11-endian is not supported by magic "use" keyword yet but because # we do not use long and quad types, we can parse it as big-endian >>0 use \^microsoft-x.out >0x1c byte&0xc0 =0x80 Microsoft x.out big-endian >>0 use \^microsoft-x.out 0 name microsoft-x.out # Parse type mask >0x1e leshort &0x10 overlay >0x1e leshort &0x2 separate >0x1e leshort &0x4 pure >0x1e leshort &0x800 segmented >0x1e clear x >0x1e leshort&0x501 =0x001 static executable >0x1e leshort&0x501 =0x100 shared library module >0x1e leshort&0x501 =0x101 dynamic executable >0x1e leshort&0x501 =0x401 standalone kernel executable >0x1e leshort&0x501 =0x500 virtual kernel module >0x1e default x unknown binary type # Parse OS type and OS version mask >0x1e leshort&0xc000 =0x0000 for pre-SysV >0x1e leshort&0xc000 =0x4000 for Xenix V2.x >0x1e leshort&0xc000 =0x8000 for Xenix V3.x >0x1e leshort&0xc000 =0xc000 >>0x1e leshort ^0x800 for Xenix V5.x >>0x1e leshort &0x800 >>>2 leshort =0x2c >>>>0x46 ubyte 1 >>>>>0x47 ubyte 0 for Xenix V2.x >>>>>0x47 ubyte 1 for Xenix V3.x >>>>>0x47 ubyte 2 for Xenix V5.x # little-endian segmented static executable for Intel i386 with OS type 1 and # OS version 2 is used also by Windows/386 2.x for *.386 files (e.g. WIN386.386) >>>>>>0x1c ulequad&0x3fff00ff =0x0801004a or Windows/386 2.x >>>>0x46 ubyte 2 for iRMX >>>>0x46 ubyte 3 for Concurrent CP/M # Parse CPU mask >0x1c byte&0x3f =0x01 \b, PDP-11 >0x1c byte&0x3f =0x02 \b, PDP-11/23 >0x1c byte&0x3f =0x03 \b, Zilog Z8000 >0x1c byte&0x3f =0x04 \b, Intel 8086 >0x1c byte&0x3f =0x05 \b, Motorola 6800 >0x1c byte&0x3f =0x06 \b, Zilog Z80 >0x1c byte&0x3f =0x07 \b, VAX 780/750 >0x1c byte&0x3f =0x08 \b, NS16032 >0x1c byte&0x3f =0x09 \b, Intel i286 >0x1c byte&0x3f =0x0a \b, Intel i386 >0x1c byte&0x3f =0x0b \b, Intel i186 >0x1c byte&0x3f =0x29 \b, Intel i286 # Parse other flags # /bin/file from SCO Xenix 2.1.3 for 8086 reports bit 0x40 as Middle model # even that in a.out.h is this defined as large model text, so do same >0x1e leshort &0x40 \b, Middle model # following long check works in any endianity (including PDP-11) >0x10 lelong !0 \b, not stripped # Flags for debugging #>0x1c byte &0x40 \b, words swapped (differs from PDP-11) #>0x1c byte &0x80 \b, bytes swapped (differs from PDP-11) #>0x1e leshort &0x1 \b, executable #>0x1e leshort &0x2 \b, separate I&D #>0x1e leshort &0x4 \b, pure text #>0x1e leshort &0x8 \b, fixed stack #>0x1e leshort &0x10 \b, text overlay #>0x1e leshort &0x20 \b, large model data #>0x1e leshort &0x40 \b, large model text #>0x1e leshort &0x80 \b, FPU required #>0x1e leshort &0x100 \b, virtual module / huge model data #>0x1e leshort &0x200 \b, iterated text/data present #>0x1e leshort &0x400 \b, absolute memory image #>0x1e leshort &0x800 \b, segment table present #>0x1e leshort &0x1000 \b, advisory locking #>0x1e leshort &0x2000 \b, needs 5.3 functionality # Microsoft Xenix a.out header # URL: http://www.polarhome.com/service/man/?qf=a.out&tf=2&of=Xenix # http://lock.cmpxchg8b.com/files/a.out.h # FIXME: Below magic definition is probably wrong, it does not match struct aexec from a.out.h 0 leshort 0x140 old Microsoft 8086 x.out >0x3 byte &0x4 separate >0x3 byte &0x2 pure >0 byte &0x1 executable >0 byte ^0x1 relocatable >0x14 lelong >0 not stripped # Microsoft Xenix b.out header # URL: http://www.polarhome.com/service/man/?qf=a.out&tf=2&of=Xenix # http://lock.cmpxchg8b.com/files/a.out.h # FIXME: Below magic definition is probably wrong, it does not match struct bexec from a.out.h 0 lelong 0x206 b.out >0x1e leshort &0x10 overlay >0x1e leshort &0x2 separate >0x1e leshort &0x4 pure >0x1e leshort &0x800 segmented >0x1e leshort &0x400 standalone >0x1e leshort &0x1 executable >0x1e leshort ^0x1 object file >0x1e leshort &0x4000 V2.3 >0x1e leshort &0x8000 V3.0 >0x1c byte &0x4 8086 >0x1c byte &0xb i186 >0x1c byte &0x9 i286 >0x1c byte &0x29 i286 >0x1c byte &0xa i386 >0x1e leshort &0x4 Large Text >0x1e leshort &0x2 Large Data >0x1e leshort &0x102 Huge Objects Enabled 0 leshort 0x580 XENIX 8086 relocatable or i286 small model # GRR: line above is too general as it catches also all 8086 relocatable (Microsoft) with 1st record data length 5 C0M.OBJ C0T.OBJ C0S.OBJ file-5.46/magic/Magdir/xilinx000664 023540 023540 00000006007 14700541414 017655 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: xilinx,v 1.12 2024/09/04 19:06:12 christos Exp $ # This is Aaron's attempt at a MAGIC file for Xilinx .bit files. # Xilinx-Magic@RevRagnarok.com # Got the info from FPGA-FAQ 0026 # # Rewritten to use pstring/H instead of hardcoded lengths by O. Freyermuth, # fixes at least reading of bitfiles from Spartan 2, 3, 6. # http://www.fpga-faq.com/FAQ_Pages/0026_Tell_me_about_bit_files.htm # # First there is the sync header and its length 0 beshort 0x0009 >2 belong =0x0ff00ff0 >>&0 belong =0x0ff00ff0 >>>&0 byte =0x00 >>>>&1 beshort =0x0001 >>>>>&3 string a Xilinx BIT data # Next is a Pascal-style string with the NCD name. We want to capture that. >>>>>>&0 pstring/H x - from %s # And then 'b' >>>>>>>&1 string b # Then the model / part number: >>>>>>>>&0 pstring/H x - for %s # Then 'c' >>>>>>>>>&1 string c # Then the build-date >>>>>>>>>>&0 pstring/H x - built %s # Then 'd' >>>>>>>>>>>&1 string d # Then the build-time >>>>>>>>>>>>&0 pstring/H x \b(%s) # Then 'e' >>>>>>>>>>>>>&1 string e # And length of data >>>>>>>>>>>>>>&0 belong x - data length %#x # Raw bitstream files 0 long 0xffffffff >&0 belong 0xaa995566 Xilinx RAW bitstream (.BIN) # AXLF (xclbin) files used by AMD/Xilinx accelerators. # The file format is defined by XRT source tree: # https://github.com/Xilinx/XRT/blob/master/src/runtime_src/core/include/xclbin.h # Display file size, creation date, accelerator shell name, xclbin uuid and # number of sections. 0 string xclbin2 AMD/Xilinx accelerator AXLF (xclbin) file >0x130 lequad x \b, %lld bytes >0x138 leqdate x \b, created %s >0x160 string >0 \b, shell "%.64s" >0x1a0 ubelong x \b, uuid %08x >0x1a4 ubeshort x \b-%04x >0x1a6 ubeshort x \b-%04x >0x1a8 ubeshort x \b-%04x >0x1aa ubelong x \b-%08x >0x1ae ubeshort x \b%04x >0x1c0 lelong x \b, %d sections # Xilinx Boot Image files # File format spec is from Xilinx UG1283 # https://docs.xilinx.com/r/en-US/ug1283-bootgen-user-guide 0x20 lelong 0xAA995566 >0x24 lelong 0x584c4e58 Xilinx Boot Image >>0x0 lelong 0xEAFFFFFE \b, 32-bit >>0x0 lelong 0x14000000 \b, 64-bit >>0x28 lelong 0x00000000 \b, unencrypted >>0x28 lelong 0xA5C3C5A5 \b, black key in efuse >>0x28 lelong 0xA5C3C5A7 \b, obfuscated key in efuse >>0x28 lelong 0x3A5C3C5A \b, red key in bbram >>0x28 lelong 0xA5C3C5A3 \b, efuse red key in efuse >>0x28 lelong 0xA35C7CA5 \b, obfuscated key in boot header >>0x28 lelong 0xA3A5C3C5 \b, user key in boot header >>0x28 lelong 0xA35C7C53 \b, black key in boot header >>0x2C lelong 0x01010000 \b, Zynq 7000 SoC !:mime application/x-xilinx-boot-zynq >>>0x34 ulelong >0 \b, FSBL size %#x bytes >>0x2C lelong !0x01010000 \b, Zynq UltraScale+ MPSoC !:mime application/x-xilinx-boot-zynqmp >>>0x34 ulelong >0 \b, PMU size %#x bytes >>>0x3C ulelong >0 \b, FSBL size %#x bytes file-5.46/magic/Magdir/xo65000664 023540 023540 00000002252 14276676107 017161 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: xo65,v 1.5 2022/07/17 15:36:20 christos Exp $ # https://cc65.github.io/doc/sim65.html # xo65 object files # From: "Ullrich von Bassewitz" # 0 string \x55\x7A\x6E\x61 xo65 object, >4 leshort x version %d, >6 leshort&0x0001 =0x0001 with debug info >6 leshort&0x0001 =0x0000 no debug info # xo65 library files 0 string \x6E\x61\x55\x7A xo65 library, >4 leshort x version %d # o65 object files 0 string \x01\x00\x6F\x36\x35 o65 >6 leshort&0x1000 =0x0000 executable, >6 leshort&0x1000 =0x1000 object, >5 byte x version %d, >6 leshort&0x8000 =0x8000 65816, >6 leshort&0x8000 =0x0000 6502, >6 leshort&0x2000 =0x2000 32 bit, >6 leshort&0x2000 =0x0000 16 bit, >6 leshort&0x4000 =0x4000 page reloc, >6 leshort&0x4000 =0x0000 byte reloc, >6 leshort&0x0003 =0x0000 alignment 1 >6 leshort&0x0003 =0x0001 alignment 2 >6 leshort&0x0003 =0x0002 alignment 4 >6 leshort&0x0003 =0x0003 alignment 256 # sim65 executable files 0 string \x73\x69\x6d\x36\x35 sim65 executable, >5 byte x version %d, >6 leshort&0x0000 =0x0000 6502 >6 leshort&0x0001 =0x0001 65C02 file-5.46/magic/Magdir/xwindows000664 023540 023540 00000002434 14217661137 020234 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: xwindows,v 1.13 2022/03/24 15:48:58 christos Exp $ # xwindows: file(1) magic for various X/Window system file formats. # Compiled X Keymap # XKM (compiled X keymap) files (including version and byte ordering) 1 string mkx Compiled XKB Keymap: lsb, >0 byte >0 version %d >0 byte =0 obsolete 0 string xkm Compiled XKB Keymap: msb, >3 byte >0 version %d >3 byte =0 obsolete # xfsdump archive 0 string xFSdump0 xfsdump archive >8 belong x (version %d) # Jaleo XFS files 0 long 395726 Jaleo XFS file >4 long x - version %d >8 long x - [%d - >20 long x \b%dx >24 long x \b%dx >28 long 1008 \bYUV422] >28 long 1000 \bRGB24] # Xcursor data # X11 mouse cursor format defined in libXcursor, see # https://www.x.org/archive/X11R6.8.1/doc/Xcursor.3.html # https://cgit.freedesktop.org/xorg/lib/libXcursor/tree/include/X11/Xcursor/Xcursor.h 0 string Xcur Xcursor data !:mime image/x-xcursor >10 leshort x version %d >>8 leshort x \b.%d # X bitmap https://en.wikipedia.org/wiki/X_BitMap 0 search/2048 #define\040 >&0 regex [a-zA-Z0-9]+_width\040 xbm image >>&0 regex [0-9]+ (%sx >>>&0 string \n#define\040 >>>>&0 regex [a-zA-Z0-9]+_height\040 >>>>>&0 regex [0-9]+ \b%s) file-5.46/magic/Magdir/yara000664 023540 023540 00000000723 14700541414 017275 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: yara,v 1.5 2024/09/04 19:06:12 christos Exp $ # yara: file(1) magic for https://virustotal.github.io/yara/ # 0 string YARA >4 lelong >2047 >>8 byte <20 YARA 3.x compiled rule set # version >>>8 clear x >>>8 byte 6 created with version 3.3.0 >>>8 byte 8 created with version 3.4.0 >>>8 byte 11 created with version 3.5.0 >>>8 default x >>>>8 byte x development version %#02x file-5.46/magic/Magdir/zfs000664 023540 023540 00000004567 14121156022 017147 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # zfs: file(1) magic for ZFS dumps # # From # ZFS dump header has the following structure (as per zfs_ioctl.h # in FreeBSD with drr_type is set to DRR_BEGIN) # # enum { # DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS, # DRR_WRITE, DRR_FREE, DRR_END, # } drr_type; # uint32_t drr_pad; # uint64_t drr_magic; # uint64_t drr_version; # uint64_t drr_creation_time; # dmu_objset_type_t drr_type; # uint32_t drr_pad; # uint64_t drr_toguid; # uint64_t drr_fromguid; # char drr_toname[MAXNAMELEN]; # # Backup magic is 0x00000002f5bacbac (quad word) # The drr_type is defined as # typedef enum dmu_objset_type { # DMU_OST_NONE, # DMU_OST_META, # DMU_OST_ZFS, # DMU_OST_ZVOL, # DMU_OST_OTHER, /* For testing only! */ # DMU_OST_ANY, /* Be careful! */ # DMU_OST_NUMTYPES # } dmu_objset_type_t; # # Almost all uint64_t fields are printed as the 32-bit ones (with high # 32 bits zeroed), because there is no simple way to print them as the # full 64-bit values. # Big-endian values 8 string \000\000\000\002\365\272\313\254 ZFS snapshot (big-endian machine), >20 belong x version %u, >32 belong 0 type: NONE, >32 belong 1 type: META, >32 belong 2 type: ZFS, >32 belong 3 type: ZVOL, >32 belong 4 type: OTHER, >32 belong 5 type: ANY, >32 belong >5 type: UNKNOWN (%u), >40 byte x destination GUID: %02X >41 byte x %02X >42 byte x %02X >43 byte x %02X >44 byte x %02X >45 byte x %02X >46 byte x %02X >47 byte x %02X, >48 ulong >0 >>52 ulong >0 >>>48 byte x source GUID: %02X >>>49 byte x %02X >>>50 byte x %02X >>>51 byte x %02X >>>52 byte x %02X >>>53 byte x %02X >>>54 byte x %02X >>>55 byte x %02X, >56 string >\0 name: '%s' # Little-endian values 8 string \254\313\272\365\002\000\000\000 ZFS snapshot (little-endian machine), >16 lelong x version %u, >32 lelong 0 type: NONE, >32 lelong 1 type: META, >32 lelong 2 type: ZFS, >32 lelong 3 type: ZVOL, >32 lelong 4 type: OTHER, >32 lelong 5 type: ANY, >32 lelong >5 type: UNKNOWN (%u), >47 byte x destination GUID: %02X >46 byte x %02X >45 byte x %02X >44 byte x %02X >43 byte x %02X >42 byte x %02X >41 byte x %02X >40 byte x %02X, >48 ulong >0 >>52 ulong >0 >>>55 byte x source GUID: %02X >>>54 byte x %02X >>>53 byte x %02X >>>52 byte x %02X >>>51 byte x %02X >>>50 byte x %02X >>>49 byte x %02X >>>48 byte x %02X, >56 string >\0 name: '%s' file-5.46/magic/Magdir/zilog000664 023540 023540 00000000703 14015050424 017456 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: zilog,v 1.7 2009/09/19 16:28:13 christos Exp $ # zilog: file(1) magic for Zilog Z8000. # # Was it big-endian or little-endian? My Product Specification doesn't # say. # 0 long 0xe807 object file (z8000 a.out) 0 long 0xe808 pure object file (z8000 a.out) 0 long 0xe809 separate object file (z8000 a.out) 0 long 0xe805 overlay object file (z8000 a.out) file-5.46/magic/Magdir/zip000664 023540 023540 00000007706 14136541662 017163 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: zip,v 1.8 2021/10/24 15:53:56 christos Exp $ # zip: file(1) magic for zip files; this is not use # Note the version of magic in archive is currently stronger, this is # just an example until negative offsets are supported better # Note: All fields unless otherwise noted are unsigned! # Zip Central Directory record 0 name zipcd >0 string PK\001\002 Zip archive data !:mime application/zip # no "made by" in local file header with PK\3\4 magic >>4 leshort x \b, made by >>4 use zipversion >>4 use ziphost # inside ./archive 1.151 called "at least" zipversion "to extract" >>6 leshort x \b, extract using at least >>6 use zipversion # This is DOS date like: ledate 21:00:48 19 Dec 2001 != DOS 00:00 1 Jan 2010 ~ 0000213C >>12 ulelong x \b, last modified >>14 lemsdosdate x \b, last modified %s >>12 lemsdostime x %s # uncompressed size of 1st entry; FFffFFff means real value stored in ZIP64 record >>24 ulelong !0xFFffFFff \b, uncompressed size %u # inside ./archive 1.151 called "compression method="zipcompression >>10 leshort x \b, method= >>10 use zipcompression # URL: https://en.wikipedia.org/wiki/Zip_(file_format) # reference: https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT (Version: 6.3.9) # Zip known compressions 0 name zipcompression >0 leshort 0 \bstore >0 leshort 1 \bShrinking >0 leshort 6 \bImploding >0 leshort 7 \bTokenizing >0 leshort 8 \bdeflate >0 leshort 9 \bdeflate64 >0 leshort 10 \bLibrary imploding #>0 leshort 11 \bReserved by PKWARE >0 leshort 12 \bbzip2 #>0 leshort 13 \bReserved by PKWARE >0 leshort 14 \blzma #>0 leshort 15 \bReserved by PKWARE >0 leshort 16 \bCMPSC (IBM z/OS) #>0 leshort 17 \bReserved by PKWARE >0 leshort 18 \bIBM TERSE >0 leshort 19 \bIBM LZ77 (z/Architecture) >0 leshort 20 \bZstd (deprecated) >0 leshort 93 \bZstd >0 leshort 94 \bMP3 >0 leshort 95 \bxz >0 leshort 96 \bJpeg >0 leshort 97 \bWavPack >0 leshort 98 \bPPMd >0 leshort 99 \bAES Encrypted >0 default x >>0 leshort x \b[%#x] # Zip known versions 0 name zipversion # The lower byte indicates the ZIP version of this file. The value/10 indicates # the major version number, and the value mod 10 is the minor version number. >0 ubyte/10 x v%u >0 ubyte%10 x \b.%u # >0 leshort 0x09 v0.9 # >0 leshort 0x0a v1.0 # >0 leshort 0x0b v1.1 # >0 leshort 0x14 v2.0 # >0 leshort 0x15 v2.1 # >0 leshort 0x19 v2.5 # >0 leshort 0x1b v2.7 # >0 leshort 0x2d v4.5 # >0 leshort 0x2e v4.6 # >0 leshort 0x32 v5.0 # >0 leshort 0x33 v5.1 # >0 leshort 0x34 v5.2 # >0 leshort 0x3d v6.1 # >0 leshort 0x3e v6.2 # >0 leshort 0x3f v6.3 # >0 default x # >>0 leshort x v?[%#x] # display compatible host system name of ZIP archive 0 name ziphost # The upper byte indicates the compatibility of the file attribute information. # If the file is compatible with MS-DOS (v 2.04g) then this value will be zero. #>1 ubyte 0 DOS >1 ubyte 1 Amiga >1 ubyte 2 OpenVMS >1 ubyte 3 UNIX >1 ubyte 4 VM/CMS >1 ubyte 6 OS/2 >1 ubyte 7 Macintosh >1 ubyte 11 MVS >1 ubyte 13 Acorn Risc >1 ubyte 16 BeOS >1 ubyte 17 Tandem # 9 untested >1 ubyte 5 Atari ST >1 ubyte 8 Z-System >1 ubyte 9 CP/M >1 ubyte 10 Windows NTFS >1 ubyte 12 VSE >1 ubyte 14 VFAT >1 ubyte 15 alternate MVS >1 ubyte 18 OS/400 >1 ubyte 19 OS X # unused #>1 ubyte >19 unused %#x # Zip End Of Central Directory record # GRR: wrong for ZIP with comment archive -22 string PK\005\006 #>4 uleshort !0xFFff \b, %u disks #>6 uleshort !0xFFff \b, central directory disk %u #>8 uleshort !0xFFff \b, %u central directories on this disk #>10 uleshort !0xFFff \b, %u central directories #>12 ulelong !0xFFffFFff \b, %u central directory bytes # offset of central directory #>16 ulelong x \b, central directory offset %#x >(16.l) use zipcd # archive comment length n #>>20 uleshort >0 \b, comment length %u # archive comment >>20 pstring/l >0 \b, %s file-5.46/magic/Magdir/zyxel000664 023540 023540 00000001145 14015050424 017506 0ustar00christoschristos000000 000000 #------------------------------------------------------------------------------ # $File: zyxel,v 1.6 2009/09/19 16:28:13 christos Exp $ # zyxel: file(1) magic for ZyXEL modems # # From # These are the /etc/magic entries to decode datafiles as used for the # ZyXEL U-1496E DATA/FAX/VOICE modems. (This header conforms to a # ZyXEL-defined standard) 0 string ZyXEL\002 ZyXEL voice data >10 byte 0 - CELP encoding >10 byte&0x0B 1 - ADPCM2 encoding >10 byte&0x0B 2 - ADPCM3 encoding >10 byte&0x0B 3 - ADPCM4 encoding >10 byte&0x0B 8 - New ADPCM3 encoding >10 byte&0x04 4 with resync file-5.46/doc/Makefile.am000664 023540 023540 00000001472 14015050412 016726 0ustar00christoschristos000000 000000 MAGIC = $(pkgdatadir)/magic if FSECT5 man_MAGIC = magic.5 else man_MAGIC = magic.4 endif fsect = @fsect@ man_MANS = file.1 $(man_MAGIC) libmagic.3 EXTRA_DIST = file.man magic.man libmagic.man CLEANFILES = $(man_MANS) file.1: Makefile file.man @rm -f $@ sed -e s@__CSECTION__@1@g \ -e s@__FSECTION__@${fsect}@g \ -e s@__VERSION__@${VERSION}@g \ -e s@__MAGIC__@${MAGIC}@g $(srcdir)/file.man > $@ magic.${fsect}: Makefile magic.man @rm -f $@ sed -e s@__CSECTION__@1@g \ -e s@__FSECTION__@${fsect}@g \ -e s@__VERSION__@${VERSION}@g \ -e s@__MAGIC__@${MAGIC}@g $(srcdir)/magic.man > $@ libmagic.3: Makefile libmagic.man @rm -f $@ sed -e s@__CSECTION__@1@g \ -e s@__FSECTION__@${fsect}@g \ -e s@__VERSION__@${VERSION}@g \ -e s@__MAGIC__@${MAGIC}@g $(srcdir)/libmagic.man > $@ file-5.46/doc/Makefile.in000664 023540 023540 00000051640 14721422722 016754 0ustar00christoschristos000000 000000 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" \ "$(DESTDIR)$(man4dir)" "$(DESTDIR)$(man5dir)" man3dir = $(mandir)/man3 man4dir = $(mandir)/man4 man5dir = $(mandir)/man5 NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgdatadir = @pkgdatadir@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WARNINGS = @WARNINGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fsect = @fsect@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ MAGIC = $(pkgdatadir)/magic @FSECT5_FALSE@man_MAGIC = magic.4 @FSECT5_TRUE@man_MAGIC = magic.5 man_MANS = file.1 $(man_MAGIC) libmagic.3 EXTRA_DIST = file.man magic.man libmagic.man CLEANFILES = $(man_MANS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man3: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man3dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.3[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ done; } uninstall-man3: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man3dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) install-man4: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man4dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man4dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man4dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.4[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^4][0-9a-z]*$$,4,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man4dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man4dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man4dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man4dir)" || exit $$?; }; \ done; } uninstall-man4: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man4dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.4[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^4][0-9a-z]*$$,4,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man4dir)'; $(am__uninstall_files_from_dir) install-man5: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man5dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.5[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \ done; } uninstall-man5: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man5dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.5[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man4dir)" "$(DESTDIR)$(man5dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-man3 install-man4 install-man5 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 uninstall-man3 uninstall-man4 \ uninstall-man5 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-man3 install-man4 install-man5 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am uninstall-man uninstall-man1 \ uninstall-man3 uninstall-man4 uninstall-man5 .PRECIOUS: Makefile file.1: Makefile file.man @rm -f $@ sed -e s@__CSECTION__@1@g \ -e s@__FSECTION__@${fsect}@g \ -e s@__VERSION__@${VERSION}@g \ -e s@__MAGIC__@${MAGIC}@g $(srcdir)/file.man > $@ magic.${fsect}: Makefile magic.man @rm -f $@ sed -e s@__CSECTION__@1@g \ -e s@__FSECTION__@${fsect}@g \ -e s@__VERSION__@${VERSION}@g \ -e s@__MAGIC__@${MAGIC}@g $(srcdir)/magic.man > $@ libmagic.3: Makefile libmagic.man @rm -f $@ sed -e s@__CSECTION__@1@g \ -e s@__FSECTION__@${fsect}@g \ -e s@__VERSION__@${VERSION}@g \ -e s@__MAGIC__@${MAGIC}@g $(srcdir)/libmagic.man > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: file-5.46/doc/file.man000664 023540 023540 00000053211 14634600767 016331 0ustar00christoschristos000000 000000 .\" $File: file.man,v 1.151 2024/04/07 21:27:35 christos Exp $ .Dd April 7, 2024 .Dt FILE __CSECTION__ .Os .Sh NAME .Nm file .Nd determine file type .Sh SYNOPSIS .Nm .Bk -words .Op Fl bcdEhiklLNnprsSvzZ0 .Op Fl Fl apple .Op Fl Fl exclude-quiet .Op Fl Fl extension .Op Fl Fl mime-encoding .Op Fl Fl mime-type .Op Fl e Ar testname .Op Fl F Ar separator .Op Fl f Ar namefile .Op Fl m Ar magicfiles .Op Fl P Ar name=value .Ar .Ek .Nm .Fl C .Op Fl m Ar magicfiles .Nm .Op Fl Fl help .Sh DESCRIPTION This manual page documents version __VERSION__ of the .Nm command. .Pp .Nm tests each argument in an attempt to classify it. There are three sets of tests, performed in this order: filesystem tests, magic tests, and language tests. The .Em first test that succeeds causes the file type to be printed. .Pp The type printed will usually contain one of the words .Em text (the file contains only printing characters and a few common control characters and is probably safe to read on an .Dv ASCII terminal), .Em executable (the file contains the result of compiling a program in a form understandable to some .Tn UNIX kernel or another), or .Em data meaning anything else (data is usually .Dq binary or non-printable). Exceptions are well-known file formats (core files, tar archives) that are known to contain binary data. When modifying magic files or the program itself, make sure to .Em preserve these keywords . Users depend on knowing that all the readable files in a directory have the word .Dq text printed. Don't do as Berkeley did and change .Dq shell commands text to .Dq shell script . .Pp The filesystem tests are based on examining the return from a .Xr stat 2 system call. The program checks to see if the file is empty, or if it's some sort of special file. Any known file types appropriate to the system you are running on (sockets, symbolic links, or named pipes (FIFOs) on those systems that implement them) are intuited if they are defined in the system header file .In sys/stat.h . .Pp The magic tests are used to check for files with data in particular fixed formats. The canonical example of this is a binary executable (compiled program) .Dv a.out file, whose format is defined in .In elf.h , .In a.out.h and possibly .In exec.h in the standard include directory. These files have a .Dq magic number stored in a particular place near the beginning of the file that tells the .Tn UNIX operating system that the file is a binary executable, and which of several types thereof. The concept of a .Dq magic number has been applied by extension to data files. Any file with some invariant identifier at a small fixed offset into the file can usually be described in this way. The information identifying these files is read from the compiled magic file .Pa __MAGIC__.mgc , or the files in the directory .Pa __MAGIC__ if the compiled file does not exist. In addition, if .Pa $HOME/.magic.mgc or .Pa $HOME/.magic exists, it will be used in preference to the system magic files. .Pp If a file does not match any of the entries in the magic file, it is examined to see if it seems to be a text file. ASCII, ISO-8859-x, non-ISO 8-bit extended-ASCII character sets (such as those used on Macintosh and IBM PC systems), UTF-8-encoded Unicode, UTF-16-encoded Unicode, and EBCDIC character sets can be distinguished by the different ranges and sequences of bytes that constitute printable text in each set. If a file passes any of these tests, its character set is reported. ASCII, ISO-8859-x, UTF-8, and extended-ASCII files are identified as .Dq text because they will be mostly readable on nearly any terminal; UTF-16 and EBCDIC are only .Dq character data because, while they contain text, it is text that will require translation before it can be read. In addition, .Nm will attempt to determine other characteristics of text-type files. If the lines of a file are terminated by CR, CRLF, or NEL, instead of the Unix-standard LF, this will be reported. Files that contain embedded escape sequences or overstriking will also be identified. .Pp Once .Nm has determined the character set used in a text-type file, it will attempt to determine in what language the file is written. The language tests look for particular strings (cf. .In names.h ) that can appear anywhere in the first few blocks of a file. For example, the keyword .Em .br indicates that the file is most likely a .Xr troff 1 input file, just as the keyword .Em struct indicates a C program. These tests are less reliable than the previous two groups, so they are performed last. The language test routines also test for some miscellany (such as .Xr tar 1 archives, JSON files). .Pp Any file that cannot be identified as having been written in any of the character sets listed above is simply said to be .Dq data . .Sh OPTIONS .Bl -tag -width indent .It Fl Fl apple Causes the .Nm command to output the file type and creator code as used by older MacOS versions. The code consists of eight letters, the first describing the file type, the latter the creator. This option works properly only for file formats that have the apple-style output defined. .It Fl b , Fl Fl brief Do not prepend filenames to output lines (brief mode). .It Fl C , Fl Fl compile Write a .Pa magic.mgc output file that contains a pre-parsed version of the magic file or directory. .It Fl c , Fl Fl checking-printout Cause a checking printout of the parsed form of the magic file. This is usually used in conjunction with the .Fl m option to debug a new magic file before installing it. .It Fl d Prints internal debugging information to stderr. .It Fl E On filesystem errors (file not found etc), instead of handling the error as regular output as POSIX mandates and keep going, issue an error message and exit. .It Fl e , Fl Fl exclude Ar testname Exclude the test named in .Ar testname from the list of tests made to determine the file type. Valid test names are: .Bl -tag -width compress .It apptype .Dv EMX application type (only on EMX). .It ascii Various types of text files (this test will try to guess the text encoding, irrespective of the setting of the .Sq encoding option). .It encoding Different text encodings for soft magic tests. .It tokens Ignored for backwards compatibility. .It cdf Prints details of Compound Document Files. .It compress Checks for, and looks inside, compressed files. .It csv Checks Comma Separated Value files. .It elf Prints ELF file details, provided soft magic tests are enabled and the elf magic is found. .It json Examines JSON (RFC-7159) files by parsing them for compliance. .It soft Consults magic files. .It simh Examines SIMH tape files. .It tar Examines tar files by verifying the checksum of the 512 byte tar header. Excluding this test can provide more detailed content description by using the soft magic method. .It text A synonym for .Sq ascii . .El .It Fl Fl exclude-quiet Like .Fl Fl exclude but ignore tests that .Nm does not know about. This is intended for compatibility with older versions of .Nm . .It Fl Fl extension Print a slash-separated list of valid extensions for the file type found. .It Fl F , Fl Fl separator Ar separator Use the specified string as the separator between the filename and the file result returned. Defaults to .Sq \&: . .It Fl f , Fl Fl files-from Ar namefile Read the names of the files to be examined from .Ar namefile (one per line) before the argument list. Either .Ar namefile or at least one filename argument must be present; to test the standard input, use .Sq - as a filename argument. Please note that .Ar namefile is unwrapped and the enclosed filenames are processed when this option is encountered and before any further options processing is done. This allows one to process multiple lists of files with different command line arguments on the same .Nm invocation. Thus if you want to set the delimiter, you need to do it before you specify the list of files, like: .Dq Fl F Ar @ Fl f Ar namefile , instead of: .Dq Fl f Ar namefile Fl F Ar @ . .It Fl h , Fl Fl no-dereference This option causes symlinks not to be followed (on systems that support symbolic links). This is the default if the environment variable .Dv POSIXLY_CORRECT is not defined. .It Fl i , Fl Fl mime Causes the .Nm command to output mime type strings rather than the more traditional human readable ones. Thus it may say .Sq text/plain; charset=us-ascii rather than .Dq ASCII text . .It Fl Fl mime-type , Fl Fl mime-encoding Like .Fl i , but print only the specified element(s). .It Fl k , Fl Fl keep-going Don't stop at the first match, keep going. Subsequent matches will be have the string .Sq "\[rs]012\- " prepended. (If you want a newline, see the .Fl r option.) The magic pattern with the highest strength (see the .Fl l option) comes first. .It Fl l , Fl Fl list Shows a list of patterns and their strength sorted descending by .Xr magic __FSECTION__ strength which is used for the matching (see also the .Fl k option). .It Fl L , Fl Fl dereference This option causes symlinks to be followed, as the like-named option in .Xr ls 1 (on systems that support symbolic links). This is the default if the environment variable .Ev POSIXLY_CORRECT is defined. .It Fl m , Fl Fl magic-file Ar magicfiles Specify an alternate list of files and directories containing magic. This can be a single item, or a colon-separated list. If a compiled magic file is found alongside a file or directory, it will be used instead. .It Fl N , Fl Fl no-pad Don't pad filenames so that they align in the output. .It Fl n , Fl Fl no-buffer Force stdout to be flushed after checking each file. This is only useful if checking a list of files. It is intended to be used by programs that want filetype output from a pipe. .It Fl p , Fl Fl preserve-date On systems that support .Xr utime 3 or .Xr utimes 2 , attempt to preserve the access time of files analyzed, to pretend that .Nm never read them. .It Fl P , Fl Fl parameter Ar name=value Set various parameter limits. .Bl -column "elf_phnum" "Default" "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" .It Sy "Name" Ta Sy "Default" Ta Sy "Explanation" .It Li bytes Ta 1M Ta max number of bytes to read from file .It Li elf_notes Ta 256 Ta max ELF notes processed .It Li elf_phnum Ta 2K Ta max ELF program sections processed .It Li elf_shnum Ta 32K Ta max ELF sections processed .It Li elf_shsize Ta 128MB Ta max ELF section size processed .It Li encoding Ta 65K Ta max number of bytes to determine encoding .It Li indir Ta 50 Ta recursion limit for indirect magic .It Li name Ta 100 Ta use count limit for name/use magic .It Li regex Ta 8K Ta length limit for regex searches .El .It Fl r , Fl Fl raw Don't translate unprintable characters to \eooo. Normally .Nm translates unprintable characters to their octal representation. .It Fl s , Fl Fl special-files Normally, .Nm only attempts to read and determine the type of argument files which .Xr stat 2 reports are ordinary files. This prevents problems, because reading special files may have peculiar consequences. Specifying the .Fl s option causes .Nm to also read argument files which are block or character special files. This is useful for determining the filesystem types of the data in raw disk partitions, which are block special files. This option also causes .Nm to disregard the file size as reported by .Xr stat 2 since on some systems it reports a zero size for raw disk partitions. .It Fl S , Fl Fl no-sandbox On systems where libseccomp .Pa ( https://github.com/seccomp/libseccomp ) is available, the .Fl S option disables sandboxing which is enabled by default. This option is needed for .Nm to execute external decompressing programs, i.e. when the .Fl z option is specified and the built-in decompressors are not available. On systems where sandboxing is not available, this option has no effect. .It Fl v , Fl Fl version Print the version of the program and exit. .It Fl z , Fl Fl uncompress Try to look inside compressed files. .It Fl Z , Fl Fl uncompress-noreport Try to look inside compressed files, but report information about the contents only not the compression. .It Fl 0 , Fl Fl print0 Output a null character .Sq \e0 after the end of the filename. Nice to .Xr cut 1 the output. This does not affect the separator, which is still printed. .Pp If this option is repeated more than once, then .Nm prints just the filename followed by a NUL followed by the description (or ERROR: text) followed by a second NUL for each entry. .It Fl -help Print a help message and exit. .El .Sh ENVIRONMENT The environment variable .Ev MAGIC can be used to set the default magic file name. If that variable is set, then .Nm will not attempt to open .Pa $HOME/.magic . .Nm adds .Dq Pa .mgc to the value of this variable as appropriate. The environment variable .Ev POSIXLY_CORRECT controls (on systems that support symbolic links), whether .Nm will attempt to follow symlinks or not. If set, then .Nm follows symlink, otherwise it does not. This is also controlled by the .Fl L and .Fl h options. .Sh FILES .Bl -tag -width __MAGIC__.mgc -compact .It Pa __MAGIC__.mgc Default compiled list of magic. .It Pa __MAGIC__ Directory containing default magic files. .El .Sh EXIT STATUS .Nm will exit with .Dv 0 if the operation was successful or .Dv >0 if an error was encountered. The following errors cause diagnostic messages, but don't affect the program exit code (as POSIX requires), unless .Fl E is specified: .Bl -bullet -compact -offset indent .It A file cannot be found .It There is no permission to read a file .It The file type cannot be determined .El .Sh EXAMPLES .Bd -literal -offset indent $ file file.c file /dev/{wd0a,hda} file.c: C program text file: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped /dev/wd0a: block special (0/0) /dev/hda: block special (3/0) $ file -s /dev/wd0{b,d} /dev/wd0b: data /dev/wd0d: x86 boot sector $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10} /dev/hda: x86 boot sector /dev/hda1: Linux/i386 ext2 filesystem /dev/hda2: x86 boot sector /dev/hda3: x86 boot sector, extended partition table /dev/hda4: Linux/i386 ext2 filesystem /dev/hda5: Linux/i386 swap file /dev/hda6: Linux/i386 swap file /dev/hda7: Linux/i386 swap file /dev/hda8: Linux/i386 swap file /dev/hda9: empty /dev/hda10: empty $ file -i file.c file /dev/{wd0a,hda} file.c: text/x-c file: application/x-executable /dev/hda: application/x-not-regular-file /dev/wd0a: application/x-not-regular-file .Ed .Sh SEE ALSO .Xr hexdump 1 , .Xr od 1 , .Xr strings 1 , .Xr magic __FSECTION__ .Sh STANDARDS CONFORMANCE This program is believed to exceed the System V Interface Definition of FILE(CMD), as near as one can determine from the vague language contained therein. Its behavior is mostly compatible with the System V program of the same name. This version knows more magic, however, so it will produce different (albeit more accurate) output in many cases. .\" URL: http://www.opengroup.org/onlinepubs/009695399/utilities/file.html .Pp The one significant difference between this version and System V is that this version treats any white space as a delimiter, so that spaces in pattern strings must be escaped. For example, .Bd -literal -offset indent \*[Gt]10 string language impress\ (imPRESS data) .Ed .Pp in an existing magic file would have to be changed to .Bd -literal -offset indent \*[Gt]10 string language\e impress (imPRESS data) .Ed .Pp In addition, in this version, if a pattern string contains a backslash, it must be escaped. For example .Bd -literal -offset indent 0 string \ebegindata Andrew Toolkit document .Ed .Pp in an existing magic file would have to be changed to .Bd -literal -offset indent 0 string \e\ebegindata Andrew Toolkit document .Ed .Pp SunOS releases 3.2 and later from Sun Microsystems include a .Nm command derived from the System V one, but with some extensions. This version differs from Sun's only in minor ways. It includes the extension of the .Sq \*[Am] operator, used as, for example, .Bd -literal -offset indent \*[Gt]16 long\*[Am]0x7fffffff \*[Gt]0 not stripped .Ed .Sh SECURITY On systems where libseccomp .Pa ( https://github.com/seccomp/libseccomp ) is available, .Nm is enforces limiting system calls to only the ones necessary for the operation of the program. This enforcement does not provide any security benefit when .Nm is asked to decompress input files running external programs with the .Fl z option. To enable execution of external decompressors, one needs to disable sandboxing using the .Fl S option. .Sh MAGIC DIRECTORY The magic file entries have been collected from various sources, mainly USENET, and contributed by various authors. Christos Zoulas (address below) will collect additional or corrected magic file entries. A consolidation of magic file entries will be distributed periodically. .Pp The order of entries in the magic file is significant. Depending on what system you are using, the order that they are put together may be incorrect. If your old .Nm command uses a magic file, keep the old magic file around for comparison purposes (rename it to .Pa __MAGIC__.orig ) . .Sh HISTORY There has been a .Nm command in every .Dv UNIX since at least Research Version 4 (man page dated November, 1973). The System V version introduced one significant major change: the external list of magic types. This slowed the program down slightly but made it a lot more flexible. .Pp This program, based on the System V version, was written by Ian Darwin .Aq ian@darwinsys.com without looking at anybody else's source code. .Pp John Gilmore revised the code extensively, making it better than the first version. Geoff Collyer found several inadequacies and provided some magic file entries. Contributions of the .Sq \*[Am] operator by Rob McMahon, .Aq cudcv@warwick.ac.uk , 1989. .Pp Guy Harris, .Aq guy@netapp.com , made many changes from 1993 to the present. .Pp Primary development and maintenance from 1990 to the present by Christos Zoulas .Aq christos@astron.com . .Pp Altered by Chris Lowth .Aq chris@lowth.com , 2000: handle the .Fl i option to output mime type strings, using an alternative magic file and internal logic. .Pp Altered by Eric Fischer .Aq enf@pobox.com , July, 2000, to identify character codes and attempt to identify the languages of non-ASCII files. .Pp Altered by Reuben Thomas .Aq rrt@sc3d.org , 2007-2011, to improve MIME support, merge MIME and non-MIME magic, support directories as well as files of magic, apply many bug fixes, update and fix a lot of magic, improve the build system, improve the documentation, and rewrite the Python bindings in pure Python. .Pp The list of contributors to the .Sq magic directory (magic files) is too long to include here. You know who you are; thank you. Many contributors are listed in the source files. .Sh LEGAL NOTICE Copyright (c) Ian F. Darwin, Toronto, Canada, 1986-1999. Covered by the standard Berkeley Software Distribution copyright; see the file COPYING in the source distribution. .Pp The files .Pa tar.h and .Pa is_tar.c were written by John Gilmore from his public-domain .Xr tar 1 program, and are not covered by the above license. .Sh BUGS Please report bugs and send patches to the bug tracker at .Pa https://bugs.astron.com/ or the mailing list at .Aq file@astron.com (visit .Pa https://mailman.astron.com/mailman/listinfo/file first to subscribe). .Sh TODO Fix output so that tests for MIME and APPLE flags are not needed all over the place, and actual output is only done in one place. This needs a design. Suggestion: push possible outputs on to a list, then pick the last-pushed (most specific, one hopes) value at the end, or use a default if the list is empty. This should not slow down evaluation. .Pp The handling of .Dv MAGIC_CONTINUE and printing \e012- between entries is clumsy and complicated; refactor and centralize. .Pp Some of the encoding logic is hard-coded in encoding.c and can be moved to the magic files if we had a !:charset annotation. .Pp Continue to squash all magic bugs. See Debian BTS for a good source. .Pp Store arbitrarily long strings, for example for %s patterns, so that they can be printed out. Fixes Debian bug #271672. This can be done by allocating strings in a string pool, storing the string pool at the end of the magic file and converting all the string pointers to relative offsets from the string pool. .Pp Add syntax for relative offsets after current level (Debian bug #466037). .Pp Make file -ki work, i.e. give multiple MIME types. .Pp Add a zip library so we can peek inside Office2007 documents to print more details about their contents. .Pp Add an option to print URLs for the sources of the file descriptions. .Pp Combine script searches and add a way to map executable names to MIME types (e.g. have a magic value for !:mime which causes the resulting string to be looked up in a table). This would avoid adding the same magic repeatedly for each new hash-bang interpreter. .Pp When a file descriptor is available, we can skip and adjust the buffer instead of the hacky buffer management we do now. .Pp Fix .Dq name and .Dq use to check for consistency at compile time (duplicate .Dq name , .Dq use pointing to undefined .Dq name ). Make .Dq name / .Dq use more efficient by keeping a sorted list of names. Special-case ^ to flip endianness in the parser so that it does not have to be escaped, and document it. .Pp If the offsets specified internally in the file exceed the buffer size ( .Dv HOWMANY variable in file.h), then we don't seek to that offset, but we give up. It would be better if buffer managements was done when the file descriptor is available so we can seek around the file. One must be careful though because this has performance and thus security considerations, because one can slow down things by repeatedly seeking. .Pp There is support now for keeping separate buffers and having offsets from the end of the file, but the internal buffer management still needs an overhaul. .Sh AVAILABILITY You can obtain the original author's latest version by anonymous FTP on .Pa ftp.astron.com in the directory .Pa /pub/file/file-X.YZ.tar.gz . file-5.46/doc/magic.man000664 023540 023540 00000062512 14721636234 016471 0ustar00christoschristos000000 000000 .\" $File: magic.man,v 1.110 2024/11/27 15:37:00 christos Exp $ .Dd November 27, 2024 .Dt MAGIC __FSECTION__ .Os .\" install as magic.4 on USG, magic.5 on V7, Berkeley and Linux systems. .Sh NAME .Nm magic .Nd file command's magic pattern file .Sh DESCRIPTION This manual page documents the format of magic files as used by the .Xr file __CSECTION__ command, version __VERSION__. The .Xr file __CSECTION__ command identifies the type of a file using, among other tests, a test for whether the file contains certain .Dq "magic patterns" . The database of these .Dq "magic patterns" is usually located in a binary file in .Pa __MAGIC__.mgc or a directory of source text magic pattern fragment files in .Pa __MAGIC__ . The database specifies what patterns are to be tested for, what message or MIME type to print if a particular pattern is found, and additional information to extract from the file. .Pp The format of the source fragment files that are used to build this database is as follows: Each line of a fragment file specifies a test to be performed. A test compares the data starting at a particular offset in the file with a byte value, a string or a numeric value. If the test succeeds, a message is printed. The line consists of the following fields: .Bl -tag -width ".Dv message" .It Dv offset A number specifying the offset (in bytes) into the file of the data which is to be tested. This offset can be a negative number if it is: .Bl -bullet -compact .It The first direct offset of the magic entry (at continuation level 0), in which case it is interpreted an offset from end end of the file going backwards. This works only when a file descriptor to the file is available and it is a regular file. .It A continuation offset relative to the end of the last up-level field .Dv ( \*[Am] ) . .El If the offset starts with the symbol .Dq + , then all offsets are interpreted as from the beginning of the file (the default). .It Dv type The type of the data to be tested. The possible values are: .Bl -tag -width ".Dv lestring16" .It Dv byte A one-byte value. .It Dv short A two-byte value in this machine's native byte order. .It Dv long A four-byte value in this machine's native byte order. .It Dv quad An eight-byte value in this machine's native byte order. .It Dv float A 32-bit single precision IEEE floating point number in this machine's native byte order. .It Dv double A 64-bit double precision IEEE floating point number in this machine's native byte order. .It Dv string A string of bytes. The string type specification can be optionally followed by a / option and optionally followed by a set of flags /[bCcftTtWw]*. The width limits the number of characters to be copied. Zero means all characters. The following flags are supported: .Bl -tag -width B -compact -offset XXXX .It b Force binary file test. .It C Use upper case insensitive matching: upper case characters in the magic match both lower and upper case characters in the target, whereas lower case characters in the magic only match upper case characters in the target. .It c Use lower case insensitive matching: lower case characters in the magic match both lower and upper case characters in the target, whereas upper case characters in the magic only match upper case characters in the target. To do a complete case insensitive match, specify both .Dq c and .Dq C . .It f Require that the matched string is a full word, not a partial word match. .It T Trim the string, i.e. leading and trailing whitespace .It t Force text file test. .It W Compact whitespace in the target, which must contain at least one whitespace character. If the magic has .Dv n consecutive blanks, the target needs at least .Dv n consecutive blanks to match. .It w Treat every blank in the magic as an optional blank. is deleted before the string is printed. .El .It Dv pstring A Pascal-style string where the first byte/short/int is interpreted as the unsigned length. The length defaults to byte and can be specified as a modifier. The following modifiers are supported: .Bl -tag -width B -compact -offset XXXX .It B A byte length (default). .It H A 2 byte big endian length. .It h A 2 byte little endian length. .It L A 4 byte big endian length. .It l A 4 byte little endian length. .It J The length includes itself in its count. .El The string is not NUL terminated. .Dq J is used rather than the more valuable .Dq I because this type of length is a feature of the JPEG format. .It Dv date A four-byte value interpreted as a UNIX date. .It Dv qdate An eight-byte value interpreted as a UNIX date. .It Dv ldate A four-byte value interpreted as a UNIX-style date, but interpreted as local time rather than UTC. .It Dv qldate An eight-byte value interpreted as a UNIX-style date, but interpreted as local time rather than UTC. .It Dv qwdate An eight-byte value interpreted as a Windows-style date. .It Dv msdosdate A two-byte value interpreted as FAT/DOS-style date. .It Dv msdostime A two-byte value interpreted as FAT/DOS-style time. .It Dv beid3 A 32-bit ID3 length in big-endian byte order. .It Dv beshort A two-byte value in big-endian byte order. .It Dv belong A four-byte value in big-endian byte order. .It Dv bequad An eight-byte value in big-endian byte order. .It Dv befloat A 32-bit single precision IEEE floating point number in big-endian byte order. .It Dv bedouble A 64-bit double precision IEEE floating point number in big-endian byte order. .It Dv bedate A four-byte value in big-endian byte order, interpreted as a Unix date. .It Dv beqdate An eight-byte value in big-endian byte order, interpreted as a Unix date. .It Dv beldate A four-byte value in big-endian byte order, interpreted as a UNIX-style date, but interpreted as local time rather than UTC. .It Dv beqldate An eight-byte value in big-endian byte order, interpreted as a UNIX-style date, but interpreted as local time rather than UTC. .It Dv beqwdate An eight-byte value in big-endian byte order, interpreted as a Windows-style date. .It Dv bemsdosdate A two-byte value in big-endian byte order, interpreted as FAT/DOS-style date. .It Dv bemsdostime A two-byte value in big-endian byte order, interpreted as FAT/DOS-style time. .It Dv bestring16 A two-byte unicode (UCS16) string in big-endian byte order. .It Dv leid3 A 32-bit ID3 length in little-endian byte order. .It Dv leshort A two-byte value in little-endian byte order. .It Dv lelong A four-byte value in little-endian byte order. .It Dv lequad An eight-byte value in little-endian byte order. .It Dv lefloat A 32-bit single precision IEEE floating point number in little-endian byte order. .It Dv ledouble A 64-bit double precision IEEE floating point number in little-endian byte order. .It Dv ledate A four-byte value in little-endian byte order, interpreted as a UNIX date. .It Dv leqdate An eight-byte value in little-endian byte order, interpreted as a UNIX date. .It Dv leldate A four-byte value in little-endian byte order, interpreted as a UNIX-style date, but interpreted as local time rather than UTC. .It Dv leqldate An eight-byte value in little-endian byte order, interpreted as a UNIX-style date, but interpreted as local time rather than UTC. .It Dv leqwdate An eight-byte value in little-endian byte order, interpreted as a Windows-style date. .It Dv lemsdosdate A two-byte value in big-endian byte order, interpreted as FAT/DOS-style date. .It Dv lemsdostime A two-byte value in big-endian byte order, interpreted as FAT/DOS-style time. .It Dv lestring16 A two-byte unicode (UCS16) string in little-endian byte order. .It Dv melong A four-byte value in middle-endian (PDP-11) byte order. .It Dv medate A four-byte value in middle-endian (PDP-11) byte order, interpreted as a UNIX date. .It Dv meldate A four-byte value in middle-endian (PDP-11) byte order, interpreted as a UNIX-style date, but interpreted as local time rather than UTC. .It Dv indirect Starting at the given offset, consult the magic database again. The offset of the .Dv indirect magic is by default absolute in the file, but one can specify .Dv /r to indicate that the offset is relative from the beginning of the entry. .It Dv name Define a .Dq named magic instance that can be called from another .Dv use magic entry, like a subroutine call. Named instance direct magic offsets are relative to the offset of the previous matched entry, but indirect offsets are relative to the beginning of the file as usual. Named magic entries always match. .It Dv use Recursively call the named magic starting from the current offset. If the name of the referenced begins with a .Dv ^ then the endianness of the magic is switched; if the magic mentioned .Dv leshort for example, it is treated as .Dv beshort and vice versa. This is useful to avoid duplicating the rules for different endianness. .It Dv regex A regular expression match in extended POSIX regular expression syntax (like egrep). Regular expressions can take exponential time to process, and their performance is hard to predict, so their use is discouraged. When used in production environments, their performance should be carefully checked. The size of the string to search should also be limited by specifying .Dv / , to avoid performance issues scanning long files. The type specification can also be optionally followed by .Dv /[c][s][l] . The .Dq c flag makes the match case insensitive, while the .Dq s flag update the offset to the start offset of the match, rather than the end. The .Dq l modifier, changes the limit of length to mean number of lines instead of a byte count. Lines are delimited by the platforms native line delimiter. When a line count is specified, an implicit byte count also computed assuming each line is 80 characters long. If neither a byte or line count is specified, the search is limited automatically to 8KiB. .Dv ^ and .Dv $ match the beginning and end of individual lines, respectively, not beginning and end of file. .It Dv search A literal string search starting at the given offset. The same modifier flags can be used as for string patterns. The search expression must contain the range in the form .Dv /number, that is the number of positions at which the match will be attempted, starting from the start offset. This is suitable for searching larger binary expressions with variable offsets, using .Dv \e escapes for special characters. The order of modifier and number is not relevant. .It Dv default This is intended to be used with the test .Em x (which is always true) and it has no type. It matches when no other test at that continuation level has matched before. Clearing that matched tests for a continuation level, can be done using the .Dv clear test. .It Dv clear This test is always true and clears the match flag for that continuation level. It is intended to be used with the .Dv default test. .It Dv der Parse the file as a DER Certificate file. The test field is used as a der type that needs to be matched. The DER types are: .Dv eoc , .Dv bool , .Dv int , .Dv bit_str , .Dv octet_str , .Dv null , .Dv obj_id , .Dv obj_desc , .Dv ext , .Dv real , .Dv enum , .Dv embed , .Dv utf8_str , .Dv rel_oid , .Dv time , .Dv res2 , .Dv seq , .Dv set , .Dv num_str , .Dv prt_str , .Dv t61_str , .Dv vid_str , .Dv ia5_str , .Dv utc_time , .Dv gen_time , .Dv gr_str , .Dv vis_str , .Dv gen_str , .Dv univ_str , .Dv char_str , .Dv bmp_str , .Dv date , .Dv tod , .Dv datetime , .Dv duration , .Dv oid-iri , .Dv rel-oid-iri . These types can be followed by an optional numeric size, which indicates the field width in bytes. .It Dv guid A Globally Unique Identifier, parsed and printed as XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. It's format is a string. .It Dv offset This is a quad value indicating the current offset of the file. It can be used to determine the size of the file or the magic buffer. For example the magic entries: .Bd -literal -offset indent -0 offset x this file is %lld bytes -0 offset <=100 must be more than 100 \e bytes and is only %lld .Ed .It Dv octal A string representing an octal number. .El .Pp For compatibility with the Single .Ux Standard, the type specifiers .Dv dC and .Dv d1 are equivalent to .Dv byte , the type specifiers .Dv uC and .Dv u1 are equivalent to .Dv ubyte , the type specifiers .Dv dS and .Dv d2 are equivalent to .Dv short , the type specifiers .Dv uS and .Dv u2 are equivalent to .Dv ushort , the type specifiers .Dv dI , .Dv dL , and .Dv d4 are equivalent to .Dv long , the type specifiers .Dv uI , .Dv uL , and .Dv u4 are equivalent to .Dv ulong , the type specifier .Dv d8 is equivalent to .Dv quad , the type specifier .Dv u8 is equivalent to .Dv uquad , and the type specifier .Dv s is equivalent to .Dv string . In addition, the type specifier .Dv dQ is equivalent to .Dv quad and the type specifier .Dv uQ is equivalent to .Dv uquad . .Pp Each top-level magic pattern (see below for an explanation of levels) is classified as text or binary according to the types used. Types .Dq regex and .Dq search are classified as text tests, unless non-printable characters are used in the pattern. All other tests are classified as binary. A top-level pattern is considered to be a test text when all its patterns are text patterns; otherwise, it is considered to be a binary pattern. When matching a file, binary patterns are tried first; if no match is found, and the file looks like text, then its encoding is determined and the text patterns are tried. .Pp The numeric types may optionally be followed by .Dv \*[Am] and a numeric value, to specify that the value is to be AND'ed with the numeric value before any comparisons are done. Prepending a .Dv u to the type indicates that ordered comparisons should be unsigned. .It Dv test The value to be compared with the value from the file. If the type is numeric, this value is specified in C form; if it is a string, it is specified as a C string with the usual escapes permitted (e.g. \en for new-line). .Pp Numeric values may be preceded by a character indicating the operation to be performed. It may be .Dv = , to specify that the value from the file must equal the specified value, .Dv \*[Lt] , to specify that the value from the file must be less than the specified value, .Dv \*[Gt] , to specify that the value from the file must be greater than the specified value, .Dv \*[Am] , to specify that the value from the file must have set all of the bits that are set in the specified value, .Dv ^ , to specify that the value from the file must have clear any of the bits that are set in the specified value, or .Dv ~ , the value specified after is negated before tested. .Dv x , to specify that any value will match. If the character is omitted, it is assumed to be .Dv = . Operators .Dv \*[Am] , .Dv ^ , and .Dv ~ don't work with floats and doubles. The operator .Dv !\& specifies that the line matches if the test does .Em not succeed. .Pp Numeric values are specified in C form; e.g. .Dv 13 is decimal, .Dv 013 is octal, and .Dv 0x13 is hexadecimal. .Pp Numeric operations are not performed on date types, instead the numeric value is interpreted as an offset. .Pp For string values, the string from the file must match the specified string. The operators .Dv = , .Dv \*[Lt] and .Dv \*[Gt] (but not .Dv \*[Am] ) can be applied to strings. The length used for matching is that of the string argument in the magic file. This means that a line can match any non-empty string (usually used to then print the string), with .Em \*[Gt]\e0 (because all non-empty strings are greater than the empty string). .Pp Dates are treated as numerical values in the respective internal representation. .Pp The special test .Em x always evaluates to true. .It Dv message The message to be printed if the comparison succeeds. If the string contains a .Xr printf 3 format specification, the value from the file (with any specified masking performed) is printed using the message as the format string. If the string begins with .Dq \eb , the message printed is the remainder of the string with no whitespace added before it: multiple matches are normally separated by a single space. .El .Pp An APPLE 4+4 character APPLE creator and type can be specified as: .Bd -literal -offset indent !:apple CREATYPE .Ed .Pp A slash-separated list of commonly found filename extensions can be specified as: .Bd -literal -offset indent !:ext ext[/ext...] .Ed .Pp i.e. the literal string .Dq !:ext followed by a slash-separated list of commonly found extensions; for example for JPEG images: .Bd -literal -offset indent !:ext jpeg/jpg/jpe/jfif .Ed .Pp A MIME type is given on a separate line, which must be the next non-blank or comment line after the magic line that identifies the file type, and has the following format: .Bd -literal -offset indent !:mime MIMETYPE .Ed .Pp i.e. the literal string .Dq !:mime followed by the MIME type. .Pp An optional strength can be supplied on a separate line which refers to the current magic description using the following format: .Bd -literal -offset indent !:strength OP VALUE .Ed .Pp The operand .Dv OP can be: .Dv + , .Dv - , .Dv * , or .Dv / and .Dv VALUE is a constant between 0 and 255. This constant is applied using the specified operand to the currently computed default magic strength. .Pp Some file formats contain additional information which is to be printed along with the file type or need additional tests to determine the true file type. These additional tests are introduced by one or more .Em \*[Gt] characters preceding the offset. The number of .Em \*[Gt] on the line indicates the level of the test; a line with no .Em \*[Gt] at the beginning is considered to be at level 0. Tests are arranged in a tree-like hierarchy: if the test on a line at level .Em n succeeds, all following tests at level .Em n+1 are performed, and the messages printed if the tests succeed, until a line with level .Em n (or less) appears. For more complex files, one can use empty messages to get just the "if/then" effect, in the following way: .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Lt]0x40 MS-DOS executable \*[Gt]0x18 uleshort \*[Gt]0x3f extended PC executable (e.g., MS Windows) .Ed .Pp Offsets do not need to be constant, but can also be read from the file being examined. If the first character following the last .Em \*[Gt] is a .Em \&( then the string after the parenthesis is interpreted as an indirect offset. That means that the number after the parenthesis is used as an offset in the file. The value at that offset is read, and is used again as an offset in the file. Indirect offsets are of the form: .Em ( x [[.,][bBcCeEfFgGhHiIlmosSqQ]][+\-][ y ]) . The value of .Em x is used as an offset in the file. A byte, id3 length, short or long is read at that offset depending on the .Em [bBcCeEfFgGhHiIlLmsSqQ] type specifier. The value is treated as signed if .Dq \&, is specified or unsigned if .Dq \&. is specified. The capitalized types interpret the number as a big endian value, whereas the small letter versions interpret the number as a little endian value; the .Em m type interprets the number as a middle endian (PDP-11) value. To that number the value of .Em y is added and the result is used as an offset in the file. The default type if one is not specified is long. The following types are recognized: .Bl -column -offset indent "Type" "Half/Short" "Little" "Size" .It Sy Type Sy Mnemonic Sy Endian Sy Size .It bcBC Byte/Char N/A 1 .It efg Double Little 8 .It EFG Double Big 8 .It hs Half/Short Little 2 .It HS Half/Short Big 2 .It i ID3 Little 4 .It I ID3 Big 4 .It l Long Little 4 .It L Long Big 4 .It m Middle Middle 4 .It o Octal Textual Variable .It q Quad Little 8 .It Q Quad Big 8 .El .Pp That way variable length structures can be examined: .Bd -literal -offset indent # MS Windows executables are also valid MS-DOS executables 0 string MZ \*[Gt]0x18 uleshort \*[Lt]0x40 MZ executable (MS-DOS) # skip the whole block below if it is not an extended executable \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) \*[Gt]\*[Gt](0x3c.l) string LX\e0\e0 LX executable (OS/2) .Ed .Pp This strategy of examining has a drawback: you must make sure that you eventually print something, or users may get empty output (such as when there is neither PE\e0\e0 nor LE\e0\e0 in the above example). .Pp If this indirect offset cannot be used directly, simple calculations are possible: appending .Em [+-*/%\*[Am]|^]number inside parentheses allows one to modify the value read from the file before it is used as an offset: .Bd -literal -offset indent # MS Windows executables are also valid MS-DOS executables 0 string MZ # sometimes, the value at 0x18 is less that 0x40 but there's still an # extended executable, simply appended to the file \*[Gt]0x18 uleshort \*[Lt]0x40 \*[Gt]\*[Gt](4.s*512) leshort 0x014c COFF executable (MS-DOS, DJGPP) \*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS) .Ed .Pp Sometimes you do not know the exact offset as this depends on the length or position (when indirection was used before) of preceding fields. You can specify an offset relative to the end of the last up-level field using .Sq \*[Am] as a prefix to the offset: .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) # immediately following the PE signature is the CPU type \*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x14c for Intel 80386 \*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x8664 for x86-64 \*[Gt]\*[Gt]\*[Gt]\*[Am]0 leshort 0x184 for DEC Alpha .Ed .Pp Indirect and relative offsets can be combined: .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Lt]0x40 \*[Gt]\*[Gt](4.s*512) leshort !0x014c MZ executable (MS-DOS) # if it's not COFF, go back 512 bytes and add the offset taken # from byte 2/3, which is yet another way of finding the start # of the extended executable \*[Gt]\*[Gt]\*[Gt]\*[Am](2.s-514) string LE LE executable (MS Windows VxD driver) .Ed .Pp Or the other way around: .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows) # at offset 0x80 (-4, since relative offsets start at the end # of the up-level match) inside the LE header, we find the absolute # offset to the code area, where we look for a specific signature \*[Gt]\*[Gt]\*[Gt](\*[Am]0x7c.l+0x26) string UPX \eb, UPX compressed .Ed .Pp Or even both! .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string LE\e0\e0 LE executable (MS-Windows) # at offset 0x58 inside the LE header, we find the relative offset # to a data area where we look for a specific signature \*[Gt]\*[Gt]\*[Gt]\*[Am](\*[Am]0x54.l-3) string UNACE \eb, ACE self-extracting archive .Ed .Pp If you have to deal with offset/length pairs in your file, even the second value in a parenthesized expression can be taken from the file itself, using another set of parentheses. Note that this additional indirect offset is always relative to the start of the main indirect offset. .Bd -literal -offset indent 0 string MZ \*[Gt]0x18 uleshort \*[Gt]0x3f \*[Gt]\*[Gt](0x3c.l) string PE\e0\e0 PE executable (MS-Windows) # search for the PE section called ".idata"... \*[Gt]\*[Gt]\*[Gt]\*[Am]0xf4 search/0x140 .idata # ...and go to the end of it, calculated from start+length; # these are located 14 and 10 bytes after the section name \*[Gt]\*[Gt]\*[Gt]\*[Gt](\*[Am]0xe.l+(-4)) string PK\e3\e4 \eb, ZIP self-extracting archive .Ed .Pp If you have a list of known values at a particular continuation level, and you want to provide a switch-like default case: .Bd -literal -offset indent # clear that continuation level match \*[Gt]18 clear x \*[Gt]18 lelong 1 one \*[Gt]18 lelong 2 two \*[Gt]18 default x # print default match \*[Gt]\*[Gt]18 lelong x unmatched 0x%x .Ed .Sh SEE ALSO .Xr file __CSECTION__ \- the command that reads this file. .Sh BUGS The formats .Dv long , .Dv belong , .Dv lelong , .Dv melong , .Dv short , .Dv beshort , and .Dv leshort do not depend on the length of the C data types .Dv short and .Dv long on the platform, even though the Single .Ux Specification implies that they do. However, as OS X Mountain Lion has passed the Single .Ux Specification validation suite, and supplies a version of .Xr file __CSECTION__ in which they do not depend on the sizes of the C data types and that is built for a 64-bit environment in which .Dv long is 8 bytes rather than 4 bytes, presumably the validation suite does not test whether, for example .Dv long refers to an item with the same size as the C data type .Dv long . There should probably be .Dv type names .Dv int8 , .Dv uint8 , .Dv int16 , .Dv uint16 , .Dv int32 , .Dv uint32 , .Dv int64 , and .Dv uint64 , and specified-byte-order variants of them, to make it clearer that those types have specified widths. .\" .\" From: guy@sun.uucp (Guy Harris) .\" Newsgroups: net.bugs.usg .\" Subject: /etc/magic's format isn't well documented .\" Message-ID: <2752@sun.uucp> .\" Date: 3 Sep 85 08:19:07 GMT .\" Organization: Sun Microsystems, Inc. .\" Lines: 136 .\" .\" Here's a manual page for the format accepted by the "file" made by adding .\" the changes I posted to the S5R2 version. .\" .\" Modified for Ian Darwin's version of the file command. .\" .\" For emacs editor .\" Local Variables: .\" eval: (add-hook 'before-save-hook 'time-stamp) .\" time-stamp-start: ".Dd " .\" time-stamp-end: "$" .\" time-stamp-format: "%:B %02d, %:Y" .\" time-stamp-time-zone: "UTC0" .\" system-time-locale: "C" .\" eval:(setq compile-command (concat "groff -Tlatin1 -m man " (buffer-file-name)) ) .\" End: .\" file-5.46/doc/libmagic.man000664 023540 023540 00000030405 14556265022 017153 0ustar00christoschristos000000 000000 .\" $File: libmagic.man,v 1.50 2023/12/29 18:04:47 christos Exp $ .\" .\" Copyright (c) Christos Zoulas 2003, 2018, 2022 .\" All Rights Reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice immediately at the beginning of the file, without modification, .\" this list of conditions, and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR .\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .Dd December 29, 2023 .Dt LIBMAGIC 3 .Os .Sh NAME .Nm magic_open , .Nm magic_close , .Nm magic_error , .Nm magic_errno , .Nm magic_descriptor , .Nm magic_buffer , .Nm magic_getflags , .Nm magic_setflags , .Nm magic_check , .Nm magic_compile , .Nm magic_list , .Nm magic_load , .Nm magic_load_buffers , .Nm magic_setparam , .Nm magic_getparam , .Nm magic_version .Nd Magic number recognition library .Sh LIBRARY .Lb libmagic .Sh SYNOPSIS .In magic.h .Ft magic_t .Fn magic_open "int flags" .Ft void .Fn magic_close "magic_t cookie" .Ft const char * .Fn magic_error "magic_t cookie" .Ft int .Fn magic_errno "magic_t cookie" .Ft const char * .Fn magic_descriptor "magic_t cookie" "int fd" .Ft const char * .Fn magic_file "magic_t cookie" "const char *filename" .Ft const char * .Fn magic_buffer "magic_t cookie" "const void *buffer" "size_t length" .Ft int .Fn magic_getflags "magic_t cookie" .Ft int .Fn magic_setflags "magic_t cookie" "int flags" .Ft int .Fn magic_check "magic_t cookie" "const char *filename" .Ft int .Fn magic_compile "magic_t cookie" "const char *filename" .Ft int .Fn magic_list "magic_t cookie" "const char *filename" .Ft int .Fn magic_load "magic_t cookie" "const char *filename" .Ft int .Fn magic_load_buffers "magic_t cookie" "void **buffers" "size_t *sizes" "size_t nbuffers" .Ft int .Fn magic_getparam "magic_t cookie" "int param" "void *value" .Ft int .Fn magic_setparam "magic_t cookie" "int param" "const void *value" .Ft int .Fn magic_version "void" .Ft const char * .Fn magic_getpath "const char *magicfile" "int action" .Sh DESCRIPTION These functions operate on the magic database file which is described in .Xr magic __FSECTION__ . .Pp The function .Fn magic_open creates a magic cookie pointer and returns it. It returns .Dv NULL if there was an error allocating the magic cookie. The .Ar flags argument specifies how the other magic functions should behave: .Bl -tag -width MAGIC_COMPRESS .It Dv MAGIC_NONE No special handling. .It Dv MAGIC_DEBUG Print debugging messages to stderr. .It Dv MAGIC_SYMLINK If the file queried is a symlink, follow it. .It Dv MAGIC_COMPRESS If the file is compressed, unpack it and look at the contents. .It Dv MAGIC_DEVICES If the file is a block or character special device, then open the device and try to look in its contents. .It Dv MAGIC_MIME_TYPE Return a MIME type string, instead of a textual description. .It Dv MAGIC_MIME_ENCODING Return a MIME encoding, instead of a textual description. .It Dv MAGIC_MIME A shorthand for MAGIC_MIME_TYPE | MAGIC_MIME_ENCODING. .It Dv MAGIC_CONTINUE Return all matches, not just the first. .It Dv MAGIC_CHECK Check the magic database for consistency and print warnings to stderr. .It Dv MAGIC_PRESERVE_ATIME On systems that support .Xr utime 3 or .Xr utimes 2 , attempt to preserve the access time of files analysed. .It Dv MAGIC_RAW Don't translate unprintable characters to a \eooo octal representation. .It Dv MAGIC_ERROR Treat operating system errors while trying to open files and follow symlinks as real errors, instead of printing them in the magic buffer. .It Dv MAGIC_APPLE Return the Apple creator and type. .It Dv MAGIC_EXTENSION Return a slash-separated list of extensions for this file type. .It Dv MAGIC_COMPRESS_TRANSP Don't report on compression, only report about the uncompressed data. .It Dv MAGIC_NO_CHECK_APPTYPE Don't check for .Dv EMX application type (only on EMX). .It Dv MAGIC_NO_COMPRESS_FORK Don't allow decompressors that use fork. .It Dv MAGIC_NO_CHECK_CDF Don't get extra information on MS Composite Document Files. .It Dv MAGIC_NO_CHECK_COMPRESS Don't look inside compressed files. .It Dv MAGIC_NO_CHECK_ELF Don't print ELF details. .It Dv MAGIC_NO_CHECK_ENCODING Don't check text encodings. .It Dv MAGIC_NO_CHECK_SOFT Don't consult magic files. .It Dv MAGIC_NO_CHECK_TAR Don't examine tar files. .It Dv MAGIC_NO_CHECK_TEXT Don't check for various types of text files. .It Dv MAGIC_NO_CHECK_TOKENS Don't look for known tokens inside ascii files. .It Dv MAGIC_NO_CHECK_JSON Don't examine JSON files. .It Dv MAGIC_NO_CHECK_CSV Don't examine CSV files. .It Dv MAGIC_NO_CHECK_SIMH Don't examine SIMH tape files. .El .Pp The .Fn magic_close function closes the .Xr magic __FSECTION__ database and deallocates any resources used. .Pp The .Fn magic_error function returns a textual explanation of the last error, or .Dv NULL if there was no error. .Pp The .Fn magic_errno function returns the last operating system error number .Pq Xr errno 2 that was encountered by a system call. .Pp The .Fn magic_file function returns a textual description of the contents of the .Ar filename argument, or .Dv NULL if an error occurred. If the .Ar filename is .Dv NULL , then stdin is used. .Pp The .Fn magic_descriptor function returns a textual description of the contents of the .Ar fd argument, or .Dv NULL if an error occurred. .Pp The .Fn magic_buffer function returns a textual description of the contents of the .Ar buffer argument with .Ar length bytes size. .Pp The .Fn magic_getflags functions returns a value representing current .Ar flags set. .Pp The .Fn magic_setflags function sets the .Ar flags described above. Note that using both MIME flags together can also return extra information on the charset. .Pp The .Fn magic_check function can be used to check the validity of entries in the colon separated database files passed in as .Ar filename , or .Dv NULL for the default database. It returns 0 on success and \-1 on failure. .Pp The .Fn magic_compile function can be used to compile the colon separated list of database files passed in as .Ar filename , or .Dv NULL for the default database. It returns 0 on success and \-1 on failure. The compiled files created are named from the .Xr basename 1 of each file argument with .Dq .mgc appended to it. .Pp The .Fn magic_list function dumps all magic entries in a human readable format, dumping first the entries that are matched against binary files and then the ones that match text files. It takes and optional .Fa filename argument which is a colon separated list of database files, or .Dv NULL for the default database. .Pp The .Fn magic_load function must be used to load the colon separated list of database files passed in as .Ar filename , or .Dv NULL for the default database file before any magic queries can performed. .Pp The default database file is named by the MAGIC environment variable. If that variable is not set, the default database file name is __MAGIC__. .Fn magic_load adds .Dq .mgc to the database filename as appropriate. .Pp The .Fn magic_load_buffers function takes an array of size .Fa nbuffers of .Fa buffers with a respective size for each in the array of .Fa sizes loaded with the contents of the magic databases from the filesystem. This function can be used in environment where the magic library does not have direct access to the filesystem, but can access the magic database via shared memory or other IPC means. .Pp The .Fn magic_getparam and .Fn magic_setparam allow getting and setting various limits related to the magic library. .Bl -column "MAGIC_PARAM_ELF_PHNUM_MAX" "size_t" "Default" -offset indent .It Sy "Parameter" Ta Sy "Type" Ta Sy "Default" .It Li MAGIC_PARAM_INDIR_MAX Ta size_t Ta 15 .It Li MAGIC_PARAM_NAME_MAX Ta size_t Ta 30 .It Li MAGIC_PARAM_ELF_NOTES_MAX Ta size_t Ta 256 .It Li MAGIC_PARAM_ELF_PHNUM_MAX Ta size_t Ta 128 .It Li MAGIC_PARAM_ELF_SHNUM_MAX Ta size_t Ta 32768 .It Li MAGIC_PARAM_REGEX_MAX Ta size_t Ta 8192 .It Li MAGIC_PARAM_BYTES_MAX Ta size_t Ta 7340032 .It Li MAGIC_PARAM_ENCODING_MAX Ta size_t Ta 1048576 .It Li MAGIC_PARAM_ELF_SHSIZE_MAX Ta size_t Ta 134217728 .It Li MAGIC_PARAM_MAGWARN_MAX Ta size_t Ta 64 .El .Pp The .Dv MAGIC_PARAM_INDIR_RECURSION parameter controls how many levels of recursion will be followed for indirect magic entries. .Pp The .Dv MAGIC_PARAM_NAME_RECURSION parameter controls how many levels of recursion will be followed for for name/use calls. .Pp The .Dv MAGIC_PARAM_NAME_MAX parameter controls the maximum number of calls for name/use. .Pp The .Dv MAGIC_PARAM_NOTES_MAX parameter controls how many ELF notes will be processed. .Pp The .Dv MAGIC_PARAM_PHNUM_MAX parameter controls how many ELF program sections will be processed. .Pp The .Dv MAGIC_PARAM_SHNUM_MAX parameter controls how many ELF sections will be processed. .Pp The .Dv MAGIC_PARAM_REGEX_MAX parameter controls the maximum length for regex searches. .Pp The .Dv MAGIC_PARAM_BYTES_MAX parameter controls the maximum number of bytes to look inside a file. .Pp The .Dv MAGIC_PARAM_ENCODING_MAX parameter controls the maximum number of bytes to scan for encoding detection. .Pp The .Dv MAGIC_PARAM_ELF_SHSIZE_MAX parameter controls the maximum number of bytes in an elf section. .Pp The .Dv MAGIC_PARAM_MAGWARN_MAX parameter controls the maximum number of warnings to tolerate in a magic file. .Pp The .Fn magic_version command returns the version number of this library which is compiled into the shared library using the constant .Dv MAGIC_VERSION from .In magic.h . This can be used by client programs to verify that the version they compile against is the same as the version that they run against. .Pp The .Fn magic_getpath command returns the colon separated list of magic database locations. If the .Fa filename is non-NULL, then it is returned. Otherwise, if the .Dv MAGIC environment variable is defined, then it is returned. Otherwise, if .Fa action is 0 (meaning "file load"), then any user-specific magic database file is included. Otherwise, only the system default magic database path is included. .Sh RETURN VALUES The function .Fn magic_open returns a magic cookie on success and .Dv NULL on failure setting errno to an appropriate value. It will set errno to .Er EINVAL if an unsupported value for flags was given. The .Fn magic_list , .Fn magic_load , .Fn magic_compile , and .Fn magic_check functions return 0 on success and \-1 on failure. The .Fn magic_buffer , .Fn magic_getpath , and .Fn magic_file , functions return a string on success and .Dv NULL on failure. The .Fn magic_error function returns a textual description of the errors of the above functions, or .Dv NULL if there was no error. The .Fn magic_version always returns the version number of the library. Finally, .Fn magic_setflags returns \-1 on systems that don't support .Xr utime 3 , or .Xr utimes 2 when .Dv MAGIC_PRESERVE_ATIME is set. .Sh FILES .Bl -tag -width __MAGIC__.mgc -compact .It Pa __MAGIC__ The non-compiled default magic database. .It Pa __MAGIC__.mgc The compiled default magic database. .El .Sh SEE ALSO .Xr file __CSECTION__ , .Xr magic __FSECTION__ .Sh BUGS The results from .Fn magic_buffer and .Fn magic_file where the buffer and the file contain the same data can produce different results, because in the .Fn magic_file case, the program can .Xr lseek 2 and .Xr stat 2 the file descriptor. .Sh AUTHORS .An M\(oans Rullg\(oard Initial libmagic implementation, and configuration. .An Christos Zoulas API cleanup, error code and allocation handling. file-5.46/src/Makefile.am000664 023540 023540 00000001625 14634602245 016766 0ustar00christoschristos000000 000000 MAGIC = $(pkgdatadir)/magic lib_LTLIBRARIES = libmagic.la nodist_include_HEADERS = magic.h bin_PROGRAMS = file AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"' AM_CFLAGS = $(CFLAG_VISIBILITY) @WARNINGS@ libmagic_la_SOURCES = buffer.c magic.c apprentice.c softmagic.c ascmagic.c \ encoding.c compress.c is_csv.c is_json.c is_simh.c is_tar.c readelf.c \ print.c fsmagic.c funcs.c file.h readelf.h tar.h apptype.c der.c der.h \ file_opts.h elfclass.h mygetopt.h cdf.c cdf_time.c readcdf.c cdf.h libmagic_la_LDFLAGS = -no-undefined -version-info 1:0:0 if MINGW MINGWLIBS = -lgnurx -lshlwapi else MINGWLIBS = endif libmagic_la_LIBADD = -lm $(LTLIBOBJS) $(MINGWLIBS) file_SOURCES = file.c seccomp.c file_LDADD = libmagic.la -lm CLEANFILES = magic.h EXTRA_DIST = magic.h.in cdf.mk BNF memtest.c HDR= $(top_srcdir)/src/magic.h.in BUILT_SOURCES = magic.h magic.h: ${HDR} sed -e "s/X.YY/$$(echo @VERSION@ | tr -d .)/" < ${HDR} > $@ file-5.46/src/Makefile.in000664 023540 023540 00000076727 14721422722 017013 0ustar00christoschristos000000 000000 # Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = file$(EXEEXT) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/visibility.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" \ "$(DESTDIR)$(includedir)" PROGRAMS = $(bin_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = libmagic_la_DEPENDENCIES = $(LTLIBOBJS) $(am__DEPENDENCIES_1) am_libmagic_la_OBJECTS = buffer.lo magic.lo apprentice.lo softmagic.lo \ ascmagic.lo encoding.lo compress.lo is_csv.lo is_json.lo \ is_simh.lo is_tar.lo readelf.lo print.lo fsmagic.lo funcs.lo \ apptype.lo der.lo cdf.lo cdf_time.lo readcdf.lo libmagic_la_OBJECTS = $(am_libmagic_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libmagic_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libmagic_la_LDFLAGS) $(LDFLAGS) -o $@ am_file_OBJECTS = file.$(OBJEXT) seccomp.$(OBJEXT) file_OBJECTS = $(am_file_OBJECTS) file_DEPENDENCIES = libmagic.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = $(DEPDIR)/asctime_r.Plo $(DEPDIR)/asprintf.Plo \ $(DEPDIR)/ctime_r.Plo $(DEPDIR)/dprintf.Plo \ $(DEPDIR)/fmtcheck.Plo $(DEPDIR)/getline.Plo \ $(DEPDIR)/getopt_long.Plo $(DEPDIR)/gmtime_r.Plo \ $(DEPDIR)/localtime_r.Plo $(DEPDIR)/pread.Plo \ $(DEPDIR)/strcasestr.Plo $(DEPDIR)/strlcat.Plo \ $(DEPDIR)/strlcpy.Plo $(DEPDIR)/vasprintf.Plo \ ./$(DEPDIR)/apprentice.Plo ./$(DEPDIR)/apptype.Plo \ ./$(DEPDIR)/ascmagic.Plo ./$(DEPDIR)/buffer.Plo \ ./$(DEPDIR)/cdf.Plo ./$(DEPDIR)/cdf_time.Plo \ ./$(DEPDIR)/compress.Plo ./$(DEPDIR)/der.Plo \ ./$(DEPDIR)/encoding.Plo ./$(DEPDIR)/file.Po \ ./$(DEPDIR)/fsmagic.Plo ./$(DEPDIR)/funcs.Plo \ ./$(DEPDIR)/is_csv.Plo ./$(DEPDIR)/is_json.Plo \ ./$(DEPDIR)/is_simh.Plo ./$(DEPDIR)/is_tar.Plo \ ./$(DEPDIR)/magic.Plo ./$(DEPDIR)/print.Plo \ ./$(DEPDIR)/readcdf.Plo ./$(DEPDIR)/readelf.Plo \ ./$(DEPDIR)/seccomp.Po ./$(DEPDIR)/softmagic.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmagic_la_SOURCES) $(file_SOURCES) DIST_SOURCES = $(libmagic_la_SOURCES) $(file_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(nodist_include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ asctime_r.c asprintf.c ctime_r.c dprintf.c fmtcheck.c \ getline.c getopt_long.c gmtime_r.c localtime_r.c pread.c \ strcasestr.c strlcat.c strlcpy.c vasprintf.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) pkgdatadir = @pkgdatadir@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FILECMD = @FILECMD@ GREP = @GREP@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MINGW = @MINGW@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ WARNINGS = @WARNINGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fsect = @fsect@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ MAGIC = $(pkgdatadir)/magic lib_LTLIBRARIES = libmagic.la nodist_include_HEADERS = magic.h AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"' AM_CFLAGS = $(CFLAG_VISIBILITY) @WARNINGS@ libmagic_la_SOURCES = buffer.c magic.c apprentice.c softmagic.c ascmagic.c \ encoding.c compress.c is_csv.c is_json.c is_simh.c is_tar.c readelf.c \ print.c fsmagic.c funcs.c file.h readelf.h tar.h apptype.c der.c der.h \ file_opts.h elfclass.h mygetopt.h cdf.c cdf_time.c readcdf.c cdf.h libmagic_la_LDFLAGS = -no-undefined -version-info 1:0:0 @MINGW_FALSE@MINGWLIBS = @MINGW_TRUE@MINGWLIBS = -lgnurx -lshlwapi libmagic_la_LIBADD = -lm $(LTLIBOBJS) $(MINGWLIBS) file_SOURCES = file.c seccomp.c file_LDADD = libmagic.la -lm CLEANFILES = magic.h EXTRA_DIST = magic.h.in cdf.mk BNF memtest.c HDR = $(top_srcdir)/src/magic.h.in BUILT_SOURCES = magic.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libmagic.la: $(libmagic_la_OBJECTS) $(libmagic_la_DEPENDENCIES) $(EXTRA_libmagic_la_DEPENDENCIES) $(AM_V_CCLD)$(libmagic_la_LINK) -rpath $(libdir) $(libmagic_la_OBJECTS) $(libmagic_la_LIBADD) $(LIBS) file$(EXEEXT): $(file_OBJECTS) $(file_DEPENDENCIES) $(EXTRA_file_DEPENDENCIES) @rm -f file$(EXEEXT) $(AM_V_CCLD)$(LINK) $(file_OBJECTS) $(file_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/asctime_r.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/asprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/ctime_r.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/dprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/fmtcheck.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt_long.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/gmtime_r.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/localtime_r.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pread.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strcasestr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strlcat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strlcpy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vasprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apprentice.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apptype.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ascmagic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cdf_time.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/der.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encoding.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsmagic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funcs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_csv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_json.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_simh.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_tar.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/magic.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readcdf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readelf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seccomp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/softmagic.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nodist_includeHEADERS: $(nodist_include_HEADERS) @$(NORMAL_INSTALL) @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-nodist_includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) install-binPROGRAMS: install-libLTLIBRARIES installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-am -rm -f $(DEPDIR)/asctime_r.Plo -rm -f $(DEPDIR)/asprintf.Plo -rm -f $(DEPDIR)/ctime_r.Plo -rm -f $(DEPDIR)/dprintf.Plo -rm -f $(DEPDIR)/fmtcheck.Plo -rm -f $(DEPDIR)/getline.Plo -rm -f $(DEPDIR)/getopt_long.Plo -rm -f $(DEPDIR)/gmtime_r.Plo -rm -f $(DEPDIR)/localtime_r.Plo -rm -f $(DEPDIR)/pread.Plo -rm -f $(DEPDIR)/strcasestr.Plo -rm -f $(DEPDIR)/strlcat.Plo -rm -f $(DEPDIR)/strlcpy.Plo -rm -f $(DEPDIR)/vasprintf.Plo -rm -f ./$(DEPDIR)/apprentice.Plo -rm -f ./$(DEPDIR)/apptype.Plo -rm -f ./$(DEPDIR)/ascmagic.Plo -rm -f ./$(DEPDIR)/buffer.Plo -rm -f ./$(DEPDIR)/cdf.Plo -rm -f ./$(DEPDIR)/cdf_time.Plo -rm -f ./$(DEPDIR)/compress.Plo -rm -f ./$(DEPDIR)/der.Plo -rm -f ./$(DEPDIR)/encoding.Plo -rm -f ./$(DEPDIR)/file.Po -rm -f ./$(DEPDIR)/fsmagic.Plo -rm -f ./$(DEPDIR)/funcs.Plo -rm -f ./$(DEPDIR)/is_csv.Plo -rm -f ./$(DEPDIR)/is_json.Plo -rm -f ./$(DEPDIR)/is_simh.Plo -rm -f ./$(DEPDIR)/is_tar.Plo -rm -f ./$(DEPDIR)/magic.Plo -rm -f ./$(DEPDIR)/print.Plo -rm -f ./$(DEPDIR)/readcdf.Plo -rm -f ./$(DEPDIR)/readelf.Plo -rm -f ./$(DEPDIR)/seccomp.Po -rm -f ./$(DEPDIR)/softmagic.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nodist_includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(DEPDIR)/asctime_r.Plo -rm -f $(DEPDIR)/asprintf.Plo -rm -f $(DEPDIR)/ctime_r.Plo -rm -f $(DEPDIR)/dprintf.Plo -rm -f $(DEPDIR)/fmtcheck.Plo -rm -f $(DEPDIR)/getline.Plo -rm -f $(DEPDIR)/getopt_long.Plo -rm -f $(DEPDIR)/gmtime_r.Plo -rm -f $(DEPDIR)/localtime_r.Plo -rm -f $(DEPDIR)/pread.Plo -rm -f $(DEPDIR)/strcasestr.Plo -rm -f $(DEPDIR)/strlcat.Plo -rm -f $(DEPDIR)/strlcpy.Plo -rm -f $(DEPDIR)/vasprintf.Plo -rm -f ./$(DEPDIR)/apprentice.Plo -rm -f ./$(DEPDIR)/apptype.Plo -rm -f ./$(DEPDIR)/ascmagic.Plo -rm -f ./$(DEPDIR)/buffer.Plo -rm -f ./$(DEPDIR)/cdf.Plo -rm -f ./$(DEPDIR)/cdf_time.Plo -rm -f ./$(DEPDIR)/compress.Plo -rm -f ./$(DEPDIR)/der.Plo -rm -f ./$(DEPDIR)/encoding.Plo -rm -f ./$(DEPDIR)/file.Po -rm -f ./$(DEPDIR)/fsmagic.Plo -rm -f ./$(DEPDIR)/funcs.Plo -rm -f ./$(DEPDIR)/is_csv.Plo -rm -f ./$(DEPDIR)/is_json.Plo -rm -f ./$(DEPDIR)/is_simh.Plo -rm -f ./$(DEPDIR)/is_tar.Plo -rm -f ./$(DEPDIR)/magic.Plo -rm -f ./$(DEPDIR)/print.Plo -rm -f ./$(DEPDIR)/readcdf.Plo -rm -f ./$(DEPDIR)/readelf.Plo -rm -f ./$(DEPDIR)/seccomp.Po -rm -f ./$(DEPDIR)/softmagic.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-libLTLIBRARIES \ uninstall-nodist_includeHEADERS .MAKE: all check install install-am install-exec install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man \ install-nodist_includeHEADERS install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-libLTLIBRARIES uninstall-nodist_includeHEADERS .PRECIOUS: Makefile magic.h: ${HDR} sed -e "s/X.YY/$$(echo @VERSION@ | tr -d .)/" < ${HDR} > $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: file-5.46/src/asctime_r.c000664 023540 023540 00000000637 14634602355 017050 0ustar00christoschristos000000 000000 /* $File: asctime_r.c,v 1.3 2022/09/24 20:30:13 christos Exp $ */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: asctime_r.c,v 1.3 2022/09/24 20:30:13 christos Exp $") #endif /* lint */ #include #include /* asctime_r is not thread-safe anyway */ char * asctime_r(const struct tm *t, char *dst) { char *p = asctime(t); if (p == NULL) return NULL; memcpy(dst, p, 26); return dst; } file-5.46/src/asprintf.c000664 023540 023540 00000003423 14634602355 016724 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: asprintf.c,v 1.7 2022/09/24 20:30:13 christos Exp $") #endif int asprintf(char **ptr, const char *fmt, ...) { va_list vargs; int retval; va_start(vargs, fmt); retval = vasprintf(ptr, fmt, vargs); va_end(vargs); return retval; } file-5.46/src/ctime_r.c000664 023540 023540 00000000622 14634602355 016516 0ustar00christoschristos000000 000000 /* $File: ctime_r.c,v 1.3 2022/09/24 20:30:13 christos Exp $ */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: ctime_r.c,v 1.3 2022/09/24 20:30:13 christos Exp $") #endif /* lint */ #include #include /* ctime_r is not thread-safe anyway */ char * ctime_r(const time_t *t, char *dst) { char *p = ctime(t); if (p == NULL) return NULL; memcpy(dst, p, 26); return dst; } file-5.46/src/dprintf.c000664 023540 023540 00000004025 14634602355 016543 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: dprintf.c,v 1.4 2022/09/24 20:30:13 christos Exp $") #endif /* lint */ #include #include #include #include int dprintf(int fd, const char *fmt, ...) { va_list ap; /* Simpler than using vasprintf() here, since we never need more */ char buf[1024]; int len; va_start(ap, fmt); len = vsnprintf(buf, sizeof(buf), fmt, ap); va_end(ap); if ((size_t)len >= sizeof(buf)) return -1; if (write(fd, buf, (size_t)len) != len) return -1; return len; } file-5.46/src/fmtcheck.c000664 023540 023540 00000013004 14634602355 016656 0ustar00christoschristos000000 000000 /* $NetBSD: fmtcheck.c,v 1.8 2008/04/28 20:22:59 martin Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. * All rights reserved. * * This code was contributed to The NetBSD Foundation by Allen Briggs. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: fmtcheck.c,v 1.6 2022/09/24 20:30:13 christos Exp $") #endif /* lint */ #include #include #include enum __e_fmtcheck_types { FMTCHECK_START, FMTCHECK_SHORT, FMTCHECK_INT, FMTCHECK_LONG, FMTCHECK_QUAD, FMTCHECK_SHORTPOINTER, FMTCHECK_INTPOINTER, FMTCHECK_LONGPOINTER, FMTCHECK_QUADPOINTER, FMTCHECK_DOUBLE, FMTCHECK_LONGDOUBLE, FMTCHECK_STRING, FMTCHECK_WIDTH, FMTCHECK_PRECISION, FMTCHECK_DONE, FMTCHECK_UNKNOWN }; typedef enum __e_fmtcheck_types EFT; #define RETURN(pf,f,r) do { \ *(pf) = (f); \ return r; \ } /*NOTREACHED*/ /*CONSTCOND*/ while (0) static EFT get_next_format_from_precision(const char **pf) { int sh, lg, quad, longdouble; const char *f; sh = lg = quad = longdouble = 0; f = *pf; switch (*f) { case 'h': f++; sh = 1; break; case 'l': f++; if (!*f) RETURN(pf,f,FMTCHECK_UNKNOWN); if (*f == 'l') { f++; quad = 1; } else { lg = 1; } break; case 'q': f++; quad = 1; break; case 'L': f++; longdouble = 1; break; #ifdef WIN32 case 'I': f++; if (!*f) RETURN(pf,f,FMTCHECK_UNKNOWN); if (*f == '3' && f[1] == '2') { f += 2; } else if (*f == '6' && f[1] == '4') { f += 2; quad = 1; } #ifdef _WIN64 else { quad = 1; } #endif break; #endif default: break; } if (!*f) RETURN(pf,f,FMTCHECK_UNKNOWN); if (strchr("diouxX", *f)) { if (longdouble) RETURN(pf,f,FMTCHECK_UNKNOWN); if (lg) RETURN(pf,f,FMTCHECK_LONG); if (quad) RETURN(pf,f,FMTCHECK_QUAD); RETURN(pf,f,FMTCHECK_INT); } if (*f == 'n') { if (longdouble) RETURN(pf,f,FMTCHECK_UNKNOWN); if (sh) RETURN(pf,f,FMTCHECK_SHORTPOINTER); if (lg) RETURN(pf,f,FMTCHECK_LONGPOINTER); if (quad) RETURN(pf,f,FMTCHECK_QUADPOINTER); RETURN(pf,f,FMTCHECK_INTPOINTER); } if (strchr("DOU", *f)) { if (sh + lg + quad + longdouble) RETURN(pf,f,FMTCHECK_UNKNOWN); RETURN(pf,f,FMTCHECK_LONG); } if (strchr("eEfg", *f)) { if (longdouble) RETURN(pf,f,FMTCHECK_LONGDOUBLE); if (sh + lg + quad) RETURN(pf,f,FMTCHECK_UNKNOWN); RETURN(pf,f,FMTCHECK_DOUBLE); } if (*f == 'c') { if (sh + lg + quad + longdouble) RETURN(pf,f,FMTCHECK_UNKNOWN); RETURN(pf,f,FMTCHECK_INT); } if (*f == 's') { if (sh + lg + quad + longdouble) RETURN(pf,f,FMTCHECK_UNKNOWN); RETURN(pf,f,FMTCHECK_STRING); } if (*f == 'p') { if (sh + lg + quad + longdouble) RETURN(pf,f,FMTCHECK_UNKNOWN); RETURN(pf,f,FMTCHECK_LONG); } RETURN(pf,f,FMTCHECK_UNKNOWN); /*NOTREACHED*/ } static EFT get_next_format_from_width(const char **pf) { const char *f; f = *pf; if (*f == '.') { f++; if (*f == '*') { RETURN(pf,f,FMTCHECK_PRECISION); } /* eat any precision (empty is allowed) */ while (isdigit((unsigned char)*f)) f++; if (!*f) RETURN(pf,f,FMTCHECK_UNKNOWN); } RETURN(pf,f,get_next_format_from_precision(pf)); /*NOTREACHED*/ } static EFT get_next_format(const char **pf, EFT eft) { int infmt; const char *f; if (eft == FMTCHECK_WIDTH) { (*pf)++; return get_next_format_from_width(pf); } else if (eft == FMTCHECK_PRECISION) { (*pf)++; return get_next_format_from_precision(pf); } f = *pf; infmt = 0; while (!infmt) { f = strchr(f, '%'); if (f == NULL) RETURN(pf,f,FMTCHECK_DONE); f++; if (!*f) RETURN(pf,f,FMTCHECK_UNKNOWN); if (*f != '%') infmt = 1; else f++; } /* Eat any of the flags */ while (*f && (strchr("#0- +", *f))) f++; if (*f == '*') { RETURN(pf,f,FMTCHECK_WIDTH); } /* eat any width */ while (isdigit((unsigned char)*f)) f++; if (!*f) { RETURN(pf,f,FMTCHECK_UNKNOWN); } RETURN(pf,f,get_next_format_from_width(pf)); /*NOTREACHED*/ } const char * fmtcheck(const char *f1, const char *f2) { const char *f1p, *f2p; EFT f1t, f2t; if (!f1) return f2; f1p = f1; f1t = FMTCHECK_START; f2p = f2; f2t = FMTCHECK_START; while ((f1t = get_next_format(&f1p, f1t)) != FMTCHECK_DONE) { if (f1t == FMTCHECK_UNKNOWN) return f2; f2t = get_next_format(&f2p, f2t); if (f1t != f2t) return f2; } return f1; } file-5.46/src/getline.c000664 023540 023540 00000005404 14634602355 016526 0ustar00christoschristos000000 000000 /* $NetBSD: getline.c,v 1.2 2014/09/16 17:23:50 christos Exp $ */ /*- * Copyright (c) 2011 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Christos Zoulas. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include "file.h" #if !HAVE_GETLINE #include #include #include #include #include file_public ssize_t getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp) { char *ptr, *eptr; if (*buf == NULL || *bufsiz == 0) { *bufsiz = BUFSIZ; if ((*buf = malloc(*bufsiz)) == NULL) return -1; } for (ptr = *buf, eptr = *buf + *bufsiz;;) { int c = fgetc(fp); if (c == -1) { if (feof(fp)) { ssize_t diff = (ssize_t)(ptr - *buf); if (diff != 0) { *ptr = '\0'; return diff; } } return -1; } *ptr++ = c; if (c == delimiter) { *ptr = '\0'; return ptr - *buf; } if (ptr + 2 >= eptr) { char *nbuf; size_t nbufsiz = *bufsiz * 2; ssize_t d = ptr - *buf; if ((nbuf = realloc(*buf, nbufsiz)) == NULL) return -1; *buf = nbuf; *bufsiz = nbufsiz; eptr = nbuf + nbufsiz; ptr = nbuf + d; } } } file_public ssize_t getline(char **buf, size_t *bufsiz, FILE *fp) { return getdelim(buf, bufsiz, '\n', fp); } #endif #ifdef TEST int main(int argc, char *argv[]) { char *p = NULL; ssize_t len; size_t n = 0; while ((len = getline(&p, &n, stdin)) != -1) (void)printf("%" SIZE_T_FORMAT "d %s", len, p); free(p); return 0; } #endif file-5.46/src/getopt_long.c000664 023540 023540 00000031017 14634602355 017417 0ustar00christoschristos000000 000000 /* $NetBSD: getopt_long.c,v 1.21.4.1 2008/01/09 01:34:14 matt Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Dieter Baron and Thomas Klausner. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: getopt_long.c,v 1.9 2022/09/24 20:30:13 christos Exp $") #endif /* lint */ #include #ifdef HAVE_ERR_H #include #else #define warnx printf #endif #include #if defined(HAVE_GETOPT_H) && defined(HAVE_STRUCT_OPTION) #include #else #include "mygetopt.h" #endif #include #include #define REPLACE_GETOPT #ifndef _DIAGASSERT #define _DIAGASSERT assert #endif #ifdef REPLACE_GETOPT #ifdef __weak_alias __weak_alias(getopt,_getopt) #endif int opterr = 1; /* if error message should be printed */ int optind = 1; /* index into parent argv vector */ int optopt = '?'; /* character checked for validity */ int optreset; /* reset getopt */ char *optarg; /* argument associated with option */ #elif HAVE_NBTOOL_CONFIG_H && !HAVE_DECL_OPTRESET static int optreset; #endif #ifdef __weak_alias __weak_alias(getopt_long,_getopt_long) #endif #define IGNORE_FIRST (*options == '-' || *options == '+') #define PRINT_ERROR ((opterr) && ((*options != ':') \ || (IGNORE_FIRST && options[1] != ':'))) #define IS_POSIXLY_CORRECT (getenv("POSIXLY_CORRECT") != NULL) #define PERMUTE (!IS_POSIXLY_CORRECT && !IGNORE_FIRST) /* XXX: GNU ignores PC if *options == '-' */ #define IN_ORDER (!IS_POSIXLY_CORRECT && *options == '-') /* return values */ #define BADCH (int)'?' #define BADARG ((IGNORE_FIRST && options[1] == ':') \ || (*options == ':') ? (int)':' : (int)'?') #define INORDER (int)1 #define EMSG "" static int getopt_internal(int, char **, const char *); static int gcd(int, int); static void permute_args(int, int, int, char **); static const char *place = EMSG; /* option letter processing */ /* XXX: set optreset to 1 rather than these two */ static int nonopt_start = -1; /* first non option argument (for permute) */ static int nonopt_end = -1; /* first option after non options (for permute) */ /* Error messages */ static const char recargchar[] = "option requires an argument -- %c"; static const char recargstring[] = "option requires an argument -- %s"; static const char ambig[] = "ambiguous option -- %.*s"; static const char noarg[] = "option doesn't take an argument -- %.*s"; static const char illoptchar[] = "unknown option -- %c"; static const char illoptstring[] = "unknown option -- %s"; /* * Compute the greatest common divisor of a and b. */ static int gcd(a, b) int a; int b; { int c; c = a % b; while (c != 0) { a = b; b = c; c = a % b; } return b; } /* * Exchange the block from nonopt_start to nonopt_end with the block * from nonopt_end to opt_end (keeping the same order of arguments * in each block). */ static void permute_args(panonopt_start, panonopt_end, opt_end, nargv) int panonopt_start; int panonopt_end; int opt_end; char **nargv; { int cstart, cyclelen, i, j, ncycle, nnonopts, nopts, pos; char *swap; _DIAGASSERT(nargv != NULL); /* * compute lengths of blocks and number and size of cycles */ nnonopts = panonopt_end - panonopt_start; nopts = opt_end - panonopt_end; ncycle = gcd(nnonopts, nopts); cyclelen = (opt_end - panonopt_start) / ncycle; for (i = 0; i < ncycle; i++) { cstart = panonopt_end+i; pos = cstart; for (j = 0; j < cyclelen; j++) { if (pos >= panonopt_end) pos -= nnonopts; else pos += nopts; swap = nargv[pos]; nargv[pos] = nargv[cstart]; nargv[cstart] = swap; } } } /* * getopt_internal -- * Parse argc/argv argument vector. Called by user level routines. * Returns -2 if -- is found (can be long option or end of options marker). */ static int getopt_internal(nargc, nargv, options) int nargc; char **nargv; const char *options; { char *oli; /* option letter list index */ int optchar; _DIAGASSERT(nargv != NULL); _DIAGASSERT(options != NULL); optarg = NULL; /* * XXX Some programs (like rsyncd) expect to be able to * XXX re-initialize optind to 0 and have getopt_long(3) * XXX properly function again. Work around this braindamage. */ if (optind == 0) optind = 1; if (optreset) nonopt_start = nonopt_end = -1; start: if (optreset || !*place) { /* update scanning pointer */ optreset = 0; if (optind >= nargc) { /* end of argument vector */ place = EMSG; if (nonopt_end != -1) { /* do permutation, if we have to */ permute_args(nonopt_start, nonopt_end, optind, nargv); optind -= nonopt_end - nonopt_start; } else if (nonopt_start != -1) { /* * If we skipped non-options, set optind * to the first of them. */ optind = nonopt_start; } nonopt_start = nonopt_end = -1; return -1; } if ((*(place = nargv[optind]) != '-') || (place[1] == '\0')) { /* found non-option */ place = EMSG; if (IN_ORDER) { /* * GNU extension: * return non-option as argument to option 1 */ optarg = nargv[optind++]; return INORDER; } if (!PERMUTE) { /* * if no permutation wanted, stop parsing * at first non-option */ return -1; } /* do permutation */ if (nonopt_start == -1) nonopt_start = optind; else if (nonopt_end != -1) { permute_args(nonopt_start, nonopt_end, optind, nargv); nonopt_start = optind - (nonopt_end - nonopt_start); nonopt_end = -1; } optind++; /* process next argument */ goto start; } if (nonopt_start != -1 && nonopt_end == -1) nonopt_end = optind; if (place[1] && *++place == '-') { /* found "--" */ place++; return -2; } } if ((optchar = (int)*place++) == (int)':' || (oli = strchr(options + (IGNORE_FIRST ? 1 : 0), optchar)) == NULL) { /* option letter unknown or ':' */ if (!*place) ++optind; if (PRINT_ERROR) warnx(illoptchar, optchar); optopt = optchar; return BADCH; } if (optchar == 'W' && oli[1] == ';') { /* -W long-option */ /* XXX: what if no long options provided (called by getopt)? */ if (*place) return -2; if (++optind >= nargc) { /* no arg */ place = EMSG; if (PRINT_ERROR) warnx(recargchar, optchar); optopt = optchar; return BADARG; } else /* white space */ place = nargv[optind]; /* * Handle -W arg the same as --arg (which causes getopt to * stop parsing). */ return -2; } if (*++oli != ':') { /* doesn't take argument */ if (!*place) ++optind; } else { /* takes (optional) argument */ optarg = NULL; if (*place) /* no white space */ optarg = (char *)place; /* XXX: disable test for :: if PC? (GNU doesn't) */ else if (oli[1] != ':') { /* arg not optional */ if (++optind >= nargc) { /* no arg */ place = EMSG; if (PRINT_ERROR) warnx(recargchar, optchar); optopt = optchar; return BADARG; } else optarg = nargv[optind]; } place = EMSG; ++optind; } /* dump back option letter */ return optchar; } #ifdef REPLACE_GETOPT /* * getopt -- * Parse argc/argv argument vector. * * [eventually this will replace the real getopt] */ int getopt(nargc, nargv, options) int nargc; char * const *nargv; const char *options; { int retval; _DIAGASSERT(nargv != NULL); _DIAGASSERT(options != NULL); retval = getopt_internal(nargc, (char **)nargv, options); if (retval == -2) { ++optind; /* * We found an option (--), so if we skipped non-options, * we have to permute. */ if (nonopt_end != -1) { permute_args(nonopt_start, nonopt_end, optind, (char **)nargv); optind -= nonopt_end - nonopt_start; } nonopt_start = nonopt_end = -1; retval = -1; } return retval; } #endif /* * getopt_long -- * Parse argc/argv argument vector. */ int getopt_long(nargc, nargv, options, long_options, idx) int nargc; char * const *nargv; const char *options; const struct option *long_options; int *idx; { int retval; #define IDENTICAL_INTERPRETATION(_x, _y) \ (long_options[(_x)].has_arg == long_options[(_y)].has_arg && \ long_options[(_x)].flag == long_options[(_y)].flag && \ long_options[(_x)].val == long_options[(_y)].val) _DIAGASSERT(nargv != NULL); _DIAGASSERT(options != NULL); _DIAGASSERT(long_options != NULL); /* idx may be NULL */ retval = getopt_internal(nargc, (char **)nargv, options); if (retval == -2) { char *current_argv, *has_equal; size_t current_argv_len; int i, ambiguous, match; current_argv = (char *)place; match = -1; ambiguous = 0; optind++; place = EMSG; if (*current_argv == '\0') { /* found "--" */ /* * We found an option (--), so if we skipped * non-options, we have to permute. */ if (nonopt_end != -1) { permute_args(nonopt_start, nonopt_end, optind, (char **)nargv); optind -= nonopt_end - nonopt_start; } nonopt_start = nonopt_end = -1; return -1; } if ((has_equal = strchr(current_argv, '=')) != NULL) { /* argument found (--option=arg) */ current_argv_len = has_equal - current_argv; has_equal++; } else current_argv_len = strlen(current_argv); for (i = 0; long_options[i].name; i++) { /* find matching long option */ if (strncmp(current_argv, long_options[i].name, current_argv_len)) continue; if (strlen(long_options[i].name) == (unsigned)current_argv_len) { /* exact match */ match = i; ambiguous = 0; break; } if (match == -1) /* partial match */ match = i; else if (!IDENTICAL_INTERPRETATION(i, match)) ambiguous = 1; } if (ambiguous) { /* ambiguous abbreviation */ if (PRINT_ERROR) warnx(ambig, (int)current_argv_len, current_argv); optopt = 0; return BADCH; } if (match != -1) { /* option found */ if (long_options[match].has_arg == no_argument && has_equal) { if (PRINT_ERROR) warnx(noarg, (int)current_argv_len, current_argv); /* * XXX: GNU sets optopt to val regardless of * flag */ if (long_options[match].flag == NULL) optopt = long_options[match].val; else optopt = 0; return BADARG; } if (long_options[match].has_arg == required_argument || long_options[match].has_arg == optional_argument) { if (has_equal) optarg = has_equal; else if (long_options[match].has_arg == required_argument) { /* * optional argument doesn't use * next nargv */ optarg = nargv[optind++]; } } if ((long_options[match].has_arg == required_argument) && (optarg == NULL)) { /* * Missing argument; leading ':' * indicates no error should be generated */ if (PRINT_ERROR) warnx(recargstring, current_argv); /* * XXX: GNU sets optopt to val regardless * of flag */ if (long_options[match].flag == NULL) optopt = long_options[match].val; else optopt = 0; --optind; return BADARG; } } else { /* unknown option */ if (PRINT_ERROR) warnx(illoptstring, current_argv); optopt = 0; return BADCH; } if (long_options[match].flag) { *long_options[match].flag = long_options[match].val; retval = 0; } else retval = long_options[match].val; if (idx) *idx = match; } return retval; #undef IDENTICAL_INTERPRETATION } file-5.46/src/gmtime_r.c000664 023540 023540 00000000664 14634602355 016705 0ustar00christoschristos000000 000000 /* $File: gmtime_r.c,v 1.4 2022/09/24 20:30:13 christos Exp $ */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: gmtime_r.c,v 1.4 2022/09/24 20:30:13 christos Exp $") #endif /* lint */ #include #include /* asctime_r is not thread-safe anyway */ struct tm * gmtime_r(const time_t *t, struct tm *tm) { struct tm *tmp = gmtime(t); if (tmp == NULL) return NULL; memcpy(tm, tmp, sizeof(*tm)); return tmp; } file-5.46/src/localtime_r.c000664 023540 023540 00000000700 14634602355 017363 0ustar00christoschristos000000 000000 /* $File: localtime_r.c,v 1.4 2022/09/24 20:30:13 christos Exp $ */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: localtime_r.c,v 1.4 2022/09/24 20:30:13 christos Exp $") #endif /* lint */ #include #include /* asctime_r is not thread-safe anyway */ struct tm * localtime_r(const time_t *t, struct tm *tm) { struct tm *tmp = localtime(t); if (tmp == NULL) return NULL; memcpy(tm, tmp, sizeof(*tm)); return tmp; } file-5.46/src/pread.c000664 023540 023540 00000000650 14634602355 016170 0ustar00christoschristos000000 000000 #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: pread.c,v 1.5 2022/09/24 20:30:13 christos Exp $") #endif /* lint */ #include #include ssize_t pread(int fd, void *buf, size_t len, off_t off) { off_t old; ssize_t rv; if ((old = lseek(fd, off, SEEK_SET)) == -1) return -1; if ((rv = read(fd, buf, len)) == -1) return -1; if (lseek(fd, old, SEEK_SET) == -1) return -1; return rv; } file-5.46/src/strcasestr.c000664 023540 023540 00000005413 14634602355 017274 0ustar00christoschristos000000 000000 /* $NetBSD: strcasestr.c,v 1.3 2005/11/29 03:12:00 christos Exp $ */ /*- * Copyright (c) 1990, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Chris Torek. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #if defined(LIBC_SCCS) && !defined(lint) __RCSID("$NetBSD: strcasestr.c,v 1.3 2005/11/29 03:12:00 christos Exp $"); __RCSID("$NetBSD: strncasecmp.c,v 1.2 2007/06/04 18:19:27 christos Exp $"); #endif /* LIBC_SCCS and not lint */ #include "file.h" #include #include #include static int _strncasecmp(const char *s1, const char *s2, size_t n) { if (n != 0) { const unsigned char *us1 = (const unsigned char *)s1, *us2 = (const unsigned char *)s2; do { if (tolower(*us1) != tolower(*us2++)) return tolower(*us1) - tolower(*--us2); if (*us1++ == '\0') break; } while (--n != 0); } return 0; } /* * Find the first occurrence of find in s, ignore case. */ char * strcasestr(const char *s, const char *find) { char c, sc; size_t len; if ((c = *find++) != 0) { c = tolower((unsigned char)c); len = strlen(find); do { do { if ((sc = *s++) == 0) return (NULL); } while ((char)tolower((unsigned char)sc) != c); } while (_strncasecmp(s, find, len) != 0); s--; } return (char *)(intptr_t)(s); } file-5.46/src/strlcat.c000664 023540 023540 00000003470 14634602355 016554 0ustar00christoschristos000000 000000 /* $OpenBSD: strlcat.c,v 1.13 2005/08/08 08:05:37 espie Exp $ */ /* * Copyright (c) 1998 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* OPENBSD ORIGINAL: lib/libc/string/strlcat.c */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: strlcat.c,v 1.5 2022/09/24 20:30:13 christos Exp $") #endif #include #include /* * Appends src to string dst of size siz (unlike strncat, siz is the * full size of dst, not space left). At most siz-1 characters * will be copied. Always NUL terminates (unless siz <= strlen(dst)). * Returns strlen(src) + MIN(siz, strlen(initial dst)). * If retval >= siz, truncation occurred. */ size_t strlcat(char *dst, const char *src, size_t siz) { char *d = dst; const char *s = src; size_t n = siz; size_t dlen; /* Find the end of dst and adjust bytes left but don't go past end */ while (n-- != 0 && *d != '\0') d++; dlen = d - dst; n = siz - dlen; if (n == 0) return(dlen + strlen(s)); while (*s != '\0') { if (n != 1) { *d++ = *s; n--; } s++; } *d = '\0'; return(dlen + (s - src)); /* count does not include NUL */ } file-5.46/src/strlcpy.c000664 023540 023540 00000003311 14634602355 016572 0ustar00christoschristos000000 000000 /* $OpenBSD: strlcpy.c,v 1.10 2005/08/08 08:05:37 espie Exp $ */ /* * Copyright (c) 1998 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* OPENBSD ORIGINAL: lib/libc/string/strlcpy.c */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: strlcpy.c,v 1.5 2022/09/24 20:30:13 christos Exp $") #endif #include #include /* * Copy src to string dst of size siz. At most siz-1 characters * will be copied. Always NUL terminates (unless siz == 0). * Returns strlen(src); if retval >= siz, truncation occurred. */ size_t strlcpy(char *dst, const char *src, size_t siz) { char *d = dst; const char *s = src; size_t n = siz; /* Copy as many bytes as will fit */ if (n != 0 && --n != 0) { do { if ((*d++ = *s++) == 0) break; } while (--n != 0); } /* Not enough room in dst, add NUL and traverse rest of src */ if (n == 0) { if (siz != 0) *d = '\0'; /* NUL-terminate dst */ while (*s++) ; } return(s - src - 1); /* count does not include NUL */ } file-5.46/src/vasprintf.c000664 023540 023540 00000046236 14634602355 017123 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /*########################################################################### # # # vasprintf # # # # Copyright (c) 2002-2005 David TAILLANDIER # # # ###########################################################################*/ /* This software is distributed under the "modified BSD licence". This software is also released with GNU license (GPL) in another file (same source-code, only license differ). Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ==================== Hacked from xnprintf version of 26th February 2005 to provide only vasprintf by Reuben Thomas . ==================== 'printf' function family use the following format string: %[flag][width][.prec][modifier]type %% is the escape sequence to print a '%' % followed by an unknown format will print the characters without trying to do any interpretation flag: none + - # (blank) width: n 0n * prec: none .0 .n .* modifier: F N L h l ll z t ('F' and 'N' are ms-dos/16-bit specific) type: d i o u x X f e g E G c s p n The function needs to allocate memory to store the full text before to actually writing it. i.e if you want to fnprintf() 1000 characters, the functions will allocate 1000 bytes. This behaviour can be modified: you have to customise the code to flush the internal buffer (writing to screen or file) when it reach a given size. Then the buffer can have a shorter length. But what? If you really need to write HUGE string, don't use printf! During the process, some other memory is allocated (1024 bytes minimum) to handle the output of partial sprintf() calls. If you have only 10000 bytes free in memory, you *may* not be able to nprintf() an 8000 bytes-long text. note: if a buffer overflow occurs, exit() is called. This situation should never appear ... but if you want to be *really* sure, you have to modify the code to handle those situations (only one place to modify). A buffer overflow can only occur if your sprintf() do strange things or when you use strange formats. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: vasprintf.c,v 1.23 2022/09/24 20:30:13 christos Exp $") #endif /* lint */ #include #include #include #include #include #include #include #define ALLOC_CHUNK 2048 #define ALLOC_SECURITY_MARGIN 1024 /* big value because some platforms have very big 'G' exponent */ #if ALLOC_CHUNK < ALLOC_SECURITY_MARGIN # error !!! ALLOC_CHUNK < ALLOC_SECURITY_MARGIN !!! #endif /* note: to have some interest, ALLOC_CHUNK should be much greater than ALLOC_SECURITY_MARGIN */ /* * To save a lot of push/pop, every variable are stored into this * structure, which is passed among nearly every sub-functions. */ typedef struct { const char * src_string; /* current position into input string */ char * buffer_base; /* output buffer */ char * dest_string; /* current position into output string */ size_t buffer_len; /* length of output buffer */ size_t real_len; /* real current length of output text */ size_t pseudo_len; /* total length of output text if it were not limited in size */ size_t maxlen; va_list vargs; /* pointer to current position into vargs */ } xprintf_struct; /* * Realloc buffer if needed * Return value: 0 = ok * EOF = not enough memory */ static int realloc_buff(xprintf_struct *s, size_t len) { char * ptr; if (len + ALLOC_SECURITY_MARGIN + s->real_len > s->buffer_len) { len += s->real_len + ALLOC_CHUNK; ptr = (char *)realloc((void *)(s->buffer_base), len); if (ptr == NULL) { s->buffer_base = NULL; return EOF; } s->dest_string = ptr + (size_t)(s->dest_string - s->buffer_base); s->buffer_base = ptr; s->buffer_len = len; (s->buffer_base)[s->buffer_len - 1] = 1; /* overflow marker */ } return 0; } /* * Prints 'usual' characters up to next '%' * or up to end of text */ static int usual_char(xprintf_struct * s) { size_t len; len = strcspn(s->src_string, "%"); /* reaches the next '%' or end of input string */ /* note: 'len' is never 0 because the presence of '%' */ /* or end-of-line is checked in the calling function */ if (realloc_buff(s,len) == EOF) return EOF; memcpy(s->dest_string, s->src_string, len); s->src_string += len; s->dest_string += len; s->real_len += len; s->pseudo_len += len; return 0; } /* * Return value: 0 = ok * EOF = error */ static int print_it(xprintf_struct *s, size_t approx_len, const char *format_string, ...) { va_list varg; int vsprintf_len; size_t len; if (realloc_buff(s,approx_len) == EOF) return EOF; va_start(varg, format_string); vsprintf_len = vsprintf(s->dest_string, format_string, varg); va_end(varg); /* Check for overflow */ assert((s->buffer_base)[s->buffer_len - 1] == 1); if (vsprintf_len == EOF) /* must be done *after* overflow-check */ return EOF; s->pseudo_len += vsprintf_len; len = strlen(s->dest_string); s->real_len += len; s->dest_string += len; return 0; } /* * Prints a string (%s) * We need special handling because: * a: the length of the string is unknown * b: when .prec is used, we must not access any extra byte of the * string (of course, if the original sprintf() does... what the * hell, not my problem) * * Return value: 0 = ok * EOF = error */ static int type_s(xprintf_struct *s, int width, int prec, const char *format_string, const char *arg_string) { size_t string_len; if (arg_string == NULL) return print_it(s, (size_t)6, "(null)", 0); /* hand-made strlen() which stops when 'prec' is reached. */ /* if 'prec' is -1 then it is never reached. */ string_len = 0; while (arg_string[string_len] != 0 && (size_t)prec != string_len) string_len++; if (width != -1 && string_len < (size_t)width) string_len = (size_t)width; return print_it(s, string_len, format_string, arg_string); } /* * Read a series of digits. Stop when non-digit is found. * Return value: the value read (between 0 and 32767). * Note: no checks are made against overflow. If the string contain a big * number, then the return value won't be what we want (but, in this case, * the programmer don't know whatr he wants, then no problem). */ static int getint(const char **string) { int i = 0; while (isdigit((unsigned char)**string) != 0) { i = i * 10 + (**string - '0'); (*string)++; } if (i < 0 || i > 32767) i = 32767; /* if we have i==-10 this is not because the number is */ /* negative; this is because the number is big */ return i; } /* * Read a part of the format string. A part is 'usual characters' (ie "blabla") * or '%%' escape sequence (to print a single '%') or any combination of * format specifier (ie "%i" or "%10.2d"). * After the current part is managed, the function returns to caller with * everything ready to manage the following part. * The caller must ensure than the string is not empty, i.e. the first byte * is not zero. * * Return value: 0 = ok * EOF = error */ static int dispatch(xprintf_struct *s) { const char *initial_ptr; char format_string[24]; /* max length may be something like "% +-#032768.32768Ld" */ char *format_ptr; int flag_plus, flag_minus, flag_space, flag_sharp, flag_zero; int width, prec, modifier, approx_width; char type; /* most of those variables are here to rewrite the format string */ #define SRCTXT (s->src_string) #define DESTTXT (s->dest_string) /* incoherent format string. Characters after the '%' will be printed with the next call */ #define INCOHERENT() do {SRCTXT=initial_ptr; return 0;} while (0) /* do/while to avoid */ #define INCOHERENT_TEST() do {if(*SRCTXT==0) INCOHERENT();} while (0) /* a null statement */ /* 'normal' text */ if (*SRCTXT != '%') return usual_char(s); /* we then have a '%' */ SRCTXT++; /* don't check for end-of-string ; this is done later */ /* '%%' escape sequence */ if (*SRCTXT == '%') { if (realloc_buff(s, (size_t)1) == EOF) /* because we can have "%%%%%%%%..." */ return EOF; *DESTTXT = '%'; DESTTXT++; SRCTXT++; (s->real_len)++; (s->pseudo_len)++; return 0; } /* '%' managing */ initial_ptr = SRCTXT; /* save current pointer in case of incorrect */ /* 'decoding'. Points just after the '%' so the '%' */ /* won't be printed in any case, as required. */ /* flag */ flag_plus = flag_minus = flag_space = flag_sharp = flag_zero = 0; for (;; SRCTXT++) { if (*SRCTXT == ' ') flag_space = 1; else if (*SRCTXT == '+') flag_plus = 1; else if (*SRCTXT == '-') flag_minus = 1; else if (*SRCTXT == '#') flag_sharp = 1; else if (*SRCTXT == '0') flag_zero = 1; else break; } INCOHERENT_TEST(); /* here is the first test for end of string */ /* width */ if (*SRCTXT == '*') { /* width given by next argument */ SRCTXT++; width = va_arg(s->vargs, int); if ((size_t)width > 0x3fffU) /* 'size_t' to check against negative values too */ width = 0x3fff; } else if (isdigit((unsigned char)*SRCTXT)) /* width given as ASCII number */ width = getint(&SRCTXT); else width = -1; /* no width specified */ INCOHERENT_TEST(); /* .prec */ if (*SRCTXT == '.') { SRCTXT++; if (*SRCTXT == '*') { /* .prec given by next argument */ SRCTXT++; prec = va_arg(s->vargs, int); if ((size_t)prec >= 0x3fffU) /* 'size_t' to check against negative values too */ prec = 0x3fff; } else { /* .prec given as ASCII number */ if (isdigit((unsigned char)*SRCTXT) == 0) INCOHERENT(); prec = getint(&SRCTXT); } INCOHERENT_TEST(); } else prec = -1; /* no .prec specified */ /* modifier */ switch (*SRCTXT) { case 'L': case 'h': case 'l': case 'z': case 't': modifier = *SRCTXT; SRCTXT++; if (modifier=='l' && *SRCTXT=='l') { SRCTXT++; modifier = 'L'; /* 'll' == 'L' long long == long double */ } /* only for compatibility ; not portable */ INCOHERENT_TEST(); break; default: modifier = -1; /* no modifier specified */ break; } /* type */ type = *SRCTXT; if (strchr("diouxXfegEGcspn",type) == NULL) INCOHERENT(); /* unknown type */ SRCTXT++; /* rewrite format-string */ format_string[0] = '%'; format_ptr = &(format_string[1]); if (flag_plus) { *format_ptr = '+'; format_ptr++; } if (flag_minus) { *format_ptr = '-'; format_ptr++; } if (flag_space) { *format_ptr = ' '; format_ptr++; } if (flag_sharp) { *format_ptr = '#'; format_ptr++; } if (flag_zero) { *format_ptr = '0'; format_ptr++; } /* '0' *must* be the last one */ if (width != -1) { sprintf(format_ptr, "%i", width); format_ptr += strlen(format_ptr); } if (prec != -1) { *format_ptr = '.'; format_ptr++; sprintf(format_ptr, "%i", prec); format_ptr += strlen(format_ptr); } if (modifier != -1) { if (modifier == 'L' && strchr("diouxX",type) != NULL) { *format_ptr = 'l'; format_ptr++; *format_ptr = 'l'; format_ptr++; } else { *format_ptr = modifier; format_ptr++; } } *format_ptr = type; format_ptr++; *format_ptr = 0; /* vague approximation of minimal length if width or prec are specified */ approx_width = width + prec; if (approx_width < 0) /* because width == -1 and/or prec == -1 */ approx_width = 0; switch (type) { /* int */ case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': switch (modifier) { case -1 : return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, int)); case 'L': return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, long long int)); case 'l': return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, long int)); case 'h': return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, int)); case 'z': return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, size_t)); case 't': return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, ptrdiff_t)); /* 'int' instead of 'short int' because default promotion is 'int' */ default: INCOHERENT(); } /* char */ case 'c': if (modifier != -1) INCOHERENT(); return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, int)); /* 'int' instead of 'char' because default promotion is 'int' */ /* math */ case 'e': case 'f': case 'g': case 'E': case 'G': switch (modifier) { case -1 : /* because of default promotion, no modifier means 'l' */ case 'l': return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, double)); case 'L': return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, long double)); default: INCOHERENT(); } /* string */ case 's': return type_s(s, width, prec, format_string, va_arg(s->vargs, const char*)); /* pointer */ case 'p': if (modifier == -1) return print_it(s, (size_t)approx_width, format_string, va_arg(s->vargs, void *)); INCOHERENT(); /* store */ case 'n': if (modifier == -1) { int * p; p = va_arg(s->vargs, int *); if (p != NULL) { *p = s->pseudo_len; return 0; } return EOF; } INCOHERENT(); } /* switch */ INCOHERENT(); /* unknown type */ #undef INCOHERENT #undef INCOHERENT_TEST #undef SRCTXT #undef DESTTXT } /* * Return value: number of *virtually* written characters * EOF = error */ static int core(xprintf_struct *s) { size_t save_len; char *dummy_base; /* basic checks */ if ((int)(s->maxlen) <= 0) /* 'int' to check against some conversion */ return EOF; /* error for example if value is (int)-10 */ s->maxlen--; /* because initial maxlen counts final 0 */ /* note: now 'maxlen' _can_ be zero */ if (s->src_string == NULL) s->src_string = "(null)"; /* struct init and memory allocation */ s->buffer_base = NULL; s->buffer_len = 0; s->real_len = 0; s->pseudo_len = 0; if (realloc_buff(s, (size_t)0) == EOF) return EOF; s->dest_string = s->buffer_base; /* process source string */ for (;;) { /* up to end of source string */ if (*(s->src_string) == 0) { *(s->dest_string) = '\0'; /* final NUL */ break; } if (dispatch(s) == EOF) goto free_EOF; /* up to end of dest string */ if (s->real_len >= s->maxlen) { (s->buffer_base)[s->maxlen] = '\0'; /* final NUL */ break; } } /* for (v)asnprintf */ dummy_base = s->buffer_base + s->real_len; save_len = s->real_len; /* process the remaining of source string to compute 'pseudo_len'. We * overwrite again and again, starting at 'dummy_base' because we don't * need the text, only char count. */ while(*(s->src_string) != 0) { /* up to end of source string */ s->real_len = 0; s->dest_string = dummy_base; if (dispatch(s) == EOF) goto free_EOF; } s->buffer_base = (char *)realloc((void *)(s->buffer_base), save_len + 1); if (s->buffer_base == NULL) return EOF; /* should rarely happen because we shrink the buffer */ return s->pseudo_len; free_EOF: free(s->buffer_base); return EOF; } int vasprintf(char **ptr, const char *format_string, va_list vargs) { xprintf_struct s; int retval; memset(&s, 0, sizeof(s)); s.src_string = format_string; #ifdef va_copy va_copy (s.vargs, vargs); #else # ifdef __va_copy __va_copy (s.vargs, vargs); # else # ifdef WIN32 s.vargs = vargs; # else memcpy (&s.vargs, &vargs, sizeof (s.vargs)); # endif /* WIN32 */ # endif /* __va_copy */ #endif /* va_copy */ s.maxlen = (size_t)INT_MAX; retval = core(&s); va_end(s.vargs); if (retval == EOF) { *ptr = NULL; return EOF; } *ptr = s.buffer_base; return retval; } file-5.46/src/buffer.c000664 023540 023540 00000005200 14634602355 016342 0ustar00christoschristos000000 000000 /* * Copyright (c) Christos Zoulas 2017. * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: buffer.c,v 1.13 2023/07/02 12:48:39 christos Exp $") #endif /* lint */ #include "magic.h" #include #include #include #include void buffer_init(struct buffer *b, int fd, const struct stat *st, const void *data, size_t len) { b->fd = fd; if (st) memcpy(&b->st, st, sizeof(b->st)); else if (b->fd == -1 || fstat(b->fd, &b->st) == -1) memset(&b->st, 0, sizeof(b->st)); b->fbuf = data; b->flen = len; b->eoff = 0; b->ebuf = NULL; b->elen = 0; } void buffer_fini(struct buffer *b) { free(b->ebuf); b->ebuf = NULL; b->elen = 0; } int buffer_fill(const struct buffer *bb) { struct buffer *b = CCAST(struct buffer *, bb); if (b->elen != 0) return b->elen == FILE_BADSIZE ? -1 : 0; if (!S_ISREG(b->st.st_mode)) goto out; b->elen = CAST(size_t, b->st.st_size) < b->flen ? CAST(size_t, b->st.st_size) : b->flen; if (b->elen == 0) { free(b->ebuf); b->ebuf = NULL; return 0; } if ((b->ebuf = malloc(b->elen)) == NULL) goto out; b->eoff = b->st.st_size - b->elen; if (pread(b->fd, b->ebuf, b->elen, b->eoff) == -1) { free(b->ebuf); b->ebuf = NULL; goto out; } return 0; out: b->elen = FILE_BADSIZE; return -1; } file-5.46/src/magic.c000664 023540 023540 00000037530 14634602355 016164 0ustar00christoschristos000000 000000 /* * Copyright (c) Christos Zoulas 2003. * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifdef WIN32 #include #include #endif #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: magic.c,v 1.123 2023/12/29 18:04:48 christos Exp $") #endif /* lint */ #include "magic.h" #include #include #include #ifdef QUICK #include #endif #include /* for PIPE_BUF */ #if defined(HAVE_UTIMES) # include #elif defined(HAVE_UTIME) # if defined(HAVE_SYS_UTIME_H) # include # elif defined(HAVE_UTIME_H) # include # endif #endif #ifdef HAVE_UNISTD_H #include /* for read() */ #endif #ifndef PIPE_BUF /* Get the PIPE_BUF from pathconf */ #ifdef _PC_PIPE_BUF #define PIPE_BUF pathconf(".", _PC_PIPE_BUF) #else #define PIPE_BUF 512 #endif #endif file_private void close_and_restore(const struct magic_set *, const char *, int, const struct stat *); file_private int unreadable_info(struct magic_set *, mode_t, const char *); file_private const char* get_default_magic(void); #ifndef COMPILE_ONLY file_private const char *file_or_fd(struct magic_set *, const char *, int); #endif #ifndef STDIN_FILENO #define STDIN_FILENO 0 #endif #ifdef WIN32 /* HINSTANCE of this shared library. Needed for get_default_magic() */ static HINSTANCE _w32_dll_instance = NULL; static void _w32_append_path(char **hmagicpath, const char *fmt, ...) { char *tmppath; char *newpath; va_list ap; va_start(ap, fmt); if (vasprintf(&tmppath, fmt, ap) < 0) { va_end(ap); return; } va_end(ap); if (access(tmppath, R_OK) == -1) goto out; if (*hmagicpath == NULL) { *hmagicpath = tmppath; return; } if (asprintf(&newpath, "%s%c%s", *hmagicpath, PATHSEP, tmppath) < 0) goto out; free(*hmagicpath); free(tmppath); *hmagicpath = newpath; return; out: free(tmppath); } static void _w32_get_magic_relative_to(char **hmagicpath, HINSTANCE module) { static const char *trypaths[] = { "%s/share/misc/magic.mgc", "%s/magic.mgc", }; LPSTR dllpath; size_t sp; dllpath = calloc(MAX_PATH + 1, sizeof(*dllpath)); if (!GetModuleFileNameA(module, dllpath, MAX_PATH)) goto out; PathRemoveFileSpecA(dllpath); if (module) { char exepath[MAX_PATH]; GetModuleFileNameA(NULL, exepath, MAX_PATH); PathRemoveFileSpecA(exepath); if (stricmp(exepath, dllpath) == 0) goto out; } sp = strlen(dllpath); if (sp > 3 && stricmp(&dllpath[sp - 3], "bin") == 0) { _w32_append_path(hmagicpath, "%s/../share/misc/magic.mgc", dllpath); goto out; } for (sp = 0; sp < __arraycount(trypaths); sp++) _w32_append_path(hmagicpath, trypaths[sp], dllpath); out: free(dllpath); } #ifndef BUILD_AS_WINDOWS_STATIC_LIBARAY /* Placate GCC by offering a sacrificial previous prototype */ BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID); BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved __attribute__((__unused__))) { if (fdwReason == DLL_PROCESS_ATTACH) _w32_dll_instance = hinstDLL; return 1; } #endif #endif file_private const char * get_default_magic(void) { static const char hmagic[] = "/.magic/magic.mgc"; static char *default_magic; char *home, *hmagicpath; #ifndef WIN32 struct stat st; if (default_magic) { free(default_magic); default_magic = NULL; } if ((home = getenv("HOME")) == NULL) return MAGIC; if (asprintf(&hmagicpath, "%s/.magic.mgc", home) < 0) return MAGIC; if (stat(hmagicpath, &st) == -1) { free(hmagicpath); if (asprintf(&hmagicpath, "%s/.magic", home) < 0) return MAGIC; if (stat(hmagicpath, &st) == -1) goto out; if (S_ISDIR(st.st_mode)) { free(hmagicpath); if (asprintf(&hmagicpath, "%s/%s", home, hmagic) < 0) return MAGIC; if (access(hmagicpath, R_OK) == -1) goto out; } } if (asprintf(&default_magic, "%s:%s", hmagicpath, MAGIC) < 0) goto out; free(hmagicpath); return default_magic; out: default_magic = NULL; free(hmagicpath); return MAGIC; #else hmagicpath = NULL; if (default_magic) { free(default_magic); default_magic = NULL; } /* Before anything else, try to get a magic file from user HOME */ if ((home = getenv("HOME")) != NULL) _w32_append_path(&hmagicpath, "%s%s", home, hmagic); /* First, try to get a magic file from user-application data */ if ((home = getenv("LOCALAPPDATA")) != NULL) _w32_append_path(&hmagicpath, "%s%s", home, hmagic); /* Second, try to get a magic file from the user profile data */ if ((home = getenv("USERPROFILE")) != NULL) _w32_append_path(&hmagicpath, "%s/Local Settings/Application Data%s", home, hmagic); /* Third, try to get a magic file from Common Files */ if ((home = getenv("COMMONPROGRAMFILES")) != NULL) _w32_append_path(&hmagicpath, "%s%s", home, hmagic); /* Fourth, try to get magic file relative to exe location */ _w32_get_magic_relative_to(&hmagicpath, NULL); /* Fifth, try to get magic file relative to dll location */ _w32_get_magic_relative_to(&hmagicpath, _w32_dll_instance); /* Avoid MAGIC constant - it likely points to a file within MSys tree */ default_magic = hmagicpath; return default_magic; #endif } file_public const char * magic_getpath(const char *magicfile, int action) { if (magicfile != NULL) return magicfile; magicfile = getenv("MAGIC"); if (magicfile != NULL) return magicfile; return action == FILE_LOAD ? get_default_magic() : MAGIC; } file_public struct magic_set * magic_open(int flags) { return file_ms_alloc(flags); } file_private int unreadable_info(struct magic_set *ms, mode_t md, const char *file) { if (file) { /* We cannot open it, but we were able to stat it. */ if (access(file, W_OK) == 0) if (file_printf(ms, "writable, ") == -1) return -1; #ifndef WIN32 if (access(file, X_OK) == 0) if (file_printf(ms, "executable, ") == -1) return -1; #else /* X_OK doesn't work well on MS-Windows */ { const char *p = strrchr(file, '.'); if (p && (stricmp(p, ".exe") || stricmp(p, ".dll") || stricmp(p, ".bat") || stricmp(p, ".cmd"))) if (file_printf(ms, "writable, ") == -1) return -1; } #endif } if (S_ISREG(md)) if (file_printf(ms, "regular file, ") == -1) return -1; if (file_printf(ms, "no read permission") == -1) return -1; return 0; } file_public void magic_close(struct magic_set *ms) { if (ms == NULL) return; file_ms_free(ms); } /* * load a magic file */ file_public int magic_load(struct magic_set *ms, const char *magicfile) { if (ms == NULL) return -1; return file_apprentice(ms, magicfile, FILE_LOAD); } #ifndef COMPILE_ONLY /* * Install a set of compiled magic buffers. */ file_public int magic_load_buffers(struct magic_set *ms, void **bufs, size_t *sizes, size_t nbufs) { if (ms == NULL) return -1; return buffer_apprentice(ms, RCAST(struct magic **, bufs), sizes, nbufs); } #endif file_public int magic_compile(struct magic_set *ms, const char *magicfile) { if (ms == NULL) return -1; return file_apprentice(ms, magicfile, FILE_COMPILE); } file_public int magic_check(struct magic_set *ms, const char *magicfile) { if (ms == NULL) return -1; return file_apprentice(ms, magicfile, FILE_CHECK); } file_public int magic_list(struct magic_set *ms, const char *magicfile) { if (ms == NULL) return -1; return file_apprentice(ms, magicfile, FILE_LIST); } file_private void close_and_restore(const struct magic_set *ms, const char *name, int fd, const struct stat *sb) { if (fd == STDIN_FILENO || name == NULL) return; (void) close(fd); if ((ms->flags & MAGIC_PRESERVE_ATIME) != 0) { /* * Try to restore access, modification times if read it. * This is really *bad* because it will modify the status * time of the file... And of course this will affect * backup programs */ #ifdef HAVE_UTIMES struct timeval utsbuf[2]; (void)memset(utsbuf, 0, sizeof(utsbuf)); utsbuf[0].tv_sec = sb->st_atime; utsbuf[1].tv_sec = sb->st_mtime; (void) utimes(name, utsbuf); /* don't care if loses */ #elif defined(HAVE_UTIME_H) || defined(HAVE_SYS_UTIME_H) struct utimbuf utbuf; (void)memset(&utbuf, 0, sizeof(utbuf)); utbuf.actime = sb->st_atime; utbuf.modtime = sb->st_mtime; (void) utime(name, &utbuf); /* don't care if loses */ #endif } } #ifndef COMPILE_ONLY /* * find type of descriptor */ file_public const char * magic_descriptor(struct magic_set *ms, int fd) { if (ms == NULL) return NULL; return file_or_fd(ms, NULL, fd); } /* * find type of named file */ file_public const char * magic_file(struct magic_set *ms, const char *inname) { if (ms == NULL) return NULL; return file_or_fd(ms, inname, STDIN_FILENO); } file_private const char * file_or_fd(struct magic_set *ms, const char *inname, int fd) { int rv = -1; unsigned char *buf; struct stat sb; ssize_t nbytes = 0; /* number of bytes read from a datafile */ int ispipe = 0; int okstat = 0; off_t pos = CAST(off_t, -1); if (file_reset(ms, 1) == -1) goto out; /* * one extra for terminating '\0', and * some overlapping space for matches near EOF */ #define SLOP (1 + sizeof(union VALUETYPE)) if ((buf = CAST(unsigned char *, malloc(ms->bytes_max + SLOP))) == NULL) return NULL; switch (file_fsmagic(ms, inname, &sb)) { case -1: /* error */ goto done; case 0: /* nothing found */ break; default: /* matched it and printed type */ rv = 0; goto done; } #ifdef WIN32 /* Place stdin in binary mode, so EOF (Ctrl+Z) doesn't stop early. */ if (fd == STDIN_FILENO) _setmode(STDIN_FILENO, O_BINARY); #endif if (inname != NULL) { int flags = O_RDONLY|O_BINARY|O_NONBLOCK|O_CLOEXEC; errno = 0; if ((fd = open(inname, flags)) < 0) { okstat = stat(inname, &sb) == 0; #ifdef WIN32 /* * Can't stat, can't open. It may have been opened in * fsmagic, so if the user doesn't have read permission, * allow it to say so; otherwise an error was probably * displayed in fsmagic. */ if (!okstat && errno == EACCES) { sb.st_mode = S_IFBLK; okstat = 1; } #endif if (okstat && unreadable_info(ms, sb.st_mode, inname) == -1) goto done; rv = 0; goto done; } #if O_CLOEXEC == 0 && defined(F_SETFD) (void)fcntl(fd, F_SETFD, FD_CLOEXEC); #endif } if (fd != -1) { okstat = fstat(fd, &sb) == 0; if (okstat && S_ISFIFO(sb.st_mode)) ispipe = 1; if (inname == NULL) pos = lseek(fd, CAST(off_t, 0), SEEK_CUR); } /* * try looking at the first ms->bytes_max bytes */ if (ispipe) { if (fd != -1) { ssize_t r = 0; while ((r = sread(fd, RCAST(void *, &buf[nbytes]), CAST(size_t, ms->bytes_max - nbytes), 1)) > 0) { nbytes += r; if (r < PIPE_BUF) break; } } if (nbytes == 0 && inname) { /* We can not read it, but we were able to stat it. */ if (unreadable_info(ms, sb.st_mode, inname) == -1) goto done; rv = 0; goto done; } } else if (fd != -1) { /* Windows refuses to read from a big console buffer. */ size_t howmany = #ifdef WIN32 _isatty(fd) ? 8 * 1024 : #endif ms->bytes_max; if ((nbytes = read(fd, RCAST(void *, buf), howmany)) == -1) { if (inname == NULL && fd != STDIN_FILENO) file_error(ms, errno, "cannot read fd %d", fd); else file_error(ms, errno, "cannot read `%s'", inname == NULL ? "/dev/stdin" : inname); goto done; } } (void)memset(buf + nbytes, 0, SLOP); /* NUL terminate */ if (file_buffer(ms, fd, okstat ? &sb : NULL, inname, buf, CAST(size_t, nbytes)) == -1) goto done; rv = 0; done: free(buf); if (fd != -1) { if (pos != CAST(off_t, -1)) (void)lseek(fd, pos, SEEK_SET); close_and_restore(ms, inname, fd, &sb); } out: return rv == 0 ? file_getbuffer(ms) : NULL; } file_public const char * magic_buffer(struct magic_set *ms, const void *buf, size_t nb) { if (ms == NULL) return NULL; if (file_reset(ms, 1) == -1) return NULL; /* * The main work is done here! * We have the file name and/or the data buffer to be identified. */ if (file_buffer(ms, -1, NULL, NULL, buf, nb) == -1) { return NULL; } return file_getbuffer(ms); } #endif file_public const char * magic_error(struct magic_set *ms) { if (ms == NULL) return "Magic database is not open"; return (ms->event_flags & EVENT_HAD_ERR) ? ms->o.buf : NULL; } file_public int magic_errno(struct magic_set *ms) { if (ms == NULL) return EINVAL; return (ms->event_flags & EVENT_HAD_ERR) ? ms->error : 0; } file_public int magic_getflags(struct magic_set *ms) { if (ms == NULL) return -1; return ms->flags; } file_public int magic_setflags(struct magic_set *ms, int flags) { if (ms == NULL) return -1; #if !defined(HAVE_UTIME) && !defined(HAVE_UTIMES) if (flags & MAGIC_PRESERVE_ATIME) return -1; #endif ms->flags = flags; return 0; } file_public int magic_version(void) { return MAGIC_VERSION; } file_public int magic_setparam(struct magic_set *ms, int param, const void *val) { if (ms == NULL) return -1; const size_t v = *CAST(const size_t *, val); switch (param) { case MAGIC_PARAM_INDIR_MAX: ms->indir_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_NAME_MAX: ms->name_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_ELF_PHNUM_MAX: ms->elf_phnum_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_ELF_SHNUM_MAX: ms->elf_shnum_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_ELF_SHSIZE_MAX: ms->elf_shsize_max = v; return 0; case MAGIC_PARAM_ELF_NOTES_MAX: ms->elf_notes_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_REGEX_MAX: ms->regex_max = CAST(uint16_t, v); return 0; case MAGIC_PARAM_BYTES_MAX: ms->bytes_max = v; return 0; case MAGIC_PARAM_ENCODING_MAX: ms->encoding_max = v; return 0; case MAGIC_PARAM_MAGWARN_MAX: ms->magwarn_max = v; return 0; default: errno = EINVAL; return -1; } } file_public int magic_getparam(struct magic_set *ms, int param, void *val) { if (ms == NULL) return -1; switch (param) { case MAGIC_PARAM_INDIR_MAX: *CAST(size_t *, val) = ms->indir_max; return 0; case MAGIC_PARAM_NAME_MAX: *CAST(size_t *, val) = ms->name_max; return 0; case MAGIC_PARAM_ELF_PHNUM_MAX: *CAST(size_t *, val) = ms->elf_phnum_max; return 0; case MAGIC_PARAM_ELF_SHNUM_MAX: *CAST(size_t *, val) = ms->elf_shnum_max; return 0; case MAGIC_PARAM_ELF_SHSIZE_MAX: *CAST(size_t *, val) = ms->elf_shsize_max; return 0; case MAGIC_PARAM_ELF_NOTES_MAX: *CAST(size_t *, val) = ms->elf_notes_max; return 0; case MAGIC_PARAM_REGEX_MAX: *CAST(size_t *, val) = ms->regex_max; return 0; case MAGIC_PARAM_BYTES_MAX: *CAST(size_t *, val) = ms->bytes_max; return 0; case MAGIC_PARAM_ENCODING_MAX: *CAST(size_t *, val) = ms->encoding_max; return 0; case MAGIC_PARAM_MAGWARN_MAX: *CAST(size_t *, val) = ms->magwarn_max; return 0; default: errno = EINVAL; return -1; } } file-5.46/src/apprentice.c000664 023540 023540 00000241212 14721636234 017230 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * apprentice - make one pass through /etc/magic, learning its secrets. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: apprentice.c,v 1.356 2024/11/27 15:37:00 christos Exp $") #endif /* lint */ #include "magic.h" #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include #include #ifdef QUICK #include #endif #include #include #ifdef HAVE_BYTESWAP_H #include #endif #ifdef HAVE_SYS_BSWAP_H #include #endif #define EATAB {while (isascii(CAST(unsigned char, *l)) && \ isspace(CAST(unsigned char, *l))) ++l;} #define LOWCASE(l) (isupper(CAST(unsigned char, l)) ? \ tolower(CAST(unsigned char, l)) : (l)) /* * Work around a bug in headers on Digital Unix. * At least confirmed for: OSF1 V4.0 878 */ #if defined(__osf__) && defined(__DECC) #ifdef MAP_FAILED #undef MAP_FAILED #endif #endif #ifndef MAP_FAILED #define MAP_FAILED (void *) -1 #endif #ifndef MAP_FILE #define MAP_FILE 0 #endif #define ALLOC_CHUNK CAST(size_t, 10) #define ALLOC_INCR CAST(size_t, 200) #define MAP_TYPE_USER 0 #define MAP_TYPE_MALLOC 1 #define MAP_TYPE_MMAP 2 struct magic_entry { struct magic *mp; uint32_t cont_count; uint32_t max_count; }; struct magic_entry_set { struct magic_entry *me; uint32_t count; uint32_t max; }; struct magic_map { void *p; size_t len; int type; struct magic *magic[MAGIC_SETS]; uint32_t nmagic[MAGIC_SETS]; }; file_private int file_formats[FILE_NAMES_SIZE]; file_private const size_t file_nformats = FILE_NAMES_SIZE; file_protected const char *file_names[FILE_NAMES_SIZE]; file_protected const size_t file_nnames = FILE_NAMES_SIZE; file_private int getvalue(struct magic_set *ms, struct magic *, const char **, int); file_private int hextoint(int); file_private const char *getstr(struct magic_set *, struct magic *, const char *, int); file_private int parse(struct magic_set *, struct magic_entry *, const char *, const char *, size_t, int); file_private void eatsize(const char **); file_private int apprentice_1(struct magic_set *, const char *, int); file_private ssize_t apprentice_magic_strength_1(const struct magic *); file_private int apprentice_sort(const void *, const void *); file_private void apprentice_list(struct mlist *, int ); file_private struct magic_map *apprentice_load(struct magic_set *, const char *, int); file_private struct mlist *mlist_alloc(void); file_private void mlist_free_all(struct magic_set *); file_private void mlist_free(struct mlist *); file_private void byteswap(struct magic *, uint32_t); file_private void bs1(struct magic *); #if defined(HAVE_BYTESWAP_H) #define swap2(x) bswap_16(x) #define swap4(x) bswap_32(x) #define swap8(x) bswap_64(x) #elif defined(HAVE_SYS_BSWAP_H) #define swap2(x) bswap16(x) #define swap4(x) bswap32(x) #define swap8(x) bswap64(x) #else file_private uint16_t swap2(uint16_t); file_private uint32_t swap4(uint32_t); file_private uint64_t swap8(uint64_t); #endif file_private char *mkdbname(struct magic_set *, const char *, int); file_private struct magic_map *apprentice_buf(struct magic_set *, struct magic *, size_t); file_private struct magic_map *apprentice_map(struct magic_set *, const char *); file_private int check_buffer(struct magic_set *, struct magic_map *, const char *); file_private void apprentice_unmap(struct magic_map *); file_private int apprentice_compile(struct magic_set *, struct magic_map *, const char *); file_private int check_format_type(const char *, int, const char **); file_private int check_format(struct magic_set *, struct magic *); file_private int get_op(char); file_private int parse_mime(struct magic_set *, struct magic_entry *, const char *, size_t); file_private int parse_strength(struct magic_set *, struct magic_entry *, const char *, size_t); file_private int parse_apple(struct magic_set *, struct magic_entry *, const char *, size_t); file_private int parse_ext(struct magic_set *, struct magic_entry *, const char *, size_t); file_private size_t magicsize = sizeof(struct magic); file_private const char usg_hdr[] = "cont\toffset\ttype\topcode\tmask\tvalue\tdesc"; file_private struct { const char *name; size_t len; int (*fun)(struct magic_set *, struct magic_entry *, const char *, size_t); } bang[] = { #define DECLARE_FIELD(name) { # name, sizeof(# name) - 1, parse_ ## name } DECLARE_FIELD(mime), DECLARE_FIELD(apple), DECLARE_FIELD(ext), DECLARE_FIELD(strength), #undef DECLARE_FIELD { NULL, 0, NULL } }; #ifdef COMPILE_ONLY int main(int, char *[]); int main(int argc, char *argv[]) { int ret; struct magic_set *ms; char *progname; if ((progname = strrchr(argv[0], '/')) != NULL) progname++; else progname = argv[0]; if (argc != 2) { (void)fprintf(stderr, "Usage: %s file\n", progname); return 1; } if ((ms = magic_open(MAGIC_CHECK)) == NULL) { (void)fprintf(stderr, "%s: %s\n", progname, strerror(errno)); return 1; } ret = magic_compile(ms, argv[1]) == -1 ? 1 : 0; if (ret == 1) (void)fprintf(stderr, "%s: %s\n", progname, magic_error(ms)); magic_close(ms); return ret; } #endif /* COMPILE_ONLY */ struct type_tbl_s { const char name[16]; const size_t len; const int type; const int format; }; /* * XXX - the actual Single UNIX Specification says that "long" means "long", * as in the C data type, but we treat it as meaning "4-byte integer". * Given that the OS X version of file 5.04 did the same, I guess that passes * the actual test; having "long" be dependent on how big a "long" is on * the machine running "file" is silly. */ static const struct type_tbl_s type_tbl[] = { # define XX(s) s, (sizeof(s) - 1) # define XX_NULL "", 0 { XX("invalid"), FILE_INVALID, FILE_FMT_NONE }, { XX("byte"), FILE_BYTE, FILE_FMT_NUM }, { XX("short"), FILE_SHORT, FILE_FMT_NUM }, { XX("default"), FILE_DEFAULT, FILE_FMT_NONE }, { XX("long"), FILE_LONG, FILE_FMT_NUM }, { XX("string"), FILE_STRING, FILE_FMT_STR }, { XX("date"), FILE_DATE, FILE_FMT_STR }, { XX("beshort"), FILE_BESHORT, FILE_FMT_NUM }, { XX("belong"), FILE_BELONG, FILE_FMT_NUM }, { XX("bedate"), FILE_BEDATE, FILE_FMT_STR }, { XX("leshort"), FILE_LESHORT, FILE_FMT_NUM }, { XX("lelong"), FILE_LELONG, FILE_FMT_NUM }, { XX("ledate"), FILE_LEDATE, FILE_FMT_STR }, { XX("pstring"), FILE_PSTRING, FILE_FMT_STR }, { XX("ldate"), FILE_LDATE, FILE_FMT_STR }, { XX("beldate"), FILE_BELDATE, FILE_FMT_STR }, { XX("leldate"), FILE_LELDATE, FILE_FMT_STR }, { XX("regex"), FILE_REGEX, FILE_FMT_STR }, { XX("bestring16"), FILE_BESTRING16, FILE_FMT_STR }, { XX("lestring16"), FILE_LESTRING16, FILE_FMT_STR }, { XX("search"), FILE_SEARCH, FILE_FMT_STR }, { XX("medate"), FILE_MEDATE, FILE_FMT_STR }, { XX("meldate"), FILE_MELDATE, FILE_FMT_STR }, { XX("melong"), FILE_MELONG, FILE_FMT_NUM }, { XX("quad"), FILE_QUAD, FILE_FMT_QUAD }, { XX("lequad"), FILE_LEQUAD, FILE_FMT_QUAD }, { XX("bequad"), FILE_BEQUAD, FILE_FMT_QUAD }, { XX("qdate"), FILE_QDATE, FILE_FMT_STR }, { XX("leqdate"), FILE_LEQDATE, FILE_FMT_STR }, { XX("beqdate"), FILE_BEQDATE, FILE_FMT_STR }, { XX("qldate"), FILE_QLDATE, FILE_FMT_STR }, { XX("leqldate"), FILE_LEQLDATE, FILE_FMT_STR }, { XX("beqldate"), FILE_BEQLDATE, FILE_FMT_STR }, { XX("float"), FILE_FLOAT, FILE_FMT_FLOAT }, { XX("befloat"), FILE_BEFLOAT, FILE_FMT_FLOAT }, { XX("lefloat"), FILE_LEFLOAT, FILE_FMT_FLOAT }, { XX("double"), FILE_DOUBLE, FILE_FMT_DOUBLE }, { XX("bedouble"), FILE_BEDOUBLE, FILE_FMT_DOUBLE }, { XX("ledouble"), FILE_LEDOUBLE, FILE_FMT_DOUBLE }, { XX("leid3"), FILE_LEID3, FILE_FMT_NUM }, { XX("beid3"), FILE_BEID3, FILE_FMT_NUM }, { XX("indirect"), FILE_INDIRECT, FILE_FMT_NUM }, { XX("qwdate"), FILE_QWDATE, FILE_FMT_STR }, { XX("leqwdate"), FILE_LEQWDATE, FILE_FMT_STR }, { XX("beqwdate"), FILE_BEQWDATE, FILE_FMT_STR }, { XX("name"), FILE_NAME, FILE_FMT_NONE }, { XX("use"), FILE_USE, FILE_FMT_NONE }, { XX("clear"), FILE_CLEAR, FILE_FMT_NONE }, { XX("der"), FILE_DER, FILE_FMT_STR }, { XX("guid"), FILE_GUID, FILE_FMT_STR }, { XX("offset"), FILE_OFFSET, FILE_FMT_QUAD }, { XX("bevarint"), FILE_BEVARINT, FILE_FMT_STR }, { XX("levarint"), FILE_LEVARINT, FILE_FMT_STR }, { XX("msdosdate"), FILE_MSDOSDATE, FILE_FMT_STR }, { XX("lemsdosdate"), FILE_LEMSDOSDATE, FILE_FMT_STR }, { XX("bemsdosdate"), FILE_BEMSDOSDATE, FILE_FMT_STR }, { XX("msdostime"), FILE_MSDOSTIME, FILE_FMT_STR }, { XX("lemsdostime"), FILE_LEMSDOSTIME, FILE_FMT_STR }, { XX("bemsdostime"), FILE_BEMSDOSTIME, FILE_FMT_STR }, { XX("octal"), FILE_OCTAL, FILE_FMT_STR }, { XX_NULL, FILE_INVALID, FILE_FMT_NONE }, }; /* * These are not types, and cannot be preceded by "u" to make them * unsigned. */ static const struct type_tbl_s special_tbl[] = { { XX("der"), FILE_DER, FILE_FMT_STR }, { XX("name"), FILE_NAME, FILE_FMT_STR }, { XX("use"), FILE_USE, FILE_FMT_STR }, { XX("octal"), FILE_OCTAL, FILE_FMT_STR }, { XX_NULL, FILE_INVALID, FILE_FMT_NONE }, }; # undef XX # undef XX_NULL file_private int get_type(const struct type_tbl_s *tbl, const char *l, const char **t) { const struct type_tbl_s *p; for (p = tbl; p->len; p++) { if (strncmp(l, p->name, p->len) == 0) { if (t) *t = l + p->len; break; } } return p->type; } file_private off_t maxoff_t(void) { if (/*CONSTCOND*/sizeof(off_t) == sizeof(int)) return CAST(off_t, INT_MAX); if (/*CONSTCOND*/sizeof(off_t) == sizeof(long)) return CAST(off_t, LONG_MAX); return 0x7fffffff; } file_private int get_standard_integer_type(const char *l, const char **t) { int type; if (isalpha(CAST(unsigned char, l[1]))) { switch (l[1]) { case 'C': /* "dC" and "uC" */ type = FILE_BYTE; break; case 'S': /* "dS" and "uS" */ type = FILE_SHORT; break; case 'I': case 'L': /* * "dI", "dL", "uI", and "uL". * * XXX - the actual Single UNIX Specification says * that "L" means "long", as in the C data type, * but we treat it as meaning "4-byte integer". * Given that the OS X version of file 5.04 did * the same, I guess that passes the actual SUS * validation suite; having "dL" be dependent on * how big a "long" is on the machine running * "file" is silly. */ type = FILE_LONG; break; case 'Q': /* "dQ" and "uQ" */ type = FILE_QUAD; break; default: /* "d{anything else}", "u{anything else}" */ return FILE_INVALID; } l += 2; } else if (isdigit(CAST(unsigned char, l[1]))) { /* * "d{num}" and "u{num}"; we only support {num} values * of 1, 2, 4, and 8 - the Single UNIX Specification * doesn't say anything about whether arbitrary * values should be supported, but both the Solaris 10 * and OS X Mountain Lion versions of file passed the * Single UNIX Specification validation suite, and * neither of them support values bigger than 8 or * non-power-of-2 values. */ if (isdigit(CAST(unsigned char, l[2]))) { /* Multi-digit, so > 9 */ return FILE_INVALID; } switch (l[1]) { case '1': type = FILE_BYTE; break; case '2': type = FILE_SHORT; break; case '4': type = FILE_LONG; break; case '8': type = FILE_QUAD; break; default: /* XXX - what about 3, 5, 6, or 7? */ return FILE_INVALID; } l += 2; } else { /* * "d" or "u" by itself. */ type = FILE_LONG; ++l; } if (t) *t = l; return type; } file_private void init_file_tables(void) { static int done = 0; const struct type_tbl_s *p; if (done) return; done++; for (p = type_tbl; p->len; p++) { assert(p->type < FILE_NAMES_SIZE); file_names[p->type] = p->name; file_formats[p->type] = p->format; } assert(p - type_tbl == FILE_NAMES_SIZE); } file_private int add_mlist(struct mlist *mlp, struct magic_map *map, size_t idx) { struct mlist *ml; mlp->map = NULL; if ((ml = CAST(struct mlist *, malloc(sizeof(*ml)))) == NULL) return -1; ml->map = idx == 0 ? map : NULL; ml->magic = map->magic[idx]; ml->nmagic = map->nmagic[idx]; if (ml->nmagic) { ml->magic_rxcomp = CAST(file_regex_t **, calloc(ml->nmagic, sizeof(*ml->magic_rxcomp))); if (ml->magic_rxcomp == NULL) { free(ml); return -1; } } else ml->magic_rxcomp = NULL; mlp->prev->next = ml; ml->prev = mlp->prev; ml->next = mlp; mlp->prev = ml; return 0; } /* * Handle one file or directory. */ file_private int apprentice_1(struct magic_set *ms, const char *fn, int action) { struct magic_map *map; #ifndef COMPILE_ONLY size_t i; #endif if (magicsize != FILE_MAGICSIZE) { file_error(ms, 0, "magic element size %lu != %lu", CAST(unsigned long, sizeof(*map->magic[0])), CAST(unsigned long, FILE_MAGICSIZE)); return -1; } if (action == FILE_COMPILE) { map = apprentice_load(ms, fn, action); if (map == NULL) return -1; return apprentice_compile(ms, map, fn); } #ifndef COMPILE_ONLY map = apprentice_map(ms, fn); if (map == NULL) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "using regular magic file `%s'", fn); map = apprentice_load(ms, fn, action); if (map == NULL) return -1; } for (i = 0; i < MAGIC_SETS; i++) { if (add_mlist(ms->mlist[i], map, i) == -1) { /* failed to add to any list, free explicitly */ if (i == 0) apprentice_unmap(map); else mlist_free_all(ms); file_oomem(ms, sizeof(*ms->mlist[0])); return -1; } } if (action == FILE_LIST) { for (i = 0; i < MAGIC_SETS; i++) { printf("Set %" SIZE_T_FORMAT "u:\nBinary patterns:\n", i); apprentice_list(ms->mlist[i], BINTEST); printf("Text patterns:\n"); apprentice_list(ms->mlist[i], TEXTTEST); } } return 0; #else return 0; #endif /* COMPILE_ONLY */ } file_protected void file_ms_free(struct magic_set *ms) { size_t i; if (ms == NULL) return; for (i = 0; i < MAGIC_SETS; i++) mlist_free(ms->mlist[i]); free(ms->o.pbuf); free(ms->o.buf); free(ms->c.li); free(ms->fnamebuf); #ifdef USE_C_LOCALE freelocale(ms->c_lc_ctype); #endif free(ms); } file_protected struct magic_set * file_ms_alloc(int flags) { struct magic_set *ms; size_t i, len; if ((ms = CAST(struct magic_set *, calloc(CAST(size_t, 1u), sizeof(*ms)))) == NULL) return NULL; if (magic_setflags(ms, flags) == -1) { errno = EINVAL; goto free; } ms->o.buf = ms->o.pbuf = NULL; ms->o.blen = 0; len = (ms->c.len = 10) * sizeof(*ms->c.li); if ((ms->c.li = CAST(struct level_info *, malloc(len))) == NULL) goto free; ms->event_flags = 0; ms->error = -1; for (i = 0; i < MAGIC_SETS; i++) ms->mlist[i] = NULL; ms->fnamebuf = NULL; ms->file = "unknown"; ms->line = 0; ms->magwarn = 0; ms->indir_max = FILE_INDIR_MAX; ms->name_max = FILE_NAME_MAX; ms->elf_shnum_max = FILE_ELF_SHNUM_MAX; ms->elf_shsize_max = FILE_ELF_SHSIZE_MAX; ms->elf_phnum_max = FILE_ELF_PHNUM_MAX; ms->elf_notes_max = FILE_ELF_NOTES_MAX; ms->regex_max = FILE_REGEX_MAX; ms->bytes_max = FILE_BYTES_MAX; ms->encoding_max = FILE_ENCODING_MAX; ms->magwarn_max = FILE_MAGWARN_MAX; #ifdef USE_C_LOCALE ms->c_lc_ctype = newlocale(LC_CTYPE_MASK, "C", 0); assert(ms->c_lc_ctype != NULL); #endif return ms; free: free(ms); return NULL; } file_private void apprentice_unmap(struct magic_map *map) { size_t i; char *p; if (map == NULL) return; switch (map->type) { case MAP_TYPE_USER: break; case MAP_TYPE_MALLOC: p = CAST(char *, map->p); for (i = 0; i < MAGIC_SETS; i++) { char *b = RCAST(char *, map->magic[i]); if (p != NULL && b >= p && b <= p + map->len) continue; free(b); } free(p); break; #ifdef QUICK case MAP_TYPE_MMAP: if (map->p && map->p != MAP_FAILED) (void)munmap(map->p, map->len); break; #endif default: fprintf(stderr, "Bad map type %d", map->type); abort(); } free(map); } file_private struct mlist * mlist_alloc(void) { struct mlist *mlist; if ((mlist = CAST(struct mlist *, calloc(1, sizeof(*mlist)))) == NULL) { return NULL; } mlist->next = mlist->prev = mlist; return mlist; } file_private void mlist_free_all(struct magic_set *ms) { size_t i; for (i = 0; i < MAGIC_SETS; i++) { mlist_free(ms->mlist[i]); ms->mlist[i] = NULL; } } file_private void mlist_free_one(struct mlist *ml) { size_t i; if (ml->map) apprentice_unmap(CAST(struct magic_map *, ml->map)); for (i = 0; i < ml->nmagic; ++i) { if (ml->magic_rxcomp[i]) { file_regfree(ml->magic_rxcomp[i]); free(ml->magic_rxcomp[i]); ml->magic_rxcomp[i] = NULL; } } free(ml->magic_rxcomp); ml->magic_rxcomp = NULL; free(ml); } file_private void mlist_free(struct mlist *mlist) { struct mlist *ml, *next; if (mlist == NULL) return; for (ml = mlist->next; ml != mlist;) { next = ml->next; mlist_free_one(ml); ml = next; } mlist_free_one(mlist); } #ifndef COMPILE_ONLY /* void **bufs: an array of compiled magic files */ file_protected int buffer_apprentice(struct magic_set *ms, struct magic **bufs, size_t *sizes, size_t nbufs) { size_t i, j; struct magic_map *map; if (nbufs == 0) return -1; (void)file_reset(ms, 0); init_file_tables(); for (i = 0; i < MAGIC_SETS; i++) { mlist_free(ms->mlist[i]); if ((ms->mlist[i] = mlist_alloc()) == NULL) { file_oomem(ms, sizeof(*ms->mlist[0])); goto fail; } } for (i = 0; i < nbufs; i++) { map = apprentice_buf(ms, bufs[i], sizes[i]); if (map == NULL) goto fail; for (j = 0; j < MAGIC_SETS; j++) { if (add_mlist(ms->mlist[j], map, j) == -1) { file_oomem(ms, sizeof(*ms->mlist[0])); goto fail; } } } return 0; fail: mlist_free_all(ms); return -1; } #endif /* const char *fn: list of magic files and directories */ file_protected int file_apprentice(struct magic_set *ms, const char *fn, int action) { char *p; int fileerr, errs = -1; size_t i, j; (void)file_reset(ms, 0); if ((fn = magic_getpath(fn, action)) == NULL) return -1; init_file_tables(); free(ms->fnamebuf); if ((ms->fnamebuf = strdup(fn)) == NULL) { file_oomem(ms, strlen(fn)); return -1; } for (i = 0; i < MAGIC_SETS; i++) { mlist_free(ms->mlist[i]); if ((ms->mlist[i] = mlist_alloc()) == NULL) { file_oomem(ms, sizeof(*ms->mlist[0])); for (j = 0; j < i; j++) { mlist_free(ms->mlist[j]); ms->mlist[j] = NULL; } return -1; } } fn = ms->fnamebuf; while (fn) { p = CCAST(char *, strchr(fn, PATHSEP)); if (p) *p++ = '\0'; if (*fn == '\0') break; fileerr = apprentice_1(ms, fn, action); errs = MAX(errs, fileerr); fn = p; } if (errs == -1) { for (i = 0; i < MAGIC_SETS; i++) { mlist_free(ms->mlist[i]); ms->mlist[i] = NULL; } file_error(ms, 0, "could not find any valid magic files!"); return -1; } #if 0 /* * Always leave the database loaded */ if (action == FILE_LOAD) return 0; for (i = 0; i < MAGIC_SETS; i++) { mlist_free(ms->mlist[i]); ms->mlist[i] = NULL; } #endif switch (action) { case FILE_LOAD: case FILE_COMPILE: case FILE_CHECK: case FILE_LIST: return 0; default: file_error(ms, 0, "Invalid action %d", action); return -1; } } /* * Compute the real length of a magic expression, for the purposes * of determining how "strong" a magic expression is (approximating * how specific its matches are): * - magic characters count 0 unless escaped. * - [] expressions count 1 * - {} expressions count 0 * - regular characters or escaped magic characters count 1 * - 0 length expressions count as one */ file_private size_t nonmagic(const char *str) { const char *p; size_t rv = 0; for (p = str; *p; p++) switch (*p) { case '\\': /* Escaped anything counts 1 */ if (!*++p) p--; rv++; continue; case '?': /* Magic characters count 0 */ case '*': case '.': case '+': case '^': case '$': continue; case '[': /* Bracketed expressions count 1 the ']' */ while (*p && *p != ']') p++; p--; continue; case '{': /* Braced expressions count 0 */ while (*p && *p != '}') p++; if (!*p) p--; continue; default: /* Anything else counts 1 */ rv++; continue; } return rv == 0 ? 1 : rv; /* Return at least 1 */ } file_private size_t typesize(int type) { switch (type) { case FILE_BYTE: return 1; case FILE_SHORT: case FILE_LESHORT: case FILE_BESHORT: case FILE_MSDOSDATE: case FILE_BEMSDOSDATE: case FILE_LEMSDOSDATE: case FILE_MSDOSTIME: case FILE_BEMSDOSTIME: case FILE_LEMSDOSTIME: return 2; case FILE_LONG: case FILE_LELONG: case FILE_BELONG: case FILE_MELONG: return 4; case FILE_DATE: case FILE_LEDATE: case FILE_BEDATE: case FILE_MEDATE: case FILE_LDATE: case FILE_LELDATE: case FILE_BELDATE: case FILE_MELDATE: case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: case FILE_BEID3: case FILE_LEID3: return 4; case FILE_QUAD: case FILE_BEQUAD: case FILE_LEQUAD: case FILE_QDATE: case FILE_LEQDATE: case FILE_BEQDATE: case FILE_QLDATE: case FILE_LEQLDATE: case FILE_BEQLDATE: case FILE_QWDATE: case FILE_LEQWDATE: case FILE_BEQWDATE: case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: case FILE_OFFSET: case FILE_BEVARINT: case FILE_LEVARINT: return 8; case FILE_GUID: return 16; default: return FILE_BADSIZE; } } /* * Get weight of this magic entry, for sorting purposes. */ file_private ssize_t apprentice_magic_strength_1(const struct magic *m) { #define MULT 10U size_t ts, v; ssize_t val = 2 * MULT; /* baseline strength */ switch (m->type) { case FILE_DEFAULT: /* make sure this sorts last */ if (m->factor_op != FILE_FACTOR_OP_NONE) { file_magwarn1("Unsupported factor_op in default %d", m->factor_op); } return 0; case FILE_BYTE: case FILE_SHORT: case FILE_LESHORT: case FILE_BESHORT: case FILE_LONG: case FILE_LELONG: case FILE_BELONG: case FILE_MELONG: case FILE_DATE: case FILE_LEDATE: case FILE_BEDATE: case FILE_MEDATE: case FILE_LDATE: case FILE_LELDATE: case FILE_BELDATE: case FILE_MELDATE: case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: case FILE_QUAD: case FILE_BEQUAD: case FILE_LEQUAD: case FILE_QDATE: case FILE_LEQDATE: case FILE_BEQDATE: case FILE_QLDATE: case FILE_LEQLDATE: case FILE_BEQLDATE: case FILE_QWDATE: case FILE_LEQWDATE: case FILE_BEQWDATE: case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: case FILE_BEVARINT: case FILE_LEVARINT: case FILE_GUID: case FILE_BEID3: case FILE_LEID3: case FILE_OFFSET: case FILE_MSDOSDATE: case FILE_BEMSDOSDATE: case FILE_LEMSDOSDATE: case FILE_MSDOSTIME: case FILE_BEMSDOSTIME: case FILE_LEMSDOSTIME: ts = typesize(m->type); if (ts == FILE_BADSIZE) { (void)fprintf(stderr, "Bad size for type %d\n", m->type); abort(); } val += ts * MULT; break; case FILE_PSTRING: case FILE_STRING: case FILE_OCTAL: val += m->vallen * MULT; break; case FILE_BESTRING16: case FILE_LESTRING16: val += m->vallen * MULT / 2; break; case FILE_SEARCH: if (m->vallen == 0) break; val += m->vallen * MAX(MULT / m->vallen, 1); break; case FILE_REGEX: v = nonmagic(m->value.s); val += v * MAX(MULT / v, 1); break; case FILE_INDIRECT: case FILE_NAME: case FILE_USE: case FILE_CLEAR: break; case FILE_DER: val += MULT; break; default: (void)fprintf(stderr, "Bad type %d\n", m->type); abort(); } switch (m->reln) { case 'x': /* matches anything penalize */ case '!': /* matches almost anything penalize */ val = 0; break; case '=': /* Exact match, prefer */ val += MULT; break; case '>': case '<': /* comparison match reduce strength */ val -= 2 * MULT; break; case '^': case '&': /* masking bits, we could count them too */ val -= MULT; break; default: (void)fprintf(stderr, "Bad relation %c\n", m->reln); abort(); } return val; } /*ARGSUSED*/ file_protected size_t file_magic_strength(const struct magic *m, size_t nmagic __attribute__((__unused__))) { ssize_t val = apprentice_magic_strength_1(m); #ifdef notyet if (m->desc[0] == '\0') { size_t i; /* * Magic entries with no description get their continuations * added */ for (i = 1; m[i].cont_level != 0 && i < MIN(nmagic, 3); i++) { ssize_t v = apprentice_magic_strength_1(&m[i]) >> (i + 1); val += v; if (m[i].desc[0] != '\0') break; } } #endif switch (m->factor_op) { case FILE_FACTOR_OP_NONE: break; case FILE_FACTOR_OP_PLUS: val += m->factor; break; case FILE_FACTOR_OP_MINUS: val -= m->factor; break; case FILE_FACTOR_OP_TIMES: val *= m->factor; break; case FILE_FACTOR_OP_DIV: val /= m->factor; break; default: (void)fprintf(stderr, "Bad factor_op %u\n", m->factor_op); abort(); } if (val <= 0) /* ensure we only return 0 for FILE_DEFAULT */ val = 1; #ifndef notyet /* * Magic entries with no description get a bonus because they depend * on subsequent magic entries to print something. */ if (m->desc[0] == '\0') val++; #endif return val; } /* * Sort callback for sorting entries by "strength" (basically length) */ file_private int apprentice_sort(const void *a, const void *b) { const struct magic_entry *ma = CAST(const struct magic_entry *, a); const struct magic_entry *mb = CAST(const struct magic_entry *, b); size_t sa = file_magic_strength(ma->mp, ma->cont_count); size_t sb = file_magic_strength(mb->mp, mb->cont_count); if (sa == sb) { struct magic mpa = *ma->mp; struct magic mpb = *mb->mp; mpa.lineno = mpb.lineno = 0; int x = memcmp(&mpa, &mpb, sizeof(mpa)); if (x == 0) { // Don't warn for DER if (mpa.type == FILE_DER) return 0; file_magwarn1("Duplicate magic entry `%s'", ma->mp->desc); file_mdump(ma->mp); file_mdump(mb->mp); return 0; } return x > 0 ? -1 : 1; } return sa > sb ? -1 : 1; } /* * Shows sorted patterns list in the order which is used for the matching */ file_private void apprentice_list(struct mlist *mlist, int mode) { uint32_t magindex, descindex, mimeindex, lineindex; struct mlist *ml; for (ml = mlist->next; ml != mlist; ml = ml->next) { for (magindex = 0; magindex < ml->nmagic; magindex++) { struct magic *m = &ml->magic[magindex]; if ((m->flag & mode) != mode) { /* Skip sub-tests */ while (magindex + 1 < ml->nmagic && ml->magic[magindex + 1].cont_level != 0) ++magindex; continue; /* Skip to next top-level test*/ } /* * Try to iterate over the tree until we find item with * description/mimetype. */ lineindex = descindex = mimeindex = magindex; for (; magindex + 1 < ml->nmagic && ml->magic[magindex + 1].cont_level != 0; magindex++) { uint32_t mi = magindex + 1; if (*ml->magic[descindex].desc == '\0' && *ml->magic[mi].desc) descindex = mi; if (*ml->magic[mimeindex].mimetype == '\0' && *ml->magic[mi].mimetype) mimeindex = mi; } printf("Strength = %3" SIZE_T_FORMAT "u@%u: %s [%s]\n", file_magic_strength(m, ml->nmagic - magindex), ml->magic[lineindex].lineno, ml->magic[descindex].desc, ml->magic[mimeindex].mimetype); } } } file_private void set_test_type(struct magic *mstart, struct magic *m) { switch (m->type) { case FILE_BYTE: case FILE_SHORT: case FILE_LONG: case FILE_DATE: case FILE_BESHORT: case FILE_BELONG: case FILE_BEDATE: case FILE_LESHORT: case FILE_LELONG: case FILE_LEDATE: case FILE_LDATE: case FILE_BELDATE: case FILE_LELDATE: case FILE_MEDATE: case FILE_MELDATE: case FILE_MELONG: case FILE_QUAD: case FILE_LEQUAD: case FILE_BEQUAD: case FILE_QDATE: case FILE_LEQDATE: case FILE_BEQDATE: case FILE_QLDATE: case FILE_LEQLDATE: case FILE_BEQLDATE: case FILE_QWDATE: case FILE_LEQWDATE: case FILE_BEQWDATE: case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: case FILE_BEVARINT: case FILE_LEVARINT: case FILE_DER: case FILE_GUID: case FILE_OFFSET: case FILE_MSDOSDATE: case FILE_BEMSDOSDATE: case FILE_LEMSDOSDATE: case FILE_MSDOSTIME: case FILE_BEMSDOSTIME: case FILE_LEMSDOSTIME: case FILE_OCTAL: mstart->flag |= BINTEST; break; case FILE_STRING: case FILE_PSTRING: case FILE_BESTRING16: case FILE_LESTRING16: /* Allow text overrides */ if (mstart->str_flags & STRING_TEXTTEST) mstart->flag |= TEXTTEST; else mstart->flag |= BINTEST; break; case FILE_REGEX: case FILE_SEARCH: /* Check for override */ if (mstart->str_flags & STRING_BINTEST) mstart->flag |= BINTEST; if (mstart->str_flags & STRING_TEXTTEST) mstart->flag |= TEXTTEST; if (mstart->flag & (TEXTTEST|BINTEST)) break; /* binary test if pattern is not text */ if (file_looks_utf8(m->value.us, CAST(size_t, m->vallen), NULL, NULL) <= 0) mstart->flag |= BINTEST; else mstart->flag |= TEXTTEST; break; case FILE_DEFAULT: /* can't deduce anything; we shouldn't see this at the top level anyway */ break; case FILE_INVALID: default: /* invalid search type, but no need to complain here */ break; } } file_private int addentry(struct magic_set *ms, struct magic_entry *me, struct magic_entry_set *mset) { size_t i = me->mp->type == FILE_NAME ? 1 : 0; if (mset[i].me == NULL || mset[i].count == mset[i].max) { struct magic_entry *mp; size_t incr = mset[i].max + ALLOC_INCR; if ((mp = CAST(struct magic_entry *, realloc(mset[i].me, sizeof(*mp) * incr))) == NULL) { file_oomem(ms, sizeof(*mp) * incr); return -1; } (void)memset(&mp[mset[i].count], 0, sizeof(*mp) * ALLOC_INCR); mset[i].me = mp; mset[i].max = CAST(uint32_t, incr); assert(mset[i].max == incr); } mset[i].me[mset[i].count++] = *me; memset(me, 0, sizeof(*me)); return 0; } /* * Load and parse one file. */ file_private void load_1(struct magic_set *ms, int action, const char *fn, int *errs, struct magic_entry_set *mset) { size_t lineno = 0, llen = 0; char *line = NULL; ssize_t len; struct magic_entry me; FILE *f = fopen(ms->file = fn, "r"); if (f == NULL) { if (errno != ENOENT) file_error(ms, errno, "cannot read magic file `%s'", fn); (*errs)++; return; } memset(&me, 0, sizeof(me)); /* read and parse this file */ for (ms->line = 1; (len = getline(&line, &llen, f)) != -1; ms->line++) { if (ms->magwarn >= ms->magwarn_max) break; if (len == 0) /* null line, garbage, etc */ continue; if (line[len - 1] == '\n') { lineno++; line[len - 1] = '\0'; /* delete newline */ } switch (line[0]) { case '\0': /* empty, do not parse */ case '#': /* comment, do not parse */ continue; case '!': if (line[1] == ':') { size_t i; for (i = 0; bang[i].name != NULL; i++) { if (CAST(size_t, len - 2) > bang[i].len && memcmp(bang[i].name, line + 2, bang[i].len) == 0) break; } if (bang[i].name == NULL) { file_error(ms, 0, "Unknown !: entry `%s'", line); (*errs)++; continue; } if (me.mp == NULL) { file_error(ms, 0, "No current entry for :!%s type", bang[i].name); (*errs)++; continue; } if ((*bang[i].fun)(ms, &me, line + bang[i].len + 2, len - bang[i].len - 2) != 0) { (*errs)++; continue; } continue; } /*FALLTHROUGH*/ default: again: switch (parse(ms, &me, fn, line, lineno, action)) { case 0: continue; case 1: (void)addentry(ms, &me, mset); goto again; default: (*errs)++; break; } } } if (me.mp) (void)addentry(ms, &me, mset); free(line); (void)fclose(f); } /* * parse a file or directory of files * const char *fn: name of magic file or directory */ file_private int cmpstrp(const void *p1, const void *p2) { return strcmp(*RCAST(char *const *, p1), *RCAST(char *const *, p2)); } file_private uint32_t set_text_binary(struct magic_set *ms, struct magic_entry *me, uint32_t nme, uint32_t starttest) { static const char text[] = "text"; static const char binary[] = "binary"; static const size_t len = sizeof(text); uint32_t i = starttest; do { set_test_type(me[starttest].mp, me[i].mp); if ((ms->flags & MAGIC_DEBUG) == 0) continue; (void)fprintf(stderr, "%s%s%s: %s\n", me[i].mp->mimetype, me[i].mp->mimetype[0] == '\0' ? "" : "; ", me[i].mp->desc[0] ? me[i].mp->desc : "(no description)", me[i].mp->flag & BINTEST ? binary : text); if (me[i].mp->flag & BINTEST) { char *p = strstr(me[i].mp->desc, text); if (p && (p == me[i].mp->desc || isspace(CAST(unsigned char, p[-1]))) && (p + len - me[i].mp->desc == MAXstring || (p[len] == '\0' || isspace(CAST(unsigned char, p[len]))))) (void)fprintf(stderr, "*** Possible " "binary test for text type\n"); } } while (++i < nme && me[i].mp->cont_level != 0); return i; } file_private void set_last_default(struct magic_set *ms, struct magic_entry *me, uint32_t nme) { uint32_t i; for (i = 0; i < nme; i++) { if (me[i].mp->cont_level == 0 && me[i].mp->type == FILE_DEFAULT) { while (++i < nme) if (me[i].mp->cont_level == 0) break; if (i != nme) { /* XXX - Ugh! */ ms->line = me[i].mp->lineno; file_magwarn(ms, "level 0 \"default\" did not sort last"); } return; } } } file_private int coalesce_entries(struct magic_set *ms, struct magic_entry *me, uint32_t nme, struct magic **ma, uint32_t *nma) { uint32_t i, mentrycount = 0; size_t slen; for (i = 0; i < nme; i++) mentrycount += me[i].cont_count; if (mentrycount == 0) { *ma = NULL; *nma = 0; return 0; } slen = sizeof(**ma) * mentrycount; if ((*ma = CAST(struct magic *, malloc(slen))) == NULL) { file_oomem(ms, slen); return -1; } mentrycount = 0; for (i = 0; i < nme; i++) { (void)memcpy(*ma + mentrycount, me[i].mp, me[i].cont_count * sizeof(**ma)); mentrycount += me[i].cont_count; } *nma = mentrycount; return 0; } file_private void magic_entry_free(struct magic_entry *me, uint32_t nme) { uint32_t i; if (me == NULL) return; for (i = 0; i < nme; i++) free(me[i].mp); free(me); } file_private struct magic_map * apprentice_load(struct magic_set *ms, const char *fn, int action) { int errs = 0; uint32_t i, j; size_t files = 0, maxfiles = 0; char **filearr = NULL, *mfn; struct stat st; struct magic_map *map; struct magic_entry_set mset[MAGIC_SETS]; DIR *dir; struct dirent *d; memset(mset, 0, sizeof(mset)); ms->flags |= MAGIC_CHECK; /* Enable checks for parsed files */ if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) { file_oomem(ms, sizeof(*map)); return NULL; } map->type = MAP_TYPE_MALLOC; /* print silly verbose header for USG compat. */ if (action == FILE_CHECK) (void)fprintf(stderr, "%s\n", usg_hdr); /* load directory or file */ if (stat(fn, &st) == 0 && S_ISDIR(st.st_mode)) { dir = opendir(fn); if (!dir) { errs++; goto out; } while ((d = readdir(dir)) != NULL) { if (d->d_name[0] == '.') continue; if (asprintf(&mfn, "%s/%s", fn, d->d_name) < 0) { file_oomem(ms, strlen(fn) + strlen(d->d_name) + 2); errs++; closedir(dir); goto out; } if (stat(mfn, &st) == -1 || !S_ISREG(st.st_mode)) { free(mfn); continue; } if (files >= maxfiles) { size_t mlen; char **nfilearr; maxfiles = (maxfiles + 1) * 2; mlen = maxfiles * sizeof(*filearr); if ((nfilearr = CAST(char **, realloc(filearr, mlen))) == NULL) { file_oomem(ms, mlen); free(mfn); closedir(dir); errs++; goto out; } filearr = nfilearr; } filearr[files++] = mfn; } closedir(dir); if (filearr) { qsort(filearr, files, sizeof(*filearr), cmpstrp); for (i = 0; i < files; i++) { load_1(ms, action, filearr[i], &errs, mset); free(filearr[i]); } free(filearr); filearr = NULL; } } else load_1(ms, action, fn, &errs, mset); if (errs) goto out; for (j = 0; j < MAGIC_SETS; j++) { /* Set types of tests */ for (i = 0; i < mset[j].count; ) { if (mset[j].me[i].mp->cont_level != 0) { i++; continue; } i = set_text_binary(ms, mset[j].me, mset[j].count, i); } if (mset[j].me) qsort(mset[j].me, mset[j].count, sizeof(*mset[0].me), apprentice_sort); /* * Make sure that any level 0 "default" line is last * (if one exists). */ set_last_default(ms, mset[j].me, mset[j].count); /* coalesce per file arrays into a single one, if needed */ if (mset[j].count == 0) continue; if (coalesce_entries(ms, mset[j].me, mset[j].count, &map->magic[j], &map->nmagic[j]) == -1) { errs++; goto out; } } out: free(filearr); for (j = 0; j < MAGIC_SETS; j++) magic_entry_free(mset[j].me, mset[j].count); if (errs) { apprentice_unmap(map); return NULL; } return map; } /* * extend the sign bit if the comparison is to be signed */ file_protected uint64_t file_signextend(struct magic_set *ms, struct magic *m, uint64_t v) { if (!(m->flag & UNSIGNED)) { switch(m->type) { /* * Do not remove the casts below. They are * vital. When later compared with the data, * the sign extension must have happened. */ case FILE_BYTE: v = CAST(signed char, v); break; case FILE_SHORT: case FILE_BESHORT: case FILE_LESHORT: v = CAST(short, v); break; case FILE_DATE: case FILE_BEDATE: case FILE_LEDATE: case FILE_MEDATE: case FILE_LDATE: case FILE_BELDATE: case FILE_LELDATE: case FILE_MELDATE: case FILE_LONG: case FILE_BELONG: case FILE_LELONG: case FILE_MELONG: case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: case FILE_MSDOSDATE: case FILE_BEMSDOSDATE: case FILE_LEMSDOSDATE: case FILE_MSDOSTIME: case FILE_BEMSDOSTIME: case FILE_LEMSDOSTIME: v = CAST(int32_t, v); break; case FILE_QUAD: case FILE_BEQUAD: case FILE_LEQUAD: case FILE_QDATE: case FILE_QLDATE: case FILE_QWDATE: case FILE_BEQDATE: case FILE_BEQLDATE: case FILE_BEQWDATE: case FILE_LEQDATE: case FILE_LEQLDATE: case FILE_LEQWDATE: case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: case FILE_OFFSET: case FILE_BEVARINT: case FILE_LEVARINT: v = CAST(int64_t, v); break; case FILE_STRING: case FILE_PSTRING: case FILE_BESTRING16: case FILE_LESTRING16: case FILE_REGEX: case FILE_SEARCH: case FILE_DEFAULT: case FILE_INDIRECT: case FILE_NAME: case FILE_USE: case FILE_CLEAR: case FILE_DER: case FILE_GUID: case FILE_OCTAL: break; default: if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "cannot happen: m->type=%d\n", m->type); return FILE_BADSIZE; } } return v; } file_private int string_modifier_check(struct magic_set *ms, struct magic *m) { if ((ms->flags & MAGIC_CHECK) == 0) return 0; if ((m->type != FILE_REGEX || (m->str_flags & REGEX_LINE_COUNT) == 0) && (m->type != FILE_PSTRING && (m->str_flags & PSTRING_LEN) != 0)) { file_magwarn(ms, "'/BHhLl' modifiers are only allowed for pascal strings\n"); return -1; } switch (m->type) { case FILE_BESTRING16: case FILE_LESTRING16: if (m->str_flags != 0) { file_magwarn(ms, "no modifiers allowed for 16-bit strings\n"); return -1; } break; case FILE_STRING: case FILE_PSTRING: if ((m->str_flags & REGEX_OFFSET_START) != 0) { file_magwarn(ms, "'/%c' only allowed on regex and search\n", CHAR_REGEX_OFFSET_START); return -1; } break; case FILE_SEARCH: if (m->str_range == 0) { file_magwarn(ms, "missing range; defaulting to %d\n", STRING_DEFAULT_RANGE); m->str_range = STRING_DEFAULT_RANGE; return -1; } break; case FILE_REGEX: if ((m->str_flags & STRING_COMPACT_WHITESPACE) != 0) { file_magwarn(ms, "'/%c' not allowed on regex\n", CHAR_COMPACT_WHITESPACE); return -1; } if ((m->str_flags & STRING_COMPACT_OPTIONAL_WHITESPACE) != 0) { file_magwarn(ms, "'/%c' not allowed on regex\n", CHAR_COMPACT_OPTIONAL_WHITESPACE); return -1; } break; default: file_magwarn(ms, "coding error: m->type=%d\n", m->type); return -1; } return 0; } file_private int get_op(char c) { switch (c) { case '&': return FILE_OPAND; case '|': return FILE_OPOR; case '^': return FILE_OPXOR; case '+': return FILE_OPADD; case '-': return FILE_OPMINUS; case '*': return FILE_OPMULTIPLY; case '/': return FILE_OPDIVIDE; case '%': return FILE_OPMODULO; default: return -1; } } #ifdef ENABLE_CONDITIONALS file_private int get_cond(const char *l, const char **t) { static const struct cond_tbl_s { char name[8]; size_t len; int cond; } cond_tbl[] = { { "if", 2, COND_IF }, { "elif", 4, COND_ELIF }, { "else", 4, COND_ELSE }, { "", 0, COND_NONE }, }; const struct cond_tbl_s *p; for (p = cond_tbl; p->len; p++) { if (strncmp(l, p->name, p->len) == 0 && isspace(CAST(unsigned char, l[p->len]))) { if (t) *t = l + p->len; break; } } return p->cond; } file_private int check_cond(struct magic_set *ms, int cond, uint32_t cont_level) { int last_cond; last_cond = ms->c.li[cont_level].last_cond; switch (cond) { case COND_IF: if (last_cond != COND_NONE && last_cond != COND_ELIF) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "syntax error: `if'"); return -1; } last_cond = COND_IF; break; case COND_ELIF: if (last_cond != COND_IF && last_cond != COND_ELIF) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "syntax error: `elif'"); return -1; } last_cond = COND_ELIF; break; case COND_ELSE: if (last_cond != COND_IF && last_cond != COND_ELIF) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "syntax error: `else'"); return -1; } last_cond = COND_NONE; break; case COND_NONE: last_cond = COND_NONE; break; } ms->c.li[cont_level].last_cond = last_cond; return 0; } #endif /* ENABLE_CONDITIONALS */ file_private int parse_indirect_modifier(struct magic_set *ms, struct magic *m, const char **lp) { const char *l = *lp; while (!isspace(CAST(unsigned char, *++l))) switch (*l) { case CHAR_INDIRECT_RELATIVE: m->str_flags |= INDIRECT_RELATIVE; break; default: if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "indirect modifier `%c' " "invalid", *l); *lp = l; return -1; } *lp = l; return 0; } file_private void parse_op_modifier(struct magic_set *ms, struct magic *m, const char **lp, int op) { const char *l = *lp; char *t; uint64_t val; ++l; m->mask_op |= op; val = CAST(uint64_t, strtoull(l, &t, 0)); l = t; m->num_mask = file_signextend(ms, m, val); eatsize(&l); *lp = l; } file_private int parse_string_modifier(struct magic_set *ms, struct magic *m, const char **lp) { const char *l = *lp; char *t; int have_range = 0; while (!isspace(CAST(unsigned char, *++l))) { switch (*l) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (have_range && (ms->flags & MAGIC_CHECK)) file_magwarn(ms, "multiple ranges"); have_range = 1; m->str_range = CAST(uint32_t, strtoul(l, &t, 0)); if (m->str_range == 0) file_magwarn(ms, "zero range"); l = t - 1; break; case CHAR_COMPACT_WHITESPACE: m->str_flags |= STRING_COMPACT_WHITESPACE; break; case CHAR_COMPACT_OPTIONAL_WHITESPACE: m->str_flags |= STRING_COMPACT_OPTIONAL_WHITESPACE; break; case CHAR_IGNORE_LOWERCASE: m->str_flags |= STRING_IGNORE_LOWERCASE; break; case CHAR_IGNORE_UPPERCASE: m->str_flags |= STRING_IGNORE_UPPERCASE; break; case CHAR_REGEX_OFFSET_START: m->str_flags |= REGEX_OFFSET_START; break; case CHAR_BINTEST: m->str_flags |= STRING_BINTEST; break; case CHAR_TEXTTEST: m->str_flags |= STRING_TEXTTEST; break; case CHAR_TRIM: m->str_flags |= STRING_TRIM; break; case CHAR_FULL_WORD: m->str_flags |= STRING_FULL_WORD; break; case CHAR_PSTRING_1_LE: #define SET_LENGTH(a) m->str_flags = (m->str_flags & ~PSTRING_LEN) | (a) if (m->type != FILE_PSTRING) goto bad; SET_LENGTH(PSTRING_1_LE); break; case CHAR_PSTRING_2_BE: if (m->type != FILE_PSTRING) goto bad; SET_LENGTH(PSTRING_2_BE); break; case CHAR_PSTRING_2_LE: if (m->type != FILE_PSTRING) goto bad; SET_LENGTH(PSTRING_2_LE); break; case CHAR_PSTRING_4_BE: if (m->type != FILE_PSTRING) goto bad; SET_LENGTH(PSTRING_4_BE); break; case CHAR_PSTRING_4_LE: switch (m->type) { case FILE_PSTRING: case FILE_REGEX: break; default: goto bad; } SET_LENGTH(PSTRING_4_LE); break; case CHAR_PSTRING_LENGTH_INCLUDES_ITSELF: if (m->type != FILE_PSTRING) goto bad; m->str_flags |= PSTRING_LENGTH_INCLUDES_ITSELF; break; default: bad: if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "string modifier `%c' " "invalid", *l); goto out; } /* allow multiple '/' for readability */ if (l[1] == '/' && !isspace(CAST(unsigned char, l[2]))) l++; } if (string_modifier_check(ms, m) == -1) goto out; *lp = l; return 0; out: *lp = l; return -1; } /* * parse one line from magic file, put into magic[index++] if valid */ file_private int parse(struct magic_set *ms, struct magic_entry *me, const char *file, const char *line, size_t lineno, int action) { #ifdef ENABLE_CONDITIONALS static uint32_t last_cont_level = 0; #endif size_t i; struct magic *m; const char *l = line; char *t; int op; uint32_t cont_level; int32_t diff; cont_level = 0; /* * Parse the offset. */ while (*l == '>') { ++l; /* step over */ cont_level++; } #ifdef ENABLE_CONDITIONALS if (cont_level == 0 || cont_level > last_cont_level) if (file_check_mem(ms, cont_level) == -1) return -1; last_cont_level = cont_level; #endif if (cont_level != 0) { if (me->mp == NULL) { file_magerror(ms, "No current entry for continuation"); return -1; } if (me->cont_count == 0) { file_magerror(ms, "Continuations present with 0 count"); return -1; } m = &me->mp[me->cont_count - 1]; diff = CAST(int32_t, cont_level) - CAST(int32_t, m->cont_level); if (diff > 1) file_magwarn(ms, "New continuation level %u is more " "than one larger than current level %u", cont_level, m->cont_level); if (me->cont_count == me->max_count) { struct magic *nm; size_t cnt = me->max_count + ALLOC_CHUNK; if ((nm = CAST(struct magic *, realloc(me->mp, sizeof(*nm) * cnt))) == NULL) { file_oomem(ms, sizeof(*nm) * cnt); return -1; } me->mp = nm; me->max_count = CAST(uint32_t, cnt); } m = &me->mp[me->cont_count++]; (void)memset(m, 0, sizeof(*m)); m->cont_level = cont_level; } else { static const size_t len = sizeof(*m) * ALLOC_CHUNK; if (me->mp != NULL) return 1; if ((m = CAST(struct magic *, malloc(len))) == NULL) { file_oomem(ms, len); return -1; } me->mp = m; me->max_count = ALLOC_CHUNK; (void)memset(m, 0, sizeof(*m)); m->factor_op = FILE_FACTOR_OP_NONE; m->cont_level = 0; me->cont_count = 1; } m->lineno = CAST(uint32_t, lineno); if (*l == '&') { /* m->cont_level == 0 checked below. */ ++l; /* step over */ m->flag |= OFFADD; } if (*l == '(') { ++l; /* step over */ m->flag |= INDIR; if (m->flag & OFFADD) m->flag = (m->flag & ~OFFADD) | INDIROFFADD; if (*l == '&') { /* m->cont_level == 0 checked below */ ++l; /* step over */ m->flag |= OFFADD; } } /* Indirect offsets are not valid at level 0. */ if (m->cont_level == 0 && (m->flag & (OFFADD | INDIROFFADD))) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "relative offset at level 0"); return -1; } /* get offset, then skip over it */ if (*l == '-' || *l == '+') { ++l; /* step over */ m->flag |= l[-1] == '-' ? OFFNEGATIVE : OFFPOSITIVE; } m->offset = CAST(int32_t, strtol(l, &t, 0)); if (l == t) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "offset `%s' invalid", l); return -1; } l = t; if (m->flag & INDIR) { m->in_type = FILE_LONG; m->in_offset = 0; m->in_op = 0; /* * read [.,lbs][+-]nnnnn) */ if (*l == '.' || *l == ',') { if (*l == ',') m->in_op |= FILE_OPSIGNED; l++; switch (*l) { case 'l': m->in_type = FILE_LELONG; break; case 'L': m->in_type = FILE_BELONG; break; case 'm': m->in_type = FILE_MELONG; break; case 'h': case 's': m->in_type = FILE_LESHORT; break; case 'H': case 'S': m->in_type = FILE_BESHORT; break; case 'c': case 'b': case 'C': case 'B': m->in_type = FILE_BYTE; break; case 'e': case 'f': case 'g': m->in_type = FILE_LEDOUBLE; break; case 'E': case 'F': case 'G': m->in_type = FILE_BEDOUBLE; break; case 'i': m->in_type = FILE_LEID3; break; case 'I': m->in_type = FILE_BEID3; break; case 'o': m->in_type = FILE_OCTAL; break; case 'q': m->in_type = FILE_LEQUAD; break; case 'Q': m->in_type = FILE_BEQUAD; break; default: if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "indirect offset type `%c' invalid", *l); return -1; } l++; } if (*l == '~') { m->in_op |= FILE_OPINVERSE; l++; } if ((op = get_op(*l)) != -1) { m->in_op |= op; l++; } if (*l == '(') { m->in_op |= FILE_OPINDIRECT; l++; } if (isdigit(CAST(unsigned char, *l)) || *l == '-') { m->in_offset = CAST(int32_t, strtol(l, &t, 0)); if (l == t) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "in_offset `%s' invalid", l); return -1; } l = t; } if (*l++ != ')' || ((m->in_op & FILE_OPINDIRECT) && *l++ != ')')) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "missing ')' in indirect offset"); return -1; } } EATAB; #ifdef ENABLE_CONDITIONALS m->cond = get_cond(l, &l); if (check_cond(ms, m->cond, cont_level) == -1) return -1; EATAB; #endif /* * Parse the type. */ if (*l == 'u') { /* * Try it as a keyword type prefixed by "u"; match what * follows the "u". If that fails, try it as an SUS * integer type. */ m->type = get_type(type_tbl, l + 1, &l); if (m->type == FILE_INVALID) { /* * Not a keyword type; parse it as an SUS type, * 'u' possibly followed by a number or C/S/L. */ m->type = get_standard_integer_type(l, &l); } /* It's unsigned. */ if (m->type != FILE_INVALID) m->flag |= UNSIGNED; } else { /* * Try it as a keyword type. If that fails, try it as * an SUS integer type if it begins with "d" or as an * SUS string type if it begins with "s". In any case, * it's not unsigned. */ m->type = get_type(type_tbl, l, &l); if (m->type == FILE_INVALID) { /* * Not a keyword type; parse it as an SUS type, * either 'd' possibly followed by a number or * C/S/L, or just 's'. */ if (*l == 'd') m->type = get_standard_integer_type(l, &l); else if (*l == 's' && !isalpha(CAST(unsigned char, l[1]))) { m->type = FILE_STRING; ++l; } } } if (m->type == FILE_INVALID) { /* Not found - try it as a special keyword. */ m->type = get_type(special_tbl, l, &l); } if (m->type == FILE_INVALID) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "type `%s' invalid", l); return -1; } if (m->type == FILE_NAME && cont_level != 0) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "`name%s' entries can only be " "declared at top level", l); return -1; } /* New-style anding: "0 byte&0x80 =0x80 dynamically linked" */ /* New and improved: ~ & | ^ + - * / % -- exciting, isn't it? */ m->mask_op = 0; if (*l == '~') { if (!IS_STRING(m->type)) m->mask_op |= FILE_OPINVERSE; else if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "'~' invalid for string types"); ++l; } m->str_range = 0; m->str_flags = m->type == FILE_PSTRING ? PSTRING_1_LE : 0; if ((op = get_op(*l)) != -1) { if (IS_STRING(m->type)) { int r; if (op != FILE_OPDIVIDE) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "invalid string/indirect op: " "`%c'", *t); return -1; } if (m->type == FILE_INDIRECT) r = parse_indirect_modifier(ms, m, &l); else r = parse_string_modifier(ms, m, &l); if (r == -1) return -1; } else parse_op_modifier(ms, m, &l, op); } /* * We used to set mask to all 1's here, instead let's just not do * anything if mask = 0 (unless you have a better idea) */ EATAB; switch (*l) { case '>': case '<': m->reln = *l; ++l; if (*l == '=') { if (ms->flags & MAGIC_CHECK) { file_magwarn(ms, "%c= not supported", m->reln); return -1; } ++l; } break; /* Old-style anding: "0 byte &0x80 dynamically linked" */ case '&': case '^': case '=': m->reln = *l; ++l; if (*l == '=') { /* HP compat: ignore &= etc. */ ++l; } break; case '!': m->reln = *l; ++l; break; default: m->reln = '='; /* the default relation */ if (*l == 'x' && ((isascii(CAST(unsigned char, l[1])) && isspace(CAST(unsigned char, l[1]))) || !l[1])) { m->reln = *l; ++l; } break; } /* * Grab the value part, except for an 'x' reln. */ if (m->reln != 'x' && getvalue(ms, m, &l, action)) return -1; /* * TODO finish this macro and start using it! * #define offsetcheck {if (offset > ms->bytes_max -1) * magwarn("offset too big"); } */ /* * Now get last part - the description */ EATAB; if (l[0] == '\b') { ++l; m->flag |= NOSPACE; } else if ((l[0] == '\\') && (l[1] == 'b')) { ++l; ++l; m->flag |= NOSPACE; } for (i = 0; (m->desc[i++] = *l++) != '\0' && i < sizeof(m->desc); ) continue; if (m->desc[0] == '\0') { // Tuck in the filename for debugging. strlcpy(m->desc + 1, file, sizeof(m->desc) - 1); } if (i == sizeof(m->desc)) { m->desc[sizeof(m->desc) - 1] = '\0'; if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "description `%s' truncated", m->desc); } /* * We only do this check while compiling, or if any of the magic * files were not compiled. */ if (ms->flags & MAGIC_CHECK) { if (check_format(ms, m) == -1) return -1; } #ifndef COMPILE_ONLY if (action == FILE_CHECK) { file_mdump(m); } #endif m->mimetype[0] = '\0'; /* initialise MIME type to none */ return 0; } /* * parse a STRENGTH annotation line from magic file, put into magic[index - 1] * if valid */ /*ARGSUSED*/ file_private int parse_strength(struct magic_set *ms, struct magic_entry *me, const char *line, size_t len __attribute__((__unused__))) { const char *l = line; char *el; unsigned long factor; char sbuf[512]; struct magic *m = &me->mp[0]; if (m->factor_op != FILE_FACTOR_OP_NONE) { file_magwarn(ms, "Current entry already has a strength type: %c %d", m->factor_op, m->factor); return -1; } if (m->type == FILE_NAME) { file_magwarn(ms, "%s: Strength setting is not supported in " "\"name\" magic entries", file_printable(ms, sbuf, sizeof(sbuf), m->value.s, sizeof(m->value.s))); return -1; } EATAB; switch (*l) { case FILE_FACTOR_OP_NONE: break; case FILE_FACTOR_OP_PLUS: case FILE_FACTOR_OP_MINUS: case FILE_FACTOR_OP_TIMES: case FILE_FACTOR_OP_DIV: m->factor_op = *l++; break; default: file_magwarn(ms, "Unknown factor op `%c'", *l); return -1; } EATAB; factor = strtoul(l, &el, 0); if (factor > 255) { file_magwarn(ms, "Too large factor `%lu'", factor); goto out; } if (*el && !isspace(CAST(unsigned char, *el))) { file_magwarn(ms, "Bad factor `%s'", l); goto out; } m->factor = CAST(uint8_t, factor); if (m->factor == 0 && m->factor_op == FILE_FACTOR_OP_DIV) { file_magwarn(ms, "Cannot have factor op `%c' and factor %u", m->factor_op, m->factor); goto out; } return 0; out: m->factor_op = FILE_FACTOR_OP_NONE; m->factor = 0; return -1; } file_private int goodchar(unsigned char x, const char *extra) { return (isascii(x) && isalnum(x)) || strchr(extra, x); } file_private int parse_extra(struct magic_set *ms, struct magic_entry *me, const char *line, size_t llen, off_t off, size_t len, const char *name, const char *extra, int nt) { size_t i; const char *l = line; struct magic *m = &me->mp[me->cont_count == 0 ? 0 : me->cont_count - 1]; char *buf = CAST(char *, CAST(void *, m)) + off; if (buf[0] != '\0') { len = nt ? strlen(buf) : len; file_magwarn(ms, "Current entry already has a %s type " "`%.*s', new type `%s'", name, CAST(int, len), buf, l); return -1; } if (*m->desc == '\0') { file_magwarn(ms, "Current entry does not yet have a " "description for adding a %s type", name); return -1; } EATAB; for (i = 0; *l && i < llen && i < len && goodchar(*l, extra); buf[i++] = *l++) continue; if (i == len && *l) { if (nt) buf[len - 1] = '\0'; if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "%s type `%s' truncated %" SIZE_T_FORMAT "u", name, line, i); } else { if (!isspace(CAST(unsigned char, *l)) && !goodchar(*l, extra)) file_magwarn(ms, "%s type `%s' has bad char '%c'", name, line, *l); if (nt) buf[i] = '\0'; } if (i > 0) return 0; file_magerror(ms, "Bad magic entry '%s'", line); return -1; } /* * Parse an Apple CREATOR/TYPE annotation from magic file and put it into * magic[index - 1] */ file_private int parse_apple(struct magic_set *ms, struct magic_entry *me, const char *line, size_t len) { return parse_extra(ms, me, line, len, CAST(off_t, offsetof(struct magic, apple)), sizeof(me->mp[me->cont_count - 1].apple), "APPLE", "!+-./?", 0); } /* * Parse a comma-separated list of extensions */ file_private int parse_ext(struct magic_set *ms, struct magic_entry *me, const char *line, size_t len) { return parse_extra(ms, me, line, len, CAST(off_t, offsetof(struct magic, ext)), sizeof(me->mp[me->cont_count - 1].ext), "EXTENSION", ",!+-/@?_$&~", 0); /* & for b&w */ /* ~ for journal~ */ } /* * parse a MIME annotation line from magic file, put into magic[index - 1] * if valid */ file_private int parse_mime(struct magic_set *ms, struct magic_entry *me, const char *line, size_t len) { return parse_extra(ms, me, line, len, CAST(off_t, offsetof(struct magic, mimetype)), sizeof(me->mp[me->cont_count - 1].mimetype), "MIME", "+-/.$?:{};=", 1); } file_private int check_format_type(const char *ptr, int type, const char **estr) { int quad = 0, h; size_t len, cnt; if (*ptr == '\0') { /* Missing format string; bad */ *estr = "missing format spec"; return -1; } switch (file_formats[type]) { case FILE_FMT_QUAD: quad = 1; /*FALLTHROUGH*/ case FILE_FMT_NUM: if (quad == 0) { switch (type) { case FILE_BYTE: h = 2; break; case FILE_SHORT: case FILE_BESHORT: case FILE_LESHORT: h = 1; break; case FILE_LONG: case FILE_BELONG: case FILE_LELONG: case FILE_MELONG: case FILE_LEID3: case FILE_BEID3: case FILE_INDIRECT: h = 0; break; default: fprintf(stderr, "Bad number format %d", type); abort(); } } else h = 0; while (*ptr && strchr("-.#", *ptr) != NULL) ptr++; #define CHECKLEN() do { \ for (len = cnt = 0; isdigit(CAST(unsigned char, *ptr)); ptr++, cnt++) \ len = len * 10 + (*ptr - '0'); \ if (cnt > 5 || len > 1024) \ goto toolong; \ } while (/*CONSTCOND*/0) CHECKLEN(); if (*ptr == '.') ptr++; CHECKLEN(); if (quad) { if (*ptr++ != 'l') goto invalid; if (*ptr++ != 'l') goto invalid; } switch (*ptr++) { #ifdef STRICT_FORMAT /* "long" formats are int formats for us */ /* so don't accept the 'l' modifier */ case 'l': switch (*ptr++) { case 'i': case 'd': case 'u': case 'o': case 'x': case 'X': if (h == 0) return 0; /*FALLTHROUGH*/ default: goto invalid; } /* * Don't accept h and hh modifiers. They make writing * magic entries more complicated, for very little benefit */ case 'h': if (h-- <= 0) goto invalid; switch (*ptr++) { case 'h': if (h-- <= 0) goto invalid; switch (*ptr++) { case 'i': case 'd': case 'u': case 'o': case 'x': case 'X': return 0; default: goto invalid; } case 'i': case 'd': case 'u': case 'o': case 'x': case 'X': if (h == 0) return 0; /*FALLTHROUGH*/ default: goto invalid; } #endif case 'c': if (h == 2) return 0; goto invalid; case 'i': case 'd': case 'u': case 'o': case 'x': case 'X': #ifdef STRICT_FORMAT if (h == 0) return 0; /*FALLTHROUGH*/ #else return 0; #endif default: goto invalid; } case FILE_FMT_FLOAT: case FILE_FMT_DOUBLE: if (*ptr == '-') ptr++; if (*ptr == '.') ptr++; CHECKLEN(); if (*ptr == '.') ptr++; CHECKLEN(); switch (*ptr++) { case 'e': case 'E': case 'f': case 'F': case 'g': case 'G': return 0; default: goto invalid; } case FILE_FMT_STR: if (*ptr == '-') ptr++; while (isdigit(CAST(unsigned char, *ptr))) ptr++; if (*ptr == '.') { ptr++; while (isdigit(CAST(unsigned char , *ptr))) ptr++; } switch (*ptr++) { case 's': return 0; default: goto invalid; } default: /* internal error */ fprintf(stderr, "Bad file format %d", type); abort(); } invalid: *estr = "not valid"; return -1; toolong: *estr = "too long"; return -1; } /* * Check that the optional printf format in description matches * the type of the magic. */ file_private int check_format(struct magic_set *ms, struct magic *m) { char *ptr; const char *estr; for (ptr = m->desc; *ptr; ptr++) if (*ptr == '%') break; if (*ptr == '\0') { /* No format string; ok */ return 1; } assert(file_nformats == file_nnames); if (m->type >= file_nformats) { file_magwarn(ms, "Internal error inconsistency between " "m->type and format strings"); return -1; } if (file_formats[m->type] == FILE_FMT_NONE) { file_magwarn(ms, "No format string for `%s' with description " "`%s'", m->desc, file_names[m->type]); return -1; } ptr++; if (check_format_type(ptr, m->type, &estr) == -1) { /* * TODO: this error message is unhelpful if the format * string is not one character long */ file_magwarn(ms, "Printf format is %s for type " "`%s' in description `%s'", estr, file_names[m->type], m->desc); return -1; } for (; *ptr; ptr++) { if (*ptr == '%') { file_magwarn(ms, "Too many format strings (should have at most one) " "for `%s' with description `%s'", file_names[m->type], m->desc); return -1; } } return 0; } /* * Read a numeric value from a pointer, into the value union of a magic * pointer, according to the magic type. Update the string pointer to point * just after the number read. Return 0 for success, non-zero for failure. */ file_private int getvalue(struct magic_set *ms, struct magic *m, const char **p, int action) { char *ep; uint64_t ull; int y; switch (m->type) { case FILE_BESTRING16: case FILE_LESTRING16: case FILE_STRING: case FILE_PSTRING: case FILE_REGEX: case FILE_SEARCH: case FILE_NAME: case FILE_USE: case FILE_DER: case FILE_OCTAL: *p = getstr(ms, m, *p, action == FILE_COMPILE); if (*p == NULL) { if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "cannot get string from `%s'", m->value.s); return -1; } if (m->type == FILE_REGEX) { file_regex_t rx; int rc = file_regcomp(ms, &rx, m->value.s, REG_EXTENDED); if (rc == 0) { file_regfree(&rx); } return rc ? -1 : 0; } return 0; default: if (m->reln == 'x') return 0; break; } switch (m->type) { case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: errno = 0; #ifdef HAVE_STRTOF m->value.f = strtof(*p, &ep); #else m->value.f = (float)strtod(*p, &ep); #endif if (errno == 0) *p = ep; return 0; case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: errno = 0; m->value.d = strtod(*p, &ep); if (errno == 0) *p = ep; return 0; case FILE_GUID: if (file_parse_guid(*p, m->value.guid) == -1) return -1; *p += FILE_GUID_SIZE - 1; return 0; default: errno = 0; ull = CAST(uint64_t, strtoull(*p, &ep, 0)); m->value.q = file_signextend(ms, m, ull); if (*p == ep) { file_magwarn(ms, "Unparsable number `%s'", *p); return -1; } else { size_t ts = typesize(m->type); uint64_t x; const char *q; if (ts == FILE_BADSIZE) { file_magwarn(ms, "Expected numeric type got `%s'", type_tbl[m->type].name); return -1; } for (q = *p; isspace(CAST(unsigned char, *q)); q++) continue; if (*q == '-' && ull != UINT64_MAX) ull = -CAST(int64_t, ull); switch (ts) { case 1: x = CAST(uint64_t, ull & ~0xffULL); y = (x & ~0xffULL) != ~0xffULL; break; case 2: x = CAST(uint64_t, ull & ~0xffffULL); y = (x & ~0xffffULL) != ~0xffffULL; break; case 4: x = CAST(uint64_t, ull & ~0xffffffffULL); y = (x & ~0xffffffffULL) != ~0xffffffffULL; break; case 8: x = 0; y = 0; break; default: fprintf(stderr, "Bad width %zu", ts); abort(); } if (x && y) { file_magwarn(ms, "Overflow for numeric" " type `%s' value %#" PRIx64, type_tbl[m->type].name, ull); return -1; } } if (errno == 0) { *p = ep; eatsize(p); } return 0; } } /* * Convert a string containing C character escapes. Stop at an unescaped * space or tab. * Copy the converted version to "m->value.s", and the length in m->vallen. * Return updated scan pointer as function result. Warn if set. */ file_private const char * getstr(struct magic_set *ms, struct magic *m, const char *s, int warn) { const char *origs = s; char *p = m->value.s; size_t plen = sizeof(m->value.s); char *origp = p; char *pmax = p + plen - 1; int c; int val; size_t bracket_nesting = 0; while ((c = *s++) != '\0') { if (isspace(CAST(unsigned char, c))) break; if (p >= pmax) { file_error(ms, 0, "string too long: `%s'", origs); return NULL; } if (c != '\\') { if (c == '[') { bracket_nesting++; } if (c == ']' && bracket_nesting > 0) { bracket_nesting--; } *p++ = CAST(char, c); continue; } switch(c = *s++) { case '\0': if (warn) file_magwarn(ms, "incomplete escape"); s--; goto out; case '.': if (m->type == FILE_REGEX && bracket_nesting == 0 && warn) { file_magwarn(ms, "escaped dot ('.') found, " "use \\\\. instead"); } warn = 0; /* already did */ /*FALLTHROUGH*/ case '\t': if (warn) { file_magwarn(ms, "escaped tab found, use \\\\t instead"); warn = 0; /* already did */ } /*FALLTHROUGH*/ default: if (warn) { if (isprint(CAST(unsigned char, c))) { /* Allow escaping of * ``relations'' */ if (strchr("<>&^=!", c) == NULL && (m->type != FILE_REGEX || strchr("[]().*?^$|{}", c) == NULL)) { file_magwarn(ms, "no " "need to escape " "`%c'", c); } } else { file_magwarn(ms, "unknown escape sequence: " "\\%03o", c); } } /*FALLTHROUGH*/ /* space, perhaps force people to use \040? */ case ' ': #if 0 /* * Other things people escape, but shouldn't need to, * so we disallow them */ case '\'': case '"': case '?': #endif /* Relations */ case '>': case '<': case '&': case '^': case '=': case '!': /* and backslash itself */ case '\\': *p++ = CAST(char, c); break; case 'a': *p++ = '\a'; break; case 'b': *p++ = '\b'; break; case 'f': *p++ = '\f'; break; case 'n': *p++ = '\n'; break; case 'r': *p++ = '\r'; break; case 't': *p++ = '\t'; break; case 'v': *p++ = '\v'; break; /* \ and up to 3 octal digits */ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': val = c - '0'; c = *s++; /* try for 2 */ if (c >= '0' && c <= '7') { val = (val << 3) | (c - '0'); c = *s++; /* try for 3 */ if (c >= '0' && c <= '7') val = (val << 3) | (c-'0'); else --s; } else --s; *p++ = CAST(char, val); break; /* \x and up to 2 hex digits */ case 'x': val = 'x'; /* Default if no digits */ c = hextoint(*s++); /* Get next char */ if (c >= 0) { val = c; c = hextoint(*s++); if (c >= 0) val = (val << 4) + c; else --s; } else --s; *p++ = CAST(char, val); break; } } --s; out: *p = '\0'; m->vallen = CAST(unsigned char, (p - origp)); if (m->type == FILE_PSTRING) { size_t l = file_pstring_length_size(ms, m); if (l == FILE_BADSIZE) return NULL; m->vallen += CAST(unsigned char, l); } return s; } /* Single hex char to int; -1 if not a hex char. */ file_private int hextoint(int c) { if (!isascii(CAST(unsigned char, c))) return -1; if (isdigit(CAST(unsigned char, c))) return c - '0'; if ((c >= 'a') && (c <= 'f')) return c + 10 - 'a'; if (( c>= 'A') && (c <= 'F')) return c + 10 - 'A'; return -1; } /* * Print a string containing C character escapes. */ file_protected void file_showstr(FILE *fp, const char *s, size_t len) { char c; for (;;) { if (len == FILE_BADSIZE) { c = *s++; if (c == '\0') break; } else { if (len-- == 0) break; c = *s++; } if (c >= 040 && c <= 0176) /* TODO isprint && !iscntrl */ (void) fputc(c, fp); else { (void) fputc('\\', fp); switch (c) { case '\a': (void) fputc('a', fp); break; case '\b': (void) fputc('b', fp); break; case '\f': (void) fputc('f', fp); break; case '\n': (void) fputc('n', fp); break; case '\r': (void) fputc('r', fp); break; case '\t': (void) fputc('t', fp); break; case '\v': (void) fputc('v', fp); break; default: (void) fprintf(fp, "%.3o", c & 0377); break; } } } } /* * eatsize(): Eat the size spec from a number [eg. 10UL] */ file_private void eatsize(const char **p) { const char *l = *p; if (LOWCASE(*l) == 'u') l++; switch (LOWCASE(*l)) { case 'l': /* long */ case 's': /* short */ case 'h': /* short */ case 'b': /* char/byte */ case 'c': /* char/byte */ l++; /*FALLTHROUGH*/ default: break; } *p = l; } /* * handle a buffer containing a compiled file. */ file_private struct magic_map * apprentice_buf(struct magic_set *ms, struct magic *buf, size_t len) { struct magic_map *map; if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) { file_oomem(ms, sizeof(*map)); return NULL; } map->len = len; map->p = buf; map->type = MAP_TYPE_USER; if (check_buffer(ms, map, "buffer") != 0) { apprentice_unmap(map); return NULL; } return map; } /* * handle a compiled file. */ file_private struct magic_map * apprentice_map(struct magic_set *ms, const char *fn) { int fd; struct stat st; char *dbname = NULL; struct magic_map *map; struct magic_map *rv = NULL; fd = -1; if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) { file_oomem(ms, sizeof(*map)); goto error; } map->type = MAP_TYPE_USER; /* unspecified */ dbname = mkdbname(ms, fn, 0); if (dbname == NULL) goto error; if ((fd = open(dbname, O_RDONLY|O_BINARY)) == -1) goto error; if (fstat(fd, &st) == -1) { file_error(ms, errno, "cannot stat `%s'", dbname); goto error; } if (st.st_size < 8 || st.st_size > maxoff_t()) { file_error(ms, 0, "file `%s' is too %s", dbname, st.st_size < 8 ? "small" : "large"); goto error; } map->len = CAST(size_t, st.st_size); #ifdef QUICK map->type = MAP_TYPE_MMAP; if ((map->p = mmap(0, CAST(size_t, st.st_size), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FILE, fd, CAST(off_t, 0))) == MAP_FAILED) { file_error(ms, errno, "cannot map `%s'", dbname); goto error; } #else map->type = MAP_TYPE_MALLOC; if ((map->p = CAST(void *, malloc(map->len))) == NULL) { file_oomem(ms, map->len); goto error; } if (read(fd, map->p, map->len) != (ssize_t)map->len) { file_badread(ms); goto error; } #endif (void)close(fd); fd = -1; if (check_buffer(ms, map, dbname) != 0) { goto error; } #ifdef QUICK if (mprotect(map->p, CAST(size_t, st.st_size), PROT_READ) == -1) { file_error(ms, errno, "cannot mprotect `%s'", dbname); goto error; } #endif free(dbname); return map; error: if (fd != -1) (void)close(fd); apprentice_unmap(map); free(dbname); return rv; } file_private int check_buffer(struct magic_set *ms, struct magic_map *map, const char *dbname) { uint32_t *ptr; uint32_t entries, nentries; uint32_t version; int i, needsbyteswap; entries = CAST(uint32_t, map->len / sizeof(struct magic)); if (entries < MAGIC_SETS + 1) { file_error(ms, 0, "Too few magic entries %u in `%s'", entries, dbname); return -1; } if ((entries * sizeof(struct magic)) != map->len) { file_error(ms, 0, "Size of `%s' %" SIZE_T_FORMAT "u is not " "a multiple of %" SIZE_T_FORMAT "u", dbname, map->len, sizeof(struct magic)); return -1; } ptr = CAST(uint32_t *, map->p); if (*ptr != MAGICNO) { if (swap4(*ptr) != MAGICNO) { file_error(ms, 0, "bad magic in `%s'", dbname); return -1; } needsbyteswap = 1; } else needsbyteswap = 0; if (needsbyteswap) version = swap4(ptr[1]); else version = ptr[1]; if (version != VERSIONNO) { file_error(ms, 0, "File %s supports only version %d magic " "files. `%s' is version %d", VERSION, VERSIONNO, dbname, version); return -1; } map->magic[0] = CAST(struct magic *, map->p) + 1; nentries = 0; for (i = 0; i < MAGIC_SETS; i++) { if (needsbyteswap) map->nmagic[i] = swap4(ptr[i + 2]); else map->nmagic[i] = ptr[i + 2]; if (i != MAGIC_SETS - 1) map->magic[i + 1] = map->magic[i] + map->nmagic[i]; nentries += map->nmagic[i]; } if (entries != nentries + 1) { file_error(ms, 0, "Inconsistent entries in `%s' %u != %u", dbname, entries, nentries + 1); return -1; } if (needsbyteswap) for (i = 0; i < MAGIC_SETS; i++) byteswap(map->magic[i], map->nmagic[i]); return 0; } /* * handle an mmaped file. */ file_private int apprentice_compile(struct magic_set *ms, struct magic_map *map, const char *fn) { static const size_t nm = sizeof(*map->nmagic) * MAGIC_SETS; static const size_t m = sizeof(**map->magic); int fd = -1; size_t len; char *dbname; int rv = -1; uint32_t i; union { struct magic m; uint32_t h[2 + MAGIC_SETS]; } hdr; dbname = mkdbname(ms, fn, 1); if (dbname == NULL) goto out; if ((fd = open(dbname, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644)) == -1) { file_error(ms, errno, "cannot open `%s'", dbname); goto out; } memset(&hdr, 0, sizeof(hdr)); hdr.h[0] = MAGICNO; hdr.h[1] = VERSIONNO; memcpy(hdr.h + 2, map->nmagic, nm); if (write(fd, &hdr, sizeof(hdr)) != CAST(ssize_t, sizeof(hdr))) { file_error(ms, errno, "error writing `%s'", dbname); goto out2; } for (i = 0; i < MAGIC_SETS; i++) { len = m * map->nmagic[i]; if (write(fd, map->magic[i], len) != CAST(ssize_t, len)) { file_error(ms, errno, "error writing `%s'", dbname); goto out2; } } rv = 0; out2: if (fd != -1) (void)close(fd); out: apprentice_unmap(map); free(dbname); return rv; } file_private const char ext[] = ".mgc"; /* * make a dbname */ file_private char * mkdbname(struct magic_set *ms, const char *fn, int strip) { const char *p, *q; char *buf; if (strip) { if ((p = strrchr(fn, '/')) != NULL) fn = ++p; } for (q = fn; *q; q++) continue; /* Look for .mgc */ for (p = ext + sizeof(ext) - 1; p >= ext && q >= fn; p--, q--) if (*p != *q) break; /* Did not find .mgc, restore q */ if (p >= ext) for (q = fn; *q; q++) continue; q++; /* Compatibility with old code that looked in .mime */ if (ms->flags & MAGIC_MIME) { if (asprintf(&buf, "%.*s.mime%s", CAST(int, q - fn), fn, ext) < 0) return NULL; if (access(buf, R_OK) != -1) { ms->flags &= MAGIC_MIME_TYPE; return buf; } free(buf); } if (asprintf(&buf, "%.*s%s", CAST(int, q - fn), fn, ext) < 0) return NULL; /* Compatibility with old code that looked in .mime */ if (strstr(fn, ".mime") != NULL) ms->flags &= MAGIC_MIME_TYPE; return buf; } /* * Byteswap an mmap'ed file if needed */ file_private void byteswap(struct magic *magic, uint32_t nmagic) { uint32_t i; for (i = 0; i < nmagic; i++) bs1(&magic[i]); } #if !defined(HAVE_BYTESWAP_H) && !defined(HAVE_SYS_BSWAP_H) /* * swap a short */ file_private uint16_t swap2(uint16_t sv) { uint16_t rv; uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv)); uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv)); d[0] = s[1]; d[1] = s[0]; return rv; } /* * swap an int */ file_private uint32_t swap4(uint32_t sv) { uint32_t rv; uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv)); uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv)); d[0] = s[3]; d[1] = s[2]; d[2] = s[1]; d[3] = s[0]; return rv; } /* * swap a quad */ file_private uint64_t swap8(uint64_t sv) { uint64_t rv; uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv)); uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv)); # if 0 d[0] = s[3]; d[1] = s[2]; d[2] = s[1]; d[3] = s[0]; d[4] = s[7]; d[5] = s[6]; d[6] = s[5]; d[7] = s[4]; # else d[0] = s[7]; d[1] = s[6]; d[2] = s[5]; d[3] = s[4]; d[4] = s[3]; d[5] = s[2]; d[6] = s[1]; d[7] = s[0]; # endif return rv; } #endif file_protected uintmax_t file_varint2uintmax_t(const unsigned char *us, int t, size_t *l) { uintmax_t x = 0; const unsigned char *c; if (t == FILE_LEVARINT) { for (c = us; *c; c++) { if ((*c & 0x80) == 0) break; } if (l) *l = c - us + 1; for (; c >= us; c--) { x |= *c & 0x7f; x <<= 7; } } else { for (c = us; *c; c++) { x |= *c & 0x7f; if ((*c & 0x80) == 0) break; x <<= 7; } if (l) *l = c - us + 1; } return x; } /* * byteswap a single magic entry */ file_private void bs1(struct magic *m) { m->cont_level = swap2(m->cont_level); m->offset = swap4(CAST(uint32_t, m->offset)); m->in_offset = swap4(CAST(uint32_t, m->in_offset)); m->lineno = swap4(CAST(uint32_t, m->lineno)); if (IS_STRING(m->type)) { m->str_range = swap4(m->str_range); m->str_flags = swap4(m->str_flags); } else { m->value.q = swap8(m->value.q); m->num_mask = swap8(m->num_mask); } } file_protected size_t file_pstring_length_size(struct magic_set *ms, const struct magic *m) { switch (m->str_flags & PSTRING_LEN) { case PSTRING_1_LE: return 1; case PSTRING_2_LE: case PSTRING_2_BE: return 2; case PSTRING_4_LE: case PSTRING_4_BE: return 4; default: file_error(ms, 0, "corrupt magic file " "(bad pascal string length %d)", m->str_flags & PSTRING_LEN); return FILE_BADSIZE; } } file_protected size_t file_pstring_get_length(struct magic_set *ms, const struct magic *m, const char *ss) { size_t len = 0; const unsigned char *s = RCAST(const unsigned char *, ss); unsigned int s3, s2, s1, s0; switch (m->str_flags & PSTRING_LEN) { case PSTRING_1_LE: len = *s; break; case PSTRING_2_LE: s0 = s[0]; s1 = s[1]; len = (s1 << 8) | s0; break; case PSTRING_2_BE: s0 = s[0]; s1 = s[1]; len = (s0 << 8) | s1; break; case PSTRING_4_LE: s0 = s[0]; s1 = s[1]; s2 = s[2]; s3 = s[3]; len = (s3 << 24) | (s2 << 16) | (s1 << 8) | s0; break; case PSTRING_4_BE: s0 = s[0]; s1 = s[1]; s2 = s[2]; s3 = s[3]; len = (s0 << 24) | (s1 << 16) | (s2 << 8) | s3; break; default: file_error(ms, 0, "corrupt magic file " "(bad pascal string length %d)", m->str_flags & PSTRING_LEN); return FILE_BADSIZE; } if (m->str_flags & PSTRING_LENGTH_INCLUDES_ITSELF) { size_t l = file_pstring_length_size(ms, m); if (l == FILE_BADSIZE) return l; len -= l; } return len; } file_protected int file_magicfind(struct magic_set *ms, const char *name, struct mlist *v) { uint32_t i, j; struct mlist *mlist, *ml; mlist = ms->mlist[1]; for (ml = mlist->next; ml != mlist; ml = ml->next) { struct magic *ma = ml->magic; for (i = 0; i < ml->nmagic; i++) { if (ma[i].type != FILE_NAME) continue; if (strcmp(ma[i].value.s, name) == 0) { v->magic = &ma[i]; v->magic_rxcomp = &(ml->magic_rxcomp[i]); for (j = i + 1; j < ml->nmagic; j++) if (ma[j].cont_level == 0) break; v->nmagic = j - i; return 0; } } } return -1; } file-5.46/src/softmagic.c000664 023540 023540 00000163507 14721636234 017064 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * softmagic - interpret variable magic from MAGIC */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: softmagic.c,v 1.350 2024/11/27 15:37:00 christos Exp $") #endif /* lint */ #include "magic.h" #include #include #include #include #include #include #include #include "der.h" file_private int match(struct magic_set *, struct magic *, file_regex_t **, size_t, const struct buffer *, size_t, int, int, int, uint16_t *, uint16_t *, int *, int *, int *, int *, int *); file_private int mget(struct magic_set *, struct magic *, const struct buffer *, const unsigned char *, size_t, size_t, unsigned int, int, int, int, uint16_t *, uint16_t *, int *, int *, int *, int *, int *); file_private int msetoffset(struct magic_set *, struct magic *, struct buffer *, const struct buffer *, size_t, unsigned int); file_private int magiccheck(struct magic_set *, struct magic *, file_regex_t **); file_private int mprint(struct magic_set *, struct magic *); file_private int moffset(struct magic_set *, struct magic *, const struct buffer *, size_t, int32_t *); file_private void mdebug(uint32_t, const char *, size_t); file_private int mcopy(struct magic_set *, union VALUETYPE *, int, int, const unsigned char *, uint32_t, size_t, struct magic *); file_private int mconvert(struct magic_set *, struct magic *, int); file_private int print_sep(struct magic_set *, int); file_private int handle_annotation(struct magic_set *, struct magic *, int); file_private int cvt_8(union VALUETYPE *, const struct magic *); file_private int cvt_16(union VALUETYPE *, const struct magic *); file_private int cvt_32(union VALUETYPE *, const struct magic *); file_private int cvt_64(union VALUETYPE *, const struct magic *); #define OFFSET_OOB(n, o, i) ((n) < CAST(uint32_t, (o)) || (i) > ((n) - (o))) #define BE64(p) ( \ (CAST(uint64_t, (p)[0])<<56)| \ (CAST(uint64_t, (p)[1])<<48)| \ (CAST(uint64_t, (p)[2])<<40)| \ (CAST(uint64_t, (p)[3])<<32)| \ (CAST(uint64_t, (p)[4])<<24)| \ (CAST(uint64_t, (p)[5])<<16)| \ (CAST(uint64_t, (p)[6])<<8)| \ (CAST(uint64_t, (p)[7]))) #define LE64(p) ( \ (CAST(uint64_t, (p)[7])<<56)| \ (CAST(uint64_t, (p)[6])<<48)| \ (CAST(uint64_t, (p)[5])<<40)| \ (CAST(uint64_t, (p)[4])<<32)| \ (CAST(uint64_t, (p)[3])<<24)| \ (CAST(uint64_t, (p)[2])<<16)| \ (CAST(uint64_t, (p)[1])<<8)| \ (CAST(uint64_t, (p)[0]))) #define LE32(p) ( \ (CAST(uint32_t, (p)[3])<<24)| \ (CAST(uint32_t, (p)[2])<<16)| \ (CAST(uint32_t, (p)[1])<<8)| \ (CAST(uint32_t, (p)[0]))) #define BE32(p) ( \ (CAST(uint32_t, (p)[0])<<24)| \ (CAST(uint32_t, (p)[1])<<16)| \ (CAST(uint32_t, (p)[2])<<8)| \ (CAST(uint32_t, (p)[3]))) #define ME32(p) ( \ (CAST(uint32_t, (p)[1])<<24)| \ (CAST(uint32_t, (p)[0])<<16)| \ (CAST(uint32_t, (p)[3])<<8)| \ (CAST(uint32_t, (p)[2]))) #define BE16(p) ((CAST(uint16_t, (p)[0])<<8)|(CAST(uint16_t, (p)[1]))) #define LE16(p) ((CAST(uint16_t, (p)[1])<<8)|(CAST(uint16_t, (p)[0]))) #define SEXT(s,v,p) ((s) ? \ CAST(intmax_t, CAST(int##v##_t, p)) : \ CAST(intmax_t, CAST(uint##v##_t, p))) /* * softmagic - lookup one file in parsed, in-memory copy of database * Passed the name and FILE * of one file to be typed. */ /*ARGSUSED1*/ /* nbytes passed for regularity, maybe need later */ file_protected int file_softmagic(struct magic_set *ms, const struct buffer *b, uint16_t *indir_count, uint16_t *name_count, int mode, int text) { struct mlist *ml; int rv = 0, printed_something = 0, need_separator = 0, firstline = 1; uint16_t nc, ic; if (name_count == NULL) { nc = 0; name_count = &nc; } if (indir_count == NULL) { ic = 0; indir_count = ⁣ } for (ml = ms->mlist[0]->next; ml != ms->mlist[0]; ml = ml->next) { int ret = match(ms, ml->magic, ml->magic_rxcomp, ml->nmagic, b, 0, mode, text, 0, indir_count, name_count, &printed_something, &need_separator, &firstline, NULL, NULL); switch (ret) { case -1: return ret; case 0: continue; default: if ((ms->flags & MAGIC_CONTINUE) == 0) return ret; rv = ret; break; } } return rv; } #define FILE_FMTDEBUG #ifdef FILE_FMTDEBUG #define F(a, b, c) file_fmtcheck((a), (b), (c), __FILE__, __LINE__) file_private const char * __attribute__((__format_arg__(3))) file_fmtcheck(struct magic_set *ms, const char *desc, const char *def, const char *file, size_t line) { const char *ptr; if (strchr(desc, '%') == NULL) return desc; ptr = fmtcheck(desc, def); if (ptr == def) file_magerror(ms, "%s, %" SIZE_T_FORMAT "u: format `%s' does not match" " with `%s'", file, line, desc, def); return ptr; } #else #define F(a, b, c) fmtcheck((b), (c)) #endif /* * Go through the whole list, stopping if you find a match. Process all * the continuations of that match before returning. * * We support multi-level continuations: * * At any time when processing a successful top-level match, there is a * current continuation level; it represents the level of the last * successfully matched continuation. * * Continuations above that level are skipped as, if we see one, it * means that the continuation that controls them - i.e, the * lower-level continuation preceding them - failed to match. * * Continuations below that level are processed as, if we see one, * it means we've finished processing or skipping higher-level * continuations under the control of a successful or unsuccessful * lower-level continuation, and are now seeing the next lower-level * continuation and should process it. The current continuation * level reverts to the level of the one we're seeing. * * Continuations at the current level are processed as, if we see * one, there's no lower-level continuation that may have failed. * * If a continuation matches, we bump the current continuation level * so that higher-level continuations are processed. */ file_private int match(struct magic_set *ms, struct magic *magic, file_regex_t **magic_rxcomp, size_t nmagic, const struct buffer *b, size_t offset, int mode, int text, int flip, uint16_t *indir_count, uint16_t *name_count, int *printed_something, int *need_separator, int *firstline, int *returnval, int *found_match) { uint32_t magindex = 0; unsigned int cont_level = 0; int found_matchv = 0; /* if a match is found it is set to 1*/ int returnvalv = 0, e; struct buffer bb; int print = (ms->flags & MAGIC_NODESC) == 0; /* * returnval can be 0 if a match is found, but there was no * annotation to be printed. */ if (returnval == NULL) returnval = &returnvalv; if (found_match == NULL) found_match = &found_matchv; if (file_check_mem(ms, cont_level) == -1) return -1; for (magindex = 0; magindex < nmagic; magindex++) { int flush = 0; struct magic *m = &magic[magindex]; file_regex_t **m_rxcomp = &magic_rxcomp[magindex]; if (m->type != FILE_NAME) if ((IS_STRING(m->type) && #define FLT (STRING_BINTEST | STRING_TEXTTEST) ((text && (m->str_flags & FLT) == STRING_BINTEST) || (!text && (m->str_flags & FLT) == STRING_TEXTTEST))) || (m->flag & mode) != mode) { flush: /* Skip sub-tests */ while (magindex < nmagic - 1 && magic[magindex + 1].cont_level != 0) magindex++; cont_level = 0; continue; /* Skip to next top-level test*/ } if (msetoffset(ms, m, &bb, b, offset, cont_level) == -1) goto flush; ms->line = m->lineno; /* if main entry matches, print it... */ switch (mget(ms, m, b, CAST(const unsigned char *, bb.fbuf), bb.flen, offset, cont_level, mode, text, flip, indir_count, name_count, printed_something, need_separator, firstline, returnval, found_match)) { case -1: return -1; case 0: flush = m->reln != '!'; break; default: if (m->type == FILE_INDIRECT) { *found_match = 1; *returnval = 1; } switch (magiccheck(ms, m, m_rxcomp)) { case -1: return -1; case 0: flush++; break; default: flush = 0; break; } break; } if (flush) { /* * main entry didn't match, * flush its continuations */ goto flush; } if ((e = handle_annotation(ms, m, *firstline)) != 0) { *found_match = 1; *need_separator = 1; *printed_something = 1; *returnval = 1; *firstline = 0; return e; } /* * If we are going to print something, we'll need to print * a blank before we print something else. */ if (*m->desc) { *found_match = 1; if (print) { *returnval = 1; *need_separator = 1; *printed_something = 1; if (print_sep(ms, *firstline) == -1) return -1; if (mprint(ms, m) == -1) return -1; } } switch (moffset(ms, m, &bb, offset, &ms->c.li[cont_level].off)) { case -1: case 0: goto flush; default: break; } /* and any continuations that match */ if (file_check_mem(ms, ++cont_level) == -1) return -1; while (magindex + 1 < nmagic && magic[magindex + 1].cont_level != 0) { m = &magic[++magindex]; m_rxcomp = &magic_rxcomp[magindex]; ms->line = m->lineno; /* for messages */ if (cont_level < m->cont_level) continue; if (cont_level > m->cont_level) { /* * We're at the end of the level * "cont_level" continuations. */ cont_level = m->cont_level; } if (msetoffset(ms, m, &bb, b, offset, cont_level) == -1) goto flush; if (m->flag & OFFADD) { if (cont_level == 0) { if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "direct *zero*" " cont_level\n"); return 0; } ms->offset += ms->c.li[cont_level - 1].off; } #ifdef ENABLE_CONDITIONALS if (m->cond == COND_ELSE || m->cond == COND_ELIF) { if (ms->c.li[cont_level].last_match == 1) continue; } #endif switch (mget(ms, m, b, CAST(const unsigned char *, bb.fbuf), bb.flen, offset, cont_level, mode, text, flip, indir_count, name_count, printed_something, need_separator, firstline, returnval, found_match)) { case -1: return -1; case 0: if (m->reln != '!') continue; flush = 1; break; default: if (m->type == FILE_INDIRECT) { *found_match = 1; *returnval = 1; } flush = 0; break; } switch (flush ? 1 : magiccheck(ms, m, m_rxcomp)) { case -1: return -1; case 0: #ifdef ENABLE_CONDITIONALS ms->c.li[cont_level].last_match = 0; #endif break; default: #ifdef ENABLE_CONDITIONALS ms->c.li[cont_level].last_match = 1; #endif if (m->type == FILE_CLEAR) ms->c.li[cont_level].got_match = 0; else if (ms->c.li[cont_level].got_match) { if (m->type == FILE_DEFAULT) break; } else ms->c.li[cont_level].got_match = 1; if ((e = handle_annotation(ms, m, *firstline)) != 0) { *found_match = 1; *need_separator = 1; *printed_something = 1; *returnval = 1; return e; } if (*m->desc) { *found_match = 1; } if (print && *m->desc) { *returnval = 1; /* * This continuation matched. Print * its message, with a blank before it * if the previous item printed and * this item isn't empty. */ /* * If we are going to print something, * make sure that we have a separator * first. */ if (!*printed_something) { *printed_something = 1; if (print_sep(ms, *firstline) == -1) return -1; } /* space if previous printed */ if (*need_separator && (m->flag & NOSPACE) == 0) { if (file_printf(ms, " ") == -1) return -1; } if (mprint(ms, m) == -1) return -1; *need_separator = 1; } switch (moffset(ms, m, &bb, offset, &ms->c.li[cont_level].off)) { case -1: case 0: cont_level--; break; default: break; } /* * If we see any continuations * at a higher level, * process them. */ if (file_check_mem(ms, ++cont_level) == -1) return -1; break; } } if (*printed_something) { *firstline = 0; } if (*found_match) { if ((ms->flags & MAGIC_CONTINUE) == 0) return *returnval; // So that we print a separator *printed_something = 0; *firstline = 0; } cont_level = 0; } return *returnval; } file_private int check_fmt(struct magic_set *ms, const char *fmt) { file_regex_t rx; int rc, rv = -1; const char* pat = "%[-0-9\\.]*s"; if (strchr(fmt, '%') == NULL) return 0; rc = file_regcomp(ms, &rx, pat, REG_EXTENDED|REG_NOSUB); if (rc == 0) { rc = file_regexec(ms, &rx, fmt, 0, 0, 0); rv = !rc; } file_regfree(&rx); return rv; } #if !defined(HAVE_STRNDUP) || defined(__aiws__) || defined(_AIX) # if defined(__aiws__) || defined(_AIX) # define strndup aix_strndup /* aix is broken */ # endif char *strndup(const char *, size_t); char * strndup(const char *str, size_t n) { size_t len; char *copy; for (len = 0; len < n && str[len]; len++) continue; if ((copy = CAST(char *, malloc(len + 1))) == NULL) return NULL; (void)memcpy(copy, str, len); copy[len] = '\0'; return copy; } #endif /* HAVE_STRNDUP */ static int varexpand(struct magic_set *ms, char *buf, size_t len, const char *str) { const char *ptr, *sptr, *e, *t, *ee, *et; size_t l; for (sptr = str; (ptr = strstr(sptr, "${")) != NULL;) { l = CAST(size_t, ptr - sptr); if (l >= len) return -1; memcpy(buf, sptr, l); buf += l; len -= l; ptr += 2; if (!*ptr || ptr[1] != '?') return -1; for (et = t = ptr + 2; *et && *et != ':'; et++) continue; if (*et != ':') return -1; for (ee = e = et + 1; *ee && *ee != '}'; ee++) continue; if (*ee != '}') return -1; switch (*ptr) { case 'x': if (ms->mode & 0111) { ptr = t; l = et - t; } else { ptr = e; l = ee - e; } break; default: return -1; } if (l >= len) return -1; memcpy(buf, ptr, l); buf += l; len -= l; sptr = ee + 1; } l = strlen(sptr); if (l >= len) return -1; memcpy(buf, sptr, l); buf[l] = '\0'; return 0; } file_private int mprint(struct magic_set *ms, struct magic *m) { uint64_t v; float vf; double vd; char buf[128], tbuf[26], sbuf[512], ebuf[512]; const char *desc; union VALUETYPE *p = &ms->ms_value; if (varexpand(ms, ebuf, sizeof(ebuf), m->desc) == -1) desc = m->desc; else desc = ebuf; #define PRINTER(value, format, stype, utype) \ v = file_signextend(ms, m, CAST(uint64_t, value)); \ switch (check_fmt(ms, desc)) { \ case -1: \ return -1; \ case 1: \ if (m->flag & UNSIGNED) { \ (void)snprintf(buf, sizeof(buf), "%" format "u", \ CAST(utype, v)); \ } else { \ (void)snprintf(buf, sizeof(buf), "%" format "d", \ CAST(stype, v)); \ } \ if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) \ return -1; \ break; \ default: \ if (m->flag & UNSIGNED) { \ if (file_printf(ms, F(ms, desc, "%" format "u"), \ CAST(utype, v)) == -1) \ return -1; \ } else { \ if (file_printf(ms, F(ms, desc, "%" format "d"), \ CAST(stype, v)) == -1) \ return -1; \ } \ break; \ } \ break switch (m->type) { case FILE_BYTE: PRINTER(p->b, "", int8_t, uint8_t); case FILE_SHORT: case FILE_BESHORT: case FILE_LESHORT: PRINTER(p->h, "", int16_t, uint16_t); case FILE_LONG: case FILE_BELONG: case FILE_LELONG: case FILE_MELONG: PRINTER(p->l, "", int32_t, uint32_t); case FILE_QUAD: case FILE_BEQUAD: case FILE_LEQUAD: case FILE_OFFSET: PRINTER(p->q, INT64_T_FORMAT, long long, unsigned long long); case FILE_STRING: case FILE_PSTRING: case FILE_BESTRING16: case FILE_LESTRING16: if (m->reln == '=' || m->reln == '!') { if (file_printf(ms, F(ms, desc, "%s"), file_printable(ms, sbuf, sizeof(sbuf), m->value.s, sizeof(m->value.s))) == -1) return -1; } else { char *str = p->s; /* compute t before we mangle the string? */ if (*m->value.s == '\0') str[strcspn(str, "\r\n")] = '\0'; if (m->str_flags & STRING_TRIM) str = file_strtrim(str); if (file_printf(ms, F(ms, desc, "%s"), file_printable(ms, sbuf, sizeof(sbuf), str, sizeof(p->s) - (str - p->s))) == -1) return -1; if (m->type == FILE_PSTRING) { size_t l = file_pstring_length_size(ms, m); if (l == FILE_BADSIZE) return -1; } } break; case FILE_DATE: case FILE_BEDATE: case FILE_LEDATE: case FILE_MEDATE: if (file_printf(ms, F(ms, desc, "%s"), file_fmtdatetime(tbuf, sizeof(tbuf), p->l, 0)) == -1) return -1; break; case FILE_LDATE: case FILE_BELDATE: case FILE_LELDATE: case FILE_MELDATE: if (file_printf(ms, F(ms, desc, "%s"), file_fmtdatetime(tbuf, sizeof(tbuf), p->l, FILE_T_LOCAL)) == -1) return -1; break; case FILE_QDATE: case FILE_BEQDATE: case FILE_LEQDATE: if (file_printf(ms, F(ms, desc, "%s"), file_fmtdatetime(tbuf, sizeof(tbuf), p->q, 0)) == -1) return -1; break; case FILE_QLDATE: case FILE_BEQLDATE: case FILE_LEQLDATE: if (file_printf(ms, F(ms, desc, "%s"), file_fmtdatetime(tbuf, sizeof(tbuf), p->q, FILE_T_LOCAL)) == -1) return -1; break; case FILE_QWDATE: case FILE_BEQWDATE: case FILE_LEQWDATE: if (file_printf(ms, F(ms, desc, "%s"), file_fmtdatetime(tbuf, sizeof(tbuf), p->q, FILE_T_WINDOWS)) == -1) return -1; break; case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: vf = p->f; switch (check_fmt(ms, desc)) { case -1: return -1; case 1: (void)snprintf(buf, sizeof(buf), "%g", vf); if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) return -1; break; default: if (file_printf(ms, F(ms, desc, "%g"), vf) == -1) return -1; break; } break; case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: vd = p->d; switch (check_fmt(ms, desc)) { case -1: return -1; case 1: (void)snprintf(buf, sizeof(buf), "%g", vd); if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) return -1; break; default: if (file_printf(ms, F(ms, desc, "%g"), vd) == -1) return -1; break; } break; case FILE_SEARCH: case FILE_REGEX: { char *cp, *scp; int rval; cp = strndup(RCAST(const char *, ms->search.s), ms->search.rm_len); if (cp == NULL) { file_oomem(ms, ms->search.rm_len); return -1; } scp = (m->str_flags & STRING_TRIM) ? file_strtrim(cp) : cp; rval = file_printf(ms, F(ms, desc, "%s"), file_printable(ms, sbuf, sizeof(sbuf), scp, ms->search.rm_len)); free(cp); if (rval == -1) return -1; break; } case FILE_DEFAULT: case FILE_CLEAR: if (file_printf(ms, "%s", m->desc) == -1) return -1; break; case FILE_INDIRECT: case FILE_USE: case FILE_NAME: break; case FILE_DER: if (file_printf(ms, F(ms, desc, "%s"), file_printable(ms, sbuf, sizeof(sbuf), ms->ms_value.s, sizeof(ms->ms_value.s))) == -1) return -1; break; case FILE_GUID: (void) file_print_guid(buf, sizeof(buf), ms->ms_value.guid); if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) return -1; break; case FILE_MSDOSDATE: case FILE_BEMSDOSDATE: case FILE_LEMSDOSDATE: if (file_printf(ms, F(ms, desc, "%s"), file_fmtdate(tbuf, sizeof(tbuf), p->h)) == -1) return -1; break; case FILE_MSDOSTIME: case FILE_BEMSDOSTIME: case FILE_LEMSDOSTIME: if (file_printf(ms, F(ms, desc, "%s"), file_fmttime(tbuf, sizeof(tbuf), p->h)) == -1) return -1; break; case FILE_OCTAL: file_fmtnum(buf, sizeof(buf), m->value.s, 8); if (file_printf(ms, F(ms, desc, "%s"), buf) == -1) return -1; break; default: file_magerror(ms, "invalid m->type (%d) in mprint()", m->type); return -1; } return 0; } file_private int moffset(struct magic_set *ms, struct magic *m, const struct buffer *b, size_t offset, int32_t *op) { size_t nbytes = b->flen; int32_t o; switch (m->type) { case FILE_BYTE: o = CAST(int32_t, (ms->offset + sizeof(char))); break; case FILE_SHORT: case FILE_BESHORT: case FILE_LESHORT: case FILE_MSDOSDATE: case FILE_LEMSDOSDATE: case FILE_BEMSDOSDATE: case FILE_MSDOSTIME: case FILE_LEMSDOSTIME: case FILE_BEMSDOSTIME: o = CAST(int32_t, (ms->offset + sizeof(short))); break; case FILE_LONG: case FILE_BELONG: case FILE_LELONG: case FILE_MELONG: o = CAST(int32_t, (ms->offset + sizeof(int32_t))); break; case FILE_QUAD: case FILE_BEQUAD: case FILE_LEQUAD: o = CAST(int32_t, (ms->offset + sizeof(int64_t))); break; case FILE_STRING: case FILE_PSTRING: case FILE_BESTRING16: case FILE_LESTRING16: case FILE_OCTAL: if (m->reln == '=' || m->reln == '!') { o = ms->offset + m->vallen; } else { union VALUETYPE *p = &ms->ms_value; if (*m->value.s == '\0') p->s[strcspn(p->s, "\r\n")] = '\0'; o = CAST(uint32_t, (ms->offset + strlen(p->s))); if (m->type == FILE_PSTRING) { size_t l = file_pstring_length_size(ms, m); if (l == FILE_BADSIZE) return -1; o += CAST(uint32_t, l); } } break; case FILE_DATE: case FILE_BEDATE: case FILE_LEDATE: case FILE_MEDATE: o = CAST(int32_t, (ms->offset + sizeof(uint32_t))); break; case FILE_LDATE: case FILE_BELDATE: case FILE_LELDATE: case FILE_MELDATE: o = CAST(int32_t, (ms->offset + sizeof(uint32_t))); break; case FILE_QDATE: case FILE_BEQDATE: case FILE_LEQDATE: o = CAST(int32_t, (ms->offset + sizeof(uint64_t))); break; case FILE_QLDATE: case FILE_BEQLDATE: case FILE_LEQLDATE: o = CAST(int32_t, (ms->offset + sizeof(uint64_t))); break; case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: o = CAST(int32_t, (ms->offset + sizeof(float))); break; case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: o = CAST(int32_t, (ms->offset + sizeof(double))); break; case FILE_REGEX: if ((m->str_flags & REGEX_OFFSET_START) != 0) o = CAST(int32_t, ms->search.offset - offset); else o = CAST(int32_t, (ms->search.offset + ms->search.rm_len - offset)); break; case FILE_SEARCH: if ((m->str_flags & REGEX_OFFSET_START) != 0) o = CAST(int32_t, ms->search.offset - offset); else o = CAST(int32_t, (ms->search.offset + m->vallen - offset)); break; case FILE_CLEAR: case FILE_DEFAULT: case FILE_INDIRECT: case FILE_OFFSET: case FILE_USE: o = ms->offset; break; case FILE_DER: o = der_offs(ms, m, nbytes); if (o == -1 || CAST(size_t, o) > nbytes) { if ((ms->flags & MAGIC_DEBUG) != 0) { (void)fprintf(stderr, "Bad DER offset %d nbytes=%" SIZE_T_FORMAT "u", o, nbytes); } *op = 0; return 0; } break; case FILE_GUID: o = CAST(int32_t, (ms->offset + 2 * sizeof(uint64_t))); break; default: o = 0; break; } if (CAST(size_t, o) > nbytes) { #if 0 file_error(ms, 0, "Offset out of range %" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u", (size_t)o, nbytes); #endif return -1; } *op = o; return 1; } file_private uint32_t cvt_id3(struct magic_set *ms, uint32_t v) { v = ((((v >> 0) & 0x7f) << 0) | (((v >> 8) & 0x7f) << 7) | (((v >> 16) & 0x7f) << 14) | (((v >> 24) & 0x7f) << 21)); if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "id3 offs=%u\n", v); return v; } file_private int cvt_flip(int type, int flip) { if (flip == 0) return type; switch (type) { case FILE_BESHORT: return FILE_LESHORT; case FILE_BELONG: return FILE_LELONG; case FILE_BEDATE: return FILE_LEDATE; case FILE_BELDATE: return FILE_LELDATE; case FILE_BEQUAD: return FILE_LEQUAD; case FILE_BEQDATE: return FILE_LEQDATE; case FILE_BEQLDATE: return FILE_LEQLDATE; case FILE_BEQWDATE: return FILE_LEQWDATE; case FILE_LESHORT: return FILE_BESHORT; case FILE_LELONG: return FILE_BELONG; case FILE_LEDATE: return FILE_BEDATE; case FILE_LELDATE: return FILE_BELDATE; case FILE_LEQUAD: return FILE_BEQUAD; case FILE_LEQDATE: return FILE_BEQDATE; case FILE_LEQLDATE: return FILE_BEQLDATE; case FILE_LEQWDATE: return FILE_BEQWDATE; case FILE_BEFLOAT: return FILE_LEFLOAT; case FILE_LEFLOAT: return FILE_BEFLOAT; case FILE_BEDOUBLE: return FILE_LEDOUBLE; case FILE_LEDOUBLE: return FILE_BEDOUBLE; default: return type; } } #define DO_CVT(fld, type) \ if (m->num_mask) \ switch (m->mask_op & FILE_OPS_MASK) { \ case FILE_OPAND: \ p->fld &= CAST(type, m->num_mask); \ break; \ case FILE_OPOR: \ p->fld |= CAST(type, m->num_mask); \ break; \ case FILE_OPXOR: \ p->fld ^= CAST(type, m->num_mask); \ break; \ case FILE_OPADD: \ p->fld += CAST(type, m->num_mask); \ break; \ case FILE_OPMINUS: \ p->fld -= CAST(type, m->num_mask); \ break; \ case FILE_OPMULTIPLY: \ p->fld *= CAST(type, m->num_mask); \ break; \ case FILE_OPDIVIDE: \ if (CAST(type, m->num_mask) == 0) \ return -1; \ p->fld /= CAST(type, m->num_mask); \ break; \ case FILE_OPMODULO: \ if (CAST(type, m->num_mask) == 0) \ return -1; \ p->fld %= CAST(type, m->num_mask); \ break; \ } \ if (m->mask_op & FILE_OPINVERSE) \ p->fld = ~p->fld \ file_private int cvt_8(union VALUETYPE *p, const struct magic *m) { DO_CVT(b, uint8_t); return 0; } file_private int cvt_16(union VALUETYPE *p, const struct magic *m) { DO_CVT(h, uint16_t); return 0; } file_private int cvt_32(union VALUETYPE *p, const struct magic *m) { DO_CVT(l, uint32_t); return 0; } file_private int cvt_64(union VALUETYPE *p, const struct magic *m) { DO_CVT(q, uint64_t); return 0; } #define DO_CVT2(fld, type) \ if (m->num_mask) \ switch (m->mask_op & FILE_OPS_MASK) { \ case FILE_OPADD: \ p->fld += CAST(type, m->num_mask); \ break; \ case FILE_OPMINUS: \ p->fld -= CAST(type, m->num_mask); \ break; \ case FILE_OPMULTIPLY: \ p->fld *= CAST(type, m->num_mask); \ break; \ case FILE_OPDIVIDE: \ if (CAST(type, m->num_mask) == 0) \ return -1; \ p->fld /= CAST(type, m->num_mask); \ break; \ } \ file_private int cvt_float(union VALUETYPE *p, const struct magic *m) { DO_CVT2(f, float); return 0; } file_private int cvt_double(union VALUETYPE *p, const struct magic *m) { DO_CVT2(d, double); return 0; } /* * Convert the byte order of the data we are looking at * While we're here, let's apply the mask operation * (unless you have a better idea) */ file_private int mconvert(struct magic_set *ms, struct magic *m, int flip) { union VALUETYPE *p = &ms->ms_value; switch (cvt_flip(m->type, flip)) { case FILE_BYTE: if (cvt_8(p, m) == -1) goto out; return 1; case FILE_SHORT: case FILE_MSDOSDATE: case FILE_LEMSDOSDATE: case FILE_BEMSDOSDATE: case FILE_MSDOSTIME: case FILE_LEMSDOSTIME: case FILE_BEMSDOSTIME: if (cvt_16(p, m) == -1) goto out; return 1; case FILE_LONG: case FILE_DATE: case FILE_LDATE: if (cvt_32(p, m) == -1) goto out; return 1; case FILE_QUAD: case FILE_QDATE: case FILE_QLDATE: case FILE_QWDATE: case FILE_OFFSET: if (cvt_64(p, m) == -1) goto out; return 1; case FILE_STRING: case FILE_BESTRING16: case FILE_LESTRING16: case FILE_OCTAL: { /* Null terminate and eat *trailing* return */ p->s[sizeof(p->s) - 1] = '\0'; return 1; } case FILE_PSTRING: { char *ptr1, *ptr2; size_t len, sz = file_pstring_length_size(ms, m); if (sz == FILE_BADSIZE) return 0; ptr1 = p->s; ptr2 = ptr1 + sz; len = file_pstring_get_length(ms, m, ptr1); if (len == FILE_BADSIZE) return 0; sz = sizeof(p->s) - sz; /* maximum length of string */ if (len >= sz) { /* * The size of the pascal string length (sz) * is 1, 2, or 4. We need at least 1 byte for NUL * termination, but we've already truncated the * string by p->s, so we need to deduct sz. * Because we can use one of the bytes of the length * after we shifted as NUL termination. */ len = sz; } while (len--) *ptr1++ = *ptr2++; *ptr1 = '\0'; return 1; } case FILE_BESHORT: p->h = CAST(short, BE16(p->hs)); if (cvt_16(p, m) == -1) goto out; return 1; case FILE_BELONG: case FILE_BEDATE: case FILE_BELDATE: p->l = CAST(int32_t, BE32(p->hl)); if (cvt_32(p, m) == -1) goto out; return 1; case FILE_BEQUAD: case FILE_BEQDATE: case FILE_BEQLDATE: case FILE_BEQWDATE: p->q = CAST(uint64_t, BE64(p->hq)); if (cvt_64(p, m) == -1) goto out; return 1; case FILE_LESHORT: p->h = CAST(short, LE16(p->hs)); if (cvt_16(p, m) == -1) goto out; return 1; case FILE_LELONG: case FILE_LEDATE: case FILE_LELDATE: p->l = CAST(int32_t, LE32(p->hl)); if (cvt_32(p, m) == -1) goto out; return 1; case FILE_LEQUAD: case FILE_LEQDATE: case FILE_LEQLDATE: case FILE_LEQWDATE: p->q = CAST(uint64_t, LE64(p->hq)); if (cvt_64(p, m) == -1) goto out; return 1; case FILE_MELONG: case FILE_MEDATE: case FILE_MELDATE: p->l = CAST(int32_t, ME32(p->hl)); if (cvt_32(p, m) == -1) goto out; return 1; case FILE_FLOAT: if (cvt_float(p, m) == -1) goto out; return 1; case FILE_BEFLOAT: p->l = BE32(p->hl); if (cvt_float(p, m) == -1) goto out; return 1; case FILE_LEFLOAT: p->l = LE32(p->hl); if (cvt_float(p, m) == -1) goto out; return 1; case FILE_DOUBLE: if (cvt_double(p, m) == -1) goto out; return 1; case FILE_BEDOUBLE: p->q = BE64(p->hq); if (cvt_double(p, m) == -1) goto out; return 1; case FILE_LEDOUBLE: p->q = LE64(p->hq); if (cvt_double(p, m) == -1) goto out; return 1; case FILE_REGEX: case FILE_SEARCH: case FILE_DEFAULT: case FILE_CLEAR: case FILE_NAME: case FILE_USE: case FILE_DER: case FILE_GUID: return 1; default: file_magerror(ms, "invalid type %d in mconvert()", m->type); return 0; } out: file_magerror(ms, "zerodivide in mconvert()"); return 0; } file_private void mdebug(uint32_t offset, const char *str, size_t len) { (void) fprintf(stderr, "mget/%" SIZE_T_FORMAT "u @%d: ", len, offset); file_showstr(stderr, str, len); (void) fputc('\n', stderr); (void) fputc('\n', stderr); } file_private int mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir, const unsigned char *s, uint32_t offset, size_t nbytes, struct magic *m) { size_t size = sizeof(*p); /* * Note: FILE_SEARCH and FILE_REGEX do not actually copy * anything, but setup pointers into the source */ if (indir == 0) { switch (type) { case FILE_DER: case FILE_SEARCH: if (offset > nbytes) offset = CAST(uint32_t, nbytes); ms->search.s = RCAST(const char *, s) + offset; ms->search.s_len = nbytes - offset; ms->search.offset = offset; return 0; case FILE_REGEX: { const char *b; const char *c; const char *last; /* end of search region */ const char *buf; /* start of search region */ const char *end; size_t lines, linecnt, bytecnt; if (s == NULL || nbytes < offset) { ms->search.s_len = 0; ms->search.s = NULL; return 0; } if (m->str_flags & REGEX_LINE_COUNT) { linecnt = m->str_range; bytecnt = linecnt * 80; } else { linecnt = 0; bytecnt = m->str_range; } if (bytecnt == 0 || bytecnt > nbytes - offset) bytecnt = nbytes - offset; if (bytecnt > ms->regex_max) bytecnt = ms->regex_max; buf = RCAST(const char *, s) + offset; end = last = RCAST(const char *, s) + bytecnt + offset; /* mget() guarantees buf <= last */ for (lines = linecnt, b = buf; lines && b < end && ((b = CAST(const char *, memchr(c = b, '\n', CAST(size_t, (end - b))))) || (b = CAST(const char *, memchr(c, '\r', CAST(size_t, (end - c)))))); lines--, b++) { if (b < end - 1 && b[0] == '\r' && b[1] == '\n') b++; if (b < end - 1 && b[0] == '\n') b++; last = b; } if (lines) last = end; ms->search.s = buf; ms->search.s_len = last - buf; ms->search.offset = offset; ms->search.rm_len = 0; return 0; } case FILE_BESTRING16: case FILE_LESTRING16: { const unsigned char *src = s + offset; const unsigned char *esrc = s + nbytes; char *dst = p->s; char *edst = &p->s[sizeof(p->s) - 1]; if (type == FILE_BESTRING16) src++; /* check that offset is within range */ if (offset >= nbytes) break; for (/*EMPTY*/; src < esrc; src += 2, dst++) { if (dst < edst) *dst = *src; else break; if (*dst == '\0') { if (type == FILE_BESTRING16 ? *(src - 1) != '\0' : ((src + 1 < esrc) && *(src + 1) != '\0')) *dst = ' '; } } *edst = '\0'; *dst = '\0'; return 0; } case FILE_STRING: /* XXX - these two should not need */ case FILE_PSTRING: /* to copy anything, but do anyway. */ if (m->str_range != 0 && m->str_range < sizeof(*p)) size = m->str_range; break; default: break; } } if (type == FILE_OFFSET) { (void)memset(p, '\0', sizeof(*p)); p->q = offset; return 0; } if (offset >= nbytes) { (void)memset(p, '\0', sizeof(*p)); return 0; } if (nbytes - offset < size) nbytes = nbytes - offset; else nbytes = size; (void)memcpy(p, s + offset, nbytes); /* * the usefulness of padding with zeroes eludes me, it * might even cause problems */ if (nbytes < sizeof(*p)) (void)memset(RCAST(char *, RCAST(void *, p)) + nbytes, '\0', sizeof(*p) - nbytes); return 0; } file_private int do_ops(struct magic_set *ms, struct magic *m, uint32_t *rv, intmax_t lhs, intmax_t off) { intmax_t offset; // On purpose not INTMAX_MAX if (lhs >= UINT_MAX || lhs <= INT_MIN || off >= UINT_MAX || off <= INT_MIN) { if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "lhs/off overflow %jd %jd\n", lhs, off); return 1; } if (off) { switch (m->in_op & FILE_OPS_MASK) { case FILE_OPAND: offset = lhs & off; break; case FILE_OPOR: offset = lhs | off; break; case FILE_OPXOR: offset = lhs ^ off; break; case FILE_OPADD: offset = lhs + off; break; case FILE_OPMINUS: offset = lhs - off; break; case FILE_OPMULTIPLY: offset = lhs * off; break; case FILE_OPDIVIDE: offset = lhs / off; break; case FILE_OPMODULO: offset = lhs % off; break; } } else offset = lhs; if (m->in_op & FILE_OPINVERSE) offset = ~offset; if (offset >= UINT_MAX) { if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "offset overflow %jd\n", offset); return 1; } *rv = CAST(uint32_t, offset); return 0; } file_private int msetoffset(struct magic_set *ms, struct magic *m, struct buffer *bb, const struct buffer *b, size_t o, unsigned int cont_level) { int32_t offset; if (m->flag & OFFNEGATIVE) { offset = -m->offset; if (cont_level > 0) { if (m->flag & (OFFADD|INDIROFFADD)) goto normal; #if 0 file_error(ms, 0, "negative offset %d at continuation" "level %u", m->offset, cont_level); return -1; #endif } if (buffer_fill(b) == -1) return -1; if (o != 0) { // Not yet! file_magerror(ms, "non zero offset %" SIZE_T_FORMAT "u at level %u", o, cont_level); return -1; } if (CAST(size_t, m->offset) > b->elen) return -1; buffer_init(bb, -1, NULL, b->ebuf, b->elen); ms->eoffset = ms->offset = CAST(int32_t, b->elen - m->offset); } else { offset = m->offset; if ((m->flag & OFFPOSITIVE) || cont_level == 0) { normal: // XXX: Pass real fd, then who frees bb? buffer_init(bb, -1, NULL, b->fbuf, b->flen); ms->offset = offset; ms->eoffset = 0; } else { ms->offset = ms->eoffset + offset; } } if ((ms->flags & MAGIC_DEBUG) != 0) { fprintf(stderr, "bb=[%p,%" SIZE_T_FORMAT "u,%" SIZE_T_FORMAT "u], %d [b=%p,%" SIZE_T_FORMAT "u,%" SIZE_T_FORMAT "u], [o=%#x, c=%d]\n", bb->fbuf, bb->flen, bb->elen, ms->offset, b->fbuf, b->flen, b->elen, offset, cont_level); } return 0; } file_private int save_cont(struct magic_set *ms, struct cont *c) { size_t len; *c = ms->c; len = c->len * sizeof(*c->li); ms->c.li = CAST(struct level_info *, malloc(len)); if (ms->c.li == NULL) { ms->c = *c; return -1; } memcpy(ms->c.li, c->li, len); return 0; } file_private void restore_cont(struct magic_set *ms, struct cont *c) { free(ms->c.li); ms->c = *c; } file_private int mget(struct magic_set *ms, struct magic *m, const struct buffer *b, const unsigned char *s, size_t nbytes, size_t o, unsigned int cont_level, int mode, int text, int flip, uint16_t *indir_count, uint16_t *name_count, int *printed_something, int *need_separator, int *firstline, int *returnval, int *found_match) { uint32_t eoffset, offset = ms->offset; struct buffer bb; intmax_t lhs; file_pushbuf_t *pb; int rv, oneed_separator, in_type, nfound_match; char *rbuf; union VALUETYPE *p = &ms->ms_value; struct mlist ml, *mlp; struct cont c; if (*indir_count >= ms->indir_max) { file_error(ms, 0, "indirect count (%hu) exceeded", *indir_count); return -1; } if (*name_count >= ms->name_max) { file_error(ms, 0, "name use count (%hu) exceeded", *name_count); return -1; } if (mcopy(ms, p, m->type, m->flag & INDIR, s, CAST(uint32_t, offset + o), CAST(uint32_t, nbytes), m) == -1) return -1; if ((ms->flags & MAGIC_DEBUG) != 0) { fprintf(stderr, "mget(type=%d, flag=%#x, offset=%u, o=%" SIZE_T_FORMAT "u, " "nbytes=%" SIZE_T_FORMAT "u, il=%hu, nc=%hu)\n", m->type, m->flag, offset, o, nbytes, *indir_count, *name_count); mdebug(offset, RCAST(char *, RCAST(void *, p)), sizeof(union VALUETYPE)); #ifndef COMPILE_ONLY file_mdump(m); #endif } if (m->flag & INDIR) { intmax_t off = m->in_offset; const int sgn = m->in_op & FILE_OPSIGNED; if (m->in_op & FILE_OPINDIRECT) { uint8_t *hb = CCAST(uint8_t *, s + offset + off); uint16_t hs; uint32_t hl; int op; switch (op = cvt_flip(m->in_type, flip)) { case FILE_BYTE: if (OFFSET_OOB(nbytes, offset + off, 1)) return 0; off = SEXT(sgn,8,hb[0]); break; case FILE_SHORT: if (OFFSET_OOB(nbytes, offset + off, 2)) return 0; memcpy(&hs, hb, sizeof(hs)); off = SEXT(sgn,16,hs); break; case FILE_BESHORT: if (OFFSET_OOB(nbytes, offset + off, 2)) return 0; off = SEXT(sgn,16,BE16(hb)); break; case FILE_LESHORT: if (OFFSET_OOB(nbytes, offset + off, 2)) return 0; off = SEXT(sgn,16,LE16(hb)); break; case FILE_LONG: if (OFFSET_OOB(nbytes, offset + off, 4)) return 0; memcpy(&hl, hb, sizeof(hl)); off = SEXT(sgn,32,hl); break; case FILE_BELONG: case FILE_BEID3: if (OFFSET_OOB(nbytes, offset + off, 4)) return 0; off = SEXT(sgn,32,BE32(hb)); break; case FILE_LEID3: case FILE_LELONG: if (OFFSET_OOB(nbytes, offset + off, 4)) return 0; off = SEXT(sgn,32,LE32(hb)); break; case FILE_MELONG: if (OFFSET_OOB(nbytes, offset + off, 4)) return 0; off = SEXT(sgn,32,ME32(hb)); break; case FILE_BEQUAD: if (OFFSET_OOB(nbytes, offset + off, 8)) return 0; off = SEXT(sgn,64,BE64(hb)); break; case FILE_LEQUAD: if (OFFSET_OOB(nbytes, offset + off, 8)) return 0; off = SEXT(sgn,64,LE64(hb)); break; case FILE_OCTAL: if (OFFSET_OOB(nbytes, offset, m->vallen)) return 0; off = SEXT(sgn,64,strtoull(p->s, NULL, 8)); break; default: if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "bad op=%d\n", op); return 0; } if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "indirect offs=%jd\n", off); } switch (in_type = cvt_flip(m->in_type, flip)) { case FILE_BYTE: if (OFFSET_OOB(nbytes, offset, 1)) return 0; if (do_ops(ms, m, &offset, SEXT(sgn,8,p->b), off)) return 0; break; case FILE_BESHORT: if (OFFSET_OOB(nbytes, offset, 2)) return 0; if (do_ops(ms, m, &offset, SEXT(sgn,16,BE16(p->hs)), off)) return 0; break; case FILE_LESHORT: if (OFFSET_OOB(nbytes, offset, 2)) return 0; if (do_ops(ms, m, &offset, SEXT(sgn,16,LE16(p->hs)), off)) return 0; break; case FILE_SHORT: if (OFFSET_OOB(nbytes, offset, 2)) return 0; if (do_ops(ms, m, &offset, SEXT(sgn,16,p->h), off)) return 0; break; case FILE_BELONG: case FILE_BEID3: if (OFFSET_OOB(nbytes, offset, 4)) return 0; lhs = BE32(p->hl); if (in_type == FILE_BEID3) lhs = cvt_id3(ms, CAST(uint32_t, lhs)); if (do_ops(ms, m, &offset, SEXT(sgn,32,lhs), off)) return 0; break; case FILE_LELONG: case FILE_LEID3: if (OFFSET_OOB(nbytes, offset, 4)) return 0; lhs = LE32(p->hl); if (in_type == FILE_LEID3) lhs = cvt_id3(ms, CAST(uint32_t, lhs)); if (do_ops(ms, m, &offset, SEXT(sgn,32,lhs), off)) return 0; break; case FILE_MELONG: if (OFFSET_OOB(nbytes, offset, 4)) return 0; if (do_ops(ms, m, &offset, SEXT(sgn,32,ME32(p->hl)), off)) return 0; break; case FILE_LONG: if (OFFSET_OOB(nbytes, offset, 4)) return 0; if (do_ops(ms, m, &offset, SEXT(sgn,32,p->l), off)) return 0; break; case FILE_LEQUAD: if (OFFSET_OOB(nbytes, offset, 8)) return 0; if (do_ops(ms, m, &offset, SEXT(sgn,64,LE64(p->hq)), off)) return 0; break; case FILE_BEQUAD: if (OFFSET_OOB(nbytes, offset, 8)) return 0; if (do_ops(ms, m, &offset, SEXT(sgn,64,BE64(p->hq)), off)) return 0; break; case FILE_OCTAL: if (OFFSET_OOB(nbytes, offset, m->vallen)) return 0; if(do_ops(ms, m, &offset, SEXT(sgn,64,strtoull(p->s, NULL, 8)), off)) return 0; break; default: if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "bad in_type=%d\n", in_type); return 0; } if (m->flag & INDIROFFADD) { if (cont_level == 0) { if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "indirect *zero* cont_level\n"); return 0; } offset += ms->c.li[cont_level - 1].off; if (offset == 0) { if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "indirect *zero* offset\n"); return 0; } if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "indirect +offs=%u\n", offset); } if (mcopy(ms, p, m->type, 0, s, offset, nbytes, m) == -1) return -1; ms->offset = offset; if ((ms->flags & MAGIC_DEBUG) != 0) { mdebug(offset, RCAST(char *, RCAST(void *, p)), sizeof(union VALUETYPE)); #ifndef COMPILE_ONLY file_mdump(m); #endif } } /* Verify we have enough data to match magic type */ switch (m->type) { case FILE_BYTE: if (OFFSET_OOB(nbytes, offset, 1)) return 0; break; case FILE_SHORT: case FILE_BESHORT: case FILE_LESHORT: if (OFFSET_OOB(nbytes, offset, 2)) return 0; break; case FILE_LONG: case FILE_BELONG: case FILE_LELONG: case FILE_MELONG: case FILE_DATE: case FILE_BEDATE: case FILE_LEDATE: case FILE_MEDATE: case FILE_LDATE: case FILE_BELDATE: case FILE_LELDATE: case FILE_MELDATE: case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: if (OFFSET_OOB(nbytes, offset, 4)) return 0; break; case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: if (OFFSET_OOB(nbytes, offset, 8)) return 0; break; case FILE_GUID: if (OFFSET_OOB(nbytes, offset, 16)) return 0; break; case FILE_STRING: case FILE_PSTRING: case FILE_SEARCH: case FILE_OCTAL: if (OFFSET_OOB(nbytes, offset, m->vallen)) return 0; break; case FILE_REGEX: if (nbytes < offset) return 0; break; case FILE_INDIRECT: if (m->str_flags & INDIRECT_RELATIVE) offset += CAST(uint32_t, o); if (offset == 0) return 0; if (nbytes < offset) return 0; if ((pb = file_push_buffer(ms)) == NULL) return -1; (*indir_count)++; bb = *b; bb.fbuf = s + offset; bb.flen = nbytes - offset; bb.ebuf = NULL; bb.elen = 0; rv = -1; for (mlp = ms->mlist[0]->next; mlp != ms->mlist[0]; mlp = mlp->next) { if ((rv = match(ms, mlp->magic, mlp->magic_rxcomp, mlp->nmagic, &bb, 0, BINTEST, text, 0, indir_count, name_count, printed_something, need_separator, firstline, NULL, NULL)) != 0) break; } buffer_fini(&bb); if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "indirect @offs=%u[%d]\n", offset, rv); rbuf = file_pop_buffer(ms, pb); if (rbuf == NULL && ms->event_flags & EVENT_HAD_ERR) return -1; if (rv == 1) { if ((ms->flags & MAGIC_NODESC) == 0 && file_printf(ms, F(ms, m->desc, "%u"), offset) == -1) { free(rbuf); return -1; } if (file_printf(ms, "%s", rbuf) == -1) { free(rbuf); return -1; } } free(rbuf); return rv; case FILE_USE: if (nbytes < offset) return 0; rbuf = m->value.s; if (*rbuf == '^') { rbuf++; flip = !flip; } if (file_magicfind(ms, rbuf, &ml) == -1) { file_error(ms, 0, "cannot find entry `%s'", rbuf); return -1; } if (save_cont(ms, &c) == -1) { file_error(ms, errno, "can't allocate continuation"); return -1; } oneed_separator = *need_separator; if (m->flag & NOSPACE) *need_separator = 0; nfound_match = 0; (*name_count)++; eoffset = ms->eoffset; rv = match(ms, ml.magic, ml.magic_rxcomp, ml.nmagic, b, offset + o, mode, text, flip, indir_count, name_count, printed_something, need_separator, firstline, returnval, &nfound_match); ms->ms_value.q = nfound_match; (*name_count)--; *found_match |= nfound_match; restore_cont(ms, &c); if (rv != 1) *need_separator = oneed_separator; ms->offset = offset; ms->eoffset = eoffset; return rv || *found_match; case FILE_NAME: if (ms->flags & MAGIC_NODESC) return 1; if (file_printf(ms, "%s", m->desc) == -1) return -1; return 1; case FILE_DER: case FILE_DEFAULT: /* nothing to check */ case FILE_CLEAR: default: break; } if (!mconvert(ms, m, flip)) return 0; return 1; } file_private uint64_t file_strncmp(const char *s1, const char *s2, size_t len, size_t maxlen, uint32_t flags) { /* * Convert the source args to unsigned here so that (1) the * compare will be unsigned as it is in strncmp() and (2) so * the ctype functions will work correctly without extra * casting. */ const unsigned char *a = RCAST(const unsigned char *, s1); const unsigned char *b = RCAST(const unsigned char *, s2); uint32_t ws = flags & (STRING_COMPACT_WHITESPACE | STRING_COMPACT_OPTIONAL_WHITESPACE); const unsigned char *eb = b + (ws ? maxlen : len); uint64_t v; /* * What we want here is v = strncmp(s1, s2, len), * but ignoring any nulls. */ v = 0; len++; if (0L == flags) { /* normal string: do it fast */ while (--len > 0) if ((v = *b++ - *a++) != '\0') break; } else { /* combine the others */ while (--len > 0) { if (b >= eb) { v = 1; break; } if ((flags & STRING_IGNORE_LOWERCASE) && islower(*a)) { if ((v = tolower(*b++) - *a++) != '\0') break; } else if ((flags & STRING_IGNORE_UPPERCASE) && isupper(*a)) { if ((v = toupper(*b++) - *a++) != '\0') break; } else if ((flags & STRING_COMPACT_WHITESPACE) && isspace(*a)) { a++; if (isspace(*b)) { b++; if (!isspace(*a)) while (b < eb && isspace(*b)) b++; } else { v = 1; break; } } else if ((flags & STRING_COMPACT_OPTIONAL_WHITESPACE) && isspace(*a)) { a++; while (b < eb && isspace(*b)) b++; } else { if ((v = *b++ - *a++) != '\0') break; } } if (len == 0 && v == 0 && (flags & STRING_FULL_WORD)) { if (*b && !isspace(*b)) v = 1; } } return v; } file_private uint64_t file_strncmp16(const char *a, const char *b, size_t len, size_t maxlen, uint32_t flags) { /* * XXX - The 16-bit string compare probably needs to be done * differently, especially if the flags are to be supported. * At the moment, I am unsure. */ flags = 0; return file_strncmp(a, b, len, maxlen, flags); } file_private file_regex_t * alloc_regex(struct magic_set *ms, struct magic *m) { int rc; file_regex_t *rx = CAST(file_regex_t *, malloc(sizeof(*rx))); if (rx == NULL) { file_error(ms, errno, "can't allocate %" SIZE_T_FORMAT "u bytes", sizeof(*rx)); return NULL; } rc = file_regcomp(ms, rx, m->value.s, REG_EXTENDED | REG_NEWLINE | ((m->str_flags & STRING_IGNORE_CASE) ? REG_ICASE : 0)); if (rc == 0) return rx; free(rx); return NULL; } file_private int magiccheck(struct magic_set *ms, struct magic *m, file_regex_t **m_cache) { uint64_t l = m->value.q; uint64_t v; float fl, fv; double dl, dv; int matched; union VALUETYPE *p = &ms->ms_value; switch (m->type) { case FILE_BYTE: v = p->b; break; case FILE_SHORT: case FILE_BESHORT: case FILE_LESHORT: case FILE_MSDOSDATE: case FILE_LEMSDOSDATE: case FILE_BEMSDOSDATE: case FILE_MSDOSTIME: case FILE_LEMSDOSTIME: case FILE_BEMSDOSTIME: v = p->h; break; case FILE_LONG: case FILE_BELONG: case FILE_LELONG: case FILE_MELONG: case FILE_DATE: case FILE_BEDATE: case FILE_LEDATE: case FILE_MEDATE: case FILE_LDATE: case FILE_BELDATE: case FILE_LELDATE: case FILE_MELDATE: v = p->l; break; case FILE_QUAD: case FILE_LEQUAD: case FILE_BEQUAD: case FILE_QDATE: case FILE_BEQDATE: case FILE_LEQDATE: case FILE_QLDATE: case FILE_BEQLDATE: case FILE_LEQLDATE: case FILE_QWDATE: case FILE_BEQWDATE: case FILE_LEQWDATE: case FILE_OFFSET: v = p->q; break; case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: fl = m->value.f; fv = p->f; switch (m->reln) { case 'x': matched = 1; break; case '!': matched = isunordered(fl, fv) ? 1 : fv != fl; break; case '=': matched = isunordered(fl, fv) ? 0 : fv == fl; break; case '>': matched = isgreater(fv, fl); break; case '<': matched = isless(fv, fl); break; default: file_magerror(ms, "cannot happen with float: " "invalid relation `%c'", m->reln); return -1; } return matched; case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: dl = m->value.d; dv = p->d; switch (m->reln) { case 'x': matched = 1; break; case '!': matched = isunordered(dv, dl) ? 1 : dv != dl; break; case '=': matched = isunordered(dv, dl) ? 0 : dv == dl; break; case '>': matched = isgreater(dv, dl); break; case '<': matched = isless(dv, dl); break; default: file_magerror(ms, "cannot happen with double: " "invalid relation `%c'", m->reln); return -1; } return matched; case FILE_DEFAULT: case FILE_CLEAR: l = 0; v = 0; break; case FILE_STRING: case FILE_PSTRING: case FILE_OCTAL: l = 0; v = file_strncmp(m->value.s, p->s, CAST(size_t, m->vallen), sizeof(p->s), m->str_flags); break; case FILE_BESTRING16: case FILE_LESTRING16: l = 0; v = file_strncmp16(m->value.s, p->s, CAST(size_t, m->vallen), sizeof(p->s), m->str_flags); break; case FILE_SEARCH: { /* search ms->search.s for the string m->value.s */ size_t slen; size_t idx; if (ms->search.s == NULL) return 0; slen = MIN(m->vallen, sizeof(m->value.s)); l = 0; v = 0; if ((ms->flags & MAGIC_DEBUG) != 0) { size_t xlen = ms->search.s_len > 100 ? 100 : ms->search.s_len; fprintf(stderr, "search: ["); file_showstr(stderr, ms->search.s, xlen); fprintf(stderr, "%s] for [", ms->search.s_len == xlen ? "" : "..."); file_showstr(stderr, m->value.s, slen); } #ifdef HAVE_MEMMEM if (slen > 0 && m->str_flags == 0) { const char *found; idx = m->str_range + slen; if (m->str_range == 0 || ms->search.s_len < idx) idx = ms->search.s_len; found = CAST(const char *, memmem(ms->search.s, idx, m->value.s, slen)); if ((ms->flags & MAGIC_DEBUG) != 0) { fprintf(stderr, "] %sfound\n", found ? "" : "not "); } if (!found) { v = 1; break; } idx = found - ms->search.s; ms->search.offset += idx; ms->search.rm_len = ms->search.s_len - idx; break; } #endif for (idx = 0; m->str_range == 0 || idx < m->str_range; idx++) { if (slen + idx > ms->search.s_len) { v = 1; break; } v = file_strncmp(m->value.s, ms->search.s + idx, slen, ms->search.s_len - idx, m->str_flags); if (v == 0) { /* found match */ ms->search.offset += idx; ms->search.rm_len = ms->search.s_len - idx; break; } } if ((ms->flags & MAGIC_DEBUG) != 0) { fprintf(stderr, "] %sfound\n", v == 0 ? "" : "not "); } break; } case FILE_REGEX: { int rc; file_regex_t *rx = *m_cache; const char *search; regmatch_t pmatch; size_t slen = ms->search.s_len; char *copy; if (ms->search.s == NULL) return 0; if (rx == NULL) { rx = *m_cache = alloc_regex(ms, m); if (rx == NULL) return -1; } l = 0; if (slen != 0) { copy = CAST(char *, malloc(slen)); if (copy == NULL) { file_error(ms, errno, "can't allocate %" SIZE_T_FORMAT "u bytes", slen); return -1; } memcpy(copy, ms->search.s, slen); copy[--slen] = '\0'; search = copy; } else { search = CCAST(char *, ""); copy = NULL; } rc = file_regexec(ms, rx, RCAST(const char *, search), 1, &pmatch, 0); free(copy); switch (rc) { case 0: ms->search.s += CAST(int, pmatch.rm_so); ms->search.offset += CAST(size_t, pmatch.rm_so); ms->search.rm_len = CAST(size_t, pmatch.rm_eo - pmatch.rm_so); v = 0; break; case REG_NOMATCH: v = 1; break; default: return -1; } break; } case FILE_USE: return ms->ms_value.q != 0; case FILE_NAME: case FILE_INDIRECT: return 1; case FILE_DER: matched = der_cmp(ms, m); if (matched == -1) { if ((ms->flags & MAGIC_DEBUG) != 0) { (void) fprintf(stderr, "EOF comparing DER entries\n"); } return 0; } return matched; case FILE_GUID: l = 0; v = memcmp(m->value.guid, p->guid, sizeof(p->guid)); break; default: file_magerror(ms, "invalid type %d in magiccheck()", m->type); return -1; } v = file_signextend(ms, m, v); switch (m->reln) { case 'x': if ((ms->flags & MAGIC_DEBUG) != 0) (void) fprintf(stderr, "%" INT64_T_FORMAT "u == *any* = 1", CAST(unsigned long long, v)); matched = 1; break; case '!': matched = v != l; if ((ms->flags & MAGIC_DEBUG) != 0) (void) fprintf(stderr, "%" INT64_T_FORMAT "u != %" INT64_T_FORMAT "u = %d", CAST(unsigned long long, v), CAST(unsigned long long, l), matched); break; case '=': matched = v == l; if ((ms->flags & MAGIC_DEBUG) != 0) (void) fprintf(stderr, "%" INT64_T_FORMAT "u == %" INT64_T_FORMAT "u = %d", CAST(unsigned long long, v), CAST(unsigned long long, l), matched); break; case '>': if (m->flag & UNSIGNED) { matched = v > l; if ((ms->flags & MAGIC_DEBUG) != 0) (void) fprintf(stderr, "%" INT64_T_FORMAT "u > %" INT64_T_FORMAT "u = %d", CAST(unsigned long long, v), CAST(unsigned long long, l), matched); } else { matched = CAST(int64_t, v) > CAST(int64_t, l); if ((ms->flags & MAGIC_DEBUG) != 0) (void) fprintf(stderr, "%" INT64_T_FORMAT "d > %" INT64_T_FORMAT "d = %d", CAST(long long, v), CAST(long long, l), matched); } break; case '<': if (m->flag & UNSIGNED) { matched = v < l; if ((ms->flags & MAGIC_DEBUG) != 0) (void) fprintf(stderr, "%" INT64_T_FORMAT "u < %" INT64_T_FORMAT "u = %d", CAST(unsigned long long, v), CAST(unsigned long long, l), matched); } else { matched = CAST(int64_t, v) < CAST(int64_t, l); if ((ms->flags & MAGIC_DEBUG) != 0) (void) fprintf(stderr, "%" INT64_T_FORMAT "d < %" INT64_T_FORMAT "d = %d", CAST(long long, v), CAST(long long, l), matched); } break; case '&': matched = (v & l) == l; if ((ms->flags & MAGIC_DEBUG) != 0) (void) fprintf(stderr, "((%" INT64_T_FORMAT "x & %" INT64_T_FORMAT "x) == %" INT64_T_FORMAT "x) = %d", CAST(unsigned long long, v), CAST(unsigned long long, l), CAST(unsigned long long, l), matched); break; case '^': matched = (v & l) != l; if ((ms->flags & MAGIC_DEBUG) != 0) (void) fprintf(stderr, "((%" INT64_T_FORMAT "x & %" INT64_T_FORMAT "x) != %" INT64_T_FORMAT "x) = %d", CAST(unsigned long long, v), CAST(unsigned long long, l), CAST(unsigned long long, l), matched); break; default: file_magerror(ms, "cannot happen: invalid relation `%c'", m->reln); return -1; } if ((ms->flags & MAGIC_DEBUG) != 0) { (void) fprintf(stderr, " strength=%zu\n", file_magic_strength(m, 1)); } return matched; } file_private int handle_annotation(struct magic_set *ms, struct magic *m, int firstline) { if ((ms->flags & MAGIC_APPLE) && m->apple[0]) { if (print_sep(ms, firstline) == -1) return -1; if (file_printf(ms, "%.8s", m->apple) == -1) return -1; return 1; } if ((ms->flags & MAGIC_EXTENSION) && m->ext[0]) { if (print_sep(ms, firstline) == -1) return -1; if (file_printf(ms, "%s", m->ext) == -1) return -1; return 1; } if ((ms->flags & MAGIC_MIME_TYPE) && m->mimetype[0]) { char buf[1024]; const char *p; if (print_sep(ms, firstline) == -1) return -1; if (varexpand(ms, buf, sizeof(buf), m->mimetype) == -1) p = m->mimetype; else p = buf; if (file_printf(ms, "%s", p) == -1) return -1; return 1; } return 0; } file_private int print_sep(struct magic_set *ms, int firstline) { if (firstline) return 0; /* * we found another match * put a newline and '-' to do some simple formatting */ return file_separator(ms); } file-5.46/src/ascmagic.c000664 023540 023540 00000023155 14634602355 016651 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * ASCII magic -- try to detect text encoding. * * Extensively modified by Eric Fischer in July, 2000, * to handle character codes other than ASCII on a unified basis. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: ascmagic.c,v 1.116 2023/05/21 16:08:50 christos Exp $") #endif /* lint */ #include "magic.h" #include #include #include #ifdef HAVE_UNISTD_H #include #endif #define MAXLINELEN 300 /* longest sane line length */ #define ISSPC(x) ((x) == ' ' || (x) == '\t' || (x) == '\r' || (x) == '\n' \ || (x) == 0x85 || (x) == '\f') file_private unsigned char *encode_utf8(unsigned char *, size_t, file_unichar_t *, size_t); file_private size_t trim_nuls(const unsigned char *, size_t); /* * Undo the NUL-termination kindly provided by process() * but leave at least one byte to look at */ file_private size_t trim_nuls(const unsigned char *buf, size_t nbytes) { while (nbytes > 1 && buf[nbytes - 1] == '\0') nbytes--; return nbytes; } file_protected int file_ascmagic(struct magic_set *ms, const struct buffer *b, int text) { file_unichar_t *ubuf = NULL; size_t ulen = 0; int rv = 1; struct buffer bb; const char *code = NULL; const char *code_mime = NULL; const char *type = NULL; bb = *b; bb.flen = trim_nuls(CAST(const unsigned char *, b->fbuf), b->flen); /* * Avoid trimming at an odd byte if the original buffer was evenly * sized; this avoids losing the last character on UTF-16 LE text */ if ((bb.flen & 1) && !(b->flen & 1)) bb.flen++; /* If file doesn't look like any sort of text, give up. */ if (file_encoding(ms, &bb, &ubuf, &ulen, &code, &code_mime, &type) == 0) rv = 0; else rv = file_ascmagic_with_encoding(ms, &bb, ubuf, ulen, code, type, text); free(ubuf); return rv; } file_protected int file_ascmagic_with_encoding(struct magic_set *ms, const struct buffer *b, file_unichar_t *ubuf, size_t ulen, const char *code, const char *type, int text) { struct buffer bb; const unsigned char *buf = CAST(const unsigned char *, b->fbuf); size_t nbytes = b->flen; unsigned char *utf8_buf = NULL, *utf8_end; size_t mlen, i, len; int rv = -1; int mime = ms->flags & MAGIC_MIME; int need_separator = 0; const char *subtype = NULL; int has_escapes = 0; int has_backspace = 0; int seen_cr = 0; size_t n_crlf = 0; size_t n_lf = 0; size_t n_cr = 0; size_t n_nel = 0; int executable = 0; size_t last_line_end = CAST(size_t, -1); size_t has_long_lines = 0; nbytes = trim_nuls(buf, nbytes); /* If we have fewer than 2 bytes, give up. */ if (nbytes <= 1) { rv = 0; goto done; } if (ulen > 0 && (ms->flags & MAGIC_NO_CHECK_SOFT) == 0) { /* Convert ubuf to UTF-8 and try text soft magic */ /* malloc size is a conservative overestimate; could be improved, or at least realloced after conversion. */ mlen = ulen * 6; if ((utf8_buf = CAST(unsigned char *, malloc(mlen))) == NULL) { file_oomem(ms, mlen); goto done; } if ((utf8_end = encode_utf8(utf8_buf, mlen, ubuf, ulen)) == NULL) { rv = 0; goto done; } buffer_init(&bb, b->fd, &b->st, utf8_buf, CAST(size_t, utf8_end - utf8_buf)); if ((rv = file_softmagic(ms, &bb, NULL, NULL, TEXTTEST, text)) == 0) rv = -1; else need_separator = 1; buffer_fini(&bb); if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION))) { rv = rv == -1 ? 0 : 1; goto done; } } if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION))) { rv = 0; goto done; } /* Now try to discover other details about the file. */ for (i = 0; i < ulen; i++) { if (ubuf[i] == '\n') { if (seen_cr) n_crlf++; else n_lf++; last_line_end = i; } else if (seen_cr) n_cr++; seen_cr = (ubuf[i] == '\r'); if (seen_cr) last_line_end = i; if (ubuf[i] == 0x85) { /* X3.64/ECMA-43 "next line" character */ n_nel++; last_line_end = i; } /* If this line is _longer_ than MAXLINELEN, remember it. */ if (i > last_line_end + MAXLINELEN) { size_t ll = i - last_line_end; if (ll > has_long_lines) has_long_lines = ll; } if (ubuf[i] == '\033') has_escapes = 1; if (ubuf[i] == '\b') has_backspace = 1; } if (strcmp(type, "binary") == 0) { rv = 0; goto done; } len = file_printedlen(ms); if (mime) { if ((mime & MAGIC_MIME_TYPE) != 0) { if (len) { /* * Softmagic printed something, we * are either done, or we need a separator */ if ((ms->flags & MAGIC_CONTINUE) == 0) { rv = 1; goto done; } if (need_separator && file_separator(ms) == -1) goto done; } if (file_printf(ms, "text/plain") == -1) goto done; } } else { if (len) { switch (file_replace(ms, " text$", ", ")) { case 0: switch (file_replace(ms, " text executable$", ", ")) { case 0: if (file_printf(ms, ", ") == -1) goto done; break; case -1: goto done; default: executable = 1; break; } break; case -1: goto done; default: break; } } if (file_printf(ms, "%s", code) == -1) goto done; if (subtype) { if (file_printf(ms, " %s", subtype) == -1) goto done; } if (file_printf(ms, " %s", type) == -1) goto done; if (executable) if (file_printf(ms, " executable") == -1) goto done; if (has_long_lines) if (file_printf(ms, ", with very long lines (%" SIZE_T_FORMAT "u)", has_long_lines) == -1) goto done; /* * Only report line terminators if we find one other than LF, * or if we find none at all. */ if ((n_crlf == 0 && n_cr == 0 && n_nel == 0 && n_lf == 0) || (n_crlf != 0 || n_cr != 0 || n_nel != 0)) { if (file_printf(ms, ", with") == -1) goto done; if (n_crlf == 0 && n_cr == 0 && n_nel == 0 && n_lf == 0) { if (file_printf(ms, " no") == -1) goto done; } else { if (n_crlf) { if (file_printf(ms, " CRLF") == -1) goto done; if (n_cr || n_lf || n_nel) if (file_printf(ms, ",") == -1) goto done; } if (n_cr) { if (file_printf(ms, " CR") == -1) goto done; if (n_lf || n_nel) if (file_printf(ms, ",") == -1) goto done; } if (n_lf) { if (file_printf(ms, " LF") == -1) goto done; if (n_nel) if (file_printf(ms, ",") == -1) goto done; } if (n_nel) if (file_printf(ms, " NEL") == -1) goto done; } if (file_printf(ms, " line terminators") == -1) goto done; } if (has_escapes) if (file_printf(ms, ", with escape sequences") == -1) goto done; if (has_backspace) if (file_printf(ms, ", with overstriking") == -1) goto done; } rv = 1; done: free(utf8_buf); return rv; } /* * Encode Unicode string as UTF-8, returning pointer to character * after end of string, or NULL if an invalid character is found. */ file_private unsigned char * encode_utf8(unsigned char *buf, size_t len, file_unichar_t *ubuf, size_t ulen) { size_t i; unsigned char *end = buf + len; for (i = 0; i < ulen; i++) { if (ubuf[i] <= 0x7f) { if (end - buf < 1) return NULL; *buf++ = CAST(unsigned char, ubuf[i]); continue; } if (ubuf[i] <= 0x7ff) { if (end - buf < 2) return NULL; *buf++ = CAST(unsigned char, (ubuf[i] >> 6) + 0xc0); goto out1; } if (ubuf[i] <= 0xffff) { if (end - buf < 3) return NULL; *buf++ = CAST(unsigned char, (ubuf[i] >> 12) + 0xe0); goto out2; } if (ubuf[i] <= 0x1fffff) { if (end - buf < 4) return NULL; *buf++ = CAST(unsigned char, (ubuf[i] >> 18) + 0xf0); goto out3; } if (ubuf[i] <= 0x3ffffff) { if (end - buf < 5) return NULL; *buf++ = CAST(unsigned char, (ubuf[i] >> 24) + 0xf8); goto out4; } if (ubuf[i] <= 0x7fffffff) { if (end - buf < 6) return NULL; *buf++ = CAST(unsigned char, (ubuf[i] >> 30) + 0xfc); goto out5; } /* Invalid character */ return NULL; out5: *buf++ = CAST(unsigned char, ((ubuf[i] >> 24) & 0x3f) + 0x80); out4: *buf++ = CAST(unsigned char, ((ubuf[i] >> 18) & 0x3f) + 0x80); out3: *buf++ = CAST(unsigned char, ((ubuf[i] >> 12) & 0x3f) + 0x80); out2: *buf++ = CAST(unsigned char, ((ubuf[i] >> 6) & 0x3f) + 0x80); out1: *buf++ = CAST(unsigned char, ((ubuf[i] >> 0) & 0x3f) + 0x80); } return buf; } file-5.46/src/encoding.c000664 023540 023540 00000054171 14710246020 016656 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * Encoding -- determine the character encoding of a text file. * * Joerg Wunsch wrote the original support for 8-bit * international characters. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: encoding.c,v 1.43 2024/10/29 20:56:48 christos Exp $") #endif /* lint */ #include "magic.h" #include #include file_private int looks_ascii(const unsigned char *, size_t, file_unichar_t *, size_t *); file_private int looks_utf8_with_BOM(const unsigned char *, size_t, file_unichar_t *, size_t *); file_private int looks_utf7(const unsigned char *, size_t, file_unichar_t *, size_t *); file_private int looks_ucs16(const unsigned char *, size_t, file_unichar_t *, size_t *); file_private int looks_ucs32(const unsigned char *, size_t, file_unichar_t *, size_t *); file_private int looks_latin1(const unsigned char *, size_t, file_unichar_t *, size_t *); file_private int looks_extended(const unsigned char *, size_t, file_unichar_t *, size_t *); file_private void from_ebcdic(const unsigned char *, size_t, unsigned char *); #ifdef DEBUG_ENCODING #define DPRINTF(a) printf a #else #define DPRINTF(a) #endif /* * Try to determine whether text is in some character code we can * identify. Each of these tests, if it succeeds, will leave * the text converted into one-file_unichar_t-per-character Unicode in * ubuf, and the number of characters converted in ulen. */ file_protected int file_encoding(struct magic_set *ms, const struct buffer *b, file_unichar_t **ubuf, size_t *ulen, const char **code, const char **code_mime, const char **type) { const unsigned char *buf = CAST(const unsigned char *, b->fbuf); size_t nbytes = b->flen; size_t mlen; int rv = 1, ucs_type; file_unichar_t *udefbuf; size_t udeflen; if (ubuf == NULL) ubuf = &udefbuf; if (ulen == NULL) ulen = &udeflen; *type = "text"; *ulen = 0; *code = "unknown"; *code_mime = "binary"; if (nbytes > ms->encoding_max) nbytes = ms->encoding_max; mlen = (nbytes + 1) * sizeof((*ubuf)[0]); *ubuf = CAST(file_unichar_t *, calloc(CAST(size_t, 1), mlen)); if (*ubuf == NULL) { file_oomem(ms, mlen); goto done; } if (looks_ascii(buf, nbytes, *ubuf, ulen)) { if (looks_utf7(buf, nbytes, *ubuf, ulen) > 0) { DPRINTF(("utf-7 %" SIZE_T_FORMAT "u\n", *ulen)); *code = "Unicode text, UTF-7"; *code_mime = "utf-7"; } else { DPRINTF(("ascii %" SIZE_T_FORMAT "u\n", *ulen)); *code = "ASCII"; *code_mime = "us-ascii"; } } else if (looks_utf8_with_BOM(buf, nbytes, *ubuf, ulen) > 0) { DPRINTF(("utf8/bom %" SIZE_T_FORMAT "u\n", *ulen)); *code = "Unicode text, UTF-8 (with BOM)"; *code_mime = "utf-8"; } else if (file_looks_utf8(buf, nbytes, *ubuf, ulen) > 1) { DPRINTF(("utf8 %" SIZE_T_FORMAT "u\n", *ulen)); *code = "Unicode text, UTF-8"; *code_mime = "utf-8"; } else if ((ucs_type = looks_ucs32(buf, nbytes, *ubuf, ulen)) != 0) { if (ucs_type == 1) { *code = "Unicode text, UTF-32, little-endian"; *code_mime = "utf-32le"; } else { *code = "Unicode text, UTF-32, big-endian"; *code_mime = "utf-32be"; } DPRINTF(("ucs32 %" SIZE_T_FORMAT "u\n", *ulen)); } else if ((ucs_type = looks_ucs16(buf, nbytes, *ubuf, ulen)) != 0) { if (ucs_type == 1) { *code = "Unicode text, UTF-16, little-endian"; *code_mime = "utf-16le"; } else { *code = "Unicode text, UTF-16, big-endian"; *code_mime = "utf-16be"; } DPRINTF(("ucs16 %" SIZE_T_FORMAT "u\n", *ulen)); } else if (looks_latin1(buf, nbytes, *ubuf, ulen)) { DPRINTF(("latin1 %" SIZE_T_FORMAT "u\n", *ulen)); *code = "ISO-8859"; *code_mime = "iso-8859-1"; } else if (looks_extended(buf, nbytes, *ubuf, ulen)) { DPRINTF(("extended %" SIZE_T_FORMAT "u\n", *ulen)); *code = "Non-ISO extended-ASCII"; *code_mime = "unknown-8bit"; } else { unsigned char *nbuf; mlen = (nbytes + 1) * sizeof(nbuf[0]); if ((nbuf = CAST(unsigned char *, malloc(mlen))) == NULL) { file_oomem(ms, mlen); goto done; } from_ebcdic(buf, nbytes, nbuf); if (looks_ascii(nbuf, nbytes, *ubuf, ulen)) { DPRINTF(("ebcdic %" SIZE_T_FORMAT "u\n", *ulen)); *code = "EBCDIC"; *code_mime = "ebcdic"; } else if (looks_latin1(nbuf, nbytes, *ubuf, ulen)) { DPRINTF(("ebcdic/international %" SIZE_T_FORMAT "u\n", *ulen)); *code = "International EBCDIC"; *code_mime = "ebcdic"; } else { /* Doesn't look like text at all */ DPRINTF(("binary\n")); rv = 0; *type = "binary"; } free(nbuf); } done: if (ubuf == &udefbuf) free(udefbuf); return rv; } /* * This table reflects a particular philosophy about what constitutes * "text," and there is room for disagreement about it. * * Version 3.31 of the file command considered a file to be ASCII if * each of its characters was approved by either the isascii() or * isalpha() function. On most systems, this would mean that any * file consisting only of characters in the range 0x00 ... 0x7F * would be called ASCII text, but many systems might reasonably * consider some characters outside this range to be alphabetic, * so the file command would call such characters ASCII. It might * have been more accurate to call this "considered textual on the * local system" than "ASCII." * * It considered a file to be "International language text" if each * of its characters was either an ASCII printing character (according * to the real ASCII standard, not the above test), a character in * the range 0x80 ... 0xFF, or one of the following control characters: * backspace, tab, line feed, vertical tab, form feed, carriage return, * escape. No attempt was made to determine the language in which files * of this type were written. * * * The table below considers a file to be ASCII if all of its characters * are either ASCII printing characters (again, according to the X3.4 * standard, not isascii()) or any of the following controls: bell, * backspace, tab, line feed, form feed, carriage return, esc, nextline. * * I include bell because some programs (particularly shell scripts) * use it literally, even though it is rare in normal text. I exclude * vertical tab because it never seems to be used in real text. I also * include, with hesitation, the X3.64/ECMA-43 control nextline (0x85), * because that's what the dd EBCDIC->ASCII table maps the EBCDIC newline * character to. It might be more appropriate to include it in the 8859 * set instead of the ASCII set, but it's got to be included in *something* * we recognize or EBCDIC files aren't going to be considered textual. * Some old Unix source files use SO/SI (^N/^O) to shift between Greek * and Latin characters, so these should possibly be allowed. But they * make a real mess on VT100-style displays if they're not paired properly, * so we are probably better off not calling them text. * * A file is considered to be ISO-8859 text if its characters are all * either ASCII, according to the above definition, or printing characters * from the ISO-8859 8-bit extension, characters 0xA0 ... 0xFF. * * Finally, a file is considered to be international text from some other * character code if its characters are all either ISO-8859 (according to * the above definition) or characters in the range 0x80 ... 0x9F, which * ISO-8859 considers to be control characters but the IBM PC and Macintosh * consider to be printing characters. */ #define F 0 /* character never appears in text */ #define T 1 /* character appears in plain ASCII text */ #define I 2 /* character appears in ISO-8859 text */ #define X 3 /* character appears in non-ISO extended ASCII (Mac, IBM PC) */ file_private char text_chars[256] = { /* BEL BS HT LF VT FF CR */ F, F, F, F, F, F, F, T, T, T, T, T, T, T, F, F, /* 0x0X */ /* ESC */ F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F, /* 0x1X */ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x2X */ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x3X */ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x4X */ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x5X */ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x6X */ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F, /* 0x7X */ /* NEL */ X, X, X, X, X, T, X, X, X, X, X, X, X, X, X, X, /* 0x8X */ X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, /* 0x9X */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xaX */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xbX */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xcX */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xdX */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xeX */ I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I /* 0xfX */ }; #define LOOKS(NAME, COND) \ file_private int \ looks_ ## NAME(const unsigned char *buf, size_t nbytes, file_unichar_t *ubuf, \ size_t *ulen) \ { \ size_t i; \ \ *ulen = 0; \ \ for (i = 0; i < nbytes; i++) { \ int t = text_chars[buf[i]]; \ \ if (COND) \ return 0; \ \ ubuf[(*ulen)++] = buf[i]; \ } \ return 1; \ } LOOKS(ascii, t != T) LOOKS(latin1, t != T && t != I) LOOKS(extended, t != T && t != I && t != X) /* * Decide whether some text looks like UTF-8. Returns: * * -1: invalid UTF-8 * 0: uses odd control characters, so doesn't look like text * 1: 7-bit text * 2: definitely UTF-8 text (valid high-bit set bytes) * * If ubuf is non-NULL on entry, text is decoded into ubuf, *ulen; * ubuf must be big enough! */ // from: https://golang.org/src/unicode/utf8/utf8.go #define XX 0xF1 // invalid: size 1 #define AS 0xF0 // ASCII: size 1 #define S1 0x02 // accept 0, size 2 #define S2 0x13 // accept 1, size 3 #define S3 0x03 // accept 0, size 3 #define S4 0x23 // accept 2, size 3 #define S5 0x34 // accept 3, size 4 #define S6 0x04 // accept 0, size 4 #define S7 0x44 // accept 4, size 4 #define LOCB 0x80 #define HICB 0xBF // first is information about the first byte in a UTF-8 sequence. static const uint8_t first[] = { // 1 2 3 4 5 6 7 8 9 A B C D E F AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, // 0x00-0x0F AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, // 0x10-0x1F AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, // 0x20-0x2F AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, // 0x30-0x3F AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, // 0x40-0x4F AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, // 0x50-0x5F AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, // 0x60-0x6F AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, AS, // 0x70-0x7F // 1 2 3 4 5 6 7 8 9 A B C D E F XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, // 0x80-0x8F XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, // 0x90-0x9F XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, // 0xA0-0xAF XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, // 0xB0-0xBF XX, XX, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, // 0xC0-0xCF S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, S1, // 0xD0-0xDF S2, S3, S3, S3, S3, S3, S3, S3, S3, S3, S3, S3, S3, S4, S3, S3, // 0xE0-0xEF S5, S6, S6, S6, S7, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, XX, // 0xF0-0xFF }; // acceptRange gives the range of valid values for the second byte in a UTF-8 // sequence. static struct accept_range { uint8_t lo; // lowest value for second byte. uint8_t hi; // highest value for second byte. } accept_ranges[16] = { // acceptRanges has size 16 to avoid bounds checks in the code that uses it. { LOCB, HICB }, { 0xA0, HICB }, { LOCB, 0x9F }, { 0x90, HICB }, { LOCB, 0x8F }, }; file_protected int file_looks_utf8(const unsigned char *buf, size_t nbytes, file_unichar_t *ubuf, size_t *ulen) { size_t i; int n; file_unichar_t c; int gotone = 0, ctrl = 0; if (ubuf) *ulen = 0; for (i = 0; i < nbytes; i++) { if ((buf[i] & 0x80) == 0) { /* 0xxxxxxx is plain ASCII */ /* * Even if the whole file is valid UTF-8 sequences, * still reject it if it uses weird control characters. */ if (text_chars[buf[i]] != T) ctrl = 1; if (ubuf) ubuf[(*ulen)++] = buf[i]; } else if ((buf[i] & 0x40) == 0) { /* 10xxxxxx never 1st byte */ return -1; } else { /* 11xxxxxx begins UTF-8 */ int following; uint8_t x = first[buf[i]]; const struct accept_range *ar = &accept_ranges[(unsigned int)x >> 4]; if (x == XX) return -1; if ((buf[i] & 0x20) == 0) { /* 110xxxxx */ c = buf[i] & 0x1f; following = 1; } else if ((buf[i] & 0x10) == 0) { /* 1110xxxx */ c = buf[i] & 0x0f; following = 2; } else if ((buf[i] & 0x08) == 0) { /* 11110xxx */ c = buf[i] & 0x07; following = 3; } else if ((buf[i] & 0x04) == 0) { /* 111110xx */ c = buf[i] & 0x03; following = 4; } else if ((buf[i] & 0x02) == 0) { /* 1111110x */ c = buf[i] & 0x01; following = 5; } else return -1; for (n = 0; n < following; n++) { i++; if (i >= nbytes) goto done; if (n == 0 && (buf[i] < ar->lo || buf[i] > ar->hi)) return -1; if ((buf[i] & 0x80) == 0 || (buf[i] & 0x40)) return -1; c = (c << 6) + (buf[i] & 0x3f); } if (ubuf) ubuf[(*ulen)++] = c; gotone = 1; } } done: return ctrl ? 0 : (gotone ? 2 : 1); } /* * Decide whether some text looks like UTF-8 with BOM. If there is no * BOM, return -1; otherwise return the result of looks_utf8 on the * rest of the text. */ file_private int looks_utf8_with_BOM(const unsigned char *buf, size_t nbytes, file_unichar_t *ubuf, size_t *ulen) { if (nbytes > 3 && buf[0] == 0xef && buf[1] == 0xbb && buf[2] == 0xbf) return file_looks_utf8(buf + 3, nbytes - 3, ubuf, ulen); else return -1; } file_private int looks_utf7(const unsigned char *buf, size_t nbytes, file_unichar_t *ubuf, size_t *ulen) { if (nbytes > 4 && buf[0] == '+' && buf[1] == '/' && buf[2] == 'v') switch (buf[3]) { case '8': case '9': case '+': case '/': if (ubuf) *ulen = 0; return 1; default: return -1; } else return -1; } #define UCS16_NOCHAR(c) ((c) >= 0xfdd0 && (c) <= 0xfdef) #define UCS16_HISURR(c) ((c) >= 0xd800 && (c) <= 0xdbff) #define UCS16_LOSURR(c) ((c) >= 0xdc00 && (c) <= 0xdfff) file_private int looks_ucs16(const unsigned char *bf, size_t nbytes, file_unichar_t *ubf, size_t *ulen) { int bigend; uint32_t hi; size_t i; if (nbytes < 2) return 0; if (bf[0] == 0xff && bf[1] == 0xfe) bigend = 0; else if (bf[0] == 0xfe && bf[1] == 0xff) bigend = 1; else return 0; *ulen = 0; hi = 0; for (i = 2; i + 1 < nbytes; i += 2) { uint32_t uc; if (bigend) uc = CAST(uint32_t, bf[i + 1] | (CAST(file_unichar_t, bf[i]) << 8)); else uc = CAST(uint32_t, bf[i] | (CAST(file_unichar_t, bf[i + 1]) << 8)); uc &= 0xffff; switch (uc) { case 0xfffe: case 0xffff: return 0; default: if (UCS16_NOCHAR(uc)) return 0; break; } if (hi) { if (!UCS16_LOSURR(uc)) return 0; uc = 0x10000 + 0x400 * (hi - 1) + (uc - 0xdc00); hi = 0; } if (uc < 128 && text_chars[CAST(size_t, uc)] != T) return 0; ubf[(*ulen)++] = uc; if (UCS16_HISURR(uc)) hi = uc - 0xd800 + 1; if (UCS16_LOSURR(uc)) return 0; } return 1 + bigend; } file_private int looks_ucs32(const unsigned char *bf, size_t nbytes, file_unichar_t *ubf, size_t *ulen) { int bigend; size_t i; if (nbytes < 4) return 0; if (bf[0] == 0xff && bf[1] == 0xfe && bf[2] == 0 && bf[3] == 0) bigend = 0; else if (bf[0] == 0 && bf[1] == 0 && bf[2] == 0xfe && bf[3] == 0xff) bigend = 1; else return 0; *ulen = 0; for (i = 4; i + 3 < nbytes; i += 4) { /* XXX fix to properly handle chars > 65536 */ if (bigend) ubf[(*ulen)++] = CAST(file_unichar_t, bf[i + 3]) | (CAST(file_unichar_t, bf[i + 2]) << 8) | (CAST(file_unichar_t, bf[i + 1]) << 16) | (CAST(file_unichar_t, bf[i]) << 24); else ubf[(*ulen)++] = CAST(file_unichar_t, bf[i + 0]) | (CAST(file_unichar_t, bf[i + 1]) << 8) | (CAST(file_unichar_t, bf[i + 2]) << 16) | (CAST(file_unichar_t, bf[i + 3]) << 24); if (ubf[*ulen - 1] == 0xfffe) return 0; if (ubf[*ulen - 1] < 128 && text_chars[CAST(size_t, ubf[*ulen - 1])] != T) return 0; } return 1 + bigend; } #undef F #undef T #undef I #undef X /* * This table maps each EBCDIC character to an (8-bit extended) ASCII * character, as specified in the rationale for the dd(1) command in * draft 11.2 (September, 1991) of the POSIX P1003.2 standard. * * Unfortunately it does not seem to correspond exactly to any of the * five variants of EBCDIC documented in IBM's _Enterprise Systems * Architecture/390: Principles of Operation_, SA22-7201-06, Seventh * Edition, July, 1999, pp. I-1 - I-4. * * Fortunately, though, all versions of EBCDIC, including this one, agree * on most of the printing characters that also appear in (7-bit) ASCII. * Of these, only '|', '!', '~', '^', '[', and ']' are in question at all. * * Fortunately too, there is general agreement that codes 0x00 through * 0x3F represent control characters, 0x41 a nonbreaking space, and the * remainder printing characters. * * This is sufficient to allow us to identify EBCDIC text and to distinguish * between old-style and internationalized examples of text. */ file_private unsigned char ebcdic_to_ascii[] = { 0, 1, 2, 3, 156, 9, 134, 127, 151, 141, 142, 11, 12, 13, 14, 15, 16, 17, 18, 19, 157, 133, 8, 135, 24, 25, 146, 143, 28, 29, 30, 31, 128, 129, 130, 131, 132, 10, 23, 27, 136, 137, 138, 139, 140, 5, 6, 7, 144, 145, 22, 147, 148, 149, 150, 4, 152, 153, 154, 155, 20, 21, 158, 26, ' ', 160, 161, 162, 163, 164, 165, 166, 167, 168, 213, '.', '<', '(', '+', '|', '&', 169, 170, 171, 172, 173, 174, 175, 176, 177, '!', '$', '*', ')', ';', '~', '-', '/', 178, 179, 180, 181, 182, 183, 184, 185, 203, ',', '%', '_', '>', '?', 186, 187, 188, 189, 190, 191, 192, 193, 194, '`', ':', '#', '@', '\'','=', '"', 195, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 196, 197, 198, 199, 200, 201, 202, 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', '^', 204, 205, 206, 207, 208, 209, 229, 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 210, 211, 212, '[', 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, ']', 230, 231, '{', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 232, 233, 234, 235, 236, 237, '}', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 238, 239, 240, 241, 242, 243, '\\',159, 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 244, 245, 246, 247, 248, 249, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 250, 251, 252, 253, 254, 255 }; #ifdef notdef /* * The following EBCDIC-to-ASCII table may relate more closely to reality, * or at least to modern reality. It comes from * * http://ftp.s390.ibm.com/products/oe/bpxqp9.html * * and maps the characters of EBCDIC code page 1047 (the code used for * Unix-derived software on IBM's 390 systems) to the corresponding * characters from ISO 8859-1. * * If this table is used instead of the above one, some of the special * cases for the NEL character can be taken out of the code. */ file_private unsigned char ebcdic_1047_to_8859[] = { 0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F, 0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F, 0x80,0x81,0x82,0x83,0x84,0x85,0x17,0x1B,0x88,0x89,0x8A,0x8B,0x8C,0x05,0x06,0x07, 0x90,0x91,0x16,0x93,0x94,0x95,0x96,0x04,0x98,0x99,0x9A,0x9B,0x14,0x15,0x9E,0x1A, 0x20,0xA0,0xE2,0xE4,0xE0,0xE1,0xE3,0xE5,0xE7,0xF1,0xA2,0x2E,0x3C,0x28,0x2B,0x7C, 0x26,0xE9,0xEA,0xEB,0xE8,0xED,0xEE,0xEF,0xEC,0xDF,0x21,0x24,0x2A,0x29,0x3B,0x5E, 0x2D,0x2F,0xC2,0xC4,0xC0,0xC1,0xC3,0xC5,0xC7,0xD1,0xA6,0x2C,0x25,0x5F,0x3E,0x3F, 0xF8,0xC9,0xCA,0xCB,0xC8,0xCD,0xCE,0xCF,0xCC,0x60,0x3A,0x23,0x40,0x27,0x3D,0x22, 0xD8,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0xAB,0xBB,0xF0,0xFD,0xFE,0xB1, 0xB0,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,0xAA,0xBA,0xE6,0xB8,0xC6,0xA4, 0xB5,0x7E,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0xA1,0xBF,0xD0,0x5B,0xDE,0xAE, 0xAC,0xA3,0xA5,0xB7,0xA9,0xA7,0xB6,0xBC,0xBD,0xBE,0xDD,0xA8,0xAF,0x5D,0xB4,0xD7, 0x7B,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0xAD,0xF4,0xF6,0xF2,0xF3,0xF5, 0x7D,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,0x50,0x51,0x52,0xB9,0xFB,0xFC,0xF9,0xFA,0xFF, 0x5C,0xF7,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xB2,0xD4,0xD6,0xD2,0xD3,0xD5, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xB3,0xDB,0xDC,0xD9,0xDA,0x9F }; #endif /* * Copy buf[0 ... nbytes-1] into out[], translating EBCDIC to ASCII. */ file_private void from_ebcdic(const unsigned char *buf, size_t nbytes, unsigned char *out) { size_t i; for (i = 0; i < nbytes; i++) { out[i] = ebcdic_to_ascii[buf[i]]; } } file-5.46/src/compress.c000664 023540 023540 00000074640 14714162313 016734 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * compress routines: * zmagic() - returns 0 if not recognized, uncompresses and prints * information if recognized * uncompress(method, old, n, newch) - uncompress old into new, * using method, return sizeof new */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: compress.c,v 1.158 2024/11/10 16:52:27 christos Exp $") #endif #include "magic.h" #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_SPAWN_H #include #endif #include #include #include #include #include #include #ifndef HAVE_SIG_T typedef void (*sig_t)(int); #endif /* HAVE_SIG_T */ #ifdef HAVE_SYS_IOCTL_H #include #endif #ifdef HAVE_SYS_WAIT_H #include #endif #if defined(HAVE_SYS_TIME_H) #include #endif #if defined(HAVE_ZLIB_H) && defined(ZLIBSUPPORT) #define BUILTIN_DECOMPRESS #include #endif #if defined(HAVE_BZLIB_H) && defined(BZLIBSUPPORT) #define BUILTIN_BZLIB #include #endif #if defined(HAVE_LZMA_H) && defined(XZLIBSUPPORT) #define BUILTIN_XZLIB #include #endif #if defined(HAVE_ZSTD_H) && defined(ZSTDLIBSUPPORT) #define BUILTIN_ZSTDLIB #include #include #endif #if defined(HAVE_LZLIB_H) && defined(LZLIBSUPPORT) #define BUILTIN_LZLIB #include #endif #ifdef notyet #if defined(HAVE_LRZIP_H) && defined(LRZIPLIBSUPPORT) #define BUILTIN_LRZIP #include #endif #endif #ifdef DEBUG int tty = -1; #define DPRINTF(...) do { \ if (tty == -1) \ tty = open("/dev/tty", O_RDWR); \ if (tty == -1) \ abort(); \ dprintf(tty, __VA_ARGS__); \ } while (/*CONSTCOND*/0) #else #define DPRINTF(...) #endif #ifdef ZLIBSUPPORT /* * The following python code is not really used because ZLIBSUPPORT is only * defined if we have a built-in zlib, and the built-in zlib handles that. * That is not true for android where we have zlib.h and not -lz. */ static const char zlibcode[] = "import sys, zlib; sys.stdout.write(zlib.decompress(sys.stdin.read()))"; static const char *zlib_args[] = { "python", "-c", zlibcode, NULL }; static int zlibcmp(const unsigned char *buf) { unsigned short x = 1; unsigned char *s = CAST(unsigned char *, CAST(void *, &x)); if ((buf[0] & 0xf) != 8 || (buf[0] & 0x80) != 0) return 0; if (s[0] != 1) /* endianness test */ x = buf[0] | (buf[1] << 8); else x = buf[1] | (buf[0] << 8); if (x % 31) return 0; return 1; } #endif static int lzmacmp(const unsigned char *buf) { if (buf[0] != 0x5d || buf[1] || buf[2]) return 0; if (buf[12] && buf[12] != 0xff) return 0; return 1; } #define gzip_flags "-cd" #define lzip_flags gzip_flags static const char *gzip_args[] = { "gzip", gzip_flags, NULL }; static const char *uncompress_args[] = { "uncompress", "-c", NULL }; static const char *bzip2_args[] = { "bzip2", "-cd", NULL }; static const char *lzip_args[] = { "lzip", lzip_flags, NULL }; static const char *xz_args[] = { "xz", "-cd", NULL }; static const char *lrzip_args[] = { "lrzip", "-qdf", "-", NULL }; static const char *lz4_args[] = { "lz4", "-cd", NULL }; static const char *zstd_args[] = { "zstd", "-cd", NULL }; #define do_zlib NULL #define do_bzlib NULL file_private const struct { union { const char *magic; int (*func)(const unsigned char *); } u; int maglen; const char **argv; void *unused; } compr[] = { #define METH_FROZEN 2 #define METH_BZIP 7 #define METH_XZ 9 #define METH_LZIP 8 #define METH_LRZIP 10 #define METH_ZSTD 12 #define METH_LZMA 13 #define METH_ZLIB 14 { { .magic = "\037\235" }, 2, gzip_args, NULL }, /* 0, compressed */ /* Uncompress can get stuck; so use gzip first if we have it * Idea from Damien Clark, thanks! */ { { .magic = "\037\235" }, 2, uncompress_args, NULL },/* 1, compressed */ { { .magic = "\037\213" }, 2, gzip_args, do_zlib },/* 2, gzipped */ { { .magic = "\037\236" }, 2, gzip_args, NULL }, /* 3, frozen */ { { .magic = "\037\240" }, 2, gzip_args, NULL }, /* 4, SCO LZH */ /* the standard pack utilities do not accept standard input */ { { .magic = "\037\036" }, 2, gzip_args, NULL }, /* 5, packed */ { { .magic = "PK\3\4" }, 4, gzip_args, NULL }, /* 6, pkziped */ /* ...only first file examined */ { { .magic = "BZh" }, 3, bzip2_args, do_bzlib },/* 7, bzip2-ed */ { { .magic = "LZIP" }, 4, lzip_args, NULL }, /* 8, lzip-ed */ { { .magic = "\3757zXZ\0" },6, xz_args, NULL }, /* 9, XZ Util */ { { .magic = "LRZI" }, 4, lrzip_args, NULL }, /* 10, LRZIP */ { { .magic = "\004\"M\030" },4, lz4_args, NULL }, /* 11, LZ4 */ { { .magic = "\x28\xB5\x2F\xFD" }, 4, zstd_args, NULL },/* 12, zstd */ { { .func = lzmacmp }, -13, xz_args, NULL }, /* 13, lzma */ #ifdef ZLIBSUPPORT { { .func = zlibcmp }, -2, zlib_args, NULL }, /* 14, zlib */ #endif }; #define OKDATA 0 #define NODATA 1 #define ERRDATA 2 file_private ssize_t swrite(int, const void *, size_t); #if HAVE_FORK file_private size_t ncompr = __arraycount(compr); file_private int uncompressbuf(int, size_t, size_t, int, const unsigned char *, unsigned char **, size_t *); #ifdef BUILTIN_DECOMPRESS file_private int uncompresszlib(const unsigned char *, unsigned char **, size_t, size_t *, int); file_private int uncompressgzipped(const unsigned char *, unsigned char **, size_t, size_t *, int); #endif #ifdef BUILTIN_BZLIB file_private int uncompressbzlib(const unsigned char *, unsigned char **, size_t, size_t *, int); #endif #ifdef BUILTIN_XZLIB file_private int uncompressxzlib(const unsigned char *, unsigned char **, size_t, size_t *, int); #endif #ifdef BUILTIN_ZSTDLIB file_private int uncompresszstd(const unsigned char *, unsigned char **, size_t, size_t *, int); #endif #ifdef BUILTIN_LZLIB file_private int uncompresslzlib(const unsigned char *, unsigned char **, size_t, size_t *, int); #endif #ifdef BUILTIN_LRZIP file_private int uncompresslrzip(const unsigned char *, unsigned char **, size_t, size_t *, int); #endif static int makeerror(unsigned char **, size_t *, const char *, ...) __attribute__((__format__(__printf__, 3, 4))); file_private const char *methodname(size_t); file_private int format_decompression_error(struct magic_set *ms, size_t i, unsigned char *buf) { unsigned char *p; int mime = ms->flags & MAGIC_MIME; if (!mime) return file_printf(ms, "ERROR:[%s: %s]", methodname(i), buf); for (p = buf; *p; p++) if (!isalnum(*p)) *p = '-'; return file_printf(ms, "application/x-decompression-error-%s-%s", methodname(i), buf); } file_protected int file_zmagic(struct magic_set *ms, const struct buffer *b, const char *name) { unsigned char *newbuf = NULL; size_t i, nsz; char *rbuf; file_pushbuf_t *pb; int urv, prv, rv = 0; int mime = ms->flags & MAGIC_MIME; int fd = b->fd; const unsigned char *buf = CAST(const unsigned char *, b->fbuf); size_t nbytes = b->flen; int sa_saved = 0; struct sigaction sig_act; if ((ms->flags & MAGIC_COMPRESS) == 0) return 0; for (i = 0; i < ncompr; i++) { int zm; if (nbytes < CAST(size_t, abs(compr[i].maglen))) continue; if (compr[i].maglen < 0) { zm = (*compr[i].u.func)(buf); } else { zm = memcmp(buf, compr[i].u.magic, CAST(size_t, compr[i].maglen)) == 0; } if (!zm) continue; /* Prevent SIGPIPE death if child dies unexpectedly */ if (!sa_saved) { //We can use sig_act for both new and old, but struct sigaction new_act; memset(&new_act, 0, sizeof(new_act)); new_act.sa_handler = SIG_IGN; sa_saved = sigaction(SIGPIPE, &new_act, &sig_act) != -1; } nsz = nbytes; free(newbuf); urv = uncompressbuf(fd, ms->bytes_max, i, (ms->flags & MAGIC_NO_COMPRESS_FORK), buf, &newbuf, &nsz); DPRINTF("uncompressbuf = %d, %s, %" SIZE_T_FORMAT "u\n", urv, (char *)newbuf, nsz); switch (urv) { case OKDATA: case ERRDATA: ms->flags &= ~MAGIC_COMPRESS; if (urv == ERRDATA) prv = format_decompression_error(ms, i, newbuf); else prv = file_buffer(ms, -1, NULL, name, newbuf, nsz); if (prv == -1) goto error; rv = 1; if ((ms->flags & MAGIC_COMPRESS_TRANSP) != 0) goto out; if (mime != MAGIC_MIME && mime != 0) goto out; if ((file_printf(ms, mime ? " compressed-encoding=" : " (")) == -1) goto error; if ((pb = file_push_buffer(ms)) == NULL) goto error; /* * XXX: If file_buffer fails here, we overwrite * the compressed text. FIXME. */ if (file_buffer(ms, -1, NULL, NULL, buf, nbytes) == -1) { if (file_pop_buffer(ms, pb) != NULL) abort(); goto error; } if ((rbuf = file_pop_buffer(ms, pb)) != NULL) { if (file_printf(ms, "%s", rbuf) == -1) { free(rbuf); goto error; } free(rbuf); } if (!mime && file_printf(ms, ")") == -1) goto error; /*FALLTHROUGH*/ case NODATA: break; default: abort(); /*NOTREACHED*/ error: rv = -1; break; } } out: DPRINTF("rv = %d\n", rv); if (sa_saved && sig_act.sa_handler != SIG_IGN) (void)sigaction(SIGPIPE, &sig_act, NULL); free(newbuf); ms->flags |= MAGIC_COMPRESS; DPRINTF("Zmagic returns %d\n", rv); return rv; } #endif /* * `safe' write for sockets and pipes. */ file_private ssize_t swrite(int fd, const void *buf, size_t n) { ssize_t rv; size_t rn = n; do switch (rv = write(fd, buf, n)) { case -1: if (errno == EINTR) continue; return -1; default: n -= rv; buf = CAST(const char *, buf) + rv; break; } while (n > 0); return rn; } /* * `safe' read for sockets and pipes. */ file_protected ssize_t sread(int fd, void *buf, size_t n, int canbepipe __attribute__((__unused__))) { ssize_t rv; #if defined(FIONREAD) && !defined(__MINGW32__) int t = 0; #endif size_t rn = n; if (fd == STDIN_FILENO) goto nocheck; #if defined(FIONREAD) && !defined(__MINGW32__) if (canbepipe && (ioctl(fd, FIONREAD, &t) == -1 || t == 0)) { #ifdef FD_ZERO ssize_t cnt; for (cnt = 0;; cnt++) { fd_set check; struct timeval tout = {0, 100 * 1000}; int selrv; FD_ZERO(&check); FD_SET(fd, &check); /* * Avoid soft deadlock: do not read if there * is nothing to read from sockets and pipes. */ selrv = select(fd + 1, &check, NULL, NULL, &tout); if (selrv == -1) { if (errno == EINTR || errno == EAGAIN) continue; } else if (selrv == 0 && cnt >= 5) { return 0; } else break; } #endif (void)ioctl(fd, FIONREAD, &t); } if (t > 0 && CAST(size_t, t) < n) { n = t; rn = n; } #endif nocheck: do switch ((rv = read(fd, buf, n))) { case -1: if (errno == EINTR) continue; return -1; case 0: return rn - n; default: n -= rv; buf = CAST(char *, CCAST(void *, buf)) + rv; break; } while (n > 0); return rn; } file_protected int file_pipe2file(struct magic_set *ms, int fd, const void *startbuf, size_t nbytes) { char buf[4096]; ssize_t r; int tfd; #ifdef WIN32 const char *t; buf[0] = '\0'; if ((t = getenv("TEMP")) != NULL) (void)strlcpy(buf, t, sizeof(buf)); else if ((t = getenv("TMP")) != NULL) (void)strlcpy(buf, t, sizeof(buf)); else if ((t = getenv("TMPDIR")) != NULL) (void)strlcpy(buf, t, sizeof(buf)); if (buf[0] != '\0') (void)strlcat(buf, "/", sizeof(buf)); (void)strlcat(buf, "file.XXXXXX", sizeof(buf)); #else (void)strlcpy(buf, "/tmp/file.XXXXXX", sizeof(buf)); #endif #ifndef HAVE_MKSTEMP { char *ptr = mktemp(buf); tfd = open(ptr, O_RDWR|O_TRUNC|O_EXCL|O_CREAT, 0600); r = errno; (void)unlink(ptr); errno = r; } #else { int te; mode_t ou = umask(0); tfd = mkstemp(buf); (void)umask(ou); te = errno; (void)unlink(buf); errno = te; } #endif if (tfd == -1) { file_error(ms, errno, "cannot create temporary file for pipe copy"); return -1; } if (swrite(tfd, startbuf, nbytes) != CAST(ssize_t, nbytes)) r = 1; else { while ((r = sread(fd, buf, sizeof(buf), 1)) > 0) if (swrite(tfd, buf, CAST(size_t, r)) != r) break; } switch (r) { case -1: file_error(ms, errno, "error copying from pipe to temp file"); return -1; case 0: break; default: file_error(ms, errno, "error while writing to temp file"); return -1; } /* * We duplicate the file descriptor, because fclose on a * tmpfile will delete the file, but any open descriptors * can still access the phantom inode. */ if ((fd = dup2(tfd, fd)) == -1) { file_error(ms, errno, "could not dup descriptor for temp file"); return -1; } (void)close(tfd); if (lseek(fd, CAST(off_t, 0), SEEK_SET) == CAST(off_t, -1)) { file_badseek(ms); return -1; } return fd; } #if HAVE_FORK #ifdef BUILTIN_DECOMPRESS #define FHCRC (1 << 1) #define FEXTRA (1 << 2) #define FNAME (1 << 3) #define FCOMMENT (1 << 4) file_private int uncompressgzipped(const unsigned char *old, unsigned char **newch, size_t bytes_max, size_t *n, int extra __attribute__((__unused__))) { unsigned char flg; size_t data_start = 10; if (*n < 4) { goto err; } flg = old[3]; if (flg & FEXTRA) { if (data_start + 1 >= *n) goto err; data_start += 2 + old[data_start] + old[data_start + 1] * 256; } if (flg & FNAME) { while(data_start < *n && old[data_start]) data_start++; data_start++; } if (flg & FCOMMENT) { while(data_start < *n && old[data_start]) data_start++; data_start++; } if (flg & FHCRC) data_start += 2; if (data_start >= *n) goto err; *n -= data_start; old += data_start; return uncompresszlib(old, newch, bytes_max, n, 0); err: return makeerror(newch, n, "File too short"); } file_private int uncompresszlib(const unsigned char *old, unsigned char **newch, size_t bytes_max, size_t *n, int zlib) { int rc; z_stream z; DPRINTF("builtin zlib decompression\n"); z.next_in = CCAST(Bytef *, old); z.avail_in = CAST(uint32_t, *n); z.next_out = *newch; z.avail_out = CAST(unsigned int, bytes_max); z.zalloc = Z_NULL; z.zfree = Z_NULL; z.opaque = Z_NULL; /* LINTED bug in header macro */ rc = zlib ? inflateInit(&z) : inflateInit2(&z, -15); if (rc != Z_OK) goto err; rc = inflate(&z, Z_SYNC_FLUSH); if (rc != Z_OK && rc != Z_STREAM_END) { inflateEnd(&z); goto err; } *n = CAST(size_t, z.total_out); rc = inflateEnd(&z); if (rc != Z_OK) goto err; /* let's keep the nul-terminate tradition */ (*newch)[*n] = '\0'; return OKDATA; err: return makeerror(newch, n, "%s", z.msg ? z.msg : zError(rc)); } #endif #ifdef BUILTIN_BZLIB file_private int uncompressbzlib(const unsigned char *old, unsigned char **newch, size_t bytes_max, size_t *n, int extra __attribute__((__unused__))) { int rc; bz_stream bz; DPRINTF("builtin bzlib decompression\n"); memset(&bz, 0, sizeof(bz)); rc = BZ2_bzDecompressInit(&bz, 0, 0); if (rc != BZ_OK) goto err; bz.next_in = CCAST(char *, RCAST(const char *, old)); bz.avail_in = CAST(uint32_t, *n); bz.next_out = RCAST(char *, *newch); bz.avail_out = CAST(unsigned int, bytes_max); rc = BZ2_bzDecompress(&bz); if (rc != BZ_OK && rc != BZ_STREAM_END) { BZ2_bzDecompressEnd(&bz); goto err; } /* Assume byte_max is within 32bit */ /* assert(bz.total_out_hi32 == 0); */ *n = CAST(size_t, bz.total_out_lo32); rc = BZ2_bzDecompressEnd(&bz); if (rc != BZ_OK) goto err; /* let's keep the nul-terminate tradition */ (*newch)[*n] = '\0'; return OKDATA; err: return makeerror(newch, n, "bunzip error %d", rc); } #endif #ifdef BUILTIN_XZLIB file_private int uncompressxzlib(const unsigned char *old, unsigned char **newch, size_t bytes_max, size_t *n, int extra __attribute__((__unused__))) { int rc; lzma_stream xz; DPRINTF("builtin xzlib decompression\n"); memset(&xz, 0, sizeof(xz)); rc = lzma_auto_decoder(&xz, UINT64_MAX, 0); if (rc != LZMA_OK) goto err; xz.next_in = CCAST(const uint8_t *, old); xz.avail_in = CAST(uint32_t, *n); xz.next_out = RCAST(uint8_t *, *newch); xz.avail_out = CAST(unsigned int, bytes_max); rc = lzma_code(&xz, LZMA_RUN); if (rc != LZMA_OK && rc != LZMA_STREAM_END) { lzma_end(&xz); goto err; } *n = CAST(size_t, xz.total_out); lzma_end(&xz); /* let's keep the nul-terminate tradition */ (*newch)[*n] = '\0'; return OKDATA; err: return makeerror(newch, n, "unxz error %d", rc); } #endif #ifdef BUILTIN_ZSTDLIB file_private int uncompresszstd(const unsigned char *old, unsigned char **newch, size_t bytes_max, size_t *n, int extra __attribute__((__unused__))) { size_t rc; ZSTD_DStream *zstd; ZSTD_inBuffer in; ZSTD_outBuffer out; DPRINTF("builtin zstd decompression\n"); if ((zstd = ZSTD_createDStream()) == NULL) { return makeerror(newch, n, "No ZSTD decompression stream, %s", strerror(errno)); } rc = ZSTD_DCtx_reset(zstd, ZSTD_reset_session_only); if (ZSTD_isError(rc)) goto err; in.src = CCAST(const void *, old); in.size = *n; in.pos = 0; out.dst = RCAST(void *, *newch); out.size = bytes_max; out.pos = 0; rc = ZSTD_decompressStream(zstd, &out, &in); if (ZSTD_isError(rc)) goto err; *n = out.pos; ZSTD_freeDStream(zstd); /* let's keep the nul-terminate tradition */ (*newch)[*n] = '\0'; return OKDATA; err: ZSTD_freeDStream(zstd); return makeerror(newch, n, "zstd error %d", ZSTD_getErrorCode(rc)); } #endif #ifdef BUILTIN_LZLIB file_private int uncompresslzlib(const unsigned char *old, unsigned char **newch, size_t bytes_max, size_t *n, int extra __attribute__((__unused__))) { enum LZ_Errno err; size_t old_remaining = *n; size_t new_remaining = bytes_max; size_t total_read = 0; unsigned char *bufp; struct LZ_Decoder *dec; bufp = *newch; DPRINTF("builtin lzlib decompression\n"); dec = LZ_decompress_open(); if (!dec) { return makeerror(newch, n, "unable to allocate LZ_Decoder"); } if (LZ_decompress_errno(dec) != LZ_ok) goto err; for (;;) { // LZ_decompress_read() stops at member boundaries, so we may // have more than one successful read after writing all data // we have. if (old_remaining > 0) { int wr = LZ_decompress_write(dec, old, old_remaining); if (wr < 0) goto err; old_remaining -= wr; old += wr; } int rd = LZ_decompress_read(dec, bufp, new_remaining); if (rd > 0) { new_remaining -= rd; bufp += rd; total_read += rd; } if (rd < 0 || LZ_decompress_errno(dec) != LZ_ok) goto err; if (new_remaining == 0) break; if (old_remaining == 0 && rd == 0) break; } LZ_decompress_close(dec); *n = total_read; /* let's keep the nul-terminate tradition */ *bufp = '\0'; return OKDATA; err: err = LZ_decompress_errno(dec); LZ_decompress_close(dec); return makeerror(newch, n, "lzlib error: %s", LZ_strerror(err)); } #endif #ifdef BUILTIN_LRZIP file_private int uncompresslrzip(const unsigned char *old, unsigned char **newch, size_t bytes_max, size_t *n, int extra __attribute__((__unused__))) { Lrzip *lr; FILE *in, *out; int res = OKDATA; DPRINTF("builtin rlzip decompression\n"); lr = lrzip_new(LRZIP_MODE_DECOMPRESS); if (lr == NULL) { res = makeerror(newch, n, "unable to create an lrzip decoder"); goto out0; } lrzip_config_env(lr); in = fmemopen(RCAST(void *, old), bytes_max, "r"); if (in == NULL) { res = makeerror(newch, n, "unable to construct input file"); goto out1; } if (!lrzip_file_add(lr, in)) { res = makeerror(newch, n, "unable to add input file"); goto out2; } *newch = calloc(*n = 2 * bytes_max, 1); if (*newch == NULL) { res = makeerror(newch, n, "unable to allocate output buffer"); goto out2; } out = fmemopen(*newch, *n, "w"); if (out == NULL) { free(*newch); res = makeerror(newch, n, "unable to allocate output file"); goto out2; } lrzip_outfile_set(lr, out); if (lrzip_run(lr)) { free(*newch); res = makeerror(newch, n, "unable to decompress file"); goto out3; } *n = (size_t)ftell(out); out3: fclose(out); out2: fclose(in); out1: lrzip_free(lr); out0: return res; } #endif static int makeerror(unsigned char **buf, size_t *len, const char *fmt, ...) { char *msg; va_list ap; int rv; DPRINTF("Makeerror %s\n", fmt); free(*buf); va_start(ap, fmt); rv = vasprintf(&msg, fmt, ap); va_end(ap); if (rv < 0) { DPRINTF("Makeerror failed"); *buf = NULL; *len = 0; return NODATA; } *buf = RCAST(unsigned char *, msg); *len = strlen(msg); return ERRDATA; } static void closefd(int *fd, size_t i) { if (fd[i] == -1) return; (void) close(fd[i]); fd[i] = -1; } static void closep(int *fd) { size_t i; for (i = 0; i < 2; i++) closefd(fd, i); } static void movedesc(void *v, int i, int fd) { if (fd == i) return; /* "no dup was necessary" */ #ifdef HAVE_POSIX_SPAWNP posix_spawn_file_actions_t *fa = RCAST(posix_spawn_file_actions_t *, v); posix_spawn_file_actions_adddup2(fa, fd, i); posix_spawn_file_actions_addclose(fa, fd); #else if (dup2(fd, i) == -1) { DPRINTF("dup(%d, %d) failed (%s)\n", fd, i, strerror(errno)); exit(EXIT_FAILURE); } close(v ? fd : fd); #endif } static void closedesc(void *v, int fd) { #ifdef HAVE_POSIX_SPAWNP posix_spawn_file_actions_t *fa = RCAST(posix_spawn_file_actions_t *, v); posix_spawn_file_actions_addclose(fa, fd); #else close(v ? fd : fd); #endif } static void handledesc(void *v, int fd, int fdp[3][2]) { if (fd != -1) { (void) lseek(fd, CAST(off_t, 0), SEEK_SET); movedesc(v, STDIN_FILENO, fd); } else { movedesc(v, STDIN_FILENO, fdp[STDIN_FILENO][0]); if (fdp[STDIN_FILENO][1] > 2) closedesc(v, fdp[STDIN_FILENO][1]); } file_clear_closexec(STDIN_FILENO); ///FIXME: if one of the fdp[i][j] is 0 or 1, this can bomb spectacularly movedesc(v, STDOUT_FILENO, fdp[STDOUT_FILENO][1]); if (fdp[STDOUT_FILENO][0] > 2) closedesc(v, fdp[STDOUT_FILENO][0]); file_clear_closexec(STDOUT_FILENO); movedesc(v, STDERR_FILENO, fdp[STDERR_FILENO][1]); if (fdp[STDERR_FILENO][0] > 2) closedesc(v, fdp[STDERR_FILENO][0]); file_clear_closexec(STDERR_FILENO); } static pid_t writechild(int fd, const void *old, size_t n) { pid_t pid; /* * fork again, to avoid blocking because both * pipes filled */ pid = fork(); if (pid == -1) { DPRINTF("Fork failed (%s)\n", strerror(errno)); return -1; } if (pid == 0) { /* child */ if (swrite(fd, old, n) != CAST(ssize_t, n)) { DPRINTF("Write failed (%s)\n", strerror(errno)); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); } /* parent */ return pid; } static ssize_t filter_error(unsigned char *ubuf, ssize_t n) { char *p; char *buf; ubuf[n] = '\0'; buf = RCAST(char *, ubuf); while (isspace(CAST(unsigned char, *buf))) buf++; DPRINTF("Filter error[[[%s]]]\n", buf); if ((p = strchr(CAST(char *, buf), '\n')) != NULL) *p = '\0'; if ((p = strchr(CAST(char *, buf), ';')) != NULL) *p = '\0'; if ((p = strrchr(CAST(char *, buf), ':')) != NULL) { ++p; while (isspace(CAST(unsigned char, *p))) p++; n = strlen(p); memmove(ubuf, p, CAST(size_t, n + 1)); } DPRINTF("Filter error after[[[%s]]]\n", (char *)ubuf); if (islower(*ubuf)) *ubuf = toupper(*ubuf); return n; } file_private const char * methodname(size_t method) { switch (method) { #ifdef BUILTIN_DECOMPRESS case METH_FROZEN: case METH_ZLIB: return "zlib"; #endif #ifdef BUILTIN_BZLIB case METH_BZIP: return "bzlib"; #endif #ifdef BUILTIN_XZLIB case METH_XZ: case METH_LZMA: return "xzlib"; #endif #ifdef BUILTIN_ZSTDLIB case METH_ZSTD: return "zstd"; #endif #ifdef BUILTIN_LZLIB case METH_LZIP: return "lzlib"; #endif #ifdef BUILTIN_LRZIP case METH_LRZIP: return "lrzip"; #endif default: return compr[method].argv[0]; } } file_private int (* getdecompressor(size_t method))(const unsigned char *, unsigned char **, size_t, size_t *, int) { switch (method) { #ifdef BUILTIN_DECOMPRESS case METH_FROZEN: return uncompressgzipped; case METH_ZLIB: return uncompresszlib; #endif #ifdef BUILTIN_BZLIB case METH_BZIP: return uncompressbzlib; #endif #ifdef BUILTIN_XZLIB case METH_XZ: case METH_LZMA: return uncompressxzlib; #endif #ifdef BUILTIN_ZSTDLIB case METH_ZSTD: return uncompresszstd; #endif #ifdef BUILTIN_LZLIB case METH_LZIP: return uncompresslzlib; #endif #ifdef BUILTIN_LRZIP case METH_LRZIP: return uncompresslrzip; #endif default: return NULL; } } file_private int uncompressbuf(int fd, size_t bytes_max, size_t method, int nofork, const unsigned char *old, unsigned char **newch, size_t* n) { int fdp[3][2]; int status, rv, w; pid_t pid; pid_t writepid = -1; size_t i; ssize_t r, re; char *const *args; #ifdef HAVE_POSIX_SPAWNP posix_spawn_file_actions_t fa; #endif int (*decompress)(const unsigned char *, unsigned char **, size_t, size_t *, int) = getdecompressor(method); *newch = CAST(unsigned char *, malloc(bytes_max + 1)); if (*newch == NULL) return makeerror(newch, n, "No buffer, %s", strerror(errno)); if (decompress) { if (nofork) { return makeerror(newch, n, "Fork is required to uncompress, but disabled"); } return (*decompress)(old, newch, bytes_max, n, 1); } (void)fflush(stdout); (void)fflush(stderr); for (i = 0; i < __arraycount(fdp); i++) fdp[i][0] = fdp[i][1] = -1; /* * There are multithreaded users who run magic_file() * from dozens of threads. If two parallel magic_file() calls * analyze two large compressed files, both will spawn * an uncompressing child here, which writes out uncompressed data. * We read some portion, then close the pipe, then waitpid() the child. * If uncompressed data is larger, child should get EPIPE and exit. * However, with *parallel* calls OTHER child may unintentionally * inherit pipe fds, thus keeping pipe open and making writes in * our child block instead of failing with EPIPE! * (For the bug to occur, two threads must mutually inherit their pipes, * and both must have large outputs. Thus it happens not that often). * To avoid this, be sure to create pipes with O_CLOEXEC. */ if ((fd == -1 && file_pipe_closexec(fdp[STDIN_FILENO]) == -1) || file_pipe_closexec(fdp[STDOUT_FILENO]) == -1 || file_pipe_closexec(fdp[STDERR_FILENO]) == -1) { closep(fdp[STDIN_FILENO]); closep(fdp[STDOUT_FILENO]); return makeerror(newch, n, "Cannot create pipe, %s", strerror(errno)); } args = RCAST(char *const *, RCAST(intptr_t, compr[method].argv)); #ifdef HAVE_POSIX_SPAWNP posix_spawn_file_actions_init(&fa); handledesc(&fa, fd, fdp); DPRINTF("Executing %s\n", compr[method].argv[0]); status = posix_spawnp(&pid, compr[method].argv[0], &fa, NULL, args, NULL); posix_spawn_file_actions_destroy(&fa); if (status == -1) { return makeerror(newch, n, "Cannot posix_spawn `%s', %s", compr[method].argv[0], strerror(errno)); } #else /* For processes with large mapped virtual sizes, vfork * may be _much_ faster (10-100 times) than fork. */ pid = vfork(); if (pid == -1) { return makeerror(newch, n, "Cannot vfork, %s", strerror(errno)); } if (pid == 0) { /* child */ /* Note: we are after vfork, do not modify memory * in a way which confuses parent. In particular, * do not modify fdp[i][j]. */ handledesc(NULL, fd, fdp); DPRINTF("Executing %s\n", compr[method].argv[0]); (void)execvp(compr[method].argv[0], args); dprintf(STDERR_FILENO, "exec `%s' failed, %s", compr[method].argv[0], strerror(errno)); _exit(EXIT_FAILURE); /* _exit(), not exit(), because of vfork */ } #endif /* parent */ /* Close write sides of child stdout/err pipes */ for (i = 1; i < __arraycount(fdp); i++) closefd(fdp[i], 1); /* Write the buffer data to child stdin, if we don't have fd */ if (fd == -1) { closefd(fdp[STDIN_FILENO], 0); writepid = writechild(fdp[STDIN_FILENO][1], old, *n); if (writepid == (pid_t)-1) { rv = makeerror(newch, n, "Write to child failed, %s", strerror(errno)); DPRINTF("Write to child failed\n"); goto err; } closefd(fdp[STDIN_FILENO], 1); } rv = OKDATA; r = sread(fdp[STDOUT_FILENO][0], *newch, bytes_max, 0); DPRINTF("read got %zd\n", r); if (r < 0) { rv = ERRDATA; DPRINTF("Read stdout failed %d (%s)\n", fdp[STDOUT_FILENO][0], strerror(errno)); goto err; } if (CAST(size_t, r) == bytes_max) { /* * close fd so that the child exits with sigpipe and ignore * errors, otherwise we risk the child blocking and never * exiting. */ DPRINTF("Closing stdout for bytes_max\n"); closefd(fdp[STDOUT_FILENO], 0); goto ok; } if ((re = sread(fdp[STDERR_FILENO][0], *newch, bytes_max, 0)) > 0) { DPRINTF("Got stuff from stderr %s\n", *newch); rv = ERRDATA; r = filter_error(*newch, r); goto ok; } if (re == 0) goto ok; rv = makeerror(newch, n, "Read stderr failed, %s", strerror(errno)); goto err; ok: *n = r; /* NUL terminate, as every buffer is handled here. */ (*newch)[*n] = '\0'; err: closefd(fdp[STDIN_FILENO], 1); closefd(fdp[STDOUT_FILENO], 0); closefd(fdp[STDERR_FILENO], 0); w = waitpid(pid, &status, 0); wait_err: if (w == -1) { rv = makeerror(newch, n, "Wait failed, %s", strerror(errno)); DPRINTF("Child wait return %#x\n", status); } else if (!WIFEXITED(status)) { DPRINTF("Child not exited (%#x)\n", status); } else if (WEXITSTATUS(status) != 0) { DPRINTF("Child exited (%#x)\n", WEXITSTATUS(status)); } if (writepid > 0) { /* _After_ we know decompressor has exited, our input writer * definitely will exit now (at worst, writing fails in it, * since output fd is closed now on the reading size). */ w = waitpid(writepid, &status, 0); writepid = -1; goto wait_err; } closefd(fdp[STDIN_FILENO], 0); //why? it is already closed here! DPRINTF("Returning %p n=%" SIZE_T_FORMAT "u rv=%d\n", *newch, *n, rv); return rv; } #endif file-5.46/src/is_csv.c000664 023540 023540 00000010771 14634602355 016370 0ustar00christoschristos000000 000000 /*- * Copyright (c) 2019 Christos Zoulas * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Parse CSV object serialization format (RFC-4180, RFC-7111) */ #ifndef TEST #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: is_csv.c,v 1.15 2024/05/18 15:16:13 christos Exp $") #endif #include #include "magic.h" #else #define CAST(a, b) ((a)(b)) #include #endif #ifdef DEBUG #include #define DPRINTF(fmt, ...) printf(fmt, __VA_ARGS__) #else #define DPRINTF(fmt, ...) #endif /* * if CSV_LINES == 0: * check all the lines in the buffer * otherwise: * check only up-to the number of lines specified * * the last line count is always ignored if it does not end in CRLF */ #ifndef CSV_LINES #define CSV_LINES 10 #endif static int csv_parse(const unsigned char *, const unsigned char *); static const unsigned char * eatquote(const unsigned char *uc, const unsigned char *ue) { int quote = 0; while (uc < ue) { unsigned char c = *uc++; if (c != '"') { // We already got one, done. if (quote) { return --uc; } continue; } if (quote) { // quote-quote escapes quote = 0; continue; } // first quote quote = 1; } return ue; } static int csv_parse(const unsigned char *uc, const unsigned char *ue) { size_t nf = 0, tf = 0, nl = 0; while (uc < ue) { switch (*uc++) { case '"': // Eat until the matching quote uc = eatquote(uc, ue); break; case ',': nf++; break; case '\n': DPRINTF("%zu %zu %zu\n", nl, nf, tf); nl++; #if CSV_LINES if (nl == CSV_LINES) return tf > 1 && tf == nf; #endif if (tf == 0) { // First time and no fields, give up if (nf == 0) return 0; // First time, set the number of fields tf = nf; } else if (tf != nf) { // Field number mismatch, we are done. return 0; } nf = 0; break; default: break; } } return tf > 1 && nl >= 2; } #ifndef TEST int file_is_csv(struct magic_set *ms, const struct buffer *b, int looks_text, const char *code) { const unsigned char *uc = CAST(const unsigned char *, b->fbuf); const unsigned char *ue = uc + b->flen; int mime = ms->flags & MAGIC_MIME; if (!looks_text) return 0; if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)) != 0) return 0; if (!csv_parse(uc, ue)) return 0; if (mime == MAGIC_MIME_ENCODING) return 1; if (mime) { if (file_printf(ms, "text/csv") == -1) return -1; return 1; } if (file_printf(ms, "CSV %s%stext", code ? code : "", code ? " " : "") == -1) return -1; return 1; } #else #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd; struct stat st; unsigned char *p; if ((fd = open(argv[1], O_RDONLY)) == -1) err(EXIT_FAILURE, "Can't open `%s'", argv[1]); if (fstat(fd, &st) == -1) err(EXIT_FAILURE, "Can't stat `%s'", argv[1]); if ((p = CAST(unsigned char *, malloc(st.st_size))) == NULL) err(EXIT_FAILURE, "Can't allocate %jd bytes", (intmax_t)st.st_size); if (read(fd, p, st.st_size) != st.st_size) err(EXIT_FAILURE, "Can't read %jd bytes", (intmax_t)st.st_size); printf("is csv %d\n", csv_parse(p, p + st.st_size)); return 0; } #endif file-5.46/src/is_json.c000664 023540 023540 00000024417 14634602355 016550 0ustar00christoschristos000000 000000 /*- * Copyright (c) 2018 Christos Zoulas * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Parse JSON object serialization format (RFC-7159) */ #ifndef TEST #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: is_json.c,v 1.30 2022/09/27 19:12:40 christos Exp $") #endif #include "magic.h" #else #include #include #endif #include #ifdef DEBUG #include #define DPRINTF(a, b, c) \ printf("%*s%s [%.2x/%c] %.*s\n", (int)lvl, "", (a), *(b), *(b), \ (int)(b - c), (const char *)(c)) #define __file_debugused #else #define DPRINTF(a, b, c) do { } while (/*CONSTCOND*/0) #define __file_debugused __attribute__((__unused__)) #endif #define JSON_ARRAY 0 #define JSON_CONSTANT 1 #define JSON_NUMBER 2 #define JSON_OBJECT 3 #define JSON_STRING 4 #define JSON_ARRAYN 5 #define JSON_MAX 6 /* * if JSON_COUNT != 0: * count all the objects, require that we have the whole data file * otherwise: * stop if we find an object or an array */ #ifndef JSON_COUNT #define JSON_COUNT 0 #endif static int json_parse(const unsigned char **, const unsigned char *, size_t *, size_t); static int json_isspace(const unsigned char uc) { switch (uc) { case ' ': case '\n': case '\r': case '\t': return 1; default: return 0; } } static int json_isdigit(unsigned char uc) { switch (uc) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': return 1; default: return 0; } } static int json_isxdigit(unsigned char uc) { if (json_isdigit(uc)) return 1; switch (uc) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': return 1; default: return 0; } } static const unsigned char * json_skip_space(const unsigned char *uc, const unsigned char *ue) { while (uc < ue && json_isspace(*uc)) uc++; return uc; } /*ARGSUSED*/ static int json_parse_string(const unsigned char **ucp, const unsigned char *ue, size_t lvl __file_debugused) { const unsigned char *uc = *ucp; size_t i; DPRINTF("Parse string: ", uc, *ucp); while (uc < ue) { switch (*uc++) { case '\0': goto out; case '\\': if (uc == ue) goto out; switch (*uc++) { case '\0': goto out; case '"': case '\\': case '/': case 'b': case 'f': case 'n': case 'r': case 't': continue; case 'u': if (ue - uc < 4) { uc = ue; goto out; } for (i = 0; i < 4; i++) if (!json_isxdigit(*uc++)) goto out; continue; default: goto out; } case '"': DPRINTF("Good string: ", uc, *ucp); *ucp = uc; return 1; default: continue; } } out: DPRINTF("Bad string: ", uc, *ucp); *ucp = uc; return 0; } static int json_parse_array(const unsigned char **ucp, const unsigned char *ue, size_t *st, size_t lvl) { const unsigned char *uc = *ucp; DPRINTF("Parse array: ", uc, *ucp); while (uc < ue) { uc = json_skip_space(uc, ue); if (uc == ue) goto out; if (*uc == ']') goto done; if (!json_parse(&uc, ue, st, lvl + 1)) goto out; if (uc == ue) goto out; switch (*uc) { case ',': uc++; continue; case ']': done: st[JSON_ARRAYN]++; DPRINTF("Good array: ", uc, *ucp); *ucp = uc + 1; return 1; default: goto out; } } out: DPRINTF("Bad array: ", uc, *ucp); *ucp = uc; return 0; } static int json_parse_object(const unsigned char **ucp, const unsigned char *ue, size_t *st, size_t lvl) { const unsigned char *uc = *ucp; DPRINTF("Parse object: ", uc, *ucp); while (uc < ue) { uc = json_skip_space(uc, ue); if (uc == ue) goto out; if (*uc == '}') { uc++; goto done; } if (*uc++ != '"') { DPRINTF("not string", uc, *ucp); goto out; } DPRINTF("next field", uc, *ucp); if (!json_parse_string(&uc, ue, lvl)) { DPRINTF("not string", uc, *ucp); goto out; } uc = json_skip_space(uc, ue); if (uc == ue) goto out; if (*uc++ != ':') { DPRINTF("not colon", uc, *ucp); goto out; } if (!json_parse(&uc, ue, st, lvl + 1)) { DPRINTF("not json", uc, *ucp); goto out; } if (uc == ue) goto out; switch (*uc++) { case ',': continue; case '}': /* { */ done: DPRINTF("Good object: ", uc, *ucp); *ucp = uc; return 1; default: DPRINTF("not more", uc, *ucp); *ucp = uc - 1; goto out; } } out: DPRINTF("Bad object: ", uc, *ucp); *ucp = uc; return 0; } /*ARGSUSED*/ static int json_parse_number(const unsigned char **ucp, const unsigned char *ue, size_t lvl __file_debugused) { const unsigned char *uc = *ucp; int got = 0; DPRINTF("Parse number: ", uc, *ucp); if (uc == ue) return 0; if (*uc == '-') uc++; for (; uc < ue; uc++) { if (!json_isdigit(*uc)) break; got = 1; } if (uc == ue) goto out; if (*uc == '.') uc++; for (; uc < ue; uc++) { if (!json_isdigit(*uc)) break; got = 1; } if (uc == ue) goto out; if (got && (*uc == 'e' || *uc == 'E')) { uc++; got = 0; if (uc == ue) goto out; if (*uc == '+' || *uc == '-') uc++; for (; uc < ue; uc++) { if (!json_isdigit(*uc)) break; got = 1; } } out: if (!got) DPRINTF("Bad number: ", uc, *ucp); else DPRINTF("Good number: ", uc, *ucp); *ucp = uc; return got; } /*ARGSUSED*/ static int json_parse_const(const unsigned char **ucp, const unsigned char *ue, const char *str, size_t len, size_t lvl __file_debugused) { const unsigned char *uc = *ucp; DPRINTF("Parse const: ", uc, *ucp); *ucp += --len - 1; if (*ucp > ue) *ucp = ue; for (; uc < ue && --len;) { if (*uc++ != *++str) { DPRINTF("Bad const: ", uc, *ucp); return 0; } } DPRINTF("Good const: ", uc, *ucp); return 1; } static int json_parse(const unsigned char **ucp, const unsigned char *ue, size_t *st, size_t lvl) { const unsigned char *uc, *ouc; int rv = 0; int t; ouc = uc = json_skip_space(*ucp, ue); if (uc == ue) goto out; // Avoid recursion if (lvl > 500) { DPRINTF("Too many levels", uc, *ucp); return 0; } #if JSON_COUNT /* bail quickly if not counting */ if (lvl > 1 && (st[JSON_OBJECT] || st[JSON_ARRAYN])) return 1; #endif DPRINTF("Parse general: ", uc, *ucp); switch (*uc++) { case '"': rv = json_parse_string(&uc, ue, lvl + 1); t = JSON_STRING; break; case '[': rv = json_parse_array(&uc, ue, st, lvl + 1); t = JSON_ARRAY; break; case '{': /* '}' */ rv = json_parse_object(&uc, ue, st, lvl + 1); t = JSON_OBJECT; break; case 't': rv = json_parse_const(&uc, ue, "true", sizeof("true"), lvl + 1); t = JSON_CONSTANT; break; case 'f': rv = json_parse_const(&uc, ue, "false", sizeof("false"), lvl + 1); t = JSON_CONSTANT; break; case 'n': rv = json_parse_const(&uc, ue, "null", sizeof("null"), lvl + 1); t = JSON_CONSTANT; break; default: --uc; rv = json_parse_number(&uc, ue, lvl + 1); t = JSON_NUMBER; break; } if (rv) st[t]++; uc = json_skip_space(uc, ue); out: DPRINTF("End general: ", uc, *ucp); *ucp = uc; if (lvl == 0) { if (!rv) return 0; if (uc == ue) return (st[JSON_ARRAYN] || st[JSON_OBJECT]) ? 1 : 0; if (*ouc == *uc && json_parse(&uc, ue, st, 1)) return (st[JSON_ARRAYN] || st[JSON_OBJECT]) ? 2 : 0; else return 0; } return rv; } #ifndef TEST int file_is_json(struct magic_set *ms, const struct buffer *b) { const unsigned char *uc = CAST(const unsigned char *, b->fbuf); const unsigned char *ue = uc + b->flen; size_t st[JSON_MAX]; int mime = ms->flags & MAGIC_MIME; int jt; if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)) != 0) return 0; memset(st, 0, sizeof(st)); if ((jt = json_parse(&uc, ue, st, 0)) == 0) return 0; if (mime == MAGIC_MIME_ENCODING) return 1; if (mime) { if (file_printf(ms, "application/%s", jt == 1 ? "json" : "x-ndjson") == -1) return -1; return 1; } if (file_printf(ms, "%sJSON text data", jt == 1 ? "" : "New Line Delimited ") == -1) return -1; #if JSON_COUNT #define P(n) st[n], st[n] > 1 ? "s" : "" if (file_printf(ms, " (%" SIZE_T_FORMAT "u object%s, %" SIZE_T_FORMAT "u array%s, %" SIZE_T_FORMAT "u string%s, %" SIZE_T_FORMAT "u constant%s, %" SIZE_T_FORMAT "u number%s, %" SIZE_T_FORMAT "u >1array%s)", P(JSON_OBJECT), P(JSON_ARRAY), P(JSON_STRING), P(JSON_CONSTANT), P(JSON_NUMBER), P(JSON_ARRAYN)) == -1) return -1; #endif return 1; } #else #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd; struct stat st; unsigned char *p; size_t stats[JSON_MAX]; if ((fd = open(argv[1], O_RDONLY)) == -1) err(EXIT_FAILURE, "Can't open `%s'", argv[1]); if (fstat(fd, &st) == -1) err(EXIT_FAILURE, "Can't stat `%s'", argv[1]); if ((p = CAST(char *, malloc(st.st_size))) == NULL) err(EXIT_FAILURE, "Can't allocate %jd bytes", (intmax_t)st.st_size); if (read(fd, p, st.st_size) != st.st_size) err(EXIT_FAILURE, "Can't read %jd bytes", (intmax_t)st.st_size); memset(stats, 0, sizeof(stats)); printf("is json %d\n", json_parse((const unsigned char **)&p, p + st.st_size, stats, 0)); return 0; } #endif file-5.46/src/is_simh.c000664 023540 023540 00000011411 14634602355 016525 0ustar00christoschristos000000 000000 /*- * Copyright (c) 2023 Christos Zoulas * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Parse SIM-H tape files * http://simh.trailing-edge.com/docs/simh_magtape.pdf */ #ifndef TEST #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: is_simh.c,v 1.10 2023/07/27 19:39:55 christos Exp $") #endif #include #include #include "magic.h" #else #include #include #include #include #define CAST(a, b) (a)(b) #endif #ifdef DEBUG #include #define DPRINTF(fmt, ...) printf(fmt, __VA_ARGS__) #else #define DPRINTF(fmt, ...) #endif /* * if SIMH_TAPEMARKS == 0: * check all the records and tapemarks * otherwise: * check only up-to the number of tapemarks specified */ #ifndef SIMH_TAPEMARKS #define SIMH_TAPEMARKS 10 #endif typedef union { char s[4]; uint32_t u; } myword; static myword simh_bo; #define NEED_SWAP (simh_bo.u == CAST(uint32_t, 0x01020304)) /* * swap an int */ static uint32_t swap4(uint32_t sv) { myword d, s; s.u = sv; d.s[0] = s.s[3]; d.s[1] = s.s[2]; d.s[2] = s.s[1]; d.s[3] = s.s[0]; return d.u; } static uint32_t getlen(const unsigned char **uc) { uint32_t n; memcpy(&n, *uc, sizeof(n)); *uc += sizeof(n); if (NEED_SWAP) n = swap4(n); if (n == 0xffffffff) /* check for End of Medium */ return n; n &= 0x00ffffff; /* keep only the record len */ if (n & 1) n++; return n; } static int simh_parse(const unsigned char *uc, const unsigned char *ue) { uint32_t nbytes, cbytes; const unsigned char *orig_uc = uc; size_t nt = 0, nr = 0; (void)memcpy(simh_bo.s, "\01\02\03\04", 4); while (ue - uc >= CAST(ptrdiff_t, sizeof(nbytes))) { nbytes = getlen(&uc); if ((nt > 0 || nr > 0) && nbytes == 0xFFFFFFFF) /* EOM after at least one record or tapemark */ break; if (nbytes == 0) { nt++; /* count tapemarks */ #if SIMH_TAPEMARKS if (nt == SIMH_TAPEMARKS) break; #endif continue; } /* handle a data record */ uc += nbytes; if (ue - uc < CAST(ptrdiff_t, sizeof(nbytes))) break; cbytes = getlen(&uc); if (nbytes != cbytes) return 0; nr++; } if (nt * sizeof(uint32_t) == CAST(size_t, uc - orig_uc)) return 0; /* All examined data was tapemarks (0) */ if (nr == 0) /* No records */ return 0; return 1; } #ifndef TEST int file_is_simh(struct magic_set *ms, const struct buffer *b) { const unsigned char *uc = CAST(const unsigned char *, b->fbuf); const unsigned char *ue = uc + b->flen; int mime = ms->flags & MAGIC_MIME; if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)) != 0) return 0; if (!simh_parse(uc, ue)) return 0; if (mime == MAGIC_MIME_ENCODING) return 1; if (mime) { if (file_printf(ms, "application/SIMH-tape-data") == -1) return -1; return 1; } if (file_printf(ms, "SIMH tape data") == -1) return -1; return 1; } #else #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd; struct stat st; unsigned char *p; if ((fd = open(argv[1], O_RDONLY)) == -1) err(EXIT_FAILURE, "Can't open `%s'", argv[1]); if (fstat(fd, &st) == -1) err(EXIT_FAILURE, "Can't stat `%s'", argv[1]); if ((p = CAST(char *, malloc(st.st_size))) == NULL) err(EXIT_FAILURE, "Can't allocate %jd bytes", (intmax_t)st.st_size); if (read(fd, p, st.st_size) != st.st_size) err(EXIT_FAILURE, "Can't read %jd bytes", (intmax_t)st.st_size); printf("is simh %d\n", simh_parse(p, p + st.st_size)); return 0; } #endif file-5.46/src/is_tar.c000664 023540 023540 00000012357 14634602355 016365 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * is_tar() -- figure out whether file is a tar archive. * * Stolen (by the author!) from the file_public domain tar program: * Public Domain version written 26 Aug 1985 John Gilmore (ihnp4!hoptoad!gnu). * * @(#)list.c 1.18 9/23/86 Public Domain - gnu * * Comments changed and some code/comments reformatted * for file command by Ian Darwin. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: is_tar.c,v 1.50 2022/12/26 17:31:14 christos Exp $") #endif #include "magic.h" #include #include #include "tar.h" #define isodigit(c) ( ((c) >= '0') && ((c) <= '7') ) file_private int is_tar(const unsigned char *, size_t); file_private int from_oct(const char *, size_t); /* Decode octal number */ static const char tartype[][32] = { /* should be equal to messages */ "tar archive", /* found in ../magic/Magdir/archive */ "POSIX tar archive", "POSIX tar archive (GNU)", /* */ }; file_protected int file_is_tar(struct magic_set *ms, const struct buffer *b) { const unsigned char *buf = CAST(const unsigned char *, b->fbuf); size_t nbytes = b->flen; /* * Do the tar test first, because if the first file in the tar * archive starts with a dot, we can confuse it with an nroff file. */ int tar; int mime = ms->flags & MAGIC_MIME; if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)) != 0) return 0; tar = is_tar(buf, nbytes); if (tar < 1 || tar > 3) return 0; if (mime == MAGIC_MIME_ENCODING) return 1; if (file_printf(ms, "%s", mime ? "application/x-tar" : tartype[tar - 1]) == -1) return -1; return 1; } /* * Return * 0 if the checksum is bad (i.e., probably not a tar archive), * 1 for old UNIX tar file, * 2 for Unix Std (POSIX) tar file, * 3 for GNU tar file. */ file_private int is_tar(const unsigned char *buf, size_t nbytes) { static const char gpkg_match[] = "/gpkg-1"; const union record *header = RCAST(const union record *, RCAST(const void *, buf)); size_t i; int sum, recsum; const unsigned char *p, *ep; const char *nulp; if (nbytes < sizeof(*header)) return 0; /* If the file looks like Gentoo GLEP 78 binary package (GPKG), * don't waste time on further checks and fall back to magic rules. */ nulp = CAST(const char *, memchr(header->header.name, 0, sizeof(header->header.name))); if (nulp != NULL && nulp >= header->header.name + sizeof(gpkg_match) && memcmp(nulp - sizeof(gpkg_match) + 1, gpkg_match, sizeof(gpkg_match)) == 0) return 0; recsum = from_oct(header->header.chksum, sizeof(header->header.chksum)); sum = 0; p = header->charptr; ep = header->charptr + sizeof(*header); while (p < ep) sum += *p++; /* Adjust checksum to count the "chksum" field as blanks. */ for (i = 0; i < sizeof(header->header.chksum); i++) sum -= header->header.chksum[i]; sum += ' ' * sizeof(header->header.chksum); if (sum != recsum) return 0; /* Not a tar archive */ if (strncmp(header->header.magic, GNUTMAGIC, sizeof(header->header.magic)) == 0) return 3; /* GNU Unix Standard tar archive */ if (strncmp(header->header.magic, TMAGIC, sizeof(header->header.magic)) == 0) return 2; /* Unix Standard tar archive */ return 1; /* Old fashioned tar archive */ } /* * Quick and dirty octal conversion. * * Result is -1 if the field is invalid (all blank, or non-octal). */ file_private int from_oct(const char *where, size_t digs) { int value; if (digs == 0) return -1; while (isspace(CAST(unsigned char, *where))) { /* Skip spaces */ where++; if (digs-- == 0) return -1; /* All blank field */ } value = 0; while (digs > 0 && isodigit(*where)) { /* Scan til non-octal */ value = (value << 3) | (*where++ - '0'); digs--; } if (digs > 0 && *where && !isspace(CAST(unsigned char, *where))) return -1; /* Ended on non-(space/NUL) */ return value; } file-5.46/src/readelf.c000664 023540 023540 00000140120 14721164721 016471 0ustar00christoschristos000000 000000 /* * Copyright (c) Christos Zoulas 2003. * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: readelf.c,v 1.196 2024/11/11 15:49:11 christos Exp $") #endif #ifdef BUILTIN_ELF #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include "readelf.h" #include "magic.h" #ifdef ELFCORE file_private int dophn_core(struct magic_set *, int, int, int, off_t, int, size_t, off_t, int *, uint16_t *); #endif file_private int dophn_exec(struct magic_set *, int, int, int, off_t, int, size_t, off_t, int, int *, uint16_t *); file_private int doshn(struct magic_set *, int, int, int, off_t, int, size_t, off_t, int, int, int *, uint16_t *); file_private size_t donote(struct magic_set *, void *, size_t, size_t, int, int, size_t, int *, uint16_t *, int, off_t, int, off_t); #define ELF_ALIGN(a) ((((a) + align - 1) / align) * align) #define isquote(c) (strchr("'\"`", (c)) != NULL) file_private uint16_t getu16(int, uint16_t); file_private uint32_t getu32(int, uint32_t); file_private uint64_t getu64(int, uint64_t); #define NBUFSIZE 2024 #define SIZE_UNKNOWN CAST(off_t, -1) #define NAMEEQUALS(n, v) \ (namesz == sizeof(v) && memcmp(n, v, namesz) == 0) file_private int toomany(struct magic_set *ms, const char *name, uint16_t num) { if (ms->flags & MAGIC_MIME) return 1; if (file_printf(ms, ", too many %s (%u)", name, num) == -1) return -1; return 1; } file_private uint16_t getu16(int swap, uint16_t value) { union { uint16_t ui; char c[2]; } retval, tmpval; if (swap) { tmpval.ui = value; retval.c[0] = tmpval.c[1]; retval.c[1] = tmpval.c[0]; return retval.ui; } else return value; } file_private uint32_t getu32(int swap, uint32_t value) { union { uint32_t ui; char c[4]; } retval, tmpval; if (swap) { tmpval.ui = value; retval.c[0] = tmpval.c[3]; retval.c[1] = tmpval.c[2]; retval.c[2] = tmpval.c[1]; retval.c[3] = tmpval.c[0]; return retval.ui; } else return value; } file_private uint64_t getu64(int swap, uint64_t value) { union { uint64_t ui; char c[8]; } retval, tmpval; if (swap) { tmpval.ui = value; retval.c[0] = tmpval.c[7]; retval.c[1] = tmpval.c[6]; retval.c[2] = tmpval.c[5]; retval.c[3] = tmpval.c[4]; retval.c[4] = tmpval.c[3]; retval.c[5] = tmpval.c[2]; retval.c[6] = tmpval.c[1]; retval.c[7] = tmpval.c[0]; return retval.ui; } else return value; } #define elf_getu16(swap, value) getu16(swap, value) #define elf_getu32(swap, value) getu32(swap, value) #define elf_getu64(swap, value) getu64(swap, value) #define xsh_addr (clazz == ELFCLASS32 \ ? CAST(void *, &sh32) \ : CAST(void *, &sh64)) #define xsh_sizeof (clazz == ELFCLASS32 \ ? sizeof(sh32) \ : sizeof(sh64)) #define xsh_size CAST(size_t, (clazz == ELFCLASS32 \ ? elf_getu32(swap, sh32.sh_size) \ : elf_getu64(swap, sh64.sh_size))) #define xsh_offset CAST(off_t, (clazz == ELFCLASS32 \ ? elf_getu32(swap, sh32.sh_offset) \ : elf_getu64(swap, sh64.sh_offset))) #define xsh_type (clazz == ELFCLASS32 \ ? elf_getu32(swap, sh32.sh_type) \ : elf_getu32(swap, sh64.sh_type)) #define xsh_name (clazz == ELFCLASS32 \ ? elf_getu32(swap, sh32.sh_name) \ : elf_getu32(swap, sh64.sh_name)) #define xph_addr (clazz == ELFCLASS32 \ ? CAST(void *, &ph32) \ : CAST(void *, &ph64)) #define xph_sizeof (clazz == ELFCLASS32 \ ? sizeof(ph32) \ : sizeof(ph64)) #define xph_type (clazz == ELFCLASS32 \ ? elf_getu32(swap, ph32.p_type) \ : elf_getu32(swap, ph64.p_type)) #define xph_offset CAST(off_t, (clazz == ELFCLASS32 \ ? elf_getu32(swap, ph32.p_offset) \ : elf_getu64(swap, ph64.p_offset))) #define xph_align CAST(size_t, (clazz == ELFCLASS32 \ ? CAST(off_t, (ph32.p_align ? \ elf_getu32(swap, ph32.p_align) : 4))\ : CAST(off_t, (ph64.p_align ? \ elf_getu64(swap, ph64.p_align) : 4)))) #define xph_vaddr CAST(size_t, (clazz == ELFCLASS32 \ ? CAST(off_t, (ph32.p_vaddr ? \ elf_getu32(swap, ph32.p_vaddr) : 4))\ : CAST(off_t, (ph64.p_vaddr ? \ elf_getu64(swap, ph64.p_vaddr) : 4)))) #define xph_filesz CAST(size_t, (clazz == ELFCLASS32 \ ? elf_getu32(swap, ph32.p_filesz) \ : elf_getu64(swap, ph64.p_filesz))) #define xph_memsz CAST(size_t, ((clazz == ELFCLASS32 \ ? elf_getu32(swap, ph32.p_memsz) \ : elf_getu64(swap, ph64.p_memsz)))) #define xnh_addr (clazz == ELFCLASS32 \ ? CAST(void *, &nh32) \ : CAST(void *, &nh64)) #define xnh_sizeof (clazz == ELFCLASS32 \ ? sizeof(nh32) \ : sizeof(nh64)) #define xnh_type (clazz == ELFCLASS32 \ ? elf_getu32(swap, nh32.n_type) \ : elf_getu32(swap, nh64.n_type)) #define xnh_namesz (clazz == ELFCLASS32 \ ? elf_getu32(swap, nh32.n_namesz) \ : elf_getu32(swap, nh64.n_namesz)) #define xnh_descsz (clazz == ELFCLASS32 \ ? elf_getu32(swap, nh32.n_descsz) \ : elf_getu32(swap, nh64.n_descsz)) #define xdh_addr (clazz == ELFCLASS32 \ ? CAST(void *, &dh32) \ : CAST(void *, &dh64)) #define xdh_sizeof (clazz == ELFCLASS32 \ ? sizeof(dh32) \ : sizeof(dh64)) #define xdh_tag (clazz == ELFCLASS32 \ ? elf_getu32(swap, dh32.d_tag) \ : elf_getu64(swap, dh64.d_tag)) #define xdh_val (clazz == ELFCLASS32 \ ? elf_getu32(swap, dh32.d_un.d_val) \ : elf_getu64(swap, dh64.d_un.d_val)) #define xcap_addr (clazz == ELFCLASS32 \ ? CAST(void *, &cap32) \ : CAST(void *, &cap64)) #define xcap_sizeof (clazz == ELFCLASS32 \ ? sizeof(cap32) \ : sizeof(cap64)) #define xcap_tag (clazz == ELFCLASS32 \ ? elf_getu32(swap, cap32.c_tag) \ : elf_getu64(swap, cap64.c_tag)) #define xcap_val (clazz == ELFCLASS32 \ ? elf_getu32(swap, cap32.c_un.c_val) \ : elf_getu64(swap, cap64.c_un.c_val)) #define xauxv_addr (clazz == ELFCLASS32 \ ? CAST(void *, &auxv32) \ : CAST(void *, &auxv64)) #define xauxv_sizeof (clazz == ELFCLASS32 \ ? sizeof(auxv32) \ : sizeof(auxv64)) #define xauxv_type (clazz == ELFCLASS32 \ ? elf_getu32(swap, auxv32.a_type) \ : elf_getu64(swap, auxv64.a_type)) #define xauxv_val (clazz == ELFCLASS32 \ ? elf_getu32(swap, auxv32.a_v) \ : elf_getu64(swap, auxv64.a_v)) #define prpsoffsets(i) (clazz == ELFCLASS32 \ ? prpsoffsets32[i] \ : prpsoffsets64[i]) #ifdef ELFCORE /* * Try larger offsets first to avoid false matches * from earlier data that happen to look like strings. */ static const size_t prpsoffsets32[] = { #ifdef USE_NT_PSINFO 104, /* SunOS 5.x (command line) */ 88, /* SunOS 5.x (short name) */ #endif /* USE_NT_PSINFO */ 100, /* SunOS 5.x (command line) */ 84, /* SunOS 5.x (short name) */ 44, /* Linux (command line) */ 28, /* Linux (short name) */ 48, /* Linux PowerPC (command line) */ 32, /* Linux PowerPC (short name) */ 8, /* FreeBSD */ }; static const size_t prpsoffsets64[] = { #ifdef USE_NT_PSINFO 152, /* SunOS 5.x (command line) */ 136, /* SunOS 5.x (short name) */ #endif /* USE_NT_PSINFO */ 136, /* SunOS 5.x, 64-bit (command line) */ 120, /* SunOS 5.x, 64-bit (short name) */ 56, /* Linux (command line) */ 40, /* Linux (tested on core from 2.4.x, short name) */ 16, /* FreeBSD, 64-bit */ }; #define NOFFSETS32 __arraycount(prpsoffsets32) #define NOFFSETS64 __arraycount(prpsoffsets64) #define NOFFSETS (clazz == ELFCLASS32 ? NOFFSETS32 : NOFFSETS64) /* * Look through the program headers of an executable image, searching * for a PT_NOTE section of type NT_PRPSINFO, with a name "CORE" or * "FreeBSD"; if one is found, try looking in various places in its * contents for a 16-character string containing only printable * characters - if found, that string should be the name of the program * that dropped core. Note: right after that 16-character string is, * at least in SunOS 5.x (and possibly other SVR4-flavored systems) and * Linux, a longer string (80 characters, in 5.x, probably other * SVR4-flavored systems, and Linux) containing the start of the * command line for that program. * * SunOS 5.x core files contain two PT_NOTE sections, with the types * NT_PRPSINFO (old) and NT_PSINFO (new). These structs contain the * same info about the command name and command line, so it probably * isn't worthwhile to look for NT_PSINFO, but the offsets are provided * above (see USE_NT_PSINFO), in case we ever decide to do so. The * NT_PRPSINFO and NT_PSINFO sections are always in order and adjacent; * the SunOS 5.x file command relies on this (and prefers the latter). * * The signal number probably appears in a section of type NT_PRSTATUS, * but that's also rather OS-dependent, in ways that are harder to * dissect with heuristics, so I'm not bothering with the signal number. * (I suppose the signal number could be of interest in situations where * you don't have the binary of the program that dropped core; if you * *do* have that binary, the debugger will probably tell you what * signal it was.) */ #define OS_STYLE_SVR4 0 #define OS_STYLE_FREEBSD 1 #define OS_STYLE_NETBSD 2 file_private const char os_style_names[][8] = { "SVR4", "FreeBSD", "NetBSD", }; #define FLAGS_CORE_STYLE 0x0003 #define FLAGS_DID_CORE 0x0004 #define FLAGS_DID_OS_NOTE 0x0008 #define FLAGS_DID_BUILD_ID 0x0010 #define FLAGS_DID_CORE_STYLE 0x0020 #define FLAGS_DID_NETBSD_PAX 0x0040 #define FLAGS_DID_NETBSD_MARCH 0x0080 #define FLAGS_DID_NETBSD_CMODEL 0x0100 #define FLAGS_DID_NETBSD_EMULATION 0x0200 #define FLAGS_DID_NETBSD_UNKNOWN 0x0400 #define FLAGS_DID_ANDROID_MEMTAG 0x0800 #define FLAGS_IS_CORE 0x1000 #define FLAGS_DID_AUXV 0x2000 file_private int dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, size_t size, off_t fsize, int *flags, uint16_t *notecount) { Elf32_Phdr ph32; Elf64_Phdr ph64; size_t offset, len; unsigned char nbuf[NBUFSIZE]; ssize_t bufsize; off_t ph_off = off, offs; int ph_num = num; if (ms->flags & MAGIC_MIME) return 0; if (num == 0) { if (file_printf(ms, ", no program header") == -1) return -1; return 0; } if (size != xph_sizeof) { if (file_printf(ms, ", corrupted program header size") == -1) return -1; return 0; } /* * Loop through all the program headers. */ for ( ; num; num--) { if (pread(fd, xph_addr, xph_sizeof, off) < CAST(ssize_t, xph_sizeof)) { if (file_printf(ms, ", can't read elf program headers at %jd", (intmax_t)off) == -1) return -1; return 0; } off += size; if (fsize != SIZE_UNKNOWN && xph_offset > fsize) { /* Perhaps warn here */ continue; } if (xph_type != PT_NOTE) continue; /* * This is a PT_NOTE section; loop through all the notes * in the section. */ len = xph_filesz < sizeof(nbuf) ? xph_filesz : sizeof(nbuf); offs = xph_offset; if ((bufsize = pread(fd, nbuf, len, offs)) == -1) { if (file_printf(ms, " can't read note section at %jd", (intmax_t)offs) == -1) return -1; return 0; } offset = 0; for (;;) { if (offset >= CAST(size_t, bufsize)) break; offset = donote(ms, nbuf, offset, CAST(size_t, bufsize), clazz, swap, 4, flags, notecount, fd, ph_off, ph_num, fsize); if (offset == 0) break; } } return 0; } #endif static int do_note_netbsd_version(struct magic_set *ms, int swap, void *v) { uint32_t desc; memcpy(&desc, v, sizeof(desc)); desc = elf_getu32(swap, desc); if (file_printf(ms, ", for NetBSD") == -1) return -1; /* * The version number used to be stuck as 199905, and was thus * basically content-free. Newer versions of NetBSD have fixed * this and now use the encoding of __NetBSD_Version__: * * MMmmrrpp00 * * M = major version * m = minor version * r = release ["",A-Z,Z[A-Z] but numeric] * p = patchlevel */ if (desc > 100000000U) { uint32_t ver_patch = (desc / 100) % 100; uint32_t ver_rel = (desc / 10000) % 100; uint32_t ver_min = (desc / 1000000) % 100; uint32_t ver_maj = desc / 100000000; if (file_printf(ms, " %u.%u", ver_maj, ver_min) == -1) return -1; if (ver_maj >= 9) { ver_patch += 100 * ver_rel; ver_rel = 0; } if (ver_rel == 0 && ver_patch != 0) { if (file_printf(ms, ".%u", ver_patch) == -1) return -1; } else if (ver_rel != 0) { while (ver_rel > 26) { if (file_printf(ms, "Z") == -1) return -1; ver_rel -= 26; } if (file_printf(ms, "%c", 'A' + ver_rel - 1) == -1) return -1; } } return 0; } static int do_note_freebsd_version(struct magic_set *ms, int swap, void *v) { uint32_t desc; memcpy(&desc, v, sizeof(desc)); desc = elf_getu32(swap, desc); if (file_printf(ms, ", for FreeBSD") == -1) return -1; /* * Contents is __FreeBSD_version, whose relation to OS * versions is defined by a huge table in the Porter's * Handbook. This is the general scheme: * * Releases: * Mmp000 (before 4.10) * Mmi0p0 (before 5.0) * Mmm0p0 * * Development branches: * Mmpxxx (before 4.6) * Mmp1xx (before 4.10) * Mmi1xx (before 5.0) * M000xx (pre-M.0) * Mmm1xx * * M = major version * m = minor version * i = minor version increment (491000 -> 4.10) * p = patchlevel * x = revision * * The first release of FreeBSD to use ELF by default * was version 3.0. */ if (desc == 460002) { if (file_printf(ms, " 4.6.2") == -1) return -1; } else if (desc < 460100) { if (file_printf(ms, " %d.%d", desc / 100000, desc / 10000 % 10) == -1) return -1; if (desc / 1000 % 10 > 0) if (file_printf(ms, ".%d", desc / 1000 % 10) == -1) return -1; if ((desc % 1000 > 0) || (desc % 100000 == 0)) if (file_printf(ms, " (%d)", desc) == -1) return -1; } else if (desc < 500000) { if (file_printf(ms, " %d.%d", desc / 100000, desc / 10000 % 10 + desc / 1000 % 10) == -1) return -1; if (desc / 100 % 10 > 0) { if (file_printf(ms, " (%d)", desc) == -1) return -1; } else if (desc / 10 % 10 > 0) { if (file_printf(ms, ".%d", desc / 10 % 10) == -1) return -1; } } else { if (file_printf(ms, " %d.%d", desc / 100000, desc / 1000 % 100) == -1) return -1; if ((desc / 100 % 10 > 0) || (desc % 100000 / 100 == 0)) { if (file_printf(ms, " (%d)", desc) == -1) return -1; } else if (desc / 10 % 10 > 0) { if (file_printf(ms, ".%d", desc / 10 % 10) == -1) return -1; } } return 0; } file_private int /*ARGSUSED*/ do_bid_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, int swap __attribute__((__unused__)), uint32_t namesz, uint32_t descsz, size_t noff, size_t doff, int *flags) { if (NAMEEQUALS(RCAST(char *, &nbuf[noff]), "GNU") && type == NT_GNU_BUILD_ID && (descsz >= 4 && descsz <= 20)) { uint8_t desc[20]; const char *btype; uint32_t i; *flags |= FLAGS_DID_BUILD_ID; switch (descsz) { case 8: btype = "xxHash"; break; case 16: btype = "md5/uuid"; break; case 20: btype = "sha1"; break; default: btype = "unknown"; break; } if (file_printf(ms, ", BuildID[%s]=", btype) == -1) return -1; memcpy(desc, &nbuf[doff], descsz); for (i = 0; i < descsz; i++) if (file_printf(ms, "%02x", desc[i]) == -1) return -1; return 1; } if (namesz == 4 && memcmp(RCAST(char *, &nbuf[noff]), "Go", 3) == 0 && type == NT_GO_BUILD_ID && descsz < 128) { char buf[256]; if (file_printf(ms, ", Go BuildID=%s", file_copystr(buf, sizeof(buf), descsz, RCAST(const char *, &nbuf[doff]))) == -1) return -1; return 1; } return 0; } file_private int do_os_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, int swap, uint32_t namesz, uint32_t descsz, size_t noff, size_t doff, int *flags) { const char *name = RCAST(const char *, &nbuf[noff]); if (NAMEEQUALS(name, "SuSE") && type == NT_GNU_VERSION && descsz == 2) { *flags |= FLAGS_DID_OS_NOTE; if (file_printf(ms, ", for SuSE %d.%d", nbuf[doff], nbuf[doff + 1]) == -1) return -1; return 1; } if (NAMEEQUALS(name, "GNU") && type == NT_GNU_VERSION && descsz == 16) { uint32_t desc[4]; memcpy(desc, &nbuf[doff], sizeof(desc)); *flags |= FLAGS_DID_OS_NOTE; if (file_printf(ms, ", for GNU/") == -1) return -1; switch (elf_getu32(swap, desc[0])) { case GNU_OS_LINUX: if (file_printf(ms, "Linux") == -1) return -1; break; case GNU_OS_HURD: if (file_printf(ms, "Hurd") == -1) return -1; break; case GNU_OS_SOLARIS: if (file_printf(ms, "Solaris") == -1) return -1; break; case GNU_OS_KFREEBSD: if (file_printf(ms, "kFreeBSD") == -1) return -1; break; case GNU_OS_KNETBSD: if (file_printf(ms, "kNetBSD") == -1) return -1; break; default: if (file_printf(ms, "") == -1) return -1; } if (file_printf(ms, " %d.%d.%d", elf_getu32(swap, desc[1]), elf_getu32(swap, desc[2]), elf_getu32(swap, desc[3])) == -1) return -1; return 1; } if (NAMEEQUALS(name, "NetBSD") && type == NT_NETBSD_VERSION && descsz == 4) { *flags |= FLAGS_DID_OS_NOTE; if (do_note_netbsd_version(ms, swap, &nbuf[doff]) == -1) return -1; return 1; } if (NAMEEQUALS(name, "FreeBSD") && type == NT_FREEBSD_VERSION && descsz == 4) { *flags |= FLAGS_DID_OS_NOTE; if (do_note_freebsd_version(ms, swap, &nbuf[doff]) == -1) return -1; return 1; } if (NAMEEQUALS(name, "OpenBSD") && type == NT_OPENBSD_VERSION && descsz == 4) { *flags |= FLAGS_DID_OS_NOTE; if (file_printf(ms, ", for OpenBSD") == -1) return -1; /* Content of note is always 0 */ return 1; } if (NAMEEQUALS(name, "DragonFly") && type == NT_DRAGONFLY_VERSION && descsz == 4) { uint32_t desc; *flags |= FLAGS_DID_OS_NOTE; if (file_printf(ms, ", for DragonFly") == -1) return -1; memcpy(&desc, &nbuf[doff], sizeof(desc)); desc = elf_getu32(swap, desc); if (file_printf(ms, " %d.%d.%d", desc / 100000, desc / 10000 % 10, desc % 10000) == -1) return -1; return 1; } if (NAMEEQUALS(name, "Android") && type == NT_ANDROID_VERSION && descsz >= 4) { uint32_t api_level; *flags |= FLAGS_DID_OS_NOTE; memcpy(&api_level, &nbuf[doff], sizeof(api_level)); api_level = elf_getu32(swap, api_level); if (file_printf(ms, ", for Android %d", api_level) == -1) return -1; /* * NDK r14 and later also include details of the NDK that * built the binary. OS binaries (or binaries built by older * NDKs) don't have this. The NDK release and build number * are both 64-byte strings. */ if (descsz >= 4 + 64 + 64) { if (file_printf(ms, ", built by NDK %.64s (%.64s)", &nbuf[doff + 4], &nbuf[doff + 4 + 64]) == -1) return -1; } } return 0; } file_private int do_pax_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, int swap, uint32_t namesz, uint32_t descsz, size_t noff, size_t doff, int *flags) { const char *name = RCAST(const char *, &nbuf[noff]); if (NAMEEQUALS(name, "PaX") && type == NT_NETBSD_PAX && descsz == 4) { static const char *pax[] = { "+mprotect", "-mprotect", "+segvguard", "-segvguard", "+ASLR", "-ASLR", }; uint32_t desc; size_t i; int did = 0; *flags |= FLAGS_DID_NETBSD_PAX; memcpy(&desc, &nbuf[doff], sizeof(desc)); desc = elf_getu32(swap, desc); if (desc && file_printf(ms, ", PaX: ") == -1) return -1; for (i = 0; i < __arraycount(pax); i++) { if (((1 << CAST(int, i)) & desc) == 0) continue; if (file_printf(ms, "%s%s", did++ ? "," : "", pax[i]) == -1) return -1; } return 1; } return 0; } file_private int do_memtag_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, int swap, uint32_t namesz, uint32_t descsz, size_t noff, size_t doff, int *flags) { const char *name = RCAST(const char *, &nbuf[noff]); if (NAMEEQUALS(name, "Android") && type == NT_ANDROID_MEMTAG && descsz == 4) { static const char *memtag[] = { "none", "async", "sync", "heap", "stack", }; uint32_t desc; size_t i; int did = 0; *flags |= FLAGS_DID_ANDROID_MEMTAG; memcpy(&desc, &nbuf[doff], sizeof(desc)); desc = elf_getu32(swap, desc); if (desc && file_printf(ms, ", Android Memtag: ") == -1) return -1; for (i = 0; i < __arraycount(memtag); i++) { if (((1 << CAST(int, i)) & desc) == 0) continue; if (file_printf(ms, "%s%s", did++ ? "," : "", memtag[i]) == -1) return -1; } return 1; } return 0; } file_private int do_core_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, int swap, uint32_t namesz, uint32_t descsz, size_t noff, size_t doff, int *flags, size_t size, int clazz) { #ifdef ELFCORE char buf[256]; const char *name = RCAST(const char *, &nbuf[noff]); int os_style = -1; /* * Sigh. The 2.0.36 kernel in Debian 2.1, at * least, doesn't correctly implement name * sections, in core dumps, as specified by * the "Program Linking" section of "UNIX(R) System * V Release 4 Programmer's Guide: ANSI C and * Programming Support Tools", because my copy * clearly says "The first 'namesz' bytes in 'name' * contain a *null-terminated* [emphasis mine] * character representation of the entry's owner * or originator", but the 2.0.36 kernel code * doesn't include the terminating null in the * name.... */ if ((namesz == 4 && memcmp(name, "CORE", 4) == 0) || NAMEEQUALS(name, "CORE")) { os_style = OS_STYLE_SVR4; } if (NAMEEQUALS(name, "FreeBSD")) { os_style = OS_STYLE_FREEBSD; } if ((namesz >= 11 && memcmp(name, "NetBSD-CORE", 11) == 0)) { os_style = OS_STYLE_NETBSD; } if (os_style != -1 && (*flags & FLAGS_DID_CORE_STYLE) == 0) { if (file_printf(ms, ", %s-style", os_style_names[os_style]) == -1) return -1; *flags |= FLAGS_DID_CORE_STYLE; *flags |= os_style; } switch (os_style) { case OS_STYLE_NETBSD: if (type == NT_NETBSD_CORE_PROCINFO) { char sbuf[512]; struct NetBSD_elfcore_procinfo pi; memset(&pi, 0, sizeof(pi)); memcpy(&pi, nbuf + doff, MIN(descsz, sizeof(pi))); if (file_printf(ms, ", from '%.31s', pid=%u, uid=%u, " "gid=%u, nlwps=%u, lwp=%u (signal %u/code %u)", file_printable(ms, sbuf, sizeof(sbuf), RCAST(char *, pi.cpi_name), sizeof(pi.cpi_name)), elf_getu32(swap, CAST(uint32_t, pi.cpi_pid)), elf_getu32(swap, pi.cpi_euid), elf_getu32(swap, pi.cpi_egid), elf_getu32(swap, pi.cpi_nlwps), elf_getu32(swap, CAST(uint32_t, pi.cpi_siglwp)), elf_getu32(swap, pi.cpi_signo), elf_getu32(swap, pi.cpi_sigcode)) == -1) return -1; *flags |= FLAGS_DID_CORE; return 1; } break; case OS_STYLE_FREEBSD: if (type == NT_PRPSINFO && *flags & FLAGS_IS_CORE) { size_t argoff, pidoff; if (clazz == ELFCLASS32) argoff = 4 + 4 + 17; else argoff = 4 + 4 + 8 + 17; if (file_printf(ms, ", from '%.80s'", nbuf + doff + argoff) == -1) return -1; pidoff = argoff + 81 + 2; if (doff + pidoff + 4 <= size) { if (file_printf(ms, ", pid=%u", elf_getu32(swap, *RCAST(uint32_t *, (nbuf + doff + pidoff)))) == -1) return -1; } *flags |= FLAGS_DID_CORE; } break; default: if (type == NT_PRPSINFO && *flags & FLAGS_IS_CORE) { size_t i, j; unsigned char c; /* * Extract the program name. We assume * it to be 16 characters (that's what it * is in SunOS 5.x and Linux). * * Unfortunately, it's at a different offset * in various OSes, so try multiple offsets. * If the characters aren't all printable, * reject it. */ for (i = 0; i < NOFFSETS; i++) { unsigned char *cname, *cp; size_t reloffset = prpsoffsets(i); size_t noffset = doff + reloffset; size_t k; for (j = 0; j < 16; j++, noffset++, reloffset++) { /* * Make sure we're not past * the end of the buffer; if * we are, just give up. */ if (noffset >= size) goto tryanother; /* * Make sure we're not past * the end of the contents; * if we are, this obviously * isn't the right offset. */ if (reloffset >= descsz) goto tryanother; c = nbuf[noffset]; if (c == '\0') { /* * A '\0' at the * beginning is * obviously wrong. * Any other '\0' * means we're done. */ if (j == 0) goto tryanother; else break; } else { /* * A nonprintable * character is also * wrong. */ if (!isprint(c) || isquote(c)) goto tryanother; } } /* * Well, that worked. */ /* * Try next offsets, in case this match is * in the middle of a string. */ for (k = i + 1 ; k < NOFFSETS; k++) { size_t no; int adjust = 1; if (prpsoffsets(k) >= prpsoffsets(i)) continue; /* * pr_fname == pr_psargs - 16 && * non-nul-terminated fname (qemu) */ if (prpsoffsets(k) == prpsoffsets(i) - 16 && j == 16) continue; for (no = doff + prpsoffsets(k); no < doff + prpsoffsets(i); no++) adjust = adjust && isprint(nbuf[no]); if (adjust) i = k; } cname = CAST(unsigned char *, &nbuf[doff + prpsoffsets(i)]); for (cp = cname; cp < nbuf + size && *cp && isprint(*cp); cp++) continue; /* * Linux apparently appends a space at the end * of the command line: remove it. */ while (cp > cname && isspace(cp[-1])) cp--; if (file_printf(ms, ", from '%s'", file_copystr(buf, sizeof(buf), CAST(size_t, cp - cname), RCAST(char *, cname))) == -1) return -1; *flags |= FLAGS_DID_CORE; return 1; tryanother: ; } } break; } #endif return 0; } file_private off_t get_offset_from_virtaddr(struct magic_set *ms, int swap, int clazz, int fd, off_t off, int num, off_t fsize, uint64_t virtaddr) { Elf32_Phdr ph32; Elf64_Phdr ph64; /* * Loop through all the program headers and find the header with * virtual address in which the "virtaddr" belongs to. */ for ( ; num; num--) { if (pread(fd, xph_addr, xph_sizeof, off) < CAST(ssize_t, xph_sizeof)) { if (file_printf(ms, ", can't read elf program header at %jd", (intmax_t)off) == -1) return -1; return 0; } off += xph_sizeof; if (fsize != SIZE_UNKNOWN && xph_offset > fsize) { /* Perhaps warn here */ continue; } if (virtaddr >= xph_vaddr && virtaddr < xph_vaddr + xph_filesz) return xph_offset + (virtaddr - xph_vaddr); } return 0; } file_private size_t get_string_on_virtaddr(struct magic_set *ms, int swap, int clazz, int fd, off_t ph_off, int ph_num, off_t fsize, uint64_t virtaddr, char *buf, ssize_t buflen) { char *bptr; off_t offset; if (buflen == 0) return 0; offset = get_offset_from_virtaddr(ms, swap, clazz, fd, ph_off, ph_num, fsize, virtaddr); if (offset < 0 || (buflen = pread(fd, buf, CAST(size_t, buflen), offset)) <= 0) { (void)file_printf(ms, ", can't read elf string at %jd", (intmax_t)offset); return 0; } buf[buflen - 1] = '\0'; /* We expect only printable characters, so return if buffer contains * non-printable character before the '\0' or just '\0'. */ for (bptr = buf; *bptr && isprint(CAST(unsigned char, *bptr)); bptr++) continue; if (*bptr != '\0') return 0; return bptr - buf; } /*ARGSUSED*/ file_private int do_auxv_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, int swap, uint32_t namesz __attribute__((__unused__)), uint32_t descsz __attribute__((__unused__)), size_t noff __attribute__((__unused__)), size_t doff, int *flags, size_t size __attribute__((__unused__)), int clazz, int fd, off_t ph_off, int ph_num, off_t fsize) { #ifdef ELFCORE Aux32Info auxv32; Aux64Info auxv64; size_t elsize = xauxv_sizeof; const char *tag; int is_string; size_t nval, off; if ((*flags & (FLAGS_IS_CORE|FLAGS_DID_CORE_STYLE)) != (FLAGS_IS_CORE|FLAGS_DID_CORE_STYLE)) return 0; switch (*flags & FLAGS_CORE_STYLE) { case OS_STYLE_SVR4: if (type != NT_AUXV) return 0; break; #ifdef notyet case OS_STYLE_NETBSD: if (type != NT_NETBSD_CORE_AUXV) return 0; break; case OS_STYLE_FREEBSD: if (type != NT_FREEBSD_PROCSTAT_AUXV) return 0; break; #endif default: return 0; } *flags |= FLAGS_DID_AUXV; nval = 0; for (off = 0; off + elsize <= descsz; off += elsize) { memcpy(xauxv_addr, &nbuf[doff + off], xauxv_sizeof); /* Limit processing to 50 vector entries to prevent DoS */ if (nval++ >= 50) { file_error(ms, 0, "Too many ELF Auxv elements"); return 1; } switch(xauxv_type) { case AT_LINUX_EXECFN: is_string = 1; tag = "execfn"; break; case AT_LINUX_PLATFORM: is_string = 1; tag = "platform"; break; case AT_LINUX_UID: is_string = 0; tag = "real uid"; break; case AT_LINUX_GID: is_string = 0; tag = "real gid"; break; case AT_LINUX_EUID: is_string = 0; tag = "effective uid"; break; case AT_LINUX_EGID: is_string = 0; tag = "effective gid"; break; default: is_string = 0; tag = NULL; break; } if (tag == NULL) continue; if (is_string) { char buf[256]; ssize_t buflen; buflen = get_string_on_virtaddr(ms, swap, clazz, fd, ph_off, ph_num, fsize, xauxv_val, buf, sizeof(buf)); if (buflen == 0) continue; if (file_printf(ms, ", %s: '%s'", tag, buf) == -1) return -1; } else { if (file_printf(ms, ", %s: %d", tag, CAST(int, xauxv_val)) == -1) return -1; } } return 1; #else return 0; #endif } file_private size_t dodynamic(struct magic_set *ms, void *vbuf, size_t offset, size_t size, int clazz, int swap, int *pie, size_t *need) { Elf32_Dyn dh32; Elf64_Dyn dh64; unsigned char *dbuf = CAST(unsigned char *, vbuf); if (xdh_sizeof + offset > size) { /* * We're out of note headers. */ return xdh_sizeof + offset; } memcpy(xdh_addr, &dbuf[offset], xdh_sizeof); offset += xdh_sizeof; switch (xdh_tag) { case DT_FLAGS_1: if (xdh_val & DF_1_PIE) { *pie = 1; ms->mode |= 0111; } else ms->mode &= ~0111; break; case DT_NEEDED: (*need)++; break; default: break; } return offset; } file_private size_t donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size, int clazz, int swap, size_t align, int *flags, uint16_t *notecount, int fd, off_t ph_off, int ph_num, off_t fsize) { Elf32_Nhdr nh32; Elf64_Nhdr nh64; size_t noff, doff; uint32_t namesz, descsz; char buf[256]; unsigned char *nbuf = CAST(unsigned char *, vbuf); if (*notecount == 0) return 0; --*notecount; if (xnh_sizeof + offset > size) { /* * We're out of note headers. */ return xnh_sizeof + offset; } /*XXX: GCC */ memset(&nh32, 0, sizeof(nh32)); memset(&nh64, 0, sizeof(nh64)); memcpy(xnh_addr, &nbuf[offset], xnh_sizeof); offset += xnh_sizeof; namesz = xnh_namesz; descsz = xnh_descsz; if ((namesz == 0) && (descsz == 0)) { /* * We're out of note headers. */ return (offset >= size) ? offset : size; } if (namesz & 0x80000000) { (void)file_printf(ms, ", bad note name size %#lx", CAST(unsigned long, namesz)); return 0; } if (descsz & 0x80000000) { (void)file_printf(ms, ", bad note description size %#lx", CAST(unsigned long, descsz)); return 0; } noff = offset; doff = ELF_ALIGN(offset + namesz); if (offset + namesz > size) { /* * We're past the end of the buffer. */ return doff; } offset = ELF_ALIGN(doff + descsz); if (doff + descsz > size) { /* * We're past the end of the buffer. */ return (offset >= size) ? offset : size; } if ((*flags & FLAGS_DID_OS_NOTE) == 0) { if (do_os_note(ms, nbuf, xnh_type, swap, namesz, descsz, noff, doff, flags)) return offset; } if ((*flags & FLAGS_DID_BUILD_ID) == 0) { if (do_bid_note(ms, nbuf, xnh_type, swap, namesz, descsz, noff, doff, flags)) return offset; } if ((*flags & FLAGS_DID_NETBSD_PAX) == 0) { if (do_pax_note(ms, nbuf, xnh_type, swap, namesz, descsz, noff, doff, flags)) return offset; } if ((*flags & FLAGS_DID_ANDROID_MEMTAG) == 0) { if (do_memtag_note(ms, nbuf, xnh_type, swap, namesz, descsz, noff, doff, flags)) return offset; } if ((*flags & FLAGS_DID_CORE) == 0) { if (do_core_note(ms, nbuf, xnh_type, swap, namesz, descsz, noff, doff, flags, size, clazz)) return offset; } if ((*flags & FLAGS_DID_AUXV) == 0) { if (do_auxv_note(ms, nbuf, xnh_type, swap, namesz, descsz, noff, doff, flags, size, clazz, fd, ph_off, ph_num, fsize)) return offset; } if (NAMEEQUALS(RCAST(char *, &nbuf[noff]), "NetBSD")) { int descw, flag; const char *str, *tag; if (descsz > 100) descsz = 100; switch (xnh_type) { case NT_NETBSD_VERSION: return offset; case NT_NETBSD_MARCH: flag = FLAGS_DID_NETBSD_MARCH; tag = "compiled for"; break; case NT_NETBSD_CMODEL: flag = FLAGS_DID_NETBSD_CMODEL; tag = "compiler model"; break; case NT_NETBSD_EMULATION: flag = FLAGS_DID_NETBSD_EMULATION; tag = "emulation:"; break; default: if (*flags & FLAGS_DID_NETBSD_UNKNOWN) return offset; *flags |= FLAGS_DID_NETBSD_UNKNOWN; if (file_printf(ms, ", note=%u", xnh_type) == -1) return offset; return offset; } if (*flags & flag) return offset; str = RCAST(const char *, &nbuf[doff]); descw = CAST(int, descsz); *flags |= flag; file_printf(ms, ", %s: %s", tag, file_copystr(buf, sizeof(buf), descw, str)); return offset; } return offset; } /* SunOS 5.x hardware capability descriptions */ typedef struct cap_desc { uint64_t cd_mask; const char *cd_name; } cap_desc_t; static const cap_desc_t cap_desc_sparc[] = { { AV_SPARC_MUL32, "MUL32" }, { AV_SPARC_DIV32, "DIV32" }, { AV_SPARC_FSMULD, "FSMULD" }, { AV_SPARC_V8PLUS, "V8PLUS" }, { AV_SPARC_POPC, "POPC" }, { AV_SPARC_VIS, "VIS" }, { AV_SPARC_VIS2, "VIS2" }, { AV_SPARC_ASI_BLK_INIT, "ASI_BLK_INIT" }, { AV_SPARC_FMAF, "FMAF" }, { AV_SPARC_FJFMAU, "FJFMAU" }, { AV_SPARC_IMA, "IMA" }, { 0, NULL } }; static const cap_desc_t cap_desc_386[] = { { AV_386_FPU, "FPU" }, { AV_386_TSC, "TSC" }, { AV_386_CX8, "CX8" }, { AV_386_SEP, "SEP" }, { AV_386_AMD_SYSC, "AMD_SYSC" }, { AV_386_CMOV, "CMOV" }, { AV_386_MMX, "MMX" }, { AV_386_AMD_MMX, "AMD_MMX" }, { AV_386_AMD_3DNow, "AMD_3DNow" }, { AV_386_AMD_3DNowx, "AMD_3DNowx" }, { AV_386_FXSR, "FXSR" }, { AV_386_SSE, "SSE" }, { AV_386_SSE2, "SSE2" }, { AV_386_PAUSE, "PAUSE" }, { AV_386_SSE3, "SSE3" }, { AV_386_MON, "MON" }, { AV_386_CX16, "CX16" }, { AV_386_AHF, "AHF" }, { AV_386_TSCP, "TSCP" }, { AV_386_AMD_SSE4A, "AMD_SSE4A" }, { AV_386_POPCNT, "POPCNT" }, { AV_386_AMD_LZCNT, "AMD_LZCNT" }, { AV_386_SSSE3, "SSSE3" }, { AV_386_SSE4_1, "SSE4.1" }, { AV_386_SSE4_2, "SSE4.2" }, { 0, NULL } }; file_private int doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, size_t size, off_t fsize, int mach, int strtab, int *flags, uint16_t *notecount) { Elf32_Shdr sh32; Elf64_Shdr sh64; int stripped = 1, has_debug_info = 0; size_t nbadcap = 0; void *nbuf; off_t noff, coff, name_off, offs; uint64_t cap_hw1 = 0; /* SunOS 5.x hardware capabilities */ uint64_t cap_sf1 = 0; /* SunOS 5.x software capabilities */ char name[50]; ssize_t namesize; if (ms->flags & MAGIC_MIME) return 0; if (num == 0) { if (file_printf(ms, ", no section header") == -1) return -1; return 0; } if (size != xsh_sizeof) { if (file_printf(ms, ", corrupted section header size") == -1) return -1; return 0; } /* Read offset of name section to be able to read section names later */ offs = CAST(off_t, (off + size * strtab)); if (pread(fd, xsh_addr, xsh_sizeof, offs) < CAST(ssize_t, xsh_sizeof)) { if (file_printf(ms, ", missing section headers at %jd", (intmax_t)offs) == -1) return -1; return 0; } name_off = xsh_offset; if (fsize != SIZE_UNKNOWN && fsize < name_off) { if (file_printf(ms, ", too large section header offset %jd", (intmax_t)name_off) == -1) return -1; return 0; } for ( ; num; num--) { /* Read the name of this section. */ offs = name_off + xsh_name; if ((namesize = pread(fd, name, sizeof(name) - 1, offs)) == -1) { if (file_printf(ms, ", can't read name of elf section at %jd", (intmax_t)offs) == -1) return -1; return 0; } name[namesize] = '\0'; if (strcmp(name, ".debug_info") == 0) { has_debug_info = 1; stripped = 0; } if (pread(fd, xsh_addr, xsh_sizeof, off) < CAST(ssize_t, xsh_sizeof)) { if (file_printf(ms, ", can't read elf section at %jd", (intmax_t)off) == -1) return -1; return 0; } off += size; /* Things we can determine before we seek */ switch (xsh_type) { case SHT_SYMTAB: #if 0 case SHT_DYNSYM: #endif stripped = 0; break; default: if (fsize != SIZE_UNKNOWN && xsh_offset > fsize) { /* Perhaps warn here */ continue; } break; } /* Things we can determine when we seek */ switch (xsh_type) { case SHT_NOTE: if (CAST(uintmax_t, (xsh_size + xsh_offset)) > CAST(uintmax_t, fsize)) { if (file_printf(ms, ", note offset/size %#" INTMAX_T_FORMAT "x+%#" INTMAX_T_FORMAT "x exceeds" " file size %#" INTMAX_T_FORMAT "x", CAST(uintmax_t, xsh_offset), CAST(uintmax_t, xsh_size), CAST(uintmax_t, fsize)) == -1) return -1; return 0; } if (xsh_size > ms->elf_shsize_max) { file_error(ms, errno, "Note section size too " "big (%ju > %zu)", (uintmax_t)xsh_size, ms->elf_shsize_max); return -1; } if ((nbuf = malloc(xsh_size)) == NULL) { file_error(ms, errno, "Cannot allocate memory" " for note"); return -1; } offs = xsh_offset; if (pread(fd, nbuf, xsh_size, offs) < CAST(ssize_t, xsh_size)) { free(nbuf); if (file_printf(ms, ", can't read elf note at %jd", (intmax_t)offs) == -1) return -1; return 0; } noff = 0; for (;;) { if (noff >= CAST(off_t, xsh_size)) break; noff = donote(ms, nbuf, CAST(size_t, noff), xsh_size, clazz, swap, 4, flags, notecount, fd, 0, 0, 0); if (noff == 0) break; } free(nbuf); break; case SHT_SUNW_cap: switch (mach) { case EM_SPARC: case EM_SPARCV9: case EM_IA_64: case EM_386: case EM_AMD64: break; default: goto skip; } if (nbadcap > 5) break; if (lseek(fd, xsh_offset, SEEK_SET) == CAST(off_t, -1)) { file_badseek(ms); return -1; } coff = 0; for (;;) { Elf32_Cap cap32; Elf64_Cap cap64; cap32.c_un.c_val = 0; cap64.c_un.c_val = 0; char cbuf[/*CONSTCOND*/ MAX(sizeof(cap32), sizeof(cap64))]; if ((coff += xcap_sizeof) > CAST(off_t, xsh_size)) break; if (read(fd, cbuf, CAST(size_t, xcap_sizeof)) != CAST(ssize_t, xcap_sizeof)) { file_badread(ms); return -1; } if (cbuf[0] == 'A') { #ifdef notyet char *p = cbuf + 1; uint32_t len, tag; memcpy(&len, p, sizeof(len)); p += 4; len = getu32(swap, len); if (memcmp("gnu", p, 3) != 0) { if (file_printf(ms, ", unknown capability %.3s", p) == -1) return -1; break; } p += strlen(p) + 1; tag = *p++; memcpy(&len, p, sizeof(len)); p += 4; len = getu32(swap, len); if (tag != 1) { if (file_printf(ms, ", unknown gnu" " capability tag %d", tag) == -1) return -1; break; } // gnu attributes #endif break; } memcpy(xcap_addr, cbuf, xcap_sizeof); switch (xcap_tag) { case CA_SUNW_NULL: break; case CA_SUNW_HW_1: cap_hw1 |= xcap_val; break; case CA_SUNW_SF_1: cap_sf1 |= xcap_val; break; default: if (file_printf(ms, ", with unknown capability " "%#" INT64_T_FORMAT "x = %#" INT64_T_FORMAT "x", CAST(unsigned long long, xcap_tag), CAST(unsigned long long, xcap_val)) == -1) return -1; if (nbadcap++ > 2) coff = xsh_size; break; } } /*FALLTHROUGH*/ skip: default: break; } } if (has_debug_info) { if (file_printf(ms, ", with debug_info") == -1) return -1; } if (file_printf(ms, ", %sstripped", stripped ? "" : "not ") == -1) return -1; if (cap_hw1) { const cap_desc_t *cdp; switch (mach) { case EM_SPARC: case EM_SPARC32PLUS: case EM_SPARCV9: cdp = cap_desc_sparc; break; case EM_386: case EM_IA_64: case EM_AMD64: cdp = cap_desc_386; break; default: cdp = NULL; break; } if (file_printf(ms, ", uses") == -1) return -1; if (cdp) { while (cdp->cd_name) { if (cap_hw1 & cdp->cd_mask) { if (file_printf(ms, " %s", cdp->cd_name) == -1) return -1; cap_hw1 &= ~cdp->cd_mask; } ++cdp; } if (cap_hw1) if (file_printf(ms, " unknown hardware capability %#" INT64_T_FORMAT "x", CAST(unsigned long long, cap_hw1)) == -1) return -1; } else { if (file_printf(ms, " hardware capability %#" INT64_T_FORMAT "x", CAST(unsigned long long, cap_hw1)) == -1) return -1; } } if (cap_sf1) { if (cap_sf1 & SF1_SUNW_FPUSED) { if (file_printf(ms, (cap_sf1 & SF1_SUNW_FPKNWN) ? ", uses frame pointer" : ", not known to use frame pointer") == -1) return -1; } cap_sf1 &= ~SF1_SUNW_MASK; if (cap_sf1) if (file_printf(ms, ", with unknown software capability %#" INT64_T_FORMAT "x", CAST(unsigned long long, cap_sf1)) == -1) return -1; } return 0; } /* * Look through the program headers of an executable image, to determine * if it is statically or dynamically linked. If it has a dynamic section, * it is pie, and does not have an interpreter or needed libraries, we * call it static pie. */ file_private int dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, size_t size, off_t fsize, int sh_num, int *flags, uint16_t *notecount) { Elf32_Phdr ph32; Elf64_Phdr ph64; const char *linking_style; unsigned char nbuf[NBUFSIZE]; char interp[128]; ssize_t bufsize; size_t offset, align, need = 0; int pie = 0, dynamic = 0; if (num == 0) { if (file_printf(ms, ", no program header") == -1) return -1; return 0; } if (size != xph_sizeof) { if (file_printf(ms, ", corrupted program header size") == -1) return -1; return 0; } interp[0] = '\0'; for ( ; num; num--) { int doread; if (pread(fd, xph_addr, xph_sizeof, off) < CAST(ssize_t, xph_sizeof)) { if (file_printf(ms, ", can't read elf program headers at %jd", (intmax_t)off) == -1) return -1; return 0; } off += size; bufsize = 0; align = 4; /* Things we can determine before we seek */ switch (xph_type) { case PT_DYNAMIC: doread = 1; break; case PT_NOTE: if (sh_num) /* Did this through section headers */ continue; if (((align = xph_align) & 0x80000000UL) != 0 || align < 4) { if (file_printf(ms, ", invalid note alignment %#lx", CAST(unsigned long, align)) == -1) return -1; align = 4; } /*FALLTHROUGH*/ case PT_INTERP: doread = 1; break; default: doread = 0; if (fsize != SIZE_UNKNOWN && xph_offset > fsize) { /* Maybe warn here? */ continue; } break; } if (doread) { size_t len = xph_filesz < sizeof(nbuf) ? xph_filesz : sizeof(nbuf); off_t offs = xph_offset; bufsize = pread(fd, nbuf, len, offs); if (bufsize == -1) { if (file_printf(ms, ", can't read section at %jd", (intmax_t)offs) == -1) return -1; return 0; } } /* Things we can determine when we seek */ switch (xph_type) { case PT_DYNAMIC: dynamic = 1; offset = 0; // Let DF_1 determine if we are PIE or not. ms->mode &= ~0111; for (;;) { if (offset >= CAST(size_t, bufsize)) break; offset = dodynamic(ms, nbuf, offset, CAST(size_t, bufsize), clazz, swap, &pie, &need); if (offset == 0) break; } if (ms->flags & MAGIC_MIME) continue; break; case PT_INTERP: need++; if (ms->flags & MAGIC_MIME) continue; if (bufsize && nbuf[0]) { nbuf[bufsize - 1] = '\0'; memcpy(interp, nbuf, CAST(size_t, bufsize)); } else strlcpy(interp, "*empty*", sizeof(interp)); break; case PT_NOTE: if (ms->flags & MAGIC_MIME) return 0; /* * This is a PT_NOTE section; loop through all the notes * in the section. */ offset = 0; for (;;) { if (offset >= CAST(size_t, bufsize)) break; offset = donote(ms, nbuf, offset, CAST(size_t, bufsize), clazz, swap, align, flags, notecount, fd, 0, 0, 0); if (offset == 0) break; } break; default: if (ms->flags & MAGIC_MIME) continue; break; } } if (ms->flags & MAGIC_MIME) return 0; if (dynamic) { if (pie && need == 0) linking_style = "static-pie"; else linking_style = "dynamically"; } else { linking_style = "statically"; } if (file_printf(ms, ", %s linked", linking_style) == -1) return -1; if (interp[0]) if (file_printf(ms, ", interpreter %s", file_printable(ms, CAST(char *, nbuf), sizeof(nbuf), interp, sizeof(interp))) == -1) return -1; return 0; } file_protected int file_tryelf(struct magic_set *ms, const struct buffer *b) { int fd = b->fd; const unsigned char *buf = CAST(const unsigned char *, b->fbuf); size_t nbytes = b->flen; union { int32_t l; char c[sizeof(int32_t)]; } u; int clazz; int swap; struct stat st; const struct stat *stp; off_t fsize; int flags = 0; Elf32_Ehdr elf32hdr; Elf64_Ehdr elf64hdr; uint16_t type, phnum, shnum, notecount; if (ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)) return 0; /* * ELF executables have multiple section headers in arbitrary * file locations and thus file(1) cannot determine it from easily. * Instead we traverse thru all section headers until a symbol table * one is found or else the binary is stripped. * Return immediately if it's not ELF (so we avoid pipe2file unless * needed). */ if (buf[EI_MAG0] != ELFMAG0 || (buf[EI_MAG1] != ELFMAG1 && buf[EI_MAG1] != OLFMAG1) || buf[EI_MAG2] != ELFMAG2 || buf[EI_MAG3] != ELFMAG3) return 0; /* * If we cannot seek, it must be a pipe, socket or fifo. */ if((lseek(fd, CAST(off_t, 0), SEEK_SET) == CAST(off_t, -1)) && (errno == ESPIPE)) fd = file_pipe2file(ms, fd, buf, nbytes); if (fd == -1) { file_badread(ms); return -1; } stp = &b->st; /* * b->st.st_size != 0 if previous fstat() succeeded, * which is likely, we can avoid extra stat() call. */ if (b->st.st_size == 0) { stp = &st; if (fstat(fd, &st) == -1) { file_badread(ms); return -1; } } if (S_ISREG(stp->st_mode) || stp->st_size != 0) fsize = stp->st_size; else fsize = SIZE_UNKNOWN; clazz = buf[EI_CLASS]; switch (clazz) { case ELFCLASS32: #undef elf_getu #define elf_getu(a, b) elf_getu32(a, b) #undef elfhdr #define elfhdr elf32hdr #include "elfclass.h" case ELFCLASS64: #undef elf_getu #define elf_getu(a, b) elf_getu64(a, b) #undef elfhdr #define elfhdr elf64hdr #include "elfclass.h" default: if (file_printf(ms, ", unknown class %d", clazz) == -1) return -1; break; } return 0; } #endif file-5.46/src/print.c000664 023540 023540 00000024415 14700541452 016230 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * print.c - debugging printout routines */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: print.c,v 1.106 2024/09/01 13:50:01 christos Exp $") #endif /* lint */ #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include "cdf.h" #ifndef COMPILE_ONLY file_protected void file_mdump(struct magic *m) { static const char optyp[] = { FILE_OPS }; char tbuf[256]; (void) fprintf(stderr, "%s, %u: %.*s %d", m->desc[0] == '\0' ? m->desc + 1 : "*unknown*", m->lineno, (m->cont_level & 7) + 1, ">>>>>>>>", m->offset); if (m->flag & INDIR) { (void) fprintf(stderr, "(%s,", /* Note: type is unsigned */ (m->in_type < file_nnames) ? file_names[m->in_type] : "*bad in_type*"); if (m->in_op & FILE_OPINVERSE) (void) fputc('~', stderr); (void) fprintf(stderr, "%c%d),", (CAST(size_t, m->in_op & FILE_OPS_MASK) < __arraycount(optyp)) ? optyp[m->in_op & FILE_OPS_MASK] : '?', m->in_offset); } (void) fprintf(stderr, " %s%s", (m->flag & UNSIGNED) ? "u" : "", /* Note: type is unsigned */ (m->type < file_nnames) ? file_names[m->type] : "*bad type"); if (m->mask_op & FILE_OPINVERSE) (void) fputc('~', stderr); if (IS_STRING(m->type)) { if (m->str_flags) { (void) fputc('/', stderr); if (m->str_flags & STRING_COMPACT_WHITESPACE) (void) fputc(CHAR_COMPACT_WHITESPACE, stderr); if (m->str_flags & STRING_COMPACT_OPTIONAL_WHITESPACE) (void) fputc(CHAR_COMPACT_OPTIONAL_WHITESPACE, stderr); if (m->str_flags & STRING_IGNORE_LOWERCASE) (void) fputc(CHAR_IGNORE_LOWERCASE, stderr); if (m->str_flags & STRING_IGNORE_UPPERCASE) (void) fputc(CHAR_IGNORE_UPPERCASE, stderr); if (m->str_flags & REGEX_OFFSET_START) (void) fputc(CHAR_REGEX_OFFSET_START, stderr); if (m->str_flags & STRING_TEXTTEST) (void) fputc(CHAR_TEXTTEST, stderr); if (m->str_flags & STRING_BINTEST) (void) fputc(CHAR_BINTEST, stderr); if (m->str_flags & PSTRING_1_BE) (void) fputc(CHAR_PSTRING_1_BE, stderr); if (m->str_flags & PSTRING_2_BE) (void) fputc(CHAR_PSTRING_2_BE, stderr); if (m->str_flags & PSTRING_2_LE) (void) fputc(CHAR_PSTRING_2_LE, stderr); if (m->str_flags & PSTRING_4_BE) (void) fputc(CHAR_PSTRING_4_BE, stderr); if (m->str_flags & PSTRING_4_LE) (void) fputc(CHAR_PSTRING_4_LE, stderr); if (m->str_flags & PSTRING_LENGTH_INCLUDES_ITSELF) (void) fputc( CHAR_PSTRING_LENGTH_INCLUDES_ITSELF, stderr); } if (m->str_range) (void) fprintf(stderr, "/%u", m->str_range); } else { if (CAST(size_t, m->mask_op & FILE_OPS_MASK) < __arraycount(optyp)) (void) fputc(optyp[m->mask_op & FILE_OPS_MASK], stderr); else (void) fputc('?', stderr); if (m->num_mask) { (void) fprintf(stderr, "%.8llx", CAST(unsigned long long, m->num_mask)); } } (void) fprintf(stderr, ",%c", m->reln); if (m->reln != 'x') { switch (m->type) { case FILE_BYTE: case FILE_SHORT: case FILE_LONG: case FILE_LESHORT: case FILE_LELONG: case FILE_MELONG: case FILE_BESHORT: case FILE_BELONG: case FILE_INDIRECT: (void) fprintf(stderr, "%d", CAST(int32_t, m->value.l)); break; case FILE_BEQUAD: case FILE_LEQUAD: case FILE_QUAD: case FILE_OFFSET: (void) fprintf(stderr, "%" INT64_T_FORMAT "d", CAST(long long, m->value.q)); break; case FILE_PSTRING: case FILE_STRING: case FILE_REGEX: case FILE_BESTRING16: case FILE_LESTRING16: case FILE_SEARCH: file_showstr(stderr, m->value.s, CAST(size_t, m->vallen)); break; case FILE_DATE: case FILE_LEDATE: case FILE_BEDATE: case FILE_MEDATE: (void)fprintf(stderr, "%s,", file_fmtdatetime(tbuf, sizeof(tbuf), m->value.l, 0)); break; case FILE_LDATE: case FILE_LELDATE: case FILE_BELDATE: case FILE_MELDATE: (void)fprintf(stderr, "%s,", file_fmtdatetime(tbuf, sizeof(tbuf), m->value.l, FILE_T_LOCAL)); break; case FILE_QDATE: case FILE_LEQDATE: case FILE_BEQDATE: (void)fprintf(stderr, "%s,", file_fmtdatetime(tbuf, sizeof(tbuf), m->value.q, 0)); break; case FILE_QLDATE: case FILE_LEQLDATE: case FILE_BEQLDATE: (void)fprintf(stderr, "%s,", file_fmtdatetime(tbuf, sizeof(tbuf), m->value.q, FILE_T_LOCAL)); break; case FILE_QWDATE: case FILE_LEQWDATE: case FILE_BEQWDATE: (void)fprintf(stderr, "%s,", file_fmtdatetime(tbuf, sizeof(tbuf), m->value.q, FILE_T_WINDOWS)); break; case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: (void) fprintf(stderr, "%G", m->value.f); break; case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: (void) fprintf(stderr, "%G", m->value.d); break; case FILE_LEVARINT: case FILE_BEVARINT: (void)fprintf(stderr, "%s", file_fmtvarint( tbuf, sizeof(tbuf), m->value.us, m->type)); break; case FILE_MSDOSDATE: case FILE_BEMSDOSDATE: case FILE_LEMSDOSDATE: (void)fprintf(stderr, "%s,", file_fmtdate(tbuf, sizeof(tbuf), m->value.h)); break; case FILE_MSDOSTIME: case FILE_BEMSDOSTIME: case FILE_LEMSDOSTIME: (void)fprintf(stderr, "%s,", file_fmttime(tbuf, sizeof(tbuf), m->value.h)); break; case FILE_OCTAL: (void)fprintf(stderr, "%s", file_fmtnum(tbuf, sizeof(tbuf), m->value.s, 8)); break; case FILE_DEFAULT: /* XXX - do anything here? */ break; case FILE_USE: case FILE_NAME: case FILE_DER: (void) fprintf(stderr, "'%s'", m->value.s); break; case FILE_GUID: (void) file_print_guid(tbuf, sizeof(tbuf), m->value.guid); (void) fprintf(stderr, "%s", tbuf); break; default: (void) fprintf(stderr, "*bad type %d*", m->type); break; } } (void) fprintf(stderr, ",\"%s\"]\n", m->desc); } #endif static void __attribute__((__format__(__printf__, 1, 0))) file_vmagwarn(const char *f, va_list va) { /* cuz we use stdout for most, stderr here */ (void) fflush(stdout); (void) fprintf(stderr, "Warning: "); (void) vfprintf(stderr, f, va); (void) fputc('\n', stderr); } /*VARARGS*/ file_protected void file_magwarn1(const char *f, ...) { va_list va; va_start(va, f); file_vmagwarn(f, va); va_end(va); } /*VARARGS*/ file_protected void file_magwarn(struct magic_set *ms, const char *f, ...) { va_list va; if (++ms->magwarn == ms->magwarn_max) { (void) fprintf(stderr, "%s, %lu: Maximum number of warnings (%u) exceeded.\n", ms->file, CAST(unsigned long, ms->line), ms->magwarn_max); (void) fprintf(stderr, "%s, %lu: Additional warnings are suppressed.\n", ms->file, CAST(unsigned long, ms->line)); } if (ms->magwarn >= ms->magwarn_max) { return; } if (ms->file) (void) fprintf(stderr, "%s, %lu: ", ms->file, CAST(unsigned long, ms->line)); va_start(va, f); file_vmagwarn(f, va); va_end(va); } file_protected const char * file_fmtvarint(char *buf, size_t blen, const unsigned char *us, int t) { snprintf(buf, blen, "%jd", CAST(intmax_t, file_varint2uintmax_t(us, t, NULL))); return buf; } file_protected const char * file_fmtdatetime(char *buf, size_t bsize, uint64_t v, int flags) { char *pp; time_t t; struct tm *tm, tmz; if (flags & FILE_T_WINDOWS) { struct timespec ts; cdf_timestamp_to_timespec(&ts, CAST(cdf_timestamp_t, v)); t = ts.tv_sec; } else { // XXX: perhaps detect and print something if overflow // on 32 bit time_t? t = CAST(time_t, v); } if (t > MAX_CTIME) goto out; if (flags & FILE_T_LOCAL) { tzset(); tm = localtime_r(&t, &tmz); } else { tm = gmtime_r(&t, &tmz); } if (tm == NULL) goto out; pp = asctime_r(tm, buf); if (pp == NULL) goto out; pp[strcspn(pp, "\n")] = '\0'; return pp; out: strlcpy(buf, "*Invalid datetime*", bsize); return buf; } /* * https://docs.microsoft.com/en-us/windows/win32/api/winbase/\ * nf-winbase-dosdatetimetofiletime?redirectedfrom=MSDN */ file_protected const char * file_fmtdate(char *buf, size_t bsize, uint16_t v) { struct tm tm; memset(&tm, 0, sizeof(tm)); tm.tm_mday = v & 0x1f; tm.tm_mon = ((v >> 5) & 0xf) - 1; tm.tm_year = (v >> 9) + 80; if (strftime(buf, bsize, "%a, %b %d %Y", &tm) == 0) goto out; return buf; out: strlcpy(buf, "*Invalid date*", bsize); return buf; } file_protected const char * file_fmttime(char *buf, size_t bsize, uint16_t v) { struct tm tm; memset(&tm, 0, sizeof(tm)); tm.tm_sec = (v & 0x1f) * 2; tm.tm_min = ((v >> 5) & 0x3f); tm.tm_hour = (v >> 11); if (strftime(buf, bsize, "%T", &tm) == 0) goto out; return buf; out: strlcpy(buf, "*Invalid time*", bsize); return buf; } file_protected const char * file_fmtnum(char *buf, size_t blen, const char *us, int base) { char *endptr; unsigned long long val; errno = 0; val = strtoull(us, &endptr, base); if (*endptr || errno) { bad: strlcpy(buf, "*Invalid number*", blen); return buf; } if (snprintf(buf, blen, "%llu", val) < 0) goto bad; return buf; } file-5.46/src/fsmagic.c000664 023540 023540 00000026047 14634602355 016516 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * fsmagic - magic based on filesystem info - directory, special files, etc. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: fsmagic.c,v 1.85 2022/12/26 17:31:14 christos Exp $") #endif /* lint */ #include "magic.h" #include #ifdef HAVE_UNISTD_H #include #endif #include /* Since major is a function on SVR4, we cannot use `ifndef major'. */ #ifdef MAJOR_IN_MKDEV # include # define HAVE_MAJOR #endif #ifdef HAVE_SYS_SYSMACROS_H # include #endif #ifdef MAJOR_IN_SYSMACROS # define HAVE_MAJOR #endif #if defined(major) && !defined(HAVE_MAJOR) /* Might be defined in sys/types.h. */ # define HAVE_MAJOR #endif #ifdef WIN32 # define WIN32_LEAN_AND_MEAN # include #endif #ifndef HAVE_MAJOR # define major(dev) (((dev) >> 8) & 0xff) # define minor(dev) ((dev) & 0xff) #endif #undef HAVE_MAJOR #ifdef S_IFLNK file_private int bad_link(struct magic_set *ms, int err, char *buf) { int mime = ms->flags & MAGIC_MIME; if ((mime & MAGIC_MIME_TYPE) && file_printf(ms, "inode/symlink") == -1) return -1; else if (!mime) { if (ms->flags & MAGIC_ERROR) { file_error(ms, err, "broken symbolic link to %s", buf); return -1; } if (file_printf(ms, "broken symbolic link to %s", buf) == -1) return -1; } return 1; } #endif file_private int handle_mime(struct magic_set *ms, int mime, const char *str) { if ((mime & MAGIC_MIME_TYPE)) { if (file_printf(ms, "inode/%s", str) == -1) return -1; if ((mime & MAGIC_MIME_ENCODING) && file_printf(ms, "; charset=") == -1) return -1; } if ((mime & MAGIC_MIME_ENCODING) && file_printf(ms, "binary") == -1) return -1; return 0; } file_protected int file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb) { int ret, did = 0; int mime = ms->flags & MAGIC_MIME; int silent = ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION); #ifdef S_IFLNK char buf[BUFSIZ+4]; ssize_t nch; struct stat tstatbuf; #endif if (fn == NULL) return 0; #define COMMA (did++ ? ", " : "") /* * Fstat is cheaper but fails for files you don't have read perms on. * On 4.2BSD and similar systems, use lstat() to identify symlinks. */ #ifdef S_IFLNK if ((ms->flags & MAGIC_SYMLINK) == 0) ret = lstat(fn, sb); else #endif ret = stat(fn, sb); /* don't merge into if; see "ret =" above */ #ifdef WIN32 { HANDLE hFile = CreateFile((LPCSTR)fn, 0, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hFile != INVALID_HANDLE_VALUE) { /* * Stat failed, but we can still open it - assume it's * a block device, if nothing else. */ if (ret) { sb->st_mode = S_IFBLK; ret = 0; } switch (GetFileType(hFile)) { case FILE_TYPE_CHAR: sb->st_mode |= S_IFCHR; sb->st_mode &= ~S_IFREG; break; case FILE_TYPE_PIPE: sb->st_mode |= S_IFIFO; sb->st_mode &= ~S_IFREG; break; } CloseHandle(hFile); } } #endif if (ret) { if (ms->flags & MAGIC_ERROR) { file_error(ms, errno, "cannot stat `%s'", fn); return -1; } if (file_printf(ms, "cannot open `%s' (%s)", fn, strerror(errno)) == -1) return -1; return 0; } ret = 1; if (!mime && !silent) { #ifdef S_ISUID if (sb->st_mode & S_ISUID) if (file_printf(ms, "%ssetuid", COMMA) == -1) return -1; #endif #ifdef S_ISGID if (sb->st_mode & S_ISGID) if (file_printf(ms, "%ssetgid", COMMA) == -1) return -1; #endif #ifdef S_ISVTX if (sb->st_mode & S_ISVTX) if (file_printf(ms, "%ssticky", COMMA) == -1) return -1; #endif } switch (sb->st_mode & S_IFMT) { case S_IFDIR: if (mime) { if (handle_mime(ms, mime, "directory") == -1) return -1; } else if (silent) { } else if (file_printf(ms, "%sdirectory", COMMA) == -1) return -1; break; #ifdef S_IFCHR case S_IFCHR: /* * If -s has been specified, treat character special files * like ordinary files. Otherwise, just report that they * are block special files and go on to the next file. */ if ((ms->flags & MAGIC_DEVICES) != 0) { ret = 0; break; } if (mime) { if (handle_mime(ms, mime, "chardevice") == -1) return -1; } else if (silent) { } else { #ifdef HAVE_STRUCT_STAT_ST_RDEV # ifdef dv_unit if (file_printf(ms, "%scharacter special (%d/%d/%d)", COMMA, major(sb->st_rdev), dv_unit(sb->st_rdev), dv_subunit(sb->st_rdev)) == -1) return -1; # else if (file_printf(ms, "%scharacter special (%ld/%ld)", COMMA, (long)major(sb->st_rdev), (long)minor(sb->st_rdev)) == -1) return -1; # endif #else if (file_printf(ms, "%scharacter special", COMMA) == -1) return -1; #endif } break; #endif #ifdef S_IFBLK case S_IFBLK: /* * If -s has been specified, treat block special files * like ordinary files. Otherwise, just report that they * are block special files and go on to the next file. */ if ((ms->flags & MAGIC_DEVICES) != 0) { ret = 0; break; } if (mime) { if (handle_mime(ms, mime, "blockdevice") == -1) return -1; } else if (silent) { } else { #ifdef HAVE_STRUCT_STAT_ST_RDEV # ifdef dv_unit if (file_printf(ms, "%sblock special (%d/%d/%d)", COMMA, major(sb->st_rdev), dv_unit(sb->st_rdev), dv_subunit(sb->st_rdev)) == -1) return -1; # else if (file_printf(ms, "%sblock special (%ld/%ld)", COMMA, (long)major(sb->st_rdev), (long)minor(sb->st_rdev)) == -1) return -1; # endif #else if (file_printf(ms, "%sblock special", COMMA) == -1) return -1; #endif } break; #endif /* TODO add code to handle V7 MUX and Blit MUX files */ #ifdef S_IFIFO case S_IFIFO: if((ms->flags & MAGIC_DEVICES) != 0) break; if (mime) { if (handle_mime(ms, mime, "fifo") == -1) return -1; } else if (silent) { } else if (file_printf(ms, "%sfifo (named pipe)", COMMA) == -1) return -1; break; #endif #ifdef S_IFDOOR case S_IFDOOR: if (mime) { if (handle_mime(ms, mime, "door") == -1) return -1; } else if (silent) { } else if (file_printf(ms, "%sdoor", COMMA) == -1) return -1; break; #endif #ifdef S_IFLNK case S_IFLNK: if ((nch = readlink(fn, buf, BUFSIZ-1)) <= 0) { if (ms->flags & MAGIC_ERROR) { file_error(ms, errno, "unreadable symlink `%s'", fn); return -1; } if (mime) { if (handle_mime(ms, mime, "symlink") == -1) return -1; } else if (silent) { } else if (file_printf(ms, "%sunreadable symlink `%s' (%s)", COMMA, fn, strerror(errno)) == -1) return -1; break; } buf[nch] = '\0'; /* readlink(2) does not do this */ /* If broken symlink, say so and quit early. */ #ifdef __linux__ /* * linux procfs/devfs makes symlinks like pipe:[3515864880] * that we can't stat their readlink output, so stat the * original filename instead. */ if (stat(fn, &tstatbuf) < 0) return bad_link(ms, errno, buf); #else if (*buf == '/') { if (stat(buf, &tstatbuf) < 0) return bad_link(ms, errno, buf); } else { char *tmp; char buf2[BUFSIZ+BUFSIZ+4]; if ((tmp = CCAST(char *, strrchr(fn, '/'))) == NULL) { tmp = buf; /* in current directory anyway */ } else { if (tmp - fn + 1 > BUFSIZ) { if (ms->flags & MAGIC_ERROR) { file_error(ms, 0, "path too long: `%s'", buf); return -1; } if (mime) { if (handle_mime(ms, mime, "x-path-too-long") == -1) return -1; } else if (silent) { } else if (file_printf(ms, "%spath too long: `%s'", COMMA, fn) == -1) return -1; break; } /* take dir part */ (void)strlcpy(buf2, fn, sizeof buf2); buf2[tmp - fn + 1] = '\0'; /* plus (rel) link */ (void)strlcat(buf2, buf, sizeof buf2); tmp = buf2; } if (stat(tmp, &tstatbuf) < 0) return bad_link(ms, errno, buf); } #endif /* Otherwise, handle it. */ if ((ms->flags & MAGIC_SYMLINK) != 0) { const char *p; ms->flags &= MAGIC_SYMLINK; p = magic_file(ms, buf); ms->flags |= MAGIC_SYMLINK; if (p == NULL) return -1; } else { /* just print what it points to */ if (mime) { if (handle_mime(ms, mime, "symlink") == -1) return -1; } else if (silent) { } else if (file_printf(ms, "%ssymbolic link to %s", COMMA, buf) == -1) return -1; } break; #endif #ifdef S_IFSOCK #ifndef __COHERENT__ case S_IFSOCK: if (mime) { if (handle_mime(ms, mime, "socket") == -1) return -1; } else if (silent) { } else if (file_printf(ms, "%ssocket", COMMA) == -1) return -1; break; #endif #endif case S_IFREG: /* * regular file, check next possibility * * If stat() tells us the file has zero length, report here that * the file is empty, so we can skip all the work of opening and * reading the file. * But if the -s option has been given, we skip this * optimization, since on some systems, stat() reports zero * size for raw disk partitions. (If the block special device * really has zero length, the fact that it is empty will be * detected and reported correctly when we read the file.) */ if ((ms->flags & MAGIC_DEVICES) == 0 && sb->st_size == 0) { if (mime) { if (handle_mime(ms, mime, "x-empty") == -1) return -1; } else if (silent) { } else if (file_printf(ms, "%sempty", COMMA) == -1) return -1; break; } ret = 0; break; default: file_error(ms, 0, "invalid mode 0%o", sb->st_mode); return -1; /*NOTREACHED*/ } if (!silent && !mime && did && ret == 0) { if (file_printf(ms, " ") == -1) return -1; } /* * If we were looking for extensions or apple (silent) it is not our * job to print here, so don't count this as a match. */ if (ret == 1 && silent) return 0; return ret; } file-5.46/src/funcs.c000664 023540 023540 00000050614 14634602355 016220 0ustar00christoschristos000000 000000 /* * Copyright (c) Christos Zoulas 2003. * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: funcs.c,v 1.142 2023/07/30 14:41:14 christos Exp $") #endif /* lint */ #include "magic.h" #include #include #include #include #include #ifdef HAVE_UNISTD_H #include /* for pipe2() */ #endif #if defined(HAVE_WCHAR_H) #include #endif #if defined(HAVE_WCTYPE_H) #include #endif #include #ifndef SIZE_MAX #define SIZE_MAX ((size_t)~0) #endif file_protected char * file_copystr(char *buf, size_t blen, size_t width, const char *str) { if (blen == 0) return buf; if (width >= blen) width = blen - 1; memcpy(buf, str, width); buf[width] = '\0'; return buf; } file_private void file_clearbuf(struct magic_set *ms) { free(ms->o.buf); ms->o.buf = NULL; ms->o.blen = 0; } file_private int file_checkfield(char *msg, size_t mlen, const char *what, const char **pp) { const char *p = *pp; int fw = 0; while (*p && isdigit((unsigned char)*p)) fw = fw * 10 + (*p++ - '0'); *pp = p; if (fw < 1024) return 1; if (msg) snprintf(msg, mlen, "field %s too large: %d", what, fw); return 0; } file_protected int file_checkfmt(char *msg, size_t mlen, const char *fmt) { const char *p; for (p = fmt; *p; p++) { if (*p != '%') continue; if (*++p == '%') continue; // Skip uninteresting. while (strchr("#0.'+- ", *p) != NULL) p++; if (*p == '*') { if (msg) snprintf(msg, mlen, "* not allowed in format"); return -1; } if (!file_checkfield(msg, mlen, "width", &p)) return -1; if (*p == '.') { p++; if (!file_checkfield(msg, mlen, "precision", &p)) return -1; } if (!isalpha((unsigned char)*p)) { if (msg) snprintf(msg, mlen, "bad format char: %c", *p); return -1; } } return 0; } /* * Like printf, only we append to a buffer. */ file_protected int file_vprintf(struct magic_set *ms, const char *fmt, va_list ap) { int len; char *buf, *newstr; char tbuf[1024]; if (ms->event_flags & EVENT_HAD_ERR) return 0; if (file_checkfmt(tbuf, sizeof(tbuf), fmt)) { file_clearbuf(ms); file_error(ms, 0, "Bad magic format `%s' (%s)", fmt, tbuf); return -1; } len = vasprintf(&buf, fmt, ap); if (len < 0 || (size_t)len > 1024 || len + ms->o.blen > 1024 * 1024) { size_t blen = ms->o.blen; free(buf); file_clearbuf(ms); file_error(ms, 0, "Output buffer space exceeded %d+%" SIZE_T_FORMAT "u", len, blen); return -1; } if (ms->o.buf != NULL) { len = asprintf(&newstr, "%s%s", ms->o.buf, buf); free(buf); if (len < 0) goto out; free(ms->o.buf); buf = newstr; } ms->o.buf = buf; ms->o.blen = len; return 0; out: file_clearbuf(ms); file_error(ms, errno, "vasprintf failed"); return -1; } file_protected int file_printf(struct magic_set *ms, const char *fmt, ...) { int rv; va_list ap; va_start(ap, fmt); rv = file_vprintf(ms, fmt, ap); va_end(ap); return rv; } /* * error - print best error message possible */ /*VARARGS*/ __attribute__((__format__(__printf__, 3, 0))) file_private void file_error_core(struct magic_set *ms, int error, const char *f, va_list va, size_t lineno) { /* Only the first error is ok */ if (ms->event_flags & EVENT_HAD_ERR) return; if (lineno != 0) { file_clearbuf(ms); (void)file_printf(ms, "line %" SIZE_T_FORMAT "u:", lineno); } if (ms->o.buf && *ms->o.buf) (void)file_printf(ms, " "); (void)file_vprintf(ms, f, va); if (error > 0) (void)file_printf(ms, " (%s)", strerror(error)); ms->event_flags |= EVENT_HAD_ERR; ms->error = error; } /*VARARGS*/ file_protected void file_error(struct magic_set *ms, int error, const char *f, ...) { va_list va; va_start(va, f); file_error_core(ms, error, f, va, 0); va_end(va); } /* * Print an error with magic line number. */ /*VARARGS*/ file_protected void file_magerror(struct magic_set *ms, const char *f, ...) { va_list va; va_start(va, f); file_error_core(ms, 0, f, va, ms->line); va_end(va); } file_protected void file_oomem(struct magic_set *ms, size_t len) { file_error(ms, errno, "cannot allocate %" SIZE_T_FORMAT "u bytes", len); } file_protected void file_badseek(struct magic_set *ms) { file_error(ms, errno, "error seeking"); } file_protected void file_badread(struct magic_set *ms) { file_error(ms, errno, "error reading"); } #ifndef COMPILE_ONLY #define FILE_SEPARATOR "\n- " file_protected int file_separator(struct magic_set *ms) { return file_printf(ms, FILE_SEPARATOR); } static void trim_separator(struct magic_set *ms) { size_t l; if (ms->o.buf == NULL) return; l = strlen(ms->o.buf); if (l < sizeof(FILE_SEPARATOR)) return; l -= sizeof(FILE_SEPARATOR) - 1; if (strcmp(ms->o.buf + l, FILE_SEPARATOR) != 0) return; ms->o.buf[l] = '\0'; } static int checkdone(struct magic_set *ms, int *rv) { if ((ms->flags & MAGIC_CONTINUE) == 0) return 1; if (file_separator(ms) == -1) *rv = -1; return 0; } file_protected int file_default(struct magic_set *ms, size_t nb) { if (ms->flags & MAGIC_MIME) { if ((ms->flags & MAGIC_MIME_TYPE) && file_printf(ms, "application/%s", nb ? "octet-stream" : "x-empty") == -1) return -1; return 1; } if (ms->flags & MAGIC_APPLE) { if (file_printf(ms, "UNKNUNKN") == -1) return -1; return 1; } if (ms->flags & MAGIC_EXTENSION) { if (file_printf(ms, "???") == -1) return -1; return 1; } return 0; } /* * The magic detection functions return: * 1: found * 0: not found * -1: error */ /*ARGSUSED*/ file_protected int file_buffer(struct magic_set *ms, int fd, struct stat *st, const char *inname __attribute__ ((__unused__)), const void *buf, size_t nb) { int m = 0, rv = 0, looks_text = 0; const char *code = NULL; const char *code_mime = "binary"; const char *def = "data"; const char *ftype = NULL; char *rbuf = NULL; struct buffer b; buffer_init(&b, fd, st, buf, nb); ms->mode = b.st.st_mode; if (nb == 0) { def = "empty"; goto simple; } else if (nb == 1) { def = "very short file (no magic)"; goto simple; } if ((ms->flags & MAGIC_NO_CHECK_ENCODING) == 0) { looks_text = file_encoding(ms, &b, NULL, 0, &code, &code_mime, &ftype); } #ifdef __EMX__ if ((ms->flags & MAGIC_NO_CHECK_APPTYPE) == 0 && inname) { m = file_os2_apptype(ms, inname, &b); if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try os2_apptype %d]\n", m); switch (m) { case -1: return -1; case 0: break; default: return 1; } } #endif #if HAVE_FORK /* try compression stuff */ if ((ms->flags & MAGIC_NO_CHECK_COMPRESS) == 0) { m = file_zmagic(ms, &b, inname); if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try zmagic %d]\n", m); if (m) { goto done_encoding; } } #endif /* Check if we have a tar file */ if ((ms->flags & MAGIC_NO_CHECK_TAR) == 0) { m = file_is_tar(ms, &b); if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try tar %d]\n", m); if (m) { if (checkdone(ms, &rv)) goto done; } } /* Check if we have a JSON file */ if ((ms->flags & MAGIC_NO_CHECK_JSON) == 0) { m = file_is_json(ms, &b); if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try json %d]\n", m); if (m) { if (checkdone(ms, &rv)) goto done; } } /* Check if we have a CSV file */ if ((ms->flags & MAGIC_NO_CHECK_CSV) == 0) { m = file_is_csv(ms, &b, looks_text, code); if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try csv %d]\n", m); if (m) { if (checkdone(ms, &rv)) goto done; } } /* Check if we have a SIMH tape file */ if ((ms->flags & MAGIC_NO_CHECK_SIMH) == 0) { m = file_is_simh(ms, &b); if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try simh %d]\n", m); if (m) { if (checkdone(ms, &rv)) goto done; } } /* Check if we have a CDF file */ if ((ms->flags & MAGIC_NO_CHECK_CDF) == 0) { m = file_trycdf(ms, &b); if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try cdf %d]\n", m); if (m) { if (checkdone(ms, &rv)) goto done; } } #ifdef BUILTIN_ELF if ((ms->flags & MAGIC_NO_CHECK_ELF) == 0 && nb > 5 && fd != -1) { file_pushbuf_t *pb; /* * We matched something in the file, so this * *might* be an ELF file, and the file is at * least 5 bytes long, so if it's an ELF file * it has at least one byte past the ELF magic * number - try extracting information from the * ELF headers that cannot easily be extracted * with rules in the magic file. We we don't * print the information yet. */ if ((pb = file_push_buffer(ms)) == NULL) return -1; rv = file_tryelf(ms, &b); rbuf = file_pop_buffer(ms, pb); if (rv == -1) { free(rbuf); rbuf = NULL; } if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try elf %d]\n", m); } #endif /* try soft magic tests */ if ((ms->flags & MAGIC_NO_CHECK_SOFT) == 0) { m = file_softmagic(ms, &b, NULL, NULL, BINTEST, looks_text); if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try softmagic %d]\n", m); if (m == 1 && rbuf) { if (file_printf(ms, "%s", rbuf) == -1) goto done; } if (m) { if (checkdone(ms, &rv)) goto done; } } /* try text properties */ if ((ms->flags & MAGIC_NO_CHECK_TEXT) == 0) { m = file_ascmagic(ms, &b, looks_text); if ((ms->flags & MAGIC_DEBUG) != 0) (void)fprintf(stderr, "[try ascmagic %d]\n", m); if (m) { goto done; } } simple: /* give up */ if (m == 0) { m = 1; rv = file_default(ms, nb); if (rv == 0) if (file_printf(ms, "%s", def) == -1) rv = -1; } done: trim_separator(ms); if ((ms->flags & MAGIC_MIME_ENCODING) != 0) { if (ms->flags & MAGIC_MIME_TYPE) if (file_printf(ms, "; charset=") == -1) rv = -1; if (file_printf(ms, "%s", code_mime) == -1) rv = -1; } #if HAVE_FORK done_encoding: #endif free(rbuf); buffer_fini(&b); if (rv) return rv; return m; } #endif file_protected int file_reset(struct magic_set *ms, int checkloaded) { if (checkloaded && ms->mlist[0] == NULL) { file_error(ms, 0, "no magic files loaded"); return -1; } file_clearbuf(ms); if (ms->o.pbuf) { free(ms->o.pbuf); ms->o.pbuf = NULL; } ms->event_flags &= ~EVENT_HAD_ERR; ms->error = -1; return 0; } #define OCTALIFY(n, o) \ /*LINTED*/ \ (void)(*(n)++ = '\\', \ *(n)++ = ((CAST(uint32_t, *(o)) >> 6) & 3) + '0', \ *(n)++ = ((CAST(uint32_t, *(o)) >> 3) & 7) + '0', \ *(n)++ = ((CAST(uint32_t, *(o)) >> 0) & 7) + '0', \ (o)++) file_protected const char * file_getbuffer(struct magic_set *ms) { char *pbuf, *op, *np; size_t psize, len; if (ms->event_flags & EVENT_HAD_ERR) return NULL; if (ms->flags & MAGIC_RAW) return ms->o.buf; if (ms->o.buf == NULL) return NULL; /* * 4 is for octal representation, + 1 is for NUL */ len = strlen(ms->o.buf); if (len > (SIZE_MAX - 1) / 4) { file_oomem(ms, len); return NULL; } psize = len * 4 + 1; if ((pbuf = CAST(char *, realloc(ms->o.pbuf, psize))) == NULL) { file_oomem(ms, psize); return NULL; } ms->o.pbuf = pbuf; #if defined(HAVE_WCHAR_H) && defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH) { mbstate_t state; wchar_t nextchar; int mb_conv = 1; size_t bytesconsumed; char *eop; (void)memset(&state, 0, sizeof(mbstate_t)); np = ms->o.pbuf; op = ms->o.buf; eop = op + len; while (op < eop) { bytesconsumed = mbrtowc(&nextchar, op, CAST(size_t, eop - op), &state); if (bytesconsumed == CAST(size_t, -1) || bytesconsumed == CAST(size_t, -2)) { mb_conv = 0; break; } if (iswprint(nextchar)) { (void)memcpy(np, op, bytesconsumed); op += bytesconsumed; np += bytesconsumed; } else { while (bytesconsumed-- > 0) OCTALIFY(np, op); } } *np = '\0'; /* Parsing succeeded as a multi-byte sequence */ if (mb_conv != 0) return ms->o.pbuf; } #endif for (np = ms->o.pbuf, op = ms->o.buf; *op;) { if (isprint(CAST(unsigned char, *op))) { *np++ = *op++; } else { OCTALIFY(np, op); } } *np = '\0'; return ms->o.pbuf; } file_protected int file_check_mem(struct magic_set *ms, unsigned int level) { size_t len; if (level >= ms->c.len) { len = (ms->c.len = 20 + level) * sizeof(*ms->c.li); ms->c.li = CAST(struct level_info *, (ms->c.li == NULL) ? malloc(len) : realloc(ms->c.li, len)); if (ms->c.li == NULL) { file_oomem(ms, len); return -1; } } ms->c.li[level].got_match = 0; #ifdef ENABLE_CONDITIONALS ms->c.li[level].last_match = 0; ms->c.li[level].last_cond = COND_NONE; #endif /* ENABLE_CONDITIONALS */ return 0; } file_protected size_t file_printedlen(const struct magic_set *ms) { return ms->o.blen; } file_protected int file_replace(struct magic_set *ms, const char *pat, const char *rep) { file_regex_t rx; int rc, rv = -1; rc = file_regcomp(ms, &rx, pat, REG_EXTENDED); if (rc == 0) { regmatch_t rm; int nm = 0; while (file_regexec(ms, &rx, ms->o.buf, 1, &rm, 0) == 0) { ms->o.buf[rm.rm_so] = '\0'; if (file_printf(ms, "%s%s", rep, rm.rm_eo != 0 ? ms->o.buf + rm.rm_eo : "") == -1) goto out; nm++; } rv = nm; } out: file_regfree(&rx); return rv; } file_private int check_regex(struct magic_set *ms, const char *pat) { char sbuf[512]; unsigned char oc = '\0'; const char *p; unsigned long l; for (p = pat; *p; p++) { unsigned char c = *p; // Avoid repetition if (c == oc && strchr("?*+{", c) != NULL) { size_t len = strlen(pat); file_magwarn(ms, "repetition-operator operand `%c' " "invalid in regex `%s'", c, file_printable(ms, sbuf, sizeof(sbuf), pat, len)); return -1; } if (c == '{') { char *ep, *eep; errno = 0; l = strtoul(p + 1, &ep, 10); if (ep != p + 1 && l > 1000) goto bounds; if (*ep == ',') { l = strtoul(ep + 1, &eep, 10); if (eep != ep + 1 && l > 1000) goto bounds; } } oc = c; if (isprint(c) || isspace(c) || c == '\b' || c == 0x8a) // XXX: apple magic fixme continue; size_t len = strlen(pat); file_magwarn(ms, "non-ascii characters in regex \\%#o `%s'", c, file_printable(ms, sbuf, sizeof(sbuf), pat, len)); return -1; } return 0; bounds: file_magwarn(ms, "bounds too large %ld in regex `%s'", l, pat); return -1; } file_protected int file_regcomp(struct magic_set *ms file_locale_used, file_regex_t *rx, const char *pat, int flags) { if (check_regex(ms, pat) == -1) return -1; #ifdef USE_C_LOCALE locale_t old = uselocale(ms->c_lc_ctype); assert(old != NULL); #else char old[1024]; strlcpy(old, setlocale(LC_CTYPE, NULL), sizeof(old)); (void)setlocale(LC_CTYPE, "C"); #endif int rc; rc = regcomp(rx, pat, flags); #ifdef USE_C_LOCALE uselocale(old); #else (void)setlocale(LC_CTYPE, old); #endif if (rc > 0 && (ms->flags & MAGIC_CHECK)) { char errmsg[512], buf[512]; (void)regerror(rc, rx, errmsg, sizeof(errmsg)); file_magerror(ms, "regex error %d for `%s', (%s)", rc, file_printable(ms, buf, sizeof(buf), pat, strlen(pat)), errmsg); } return rc; } /*ARGSUSED*/ file_protected int file_regexec(struct magic_set *ms file_locale_used, file_regex_t *rx, const char *str, size_t nmatch, regmatch_t* pmatch, int eflags) { #ifdef USE_C_LOCALE locale_t old = uselocale(ms->c_lc_ctype); assert(old != NULL); #else char old[1024]; strlcpy(old, setlocale(LC_CTYPE, NULL), sizeof(old)); (void)setlocale(LC_CTYPE, "C"); #endif int rc; /* XXX: force initialization because glibc does not always do this */ if (nmatch != 0) memset(pmatch, 0, nmatch * sizeof(*pmatch)); rc = regexec(rx, str, nmatch, pmatch, eflags); #ifdef USE_C_LOCALE uselocale(old); #else (void)setlocale(LC_CTYPE, old); #endif return rc; } file_protected void file_regfree(file_regex_t *rx) { regfree(rx); } file_protected file_pushbuf_t * file_push_buffer(struct magic_set *ms) { file_pushbuf_t *pb; if (ms->event_flags & EVENT_HAD_ERR) return NULL; if ((pb = (CAST(file_pushbuf_t *, malloc(sizeof(*pb))))) == NULL) return NULL; pb->buf = ms->o.buf; pb->blen = ms->o.blen; pb->offset = ms->offset; ms->o.buf = NULL; ms->o.blen = 0; ms->offset = 0; return pb; } file_protected char * file_pop_buffer(struct magic_set *ms, file_pushbuf_t *pb) { char *rbuf; if (ms->event_flags & EVENT_HAD_ERR) { free(pb->buf); free(pb); return NULL; } rbuf = ms->o.buf; ms->o.buf = pb->buf; ms->o.blen = pb->blen; ms->offset = pb->offset; free(pb); return rbuf; } /* * convert string to ascii printable format. */ file_protected char * file_printable(struct magic_set *ms, char *buf, size_t bufsiz, const char *str, size_t slen) { char *ptr, *eptr = buf + bufsiz - 1; const unsigned char *s = RCAST(const unsigned char *, str); const unsigned char *es = s + slen; for (ptr = buf; ptr < eptr && s < es && *s; s++) { if ((ms->flags & MAGIC_RAW) != 0 || isprint(*s)) { *ptr++ = *s; continue; } if (ptr >= eptr - 3) break; *ptr++ = '\\'; *ptr++ = ((CAST(unsigned int, *s) >> 6) & 7) + '0'; *ptr++ = ((CAST(unsigned int, *s) >> 3) & 7) + '0'; *ptr++ = ((CAST(unsigned int, *s) >> 0) & 7) + '0'; } *ptr = '\0'; return buf; } struct guid { uint32_t data1; uint16_t data2; uint16_t data3; uint8_t data4[8]; }; file_protected int file_parse_guid(const char *s, uint64_t *guid) { struct guid *g = CAST(struct guid *, CAST(void *, guid)); #ifndef WIN32 return sscanf(s, "%8x-%4hx-%4hx-%2hhx%2hhx-%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx", &g->data1, &g->data2, &g->data3, &g->data4[0], &g->data4[1], &g->data4[2], &g->data4[3], &g->data4[4], &g->data4[5], &g->data4[6], &g->data4[7]) == 11 ? 0 : -1; #else /* MS-Windows runtime doesn't support %hhx, except under non-default __USE_MINGW_ANSI_STDIO. */ uint16_t data16[8]; int rv = sscanf(s, "%8x-%4hx-%4hx-%2hx%2hx-%2hx%2hx%2hx%2hx%2hx%2hx", &g->data1, &g->data2, &g->data3, &data16[0], &data16[1], &data16[2], &data16[3], &data16[4], &data16[5], &data16[6], &data16[7]) == 11 ? 0 : -1; int i; for (i = 0; i < 8; i++) g->data4[i] = data16[i]; return rv; #endif } file_protected int file_print_guid(char *str, size_t len, const uint64_t *guid) { const struct guid *g = CAST(const struct guid *, CAST(const void *, guid)); #ifndef WIN32 return snprintf(str, len, "%.8X-%.4hX-%.4hX-%.2hhX%.2hhX-" "%.2hhX%.2hhX%.2hhX%.2hhX%.2hhX%.2hhX", g->data1, g->data2, g->data3, g->data4[0], g->data4[1], g->data4[2], g->data4[3], g->data4[4], g->data4[5], g->data4[6], g->data4[7]); #else return snprintf(str, len, "%.8X-%.4hX-%.4hX-%.2hX%.2hX-" "%.2hX%.2hX%.2hX%.2hX%.2hX%.2hX", g->data1, g->data2, g->data3, g->data4[0], g->data4[1], g->data4[2], g->data4[3], g->data4[4], g->data4[5], g->data4[6], g->data4[7]); #endif } file_protected int file_pipe_closexec(int *fds) { #ifdef __MINGW32__ return 0; #elif defined(HAVE_PIPE2) return pipe2(fds, O_CLOEXEC); #else if (pipe(fds) == -1) return -1; # ifdef F_SETFD (void)fcntl(fds[0], F_SETFD, FD_CLOEXEC); (void)fcntl(fds[1], F_SETFD, FD_CLOEXEC); # endif return 0; #endif } file_protected int file_clear_closexec(int fd) { #ifdef F_SETFD return fcntl(fd, F_SETFD, 0); #else return 0; #endif } file_protected char * file_strtrim(char *str) { char *last; while (isspace(CAST(unsigned char, *str))) str++; last = str; while (*last) last++; --last; while (isspace(CAST(unsigned char, *last))) last--; *++last = '\0'; return str; } file-5.46/src/file.h000664 023540 023540 00000054434 14721636234 016032 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * file.h - definitions for file(1) program * @(#)$File: file.h,v 1.258 2024/11/27 15:37:00 christos Exp $ */ #ifndef __file_h__ #define __file_h__ #ifdef HAVE_CONFIG_H #include #endif #ifdef HAVE_STDINT_H #include #endif #ifdef HAVE_INTTYPES_H #include #endif #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS #endif #ifndef __STDC_FORMAT_MACROS #define __STDC_FORMAT_MACROS #endif #ifdef _WIN32 # ifdef PRIu32 # ifdef _WIN64 # define SIZE_T_FORMAT PRIu64 # else # define SIZE_T_FORMAT PRIu32 # endif # define INT64_T_FORMAT PRIi64 # define INTMAX_T_FORMAT PRIiMAX # else # ifdef _WIN64 # define SIZE_T_FORMAT "I64" # else # define SIZE_T_FORMAT "" # endif # define INT64_T_FORMAT "I64" # define INTMAX_T_FORMAT "I64" # endif #else # define SIZE_T_FORMAT "z" # define INT64_T_FORMAT "ll" # define INTMAX_T_FORMAT "j" #endif #include /* Include that here, to make sure __P gets defined */ #include #include /* For open and flags */ #include #include #include #ifndef WIN32 #include #endif /* Do this here and now, because struct stat gets re-defined on solaris */ #include #include #include #if defined(HAVE_XLOCALE_H) #include #endif #define ENABLE_CONDITIONALS #ifndef MAGIC #define MAGIC "/etc/magic" #endif #if defined(__EMX__) || defined (WIN32) #define PATHSEP ';' #else #define PATHSEP ':' #endif #define file_private static #if HAVE_VISIBILITY # if defined(WIN32) # define file_public __declspec(dllexport) # ifndef file_protected # define file_protected # endif # else # define file_public __attribute__((__visibility__("default"))) # ifndef file_protected # define file_protected __attribute__((__visibility__("hidden"))) # endif # endif #else # define file_public # ifndef file_protected # define file_protected # endif #endif #ifndef __arraycount #define __arraycount(a) (sizeof(a) / sizeof(a[0])) #endif #ifndef __GNUC_PREREQ__ #ifdef __GNUC__ #define __GNUC_PREREQ__(x, y) \ ((__GNUC__ == (x) && __GNUC_MINOR__ >= (y)) || \ (__GNUC__ > (x))) #else #define __GNUC_PREREQ__(x, y) 0 #endif #endif #ifndef __GNUC__ #ifndef __attribute__ #define __attribute__(a) #endif #endif #ifndef MIN #define MIN(a,b) (((a) < (b)) ? (a) : (b)) #endif #ifndef MAX #define MAX(a,b) (((a) > (b)) ? (a) : (b)) #endif #ifndef O_CLOEXEC # define O_CLOEXEC 0 #endif #ifndef FD_CLOEXEC # define FD_CLOEXEC 1 #endif /* * Dec 31, 23:59:59 9999 * we need to make sure that we don't exceed 9999 because some libc * implementations like muslc crash otherwise. If you are unlucky * to be running on a system with a 32 bit time_t, then it is even less. */ #define MAX_CTIME \ CAST(time_t, sizeof(time_t) > 4 ? 0x3afff487cfULL : 0x7fffffffULL) #define FILE_BADSIZE CAST(size_t, ~0ul) #define MAXDESC 64 /* max len of text description/MIME type */ #define MAXMIME 80 /* max len of text MIME type */ #define MAXEXT 120 /* max len of text extensions */ #define MAXstring 128 /* max len of "string" types */ #define MAGICNO 0xF11E041C #define VERSIONNO 20 #define FILE_MAGICSIZE 432 #define FILE_GUID_SIZE sizeof("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX") #define FILE_LOAD 0 #define FILE_CHECK 1 #define FILE_COMPILE 2 #define FILE_LIST 3 typedef regex_t file_regex_t; struct buffer { int fd; struct stat st; const void *fbuf; size_t flen; off_t eoff; void *ebuf; size_t elen; }; union VALUETYPE { uint8_t b; uint16_t h; uint32_t l; uint64_t q; uint8_t hs[2]; /* 2 bytes of a fixed-endian "short" */ uint8_t hl[4]; /* 4 bytes of a fixed-endian "long" */ uint8_t hq[8]; /* 8 bytes of a fixed-endian "quad" */ char s[MAXstring]; /* the search string or regex pattern */ unsigned char us[MAXstring]; uint64_t guid[2]; float f; double d; }; struct magic { /* Word 1 */ uint16_t flag; #define INDIR 0x01 /* if '(...)' appears */ #define OFFADD 0x02 /* if '>&' or '>...(&' appears */ #define INDIROFFADD 0x04 /* if '>&(' appears */ #define UNSIGNED 0x08 /* comparison is unsigned */ #define NOSPACE 0x10 /* suppress space character before output */ #define BINTEST 0x20 /* test is for a binary type (set only for top-level tests) */ #define TEXTTEST 0x40 /* for passing to file_softmagic */ #define OFFNEGATIVE 0x80 /* relative to the end of file */ #define OFFPOSITIVE 0x100 /* relative to the beginning of file */ uint8_t cont_level; /* level of ">" */ uint8_t factor; /* Word 2 */ uint8_t reln; /* relation (0=eq, '>'=gt, etc) */ uint8_t vallen; /* length of string value, if any */ uint8_t type; /* comparison type (FILE_*) */ uint8_t in_type; /* type of indirection */ #define FILE_INVALID 0 #define FILE_BYTE 1 #define FILE_SHORT 2 #define FILE_DEFAULT 3 #define FILE_LONG 4 #define FILE_STRING 5 #define FILE_DATE 6 #define FILE_BESHORT 7 #define FILE_BELONG 8 #define FILE_BEDATE 9 #define FILE_LESHORT 10 #define FILE_LELONG 11 #define FILE_LEDATE 12 #define FILE_PSTRING 13 #define FILE_LDATE 14 #define FILE_BELDATE 15 #define FILE_LELDATE 16 #define FILE_REGEX 17 #define FILE_BESTRING16 18 #define FILE_LESTRING16 19 #define FILE_SEARCH 20 #define FILE_MEDATE 21 #define FILE_MELDATE 22 #define FILE_MELONG 23 #define FILE_QUAD 24 #define FILE_LEQUAD 25 #define FILE_BEQUAD 26 #define FILE_QDATE 27 #define FILE_LEQDATE 28 #define FILE_BEQDATE 29 #define FILE_QLDATE 30 #define FILE_LEQLDATE 31 #define FILE_BEQLDATE 32 #define FILE_FLOAT 33 #define FILE_BEFLOAT 34 #define FILE_LEFLOAT 35 #define FILE_DOUBLE 36 #define FILE_BEDOUBLE 37 #define FILE_LEDOUBLE 38 #define FILE_BEID3 39 #define FILE_LEID3 40 #define FILE_INDIRECT 41 #define FILE_QWDATE 42 #define FILE_LEQWDATE 43 #define FILE_BEQWDATE 44 #define FILE_NAME 45 #define FILE_USE 46 #define FILE_CLEAR 47 #define FILE_DER 48 #define FILE_GUID 49 #define FILE_OFFSET 50 #define FILE_BEVARINT 51 #define FILE_LEVARINT 52 #define FILE_MSDOSDATE 53 #define FILE_LEMSDOSDATE 54 #define FILE_BEMSDOSDATE 55 #define FILE_MSDOSTIME 56 #define FILE_LEMSDOSTIME 57 #define FILE_BEMSDOSTIME 58 #define FILE_OCTAL 59 #define FILE_NAMES_SIZE 60 /* size of array to contain all names */ #define IS_STRING(t) \ ((t) == FILE_STRING || \ (t) == FILE_PSTRING || \ (t) == FILE_BESTRING16 || \ (t) == FILE_LESTRING16 || \ (t) == FILE_REGEX || \ (t) == FILE_SEARCH || \ (t) == FILE_INDIRECT || \ (t) == FILE_NAME || \ (t) == FILE_USE || \ (t) == FILE_OCTAL) #define FILE_FMT_NONE 0 #define FILE_FMT_NUM 1 /* "cduxXi" */ #define FILE_FMT_STR 2 /* "s" */ #define FILE_FMT_QUAD 3 /* "ll" */ #define FILE_FMT_FLOAT 4 /* "eEfFgG" */ #define FILE_FMT_DOUBLE 5 /* "eEfFgG" */ /* Word 3 */ uint8_t in_op; /* operator for indirection */ uint8_t mask_op; /* operator for mask */ #ifdef ENABLE_CONDITIONALS uint8_t cond; /* conditional type */ #else uint8_t dummy; #endif uint8_t factor_op; #define FILE_FACTOR_OP_PLUS '+' #define FILE_FACTOR_OP_MINUS '-' #define FILE_FACTOR_OP_TIMES '*' #define FILE_FACTOR_OP_DIV '/' #define FILE_FACTOR_OP_NONE '\0' #define FILE_OPS "&|^+-*/%" #define FILE_OPAND 0 #define FILE_OPOR 1 #define FILE_OPXOR 2 #define FILE_OPADD 3 #define FILE_OPMINUS 4 #define FILE_OPMULTIPLY 5 #define FILE_OPDIVIDE 6 #define FILE_OPMODULO 7 #define FILE_OPS_MASK 0x07 /* mask for above ops */ #define FILE_UNUSED_1 0x08 #define FILE_UNUSED_2 0x10 #define FILE_OPSIGNED 0x20 #define FILE_OPINVERSE 0x40 #define FILE_OPINDIRECT 0x80 #ifdef ENABLE_CONDITIONALS #define COND_NONE 0 #define COND_IF 1 #define COND_ELIF 2 #define COND_ELSE 3 #endif /* ENABLE_CONDITIONALS */ /* Word 4 */ int32_t offset; /* offset to magic number */ /* Word 5 */ int32_t in_offset; /* offset from indirection */ /* Word 6 */ uint32_t lineno; /* line number in magic file */ /* Word 7,8 */ union { uint64_t _mask; /* for use with numeric and date types */ struct { uint32_t _count; /* repeat/line count */ uint32_t _flags; /* modifier flags */ } _s; /* for use with string types */ } _u; #define num_mask _u._mask #define str_range _u._s._count #define str_flags _u._s._flags /* Words 9-24 */ union VALUETYPE value; /* either number or string */ /* Words 25-40 */ char desc[MAXDESC]; /* description */ /* Words 41-60 */ char mimetype[MAXMIME]; /* MIME type */ /* Words 61-62 */ char apple[8]; /* APPLE CREATOR/TYPE */ /* Words 63-78 */ char ext[MAXEXT]; /* Popular extensions from old 64 raised by 56 for sqlite/sqlite3/... */ }; #define BIT(A) (1 << (A)) #define STRING_COMPACT_WHITESPACE BIT(0) #define STRING_COMPACT_OPTIONAL_WHITESPACE BIT(1) #define STRING_IGNORE_LOWERCASE BIT(2) #define STRING_IGNORE_UPPERCASE BIT(3) #define REGEX_OFFSET_START BIT(4) #define STRING_TEXTTEST BIT(5) #define STRING_BINTEST BIT(6) #define PSTRING_1_BE BIT(7) #define PSTRING_1_LE BIT(7) #define PSTRING_2_BE BIT(8) #define PSTRING_2_LE BIT(9) #define PSTRING_4_BE BIT(10) #define PSTRING_4_LE BIT(11) #define REGEX_LINE_COUNT BIT(11) #define PSTRING_LEN \ (PSTRING_1_BE|PSTRING_2_LE|PSTRING_2_BE|PSTRING_4_LE|PSTRING_4_BE) #define PSTRING_LENGTH_INCLUDES_ITSELF BIT(12) #define STRING_TRIM BIT(13) #define STRING_FULL_WORD BIT(14) #define CHAR_COMPACT_WHITESPACE 'W' #define CHAR_COMPACT_OPTIONAL_WHITESPACE 'w' #define CHAR_IGNORE_LOWERCASE 'c' #define CHAR_IGNORE_UPPERCASE 'C' #define CHAR_REGEX_OFFSET_START 's' #define CHAR_TEXTTEST 't' #define CHAR_TRIM 'T' #define CHAR_FULL_WORD 'f' #define CHAR_BINTEST 'b' #define CHAR_PSTRING_1_BE 'B' #define CHAR_PSTRING_1_LE 'B' #define CHAR_PSTRING_2_BE 'H' #define CHAR_PSTRING_2_LE 'h' #define CHAR_PSTRING_4_BE 'L' #define CHAR_PSTRING_4_LE 'l' #define CHAR_PSTRING_LENGTH_INCLUDES_ITSELF 'J' #define STRING_IGNORE_CASE (STRING_IGNORE_LOWERCASE|STRING_IGNORE_UPPERCASE) #define STRING_DEFAULT_RANGE 100 #define INDIRECT_RELATIVE BIT(0) #define CHAR_INDIRECT_RELATIVE 'r' /* list of magic entries */ struct mlist { struct magic *magic; /* array of magic entries */ file_regex_t **magic_rxcomp; /* array of compiled regexps */ size_t nmagic; /* number of entries in array */ void *map; /* internal resources used by entry */ struct mlist *next, *prev; }; #ifdef __cplusplus #define CAST(T, b) static_cast(b) #define RCAST(T, b) reinterpret_cast(b) #define CCAST(T, b) const_cast(b) #else #define CAST(T, b) ((T)(b)) #define RCAST(T, b) ((T)(uintptr_t)(b)) #define CCAST(T, b) ((T)(uintptr_t)(b)) #endif struct level_info { int32_t off; int got_match; #ifdef ENABLE_CONDITIONALS int last_match; int last_cond; /* used for error checking by parse() */ #endif }; struct cont { size_t len; struct level_info *li; }; #define MAGIC_SETS 2 struct magic_set { struct mlist *mlist[MAGIC_SETS]; /* list of regular entries */ struct cont c; struct out { char *buf; /* Accumulation buffer */ size_t blen; /* Length of buffer */ char *pbuf; /* Printable buffer */ } o; uint32_t offset; /* a copy of m->offset while we */ /* are working on the magic entry */ uint32_t eoffset; /* offset from end of file */ int error; int flags; /* Control magic tests. */ int event_flags; /* Note things that happened. */ #define EVENT_HAD_ERR 0x01 char *fnamebuf; /* holding the full path/buffer */ const char *file; size_t line; /* current magic line number */ mode_t mode; /* copy of current stat mode */ uint16_t magwarn; /* current number of warnings */ /* data for searches */ struct { const char *s; /* start of search in original source */ size_t s_len; /* length of search region */ size_t offset; /* starting offset in source: XXX - should this be off_t? */ size_t rm_len; /* match length */ } search; /* FIXME: Make the string dynamically allocated so that e.g. strings matched in files can be longer than MAXstring */ union VALUETYPE ms_value; /* either number or string */ uint16_t indir_max; uint16_t name_max; uint16_t elf_shnum_max; uint16_t elf_phnum_max; uint16_t elf_notes_max; uint16_t regex_max; uint16_t magwarn_max; size_t bytes_max; /* number of bytes to read from file */ size_t encoding_max; /* bytes to look for encoding */ size_t elf_shsize_max; #ifndef FILE_BYTES_MAX # define FILE_BYTES_MAX (7 * 1024 * 1024)/* how much of the file to look at */ #endif /* above 0x6ab0f4 map offset for HelveticaNeue.dfont */ #define FILE_ELF_NOTES_MAX 256 #define FILE_ELF_PHNUM_MAX 2048 #define FILE_ELF_SHNUM_MAX 32768 #define FILE_ELF_SHSIZE_MAX (128 * 1024 * 1024) #define FILE_INDIR_MAX 50 #define FILE_NAME_MAX 100 #define FILE_REGEX_MAX 8192 #define FILE_ENCODING_MAX (64 * 1024) #define FILE_MAGWARN_MAX 64 #if defined(HAVE_NEWLOCALE) && defined(HAVE_USELOCALE) && defined(HAVE_FREELOCALE) #define USE_C_LOCALE locale_t c_lc_ctype; #define file_locale_used #else #define file_locale_used __attribute__((__unused__)) #endif }; /* Type for Unicode characters */ typedef unsigned long file_unichar_t; struct stat; #define FILE_T_LOCAL 1 #define FILE_T_WINDOWS 2 file_protected const char *file_fmtdatetime(char *, size_t, uint64_t, int); file_protected const char *file_fmtdate(char *, size_t, uint16_t); file_protected const char *file_fmttime(char *, size_t, uint16_t); file_protected const char *file_fmtvarint(char *, size_t, const unsigned char *, int); file_protected const char *file_fmtnum(char *, size_t, const char *, int); file_protected struct magic_set *file_ms_alloc(int); file_protected void file_ms_free(struct magic_set *); file_protected int file_default(struct magic_set *, size_t); file_protected int file_buffer(struct magic_set *, int, struct stat *, const char *, const void *, size_t); file_protected int file_fsmagic(struct magic_set *, const char *, struct stat *); file_protected int file_pipe2file(struct magic_set *, int, const void *, size_t); file_protected int file_vprintf(struct magic_set *, const char *, va_list) __attribute__((__format__(__printf__, 2, 0))); file_protected int file_separator(struct magic_set *); file_protected char *file_copystr(char *, size_t, size_t, const char *); file_protected int file_checkfmt(char *, size_t, const char *); file_protected size_t file_printedlen(const struct magic_set *); file_protected int file_print_guid(char *, size_t, const uint64_t *); file_protected int file_parse_guid(const char *, uint64_t *); file_protected int file_replace(struct magic_set *, const char *, const char *); file_protected int file_printf(struct magic_set *, const char *, ...) __attribute__((__format__(__printf__, 2, 3))); file_protected int file_reset(struct magic_set *, int); file_protected int file_tryelf(struct magic_set *, const struct buffer *); file_protected int file_trycdf(struct magic_set *, const struct buffer *); #if HAVE_FORK file_protected int file_zmagic(struct magic_set *, const struct buffer *, const char *); #endif file_protected int file_ascmagic(struct magic_set *, const struct buffer *, int); file_protected int file_ascmagic_with_encoding(struct magic_set *, const struct buffer *, file_unichar_t *, size_t, const char *, const char *, int); file_protected int file_encoding(struct magic_set *, const struct buffer *, file_unichar_t **, size_t *, const char **, const char **, const char **); file_protected int file_is_json(struct magic_set *, const struct buffer *); file_protected int file_is_csv(struct magic_set *, const struct buffer *, int, const char *); file_protected int file_is_simh(struct magic_set *, const struct buffer *); file_protected int file_is_tar(struct magic_set *, const struct buffer *); file_protected int file_softmagic(struct magic_set *, const struct buffer *, uint16_t *, uint16_t *, int, int); file_protected int file_apprentice(struct magic_set *, const char *, int); file_protected size_t file_magic_strength(const struct magic *, size_t); file_protected int buffer_apprentice(struct magic_set *, struct magic **, size_t *, size_t); file_protected int file_magicfind(struct magic_set *, const char *, struct mlist *); file_protected uint64_t file_signextend(struct magic_set *, struct magic *, uint64_t); file_protected uintmax_t file_varint2uintmax_t(const unsigned char *, int, size_t *); file_protected void file_badread(struct magic_set *); file_protected void file_badseek(struct magic_set *); file_protected void file_oomem(struct magic_set *, size_t); file_protected void file_error(struct magic_set *, int, const char *, ...) __attribute__((__format__(__printf__, 3, 4))); file_protected void file_magerror(struct magic_set *, const char *, ...) __attribute__((__format__(__printf__, 2, 3))); file_protected void file_magwarn(struct magic_set *, const char *, ...) __attribute__((__format__(__printf__, 2, 3))); file_protected void file_magwarn1(const char *, ...) __attribute__((__format__(__printf__, 1, 2))); file_protected void file_mdump(struct magic *); file_protected void file_showstr(FILE *, const char *, size_t); file_protected size_t file_mbswidth(struct magic_set *, const char *); file_protected const char *file_getbuffer(struct magic_set *); file_protected ssize_t sread(int, void *, size_t, int); file_protected int file_check_mem(struct magic_set *, unsigned int); file_protected int file_looks_utf8(const unsigned char *, size_t, file_unichar_t *, size_t *); file_protected size_t file_pstring_length_size(struct magic_set *, const struct magic *); file_protected size_t file_pstring_get_length(struct magic_set *, const struct magic *, const char *); file_protected char * file_printable(struct magic_set *, char *, size_t, const char *, size_t); #ifdef __EMX__ file_protected int file_os2_apptype(struct magic_set *, const char *, const void *, size_t); #endif /* __EMX__ */ file_protected int file_pipe_closexec(int *); file_protected int file_clear_closexec(int); file_protected char *file_strtrim(char *); file_protected void buffer_init(struct buffer *, int, const struct stat *, const void *, size_t); file_protected void buffer_fini(struct buffer *); file_protected int buffer_fill(const struct buffer *); file_protected int file_regcomp(struct magic_set *, file_regex_t *, const char *, int); file_protected int file_regexec(struct magic_set *, file_regex_t *, const char *, size_t, regmatch_t *, int); file_protected void file_regfree(file_regex_t *); typedef struct { char *buf; size_t blen; uint32_t offset; } file_pushbuf_t; file_protected file_pushbuf_t *file_push_buffer(struct magic_set *); file_protected char *file_pop_buffer(struct magic_set *, file_pushbuf_t *); #ifndef COMPILE_ONLY extern file_protected const char *file_names[]; extern file_protected const size_t file_nnames; #endif #ifndef HAVE_PREAD ssize_t pread(int, void *, size_t, off_t); #endif #ifndef HAVE_VASPRINTF int vasprintf(char **, const char *, va_list); #endif #ifndef HAVE_ASPRINTF int asprintf(char **, const char *, ...); #endif #ifndef HAVE_DPRINTF int dprintf(int, const char *, ...); #endif #ifndef HAVE_STRLCPY size_t strlcpy(char *, const char *, size_t); #endif #ifndef HAVE_STRLCAT size_t strlcat(char *, const char *, size_t); #endif #ifndef HAVE_STRCASESTR char *strcasestr(const char *, const char *); #endif #ifndef HAVE_GETLINE ssize_t getline(char **, size_t *, FILE *); ssize_t getdelim(char **, size_t *, int, FILE *); #endif #ifndef HAVE_CTIME_R char *ctime_r(const time_t *, char *); #endif #ifndef HAVE_ASCTIME_R char *asctime_r(const struct tm *, char *); #endif #ifndef HAVE_GMTIME_R struct tm *gmtime_r(const time_t *, struct tm *); #endif #ifndef HAVE_LOCALTIME_R struct tm *localtime_r(const time_t *, struct tm *); #endif #ifndef HAVE_FMTCHECK const char *fmtcheck(const char *, const char *) __attribute__((__format_arg__(2))); #endif #ifdef HAVE_LIBSECCOMP int enable_sandbox(void); #endif file_protected const char *file_getprogname(void); file_protected void file_setprogname(const char *); file_protected void file_err(int, const char *, ...) __attribute__((__format__(__printf__, 2, 3), __noreturn__)); file_protected void file_errx(int, const char *, ...) __attribute__((__format__(__printf__, 2, 3), __noreturn__)); file_protected void file_warn(const char *, ...) __attribute__((__format__(__printf__, 1, 2))); file_protected void file_warnx(const char *, ...) __attribute__((__format__(__printf__, 1, 2))); #if defined(HAVE_MMAP) && defined(HAVE_SYS_MMAN_H) && !defined(QUICK) #define QUICK #endif #ifndef O_BINARY #define O_BINARY 0 #endif #ifndef O_NONBLOCK #define O_NONBLOCK 0 #endif #ifndef __cplusplus #if defined(__GNUC__) && (__GNUC__ >= 3) #define FILE_RCSID(id) \ static const char rcsid[] __attribute__((__used__)) = id; #else #define FILE_RCSID(id) \ static const char *rcsid(const char *p) { \ return rcsid(p = id); \ } #endif #else #define FILE_RCSID(id) #endif #ifndef __RCSID #define __RCSID(a) #endif #endif /* __file_h__ */ file-5.46/src/readelf.h000664 023540 023540 00000042611 14713743455 016514 0ustar00christoschristos000000 000000 /* * Copyright (c) Christos Zoulas 2003. * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * @(#)Id: readelf.h,v 1.9 2002/05/16 18:45:56 christos Exp * * Provide elf data structures for non-elf machines, allowing file * non-elf hosts to determine if an elf binary is stripped. * Note: cobbled from the linux header file, with modifications */ #ifndef __fake_elf_h__ #define __fake_elf_h__ #if HAVE_STDINT_H #include #endif typedef uint32_t Elf32_Addr; typedef uint32_t Elf32_Off; typedef uint16_t Elf32_Half; typedef uint32_t Elf32_Word; typedef uint8_t Elf32_Char; typedef uint64_t Elf64_Addr; typedef uint64_t Elf64_Off; typedef uint64_t Elf64_Xword; typedef uint16_t Elf64_Half; typedef uint32_t Elf64_Word; typedef uint8_t Elf64_Char; #define EI_NIDENT 16 typedef struct { Elf32_Word a_type; /* 32-bit id */ Elf32_Word a_v; /* 32-bit id */ } Aux32Info; typedef struct { Elf64_Xword a_type; /* 64-bit id */ Elf64_Xword a_v; /* 64-bit id */ } Aux64Info; #define AT_NULL 0 /* end of vector */ #define AT_IGNORE 1 /* entry should be ignored */ #define AT_EXECFD 2 /* file descriptor of program */ #define AT_PHDR 3 /* program headers for program */ #define AT_PHENT 4 /* size of program header entry */ #define AT_PHNUM 5 /* number of program headers */ #define AT_PAGESZ 6 /* system page size */ #define AT_BASE 7 /* base address of interpreter */ #define AT_FLAGS 8 /* flags */ #define AT_ENTRY 9 /* entry point of program */ #define AT_LINUX_NOTELF 10 /* program is not ELF */ #define AT_LINUX_UID 11 /* real uid */ #define AT_LINUX_EUID 12 /* effective uid */ #define AT_LINUX_GID 13 /* real gid */ #define AT_LINUX_EGID 14 /* effective gid */ #define AT_LINUX_PLATFORM 15 /* string identifying CPU for optimizations */ #define AT_LINUX_HWCAP 16 /* arch dependent hints at CPU capabilities */ #define AT_LINUX_CLKTCK 17 /* frequency at which times() increments */ /* AT_* values 18 through 22 are reserved */ #define AT_LINUX_SECURE 23 /* secure mode boolean */ #define AT_LINUX_BASE_PLATFORM 24 /* string identifying real platform, may * differ from AT_PLATFORM. */ #define AT_LINUX_RANDOM 25 /* address of 16 random bytes */ #define AT_LINUX_HWCAP2 26 /* extension of AT_HWCAP */ #define AT_LINUX_EXECFN 31 /* filename of program */ typedef struct { Elf32_Char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; /* Entry point */ Elf32_Off e_phoff; Elf32_Off e_shoff; Elf32_Word e_flags; Elf32_Half e_ehsize; Elf32_Half e_phentsize; Elf32_Half e_phnum; Elf32_Half e_shentsize; Elf32_Half e_shnum; Elf32_Half e_shstrndx; } Elf32_Ehdr; typedef struct { Elf64_Char e_ident[EI_NIDENT]; Elf64_Half e_type; Elf64_Half e_machine; Elf64_Word e_version; Elf64_Addr e_entry; /* Entry point */ Elf64_Off e_phoff; Elf64_Off e_shoff; Elf64_Word e_flags; Elf64_Half e_ehsize; Elf64_Half e_phentsize; Elf64_Half e_phnum; Elf64_Half e_shentsize; Elf64_Half e_shnum; Elf64_Half e_shstrndx; } Elf64_Ehdr; /* e_type */ #define ET_REL 1 #define ET_EXEC 2 #define ET_DYN 3 #define ET_CORE 4 /* e_machine (used only for SunOS 5.x hardware capabilities) */ #define EM_SPARC 2 #define EM_386 3 #define EM_SPARC32PLUS 18 #define EM_SPARCV9 43 #define EM_IA_64 50 #define EM_AMD64 62 /* sh_type */ #define SHT_SYMTAB 2 #define SHT_NOTE 7 #define SHT_DYNSYM 11 #define SHT_SUNW_cap 0x6ffffff5 /* SunOS 5.x hw/sw capabilities */ /* elf type */ #define ELFDATANONE 0 /* e_ident[EI_DATA] */ #define ELFDATA2LSB 1 #define ELFDATA2MSB 2 /* elf class */ #define ELFCLASSNONE 0 #define ELFCLASS32 1 #define ELFCLASS64 2 /* magic number */ #define EI_MAG0 0 /* e_ident[] indexes */ #define EI_MAG1 1 #define EI_MAG2 2 #define EI_MAG3 3 #define EI_CLASS 4 #define EI_DATA 5 #define EI_VERSION 6 #define EI_PAD 7 #define ELFMAG0 0x7f /* EI_MAG */ #define ELFMAG1 'E' #define ELFMAG2 'L' #define ELFMAG3 'F' #define ELFMAG "\177ELF" #define OLFMAG1 'O' #define OLFMAG "\177OLF" typedef struct { Elf32_Word p_type; Elf32_Off p_offset; Elf32_Addr p_vaddr; Elf32_Addr p_paddr; Elf32_Word p_filesz; Elf32_Word p_memsz; Elf32_Word p_flags; Elf32_Word p_align; } Elf32_Phdr; typedef struct { Elf64_Word p_type; Elf64_Word p_flags; Elf64_Off p_offset; Elf64_Addr p_vaddr; Elf64_Addr p_paddr; Elf64_Xword p_filesz; Elf64_Xword p_memsz; Elf64_Xword p_align; } Elf64_Phdr; #define PT_NULL 0 /* p_type */ #define PT_LOAD 1 #define PT_DYNAMIC 2 #define PT_INTERP 3 #define PT_NOTE 4 #define PT_SHLIB 5 #define PT_PHDR 6 #define PT_NUM 7 typedef struct { Elf32_Word sh_name; Elf32_Word sh_type; Elf32_Word sh_flags; Elf32_Addr sh_addr; Elf32_Off sh_offset; Elf32_Word sh_size; Elf32_Word sh_link; Elf32_Word sh_info; Elf32_Word sh_addralign; Elf32_Word sh_entsize; } Elf32_Shdr; typedef struct { Elf64_Word sh_name; Elf64_Word sh_type; Elf64_Off sh_flags; Elf64_Addr sh_addr; Elf64_Off sh_offset; Elf64_Off sh_size; Elf64_Word sh_link; Elf64_Word sh_info; Elf64_Off sh_addralign; Elf64_Off sh_entsize; } Elf64_Shdr; #define NT_NETBSD_CORE_PROCINFO 1 #define NT_NETBSD_CORE_AUXV 2 struct NetBSD_elfcore_procinfo { /* Version 1 fields start here. */ uint32_t cpi_version; /* our version */ uint32_t cpi_cpisize; /* sizeof(this struct) */ uint32_t cpi_signo; /* killing signal */ uint32_t cpi_sigcode; /* signal code */ uint32_t cpi_sigpend[4]; /* pending signals */ uint32_t cpi_sigmask[4]; /* blocked signals */ uint32_t cpi_sigignore[4]; /* ignored signals */ uint32_t cpi_sigcatch[4]; /* caught signals */ int32_t cpi_pid; /* process ID */ int32_t cpi_ppid; /* parent process ID */ int32_t cpi_pgrp; /* process group ID */ int32_t cpi_sid; /* session ID */ uint32_t cpi_ruid; /* real user ID */ uint32_t cpi_euid; /* effective user ID */ uint32_t cpi_svuid; /* saved user ID */ uint32_t cpi_rgid; /* real group ID */ uint32_t cpi_egid; /* effective group ID */ uint32_t cpi_svgid; /* saved group ID */ uint32_t cpi_nlwps; /* number of LWPs */ int8_t cpi_name[32]; /* copy of p->p_comm */ /* Add version 2 fields below here. */ int32_t cpi_siglwp; /* LWP target of killing signal */ }; /* Note header in a PT_NOTE section */ typedef struct elf_note { Elf32_Word n_namesz; /* Name size */ Elf32_Word n_descsz; /* Content size */ Elf32_Word n_type; /* Content type */ } Elf32_Nhdr; typedef struct { Elf64_Word n_namesz; Elf64_Word n_descsz; Elf64_Word n_type; } Elf64_Nhdr; /* Notes used in ET_CORE */ #define NT_PRSTATUS 1 #define NT_PRFPREG 2 #define NT_PRPSINFO 3 #define NT_PRXREG 4 #define NT_TASKSTRUCT 4 #define NT_PLATFORM 5 #define NT_AUXV 6 /* Note types used in executables */ /* NetBSD executables (name = "NetBSD") */ #define NT_NETBSD_VERSION 1 #define NT_NETBSD_EMULATION 2 #define NT_FREEBSD_VERSION 1 #define NT_OPENBSD_VERSION 1 #define NT_DRAGONFLY_VERSION 1 /* * GNU executables (name = "GNU") * word[0]: GNU OS tags * word[1]: major version * word[2]: minor version * word[3]: tiny version */ #define NT_GNU_VERSION 1 /* GNU OS tags */ #define GNU_OS_LINUX 0 #define GNU_OS_HURD 1 #define GNU_OS_SOLARIS 2 #define GNU_OS_KFREEBSD 3 #define GNU_OS_KNETBSD 4 /* * GNU Hardware capability information * word[0]: Number of entries * word[1]: Bitmask of enabled entries * Followed by a byte id, and a NUL terminated string per entry */ #define NT_GNU_HWCAP 2 /* * GNU Build ID generated by ld * 160 bit SHA1 [default] * 128 bit md5 or uuid */ #define NT_GNU_BUILD_ID 3 /* * NetBSD-specific note type: PaX. * There should be 1 NOTE per executable. * name: PaX\0 * namesz: 4 * desc: * word[0]: capability bitmask * descsz: 4 */ #define NT_NETBSD_PAX 3 #define NT_NETBSD_PAX_MPROTECT 0x01 /* Force enable Mprotect */ #define NT_NETBSD_PAX_NOMPROTECT 0x02 /* Force disable Mprotect */ #define NT_NETBSD_PAX_GUARD 0x04 /* Force enable Segvguard */ #define NT_NETBSD_PAX_NOGUARD 0x08 /* Force disable Servguard */ #define NT_NETBSD_PAX_ASLR 0x10 /* Force enable ASLR */ #define NT_NETBSD_PAX_NOASLR 0x20 /* Force disable ASLR */ /* * NetBSD-specific note type: MACHINE_ARCH. * There should be 1 NOTE per executable. * name: NetBSD\0 * namesz: 7 * desc: string * descsz: variable */ #define NT_NETBSD_MARCH 5 /* * NetBSD-specific note type: COMPILER MODEL. * There should be 1 NOTE per executable. * name: NetBSD\0 * namesz: 7 * desc: string * descsz: variable */ #define NT_NETBSD_CMODEL 6 /* * Golang-specific note type * name: Go\0\0 * namesz: 4 * desc: base-64 build id. * descsz: < 128 */ #define NT_GO_BUILD_ID 4 /* * Android-specific note type: ident * name: Android\0 * namesz: 8 * desc: * uint32_t: api_version * string[64]: NDK Version * string[64]: version detail * descsz: < 4+64+64 (4 for < r14) */ #define NT_ANDROID_VERSION 1 #define NT_ANDROID_KUSER 3 /* * Android-specific note type: memory tag * name: Android\0 * namesz: 8 * desc: * uint32_t: bitmask * descsz: 4 */ #define NT_ANDROID_MEMTAG 4 #define NT_ANDROID_MEMTAG_LEVEL_NONE 0 #define NT_ANDROID_MEMTAG_LEVEL_ASYNC 1 #define NT_ANDROID_MEMTAG_LEVEL_SYNC 2 #define NT_ANDROID_MEMTAG_LEVEL_MASK 3 #define NT_ANDROID_MEMTAG_HEAP 4 #define NT_ANDROID_MEMTAG_STACK 8 /* * FreeBSD specific notes */ #define NT_FREEBSD_PROCSTAT_AUXV 16 #if !defined(ELFSIZE) && defined(ARCH_ELFSIZE) #define ELFSIZE ARCH_ELFSIZE #endif /* SunOS 5.x hardware/software capabilities */ typedef struct { Elf32_Word c_tag; union { Elf32_Word c_val; Elf32_Addr c_ptr; } c_un; } Elf32_Cap; typedef struct { Elf64_Xword c_tag; union { Elf64_Xword c_val; Elf64_Addr c_ptr; } c_un; } Elf64_Cap; /* SunOS 5.x hardware/software capability tags */ #define CA_SUNW_NULL 0 #define CA_SUNW_HW_1 1 #define CA_SUNW_SF_1 2 /* SunOS 5.x software capabilities */ #define SF1_SUNW_FPKNWN 0x01 #define SF1_SUNW_FPUSED 0x02 #define SF1_SUNW_MASK 0x03 /* SunOS 5.x hardware capabilities: sparc */ #define AV_SPARC_MUL32 0x0001 #define AV_SPARC_DIV32 0x0002 #define AV_SPARC_FSMULD 0x0004 #define AV_SPARC_V8PLUS 0x0008 #define AV_SPARC_POPC 0x0010 #define AV_SPARC_VIS 0x0020 #define AV_SPARC_VIS2 0x0040 #define AV_SPARC_ASI_BLK_INIT 0x0080 #define AV_SPARC_FMAF 0x0100 #define AV_SPARC_FJFMAU 0x4000 #define AV_SPARC_IMA 0x8000 /* SunOS 5.x hardware capabilities: 386 */ #define AV_386_FPU 0x00000001 #define AV_386_TSC 0x00000002 #define AV_386_CX8 0x00000004 #define AV_386_SEP 0x00000008 #define AV_386_AMD_SYSC 0x00000010 #define AV_386_CMOV 0x00000020 #define AV_386_MMX 0x00000040 #define AV_386_AMD_MMX 0x00000080 #define AV_386_AMD_3DNow 0x00000100 #define AV_386_AMD_3DNowx 0x00000200 #define AV_386_FXSR 0x00000400 #define AV_386_SSE 0x00000800 #define AV_386_SSE2 0x00001000 #define AV_386_PAUSE 0x00002000 #define AV_386_SSE3 0x00004000 #define AV_386_MON 0x00008000 #define AV_386_CX16 0x00010000 #define AV_386_AHF 0x00020000 #define AV_386_TSCP 0x00040000 #define AV_386_AMD_SSE4A 0x00080000 #define AV_386_POPCNT 0x00100000 #define AV_386_AMD_LZCNT 0x00200000 #define AV_386_SSSE3 0x00400000 #define AV_386_SSE4_1 0x00800000 #define AV_386_SSE4_2 0x01000000 /* * Dynamic Section structure array */ typedef struct { Elf32_Word d_tag; /* entry tag value */ union { Elf32_Addr d_ptr; Elf32_Word d_val; } d_un; } Elf32_Dyn; typedef struct { Elf64_Xword d_tag; /* entry tag value */ union { Elf64_Addr d_ptr; Elf64_Xword d_val; } d_un; } Elf64_Dyn; /* d_tag */ #define DT_NULL 0 /* Marks end of dynamic array */ #define DT_NEEDED 1 /* Name of needed library (DT_STRTAB offset) */ #define DT_PLTRELSZ 2 /* Size, in bytes, of relocations in PLT */ #define DT_PLTGOT 3 /* Address of PLT and/or GOT */ #define DT_HASH 4 /* Address of symbol hash table */ #define DT_STRTAB 5 /* Address of string table */ #define DT_SYMTAB 6 /* Address of symbol table */ #define DT_RELA 7 /* Address of Rela relocation table */ #define DT_RELASZ 8 /* Size, in bytes, of DT_RELA table */ #define DT_RELAENT 9 /* Size, in bytes, of one DT_RELA entry */ #define DT_STRSZ 10 /* Size, in bytes, of DT_STRTAB table */ #define DT_SYMENT 11 /* Size, in bytes, of one DT_SYMTAB entry */ #define DT_INIT 12 /* Address of initialization function */ #define DT_FINI 13 /* Address of termination function */ #define DT_SONAME 14 /* Shared object name (DT_STRTAB offset) */ #define DT_RPATH 15 /* Library search path (DT_STRTAB offset) */ #define DT_SYMBOLIC 16 /* Start symbol search within local object */ #define DT_REL 17 /* Address of Rel relocation table */ #define DT_RELSZ 18 /* Size, in bytes, of DT_REL table */ #define DT_RELENT 19 /* Size, in bytes, of one DT_REL entry */ #define DT_PLTREL 20 /* Type of PLT relocation entries */ #define DT_DEBUG 21 /* Used for debugging; unspecified */ #define DT_TEXTREL 22 /* Relocations might modify non-writable seg */ #define DT_JMPREL 23 /* Address of relocations associated with PLT */ #define DT_BIND_NOW 24 /* Process all relocations at load-time */ #define DT_INIT_ARRAY 25 /* Address of initialization function array */ #define DT_FINI_ARRAY 26 /* Size, in bytes, of DT_INIT_ARRAY array */ #define DT_INIT_ARRAYSZ 27 /* Address of termination function array */ #define DT_FINI_ARRAYSZ 28 /* Size, in bytes, of DT_FINI_ARRAY array*/ #define DT_RUNPATH 29 /* overrides DT_RPATH */ #define DT_FLAGS 30 /* Encodes ORIGIN, SYMBOLIC, TEXTREL, BIND_NOW, STATIC_TLS */ #define DT_ENCODING 31 /* ??? */ #define DT_PREINIT_ARRAY 32 /* Address of pre-init function array */ #define DT_PREINIT_ARRAYSZ 33 /* Size, in bytes, of DT_PREINIT_ARRAY array */ #define DT_NUM 34 #define DT_LOOS 0x60000000 /* Operating system specific range */ #define DT_VERSYM 0x6ffffff0 /* Symbol versions */ #define DT_FLAGS_1 0x6ffffffb /* ELF dynamic flags */ #define DT_VERDEF 0x6ffffffc /* Versions defined by file */ #define DT_VERDEFNUM 0x6ffffffd /* Number of versions defined by file */ #define DT_VERNEED 0x6ffffffe /* Versions needed by file */ #define DT_VERNEEDNUM 0x6fffffff /* Number of versions needed by file */ #define DT_HIOS 0x6fffffff #define DT_LOPROC 0x70000000 /* Processor-specific range */ #define DT_HIPROC 0x7fffffff /* Flag values for DT_FLAGS */ #define DF_ORIGIN 0x00000001 /* uses $ORIGIN */ #define DF_SYMBOLIC 0x00000002 /* */ #define DF_TEXTREL 0x00000004 /* */ #define DF_BIND_NOW 0x00000008 /* */ #define DF_STATIC_TLS 0x00000010 /* */ /* Flag values for DT_FLAGS_1 */ #define DF_1_NOW 0x00000001 /* Same as DF_BIND_NOW */ #define DF_1_GLOBAL 0x00000002 /* Unused */ #define DF_1_GROUP 0x00000004 /* Is member of group */ #define DF_1_NODELETE 0x00000008 /* Cannot be deleted from process */ #define DF_1_LOADFLTR 0x00000010 /* Immediate loading of filters */ #define DF_1_INITFIRST 0x00000020 /* init/fini takes priority */ #define DF_1_NOOPEN 0x00000040 /* Do not allow loading on dlopen() */ #define DF_1_ORIGIN 0x00000080 /* Require $ORIGIN processing */ #define DF_1_DIRECT 0x00000100 /* Enable direct bindings */ #define DF_1_INTERPOSE 0x00000400 /* Is an interposer */ #define DF_1_NODEFLIB 0x00000800 /* Ignore default library search path */ #define DF_1_NODUMP 0x00001000 /* Cannot be dumped with dldump(3C) */ #define DF_1_CONFALT 0x00002000 /* Configuration alternative */ #define DF_1_ENDFILTEE 0x00004000 /* Filtee ends filter's search */ #define DF_1_DISPRELDNE 0x00008000 /* Did displacement relocation */ #define DF_1_DISPRELPND 0x00010000 /* Pending displacement relocation */ #define DF_1_NODIRECT 0x00020000 /* Has non-direct bindings */ #define DF_1_IGNMULDEF 0x00040000 /* Used internally */ #define DF_1_NOKSYMS 0x00080000 /* Used internally */ #define DF_1_NOHDR 0x00100000 /* Used internally */ #define DF_1_EDITED 0x00200000 /* Has been modified since build */ #define DF_1_NORELOC 0x00400000 /* Used internally */ #define DF_1_SYMINTPOSE 0x00800000 /* Has individual symbol interposers */ #define DF_1_GLOBAUDIT 0x01000000 /* Require global auditing */ #define DF_1_SINGLETON 0x02000000 /* Has singleton symbols */ #define DF_1_STUB 0x04000000 /* Stub */ #define DF_1_PIE 0x08000000 /* Position Independent Executable */ #endif file-5.46/src/tar.h000664 023540 023540 00000005104 14634602245 015665 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * Header file for file_public domain tar (tape archive) program. * * @(#)tar.h 1.20 86/10/29 Public Domain. * * Created 25 August 1985 by John Gilmore, ihnp4!hoptoad!gnu. * * $File: tar.h,v 1.16 2022/12/26 17:31:14 christos Exp $ # checkin only */ /* * Header block on tape. * * I'm going to use traditional DP naming conventions here. * A "block" is a big chunk of stuff that we do I/O on. * A "record" is a piece of info that we care about. * Typically many "record"s fit into a "block". */ #define RECORDSIZE 512 #define NAMSIZ 100 #define TUNMLEN 32 #define TGNMLEN 32 union record { unsigned char charptr[RECORDSIZE]; struct header { char name[NAMSIZ]; char mode[8]; char uid[8]; char gid[8]; char size[12]; char mtime[12]; char chksum[8]; char linkflag; char linkname[NAMSIZ]; char magic[8]; char uname[TUNMLEN]; char gname[TGNMLEN]; char devmajor[8]; char devminor[8]; } header; }; /* The magic field is filled with this if uname and gname are valid. */ #define TMAGIC "ustar" /* 5 chars and a null */ #define GNUTMAGIC "ustar " /* 7 chars and a null */ file-5.46/src/apptype.c000664 023540 023540 00000010671 14634602355 016563 0ustar00christoschristos000000 000000 /* * Adapted from: apptype.c, Written by Eberhard Mattes and put into the * file_public domain * * Notes: 1. Qualify the filename so that DosQueryAppType does not do extraneous * searches. * * 2. DosQueryAppType will return FAPPTYP_DOS on a file ending with ".com" * (other than an OS/2 exe or Win exe with this name). Eberhard Mattes * remarks Tue, 6 Apr 93: Moreover, it reports the type of the (new and very * bug ridden) Win Emacs as "OS/2 executable". * * 3. apptype() uses the filename if given, otherwise a tmp file is created with * the contents of buf. If buf is not the complete file, apptype can * incorrectly identify the exe type. The "-z" option of "file" is the reason * for this ugly code. */ /* * amai: Darrel Hankerson did the changes described here. * * It remains to check the validity of comments (2.) since it's referred to an * "old" OS/2 version. * */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: apptype.c,v 1.17 2022/12/26 17:31:14 christos Exp $") #endif /* lint */ #include #include #ifdef __EMX__ #include #define INCL_DOSSESMGR #define INCL_DOSERRORS #define INCL_DOSFILEMGR #include typedef ULONG APPTYPE; file_protected int file_os2_apptype(struct magic_set *ms, const char *fn, const void *buf, size_t nb) { APPTYPE rc, type; char path[_MAX_PATH], drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT]; char *filename; FILE *fp; if (fn) filename = strdup(fn); else if ((filename = tempnam("./", "tmp")) == NULL) { file_error(ms, errno, "cannot create tempnam"); return -1; } /* qualify the filename to prevent extraneous searches */ _splitpath(filename, drive, dir, fname, ext); (void)sprintf(path, "%s%s%s%s", drive, (*dir == '\0') ? "./" : dir, fname, (*ext == '\0') ? "." : ext); if (fn == NULL) { if ((fp = fopen(path, "wb")) == NULL) { file_error(ms, errno, "cannot open tmp file `%s'", path); return -1; } if (fwrite(buf, 1, nb, fp) != nb) { file_error(ms, errno, "cannot write tmp file `%s'", path); (void)fclose(fp); return -1; } (void)fclose(fp); } rc = DosQueryAppType((unsigned char *)path, &type); if (fn == NULL) { unlink(path); free(filename); } #if 0 if (rc == ERROR_INVALID_EXE_SIGNATURE) printf("%s: not an executable file\n", fname); else if (rc == ERROR_FILE_NOT_FOUND) printf("%s: not found\n", fname); else if (rc == ERROR_ACCESS_DENIED) printf("%s: access denied\n", fname); else if (rc != 0) printf("%s: error code = %lu\n", fname, rc); else #else /* * for our purpose here it's sufficient to just ignore the error and * return w/o success (=0) */ if (rc) return (0); #endif if (type & FAPPTYP_32BIT) if (file_printf(ms, "32-bit ") == -1) return -1; if (type & FAPPTYP_PHYSDRV) { if (file_printf(ms, "physical device driver") == -1) return -1; } else if (type & FAPPTYP_VIRTDRV) { if (file_printf(ms, "virtual device driver") == -1) return -1; } else if (type & FAPPTYP_DLL) { if (type & FAPPTYP_PROTDLL) if (file_printf(ms, "file_protected ") == -1) return -1; if (file_printf(ms, "DLL") == -1) return -1; } else if (type & (FAPPTYP_WINDOWSREAL | FAPPTYP_WINDOWSPROT)) { if (file_printf(ms, "Windows executable") == -1) return -1; } else if (type & FAPPTYP_DOS) { /* * The API routine is partially broken on filenames ending * ".com". */ if (stricmp(ext, ".com") == 0) if (strncmp((const char *)buf, "MZ", 2)) return (0); if (file_printf(ms, "DOS executable") == -1) return -1; /* ---------------------------------------- */ /* Might learn more from the magic(4) entry */ if (file_printf(ms, ", magic(4)-> ") == -1) return -1; return (0); /* ---------------------------------------- */ } else if (type & FAPPTYP_BOUND) { if (file_printf(ms, "bound executable") == -1) return -1; } else if ((type & 7) == FAPPTYP_WINDOWAPI) { if (file_printf(ms, "PM executable") == -1) return -1; } else if (file_printf(ms, "OS/2 executable") == -1) return -1; switch (type & (FAPPTYP_NOTWINDOWCOMPAT | FAPPTYP_WINDOWCOMPAT | FAPPTYP_WINDOWAPI)) { case FAPPTYP_NOTWINDOWCOMPAT: if (file_printf(ms, " [NOTWINDOWCOMPAT]") == -1) return -1; break; case FAPPTYP_WINDOWCOMPAT: if (file_printf(ms, " [WINDOWCOMPAT]") == -1) return -1; break; case FAPPTYP_WINDOWAPI: if (file_printf(ms, " [WINDOWAPI]") == -1) return -1; break; } return 1; } #endif file-5.46/src/der.c000664 023540 023540 00000026546 14721175331 015657 0ustar00christoschristos000000 000000 /*- * Copyright (c) 2016 Christos Zoulas * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * DER (Distinguished Encoding Rules) Parser * * Sources: * https://en.wikipedia.org/wiki/X.690 * http://fm4dd.com/openssl/certexamples.htm * http://blog.engelke.com/2014/10/17/parsing-ber-and-der-encoded-asn-1-objects/ */ #ifndef TEST_DER #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: der.c,v 1.28 2024/11/25 22:31:53 christos Exp $") #endif #else #define SIZE_T_FORMAT "z" #define CAST(a, b) ((a)(b)) #endif #include #include #include #include #include #include #ifndef TEST_DER #include "magic.h" #include "der.h" #else #include #include #include #endif #define DER_BAD CAST(uint32_t, -1) #define DER_CLASS_UNIVERSAL 0 #define DER_CLASS_APPLICATION 1 #define DER_CLASS_CONTEXT 2 #define DER_CLASS_PRIVATE 3 #if defined(DEBUG_DER) || defined(TEST_DER) static const char der_class[] = "UACP"; #endif #define DER_TYPE_PRIMITIVE 0 #define DER_TYPE_CONSTRUCTED 1 #if defined(DEBUG_DER) || defined(TEST_DER) static const char der_type[] = "PC"; #endif #define DER_TAG_EOC 0x00 #define DER_TAG_BOOLEAN 0x01 #define DER_TAG_INTEGER 0x02 #define DER_TAG_BIT STRING 0x03 #define DER_TAG_OCTET_STRING 0x04 #define DER_TAG_NULL 0x05 #define DER_TAG_OBJECT_IDENTIFIER 0x06 #define DER_TAG_OBJECT_DESCRIPTOR 0x07 #define DER_TAG_EXTERNAL 0x08 #define DER_TAG_REAL 0x09 #define DER_TAG_ENUMERATED 0x0a #define DER_TAG_EMBEDDED_PDV 0x0b #define DER_TAG_UTF8_STRING 0x0c #define DER_TAG_RELATIVE_OID 0x0d #define DER_TAG_TIME 0x0e #define DER_TAG_RESERVED_2 0x0f #define DER_TAG_SEQUENCE 0x10 #define DER_TAG_SET 0x11 #define DER_TAG_NUMERIC_STRING 0x12 #define DER_TAG_PRINTABLE_STRING 0x13 #define DER_TAG_T61_STRING 0x14 #define DER_TAG_VIDEOTEX_STRING 0x15 #define DER_TAG_IA5_STRING 0x16 #define DER_TAG_UTCTIME 0x17 #define DER_TAG_GENERALIZED_TIME 0x18 #define DER_TAG_GRAPHIC_STRING 0x19 #define DER_TAG_VISIBLE_STRING 0x1a #define DER_TAG_GENERAL_STRING 0x1b #define DER_TAG_UNIVERSAL_STRING 0x1c #define DER_TAG_CHARACTER_STRING 0x1d #define DER_TAG_BMP_STRING 0x1e #define DER_TAG_DATE 0x1f #define DER_TAG_TIME_OF_DAY 0x20 #define DER_TAG_DATE_TIME 0x21 #define DER_TAG_DURATION 0x22 #define DER_TAG_OID_IRI 0x23 #define DER_TAG_RELATIVE_OID_IRI 0x24 #define DER_TAG_LAST 0x25 static const char *der__tag[] = { "eoc", "bool", "int", "bit_str", "octet_str", "null", "obj_id", "obj_desc", "ext", "real", "enum", "embed", "utf8_str", "rel_oid", "time", "res2", "seq", "set", "num_str", "prt_str", "t61_str", "vid_str", "ia5_str", "utc_time", "gen_time", "gr_str", "vis_str", "gen_str", "univ_str", "char_str", "bmp_str", "date", "tod", "datetime", "duration", "oid-iri", "rel-oid-iri", }; #ifdef DEBUG_DER #define DPRINTF(a) printf a #else #define DPRINTF(a) #endif #ifdef TEST_DER file_private uint8_t getclass(uint8_t c) { return c >> 6; } file_private uint8_t gettype(uint8_t c) { return (c >> 5) & 1; } #endif file_private uint32_t gettag(const uint8_t *c, size_t *p, size_t l) { uint32_t tag; if (*p >= l) return DER_BAD; tag = c[(*p)++] & 0x1f; if (tag != 0x1f) return tag; if (*p >= l) return DER_BAD; while (c[*p] >= 0x80) { tag = tag * 128 + c[(*p)++] - 0x80; if (*p >= l) return DER_BAD; } return tag; } /* * Read the length of a DER tag from the input. * * `c` is the input, `p` is an output parameter that specifies how much of the * input we consumed, and `l` is the maximum input length. * * Returns the length, or DER_BAD if the end of the input is reached or the * length exceeds the remaining input. */ file_private uint32_t getlength(const uint8_t *c, size_t *p, size_t l) { uint8_t digits, i; size_t len; int is_onebyte_result; if (*p >= l) { DPRINTF(("%s:[1] %zu >= %zu\n", __func__, *p, l)); return DER_BAD; } /* * Digits can either be 0b0 followed by the result, or 0b1 * followed by the number of digits of the result. In either case, * we verify that we can read so many bytes from the input. */ is_onebyte_result = (c[*p] & 0x80) == 0; digits = c[(*p)++] & 0x7f; if (*p + digits >= l) { DPRINTF(("%s:[2] %zu + %u >= %zu\n", __func__, *p, digits, l)); return DER_BAD; } if (is_onebyte_result) return digits; /* * Decode len. We've already verified that we're allowed to read * `digits` bytes. */ len = 0; for (i = 0; i < digits; i++) len = (len << 8) | c[(*p)++]; if (len > UINT32_MAX - *p || *p + len > l) { DPRINTF(("%s:[3] bad len %zu + %zu >= %zu\n", __func__, *p, len, l)); return DER_BAD; } return CAST(uint32_t, len); } file_private const char * der_tag(char *buf, size_t len, uint32_t tag) { if (tag < DER_TAG_LAST) strlcpy(buf, der__tag[tag], len); else snprintf(buf, len, "%#x", tag); return buf; } #ifndef TEST_DER file_private int der_data(char *buf, size_t blen, uint32_t tag, const void *q, uint32_t len) { uint32_t i; const uint8_t *d = CAST(const uint8_t *, q); switch (tag) { case DER_TAG_PRINTABLE_STRING: case DER_TAG_UTF8_STRING: case DER_TAG_IA5_STRING: return snprintf(buf, blen, "%.*s", len, RCAST(const char *, q)); case DER_TAG_UTCTIME: if (len < 12) break; return snprintf(buf, blen, "20%c%c-%c%c-%c%c %c%c:%c%c:%c%c GMT", d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11]); default: break; } for (i = 0; i < len; i++) { uint32_t z = i << 1; if (z < blen - 2) snprintf(buf + z, blen - z, "%.2x", d[i]); } return len * 2; } file_protected int32_t der_offs(struct magic_set *ms, struct magic *m, size_t nbytes) { const uint8_t *b = RCAST(const uint8_t *, ms->search.s); size_t offs = 0, len = ms->search.s_len ? ms->search.s_len : nbytes; if (gettag(b, &offs, len) == DER_BAD) { DPRINTF(("%s: bad tag 1\n", __func__)); return -1; } DPRINTF(("%s1: %u %" SIZE_T_FORMAT "u %d\n", __func__, ms->offset, offs, m->offset)); uint32_t tlen = getlength(b, &offs, len); if (tlen == DER_BAD) { DPRINTF(("%s: bad tag 2\n", __func__)); return -1; } DPRINTF(("%s2: %u %" SIZE_T_FORMAT "u %u\n", __func__, ms->offset, offs, tlen)); offs += ms->offset + m->offset; DPRINTF(("cont_level = %d\n", m->cont_level)); #ifdef DEBUG_DER size_t i; for (i = 0; i < m->cont_level; i++) printf("cont_level[%" SIZE_T_FORMAT "u] = %d\n", i, ms->c.li[i].off); #endif if (m->cont_level != 0) { if (offs + tlen > nbytes) return -1; ms->c.li[m->cont_level - 1].off = CAST(int, offs + tlen); DPRINTF(("cont_level[%u] = %d\n", m->cont_level - 1, ms->c.li[m->cont_level - 1].off)); } return CAST(int32_t, offs); } file_protected int der_cmp(struct magic_set *ms, struct magic *m) { const uint8_t *b = RCAST(const uint8_t *, ms->search.s); const char *s = m->value.s; size_t offs = 0, len = ms->search.s_len; uint32_t tag, tlen; char buf[128]; DPRINTF(("%s: compare %zu bytes\n", __func__, len)); tag = gettag(b, &offs, len); if (tag == DER_BAD) { DPRINTF(("%s: bad tag 1\n", __func__)); return -1; } DPRINTF(("%s1: %d %" SIZE_T_FORMAT "u %d\n", __func__, ms->offset, offs, m->offset)); tlen = getlength(b, &offs, len); if (tlen == DER_BAD) { DPRINTF(("%s: bad tag 2\n", __func__)); return -1; } der_tag(buf, sizeof(buf), tag); if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "%s: tag %p got=%s exp=%s\n", __func__, b, buf, s); size_t slen = strlen(buf); if (strncmp(buf, s, slen) != 0) { DPRINTF(("%s: no string match %s != %s\n", __func__, buf, s)); return 0; } s += slen; again: switch (*s) { case '\0': DPRINTF(("%s: EOF match\n", __func__)); return 1; case '=': s++; goto val; default: if (!isdigit(CAST(unsigned char, *s))) { DPRINTF(("%s: no digit %c\n", __func__, *s)); return 0; } slen = 0; do slen = slen * 10 + *s - '0'; while (isdigit(CAST(unsigned char, *++s))); if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "%s: len %" SIZE_T_FORMAT "u %u\n", __func__, slen, tlen); if (tlen != slen) { DPRINTF(("%s: len %u != %zu\n", __func__, tlen, slen)); return 0; } goto again; } val: DPRINTF(("%s: before data %" SIZE_T_FORMAT "u %u\n", __func__, offs, tlen)); der_data(buf, sizeof(buf), tag, b + offs, tlen); if ((ms->flags & MAGIC_DEBUG) != 0) fprintf(stderr, "%s: data %s %s\n", __func__, buf, s); if (strcmp(buf, s) != 0 && strcmp("x", s) != 0) { DPRINTF(("%s: no string match %s != %s\n", __func__, buf, s)); return 0; } strlcpy(ms->ms_value.s, buf, sizeof(ms->ms_value.s)); DPRINTF(("%s: complete match\n", __func__)); return 1; } #endif #ifdef TEST_DER file_private void printtag(uint32_t tag, const void *q, uint32_t len) { const uint8_t *d = q; switch (tag) { case DER_TAG_PRINTABLE_STRING: case DER_TAG_UTF8_STRING: case DER_TAG_IA5_STRING: case DER_TAG_UTCTIME: printf("%.*s\n", len, (const char *)q); return; default: break; } for (uint32_t i = 0; i < len; i++) printf("%.2x", d[i]); printf("\n"); } file_private void printdata(size_t level, const void *v, size_t x, size_t l) { const uint8_t *p = v, *ep = p + l; size_t ox; char buf[128]; while (p + x < ep) { const uint8_t *q; uint8_t c = getclass(p[x]); uint8_t t = gettype(p[x]); ox = x; // if (x != 0) // printf("%.2x %.2x %.2x\n", p[x - 1], p[x], p[x + 1]); uint32_t tag = gettag(p, &x, ep - p + x); if (p + x >= ep) break; uint32_t len = getlength(p, &x, ep - p + x); printf("%" SIZE_T_FORMAT "u %" SIZE_T_FORMAT "u-%" SIZE_T_FORMAT "u %c,%c,%s,%u:", level, ox, x, der_class[c], der_type[t], der_tag(buf, sizeof(buf), tag), len); q = p + x; if (p + len > ep) errx(EXIT_FAILURE, "corrupt der"); printtag(tag, q, len); if (t != DER_TYPE_PRIMITIVE) printdata(level + 1, p, x, len + x); x += len; } } int main(int argc, char *argv[]) { int fd; struct stat st; size_t l; void *p; if ((fd = open(argv[1], O_RDONLY)) == -1) err(EXIT_FAILURE, "open `%s'", argv[1]); if (fstat(fd, &st) == -1) err(EXIT_FAILURE, "stat `%s'", argv[1]); l = (size_t)st.st_size; if ((p = mmap(NULL, l, PROT_READ, MAP_FILE, fd, 0)) == MAP_FAILED) err(EXIT_FAILURE, "mmap `%s'", argv[1]); printdata(0, p, 0, l); munmap(p, l); return 0; } #endif file-5.46/src/der.h000664 023540 023540 00000002754 14721165572 015665 0ustar00christoschristos000000 000000 /*- * Copyright (c) 2016 Christos Zoulas * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ file_protected int der_offs(struct magic_set *, struct magic *, size_t); file_protected int der_cmp(struct magic_set *, struct magic *); file-5.46/src/file_opts.h000664 023540 023540 00000007375 14634602245 017077 0ustar00christoschristos000000 000000 /* * Table of command-line options * * The first column specifies the short name, if any, or 0 if none. * The second column specifies the long name. * The third column specifies whether it takes a parameter. * The fourth column specifies whether is marked as "default" * if POSIXLY_CORRECT is defined: 1, * if POSIXLY_CORRECT is not defined: 2. * The fifth column is the documentation. * * N.B. The long options' order must correspond to the code in file.c, * and OPTSTRING must be kept up-to-date with the short options. * Pay particular attention to the numbers of long-only options in the * switch statement! */ OPT_LONGONLY("help", 0, 0, " display this help and exit\n", OPT_HELP) OPT('v', "version", 0, 0, " output version information and exit\n") OPT('m', "magic-file", 1, 0, " LIST use LIST as a colon-separated list of magic\n" " number files\n") OPT('z', "uncompress", 0, 0, " try to look inside compressed files\n") OPT('Z', "uncompress-noreport", 0, 0, " only print the contents of compressed files\n") OPT('b', "brief", 0, 0, " do not prepend filenames to output lines\n") OPT('c', "checking-printout", 0, 0, " print the parsed form of the magic file, use in\n" " conjunction with -m to debug a new magic file\n" " before installing it\n") OPT('e', "exclude", 1, 0, " TEST exclude TEST from the list of test to be\n" " performed for file. Valid tests are:\n" " %e\n") OPT_LONGONLY("exclude-quiet", 1, 0, " TEST like exclude, but ignore unknown tests\n", OPT_EXCLUDE_QUIET) OPT('f', "files-from", 1, 0, " FILE read the filenames to be examined from FILE\n") OPT('F', "separator", 1, 0, " STRING use string as separator instead of `:'\n") OPT('i', "mime", 0, 0, " output MIME type strings (--mime-type and\n" " --mime-encoding)\n") OPT_LONGONLY("apple", 0, 0, " output the Apple CREATOR/TYPE\n", OPT_APPLE) OPT_LONGONLY("extension", 0, 0, " output a slash-separated list of extensions\n", OPT_EXTENSIONS) OPT_LONGONLY("mime-type", 0, 0, " output the MIME type\n", OPT_MIME_TYPE) OPT_LONGONLY("mime-encoding", 0, 0, " output the MIME encoding\n", OPT_MIME_ENCODING) OPT('k', "keep-going", 0, 0, " don't stop at the first match\n") OPT('l', "list", 0, 0, " list magic strength\n") #ifdef S_IFLNK OPT('L', "dereference", 0, 1, " follow symlinks (default if POSIXLY_CORRECT is set)") OPT('h', "no-dereference", 0, 2, " don't follow symlinks (default if POSIXLY_CORRECT is not set)") #endif OPT('n', "no-buffer", 0, 0, " do not buffer output\n") OPT('N', "no-pad", 0, 0, " do not pad output\n") OPT('0', "print0", 0, 0, " terminate filenames with ASCII NUL\n") #if defined(HAVE_UTIME) || defined(HAVE_UTIMES) OPT('p', "preserve-date", 0, 0, " preserve access times on files\n") #endif OPT('P', "parameter", 1, 0, " set file engine parameter limits\n" " %P\n") OPT('r', "raw", 0, 0, " don't translate unprintable chars to \\ooo\n") OPT('s', "special-files", 0, 0, " treat special (block/char devices) files as\n" " ordinary ones\n") OPT('S', "no-sandbox", 0, 0, " disable system call sandboxing\n") OPT('C', "compile", 0, 0, " compile file specified by -m\n") OPT('d', "debug", 0, 0, " print debugging messages\n") file-5.46/src/elfclass.h000664 023540 023540 00000006103 14634602245 016673 0ustar00christoschristos000000 000000 /* * Copyright (c) Christos Zoulas 2008. * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ if (nbytes <= sizeof(elfhdr)) return 0; u.l = 1; (void)memcpy(&elfhdr, buf, sizeof elfhdr); swap = (u.c[sizeof(int32_t) - 1] + 1) != elfhdr.e_ident[EI_DATA]; type = elf_getu16(swap, elfhdr.e_type); notecount = ms->elf_notes_max; switch (type) { #ifdef ELFCORE case ET_CORE: phnum = elf_getu16(swap, elfhdr.e_phnum); if (phnum > ms->elf_phnum_max) return toomany(ms, "program headers", phnum); flags |= FLAGS_IS_CORE; if (dophn_core(ms, clazz, swap, fd, CAST(off_t, elf_getu(swap, elfhdr.e_phoff)), phnum, CAST(size_t, elf_getu16(swap, elfhdr.e_phentsize)), fsize, &flags, ¬ecount) == -1) return -1; break; #endif case ET_EXEC: case ET_DYN: phnum = elf_getu16(swap, elfhdr.e_phnum); if (phnum > ms->elf_phnum_max) return toomany(ms, "program", phnum); shnum = elf_getu16(swap, elfhdr.e_shnum); if (shnum > ms->elf_shnum_max) return toomany(ms, "section", shnum); if (dophn_exec(ms, clazz, swap, fd, CAST(off_t, elf_getu(swap, elfhdr.e_phoff)), phnum, CAST(size_t, elf_getu16(swap, elfhdr.e_phentsize)), fsize, shnum, &flags, ¬ecount) == -1) return -1; /*FALLTHROUGH*/ case ET_REL: shnum = elf_getu16(swap, elfhdr.e_shnum); if (shnum > ms->elf_shnum_max) return toomany(ms, "section headers", shnum); if (doshn(ms, clazz, swap, fd, CAST(off_t, elf_getu(swap, elfhdr.e_shoff)), shnum, CAST(size_t, elf_getu16(swap, elfhdr.e_shentsize)), fsize, elf_getu16(swap, elfhdr.e_machine), CAST(int, elf_getu16(swap, elfhdr.e_shstrndx)), &flags, ¬ecount) == -1) return -1; break; default: break; } if (notecount == 0) return toomany(ms, "notes", ms->elf_notes_max); return 1; file-5.46/src/mygetopt.h000664 023540 023540 00000004305 14634602245 016751 0ustar00christoschristos000000 000000 /* $NetBSD: getopt.h,v 1.11 2008/04/28 20:22:54 martin Exp $ */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Dieter Baron and Thomas Klausner. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef _GETOPT_H_ #define _GETOPT_H_ #include /* * Gnu like getopt_long() and BSD4.4 getsubopt()/optreset extensions */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 struct option { /* name of long option */ const char *name; /* * one of no_argument, required_argument, and optional_argument: * whether option takes an argument */ int has_arg; /* if not NULL, set *flag to val when option found */ int *flag; /* if flag not NULL, value to set *flag to; else return value */ int val; }; int getopt_long(int, char * const *, const char *, const struct option *, int *); #endif /* !_GETOPT_H_ */ file-5.46/src/cdf.c000664 023540 023540 00000124545 14721165453 015643 0ustar00christoschristos000000 000000 /*- * Copyright (c) 2008 Christos Zoulas * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Parse Composite Document Files, the format used in Microsoft Office * document files before they switched to zipped XML. * Info from: http://sc.openoffice.org/compdocfileformat.pdf * * N.B. This is the "Composite Document File" format, and not the * "Compound Document Format", nor the "Channel Definition Format". */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: cdf.c,v 1.124 2024/11/25 21:24:59 christos Exp $") #endif #include #ifdef CDF_DEBUG #include #endif #include #include #include #include #include #include #ifdef HAVE_BYTESWAP_H #include #endif #ifdef HAVE_SYS_BSWAP_H #include #endif #ifndef EFTYPE #define EFTYPE EINVAL #endif #ifndef SIZE_T_MAX #define SIZE_T_MAX CAST(size_t, ~0ULL) #endif #include "cdf.h" #ifdef CDF_DEBUG #define DPRINTF(a) printf a, fflush(stdout) #else #define DPRINTF(a) #endif file_private union { char s[4]; uint32_t u; } cdf_bo; #define NEED_SWAP (cdf_bo.u == CAST(uint32_t, 0x01020304)) #define CDF_TOLE8(x) \ (CAST(uint64_t, NEED_SWAP ? _cdf_tole8(x) : CAST(uint64_t, x))) #define CDF_TOLE4(x) \ (CAST(uint32_t, NEED_SWAP ? _cdf_tole4(x) : CAST(uint32_t, x))) #define CDF_TOLE2(x) \ (CAST(uint16_t, NEED_SWAP ? _cdf_tole2(x) : CAST(uint16_t, x))) #define CDF_TOLE(x) (/*CONSTCOND*/sizeof(x) == 2 ? \ CDF_TOLE2(CAST(uint16_t, x)) : \ (/*CONSTCOND*/sizeof(x) == 4 ? \ CDF_TOLE4(CAST(uint32_t, x)) : \ CDF_TOLE8(CAST(uint64_t, x)))) #define CDF_GETUINT32(x, y) cdf_getuint32(x, y) #define CDF_MALLOC(n) cdf_malloc(__FILE__, __LINE__, (n)) #define CDF_REALLOC(p, n) cdf_realloc(__FILE__, __LINE__, (p), (n)) #define CDF_CALLOC(n, u) cdf_calloc(__FILE__, __LINE__, (n), (u)) /*ARGSUSED*/ file_private void * cdf_malloc(const char *file __attribute__((__unused__)), size_t line __attribute__((__unused__)), size_t n) { DPRINTF(("%s,%" SIZE_T_FORMAT "u: %s %" SIZE_T_FORMAT "u\n", file, line, __func__, n)); if (n == 0) n++; return malloc(n); } /*ARGSUSED*/ file_private void * cdf_realloc(const char *file __attribute__((__unused__)), size_t line __attribute__((__unused__)), void *p, size_t n) { DPRINTF(("%s,%" SIZE_T_FORMAT "u: %s %" SIZE_T_FORMAT "u\n", file, line, __func__, n)); return realloc(p, n); } /*ARGSUSED*/ file_private void * cdf_calloc(const char *file __attribute__((__unused__)), size_t line __attribute__((__unused__)), size_t n, size_t u) { DPRINTF(("%s,%" SIZE_T_FORMAT "u: %s %" SIZE_T_FORMAT "u %" SIZE_T_FORMAT "u\n", file, line, __func__, n, u)); if (n == 0) n++; return calloc(n, u); } #if defined(HAVE_BYTESWAP_H) # define _cdf_tole2(x) bswap_16(x) # define _cdf_tole4(x) bswap_32(x) # define _cdf_tole8(x) bswap_64(x) #elif defined(HAVE_SYS_BSWAP_H) # define _cdf_tole2(x) bswap16(x) # define _cdf_tole4(x) bswap32(x) # define _cdf_tole8(x) bswap64(x) #else /* * swap a short */ file_private uint16_t _cdf_tole2(uint16_t sv) { uint16_t rv; uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv)); uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv)); d[0] = s[1]; d[1] = s[0]; return rv; } /* * swap an int */ file_private uint32_t _cdf_tole4(uint32_t sv) { uint32_t rv; uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv)); uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv)); d[0] = s[3]; d[1] = s[2]; d[2] = s[1]; d[3] = s[0]; return rv; } /* * swap a quad */ file_private uint64_t _cdf_tole8(uint64_t sv) { uint64_t rv; uint8_t *s = RCAST(uint8_t *, RCAST(void *, &sv)); uint8_t *d = RCAST(uint8_t *, RCAST(void *, &rv)); d[0] = s[7]; d[1] = s[6]; d[2] = s[5]; d[3] = s[4]; d[4] = s[3]; d[5] = s[2]; d[6] = s[1]; d[7] = s[0]; return rv; } #endif /* * grab a uint32_t from a possibly unaligned address, and return it in * the native host order. */ file_private uint32_t cdf_getuint32(const uint8_t *p, size_t offs) { uint32_t rv; (void)memcpy(&rv, p + offs * sizeof(uint32_t), sizeof(rv)); return CDF_TOLE4(rv); } #define CDF_UNPACK(a) \ (void)memcpy(&(a), &buf[len], sizeof(a)), len += sizeof(a) #define CDF_UNPACKA(a) \ (void)memcpy((a), &buf[len], sizeof(a)), len += sizeof(a) file_protected uint16_t cdf_tole2(uint16_t sv) { return CDF_TOLE2(sv); } file_protected uint32_t cdf_tole4(uint32_t sv) { return CDF_TOLE4(sv); } file_protected uint64_t cdf_tole8(uint64_t sv) { return CDF_TOLE8(sv); } file_protected void cdf_swap_header(cdf_header_t *h) { size_t i; h->h_magic = CDF_TOLE8(h->h_magic); h->h_uuid[0] = CDF_TOLE8(h->h_uuid[0]); h->h_uuid[1] = CDF_TOLE8(h->h_uuid[1]); h->h_revision = CDF_TOLE2(h->h_revision); h->h_version = CDF_TOLE2(h->h_version); h->h_byte_order = CDF_TOLE2(h->h_byte_order); h->h_sec_size_p2 = CDF_TOLE2(h->h_sec_size_p2); h->h_short_sec_size_p2 = CDF_TOLE2(h->h_short_sec_size_p2); h->h_num_sectors_in_sat = CDF_TOLE4(h->h_num_sectors_in_sat); h->h_secid_first_directory = CDF_TOLE4(h->h_secid_first_directory); h->h_min_size_standard_stream = CDF_TOLE4(h->h_min_size_standard_stream); h->h_secid_first_sector_in_short_sat = CDF_TOLE4(CAST(uint32_t, h->h_secid_first_sector_in_short_sat)); h->h_num_sectors_in_short_sat = CDF_TOLE4(h->h_num_sectors_in_short_sat); h->h_secid_first_sector_in_master_sat = CDF_TOLE4(CAST(uint32_t, h->h_secid_first_sector_in_master_sat)); h->h_num_sectors_in_master_sat = CDF_TOLE4(h->h_num_sectors_in_master_sat); for (i = 0; i < __arraycount(h->h_master_sat); i++) { h->h_master_sat[i] = CDF_TOLE4(CAST(uint32_t, h->h_master_sat[i])); } } file_protected void cdf_unpack_header(cdf_header_t *h, char *buf) { size_t i; size_t len = 0; CDF_UNPACK(h->h_magic); CDF_UNPACKA(h->h_uuid); CDF_UNPACK(h->h_revision); CDF_UNPACK(h->h_version); CDF_UNPACK(h->h_byte_order); CDF_UNPACK(h->h_sec_size_p2); CDF_UNPACK(h->h_short_sec_size_p2); CDF_UNPACKA(h->h_unused0); CDF_UNPACK(h->h_num_sectors_in_sat); CDF_UNPACK(h->h_secid_first_directory); CDF_UNPACKA(h->h_unused1); CDF_UNPACK(h->h_min_size_standard_stream); CDF_UNPACK(h->h_secid_first_sector_in_short_sat); CDF_UNPACK(h->h_num_sectors_in_short_sat); CDF_UNPACK(h->h_secid_first_sector_in_master_sat); CDF_UNPACK(h->h_num_sectors_in_master_sat); for (i = 0; i < __arraycount(h->h_master_sat); i++) CDF_UNPACK(h->h_master_sat[i]); } file_protected void cdf_swap_dir(cdf_directory_t *d) { d->d_namelen = CDF_TOLE2(d->d_namelen); d->d_left_child = CDF_TOLE4(CAST(uint32_t, d->d_left_child)); d->d_right_child = CDF_TOLE4(CAST(uint32_t, d->d_right_child)); d->d_storage = CDF_TOLE4(CAST(uint32_t, d->d_storage)); d->d_storage_uuid[0] = CDF_TOLE8(d->d_storage_uuid[0]); d->d_storage_uuid[1] = CDF_TOLE8(d->d_storage_uuid[1]); d->d_flags = CDF_TOLE4(d->d_flags); d->d_created = CDF_TOLE8(CAST(uint64_t, d->d_created)); d->d_modified = CDF_TOLE8(CAST(uint64_t, d->d_modified)); d->d_stream_first_sector = CDF_TOLE4( CAST(uint32_t, d->d_stream_first_sector)); d->d_size = CDF_TOLE4(d->d_size); } file_protected void cdf_swap_class(cdf_classid_t *d) { d->cl_dword = CDF_TOLE4(d->cl_dword); d->cl_word[0] = CDF_TOLE2(d->cl_word[0]); d->cl_word[1] = CDF_TOLE2(d->cl_word[1]); } file_protected void cdf_unpack_dir(cdf_directory_t *d, char *buf) { size_t len = 0; CDF_UNPACKA(d->d_name); CDF_UNPACK(d->d_namelen); CDF_UNPACK(d->d_type); CDF_UNPACK(d->d_color); CDF_UNPACK(d->d_left_child); CDF_UNPACK(d->d_right_child); CDF_UNPACK(d->d_storage); CDF_UNPACKA(d->d_storage_uuid); CDF_UNPACK(d->d_flags); CDF_UNPACK(d->d_created); CDF_UNPACK(d->d_modified); CDF_UNPACK(d->d_stream_first_sector); CDF_UNPACK(d->d_size); CDF_UNPACK(d->d_unused0); } file_protected int cdf_zero_stream(cdf_stream_t *scn) { scn->sst_len = 0; scn->sst_dirlen = 0; scn->sst_ss = 0; free(scn->sst_tab); scn->sst_tab = NULL; return -1; } file_private size_t cdf_check_stream(const cdf_stream_t *sst, const cdf_header_t *h) { size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ? CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h); assert(ss == sst->sst_ss); return sst->sst_ss; } file_private int cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h, const void *p, size_t tail, int line) { const char *b = RCAST(const char *, sst->sst_tab); const char *e = RCAST(const char *, p) + tail; size_t ss = cdf_check_stream(sst, h); /*LINTED*/(void)&line; if (e >= b && CAST(size_t, e - b) <= ss * sst->sst_len) return 0; DPRINTF(("%d: offset begin %p < end %p || %" SIZE_T_FORMAT "u" " > %" SIZE_T_FORMAT "u [%" SIZE_T_FORMAT "u %" SIZE_T_FORMAT "u]\n", line, b, e, (size_t)(e - b), ss * sst->sst_len, ss, sst->sst_len)); errno = EFTYPE; return -1; } file_private ssize_t cdf_read(const cdf_info_t *info, off_t off, void *buf, size_t len) { size_t siz = CAST(size_t, off + len); if (CAST(off_t, off + len) != CAST(off_t, siz)) goto out; if (info->i_buf != NULL && info->i_len >= siz) { (void)memcpy(buf, &info->i_buf[off], len); return CAST(ssize_t, len); } if (info->i_fd == -1) goto out; if (pread(info->i_fd, buf, len, off) != CAST(ssize_t, len)) return -1; return CAST(ssize_t, len); out: errno = EINVAL; return -1; } file_protected int cdf_read_header(const cdf_info_t *info, cdf_header_t *h) { char buf[512]; (void)memcpy(cdf_bo.s, "\01\02\03\04", 4); if (cdf_read(info, CAST(off_t, 0), buf, sizeof(buf)) == -1) return -1; cdf_unpack_header(h, buf); cdf_swap_header(h); if (h->h_magic != CDF_MAGIC) { DPRINTF(("Bad magic %#" INT64_T_FORMAT "x != %#" INT64_T_FORMAT "x\n", (unsigned long long)h->h_magic, (unsigned long long)CDF_MAGIC)); goto out; } if (h->h_sec_size_p2 > 20) { DPRINTF(("Bad sector size %hu\n", h->h_sec_size_p2)); goto out; } if (h->h_short_sec_size_p2 > 20) { DPRINTF(("Bad short sector size %hu\n", h->h_short_sec_size_p2)); goto out; } return 0; out: errno = EFTYPE; return -1; } ssize_t cdf_read_sector(const cdf_info_t *info, void *buf, size_t offs, size_t len, const cdf_header_t *h, cdf_secid_t id) { size_t ss = CDF_SEC_SIZE(h); size_t pos; if (SIZE_T_MAX / ss < CAST(size_t, id)) return -1; pos = CDF_SEC_POS(h, id); assert(ss == len); return cdf_read(info, CAST(off_t, pos), RCAST(char *, buf) + offs, len); } ssize_t cdf_read_short_sector(const cdf_stream_t *sst, void *buf, size_t offs, size_t len, const cdf_header_t *h, cdf_secid_t id) { size_t ss = CDF_SHORT_SEC_SIZE(h); size_t pos; if (SIZE_T_MAX / ss < CAST(size_t, id)) return -1; pos = CDF_SHORT_SEC_POS(h, id); assert(ss == len); if (pos + len > CDF_SEC_SIZE(h) * sst->sst_len) { DPRINTF(("Out of bounds read %" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", pos + len, CDF_SEC_SIZE(h) * sst->sst_len)); goto out; } (void)memcpy(RCAST(char *, buf) + offs, RCAST(const char *, sst->sst_tab) + pos, len); return len; out: errno = EFTYPE; return -1; } /* * Read the sector allocation table. */ file_protected int cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat) { size_t i, j, k; size_t ss = CDF_SEC_SIZE(h); cdf_secid_t *msa, mid, sec; size_t nsatpersec = (ss / sizeof(mid)) - 1; for (i = 0; i < __arraycount(h->h_master_sat); i++) if (h->h_master_sat[i] == CDF_SECID_FREE) break; #define CDF_SEC_LIMIT (UINT32_MAX / (64 * ss)) if ((nsatpersec > 0 && h->h_num_sectors_in_master_sat > CDF_SEC_LIMIT / nsatpersec) || i > CDF_SEC_LIMIT) { DPRINTF(("Number of sectors in master SAT too big %u %" SIZE_T_FORMAT "u\n", h->h_num_sectors_in_master_sat, i)); errno = EFTYPE; return -1; } sat->sat_len = h->h_num_sectors_in_master_sat * nsatpersec + i; DPRINTF(("sat_len = %" SIZE_T_FORMAT "u ss = %" SIZE_T_FORMAT "u\n", sat->sat_len, ss)); if ((sat->sat_tab = CAST(cdf_secid_t *, CDF_CALLOC(sat->sat_len, ss))) == NULL) return -1; for (i = 0; i < __arraycount(h->h_master_sat); i++) { if (h->h_master_sat[i] < 0) break; if (cdf_read_sector(info, sat->sat_tab, ss * i, ss, h, h->h_master_sat[i]) != CAST(ssize_t, ss)) { DPRINTF(("Reading sector %d", h->h_master_sat[i])); goto out1; } } if ((msa = CAST(cdf_secid_t *, CDF_CALLOC(1, ss))) == NULL) goto out1; mid = h->h_secid_first_sector_in_master_sat; for (j = 0; j < h->h_num_sectors_in_master_sat; j++) { if (mid < 0) goto out; if (j >= CDF_LOOP_LIMIT) { DPRINTF(("Reading master sector loop limit")); goto out3; } if (cdf_read_sector(info, msa, 0, ss, h, mid) != CAST(ssize_t, ss)) { DPRINTF(("Reading master sector %d", mid)); goto out2; } for (k = 0; k < nsatpersec; k++, i++) { sec = CDF_TOLE4(CAST(uint32_t, msa[k])); if (sec < 0) goto out; if (i >= sat->sat_len) { DPRINTF(("Out of bounds reading MSA %" SIZE_T_FORMAT "u >= %" SIZE_T_FORMAT "u", i, sat->sat_len)); goto out3; } if (cdf_read_sector(info, sat->sat_tab, ss * i, ss, h, sec) != CAST(ssize_t, ss)) { DPRINTF(("Reading sector %d", CDF_TOLE4(msa[k]))); goto out2; } } mid = CDF_TOLE4(CAST(uint32_t, msa[nsatpersec])); } out: sat->sat_len = i; free(msa); return 0; out3: errno = EFTYPE; out2: free(msa); out1: free(sat->sat_tab); return -1; } size_t cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size) { size_t i, j; cdf_secid_t maxsector = CAST(cdf_secid_t, (sat->sat_len * size) / sizeof(maxsector)); DPRINTF(("Chain:")); if (sid == CDF_SECID_END_OF_CHAIN) { /* 0-length chain. */ DPRINTF((" empty\n")); return 0; } for (j = i = 0; sid >= 0; i++, j++) { DPRINTF((" %d", sid)); if (j >= CDF_LOOP_LIMIT) { DPRINTF(("Counting chain loop limit")); goto out; } if (sid >= maxsector) { DPRINTF(("Sector %d >= %d\n", sid, maxsector)); goto out; } sid = CDF_TOLE4(CAST(uint32_t, sat->sat_tab[sid])); } if (i == 0) { DPRINTF((" none, sid: %d\n", sid)); goto out; } DPRINTF(("\n")); return i; out: errno = EFTYPE; return CAST(size_t, -1); } file_protected int cdf_read_long_sector_chain(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, cdf_secid_t sid, size_t len, cdf_stream_t *scn) { size_t ss = CDF_SEC_SIZE(h), i, j; ssize_t nr; scn->sst_tab = NULL; scn->sst_len = cdf_count_chain(sat, sid, ss); scn->sst_dirlen = MAX(h->h_min_size_standard_stream, len); scn->sst_ss = ss; if (sid == CDF_SECID_END_OF_CHAIN || len == 0) return cdf_zero_stream(scn); if (scn->sst_len == CAST(size_t, -1)) goto out; scn->sst_tab = CDF_CALLOC(scn->sst_len, ss); if (scn->sst_tab == NULL) return cdf_zero_stream(scn); for (j = i = 0; sid >= 0; i++, j++) { if (j >= CDF_LOOP_LIMIT) { DPRINTF(("Read long sector chain loop limit")); goto out; } if (i >= scn->sst_len) { DPRINTF(("Out of bounds reading long sector chain " "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", i, scn->sst_len)); goto out; } if ((nr = cdf_read_sector(info, scn->sst_tab, i * ss, ss, h, sid)) != CAST(ssize_t, ss)) { if (i == scn->sst_len - 1 && nr > 0) { /* Last sector might be truncated */ return 0; } DPRINTF(("Reading long sector chain %d", sid)); goto out; } sid = CDF_TOLE4(CAST(uint32_t, sat->sat_tab[sid])); } return 0; out: errno = EFTYPE; return cdf_zero_stream(scn); } file_protected int cdf_read_short_sector_chain(const cdf_header_t *h, const cdf_sat_t *ssat, const cdf_stream_t *sst, cdf_secid_t sid, size_t len, cdf_stream_t *scn) { size_t ss = CDF_SHORT_SEC_SIZE(h), i, j; scn->sst_tab = NULL; scn->sst_len = cdf_count_chain(ssat, sid, CDF_SEC_SIZE(h)); scn->sst_dirlen = len; scn->sst_ss = ss; if (scn->sst_len == CAST(size_t, -1)) goto out; scn->sst_tab = CDF_CALLOC(scn->sst_len, ss); if (scn->sst_tab == NULL) return cdf_zero_stream(scn); for (j = i = 0; sid >= 0; i++, j++) { if (j >= CDF_LOOP_LIMIT) { DPRINTF(("Read short sector chain loop limit")); goto out; } if (i >= scn->sst_len) { DPRINTF(("Out of bounds reading short sector chain " "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", i, scn->sst_len)); goto out; } if (cdf_read_short_sector(sst, scn->sst_tab, i * ss, ss, h, sid) != CAST(ssize_t, ss)) { DPRINTF(("Reading short sector chain %d", sid)); goto out; } sid = CDF_TOLE4(CAST(uint32_t, ssat->sat_tab[sid])); } return 0; out: errno = EFTYPE; return cdf_zero_stream(scn); } file_protected int cdf_read_sector_chain(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, cdf_secid_t sid, size_t len, cdf_stream_t *scn) { if (len < h->h_min_size_standard_stream && sst->sst_tab != NULL) return cdf_read_short_sector_chain(h, ssat, sst, sid, len, scn); else return cdf_read_long_sector_chain(info, h, sat, sid, len, scn); } file_protected int cdf_read_dir(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, cdf_dir_t *dir) { size_t i, j; size_t ss = CDF_SEC_SIZE(h), ns, nd; char *buf; cdf_secid_t sid = h->h_secid_first_directory; ns = cdf_count_chain(sat, sid, ss); if (ns == CAST(size_t, -1)) return -1; nd = ss / CDF_DIRECTORY_SIZE; dir->dir_len = ns * nd; dir->dir_tab = CAST(cdf_directory_t *, CDF_CALLOC(dir->dir_len, sizeof(dir->dir_tab[0]))); if (dir->dir_tab == NULL) return -1; if ((buf = CAST(char *, CDF_MALLOC(ss))) == NULL) { free(dir->dir_tab); return -1; } for (j = i = 0; i < ns; i++, j++) { if (j >= CDF_LOOP_LIMIT) { DPRINTF(("Read dir loop limit")); goto out; } if (cdf_read_sector(info, buf, 0, ss, h, sid) != CAST(ssize_t, ss)) { DPRINTF(("Reading directory sector %d", sid)); goto out; } for (j = 0; j < nd; j++) { cdf_unpack_dir(&dir->dir_tab[i * nd + j], &buf[j * CDF_DIRECTORY_SIZE]); } sid = CDF_TOLE4(CAST(uint32_t, sat->sat_tab[sid])); } if (NEED_SWAP) for (i = 0; i < dir->dir_len; i++) cdf_swap_dir(&dir->dir_tab[i]); free(buf); return 0; out: free(dir->dir_tab); free(buf); errno = EFTYPE; return -1; } file_protected int cdf_read_ssat(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, cdf_sat_t *ssat) { size_t i, j; size_t ss = CDF_SEC_SIZE(h); cdf_secid_t sid = h->h_secid_first_sector_in_short_sat; ssat->sat_tab = NULL; ssat->sat_len = cdf_count_chain(sat, sid, ss); if (ssat->sat_len == CAST(size_t, -1)) goto out; ssat->sat_tab = CAST(cdf_secid_t *, CDF_CALLOC(ssat->sat_len, ss)); if (ssat->sat_tab == NULL) goto out1; for (j = i = 0; sid >= 0; i++, j++) { if (j >= CDF_LOOP_LIMIT) { DPRINTF(("Read short sat sector loop limit")); goto out; } if (i >= ssat->sat_len) { DPRINTF(("Out of bounds reading short sector chain " "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", i, ssat->sat_len)); goto out; } if (cdf_read_sector(info, ssat->sat_tab, i * ss, ss, h, sid) != CAST(ssize_t, ss)) { DPRINTF(("Reading short sat sector %d", sid)); goto out1; } sid = CDF_TOLE4(CAST(uint32_t, sat->sat_tab[sid])); } return 0; out: errno = EFTYPE; out1: free(ssat->sat_tab); return -1; } file_protected int cdf_read_short_stream(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_dir_t *dir, cdf_stream_t *scn, const cdf_directory_t **root) { size_t i; const cdf_directory_t *d; *root = NULL; for (i = 0; i < dir->dir_len; i++) if (dir->dir_tab[i].d_type == CDF_DIR_TYPE_ROOT_STORAGE) break; /* If the it is not there, just fake it; some docs don't have it */ if (i == dir->dir_len) { DPRINTF(("Cannot find root storage dir\n")); goto out; } d = &dir->dir_tab[i]; *root = d; /* If the it is not there, just fake it; some docs don't have it */ if (d->d_stream_first_sector < 0) { DPRINTF(("No first secror in dir\n")); goto out; } return cdf_read_long_sector_chain(info, h, sat, d->d_stream_first_sector, d->d_size, scn); out: scn->sst_tab = NULL; (void)cdf_zero_stream(scn); return 0; } file_private int cdf_namecmp(const char *d, const uint16_t *s, size_t l) { for (; l--; d++, s++) if (*d != CDF_TOLE2(*s)) return CAST(unsigned char, *d) - CDF_TOLE2(*s); return 0; } file_protected int cdf_read_doc_summary_info(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir, cdf_stream_t *scn) { return cdf_read_user_stream(info, h, sat, ssat, sst, dir, "\05DocumentSummaryInformation", scn); } file_protected int cdf_read_summary_info(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir, cdf_stream_t *scn) { return cdf_read_user_stream(info, h, sat, ssat, sst, dir, "\05SummaryInformation", scn); } file_protected int cdf_read_user_stream(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir, const char *name, cdf_stream_t *scn) { const cdf_directory_t *d; int i = cdf_find_stream(dir, name, CDF_DIR_TYPE_USER_STREAM); if (i <= 0) { memset(scn, 0, sizeof(*scn)); return -1; } d = &dir->dir_tab[i - 1]; return cdf_read_sector_chain(info, h, sat, ssat, sst, d->d_stream_first_sector, d->d_size, scn); } file_protected int cdf_find_stream(const cdf_dir_t *dir, const char *name, int type) { size_t i, name_len = strlen(name) + 1; for (i = dir->dir_len; i > 0; i--) if (dir->dir_tab[i - 1].d_type == type && cdf_namecmp(name, dir->dir_tab[i - 1].d_name, name_len) == 0) break; if (i > 0) return CAST(int, i); DPRINTF(("Cannot find type %d `%s'\n", type, name)); errno = ESRCH; return 0; } #define CDF_SHLEN_LIMIT (UINT32_MAX / 64) #define CDF_PROP_LIMIT (UINT32_MAX / (64 * sizeof(cdf_property_info_t))) file_private const void * cdf_offset(const void *p, size_t l) { return CAST(const void *, CAST(const uint8_t *, p) + l); } file_private const uint8_t * cdf_get_property_info_pos(const cdf_stream_t *sst, const cdf_header_t *h, const uint8_t *p, const uint8_t *e, size_t i) { size_t tail = (i << 1) + 1; size_t ofs; if (p >= e) { DPRINTF(("Past end %p < %p\n", e, p)); return NULL; } if (cdf_check_stream_offset(sst, h, p, (tail + 1) * sizeof(uint32_t), __LINE__) == -1) return NULL; ofs = CDF_GETUINT32(p, tail); if (ofs < 2 * sizeof(uint32_t)) { DPRINTF(("Offset too small %zu\n", ofs)); return NULL; } ofs -= 2 * sizeof(uint32_t); if (ofs > CAST(size_t, e - p)) { DPRINTF(("Offset too big %zu %td\n", ofs, e - p)); return NULL; } return CAST(const uint8_t *, cdf_offset(CAST(const void *, p), ofs)); } file_private cdf_property_info_t * cdf_grow_info(cdf_property_info_t **info, size_t *maxcount, size_t incr) { cdf_property_info_t *inp; size_t newcount = *maxcount + incr; if (newcount > CDF_PROP_LIMIT) { DPRINTF(("exceeded property limit %" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", newcount, CDF_PROP_LIMIT)); goto out; } inp = CAST(cdf_property_info_t *, CDF_REALLOC(*info, newcount * sizeof(*inp))); if (inp == NULL) goto out; *info = inp; *maxcount = newcount; return inp; out: free(*info); *maxcount = 0; *info = NULL; return NULL; } file_private int cdf_copy_info(cdf_property_info_t *inp, const void *p, const void *e, size_t len) { if (inp->pi_type & CDF_VECTOR) return 0; if (CAST(size_t, CAST(const char *, e) - CAST(const char *, p)) < len) return 0; (void)memcpy(&inp->pi_val, p, len); switch (len) { case 2: inp->pi_u16 = CDF_TOLE2(inp->pi_u16); break; case 4: inp->pi_u32 = CDF_TOLE4(inp->pi_u32); break; case 8: inp->pi_u64 = CDF_TOLE8(inp->pi_u64); break; default: abort(); } return 1; } file_protected int cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h, uint32_t offs, cdf_property_info_t **info, size_t *count, size_t *maxcount) { const cdf_section_header_t *shp; cdf_section_header_t sh; const uint8_t *p, *q, *e; size_t i, o4, nelements, j, slen, left; cdf_property_info_t *inp; if (offs > UINT32_MAX / 4) { errno = EFTYPE; goto out; } shp = CAST(const cdf_section_header_t *, cdf_offset(sst->sst_tab, offs)); if (cdf_check_stream_offset(sst, h, shp, sizeof(*shp), __LINE__) == -1) goto out; sh.sh_len = CDF_TOLE4(shp->sh_len); if (sh.sh_len > CDF_SHLEN_LIMIT) { errno = EFTYPE; goto out; } if (cdf_check_stream_offset(sst, h, shp, sh.sh_len, __LINE__) == -1) goto out; sh.sh_properties = CDF_TOLE4(shp->sh_properties); DPRINTF(("section len: %u properties %u\n", sh.sh_len, sh.sh_properties)); if (sh.sh_properties > CDF_PROP_LIMIT) goto out; inp = cdf_grow_info(info, maxcount, sh.sh_properties); if (inp == NULL) goto out; inp += *count; *count += sh.sh_properties; p = CAST(const uint8_t *, cdf_offset(sst->sst_tab, offs + sizeof(sh))); e = CAST(const uint8_t *, cdf_offset(shp, sh.sh_len)); if (p >= e || cdf_check_stream_offset(sst, h, e, 0, __LINE__) == -1) goto out; for (i = 0; i < sh.sh_properties; i++) { if ((q = cdf_get_property_info_pos(sst, h, p, e, i)) == NULL) goto out; inp[i].pi_id = CDF_GETUINT32(p, i << 1); left = CAST(size_t, e - q); if (left < sizeof(uint32_t)) { DPRINTF(("short info (no type)_\n")); goto out; } inp[i].pi_type = CDF_GETUINT32(q, 0); DPRINTF(("%" SIZE_T_FORMAT "u) id=%#x type=%#x offs=%#tx,%#x\n", i, inp[i].pi_id, inp[i].pi_type, q - p, offs)); if (inp[i].pi_type & CDF_VECTOR) { if (left < sizeof(uint32_t) * 2) { DPRINTF(("missing CDF_VECTOR length\n")); goto out; } nelements = CDF_GETUINT32(q, 1); if (nelements > CDF_ELEMENT_LIMIT || nelements == 0) { DPRINTF(("CDF_VECTOR with nelements == %" SIZE_T_FORMAT "u\n", nelements)); goto out; } slen = 2; } else { nelements = 1; slen = 1; } o4 = slen * sizeof(uint32_t); if (inp[i].pi_type & (CDF_ARRAY|CDF_BYREF|CDF_RESERVED)) goto unknown; switch (inp[i].pi_type & CDF_TYPEMASK) { case CDF_NULL: case CDF_EMPTY: break; case CDF_SIGNED16: if (!cdf_copy_info(&inp[i], &q[o4], e, sizeof(int16_t))) goto unknown; break; case CDF_SIGNED32: case CDF_BOOL: case CDF_UNSIGNED32: case CDF_FLOAT: if (!cdf_copy_info(&inp[i], &q[o4], e, sizeof(int32_t))) goto unknown; break; case CDF_SIGNED64: case CDF_UNSIGNED64: case CDF_DOUBLE: case CDF_FILETIME: if (!cdf_copy_info(&inp[i], &q[o4], e, sizeof(int64_t))) goto unknown; break; case CDF_LENGTH32_STRING: case CDF_LENGTH32_WSTRING: if (nelements > 1) { size_t nelem = inp - *info; inp = cdf_grow_info(info, maxcount, nelements); if (inp == NULL) goto out; inp += nelem; } for (j = 0; j < nelements && i < sh.sh_properties; j++, i++) { uint32_t l; if (o4 + sizeof(uint32_t) > left) goto out; l = CDF_GETUINT32(q, slen); o4 += sizeof(uint32_t); if (o4 + l > left) goto out; inp[i].pi_str.s_len = l; inp[i].pi_str.s_buf = CAST(const char *, CAST(const void *, &q[o4])); DPRINTF(("o=%" SIZE_T_FORMAT "u l=%d(%" SIZE_T_FORMAT "u), t=%" SIZE_T_FORMAT "u s=%.*s\n", o4, l, CDF_ROUND(l, sizeof(l)), left, (int)l, inp[i].pi_str.s_buf)); if (l & 1) l++; slen += l >> 1; o4 = slen * sizeof(uint32_t); } i--; break; case CDF_CLIPBOARD: if (inp[i].pi_type & CDF_VECTOR) goto unknown; break; default: unknown: memset(&inp[i].pi_val, 0, sizeof(inp[i].pi_val)); DPRINTF(("Don't know how to deal with %#x\n", inp[i].pi_type)); break; } } return 0; out: free(*info); *info = NULL; *count = 0; *maxcount = 0; errno = EFTYPE; return -1; } file_protected int cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h, cdf_summary_info_header_t *ssi, cdf_property_info_t **info, size_t *count) { size_t maxcount; const cdf_summary_info_header_t *si = CAST(const cdf_summary_info_header_t *, sst->sst_tab); const cdf_section_declaration_t *sd = CAST(const cdf_section_declaration_t *, RCAST(const void *, RCAST(const char *, sst->sst_tab) + CDF_SECTION_DECLARATION_OFFSET)); if (cdf_check_stream_offset(sst, h, si, sizeof(*si), __LINE__) == -1 || cdf_check_stream_offset(sst, h, sd, sizeof(*sd), __LINE__) == -1) return -1; ssi->si_byte_order = CDF_TOLE2(si->si_byte_order); ssi->si_os_version = CDF_TOLE2(si->si_os_version); ssi->si_os = CDF_TOLE2(si->si_os); ssi->si_class = si->si_class; cdf_swap_class(&ssi->si_class); ssi->si_count = CDF_TOLE4(si->si_count); *count = 0; maxcount = 0; *info = NULL; if (cdf_read_property_info(sst, h, CDF_TOLE4(sd->sd_offset), info, count, &maxcount) == -1) return -1; return 0; } #define extract_catalog_field(t, f, l) \ if (b + l + sizeof(cep->f) > eb) { \ cep->ce_namlen = 0; \ break; \ } \ memcpy(&cep->f, b + (l), sizeof(cep->f)); \ ce[i].f = CAST(t, CDF_TOLE(cep->f)) file_protected int cdf_unpack_catalog(const cdf_header_t *h, const cdf_stream_t *sst, cdf_catalog_t **cat) { size_t ss = cdf_check_stream(sst, h); const char *b = CAST(const char *, sst->sst_tab); const char *nb, *eb = b + ss * sst->sst_len; size_t nr, i, j, k; cdf_catalog_entry_t *ce; uint16_t reclen; const uint16_t *np; for (nr = 0;; nr++) { memcpy(&reclen, b, sizeof(reclen)); reclen = CDF_TOLE2(reclen); if (reclen == 0) break; b += reclen; if (b > eb) break; } if (nr == 0) return -1; nr--; *cat = CAST(cdf_catalog_t *, CDF_MALLOC(sizeof(cdf_catalog_t) + nr * sizeof(*ce))); if (*cat == NULL) return -1; ce = (*cat)->cat_e; memset(ce, 0, nr * sizeof(*ce)); b = CAST(const char *, sst->sst_tab); for (j = i = 0; i < nr; b += reclen) { cdf_catalog_entry_t *cep = &ce[j]; uint16_t rlen; extract_catalog_field(uint16_t, ce_namlen, 0); extract_catalog_field(uint16_t, ce_num, 4); extract_catalog_field(uint64_t, ce_timestamp, 8); reclen = cep->ce_namlen; if (reclen < 14) { cep->ce_namlen = 0; continue; } cep->ce_namlen = __arraycount(cep->ce_name) - 1; rlen = reclen - 14; if (cep->ce_namlen > rlen) cep->ce_namlen = rlen; np = CAST(const uint16_t *, CAST(const void *, (b + 16))); nb = CAST(const char *, CAST(const void *, (np + cep->ce_namlen))); if (nb > eb) { cep->ce_namlen = 0; break; } for (k = 0; k < cep->ce_namlen; k++) cep->ce_name[k] = np[k]; /* XXX: CDF_TOLE2? */ cep->ce_name[cep->ce_namlen] = 0; j = i; i++; } (*cat)->cat_num = j; return 0; } file_protected int cdf_print_classid(char *buf, size_t buflen, const cdf_classid_t *id) { return snprintf(buf, buflen, "%.8x-%.4x-%.4x-%.2x%.2x-" "%.2x%.2x%.2x%.2x%.2x%.2x", id->cl_dword, id->cl_word[0], id->cl_word[1], id->cl_two[0], id->cl_two[1], id->cl_six[0], id->cl_six[1], id->cl_six[2], id->cl_six[3], id->cl_six[4], id->cl_six[5]); } file_private const struct { uint32_t v; const char *n; } vn[] = { { CDF_PROPERTY_CODE_PAGE, "Code page" }, { CDF_PROPERTY_TITLE, "Title" }, { CDF_PROPERTY_SUBJECT, "Subject" }, { CDF_PROPERTY_AUTHOR, "Author" }, { CDF_PROPERTY_KEYWORDS, "Keywords" }, { CDF_PROPERTY_COMMENTS, "Comments" }, { CDF_PROPERTY_TEMPLATE, "Template" }, { CDF_PROPERTY_LAST_SAVED_BY, "Last Saved By" }, { CDF_PROPERTY_REVISION_NUMBER, "Revision Number" }, { CDF_PROPERTY_TOTAL_EDITING_TIME, "Total Editing Time" }, { CDF_PROPERTY_LAST_PRINTED, "Last Printed" }, { CDF_PROPERTY_CREATE_TIME, "Create Time/Date" }, { CDF_PROPERTY_LAST_SAVED_TIME, "Last Saved Time/Date" }, { CDF_PROPERTY_NUMBER_OF_PAGES, "Number of Pages" }, { CDF_PROPERTY_NUMBER_OF_WORDS, "Number of Words" }, { CDF_PROPERTY_NUMBER_OF_CHARACTERS, "Number of Characters" }, { CDF_PROPERTY_THUMBNAIL, "Thumbnail" }, { CDF_PROPERTY_NAME_OF_APPLICATION, "Name of Creating Application" }, { CDF_PROPERTY_SECURITY, "Security" }, { CDF_PROPERTY_LOCALE_ID, "Locale ID" }, }; file_protected int cdf_print_property_name(char *buf, size_t bufsiz, uint32_t p) { size_t i; for (i = 0; i < __arraycount(vn); i++) if (vn[i].v == p) return snprintf(buf, bufsiz, "%s", vn[i].n); return snprintf(buf, bufsiz, "%#x", p); } file_protected int cdf_print_elapsed_time(char *buf, size_t bufsiz, cdf_timestamp_t ts) { int len = 0; int days, hours, mins, secs; ts /= CDF_TIME_PREC; secs = CAST(int, ts % 60); ts /= 60; mins = CAST(int, ts % 60); ts /= 60; hours = CAST(int, ts % 24); ts /= 24; days = CAST(int, ts); if (days) { len += snprintf(buf + len, bufsiz - len, "%dd+", days); if (CAST(size_t, len) >= bufsiz) return len; } if (days || hours) { len += snprintf(buf + len, bufsiz - len, "%.2d:", hours); if (CAST(size_t, len) >= bufsiz) return len; } len += snprintf(buf + len, bufsiz - len, "%.2d:", mins); if (CAST(size_t, len) >= bufsiz) return len; len += snprintf(buf + len, bufsiz - len, "%.2d", secs); return len; } file_protected char * cdf_u16tos8(char *buf, size_t len, const uint16_t *p) { size_t i; for (i = 0; i < len && p[i]; i++) buf[i] = CAST(char, p[i]); buf[i] = '\0'; return buf; } #ifdef CDF_DEBUG file_protected void cdf_dump_header(const cdf_header_t *h) { size_t i; #define DUMP(a, b) (void)fprintf(stderr, "%40.40s = " a "\n", # b, h->h_ ## b) #define DUMP2(a, b) (void)fprintf(stderr, "%40.40s = " a " (" a ")\n", # b, \ h->h_ ## b, 1 << h->h_ ## b) DUMP("%d", revision); DUMP("%d", version); DUMP("%#x", byte_order); DUMP2("%d", sec_size_p2); DUMP2("%d", short_sec_size_p2); DUMP("%d", num_sectors_in_sat); DUMP("%d", secid_first_directory); DUMP("%d", min_size_standard_stream); DUMP("%d", secid_first_sector_in_short_sat); DUMP("%d", num_sectors_in_short_sat); DUMP("%d", secid_first_sector_in_master_sat); DUMP("%d", num_sectors_in_master_sat); for (i = 0; i < __arraycount(h->h_master_sat); i++) { if (h->h_master_sat[i] == CDF_SECID_FREE) break; (void)fprintf(stderr, "%35.35s[%.3" SIZE_T_FORMAT "u] = %d\n", "master_sat", i, h->h_master_sat[i]); } } file_protected void cdf_dump_sat(const char *prefix, const cdf_sat_t *sat, size_t size) { size_t i, j, s = size / sizeof(cdf_secid_t); for (i = 0; i < sat->sat_len; i++) { (void)fprintf(stderr, "%s[%" SIZE_T_FORMAT "u]:\n%.6" SIZE_T_FORMAT "u: ", prefix, i, i * s); for (j = 0; j < s; j++) { (void)fprintf(stderr, "%5d, ", CDF_TOLE4(sat->sat_tab[s * i + j])); if ((j + 1) % 10 == 0) (void)fprintf(stderr, "\n%.6" SIZE_T_FORMAT "u: ", i * s + j + 1); } (void)fprintf(stderr, "\n"); } } file_protected void cdf_dump(const void *v, size_t len) { size_t i, j; const unsigned char *p = v; char abuf[16]; (void)fprintf(stderr, "%.4x: ", 0); for (i = 0, j = 0; i < len; i++, p++) { (void)fprintf(stderr, "%.2x ", *p); abuf[j++] = isprint(*p) ? *p : '.'; if (j == 16) { j = 0; abuf[15] = '\0'; (void)fprintf(stderr, "%s\n%.4" SIZE_T_FORMAT "x: ", abuf, i + 1); } } (void)fprintf(stderr, "\n"); } file_protected void cdf_dump_stream(const cdf_stream_t *sst) { size_t ss = sst->sst_ss; cdf_dump(sst->sst_tab, ss * sst->sst_len); } file_protected void cdf_dump_dir(const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir) { size_t i, j; cdf_directory_t *d; char name[__arraycount(d->d_name)]; cdf_stream_t scn; struct timespec ts; static const char *types[] = { "empty", "user storage", "user stream", "lockbytes", "property", "root storage" }; for (i = 0; i < dir->dir_len; i++) { char buf[26]; d = &dir->dir_tab[i]; for (j = 0; j < sizeof(name); j++) name[j] = (char)CDF_TOLE2(d->d_name[j]); (void)fprintf(stderr, "Directory %" SIZE_T_FORMAT "u: %s\n", i, name); if (d->d_type < __arraycount(types)) (void)fprintf(stderr, "Type: %s\n", types[d->d_type]); else (void)fprintf(stderr, "Type: %d\n", d->d_type); (void)fprintf(stderr, "Color: %s\n", d->d_color ? "black" : "red"); (void)fprintf(stderr, "Left child: %d\n", d->d_left_child); (void)fprintf(stderr, "Right child: %d\n", d->d_right_child); (void)fprintf(stderr, "Flags: %#x\n", d->d_flags); cdf_timestamp_to_timespec(&ts, d->d_created); (void)fprintf(stderr, "Created %s", cdf_ctime(&ts.tv_sec, buf)); cdf_timestamp_to_timespec(&ts, d->d_modified); (void)fprintf(stderr, "Modified %s", cdf_ctime(&ts.tv_sec, buf)); (void)fprintf(stderr, "Stream %d\n", d->d_stream_first_sector); (void)fprintf(stderr, "Size %d\n", d->d_size); switch (d->d_type) { case CDF_DIR_TYPE_USER_STORAGE: (void)fprintf(stderr, "Storage: %d\n", d->d_storage); break; case CDF_DIR_TYPE_USER_STREAM: if (sst == NULL) break; if (cdf_read_sector_chain(info, h, sat, ssat, sst, d->d_stream_first_sector, d->d_size, &scn) == -1) { warn("Can't read stream for %s at %d len %d", name, d->d_stream_first_sector, d->d_size); break; } cdf_dump_stream(&scn); free(scn.sst_tab); break; default: break; } } } file_protected void cdf_dump_property_info(const cdf_property_info_t *info, size_t count) { cdf_timestamp_t tp; struct timespec ts; char buf[64]; size_t i, j; for (i = 0; i < count; i++) { cdf_print_property_name(buf, sizeof(buf), info[i].pi_id); (void)fprintf(stderr, "%" SIZE_T_FORMAT "u) %s: ", i, buf); switch (info[i].pi_type) { case CDF_NULL: break; case CDF_SIGNED16: (void)fprintf(stderr, "signed 16 [%hd]\n", info[i].pi_s16); break; case CDF_SIGNED32: (void)fprintf(stderr, "signed 32 [%d]\n", info[i].pi_s32); break; case CDF_UNSIGNED32: (void)fprintf(stderr, "unsigned 32 [%u]\n", info[i].pi_u32); break; case CDF_FLOAT: (void)fprintf(stderr, "float [%g]\n", info[i].pi_f); break; case CDF_DOUBLE: (void)fprintf(stderr, "double [%g]\n", info[i].pi_d); break; case CDF_LENGTH32_STRING: (void)fprintf(stderr, "string %u [%.*s]\n", info[i].pi_str.s_len, info[i].pi_str.s_len, info[i].pi_str.s_buf); break; case CDF_LENGTH32_WSTRING: (void)fprintf(stderr, "string %u [", info[i].pi_str.s_len); for (j = 0; j < info[i].pi_str.s_len - 1; j++) (void)fputc(info[i].pi_str.s_buf[j << 1], stderr); (void)fprintf(stderr, "]\n"); break; case CDF_FILETIME: tp = info[i].pi_tp; if (tp < 1000000000000000LL) { cdf_print_elapsed_time(buf, sizeof(buf), tp); (void)fprintf(stderr, "timestamp %s\n", buf); } else { char tbuf[26]; cdf_timestamp_to_timespec(&ts, tp); (void)fprintf(stderr, "timestamp %s", cdf_ctime(&ts.tv_sec, tbuf)); } break; case CDF_CLIPBOARD: (void)fprintf(stderr, "CLIPBOARD %u\n", info[i].pi_u32); break; default: DPRINTF(("Don't know how to deal with %#x\n", info[i].pi_type)); break; } } } file_protected void cdf_dump_summary_info(const cdf_header_t *h, const cdf_stream_t *sst) { char buf[128]; cdf_summary_info_header_t ssi; cdf_property_info_t *info; size_t count; (void)&h; if (cdf_unpack_summary_info(sst, h, &ssi, &info, &count) == -1) return; (void)fprintf(stderr, "Endian: %#x\n", ssi.si_byte_order); (void)fprintf(stderr, "Os Version %d.%d\n", ssi.si_os_version & 0xff, ssi.si_os_version >> 8); (void)fprintf(stderr, "Os %d\n", ssi.si_os); cdf_print_classid(buf, sizeof(buf), &ssi.si_class); (void)fprintf(stderr, "Class %s\n", buf); (void)fprintf(stderr, "Count %d\n", ssi.si_count); cdf_dump_property_info(info, count); free(info); } file_protected void cdf_dump_catalog(const cdf_header_t *h, const cdf_stream_t *sst) { cdf_catalog_t *cat; cdf_unpack_catalog(h, sst, &cat); const cdf_catalog_entry_t *ce = cat->cat_e; struct timespec ts; char tbuf[64], sbuf[256]; size_t i; printf("Catalog:\n"); for (i = 0; i < cat->cat_num; i++) { cdf_timestamp_to_timespec(&ts, ce[i].ce_timestamp); printf("\t%d %s %s", ce[i].ce_num, cdf_u16tos8(sbuf, ce[i].ce_namlen, ce[i].ce_name), cdf_ctime(&ts.tv_sec, tbuf)); } free(cat); } #endif #ifdef TEST int main(int argc, char *argv[]) { int i; cdf_header_t h; cdf_sat_t sat, ssat; cdf_stream_t sst, scn; cdf_dir_t dir; cdf_info_t info; const cdf_directory_t *root; #ifdef __linux__ #define getprogname() __progname extern char *__progname; #endif if (argc < 2) { (void)fprintf(stderr, "Usage: %s \n", getprogname()); return -1; } info.i_buf = NULL; info.i_len = 0; for (i = 1; i < argc; i++) { if ((info.i_fd = open(argv[1], O_RDONLY)) == -1) err(EXIT_FAILURE, "Cannot open `%s'", argv[1]); if (cdf_read_header(&info, &h) == -1) err(EXIT_FAILURE, "Cannot read header"); #ifdef CDF_DEBUG cdf_dump_header(&h); #endif if (cdf_read_sat(&info, &h, &sat) == -1) err(EXIT_FAILURE, "Cannot read sat"); #ifdef CDF_DEBUG cdf_dump_sat("SAT", &sat, CDF_SEC_SIZE(&h)); #endif if (cdf_read_ssat(&info, &h, &sat, &ssat) == -1) err(EXIT_FAILURE, "Cannot read ssat"); #ifdef CDF_DEBUG cdf_dump_sat("SSAT", &ssat, CDF_SHORT_SEC_SIZE(&h)); #endif if (cdf_read_dir(&info, &h, &sat, &dir) == -1) err(EXIT_FAILURE, "Cannot read dir"); if (cdf_read_short_stream(&info, &h, &sat, &dir, &sst, &root) == -1) err(EXIT_FAILURE, "Cannot read short stream"); #ifdef CDF_DEBUG cdf_dump_stream(&sst); #endif #ifdef CDF_DEBUG cdf_dump_dir(&info, &h, &sat, &ssat, &sst, &dir); #endif if (cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir, &scn) == -1) warn("Cannot read summary info"); #ifdef CDF_DEBUG else cdf_dump_summary_info(&h, &scn); #endif if (cdf_read_user_stream(&info, &h, &sat, &ssat, &sst, &dir, "Catalog", &scn) == -1) warn("Cannot read catalog"); #ifdef CDF_DEBUG else cdf_dump_catalog(&h, &scn); #endif (void)close(info.i_fd); } return 0; } #endif file-5.46/src/cdf_time.c000664 023540 023540 00000011144 14721165453 016647 0ustar00christoschristos000000 000000 /*- * Copyright (c) 2008 Christos Zoulas * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: cdf_time.c,v 1.25 2024/11/25 21:24:59 christos Exp $") #endif #include #ifdef TEST #include #endif #include #include "cdf.h" #define isleap(y) ((((y) % 4) == 0) && \ ((((y) % 100) != 0) || (((y) % 400) == 0))) file_private const int mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; /* * Return the number of days between jan 01 1601 and jan 01 of year. */ file_private int cdf_getdays(int year) { int days = 0; int y; for (y = CDF_BASE_YEAR; y < year; y++) days += isleap(y) + 365; return days; } /* * Return the day within the month */ file_private int cdf_getday(int year, int days) { size_t m; for (m = 0; m < __arraycount(mdays); m++) { int sub = mdays[m] + (m == 1 && isleap(year)); if (days < sub) return days; days -= sub; } return days; } /* * Return the 0...11 month number. */ file_private int cdf_getmonth(int year, int days) { size_t m; for (m = 0; m < __arraycount(mdays); m++) { days -= mdays[m]; if (m == 1 && isleap(year)) days--; if (days <= 0) return CAST(int, m); } return CAST(int, m); } file_protected int cdf_timestamp_to_timespec(struct timespec *ts, cdf_timestamp_t t) { struct tm tm; #ifdef HAVE_STRUCT_TM_TM_ZONE file_private char UTC[] = "UTC"; #endif int rdays; /* Unit is 100's of nanoseconds */ ts->tv_nsec = (t % CDF_TIME_PREC) * 100; t /= CDF_TIME_PREC; tm.tm_sec = CAST(int, t % 60); t /= 60; tm.tm_min = CAST(int, t % 60); t /= 60; tm.tm_hour = CAST(int, t % 24); t /= 24; /* XXX: Approx */ tm.tm_year = CAST(int, CDF_BASE_YEAR + (t / 365)); rdays = cdf_getdays(tm.tm_year); t -= rdays - 1; tm.tm_mday = cdf_getday(tm.tm_year, CAST(int, t)); tm.tm_mon = cdf_getmonth(tm.tm_year, CAST(int, t)); tm.tm_wday = 0; tm.tm_yday = 0; tm.tm_isdst = 0; #ifdef HAVE_STRUCT_TM_TM_GMTOFF tm.tm_gmtoff = 0; #endif #ifdef HAVE_STRUCT_TM_TM_ZONE tm.tm_zone = UTC; #endif tm.tm_year -= 1900; ts->tv_sec = mktime(&tm); if (ts->tv_sec == -1) { errno = EINVAL; return -1; } return 0; } file_protected int /*ARGSUSED*/ cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timespec *ts) { #ifndef __lint__ (void)&t; (void)&ts; #endif #ifdef notyet struct tm tm; if (gmtime_r(&ts->ts_sec, &tm) == NULL) { errno = EINVAL; return -1; } *t = (ts->ts_nsec / 100) * CDF_TIME_PREC; *t += tm.tm_sec; *t += tm.tm_min * 60; *t += tm.tm_hour * 60 * 60; *t += tm.tm_mday * 60 * 60 * 24; #endif return 0; } file_protected char * cdf_ctime(const time_t *sec, char *buf) { char *ptr = *sec > MAX_CTIME ? NULL : ctime_r(sec, buf); if (ptr != NULL) return buf; #ifdef WIN32 (void)snprintf(buf, 26, "*Bad* 0x%16.16I64x\n", CAST(long long, *sec)); #else (void)snprintf(buf, 26, "*Bad* %#16.16" INT64_T_FORMAT "x\n", CAST(long long, *sec)); #endif return buf; } #ifdef TEST_TIME int main(int argc, char *argv[]) { struct timespec ts; char buf[25]; file_private const cdf_timestamp_t tst = 0x01A5E403C2D59C00ULL; file_private const char *ref = "Sat Apr 23 01:30:00 1977"; char *p, *q; cdf_timestamp_to_timespec(&ts, tst); p = cdf_ctime(&ts.tv_sec, buf); if ((q = strchr(p, '\n')) != NULL) *q = '\0'; if (strcmp(ref, p) != 0) errx(1, "Error date %s != %s\n", ref, p); return 0; } #endif file-5.46/src/readcdf.c000664 023540 023540 00000040605 14721163442 016465 0ustar00christoschristos000000 000000 /*- * Copyright (c) 2008, 2016 Christos Zoulas * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: readcdf.c,v 1.80 2023/01/24 20:13:40 christos Exp $") #endif #include #include #include #include #include #include #include "cdf.h" #include "magic.h" #define NOTMIME(ms) (((ms)->flags & MAGIC_MIME) == 0) static const struct nv { const char *pattern; const char *mime; } app2mime[] = { { "Word", "msword", }, { "Excel", "vnd.ms-excel", }, { "Powerpoint", "vnd.ms-powerpoint", }, { "Crystal Reports", "x-rpt", }, { "Advanced Installer", "vnd.ms-msi", }, { "InstallShield", "vnd.ms-msi", }, { "Microsoft Patch Compiler", "vnd.ms-msi", }, { "NAnt", "vnd.ms-msi", }, { "Windows Installer", "vnd.ms-msi", }, { NULL, NULL, }, }, name2mime[] = { { "Book", "vnd.ms-excel", }, { "Workbook", "vnd.ms-excel", }, { "WordDocument", "msword", }, { "PowerPoint", "vnd.ms-powerpoint", }, { "DigitalSignature", "vnd.ms-msi", }, { NULL, NULL, }, }, name2desc[] = { { "Book", "Microsoft Excel", }, { "Workbook", "Microsoft Excel", }, { "WordDocument", "Microsoft Word", }, { "PowerPoint", "Microsoft PowerPoint", }, { "DigitalSignature", "Microsoft Installer", }, { NULL, NULL, }, }; static const struct cv { uint64_t clsid[2]; const char *mime; } clsid2mime[] = { { { 0x00000000000c1084ULL, 0x46000000000000c0ULL }, "x-msi", }, { { 0, 0 }, NULL, }, }, clsid2desc[] = { { { 0x00000000000c1084ULL, 0x46000000000000c0ULL }, "MSI Installer", }, { { 0, 0 }, NULL, }, }; file_private const char * cdf_clsid_to_mime(const uint64_t clsid[2], const struct cv *cv) { size_t i; for (i = 0; cv[i].mime != NULL; i++) { if (clsid[0] == cv[i].clsid[0] && clsid[1] == cv[i].clsid[1]) return cv[i].mime; } #ifdef CDF_DEBUG fprintf(stderr, "unknown mime %" PRIx64 ", %" PRIx64 "\n", clsid[0], clsid[1]); #endif return NULL; } file_private const char * cdf_app_to_mime(const char *vbuf, const struct nv *nv) { size_t i; const char *rv = NULL; #ifdef USE_C_LOCALE locale_t old_lc_ctype, c_lc_ctype; c_lc_ctype = newlocale(LC_CTYPE_MASK, "C", 0); assert(c_lc_ctype != NULL); old_lc_ctype = uselocale(c_lc_ctype); assert(old_lc_ctype != NULL); #else char *old_lc_ctype = setlocale(LC_CTYPE, NULL); assert(old_lc_ctype != NULL); old_lc_ctype = strdup(old_lc_ctype); assert(old_lc_ctype != NULL); (void)setlocale(LC_CTYPE, "C"); #endif for (i = 0; nv[i].pattern != NULL; i++) if (strcasestr(vbuf, nv[i].pattern) != NULL) { rv = nv[i].mime; break; } #ifdef CDF_DEBUG fprintf(stderr, "unknown app %s\n", vbuf); #endif #ifdef USE_C_LOCALE (void)uselocale(old_lc_ctype); freelocale(c_lc_ctype); #else (void)setlocale(LC_CTYPE, old_lc_ctype); free(old_lc_ctype); #endif return rv; } file_private int cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info, size_t count, const cdf_directory_t *root_storage) { size_t i; cdf_timestamp_t tp; struct timespec ts; char buf[64]; const char *str = NULL; const char *s, *e; int len; if (!NOTMIME(ms) && root_storage) str = cdf_clsid_to_mime(root_storage->d_storage_uuid, clsid2mime); for (i = 0; i < count; i++) { cdf_print_property_name(buf, sizeof(buf), info[i].pi_id); switch (info[i].pi_type) { case CDF_NULL: break; case CDF_SIGNED16: if (NOTMIME(ms) && file_printf(ms, ", %s: %hd", buf, info[i].pi_s16) == -1) return -1; break; case CDF_SIGNED32: if (NOTMIME(ms) && file_printf(ms, ", %s: %d", buf, info[i].pi_s32) == -1) return -1; break; case CDF_UNSIGNED32: if (NOTMIME(ms) && file_printf(ms, ", %s: %u", buf, info[i].pi_u32) == -1) return -1; break; case CDF_FLOAT: if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf, info[i].pi_f) == -1) return -1; break; case CDF_DOUBLE: if (NOTMIME(ms) && file_printf(ms, ", %s: %g", buf, info[i].pi_d) == -1) return -1; break; case CDF_LENGTH32_STRING: case CDF_LENGTH32_WSTRING: len = info[i].pi_str.s_len; if (len > 1) { char vbuf[1024]; size_t j, k = 1; if (info[i].pi_type == CDF_LENGTH32_WSTRING) k++; s = info[i].pi_str.s_buf; e = info[i].pi_str.s_buf + len; for (j = 0; s < e && j < sizeof(vbuf) && len--; s += k) { if (*s == '\0') break; if (isprint(CAST(unsigned char, *s))) vbuf[j++] = *s; } if (j == sizeof(vbuf)) --j; vbuf[j] = '\0'; if (NOTMIME(ms)) { if (vbuf[0]) { if (file_printf(ms, ", %s: %s", buf, vbuf) == -1) return -1; } } else if (str == NULL && info[i].pi_id == CDF_PROPERTY_NAME_OF_APPLICATION) { str = cdf_app_to_mime(vbuf, app2mime); } } break; case CDF_FILETIME: tp = info[i].pi_tp; if (tp != 0) { char tbuf[64]; if (tp < 1000000000000000LL) { cdf_print_elapsed_time(tbuf, sizeof(tbuf), tp); if (NOTMIME(ms) && file_printf(ms, ", %s: %s", buf, tbuf) == -1) return -1; } else { char *c, *ec; cdf_timestamp_to_timespec(&ts, tp); c = cdf_ctime(&ts.tv_sec, tbuf); if (c != NULL && (ec = strchr(c, '\n')) != NULL) *ec = '\0'; if (NOTMIME(ms) && file_printf(ms, ", %s: %s", buf, c) == -1) return -1; } } break; case CDF_CLIPBOARD: break; default: return -1; } } if (ms->flags & MAGIC_MIME_TYPE) { if (str == NULL) return 0; if (file_printf(ms, "application/%s", str) == -1) return -1; } return 1; } file_private int cdf_file_catalog(struct magic_set *ms, const cdf_header_t *h, const cdf_stream_t *sst) { cdf_catalog_t *cat; size_t i; char buf[256]; cdf_catalog_entry_t *ce; if (NOTMIME(ms)) { if (file_printf(ms, "Microsoft Thumbs.db [") == -1) return -1; if (cdf_unpack_catalog(h, sst, &cat) == -1) return -1; ce = cat->cat_e; /* skip first entry since it has a , or paren */ for (i = 1; i < cat->cat_num; i++) if (file_printf(ms, "%s%s", cdf_u16tos8(buf, ce[i].ce_namlen, ce[i].ce_name), i == cat->cat_num - 1 ? "]" : ", ") == -1) { free(cat); return -1; } free(cat); } else if (ms->flags & MAGIC_MIME_TYPE) { if (file_printf(ms, "application/CDFV2") == -1) return -1; } return 1; } file_private int cdf_file_summary_info(struct magic_set *ms, const cdf_header_t *h, const cdf_stream_t *sst, const cdf_directory_t *root_storage) { cdf_summary_info_header_t si; cdf_property_info_t *info; size_t count; int m; if (cdf_unpack_summary_info(sst, h, &si, &info, &count) == -1) return -1; if (NOTMIME(ms)) { const char *str; if (file_printf(ms, "Composite Document File V2 Document") == -1) return -1; if (file_printf(ms, ", %s Endian", si.si_byte_order == 0xfffe ? "Little" : "Big") == -1) return -2; switch (si.si_os) { case 2: if (file_printf(ms, ", Os: Windows, Version %d.%d", si.si_os_version & 0xff, CAST(uint32_t, si.si_os_version) >> 8) == -1) return -2; break; case 1: if (file_printf(ms, ", Os: MacOS, Version %d.%d", CAST(uint32_t, si.si_os_version) >> 8, si.si_os_version & 0xff) == -1) return -2; break; default: if (file_printf(ms, ", Os %d, Version: %d.%d", si.si_os, si.si_os_version & 0xff, CAST(uint32_t, si.si_os_version) >> 8) == -1) return -2; break; } if (root_storage) { str = cdf_clsid_to_mime(root_storage->d_storage_uuid, clsid2desc); if (str) { if (file_printf(ms, ", %s", str) == -1) return -2; } } } m = cdf_file_property_info(ms, info, count, root_storage); free(info); return m == -1 ? -2 : m; } #ifdef notdef file_private char * format_clsid(char *buf, size_t len, const uint64_t uuid[2]) { snprintf(buf, len, "%.8" PRIx64 "-%.4" PRIx64 "-%.4" PRIx64 "-%.4" PRIx64 "-%.12" PRIx64, (uuid[0] >> 32) & (uint64_t)0x000000000ffffffffULL, (uuid[0] >> 16) & (uint64_t)0x0000000000000ffffULL, (uuid[0] >> 0) & (uint64_t)0x0000000000000ffffULL, (uuid[1] >> 48) & (uint64_t)0x0000000000000ffffULL, (uuid[1] >> 0) & (uint64_t)0x0000fffffffffffffULL); return buf; } #endif file_private int cdf_file_catalog_info(struct magic_set *ms, const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir, cdf_stream_t *scn) { int i; if ((i = cdf_read_user_stream(info, h, sat, ssat, sst, dir, "Catalog", scn)) == -1) return i; #ifdef CDF_DEBUG cdf_dump_catalog(h, scn); #endif if ((i = cdf_file_catalog(ms, h, scn)) == -1) return -1; return i; } file_private int cdf_check_summary_info(struct magic_set *ms, const cdf_info_t *info, const cdf_header_t *h, const cdf_sat_t *sat, const cdf_sat_t *ssat, const cdf_stream_t *sst, const cdf_dir_t *dir, cdf_stream_t *scn, const cdf_directory_t *root_storage, const char **expn) { int i; const char *str = NULL; cdf_directory_t *d; char name[__arraycount(d->d_name)]; size_t j, k; #ifdef CDF_DEBUG cdf_dump_summary_info(h, scn); #endif if ((i = cdf_file_summary_info(ms, h, scn, root_storage)) < 0) { *expn = "Can't expand summary_info"; return i; } if (i == 1) return i; for (j = 0; str == NULL && j < dir->dir_len; j++) { d = &dir->dir_tab[j]; for (k = 0; k < sizeof(name); k++) name[k] = CAST(char, cdf_tole2(d->d_name[k])); str = cdf_app_to_mime(name, NOTMIME(ms) ? name2desc : name2mime); } if (NOTMIME(ms)) { if (str != NULL) { if (file_printf(ms, "%s", str) == -1) return -1; i = 1; } } else if (ms->flags & MAGIC_MIME_TYPE) { if (str == NULL) str = "vnd.ms-office"; if (file_printf(ms, "application/%s", str) == -1) return -1; i = 1; } if (i <= 0) { i = cdf_file_catalog_info(ms, info, h, sat, ssat, sst, dir, scn); } return i; } file_private struct sinfo { const char *name; const char *mime; const char *sections[5]; const int types[5]; } sectioninfo[] = { { "Encrypted", "encrypted", { "EncryptedPackage", "EncryptedSummary", NULL, NULL, NULL, }, { CDF_DIR_TYPE_USER_STREAM, CDF_DIR_TYPE_USER_STREAM, 0, 0, 0, }, }, { "QuickBooks", "quickbooks", { #if 0 "TaxForms", "PDFTaxForms", "modulesInBackup", #endif "mfbu_header", NULL, NULL, NULL, NULL, }, { #if 0 CDF_DIR_TYPE_USER_STORAGE, CDF_DIR_TYPE_USER_STORAGE, CDF_DIR_TYPE_USER_STREAM, #endif CDF_DIR_TYPE_USER_STREAM, 0, 0, 0, 0 }, }, { "Microsoft Excel", "vnd.ms-excel", { "Book", "Workbook", NULL, NULL, NULL, }, { CDF_DIR_TYPE_USER_STREAM, CDF_DIR_TYPE_USER_STREAM, 0, 0, 0, }, }, { "Microsoft Word", "msword", { "WordDocument", NULL, NULL, NULL, NULL, }, { CDF_DIR_TYPE_USER_STREAM, 0, 0, 0, 0, }, }, { "Microsoft PowerPoint", "vnd.ms-powerpoint", { "PowerPoint", NULL, NULL, NULL, NULL, }, { CDF_DIR_TYPE_USER_STREAM, 0, 0, 0, 0, }, }, { "Microsoft Outlook Message", "vnd.ms-outlook", { "__properties_version1.0", "__recip_version1.0_#00000000", NULL, NULL, NULL, }, { CDF_DIR_TYPE_USER_STREAM, CDF_DIR_TYPE_USER_STORAGE, 0, 0, 0, }, }, }; file_private int cdf_file_dir_info(struct magic_set *ms, const cdf_dir_t *dir) { size_t sd, j; for (sd = 0; sd < __arraycount(sectioninfo); sd++) { const struct sinfo *si = §ioninfo[sd]; for (j = 0; si->sections[j]; j++) { if (cdf_find_stream(dir, si->sections[j], si->types[j]) > 0) break; #ifdef CDF_DEBUG fprintf(stderr, "Can't read %s\n", si->sections[j]); #endif } if (si->sections[j] == NULL) continue; if (NOTMIME(ms)) { if (file_printf(ms, "CDFV2 %s", si->name) == -1) return -1; } else if (ms->flags & MAGIC_MIME_TYPE) { if (file_printf(ms, "application/%s", si->mime) == -1) return -1; } return 1; } return -1; } file_protected int file_trycdf(struct magic_set *ms, const struct buffer *b) { int fd = b->fd; const unsigned char *buf = CAST(const unsigned char *, b->fbuf); size_t nbytes = b->flen; cdf_info_t info; cdf_header_t h; cdf_sat_t sat, ssat; cdf_stream_t sst, scn; cdf_dir_t dir; int i; const char *expn = ""; const cdf_directory_t *root_storage; scn.sst_tab = NULL; info.i_fd = fd; info.i_buf = buf; info.i_len = nbytes; if (ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)) return 0; if (cdf_read_header(&info, &h) == -1) return 0; #ifdef CDF_DEBUG cdf_dump_header(&h); #endif if ((i = cdf_read_sat(&info, &h, &sat)) == -1) { expn = "Can't read SAT"; goto out0; } #ifdef CDF_DEBUG cdf_dump_sat("SAT", &sat, CDF_SEC_SIZE(&h)); #endif if ((i = cdf_read_ssat(&info, &h, &sat, &ssat)) == -1) { expn = "Can't read SSAT"; goto out1; } #ifdef CDF_DEBUG cdf_dump_sat("SSAT", &ssat, CDF_SHORT_SEC_SIZE(&h)); #endif if ((i = cdf_read_dir(&info, &h, &sat, &dir)) == -1) { expn = "Can't read directory"; goto out2; } if ((i = cdf_read_short_stream(&info, &h, &sat, &dir, &sst, &root_storage)) == -1) { expn = "Cannot read short stream"; goto out3; } #ifdef CDF_DEBUG cdf_dump_dir(&info, &h, &sat, &ssat, &sst, &dir); #endif #ifdef notdef if (root_storage) { if (NOTMIME(ms)) { char clsbuf[128]; if (file_printf(ms, "CLSID %s, ", format_clsid(clsbuf, sizeof(clsbuf), root_storage->d_storage_uuid)) == -1) return -1; } } #endif if (cdf_read_user_stream(&info, &h, &sat, &ssat, &sst, &dir, "FileHeader", &scn) != -1) { #define HWP5_SIGNATURE "HWP Document File" if (scn.sst_len * scn.sst_ss >= sizeof(HWP5_SIGNATURE) - 1 && memcmp(scn.sst_tab, HWP5_SIGNATURE, sizeof(HWP5_SIGNATURE) - 1) == 0) { if (NOTMIME(ms)) { if (file_printf(ms, "Hancom HWP (Hangul Word Processor) file, version 5.0") == -1) return -1; } else if (ms->flags & MAGIC_MIME_TYPE) { if (file_printf(ms, "application/x-hwp") == -1) return -1; } i = 1; goto out5; } else { cdf_zero_stream(&scn); } } if ((i = cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir, &scn)) == -1) { if (errno != ESRCH) { expn = "Cannot read summary info"; } } else { i = cdf_check_summary_info(ms, &info, &h, &sat, &ssat, &sst, &dir, &scn, root_storage, &expn); cdf_zero_stream(&scn); } if (i <= 0) { if ((i = cdf_read_doc_summary_info(&info, &h, &sat, &ssat, &sst, &dir, &scn)) == -1) { if (errno != ESRCH) { expn = "Cannot read summary info"; } } else { i = cdf_check_summary_info(ms, &info, &h, &sat, &ssat, &sst, &dir, &scn, root_storage, &expn); } } if (i <= 0) { i = cdf_file_dir_info(ms, &dir); if (i < 0) expn = "Cannot read section info"; } out5: cdf_zero_stream(&scn); cdf_zero_stream(&sst); out3: free(dir.dir_tab); out2: free(ssat.sat_tab); out1: free(sat.sat_tab); out0: /* If we handled it already, return */ if (i != -1) return i; /* Provide a default handler */ if (NOTMIME(ms)) { if (file_printf(ms, "Composite Document File V2 Document") == -1) return -1; if (*expn) if (file_printf(ms, ", %s", expn) == -1) return -1; } else if (ms->flags & MAGIC_MIME_TYPE) { /* https://reposcope.com/mimetype/application/x-ole-storage */ if (file_printf(ms, "application/x-ole-storage") == -1) return -1; } return 1; } file-5.46/src/cdf.h000664 023540 023540 00000030141 14721164677 015643 0ustar00christoschristos000000 000000 /*- * Copyright (c) 2008 Christos Zoulas * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Parse Composite Document Files, the format used in Microsoft Office * document files before they switched to zipped XML. * Info from: http://sc.openoffice.org/compdocfileformat.pdf * * N.B. This is the "Composite Document File" format, and not the * "Compound Document Format", nor the "Channel Definition Format". */ #ifndef _H_CDF_ #define _H_CDF_ #ifdef WIN32 #include #define timespec timeval #define tv_nsec tv_usec #endif #ifdef __DJGPP__ #define timespec timeval #define tv_nsec tv_usec #endif typedef int32_t cdf_secid_t; #define CDF_LOOP_LIMIT 10000 #define CDF_ELEMENT_LIMIT 100000 #define CDF_SECID_NULL 0 #define CDF_SECID_FREE -1 #define CDF_SECID_END_OF_CHAIN -2 #define CDF_SECID_SECTOR_ALLOCATION_TABLE -3 #define CDF_SECID_MASTER_SECTOR_ALLOCATION_TABLE -4 typedef struct { uint64_t h_magic; #define CDF_MAGIC 0xE11AB1A1E011CFD0LL uint64_t h_uuid[2]; uint16_t h_revision; uint16_t h_version; uint16_t h_byte_order; uint16_t h_sec_size_p2; uint16_t h_short_sec_size_p2; uint8_t h_unused0[10]; uint32_t h_num_sectors_in_sat; uint32_t h_secid_first_directory; uint8_t h_unused1[4]; uint32_t h_min_size_standard_stream; cdf_secid_t h_secid_first_sector_in_short_sat; uint32_t h_num_sectors_in_short_sat; cdf_secid_t h_secid_first_sector_in_master_sat; uint32_t h_num_sectors_in_master_sat; cdf_secid_t h_master_sat[436/4]; } cdf_header_t; #define CDF_SEC_SIZE(h) CAST(size_t, 1 << (h)->h_sec_size_p2) #define CDF_SEC_POS(h, secid) (CDF_SEC_SIZE(h) + (secid) * CDF_SEC_SIZE(h)) #define CDF_SHORT_SEC_SIZE(h) CAST(size_t, 1 << (h)->h_short_sec_size_p2) #define CDF_SHORT_SEC_POS(h, secid) ((secid) * CDF_SHORT_SEC_SIZE(h)) typedef int32_t cdf_dirid_t; #define CDF_DIRID_NULL -1 typedef int64_t cdf_timestamp_t; #define CDF_BASE_YEAR 1601 #define CDF_TIME_PREC 10000000 typedef struct { uint16_t d_name[32]; uint16_t d_namelen; uint8_t d_type; #define CDF_DIR_TYPE_EMPTY 0 #define CDF_DIR_TYPE_USER_STORAGE 1 #define CDF_DIR_TYPE_USER_STREAM 2 #define CDF_DIR_TYPE_LOCKBYTES 3 #define CDF_DIR_TYPE_PROPERTY 4 #define CDF_DIR_TYPE_ROOT_STORAGE 5 uint8_t d_color; #define CDF_DIR_COLOR_READ 0 #define CDF_DIR_COLOR_BLACK 1 cdf_dirid_t d_left_child; cdf_dirid_t d_right_child; cdf_dirid_t d_storage; uint64_t d_storage_uuid[2]; uint32_t d_flags; cdf_timestamp_t d_created; cdf_timestamp_t d_modified; cdf_secid_t d_stream_first_sector; uint32_t d_size; uint32_t d_unused0; } cdf_directory_t; #define CDF_DIRECTORY_SIZE 128 typedef struct { cdf_secid_t *sat_tab; size_t sat_len; } cdf_sat_t; typedef struct { cdf_directory_t *dir_tab; size_t dir_len; } cdf_dir_t; typedef struct { void *sst_tab; size_t sst_len; /* Number of sectors */ size_t sst_dirlen; /* Directory sector size */ size_t sst_ss; /* Sector size */ } cdf_stream_t; typedef struct { uint32_t cl_dword; uint16_t cl_word[2]; uint8_t cl_two[2]; uint8_t cl_six[6]; } cdf_classid_t; typedef struct { uint16_t si_byte_order; uint16_t si_zero; uint16_t si_os_version; uint16_t si_os; cdf_classid_t si_class; uint32_t si_count; } cdf_summary_info_header_t; #define CDF_SECTION_DECLARATION_OFFSET 0x1c typedef struct { cdf_classid_t sd_class; uint32_t sd_offset; } cdf_section_declaration_t; typedef struct { uint32_t sh_len; uint32_t sh_properties; } cdf_section_header_t; typedef struct { uint32_t pi_id; uint32_t pi_type; union { uint16_t _pi_u16; int16_t _pi_s16; uint32_t _pi_u32; int32_t _pi_s32; uint64_t _pi_u64; int64_t _pi_s64; cdf_timestamp_t _pi_tp; float _pi_f; double _pi_d; struct { uint32_t s_len; const char *s_buf; } _pi_str; } pi_val; #define pi_u64 pi_val._pi_u64 #define pi_s64 pi_val._pi_s64 #define pi_u32 pi_val._pi_u32 #define pi_s32 pi_val._pi_s32 #define pi_u16 pi_val._pi_u16 #define pi_s16 pi_val._pi_s16 #define pi_f pi_val._pi_f #define pi_d pi_val._pi_d #define pi_tp pi_val._pi_tp #define pi_str pi_val._pi_str } cdf_property_info_t; #define CDF_ROUND(val, by) (((val) + (by) - 1) & ~((by) - 1)) /* Variant type definitions */ #define CDF_EMPTY 0x00000000 #define CDF_NULL 0x00000001 #define CDF_SIGNED16 0x00000002 #define CDF_SIGNED32 0x00000003 #define CDF_FLOAT 0x00000004 #define CDF_DOUBLE 0x00000005 #define CDF_CY 0x00000006 #define CDF_DATE 0x00000007 #define CDF_BSTR 0x00000008 #define CDF_DISPATCH 0x00000009 #define CDF_ERROR 0x0000000a #define CDF_BOOL 0x0000000b #define CDF_VARIANT 0x0000000c #define CDF_UNKNOWN 0x0000000d #define CDF_DECIMAL 0x0000000e #define CDF_SIGNED8 0x00000010 #define CDF_UNSIGNED8 0x00000011 #define CDF_UNSIGNED16 0x00000012 #define CDF_UNSIGNED32 0x00000013 #define CDF_SIGNED64 0x00000014 #define CDF_UNSIGNED64 0x00000015 #define CDF_INT 0x00000016 #define CDF_UINT 0x00000017 #define CDF_VOID 0x00000018 #define CDF_HRESULT 0x00000019 #define CDF_PTR 0x0000001a #define CDF_SAFEARRAY 0x0000001b #define CDF_CARRAY 0x0000001c #define CDF_USERDEFINED 0x0000001d #define CDF_LENGTH32_STRING 0x0000001e #define CDF_LENGTH32_WSTRING 0x0000001f #define CDF_FILETIME 0x00000040 #define CDF_BLOB 0x00000041 #define CDF_STREAM 0x00000042 #define CDF_STORAGE 0x00000043 #define CDF_STREAMED_OBJECT 0x00000044 #define CDF_STORED_OBJECT 0x00000045 #define CDF_BLOB_OBJECT 0x00000046 #define CDF_CLIPBOARD 0x00000047 #define CDF_CLSID 0x00000048 #define CDF_VECTOR 0x00001000 #define CDF_ARRAY 0x00002000 #define CDF_BYREF 0x00004000 #define CDF_RESERVED 0x00008000 #define CDF_ILLEGAL 0x0000ffff #define CDF_ILLEGALMASKED 0x00000fff #define CDF_TYPEMASK 0x00000fff #define CDF_PROPERTY_CODE_PAGE 0x00000001 #define CDF_PROPERTY_TITLE 0x00000002 #define CDF_PROPERTY_SUBJECT 0x00000003 #define CDF_PROPERTY_AUTHOR 0x00000004 #define CDF_PROPERTY_KEYWORDS 0x00000005 #define CDF_PROPERTY_COMMENTS 0x00000006 #define CDF_PROPERTY_TEMPLATE 0x00000007 #define CDF_PROPERTY_LAST_SAVED_BY 0x00000008 #define CDF_PROPERTY_REVISION_NUMBER 0x00000009 #define CDF_PROPERTY_TOTAL_EDITING_TIME 0x0000000a #define CDF_PROPERTY_LAST_PRINTED 0X0000000b #define CDF_PROPERTY_CREATE_TIME 0x0000000c #define CDF_PROPERTY_LAST_SAVED_TIME 0x0000000d #define CDF_PROPERTY_NUMBER_OF_PAGES 0x0000000e #define CDF_PROPERTY_NUMBER_OF_WORDS 0x0000000f #define CDF_PROPERTY_NUMBER_OF_CHARACTERS 0x00000010 #define CDF_PROPERTY_THUMBNAIL 0x00000011 #define CDF_PROPERTY_NAME_OF_APPLICATION 0x00000012 #define CDF_PROPERTY_SECURITY 0x00000013 #define CDF_PROPERTY_LOCALE_ID 0x80000000 typedef struct { int i_fd; const unsigned char *i_buf; size_t i_len; } cdf_info_t; typedef struct { uint16_t ce_namlen; uint32_t ce_num; uint64_t ce_timestamp; uint16_t ce_name[256]; } cdf_catalog_entry_t; typedef struct { size_t cat_num; cdf_catalog_entry_t cat_e[1]; } cdf_catalog_t; struct timespec; file_protected int cdf_timestamp_to_timespec(struct timespec *, cdf_timestamp_t); file_protected int cdf_timespec_to_timestamp(cdf_timestamp_t *, const struct timespec *); file_protected int cdf_read_header(const cdf_info_t *, cdf_header_t *); file_protected void cdf_swap_header(cdf_header_t *); file_protected void cdf_unpack_header(cdf_header_t *, char *); file_protected void cdf_swap_dir(cdf_directory_t *); file_protected void cdf_unpack_dir(cdf_directory_t *, char *); file_protected void cdf_swap_class(cdf_classid_t *); file_protected ssize_t cdf_read_sector(const cdf_info_t *, void *, size_t, size_t, const cdf_header_t *, cdf_secid_t); file_protected ssize_t cdf_read_short_sector(const cdf_stream_t *, void *, size_t, size_t, const cdf_header_t *, cdf_secid_t); file_protected int cdf_read_sat(const cdf_info_t *, cdf_header_t *, cdf_sat_t *); file_protected size_t cdf_count_chain(const cdf_sat_t *, cdf_secid_t, size_t); file_protected int cdf_read_long_sector_chain(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, cdf_secid_t, size_t, cdf_stream_t *); file_protected int cdf_read_short_sector_chain(const cdf_header_t *, const cdf_sat_t *, const cdf_stream_t *, cdf_secid_t, size_t, cdf_stream_t *); file_protected int cdf_read_sector_chain(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, cdf_secid_t, size_t, cdf_stream_t *); file_protected int cdf_read_dir(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, cdf_dir_t *); file_protected int cdf_read_ssat(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, cdf_sat_t *); file_protected int cdf_read_short_stream(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, const cdf_dir_t *, cdf_stream_t *, const cdf_directory_t **); file_protected int cdf_read_property_info(const cdf_stream_t *, const cdf_header_t *, uint32_t, cdf_property_info_t **, size_t *, size_t *); file_protected int cdf_read_user_stream(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, const cdf_dir_t *, const char *, cdf_stream_t *); file_protected int cdf_find_stream(const cdf_dir_t *, const char *, int); file_protected int cdf_zero_stream(cdf_stream_t *); file_protected int cdf_read_doc_summary_info(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, const cdf_dir_t *, cdf_stream_t *); file_protected int cdf_read_summary_info(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, const cdf_dir_t *, cdf_stream_t *); file_protected int cdf_unpack_summary_info(const cdf_stream_t *, const cdf_header_t *, cdf_summary_info_header_t *, cdf_property_info_t **, size_t *); file_protected int cdf_unpack_catalog(const cdf_header_t *, const cdf_stream_t *, cdf_catalog_t **); file_protected int cdf_print_classid(char *, size_t, const cdf_classid_t *); file_protected int cdf_print_property_name(char *, size_t, uint32_t); file_protected int cdf_print_elapsed_time(char *, size_t, cdf_timestamp_t); file_protected uint16_t cdf_tole2(uint16_t); file_protected uint32_t cdf_tole4(uint32_t); file_protected uint64_t cdf_tole8(uint64_t); file_protected char *cdf_ctime(const time_t *, char *); file_protected char *cdf_u16tos8(char *, size_t, const uint16_t *); #ifdef CDF_DEBUG file_protected void cdf_dump_header(const cdf_header_t *); file_protected void cdf_dump_sat(const char *, const cdf_sat_t *, size_t); file_protected void cdf_dump(const void *, size_t); file_protected void cdf_dump_stream(const cdf_stream_t *); file_protected void cdf_dump_dir(const cdf_info_t *, const cdf_header_t *, const cdf_sat_t *, const cdf_sat_t *, const cdf_stream_t *, const cdf_dir_t *); file_protected void cdf_dump_property_info(const cdf_property_info_t *, size_t); file_protected void cdf_dump_summary_info(const cdf_header_t *, const cdf_stream_t *); file_protected void cdf_dump_catalog(const cdf_header_t *, const cdf_stream_t *); #endif #endif /* _H_CDF_ */ file-5.46/src/file.c000664 023540 023540 00000045354 14700541452 016020 0ustar00christoschristos000000 000000 /* * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; * maintained 1995-present by Christos Zoulas and others. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * file - find type of a file or files - main program. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: file.c,v 1.217 2024/09/29 16:49:25 christos Exp $") #endif /* lint */ #include "magic.h" #include #include #include #ifdef RESTORE_TIME # if (__COHERENT__ >= 0x420) # include # else # ifdef USE_UTIMES # include # else # include # endif # endif #endif #ifdef HAVE_UNISTD_H #include /* for read() */ #endif #ifdef HAVE_WCHAR_H #include #endif #ifdef HAVE_WCTYPE_H #include #endif #if defined(HAVE_WCHAR_H) && defined(HAVE_MBRTOWC) && defined(HAVE_WCWIDTH) && \ defined(HAVE_WCTYPE_H) #define FILE_WIDE_SUPPORT #else #include #endif #if defined(HAVE_GETOPT_H) && defined(HAVE_STRUCT_OPTION) # include # ifndef HAVE_GETOPT_LONG int getopt_long(int, char * const *, const char *, const struct option *, int *); # endif # else # include "mygetopt.h" #endif #ifdef S_IFLNK # define IFLNK_h "h" # define IFLNK_L "L" #else # define IFLNK_h "" # define IFLNK_L "" #endif #define FILE_FLAGS "bcCdE" IFLNK_h "ik" IFLNK_L "lNnprsSvzZ0" #define OPTSTRING "bcCde:Ef:F:hiklLm:nNpP:rsSvzZ0" # define USAGE \ "Usage: %s [-" FILE_FLAGS "] [--apple] [--extension] [--mime-encoding]\n" \ " [--mime-type] [-e ] [-F ] " \ " [-f ]\n" \ " [-m ] [-P ] [--exclude-quiet]\n" \ " ...\n" \ " %s -C [-m ]\n" \ " %s [--help]\n" file_private int /* Global command-line options */ bflag = 0, /* brief output format */ nopad = 0, /* Don't pad output */ nobuffer = 0, /* Do not buffer stdout */ nulsep = 0; /* Append '\0' to the separator */ file_private const char *separator = ":"; /* Default field separator */ file_private const struct option long_options[] = { #define OPT_HELP 1 #define OPT_APPLE 2 #define OPT_EXTENSIONS 3 #define OPT_MIME_TYPE 4 #define OPT_MIME_ENCODING 5 #define OPT_EXCLUDE_QUIET 6 #define OPT(shortname, longname, opt, def, doc) \ {longname, opt, NULL, shortname}, #define OPT_LONGONLY(longname, opt, def, doc, id) \ {longname, opt, NULL, id}, #include "file_opts.h" #undef OPT #undef OPT_LONGONLY {0, 0, NULL, 0} }; file_private const struct { const char *name; int value; } nv[] = { { "apptype", MAGIC_NO_CHECK_APPTYPE }, { "ascii", MAGIC_NO_CHECK_ASCII }, { "cdf", MAGIC_NO_CHECK_CDF }, { "compress", MAGIC_NO_CHECK_COMPRESS }, { "csv", MAGIC_NO_CHECK_CSV }, { "elf", MAGIC_NO_CHECK_ELF }, { "encoding", MAGIC_NO_CHECK_ENCODING }, { "soft", MAGIC_NO_CHECK_SOFT }, { "tar", MAGIC_NO_CHECK_TAR }, { "json", MAGIC_NO_CHECK_JSON }, { "simh", MAGIC_NO_CHECK_SIMH }, { "text", MAGIC_NO_CHECK_TEXT }, /* synonym for ascii */ { "tokens", MAGIC_NO_CHECK_TOKENS }, /* OBSOLETE: ignored for backwards compatibility */ }; file_private struct { const char *name; size_t value; size_t def; const char *desc; int tag; int set; } pm[] = { { "bytes", 0, FILE_BYTES_MAX, "max bytes to look inside file", MAGIC_PARAM_BYTES_MAX, 0 }, { "elf_notes", 0, FILE_ELF_NOTES_MAX, "max ELF notes processed", MAGIC_PARAM_ELF_NOTES_MAX, 0 }, { "elf_phnum", 0, FILE_ELF_PHNUM_MAX, "max ELF prog sections processed", MAGIC_PARAM_ELF_PHNUM_MAX, 0 }, { "elf_shnum", 0, FILE_ELF_SHNUM_MAX, "max ELF sections processed", MAGIC_PARAM_ELF_SHNUM_MAX, 0 }, { "elf_shsize", 0, FILE_ELF_SHSIZE_MAX, "max ELF section size", MAGIC_PARAM_ELF_SHSIZE_MAX, 0 }, { "encoding", 0, FILE_ENCODING_MAX, "max bytes to scan for encoding", MAGIC_PARAM_ENCODING_MAX, 0 }, { "indir", 0, FILE_INDIR_MAX, "recursion limit for indirection", MAGIC_PARAM_INDIR_MAX, 0 }, { "name", 0, FILE_NAME_MAX, "use limit for name/use magic", MAGIC_PARAM_NAME_MAX, 0 }, { "regex", 0, FILE_REGEX_MAX, "length limit for REGEX searches", MAGIC_PARAM_REGEX_MAX, 0 }, { "magwarn", 0, FILE_MAGWARN_MAX, "maximum number of magic warnings", MAGIC_PARAM_MAGWARN_MAX, 0 }, }; file_private int posixly; #ifdef __dead __dead #endif file_private void usage(void); file_private void docprint(const char *, int); #ifdef __dead __dead #endif file_private void help(void); file_private int unwrap(struct magic_set *, const char *); file_private int process(struct magic_set *ms, const char *, int); file_private struct magic_set *load(const char *, int); file_private void setparam(const char *); file_private void applyparam(magic_t); /* * main - parse arguments and handle options */ int main(int argc, char *argv[]) { int c; size_t i, j, wid, nw; int action = 0, didsomefiles = 0, errflg = 0; int flags = 0, e = 0; #ifdef HAVE_LIBSECCOMP int sandbox = 1; #endif struct magic_set *magic = NULL; int longindex; const char *magicfile = NULL; /* where the magic is */ char *progname; /* makes islower etc work for other langs */ (void)setlocale(LC_CTYPE, ""); #ifdef __EMX__ /* sh-like wildcard expansion! Shouldn't hurt at least ... */ _wildcard(&argc, &argv); #endif if ((progname = strrchr(argv[0], '/')) != NULL) progname++; else progname = argv[0]; file_setprogname(progname); #ifdef S_IFLNK posixly = getenv("POSIXLY_CORRECT") != NULL; flags |= posixly ? MAGIC_SYMLINK : 0; #endif while ((c = getopt_long(argc, argv, OPTSTRING, long_options, &longindex)) != -1) switch (c) { case OPT_HELP: help(); break; case OPT_APPLE: flags |= MAGIC_APPLE; break; case OPT_EXTENSIONS: flags |= MAGIC_EXTENSION; break; case OPT_MIME_TYPE: flags |= MAGIC_MIME_TYPE; break; case OPT_MIME_ENCODING: flags |= MAGIC_MIME_ENCODING; break; case '0': nulsep++; break; case 'b': bflag++; break; case 'c': action = FILE_CHECK; break; case 'C': action = FILE_COMPILE; break; case 'd': flags |= MAGIC_DEBUG|MAGIC_CHECK; break; case 'E': flags |= MAGIC_ERROR; break; case 'e': case OPT_EXCLUDE_QUIET: for (i = 0; i < __arraycount(nv); i++) if (strcmp(nv[i].name, optarg) == 0) break; if (i == __arraycount(nv)) { if (c != OPT_EXCLUDE_QUIET) errflg++; } else flags |= nv[i].value; break; case 'f': if(action) usage(); if (magic == NULL) if ((magic = load(magicfile, flags)) == NULL) return 1; applyparam(magic); e |= unwrap(magic, optarg); ++didsomefiles; break; case 'F': separator = optarg; break; case 'i': flags |= MAGIC_MIME; break; case 'k': flags |= MAGIC_CONTINUE; break; case 'l': action = FILE_LIST; break; case 'm': magicfile = optarg; break; case 'n': ++nobuffer; break; case 'N': ++nopad; break; #if defined(HAVE_UTIME) || defined(HAVE_UTIMES) case 'p': flags |= MAGIC_PRESERVE_ATIME; break; #endif case 'P': setparam(optarg); break; case 'r': flags |= MAGIC_RAW; break; case 's': flags |= MAGIC_DEVICES; break; case 'S': #ifdef HAVE_LIBSECCOMP sandbox = 0; #endif break; case 'v': if (magicfile == NULL) magicfile = magic_getpath(magicfile, action); (void)fprintf(stdout, "%s-%s\n", file_getprogname(), VERSION); (void)fprintf(stdout, "magic file from %s\n", magicfile); #ifdef HAVE_LIBSECCOMP (void)fprintf(stdout, "seccomp support included\n"); #endif return 0; case 'z': flags |= MAGIC_COMPRESS; break; case 'Z': flags |= MAGIC_COMPRESS|MAGIC_COMPRESS_TRANSP; break; #ifdef S_IFLNK case 'L': flags |= MAGIC_SYMLINK; break; case 'h': flags &= ~MAGIC_SYMLINK; break; #endif case '?': default: errflg++; break; } if (errflg) { usage(); } if (e) return e; #ifdef HAVE_LIBSECCOMP if (sandbox && enable_sandbox() == -1) file_err(EXIT_FAILURE, "SECCOMP initialisation failed"); if (sandbox) flags |= MAGIC_NO_COMPRESS_FORK; #endif /* HAVE_LIBSECCOMP */ if (MAGIC_VERSION != magic_version()) file_warnx("Compiled magic version [%d] " "does not match with shared library magic version [%d]\n", MAGIC_VERSION, magic_version()); switch(action) { case FILE_CHECK: case FILE_COMPILE: case FILE_LIST: /* * Don't try to check/compile ~/.magic unless we explicitly * ask for it. */ magic = magic_open(flags|MAGIC_CHECK); if (magic == NULL) { file_warn("Can't create magic"); return 1; } switch(action) { case FILE_CHECK: c = magic_check(magic, magicfile); break; case FILE_COMPILE: c = magic_compile(magic, magicfile); break; case FILE_LIST: c = magic_list(magic, magicfile); break; default: abort(); } if (c == -1) { file_warnx("%s", magic_error(magic)); e = 1; goto out; } goto out; default: if (magic == NULL) if ((magic = load(magicfile, flags)) == NULL) return 1; applyparam(magic); } if (optind == argc) { if (!didsomefiles) usage(); goto out; } for (wid = 0, j = CAST(size_t, optind); j < CAST(size_t, argc); j++) { nw = file_mbswidth(magic, argv[j]); if (nw > wid) wid = nw; } /* * If bflag is only set twice, set it depending on * number of files [this is undocumented, and subject to change] */ if (bflag == 2) { bflag = optind >= argc - 1; } for (; optind < argc; optind++) e |= process(magic, argv[optind], wid); out: if (!nobuffer) e |= fflush(stdout) != 0; if (magic) magic_close(magic); return e; } file_private void applyparam(magic_t magic) { size_t i; for (i = 0; i < __arraycount(pm); i++) { if (!pm[i].set) continue; if (magic_setparam(magic, pm[i].tag, &pm[i].value) == -1) file_err(EXIT_FAILURE, "Can't set %s", pm[i].name); } } file_private void setparam(const char *p) { size_t i; char *s; if ((s = CCAST(char *, strchr(p, '='))) == NULL) goto badparm; for (i = 0; i < __arraycount(pm); i++) { if (strncmp(p, pm[i].name, s - p) != 0) continue; pm[i].value = atoi(s + 1); pm[i].set = 1; return; } badparm: file_errx(EXIT_FAILURE, "Unknown param %s", p); } file_private struct magic_set * /*ARGSUSED*/ load(const char *magicfile, int flags) { struct magic_set *magic = magic_open(flags); const char *e; if (magic == NULL) { file_warn("Can't create magic"); return NULL; } if (magic_load(magic, magicfile) == -1) { file_warn("%s", magic_error(magic)); magic_close(magic); return NULL; } if ((e = magic_error(magic)) != NULL) file_warn("%s", e); return magic; } /* * unwrap -- read a file of filenames, do each one. */ file_private int unwrap(struct magic_set *ms, const char *fn) { FILE *f; ssize_t len; char *line = NULL; size_t llen = 0; int wid = 0, cwid; int e = 0; size_t fi = 0, fimax = 0; char **flist = NULL; if (strcmp("-", fn) == 0) f = stdin; else { if ((f = fopen(fn, "r")) == NULL) { file_warn("Cannot open `%s'", fn); return 1; } } while ((len = getline(&line, &llen, f)) > 0) { if (line[len - 1] == '\n') line[len - 1] = '\0'; cwid = file_mbswidth(ms, line); if (nobuffer) { e |= process(ms, line, cwid); free(line); line = NULL; llen = 0; continue; } if (cwid > wid) wid = cwid; if (fi >= fimax) { fimax += 100; char **nf = CAST(char **, realloc(flist, fimax * sizeof(*flist))); if (nf == NULL) { file_err(EXIT_FAILURE, "Cannot allocate memory for file list"); } flist = nf; } flist[fi++] = line; line = NULL; llen = 0; } if (!nobuffer) { fimax = fi; for (fi = 0; fi < fimax; fi++) { e |= process(ms, flist[fi], wid); free(flist[fi]); } } free(flist); if (f != stdin) (void)fclose(f); return e; } file_private void file_octal(unsigned char c) { (void)putc('\\', stdout); (void)putc(((c >> 6) & 7) + '0', stdout); (void)putc(((c >> 3) & 7) + '0', stdout); (void)putc(((c >> 0) & 7) + '0', stdout); } file_private void fname_print(const char *inname) { size_t n = strlen(inname); #ifdef FILE_WIDE_SUPPORT mbstate_t state; wchar_t nextchar; size_t bytesconsumed; (void)memset(&state, 0, sizeof(state)); while (n > 0) { bytesconsumed = mbrtowc(&nextchar, inname, n, &state); if (bytesconsumed == CAST(size_t, -1) || bytesconsumed == CAST(size_t, -2)) { nextchar = *inname++; n--; (void)memset(&state, 0, sizeof(state)); file_octal(CAST(unsigned char, nextchar)); continue; } inname += bytesconsumed; n -= bytesconsumed; if (iswprint(nextchar)) { printf("%lc", (wint_t)nextchar); continue; } /* XXX: What if it is > 255? */ file_octal(CAST(unsigned char, nextchar)); } #else size_t i; for (i = 0; i < n; i++) { unsigned char c = CAST(unsigned char, inname[i]); if (isprint(c)) { (void)putc(c, stdout); continue; } file_octal(c); } #endif } /* * Called for each input file on the command line (or in a list of files) */ file_private int process(struct magic_set *ms, const char *inname, int wid) { const char *type, c = nulsep > 1 ? '\0' : '\n'; int std_in = strcmp(inname, "-") == 0; int haderror = 0; if (wid > 0 && !bflag) { const char *pname = std_in ? "/dev/stdin" : inname; if ((ms->flags & MAGIC_RAW) == 0) fname_print(pname); else (void)printf("%s", pname); if (nulsep) (void)putc('\0', stdout); if (nulsep < 2) { (void)printf("%s", separator); (void)printf("%*s ", CAST(int, nopad ? 0 : (wid - file_mbswidth(ms, inname))), ""); } } type = magic_file(ms, std_in ? NULL : inname); if (type == NULL) { haderror |= printf("ERROR: %s%c", magic_error(ms), c); } else { haderror |= printf("%s%c", type, c) < 0; } if (nobuffer) haderror |= fflush(stdout) != 0; return haderror || type == NULL; } file_protected size_t file_mbswidth(struct magic_set *ms, const char *s) { size_t width = 0; #ifdef FILE_WIDE_SUPPORT size_t bytesconsumed, n; mbstate_t state; wchar_t nextchar; (void)memset(&state, 0, sizeof(state)); n = strlen(s); while (n > 0) { bytesconsumed = mbrtowc(&nextchar, s, n, &state); if (bytesconsumed == CAST(size_t, -1) || bytesconsumed == CAST(size_t, -2)) { nextchar = *s; bytesconsumed = 1; (void)memset(&state, 0, sizeof(state)); width += 4; } else { int w = wcwidth(nextchar); width += ((ms->flags & MAGIC_RAW) != 0 || iswprint(nextchar)) ? (w > 0 ? w : 1) : 4; } s += bytesconsumed, n -= bytesconsumed; } #else for (; *s; s++) { width += (ms->flags & MAGIC_RAW) != 0 || isprint(CAST(unsigned char, *s)) ? 1 : 4; } #endif return width; } file_private void usage(void) { const char *pn = file_getprogname(); (void)fprintf(stderr, USAGE, pn, pn, pn); exit(EXIT_FAILURE); } file_private void defprint(int def) { if (!def) return; if (((def & 1) && posixly) || ((def & 2) && !posixly)) (void)fprintf(stdout, " (default)"); (void)putc('\n', stdout); } file_private void docprint(const char *opts, int def) { size_t i; int comma, pad; char *sp, *p; p = CCAST(char *, strchr(opts, '%')); if (p == NULL) { (void)fprintf(stdout, "%s", opts); defprint(def); return; } for (sp = p - 1; sp > opts && *sp == ' '; sp--) continue; (void)printf("%.*s", CAST(int, p - opts), opts); pad = (int)CAST(int, p - sp - 1); switch (*++p) { case 'e': comma = 0; for (i = 0; i < __arraycount(nv); i++) { (void)printf("%s%s", comma++ ? ", " : "", nv[i].name); if (i && i % 5 == 0 && i != __arraycount(nv) - 1) { (void)printf(",\n%*s", pad, ""); comma = 0; } } break; case 'P': for (i = 0; i < __arraycount(pm); i++) { (void)printf("%9s %7zu %s", pm[i].name, pm[i].def, pm[i].desc); if (i != __arraycount(pm) - 1) (void)printf("\n%*s", pad, ""); } break; default: file_errx(EXIT_FAILURE, "Unknown escape `%c' in long options", *p); break; } (void)printf("%s", opts + (p - opts) + 1); } file_private void help(void) { (void)fputs( "Usage: file [OPTION...] [FILE...]\n" "Determine type of FILEs.\n" "\n", stdout); #define OPT(shortname, longname, opt, def, doc) \ (void)printf(" -%c, --" longname, shortname), \ docprint(doc, def); #define OPT_LONGONLY(longname, opt, def, doc, id) \ (void)printf(" --" longname), \ docprint(doc, def); #include "file_opts.h" #undef OPT #undef OPT_LONGONLY (void)printf("\nReport bugs to https://bugs.astron.com/\n"); exit(EXIT_SUCCESS); } file_private const char *file_progname; file_protected void file_setprogname(const char *progname) { file_progname = progname; } file_protected const char * file_getprogname(void) { return file_progname; } file_protected void file_err(int e, const char *fmt, ...) { va_list ap; int se = errno; va_start(ap, fmt); (void)fprintf(stderr, "%s: ", file_progname); (void)vfprintf(stderr, fmt, ap); va_end(ap); if (se) (void)fprintf(stderr, " (%s)\n", strerror(se)); else fputc('\n', stderr); exit(e); } file_protected void file_errx(int e, const char *fmt, ...) { va_list ap; va_start(ap, fmt); (void)fprintf(stderr, "%s: ", file_progname); (void)vfprintf(stderr, fmt, ap); va_end(ap); (void)fprintf(stderr, "\n"); exit(e); } file_protected void file_warn(const char *fmt, ...) { va_list ap; int se = errno; va_start(ap, fmt); (void)fprintf(stderr, "%s: ", file_progname); (void)vfprintf(stderr, fmt, ap); va_end(ap); if (se) (void)fprintf(stderr, " (%s)\n", strerror(se)); else fputc('\n', stderr); errno = se; } file_protected void file_warnx(const char *fmt, ...) { va_list ap; int se = errno; va_start(ap, fmt); (void)fprintf(stderr, "%s: ", file_progname); (void)vfprintf(stderr, fmt, ap); va_end(ap); (void)fprintf(stderr, "\n"); errno = se; } file-5.46/src/seccomp.c000664 023540 023540 00000013363 14700541452 016525 0ustar00christoschristos000000 000000 /* * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ /* * libseccomp hooks. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: seccomp.c,v 1.29 2024/09/29 16:49:25 christos Exp $") #endif /* lint */ #if HAVE_LIBSECCOMP #include /* libseccomp */ #include /* prctl */ #include #include #include #include #include #include #define DENY_RULE(call) \ do \ if (seccomp_rule_add (ctx, SCMP_ACT_KILL, SCMP_SYS(call), 0) == -1) \ goto out; \ while (/*CONSTCOND*/0) #define ALLOW_RULE(call) \ do \ if (seccomp_rule_add (ctx, SCMP_ACT_ALLOW, SCMP_SYS(call), 0) == -1) \ goto out; \ while (/*CONSTCOND*/0) #define ALLOW_IOCTL_RULE(param) \ do \ if (seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(ioctl), 1, \ SCMP_CMP(1, SCMP_CMP_EQ, (scmp_datum_t)param, \ (scmp_datum_t)0)) == -1) \ goto out; \ while (/*CONSTCOND*/0) static scmp_filter_ctx ctx; int enable_sandbox(void) { // prevent child processes from getting more priv e.g. via setuid, // capabilities, ... if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == -1) return -1; #if 0 if (prctl(PR_SET_DUMPABLE, 0, 0, 0, 0) == -1) return -1; #endif // initialize the filter ctx = seccomp_init(SCMP_ACT_KILL); if (ctx == NULL) return -1; ALLOW_RULE(access); ALLOW_RULE(brk); ALLOW_RULE(close); ALLOW_RULE(dup2); ALLOW_RULE(exit); ALLOW_RULE(exit_group); #ifdef __NR_faccessat ALLOW_RULE(faccessat); #endif ALLOW_RULE(fcntl); ALLOW_RULE(fcntl64); #ifdef __NR_fstat ALLOW_RULE(fstat); #endif ALLOW_RULE(fstat64); #ifdef __NR_fstatat64 ALLOW_RULE(fstatat64); #endif ALLOW_RULE(futex); ALLOW_RULE(getdents); #ifdef __NR_getdents64 ALLOW_RULE(getdents64); #endif #ifdef FIONREAD // called in src/compress.c under sread ALLOW_IOCTL_RULE(FIONREAD); #endif #ifdef TIOCGWINSZ // musl libc may call ioctl TIOCGWINSZ on stdout ALLOW_IOCTL_RULE(TIOCGWINSZ); #endif #ifdef TCGETS // glibc may call ioctl TCGETS on stdout on physical terminal ALLOW_IOCTL_RULE(TCGETS); #endif ALLOW_RULE(lseek); ALLOW_RULE(_llseek); ALLOW_RULE(lstat); ALLOW_RULE(lstat64); ALLOW_RULE(madvise); ALLOW_RULE(mmap); ALLOW_RULE(mmap2); ALLOW_RULE(mprotect); ALLOW_RULE(mremap); ALLOW_RULE(munmap); #ifdef __NR_newfstatat ALLOW_RULE(newfstatat); #endif ALLOW_RULE(open); ALLOW_RULE(openat); ALLOW_RULE(pread64); ALLOW_RULE(read); ALLOW_RULE(readlink); #ifdef __NR_readlinkat ALLOW_RULE(readlinkat); #endif ALLOW_RULE(rt_sigaction); ALLOW_RULE(rt_sigprocmask); ALLOW_RULE(rt_sigreturn); ALLOW_RULE(select); ALLOW_RULE(stat); ALLOW_RULE(statx); ALLOW_RULE(stat64); ALLOW_RULE(sysinfo); ALLOW_RULE(umask); // Used in file_pipe2file() ALLOW_RULE(getpid); // Used by glibc in file_pipe2file() ALLOW_RULE(getrandom); // Used by glibc in file_pipe2file() ALLOW_RULE(unlink); ALLOW_RULE(utimes); ALLOW_RULE(write); ALLOW_RULE(writev); #if 0 // needed by valgrind ALLOW_RULE(gettid); ALLOW_RULE(rt_sigtimedwait); #endif #if 0 /* special restrictions for socket, only allow AF_UNIX/AF_LOCAL */ if (seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket), 1, SCMP_CMP(0, SCMP_CMP_EQ, AF_UNIX)) == -1) goto out; if (seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket), 1, SCMP_CMP(0, SCMP_CMP_EQ, AF_LOCAL)) == -1) goto out; /* special restrictions for open, prevent opening files for writing */ if (seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 1, SCMP_CMP(1, SCMP_CMP_MASKED_EQ, O_WRONLY | O_RDWR, 0)) == -1) goto out; if (seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EACCES), SCMP_SYS(open), 1, SCMP_CMP(1, SCMP_CMP_MASKED_EQ, O_WRONLY, O_WRONLY)) == -1) goto out; if (seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EACCES), SCMP_SYS(open), 1, SCMP_CMP(1, SCMP_CMP_MASKED_EQ, O_RDWR, O_RDWR)) == -1) goto out; /* allow stderr */ if (seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 1, SCMP_CMP(0, SCMP_CMP_EQ, 2)) == -1) goto out; #endif #if defined(PR_SET_VMA) && defined(PR_SET_VMA_ANON_NAME) /* allow glibc to name malloc areas */ if (seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(prctl), 2, SCMP_CMP32(0, SCMP_CMP_EQ, PR_SET_VMA), SCMP_CMP64(1, SCMP_CMP_EQ, PR_SET_VMA_ANON_NAME)) == -1) goto out; #endif // applying filter... if (seccomp_load(ctx) == -1) goto out; // free ctx after the filter has been loaded into the kernel seccomp_release(ctx); return 0; out: // something went wrong seccomp_release(ctx); return -1; } #endif file-5.46/src/magic.h.in000664 023540 023540 00000013667 14634602245 016601 0ustar00christoschristos000000 000000 /* * Copyright (c) Christos Zoulas 2003. * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifndef _MAGIC_H #define _MAGIC_H #include #define MAGIC_NONE 0x0000000 /* No flags */ #define MAGIC_DEBUG 0x0000001 /* Turn on debugging */ #define MAGIC_SYMLINK 0x0000002 /* Follow symlinks */ #define MAGIC_COMPRESS 0x0000004 /* Check inside compressed files */ #define MAGIC_DEVICES 0x0000008 /* Look at the contents of devices */ #define MAGIC_MIME_TYPE 0x0000010 /* Return the MIME type */ #define MAGIC_CONTINUE 0x0000020 /* Return all matches */ #define MAGIC_CHECK 0x0000040 /* Print warnings to stderr */ #define MAGIC_PRESERVE_ATIME 0x0000080 /* Restore access time on exit */ #define MAGIC_RAW 0x0000100 /* Don't convert unprintable chars */ #define MAGIC_ERROR 0x0000200 /* Handle ENOENT etc as real errors */ #define MAGIC_MIME_ENCODING 0x0000400 /* Return the MIME encoding */ #define MAGIC_MIME (MAGIC_MIME_TYPE|MAGIC_MIME_ENCODING) #define MAGIC_APPLE 0x0000800 /* Return the Apple creator/type */ #define MAGIC_EXTENSION 0x1000000 /* Return a /-separated list of * extensions */ #define MAGIC_COMPRESS_TRANSP 0x2000000 /* Check inside compressed files * but not report compression */ #define MAGIC_NO_COMPRESS_FORK 0x4000000 /* Don't allow decompression that * needs to fork */ #define MAGIC_NODESC (MAGIC_EXTENSION|MAGIC_MIME|MAGIC_APPLE) #define MAGIC_NO_CHECK_COMPRESS 0x0001000 /* Don't check for compressed files */ #define MAGIC_NO_CHECK_TAR 0x0002000 /* Don't check for tar files */ #define MAGIC_NO_CHECK_SOFT 0x0004000 /* Don't check magic entries */ #define MAGIC_NO_CHECK_APPTYPE 0x0008000 /* Don't check application type */ #define MAGIC_NO_CHECK_ELF 0x0010000 /* Don't check for elf details */ #define MAGIC_NO_CHECK_TEXT 0x0020000 /* Don't check for text files */ #define MAGIC_NO_CHECK_CDF 0x0040000 /* Don't check for cdf files */ #define MAGIC_NO_CHECK_CSV 0x0080000 /* Don't check for CSV files */ #define MAGIC_NO_CHECK_TOKENS 0x0100000 /* Don't check tokens */ #define MAGIC_NO_CHECK_ENCODING 0x0200000 /* Don't check text encodings */ #define MAGIC_NO_CHECK_JSON 0x0400000 /* Don't check for JSON files */ #define MAGIC_NO_CHECK_SIMH 0x0800000 /* Don't check for SIMH tape files */ /* No built-in tests; only consult the magic file */ #define MAGIC_NO_CHECK_BUILTIN ( \ MAGIC_NO_CHECK_COMPRESS | \ MAGIC_NO_CHECK_TAR | \ /* MAGIC_NO_CHECK_SOFT | */ \ MAGIC_NO_CHECK_APPTYPE | \ MAGIC_NO_CHECK_ELF | \ MAGIC_NO_CHECK_TEXT | \ MAGIC_NO_CHECK_CSV | \ MAGIC_NO_CHECK_CDF | \ MAGIC_NO_CHECK_TOKENS | \ MAGIC_NO_CHECK_ENCODING | \ MAGIC_NO_CHECK_JSON | \ MAGIC_NO_CHECK_SIMH | \ 0 \ ) #define MAGIC_SNPRINTB "\177\020\ b\0debug\0\ b\1symlink\0\ b\2compress\0\ b\3devices\0\ b\4mime_type\0\ b\5continue\0\ b\6check\0\ b\7preserve_atime\0\ b\10raw\0\ b\11error\0\ b\12mime_encoding\0\ b\13apple\0\ b\14no_check_compress\0\ b\15no_check_tar\0\ b\16no_check_soft\0\ b\17no_check_apptype\0\ b\20no_check_elf\0\ b\21no_check_text\0\ b\22no_check_cdf\0\ b\23no_check_csv\0\ b\24no_check_tokens\0\ b\25no_check_encoding\0\ b\26no_check_json\0\ b\27no_check_simh\0\ b\30extension\0\ b\31transp_compression\0\ " /* Defined for backwards compatibility (renamed) */ #define MAGIC_NO_CHECK_ASCII MAGIC_NO_CHECK_TEXT /* Defined for backwards compatibility; do nothing */ #define MAGIC_NO_CHECK_FORTRAN 0x000000 /* Don't check ascii/fortran */ #define MAGIC_NO_CHECK_TROFF 0x000000 /* Don't check ascii/troff */ #define MAGIC_VERSION X.YY /* This implementation */ #ifdef __cplusplus extern "C" { #endif typedef struct magic_set *magic_t; magic_t magic_open(int); void magic_close(magic_t); const char *magic_getpath(const char *, int); const char *magic_file(magic_t, const char *); const char *magic_descriptor(magic_t, int); const char *magic_buffer(magic_t, const void *, size_t); const char *magic_error(magic_t); int magic_getflags(magic_t); int magic_setflags(magic_t, int); int magic_version(void); int magic_load(magic_t, const char *); int magic_load_buffers(magic_t, void **, size_t *, size_t); int magic_compile(magic_t, const char *); int magic_check(magic_t, const char *); int magic_list(magic_t, const char *); int magic_errno(magic_t); #define MAGIC_PARAM_INDIR_MAX 0 #define MAGIC_PARAM_NAME_MAX 1 #define MAGIC_PARAM_ELF_PHNUM_MAX 2 #define MAGIC_PARAM_ELF_SHNUM_MAX 3 #define MAGIC_PARAM_ELF_NOTES_MAX 4 #define MAGIC_PARAM_REGEX_MAX 5 #define MAGIC_PARAM_BYTES_MAX 6 #define MAGIC_PARAM_ENCODING_MAX 7 #define MAGIC_PARAM_ELF_SHSIZE_MAX 8 #define MAGIC_PARAM_MAGWARN_MAX 9 int magic_setparam(magic_t, int, const void *); int magic_getparam(magic_t, int, void *); #ifdef __cplusplus }; #endif #endif /* _MAGIC_H */ file-5.46/src/cdf.mk000664 023540 023540 00000000143 14310145536 016005 0ustar00christoschristos000000 000000 CFLAGS+=-DTEST -DCDF_DEBUG -g -DHAVE_CONFIG_H -I.. cdf: cdf.o cdf_time.o ${CC} ${CFLAGS} -o $@ $> file-5.46/src/BNF000664 023540 023540 00000011634 14310145536 015257 0ustar00christoschristos000000 000000 This is a first attempt to document the grammar used by magic(5), with hopes of eventually incorporating something like this into the manpage. Note: Currently, the parser varies slightly from this, but only in very minor ways, e.g., the strflags maybe separated by '/' characters and at most one strcount is allowed; likewise for regflags. ------------------------------------------------------------------------ magic = 1*query query = line *( 1*level line ) level = ">" ;; Increment the level by 1. ;; The first line of a query is at level 0. line = offset HWS type HWS test HWS message EOL ------------------------------------------------------------------------ offset = absoffset | reloffset | indoffset ;; The offset in the file at which to apply ;; the . absoffset = NUMBER ;; An absolute offset from the start of the file. reloffset = "&" NUMBER ;; The offset relative to the last match offset ;; at one level up. ;; Not allowed at level == 0. indoffset = indoff | relindoff indoff = "(" offset1 [ "." size ] [ op disp ] ")" ;; Read the file at of width . ;; If size is not specified, assume a long. ;; If is given, then preform that ;; operation on the result and the . offset1 = absoffset | reloffset size = byte | leshort | beshort | lelong | belong | melong byte = "B" | "b" | "C" | "c" ;; A one-byte value. leshort = "s" | "h" ;; A two-byte little-endian value. beshort = "S" | "H" ;; A two-byte big-endian value. lelong = "l" ;; A four-byte little-endian value. belong = "L" ;; A four-byte big-endian value. melong = "m" ;; A four-byte middle-endian value. op = [ invert ] ( "+" | "-" | "*" | "/" | "%" | "&" | "|" | "^" ) invert = "~" ;; Flip the bits on result of the . disp = NUMBER | memvalue memvalue = "(" NUMBER ")" ;; NUMBER is interpreted as an absolute or ;; relative offset matching that of . ;; Read the file at the resulting offset with ;; the same size as relindoff = "&" indoff ;; add to the last match offset at ;; one level up. ------------------------------------------------------------------------ type = [ unsigned ] ( numeric | strtype | default ) unsigned = "u" ;; The value is unsigned. ;; This affects the sign extension of numeric ;; types and the '<' and '>' compares. It is ;; intended for numeric types, but allowed on ;; all types. numeric = ( numtype | datatype ) [ nummask ] numtype = byte | short | long | quad byte = "byte" short = "short" | "beshort" | "leshort" long = "long" | "lelong" | "belong" | "melong" quad = "quad" | "lequad" | "bequad" datetype = udate32 | ldate32 | udate64 | ldate64 udate32 = "date" | "bedate" | "ledate" | "medate" ;; UTC dates ldate32 = "ldate" | "beldate" | "leldate" | "meldate" ;; local dates udate64 = "qdate" | "leqdate" | "beqdate" ;; UTC dates ldate64 = "qldate" | "leqldate" | "beqldate" ;; local dates nummask = op NUMBER strtype = regex | search | string8 | string16 regex = "regex" [ "/" 1*regflag ] regflag = "c" | "s" | linecnt linecnt = NUMBER ;; The number of lines to search. If this ;; is missing or zero, the rest of the ;; file is searched. search = "string" [ "/" 1*srchflag ] srchflag = strflag | srchcnt srchcnt = NUMBER ;; The number of search tries. If this ;; is missing or zero, the rest of the ;; file is searched. string8 = ( "string" | "pstring" ) [ "/" 1*strflag ] strflag = "b" | "B" | "c" | "C" string16 = "bestring16" | "lestring16" default = "default" ;; This is intended to be used with the ;; ("x" below). It is matched if ;; there has been no previous match at its ;; level or none since the last default at ;; that level. It is useful for implementing ;; switch-like and if/else constructions. ------------------------------------------------------------------------ test = numtest | strtest | truetest ;; Test to preform on read from file. numtest = [ compare ] NUMBER ;; If compare is missing, "=" is assumed. strtest = [ compare ] STRING ;; If compare is missing, "=" is assumed. ;; Note: If the STRING begins with a ;; character, the field cannot be ;; omitted. compare = "=" | "!" | "<" | ">" | "&" | "^" truetest = "x" ;; This always returns true. ;; To test for the string "x" use "=x". ------------------------------------------------------------------------ message = [ nospflag ] ( STRING | FMT_STRING ) ;; Message to print if test result is true. nospflag = %x08 | "\\b" ;; Do not insert a space before the message. ;; By default, messages are separated by a " ". ------------------------------------------------------------------------ HWS = EOL = NUMBER = STRING = FMTSTR = ------------------------------------------------------------------------ file-5.46/src/memtest.c000664 023540 023540 00000007231 14634602355 016555 0ustar00christoschristos000000 000000 /* * Copyright (c) Christos Zoulas 2021. * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice immediately at the beginning of the file, without modification, * this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "file.h" #ifndef lint FILE_RCSID("@(#)$File: memtest.c,v 1.6 2022/09/24 20:30:13 christos Exp $") #endif #include #include #include #include #include #include #include #include #include #include #include #include void * malloc(size_t len) { char buf[512]; void *(*orig)(size_t) = dlsym(RTLD_NEXT, "malloc"); void *p = (*orig)(len); int l = snprintf(buf, sizeof(buf), "malloc %zu %p\n", len, p); write(2, buf, l); return p; } void free(void *p) { char buf[512]; void (*orig)(void *) = dlsym(RTLD_NEXT, "free"); (*orig)(p); int l = snprintf(buf, sizeof(buf), "free %p\n", p); write(2, buf, l); } void * calloc(size_t len, size_t nitems) { char buf[512]; void *(*orig)(size_t, size_t) = dlsym(RTLD_NEXT, "calloc"); void *p = (*orig)(len, nitems); size_t tot = len * nitems; int l = snprintf(buf, sizeof(buf), "calloc %zu %p\n", tot, p); write(2, buf, l); return p; } void * realloc(void *q, size_t len) { char buf[512]; void *(*orig)(void *, size_t) = dlsym(RTLD_NEXT, "realloc"); void *p = (*orig)(q, len); int l = snprintf(buf, sizeof(buf), "realloc %zu %p\n", len, p); write(2, buf, l); return p; } static void usage(void) { fprintf(stderr, "Usage: test [-b] \n"); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { bool buf = false; int c; while ((c = getopt(argc, argv, "b")) != -1) switch (c) { case 'b': buf = true; break; default: usage(); } argc -= optind; argv += optind; if (argc == 0) usage(); magic_t m = magic_open(0); if (m == NULL) err(EXIT_FAILURE, "magic_open"); magic_load(m, NULL); const char *r; if (buf) { int fd = open(argv[0], O_RDONLY); if (fd == -1) err(EXIT_FAILURE, "Cannot open `%s'", argv[0]); struct stat st; if (fstat(fd, &st) == -1) err(EXIT_FAILURE, "Cannot stat `%s'", argv[0]); size_t l = (size_t)st.st_size; void *p = mmap(NULL, l, PROT_READ, MAP_FILE | MAP_PRIVATE, fd, (off_t)0); if (p == MAP_FAILED) err(EXIT_FAILURE, "Cannot map `%s'", argv[0]); close(fd); r = magic_buffer(m, p, l); munmap(p, l); } else { r = magic_file(m, argv[0]); } magic_close(m); printf("%s\n", r ? r : "(null)"); return 0; } file-5.46/m4/libtool.m4000644 023540 023540 00001127551 14721422715 016376 0ustar00christoschristos000000 000000 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 59 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_DECL_FILECMD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC and # ICC, which need '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? $SED '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) case $MACOSX_DEPLOYMENT_TARGET,$host in 10.[[012]],*|,*powerpc*-darwin[[5-8]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; *) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [m4_require([_LT_DECL_SED])dnl AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `$FILECMD conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `$FILECMD conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `$FILECMD conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `$FILECMD conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `$FILECMD conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `$FILECMD conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} _LT_DECL([], [AR], [1], [The archiver]) # Use ARFLAGS variable as AR's operation code to sync the variable naming with # Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have # higher priority because thats what people were doing historically (setting # ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS # variable obsoleted/removed. test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr} lt_ar_flags=$AR_FLAGS _LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)]) # Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override # by AR_FLAGS because that was never working and AR_FLAGS is about to die. _LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -z "$STRIP"; then AC_MSG_RESULT([no]) else if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else case $host_os in darwin*) # FIXME - insert some real tests, host_os isn't really good enough striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) ;; freebsd*) if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then old_striplib="$STRIP --strip-debug" striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl* | *,icl*) # Native MSVC or ICC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC and ICC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly* | midnightbsd*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='$FILECMD -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly* | midnightbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=$FILECMD case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=$FILECMD lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="$SED -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++ or ICC, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl* | icl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++ or Intel C++ Compiler. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl* | icl*) # Native MSVC or ICC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC and ICC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly* | midnightbsd*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl* | ,icl* | no,icl*) # Native MSVC or ICC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly* | midnightbsd*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | $SED 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_FILECMD # ---------------- # Check for a file(cmd) program that can be used to detect file type and magic m4_defun([_LT_DECL_FILECMD], [AC_CHECK_TOOL([FILECMD], [file], [:]) _LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types]) ])# _LD_DECL_FILECMD # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS file-5.46/m4/ltoptions.m4000644 023540 023540 00000034275 14721422715 016764 0ustar00christoschristos000000 000000 # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) file-5.46/m4/ltsugar.m4000644 023540 023540 00000010453 14721422715 016402 0ustar00christoschristos000000 000000 # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) file-5.46/m4/ltversion.m4000644 023540 023540 00000001312 14721422715 016740 0ustar00christoschristos000000 000000 # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation, # Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4245 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.7]) m4_define([LT_PACKAGE_REVISION], [2.4.7]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.7' macro_revision='2.4.7' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) file-5.46/m4/lt~obsolete.m4000644 023540 023540 00000014007 14721422715 017272 0ustar00christoschristos000000 000000 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free # Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) file-5.46/m4/visibility.m4000664 023540 023540 00000006426 14123162234 017110 0ustar00christoschristos000000 000000 # visibility.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2005, 2008, 2010-2012 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Tests whether the compiler supports the command-line option dnl -fvisibility=hidden and the function and variable attributes dnl __attribute__((__visibility__("hidden"))) and dnl __attribute__((__visibility__("default"))). dnl Does *not* test for __visibility__("protected") - which has tricky dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on dnl MacOS X. dnl Does *not* test for __visibility__("internal") - which has processor dnl dependent semantics. dnl Does *not* test for #pragma GCC visibility push(hidden) - which is dnl "really only recommended for legacy code". dnl Set the variable CFLAG_VISIBILITY. dnl Defines and sets the variable HAVE_VISIBILITY. AC_DEFUN([gl_VISIBILITY], [ AC_REQUIRE([AC_PROG_CC]) CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then dnl First, check whether -Werror can be added to the command line, or dnl whether it leads to an error because of some other option that the dnl user has put into $CC $CFLAGS $CPPFLAGS. AC_MSG_CHECKING([whether the -Werror option is usable]) AC_CACHE_VAL([gl_cv_cc_vis_werror], [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_vis_werror=yes], [gl_cv_cc_vis_werror=no]) CFLAGS="$gl_save_CFLAGS"]) AC_MSG_RESULT([$gl_cv_cc_vis_werror]) dnl Now check whether visibility declarations are supported. AC_MSG_CHECKING([for simple visibility declarations]) AC_CACHE_VAL([gl_cv_cc_visibility], [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" dnl We use the option -Werror and a function dummyfunc, because on some dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning dnl "visibility attribute not supported in this configuration; ignored" dnl at the first function definition in every compilation unit, and we dnl don't want to use the option in this case. if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void) {} ]], [[]])], [gl_cv_cc_visibility=yes], [gl_cv_cc_visibility=no]) CFLAGS="$gl_save_CFLAGS"]) AC_MSG_RESULT([$gl_cv_cc_visibility]) if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi AC_SUBST([CFLAG_VISIBILITY]) AC_SUBST([HAVE_VISIBILITY]) AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ])