From 09e316367ad84ca8c1fa06b8a150a3c168c706a3 Mon Sep 17 00:00:00 2001 From: Armin Kuster Date: Sun, 11 Jan 2015 11:24:25 -0800 Subject: [PATCH] clamav: updated reciped added packaged define and init scripts. patches are all debian Signed-off-by: Armin Kuster --- ...-in-sample-conf-file-to-match-Debian.patch | 40 + ...al-n-after-the-number-in-the-pidfile.patch | 56 + ...ment-test-timeout-from-40secs-to-5mi.patch | 30 + .../0004-Fix-compiling-on-Hurd.patch | 50 + ...005-Workaround-a-bug-in-libc-on-Hurd.patch | 35 + ...sary-harmful-flags-from-libclamav.pc.patch | 22 + .../0007-libclamav-use-libmspack.patch | 4042 ++ ...temd-support-for-clamav-daemon-and-c.patch | 655 + ...ssize_t-size_t-off_t-printf-modifier.patch | 478 + ...nker-flag-because-llvm-config-return.patch | 26 + ...brary-from-upstream-without-unnecess.patch | 56090 ++++++++++++++++ ...ernal-libmspack-if-the-external-is-n.patch | 106 + ...x-autoreconf-with-embedded-libmspack.patch | 27 + ..._SRCDIR-llvm-configure-from-libclama.patch | 23 + ...o-specificy-a-group-for-the-socket-o.patch | 229 + ...d-additinal-SMFIF_-flags-before-invo.patch | 86 + .../0017-Bump-.so-version-number.patch | 22 + .../0018-llvm-don-t-use-system-libs.patch | 26 + .../clamav-0.98.5/clamav-0001-clamdscan.patch | 21 + .../clamav-0.98.5/clamav-freshclam.service | 12 + .../clamav-0.98.5/clamav-milter.conf.sample | 293 + .../clamav/clamav-0.98.5/clamav.service | 17 + .../clamav/clamav-0.98.5/clamd.conf | 595 + .../clamav/clamav-0.98.5/freshclam.conf | 224 + recipes-security/clamav/clamav-0.98.5/series | 18 + .../clamav/clamav-0.98.5/volatiles.03_clamav | 3 + recipes-security/clamav/clamav_0.98.5.bb | 135 + 27 files changed, 63361 insertions(+) create mode 100644 recipes-security/clamav/clamav-0.98.5/0001-Change-paths-in-sample-conf-file-to-match-Debian.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0002-Add-an-additional-n-after-the-number-in-the-pidfile.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0003-unit_tests-increment-test-timeout-from-40secs-to-5mi.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0004-Fix-compiling-on-Hurd.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0005-Workaround-a-bug-in-libc-on-Hurd.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0006-remove-unnecessary-harmful-flags-from-libclamav.pc.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0007-libclamav-use-libmspack.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0008-Add-upstream-systemd-support-for-clamav-daemon-and-c.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0009-fix-ssize_t-size_t-off_t-printf-modifier.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0010-hardcode-LLVM-linker-flag-because-llvm-config-return.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0011-Add-libmspack-library-from-upstream-without-unnecess.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0012-allow-to-use-internal-libmspack-if-the-external-is-n.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0013-fix-autoreconf-with-embedded-libmspack.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0014-remove-AC_CONFIG_SRCDIR-llvm-configure-from-libclama.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0015-bb-10731-Allow-to-specificy-a-group-for-the-socket-o.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0016-clamav-milter-add-additinal-SMFIF_-flags-before-invo.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0017-Bump-.so-version-number.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/0018-llvm-don-t-use-system-libs.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/clamav-0001-clamdscan.patch create mode 100644 recipes-security/clamav/clamav-0.98.5/clamav-freshclam.service create mode 100644 recipes-security/clamav/clamav-0.98.5/clamav-milter.conf.sample create mode 100644 recipes-security/clamav/clamav-0.98.5/clamav.service create mode 100644 recipes-security/clamav/clamav-0.98.5/clamd.conf create mode 100644 recipes-security/clamav/clamav-0.98.5/freshclam.conf create mode 100644 recipes-security/clamav/clamav-0.98.5/series create mode 100644 recipes-security/clamav/clamav-0.98.5/volatiles.03_clamav create mode 100644 recipes-security/clamav/clamav_0.98.5.bb diff --git a/recipes-security/clamav/clamav-0.98.5/0001-Change-paths-in-sample-conf-file-to-match-Debian.patch b/recipes-security/clamav/clamav-0.98.5/0001-Change-paths-in-sample-conf-file-to-match-Debian.patch new file mode 100644 index 0000000..afbd402 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0001-Change-paths-in-sample-conf-file-to-match-Debian.patch @@ -0,0 +1,40 @@ +From a6d6189e25d0a1053dc1aaff1b4c71f84b4599cf Mon Sep 17 00:00:00 2001 +From: Scott Kitterman +Date: Mon, 10 Mar 2014 19:20:18 -0400 +Subject: Change paths in sample conf file to match Debian + +--- + etc/clamav-milter.conf.sample | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/etc/clamav-milter.conf.sample b/etc/clamav-milter.conf.sample +index b7d66a4f9641..ed0d519ffb9b 100644 +--- a/etc/clamav-milter.conf.sample ++++ b/etc/clamav-milter.conf.sample +@@ -64,7 +64,7 @@ Example + # daemon (main thread). + # + # Default: disabled +-#PidFile /var/run/clamav-milter.pid ++#PidFile /var/run/clamav/clamav-milter.pid + + # Optional path to the global temporary directory. + # Default: system specific (usually /tmp or /var/tmp). +@@ -90,7 +90,7 @@ Example + # with the same socket: clamd servers will be selected in a round-robin fashion. + # + # Default: no default +-#ClamdSocket tcp:scanner.mydomain:7357 ++ClamdSocket /var/run/clamav/clamd + + + ## +@@ -212,7 +212,7 @@ Example + # A full path is required. + # + # Default: disabled +-#LogFile /tmp/clamav-milter.log ++#LogFile /var/log/clamav/clamav-milter.log + + # By default the log file is locked for writing - the lock protects against + # running clamav-milter multiple times. diff --git a/recipes-security/clamav/clamav-0.98.5/0002-Add-an-additional-n-after-the-number-in-the-pidfile.patch b/recipes-security/clamav/clamav-0.98.5/0002-Add-an-additional-n-after-the-number-in-the-pidfile.patch new file mode 100644 index 0000000..6055bd1 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0002-Add-an-additional-n-after-the-number-in-the-pidfile.patch @@ -0,0 +1,56 @@ +From 3ae8ea99a010e5c513aa48c3bfa15a65772f742b Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Sat, 29 Mar 2014 15:52:55 +0100 +Subject: Add an additional \n after the number in the pidfile + +start-stop-daemon works without the \n in the file but pkill does not. +Also the output of cat $PifFile looks better :) + +https://bugzilla.clamav.net/show_bug.cgi?id=10907 + +Signed-off-by: Sebastian Andrzej Siewior +--- + clamav-milter/clamav-milter.c | 2 +- + clamd/server-th.c | 2 +- + freshclam/freshclam.c | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/clamav-milter/clamav-milter.c b/clamav-milter/clamav-milter.c +index b6ac9e157872..2c7a4d7d3414 100644 +--- a/clamav-milter/clamav-milter.c ++++ b/clamav-milter/clamav-milter.c +@@ -381,7 +381,7 @@ int main(int argc, char **argv) { + if((fd = fopen(opt->strarg, "w")) == NULL) { + logg("!Can't save PID in file %s\n", opt->strarg); + } else { +- if (fprintf(fd, "%u", (unsigned int)getpid())<0) { ++ if (fprintf(fd, "%u\n", (unsigned int)getpid())<0) { + logg("!Can't save PID in file %s\n", opt->strarg); + } + fclose(fd); +diff --git a/clamd/server-th.c b/clamd/server-th.c +index 7ec5ae80cd64..d97cd6fb34e1 100644 +--- a/clamd/server-th.c ++++ b/clamd/server-th.c +@@ -1034,7 +1034,7 @@ int recvloop_th(int *socketds, unsigned nsockets, struct cl_engine *engine, unsi + if((fd = fopen(opt->strarg, "w")) == NULL) { + logg("!Can't save PID in file %s\n", opt->strarg); + } else { +- if (fprintf(fd, "%u", (unsigned int) mainpid)<0) { ++ if (fprintf(fd, "%u\n", (unsigned int) mainpid)<0) { + logg("!Can't save PID in file %s\n", opt->strarg); + } + fclose(fd); +diff --git a/freshclam/freshclam.c b/freshclam/freshclam.c +index 1a3279966720..166586bf6447 100644 +--- a/freshclam/freshclam.c ++++ b/freshclam/freshclam.c +@@ -135,7 +135,7 @@ writepid (const char *pidfile) + } + else + { +- fprintf (fd, "%d", (int) getpid ()); ++ fprintf (fd, "%d\n", (int) getpid ()); + fclose (fd); + } + umask (old_umask); diff --git a/recipes-security/clamav/clamav-0.98.5/0003-unit_tests-increment-test-timeout-from-40secs-to-5mi.patch b/recipes-security/clamav/clamav-0.98.5/0003-unit_tests-increment-test-timeout-from-40secs-to-5mi.patch new file mode 100644 index 0000000..3251278 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0003-unit_tests-increment-test-timeout-from-40secs-to-5mi.patch @@ -0,0 +1,30 @@ +From d5febd3fab63a6dc4af148ab1b94fe8a85412b46 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Fri, 25 Apr 2014 22:06:23 +0200 +Subject: unit_tests: increment test-timeout from 40secs to 5mins + +I see now and then that tests on the slower archs (arm*, mips) fail due to +the timeout restriction. Often a second build even on the same buildd +succeeds. I think that the buildd is either close to the limit or has +something else (another sbuild running) going so it does not finish the +test in 40secs. +Therefore I raise the bar to a 5 minutes limit. The worst thing that can +happen is, that it takes more than 4 minutes before an enless loop will +be detected. + +Signed-off-by: Sebastian Andrzej Siewior +--- + unit_tests/preload_run.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/unit_tests/preload_run.sh b/unit_tests/preload_run.sh +index 8b8c8e3954dd..365b3a8e0edb 100755 +--- a/unit_tests/preload_run.sh ++++ b/unit_tests/preload_run.sh +@@ -5,5 +5,5 @@ + ulimit -c 0 || true + LD_PRELOAD=$LIBPRELOAD + export LD_PRELOAD +-export CK_DEFAULT_TIMEOUT=40 ++export CK_DEFAULT_TIMEOUT=300 + exec $@ diff --git a/recipes-security/clamav/clamav-0.98.5/0004-Fix-compiling-on-Hurd.patch b/recipes-security/clamav/clamav-0.98.5/0004-Fix-compiling-on-Hurd.patch new file mode 100644 index 0000000..de68367 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0004-Fix-compiling-on-Hurd.patch @@ -0,0 +1,50 @@ +From db4079249ca4ead5821ce6e1d32edad84c2579aa Mon Sep 17 00:00:00 2001 +From: Andreas Cadhalpun +Date: Sat, 21 Jun 2014 17:00:47 +0200 +Subject: Fix compiling on Hurd. + +The header linux/sockios.h is not available on Hurd. +--- + libclamav/hostid.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/libclamav/hostid.c b/libclamav/hostid.c +index bf988de2d6fd..e683539eaf41 100644 +--- a/libclamav/hostid.c ++++ b/libclamav/hostid.c +@@ -47,7 +47,7 @@ + #include + #endif + +-#if defined(SIOCGIFHWADDR) ++#if defined(SIOCGIFHWADDR) && !defined(__GNU__) + #if defined(_AIX) + #include + #include +@@ -116,7 +116,7 @@ struct device *get_devices(void) + uint8_t *mac; + int sock; + +-#if defined(SIOCGIFHWADDR) ++#if defined(SIOCGIFHWADDR) && !defined(__GNU__) + struct ifreq ifr; + #else + struct sockaddr_dl *sdl; +@@ -155,7 +155,7 @@ struct device *get_devices(void) + * Instead, Linux uses its own ioctl. This code only runs if we're not Linux, + * Windows, or FreeBSD. + */ +-#if !defined(SIOCGIFHWADDR) ++#if !defined(SIOCGIFHWADDR) || defined(__GNU__) + for (i=0; i < ndevices; i++) { + if (!(strcmp(devices[i].name, addr->ifa_name))) { + sdl = (struct sockaddr_dl *)(addr->ifa_addr); +@@ -180,7 +180,7 @@ struct device *get_devices(void) + } + + /* This is the Linux version of getting the MAC addresses */ +-#if defined(SIOCGIFHWADDR) ++#if defined(SIOCGIFHWADDR) && !defined(__GNU__) + for (i=0; i < ndevices; i++) { + if (!(devices[i].name)) + continue; diff --git a/recipes-security/clamav/clamav-0.98.5/0005-Workaround-a-bug-in-libc-on-Hurd.patch b/recipes-security/clamav/clamav-0.98.5/0005-Workaround-a-bug-in-libc-on-Hurd.patch new file mode 100644 index 0000000..c02d2b2 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0005-Workaround-a-bug-in-libc-on-Hurd.patch @@ -0,0 +1,35 @@ +From b8e7d19ec50c30c59fa1038cd9da6d37c2176833 Mon Sep 17 00:00:00 2001 +From: Andreas Cadhalpun +Date: Sat, 21 Jun 2014 17:02:06 +0200 +Subject: Workaround a bug in libc on Hurd + +The send() function, when asked to send 0 characters, doesn't trigger a corresponding recv(), except on Hurd. + +This breaks the communication between clamd and clamdscan. + +See: https://bugs.debian.org/752237 +--- + clamd/scanner.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/clamd/scanner.c b/clamd/scanner.c +index cd3d07c4ad3e..d531c4420686 100644 +--- a/clamd/scanner.c ++++ b/clamd/scanner.c +@@ -119,6 +119,7 @@ int scan_callback(STATBUF *sb, char *filename, const char *msg, enum cli_ftw_rea + + /* detect disconnected socket, + * this should NOT detect half-shutdown sockets (SHUT_WR) */ ++#if !defined(__GNU__) + if (send(scandata->conn->sd, &ret, 0, 0) == -1 && errno != EINTR) { + logg("$Client disconnected while command was active!\n"); + thrmgr_group_terminate(scandata->conn->group); +@@ -126,7 +127,7 @@ int scan_callback(STATBUF *sb, char *filename, const char *msg, enum cli_ftw_rea + free(filename); + return CL_BREAK; + } +- ++#endif + if (thrmgr_group_need_terminate(scandata->conn->group)) { + logg("^Client disconnected while scanjob was active\n"); + if (reason == visit_file) diff --git a/recipes-security/clamav/clamav-0.98.5/0006-remove-unnecessary-harmful-flags-from-libclamav.pc.patch b/recipes-security/clamav/clamav-0.98.5/0006-remove-unnecessary-harmful-flags-from-libclamav.pc.patch new file mode 100644 index 0000000..95ffd39 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0006-remove-unnecessary-harmful-flags-from-libclamav.pc.patch @@ -0,0 +1,22 @@ +From 0fd50756af998fabc3393f67ff8b78a4855303d9 Mon Sep 17 00:00:00 2001 +From: Andreas Cadhalpun +Date: Mon, 4 Aug 2014 22:44:40 +0200 +Subject: remove unnecessary/harmful flags from libclamav.pc + +--- + libclamav.pc.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libclamav.pc.in b/libclamav.pc.in +index 27db30e757ff..19ef1e4e0399 100644 +--- a/libclamav.pc.in ++++ b/libclamav.pc.in +@@ -6,6 +6,6 @@ includedir=@includedir@ + Name: libclamav + Description: A GPL virus scanner + Version: @PACKAGE_VERSION@ +-Libs: -L${libdir} -lclamav @LIBCLAMAV_LIBS@ +-Cflags: -I${includedir} @CFLAGS@ ++Libs: -L${libdir} -lclamav ++Cflags: -I${includedir} + diff --git a/recipes-security/clamav/clamav-0.98.5/0007-libclamav-use-libmspack.patch b/recipes-security/clamav/clamav-0.98.5/0007-libclamav-use-libmspack.patch new file mode 100644 index 0000000..83f30fb --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0007-libclamav-use-libmspack.patch @@ -0,0 +1,4042 @@ +From bffbaabfbb139ef1596d8b20f0275293cecd9297 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Wed, 30 Jul 2014 08:35:16 +0200 +Subject: libclamav: use libmspack + +This patch provides support for upstream / external libmspack version +libmspack 0.4 (current). The old in-tree version of libmspack is removed +while no loner used. + +BTS: #675558 +clamav: https://bugzilla.clamav.net/show_bug.cgi?id=11062 + +Signed-off-by: Sebastian Andrzej Siewior +--- + configure.ac | 3 + + libclamav/Makefile.am | 11 +- + libclamav/cab.c | 684 ----------------- + libclamav/cab.h | 81 -- + libclamav/chmunpack.h | 122 --- + libclamav/libmspack.c | 525 +++++++++++++ + libclamav/libmspack.h | 7 + + libclamav/mspack.c | 2026 ------------------------------------------------- + libclamav/mspack.h | 294 ------- + libclamav/scanners.c | 146 +--- + 10 files changed, 541 insertions(+), 3358 deletions(-) + delete mode 100644 libclamav/cab.c + delete mode 100644 libclamav/cab.h + delete mode 100644 libclamav/chmunpack.h + create mode 100644 libclamav/libmspack.c + create mode 100644 libclamav/libmspack.h + delete mode 100644 libclamav/mspack.c + delete mode 100644 libclamav/mspack.h + +diff --git a/configure.ac b/configure.ac +index e230f939c2d3..41043753fc92 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -174,6 +174,9 @@ if test "$enable_llvm" = "yes" && test "$subdirfailed" != "no"; then + fi + AM_CONDITIONAL([ENABLE_LLVM], + [test "$subdirfailed" != "yes" && test "$enable_llvm" != "no"]) ++ ++PKG_CHECK_MODULES([LIBMSPACK], [libmspack]) ++ + no_recursion="yes"; + AC_OUTPUT([libclamav/Makefile]) + +diff --git a/libclamav/Makefile.am b/libclamav/Makefile.am +index 1aab51bd6ccc..538e83dcdd03 100644 +--- a/libclamav/Makefile.am ++++ b/libclamav/Makefile.am +@@ -147,6 +147,9 @@ if VERSIONSCRIPT + libclamav_la_LDFLAGS += -Wl,@VERSIONSCRIPTFLAG@,@top_srcdir@/libclamav/libclamav.map + endif + ++libclamav_la_CFLAGS += $(LIBMSPACK_CFLAGS) ++libclamav_la_LDFLAGS += $(LIBMSPACK_LIBS) ++ + include_HEADERS = clamav.h + + libclamav_la_SOURCES = \ +@@ -204,8 +207,8 @@ libclamav_la_SOURCES = \ + upx.h \ + htmlnorm.c \ + htmlnorm.h \ +- chmunpack.c \ +- chmunpack.h \ ++ libmspack.c \ ++ libmspack.h \ + rebuildpe.c \ + rebuildpe.h \ + petite.c \ +@@ -283,10 +286,6 @@ libclamav_la_SOURCES = \ + regex_list.h \ + regex_suffix.c \ + regex_suffix.h \ +- mspack.c \ +- mspack.h \ +- cab.c \ +- cab.h \ + entconv.c \ + entconv.h \ + entitylist.h \ +diff --git a/libclamav/cab.c b/libclamav/cab.c +deleted file mode 100644 +index 6d2eade7d4ea..000000000000 +--- a/libclamav/cab.c ++++ /dev/null +@@ -1,684 +0,0 @@ +-/* +- * Copyright (C) 2007-2008 Sourcefire, Inc. +- * +- * Authors: Tomasz Kojm +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License version 2 as +- * published by the Free Software Foundation. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- */ +- +-#if HAVE_CONFIG_H +-#include "clamav-config.h" +-#endif +- +-#include +-#include +-#include +-#include +-#include +-#ifdef HAVE_UNISTD_H +-#include +-#endif +-#include +- +-#include "clamav.h" +-#include "cltypes.h" +-#include "others.h" +-#include "mspack.h" +-#include "cab.h" +- +-#define EC32(x) cli_readint32(&x) /* Convert little endian to host */ +-#define EC16(x) cli_readint16(&x) +- +-/* hard limits */ +-#define CAB_FOLDER_LIMIT 5000 +-#define CAB_FILE_LIMIT 5000 +- +-/* Cabinet format data structures */ +- +-struct cab_hdr { +- uint32_t signature; /* file signature */ +- uint32_t res1; /* reserved */ +- uint32_t cbCabinet; /* size of cabinet file */ +- uint32_t res2; /* reserved */ +- uint32_t coffFiles; /* offset of the first file entry */ +- uint32_t res3; /* reserved */ +- uint8_t versionMinor; /* file format version, minor */ +- uint8_t versionMajor; /* file format version, major */ +- uint16_t cFolders; /* number of folder entries */ +- uint16_t cFiles; /* number of file entries */ +- uint16_t flags; /* option flags */ +- uint16_t setID; /* multiple cabs related */ +- uint16_t iCabinet; /* multiple cabs related */ +-}; +- +-struct cab_hdr_opt { +- uint16_t cbCFHeader; /* size of reserved header area */ +- uint8_t cbCFFolder; /* size of reserved folder area */ +- uint8_t cbCFData; /* size of reserved block area */ +-}; +- +-struct cab_folder_hdr +-{ +- uint32_t coffCabStart; /* offset of the first data block */ +- uint16_t cCFData; /* number of data blocks */ +- uint16_t typeCompress; /* compression type */ +-}; +- +-struct cab_file_hdr +-{ +- uint32_t cbFile; /* uncompressed size */ +- uint32_t uoffFolderStart; /* uncompressed offset of file in folder */ +- uint16_t iFolder; /* folder index */ +- uint16_t date; /* date stamp */ +- uint16_t time; /* time stamp */ +- uint16_t attribs; /* attribute flags */ +-}; +- +-struct cab_block_hdr +-{ +- uint32_t csum; /* data block checksum */ +- uint16_t cbData; /* number of compressed bytes */ +- uint16_t cbUncomp; /* number of uncompressed bytes */ +-}; +- +-static char *cab_readstr(fmap_t *map, off_t *offset, int *ret) +-{ +- int i; +- const char *str; +- char *retstr; +- +- if(!(str = fmap_need_offstr(map, *offset, 256))) { +- *ret = CL_EFORMAT; +- return NULL; +- } +- +- i = strlen(str) + 1; +- if(i>=255) { +- fmap_unneed_ptr(map, str, i); +- *ret = CL_EFORMAT; +- return NULL; +- } +- +- *offset += i; +- if((retstr = cli_malloc(i))) +- memcpy(retstr, str, i); +- fmap_unneed_ptr(map, str, i); +- +- if(!retstr) { +- *ret = CL_EMEM; +- return NULL; +- } +- +- *ret = CL_SUCCESS; +- return retstr; +-} +- +-static int cab_chkname(char *name, int san) +-{ +- size_t i, len = strlen(name); +- +- +- for(i = 0; i < len; i++) { +- if(!san && (strchr("%/*?|\\\"+=<>;:\t ", name[i]) || !isascii(name[i]))) { +- cli_dbgmsg("cab_chkname: File name contains disallowed characters\n"); +- return 1; +- } else if(san && !isalnum(name[i])) { +- name[i] = '*'; +- } +- } +- +- return 0; +-} +- +-void cab_free(struct cab_archive *cab) +-{ +- struct cab_folder *folder; +- struct cab_file *file; +- +- +- if(cab->state) { +- if(cab->state->stream) { +- switch(cab->state->cmethod & 0x000f) { +- case 0x0001: +- mszip_free(cab->state->stream); +- break; +- case 0x0002: +- qtm_free(cab->state->stream); +- break; +- case 0x0003: +- lzx_free(cab->state->stream); +- } +- } +- free(cab->state); +- } +- +- while(cab->folders) { +- folder = cab->folders; +- cab->folders = cab->folders->next; +- free(folder); +- } +- +- while(cab->files) { +- file = cab->files; +- cab->files = cab->files->next; +- free(file->name); +- free(file); +- } +-} +- +-int cab_open(fmap_t *map, off_t offset, struct cab_archive *cab) +-{ +- unsigned int i, folders = 0; +- struct cab_file *file, *lfile = NULL; +- struct cab_folder *folder, *lfolder = NULL; +- const struct cab_hdr *hdr; +- const struct cab_hdr_opt *hdr_opt; +- uint16_t fidx; +- uint32_t coffFiles; +- char *pt; +- int ret; +- off_t resfold = 0, rsize, cur_offset = offset; +- +- if(!(hdr=fmap_need_off_once(map, cur_offset, sizeof(*hdr)))) { +- cli_dbgmsg("cab_open: Can't read cabinet header\n"); +- return CL_EFORMAT; /* most likely a corrupted file */ +- } +- cur_offset += sizeof(*hdr); +- +- if(EC32(hdr->signature) != 0x4643534d) { +- cli_dbgmsg("cab_open: Incorrect CAB signature\n"); +- return CL_EFORMAT; +- } else { +- cli_dbgmsg("CAB: -------------- Cabinet file ----------------\n"); +- } +- +- rsize = map->len; +- +- memset(cab, 0, sizeof(struct cab_archive)); +- +- cab->length = EC32(hdr->cbCabinet); +- cli_dbgmsg("CAB: Cabinet length: %u\n", cab->length); +- if((off_t) cab->length > rsize) { +- cli_dbgmsg("CAB: Truncating file size from %lu to %lu\n", (unsigned long int) cab->length, (unsigned long int) rsize); +- cab->length = (uint32_t) rsize; +- } +- +- cab->nfolders = EC16(hdr->cFolders); +- if(!cab->nfolders) { +- cli_dbgmsg("cab_open: No folders in cabinet (fake cab?)\n"); +- return CL_EFORMAT; +- } else { +- cli_dbgmsg("CAB: Folders: %u\n", cab->nfolders); +- if(cab->nfolders > CAB_FOLDER_LIMIT) { +- cab->nfolders = CAB_FOLDER_LIMIT; +- cli_dbgmsg("CAB: *** Number of folders limited to %u ***\n", cab->nfolders); +- } +- } +- +- cab->nfiles = EC16(hdr->cFiles); +- if(!cab->nfiles) { +- cli_dbgmsg("cab_open: No files in cabinet (fake cab?)\n"); +- return CL_EFORMAT; +- } else { +- cli_dbgmsg("CAB: Files: %u\n", cab->nfiles); +- if(cab->nfiles > CAB_FILE_LIMIT) { +- cab->nfiles = CAB_FILE_LIMIT; +- cli_dbgmsg("CAB: *** Number of files limited to %u ***\n", cab->nfiles); +- } +- } +- +- cli_dbgmsg("CAB: File format version: %u.%u\n", hdr->versionMajor, hdr->versionMinor); +- +- cab->flags = EC16(hdr->flags); +- coffFiles = EC16(hdr->coffFiles); +- +- if(cab->flags & 0x0004) { +- if(!(hdr_opt = fmap_need_off_once(map, cur_offset, sizeof(*hdr_opt)))) { +- cli_dbgmsg("cab_open: Can't read file header (fake cab?)\n"); +- return CL_EFORMAT; /* most likely a corrupted file */ +- } +- +- cab->reshdr = EC16(hdr_opt->cbCFHeader); +- resfold = hdr_opt->cbCFFolder; +- cab->resdata = hdr_opt->cbCFData; +- +- cur_offset += sizeof(*hdr_opt) + cab->reshdr; +- if(cab->reshdr) { +- if(cab->reshdr >= rsize) { +- cli_dbgmsg("cab_open: Can't lseek to %u (fake cab?)\n", cab->reshdr); +- return CL_EFORMAT; /* most likely a corrupted file */ +- } +- } +- } +- +- if(cab->flags & 0x0001) { /* preceding cabinet */ +- /* name */ +- pt = cab_readstr(map, &cur_offset, &ret); +- if(ret) +- return ret; +- if(cab_chkname(pt, 0)) +- cli_dbgmsg("CAB: Invalid name of preceding cabinet\n"); +- else +- cli_dbgmsg("CAB: Preceding cabinet name: %s\n", pt); +- free(pt); +- /* info */ +- pt = cab_readstr(map, &cur_offset, &ret); +- if(ret) +- return ret; +- if(cab_chkname(pt, 0)) +- cli_dbgmsg("CAB: Invalid info for preceding cabinet\n"); +- else +- cli_dbgmsg("CAB: Preceding cabinet info: %s\n", pt); +- free(pt); +- } +- +- if(cab->flags & 0x0002) { /* next cabinet */ +- /* name */ +- pt = cab_readstr(map, &cur_offset, &ret); +- if(ret) +- return ret; +- if(cab_chkname(pt, 0)) +- cli_dbgmsg("CAB: Invalid name of next cabinet\n"); +- else +- cli_dbgmsg("CAB: Next cabinet name: %s\n", pt); +- free(pt); +- /* info */ +- pt = cab_readstr(map, &cur_offset, &ret); +- if(ret) +- return ret; +- if(cab_chkname(pt, 0)) +- cli_dbgmsg("CAB: Invalid info for next cabinet\n"); +- else +- cli_dbgmsg("CAB: Next cabinet info: %s\n", pt); +- free(pt); +- } +- +- /* folders */ +- for(i = 0; i < cab->nfolders; i++) { +- const struct cab_folder_hdr *folder_hdr; +- +- if(!(folder_hdr = fmap_need_off_once(map, cur_offset, sizeof(*folder_hdr)))) { +- cli_dbgmsg("cab_open: Can't read header for folder %u\n", i); +- break; +- } +- +- cur_offset += sizeof(*folder_hdr) + resfold; +- +- if(EC32(folder_hdr->coffCabStart) + offset > rsize) { +- cli_dbgmsg("CAB: Folder out of file\n"); +- continue; +- } +- +- if((EC16(folder_hdr->typeCompress) & 0x000f) > 3) { +- cli_dbgmsg("CAB: Unknown compression method\n"); +- continue; +- } +- +- folder = (struct cab_folder *) cli_calloc(1, sizeof(struct cab_folder)); +- if(!folder) { +- cli_errmsg("cab_open: Can't allocate memory for folder\n"); +- cab_free(cab); +- return CL_EMEM; +- } +- +- folder->cab = (struct cab_archive *) cab; +- folder->offset = (off_t) EC32(folder_hdr->coffCabStart) + offset; +- folder->nblocks = EC16(folder_hdr->cCFData); +- folder->cmethod = EC16(folder_hdr->typeCompress); +- +- cli_dbgmsg("CAB: Folder record %u\n", i); +- cli_dbgmsg("CAB: Folder offset: %u\n", (unsigned int) folder->offset); +- cli_dbgmsg("CAB: Folder compression method: %d\n", folder->cmethod); +- +- if(!lfolder) +- cab->folders = folder; +- else +- lfolder->next = folder; +- +- lfolder = folder; +- folders++; +- } +- cli_dbgmsg("CAB: Recorded folders: %u\n", folders); +- +- /* files */ +- if(cab->nfolders != folders) { +- if(coffFiles >= rsize) { +- cli_dbgmsg("cab_open: Can't lseek to hdr.coffFiles\n"); +- cab_free(cab); +- return CL_EFORMAT; +- } +- cur_offset = coffFiles; +- } +- for(i = 0; i < cab->nfiles; i++) { +- const struct cab_file_hdr *file_hdr; +- +- if(!(file_hdr = fmap_need_off_once(map, cur_offset, sizeof(*file_hdr)))) { +- cli_dbgmsg("cab_open: Can't read file %u header\n", i); +- break; +- } +- cur_offset += sizeof(*file_hdr); +- +- file = (struct cab_file *) cli_calloc(1, sizeof(struct cab_file)); +- if(!file) { +- cli_errmsg("cab_open: Can't allocate memory for file\n"); +- cab_free(cab); +- return CL_EMEM; +- } +- +- file->cab = cab; +- cab->map = map; +- file->offset = EC32(file_hdr->uoffFolderStart); +- file->length = EC32(file_hdr->cbFile); +- file->attribs = EC16(file_hdr->attribs); +- fidx = EC16(file_hdr->iFolder); +- file->error = CL_SUCCESS; +- +- file->name = cab_readstr(map, &cur_offset, &ret); +- if(ret) { +- free(file); +- continue; +- } +- cab_chkname(file->name, 1); +- +- cli_dbgmsg("CAB: File record %u\n", i); +- cli_dbgmsg("CAB: File name: %s\n", file->name); +- cli_dbgmsg("CAB: File offset: %u\n", (unsigned int) file->offset); +- cli_dbgmsg("CAB: File folder index: %u\n", fidx); +- cli_dbgmsg("CAB: File attribs: 0x%x\n", file->attribs); +- if(file->attribs & 0x01) +- cli_dbgmsg("CAB: * file is read-only\n"); +- if(file->attribs & 0x02) +- cli_dbgmsg("CAB: * file is hidden\n"); +- if(file->attribs & 0x04) +- cli_dbgmsg("CAB: * file is a system file\n"); +- if(file->attribs & 0x20) +- cli_dbgmsg("CAB: * file modified since last backup\n"); +- if(file->attribs & 0x40) +- cli_dbgmsg("CAB: * file to be run after extraction\n"); +- if(file->attribs & 0x80) +- cli_dbgmsg("CAB: * file name contains UTF\n"); +- +- /* folder index */ +- if(fidx < 0xfffd) { +- if(fidx > cab->nfolders) { +- cli_dbgmsg("cab_open: File %s is not associated with any folder\n", file->name); +- free(file->name); +- free(file); +- continue; +- } +- +- file->folder = cab->folders; +- while(file->folder && fidx--) +- file->folder = file->folder->next; +- +- if(!file->folder) { +- cli_dbgmsg("cab_open: Folder not found for file %s\n", file->name); +- free(file->name); +- free(file); +- continue; +- } +- +- } else { +- cli_dbgmsg("CAB: File is split *skipping*\n"); +- free(file->name); +- free(file); +- continue; +- } +- +- if(!lfile) +- cab->files = file; +- else +- lfile->next = file; +- +- lfile = file; +- +- } +- +- return CL_SUCCESS; +-} +- +-static int cab_read_block(struct cab_file *file) +-{ +- const struct cab_block_hdr *block_hdr; +- struct cab_state *state = file->cab->state; +- +- if(!(block_hdr = fmap_need_off_once(file->cab->map, file->cab->cur_offset, sizeof(*block_hdr)))) { +- cli_dbgmsg("cab_read_block: Can't read block header\n"); +- return CL_EFORMAT; /* most likely a corrupted file */ +- } +- +- file->cab->cur_offset += sizeof(*block_hdr) + file->cab->resdata; +- state->blklen = EC16(block_hdr->cbData); +- state->outlen = EC16(block_hdr->cbUncomp); +- +- if(fmap_readn(file->cab->map, state->block, file->cab->cur_offset, state->blklen) != state->blklen) { +- cli_dbgmsg("cab_read_block: Can't read block data\n"); +- return CL_EFORMAT; /* most likely a corrupted file */ +- } +- +- file->cab->cur_offset += state->blklen; +- state->pt = state->end = state->block; +- state->end += state->blklen; +- +- return CL_SUCCESS; +-} +- +-static int cab_read(struct cab_file *file, unsigned char *buffer, int bytes) +-{ +- uint16_t todo, left; +- +- +- if((file->cab->state->blknum > file->folder->nblocks) && !file->lread) { +- file->error = CL_BREAK; +- return -1; +- } +- +- todo = bytes; +- while(todo > 0) { +- left = file->cab->state->end - file->cab->state->pt; +- +- if(left) { +- if(left > todo) +- left = todo; +- +- memcpy(buffer, file->cab->state->pt, left); +- file->cab->state->pt += left; +- buffer += left; +- todo -= left; +- +- } else { +- if(file->cab->state->blknum++ >= file->folder->nblocks) +- break; +- +- file->error = cab_read_block(file); +- if(file->error) +- return -1; +- +- if((file->folder->cmethod & 0x000f) == 0x0002) /* Quantum hack */ +- *file->cab->state->end++ = 0xff; +- +- if(file->cab->state->blknum >= file->folder->nblocks) { +- if((file->folder->cmethod & 0x000f) == 0x0003) { /* LZX hack */ +- lzx_set_output_length(file->cab->state->stream, (off_t) ((file->cab->state->blknum - 1) * 32768 + file->cab->state->outlen)); +- } +- } else { +- if(file->cab->state->outlen != 32768) { +- cli_dbgmsg("cab_read: WARNING: partial data block\n"); +- } +- } +- } +- } +- +- return file->lread = bytes - todo; +-} +- +-static int cab_unstore(struct cab_file *file) +-{ +- int todo, bread, bytes = file->length; +- unsigned char buff[4096]; +- +- +- if(bytes < 0) { +- cli_dbgmsg("cab_unstore: bytes < 0\n"); +- return CL_EFORMAT; +- } +- +- todo = MIN((unsigned int) bytes, file->max_size); +- +- while(1) { +- +- if((unsigned int) todo <= sizeof(buff)) +- bread = todo; +- else +- bread = sizeof(buff); +- +- if((bread = cab_read(file, buff, bread)) == -1) { +- cli_dbgmsg("cab_unstore: cab_read failed\n"); +- return file->error; +- } else if(cli_writen(file->ofd, buff, bread) != bread) { +- cli_warnmsg("cab_unstore: Can't write %d bytes to descriptor %d\n", bread, file->ofd); +- return CL_EWRITE; +- } +- +- todo -= bread; +- +- if(!bread || todo <= 0) +- break; +- } +- +- return CL_SUCCESS; +-} +- +-#define CAB_CHGFOLDER \ +- if(!file->cab->actfol || (file->folder != file->cab->actfol) \ +- || (file->cab->state && file->cab->state->cmethod != file->folder->cmethod)) { \ +- if(file->cab->state) { \ +- if(file->cab->state->stream) { \ +- switch(file->cab->state->cmethod & 0x000f) { \ +- case 0x0001: \ +- mszip_free(file->cab->state->stream); \ +- break; \ +- case 0x0002: \ +- qtm_free(file->cab->state->stream); \ +- break; \ +- case 0x0003: \ +- lzx_free(file->cab->state->stream); \ +- } \ +- } \ +- free(file->cab->state); \ +- file->cab->state = NULL; \ +- } \ +- file->cab->cur_offset = file->folder->offset; \ +- file->cab->state = (struct cab_state *) cli_calloc(1, sizeof(struct cab_state)); \ +- if(!file->cab->state) { \ +- cli_errmsg("cab_extract: Can't allocate memory for internal state\n"); \ +- close(file->ofd); \ +- return CL_EMEM; \ +- } \ +- file->cab->state->cmethod = file->folder->cmethod; \ +- switch(file->folder->cmethod & 0x000f) { \ +- case 0x0001: \ +- file->cab->state->stream = (struct mszip_stream *) mszip_init(file->ofd, 4096, 1, file, &cab_read); \ +- break; \ +- case 0x0002: \ +- file->cab->state->stream = (struct qtm_stream *) qtm_init(file->ofd, (int) (file->folder->cmethod >> 8) & 0x1f, 4096, file, &cab_read); \ +- break; \ +- case 0x0003: \ +- file->cab->state->stream = (struct lzx_stream *) lzx_init(file->ofd, (int) (file->folder->cmethod >> 8) & 0x1f, 0, 4096, 0, file, &cab_read); \ +- } \ +- if((file->folder->cmethod & 0x000f) && !file->cab->state->stream) { \ +- close(file->ofd); \ +- return CL_EUNPACK; \ +- } \ +- file->cab->actfol = file->folder; \ +- } else { \ +- if(file->cab->state && file->cab->state->stream) { \ +- switch(file->cab->state->cmethod & 0x000f) { \ +- case 0x0001: \ +- ((struct mszip_stream *) file->cab->state->stream)->ofd = file->ofd; \ +- break; \ +- case 0x0002: \ +- ((struct qtm_stream *) file->cab->state->stream)->ofd = file->ofd; \ +- break; \ +- case 0x0003: \ +- ((struct lzx_stream *) file->cab->state->stream)->ofd = file->ofd; \ +- break; \ +- } \ +- } \ +- } +- +- +-int cab_extract(struct cab_file *file, const char *name) +-{ +- int ret; +- +- +- if(!file || !name) { +- cli_errmsg("cab_extract: !file || !name\n"); +- return CL_ENULLARG; +- } +- +- if(!file->folder) { +- cli_errmsg("cab_extract: file->folder == NULL\n"); +- return CL_ENULLARG; +- } +- +- file->ofd = open(name, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, S_IRWXU); +- if(file->ofd == -1) { +- cli_errmsg("cab_extract: Can't open file %s in write mode\n", name); +- return CL_ECREAT; +- } +- +- switch(file->folder->cmethod & 0x000f) { +- case 0x0000: /* STORE */ +- cli_dbgmsg("CAB: Compression method: STORED\n"); +- CAB_CHGFOLDER; +- if(file->length > file->cab->length) { +- cli_dbgmsg("cab_extract: Stored file larger than archive itself, trimming down\n"); +- file->length = file->cab->length; +- } +- ret = cab_unstore(file); +- break; +- +- case 0x0001: /* MSZIP */ +- cli_dbgmsg("CAB: Compression method: MSZIP\n"); +- CAB_CHGFOLDER; +- ret = mszip_decompress(file->cab->state->stream, file->length); +- break; +- +- case 0x0002: /* QUANTUM */ +- cli_dbgmsg("CAB: Compression method: QUANTUM\n"); +- CAB_CHGFOLDER; +- ret = qtm_decompress(file->cab->state->stream, file->length); +- break; +- +- case 0x0003: /* LZX */ +- cli_dbgmsg("CAB: Compression method: LZX\n"); +- CAB_CHGFOLDER; +- ret = lzx_decompress(file->cab->state->stream, file->length); +- break; +- +- default: +- cli_dbgmsg("CAB: Not supported compression method: 0x%x\n", file->folder->cmethod & 0x000f); +- ret = CL_EFORMAT; +- } +- +- close(file->ofd); +- +- if(ret == CL_BREAK) +- ret = CL_SUCCESS; +- +- return ret; +-} +diff --git a/libclamav/cab.h b/libclamav/cab.h +deleted file mode 100644 +index 795900d555e9..000000000000 +--- a/libclamav/cab.h ++++ /dev/null +@@ -1,81 +0,0 @@ +-/* +- * Copyright (C) 2007-2008 Sourcefire, Inc. +- * +- * Authors: Tomasz Kojm +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License version 2 as +- * published by the Free Software Foundation. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- */ +- +-#ifndef __CAB_H +-#define __CAB_H +- +-#include +-#include "cltypes.h" +-#include "fmap.h" +- +-#define CAB_BLOCKMAX 65535 +-#define CAB_INPUTMAX (CAB_BLOCKMAX + 6144) +- +-struct cab_archive { +- struct cab_folder *folders, *actfol; +- struct cab_file *files; +- struct cab_state *state; +- fmap_t *map; +- off_t cur_offset; +- uint32_t length; +- uint16_t nfolders; +- uint16_t nfiles; +- uint16_t flags; +- uint16_t reshdr; +- uint8_t resdata; +-}; +- +-struct cab_state { +- unsigned char *pt, *end; +- void *stream; +- unsigned char block[CAB_INPUTMAX]; +- uint16_t blklen; +- uint16_t outlen; +- uint16_t blknum; +- uint16_t cmethod; +-}; +- +-struct cab_file { +- off_t offset; +- char *name; +- uint32_t length; +- int error; +- int lread; +- int ofd; +- struct cab_folder *folder; +- struct cab_file *next; +- struct cab_archive *cab; +- uint16_t attribs; +- uint64_t max_size, written_size; +-}; +- +-struct cab_folder { +- struct cab_archive *cab; +- off_t offset; +- struct cab_folder *next; +- uint16_t cmethod; +- uint16_t nblocks; +-}; +- +-int cab_open(fmap_t *map, off_t offset, struct cab_archive *cab); +-int cab_extract(struct cab_file *file, const char *name); +-void cab_free(struct cab_archive *cab); +- +-#endif +diff --git a/libclamav/chmunpack.h b/libclamav/chmunpack.h +deleted file mode 100644 +index 7864386b921f..000000000000 +--- a/libclamav/chmunpack.h ++++ /dev/null +@@ -1,122 +0,0 @@ +-/* +- * Extract component parts of MS CHM files +- * +- * Copyright (C) 2007-2008 Sourcefire, Inc. +- * +- * Authors: Trog +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License version 2 as +- * published by the Free Software Foundation. +- * +- * This program is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +- * GNU General Public License for more details. +- * +- * You should have received a copy of the GNU General Public License +- * along with this program; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +- * MA 02110-1301, USA. +- */ +- +-#ifndef __CHM_UNPACK_H +-#define __CHM_UNPACK_H +- +-#if HAVE_CONFIG_H +-#include "clamav-config.h" +-#endif +- +-#include "cltypes.h" +-#include "others.h" +-#include "fmap.h" +- +-#ifndef HAVE_ATTRIB_PACKED +-#define __attribute__(x) +-#endif +- +-#ifdef HAVE_PRAGMA_PACK +-#pragma pack(1) +-#endif +- +-#ifdef HAVE_PRAGMA_PACK_HPPA +-#pragma pack 1 +-#endif +- +-#define CHM_ITSF_MIN_LEN (0x60) +-typedef struct chm_itsf_header_tag +-{ +- unsigned char signature[4]; +- int32_t version __attribute__ ((packed)); +- int32_t header_len __attribute__ ((packed)); +- uint32_t unknown __attribute__ ((packed)); +- uint32_t last_modified __attribute__ ((packed)); +- uint32_t lang_id __attribute__ ((packed)); +- unsigned char dir_clsid[16]; +- unsigned char stream_clsid[16]; +- uint64_t sec0_offset __attribute__ ((packed)); +- uint64_t sec0_len __attribute__ ((packed)); +- uint64_t dir_offset __attribute__ ((packed)); +- uint64_t dir_len __attribute__ ((packed)); +- uint64_t data_offset __attribute__ ((packed)); +-} chm_itsf_header_t; +- +-#define CHM_ITSP_LEN (0x54) +-typedef struct chm_itsp_header_tag +-{ +- unsigned char signature[4]; +- int32_t version __attribute__ ((packed)); +- int32_t header_len __attribute__ ((packed)); +- int32_t unknown1 __attribute__ ((packed)); +- uint32_t block_len __attribute__ ((packed)); +- int32_t blockidx_intvl __attribute__ ((packed)); +- int32_t index_depth __attribute__ ((packed)); +- int32_t index_root __attribute__ ((packed)); +- int32_t index_head __attribute__ ((packed)); +- int32_t index_tail __attribute__ ((packed)); +- int32_t unknown2 __attribute__ ((packed)); +- uint32_t num_blocks __attribute__ ((packed)); +- uint32_t lang_id __attribute__ ((packed)); +- unsigned char system_clsid[16]; +- unsigned char unknown4[16]; +-} chm_itsp_header_t; +- +-#ifdef HAVE_PRAGMA_PACK +-#pragma pack() +-#endif +- +-#ifdef HAVE_PRAGMA_PACK_HPPA +-#pragma pack +-#endif +- +-typedef struct chm_sys_entry_tag +-{ +- uint64_t offset; +- uint64_t length; +-} chm_sys_entry_t; +- +-typedef struct chm_metadata_tag { +- uint64_t file_length; +- uint64_t file_offset; +- chm_sys_entry_t sys_control; +- chm_sys_entry_t sys_content; +- chm_sys_entry_t sys_reset; +- off_t m_length; +- chm_itsf_header_t itsf_hdr; +- chm_itsp_header_t itsp_hdr; +- int ufd; +- int ofd; +- uint32_t num_chunks; +- off_t chunk_offset; +- const char *chunk_data; +- const char *chunk_current; +- const char *chunk_end; +- fmap_t *map; +- uint16_t chunk_entries; +-} chm_metadata_t; +- +-int cli_chm_open(const char *dirname, chm_metadata_t *metadata, cli_ctx *ctx); +-int cli_chm_prepare_file(chm_metadata_t *metadata); +-int cli_chm_extract_file(char *dirname, chm_metadata_t *metadata, cli_ctx *ctx); +-void cli_chm_close(chm_metadata_t *metadata); +-#endif +diff --git a/libclamav/libmspack.c b/libclamav/libmspack.c +new file mode 100644 +index 000000000000..e94312e6dad3 +--- /dev/null ++++ b/libclamav/libmspack.c +@@ -0,0 +1,525 @@ ++/* ++ * Glue code for libmspack handling. ++ * Author: 웃 Sebastian Andrzej Siewior ++ * ✉ sebastian @ breakpoint Ì£cc ++ */ ++ ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include "clamav.h" ++#include "fmap.h" ++#include "scanners.h" ++#include "others.h" ++ ++enum mspack_type { ++ FILETYPE_DUNNO, ++ FILETYPE_FMAP, ++ FILETYPE_FILENAME, ++}; ++ ++struct mspack_name { ++ fmap_t *fmap; ++ off_t org; ++}; ++ ++struct mspack_system_ex { ++ struct mspack_system ops; ++ off_t max_size; ++}; ++ ++struct mspack_handle { ++ enum mspack_type type; ++ ++ fmap_t *fmap; ++ off_t org; ++ off_t offset; ++ ++ FILE *f; ++ off_t max_size; ++}; ++ ++#define container_of(ptr, type, member) ({ \ ++ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ++ (type *)( (char *)__mptr - offsetof(type,member) );}) ++ ++#define min_t(type, x, y) ({ \ ++ type __min1 = (x); \ ++ type __min2 = (y); \ ++ __min1 < __min2 ? __min1: __min2; }) ++ ++static struct mspack_file *mspack_fmap_open(struct mspack_system *self, ++ const char *filename, int mode) ++{ ++ struct mspack_name *mspack_name; ++ struct mspack_handle *mspack_handle; ++ struct mspack_system_ex *self_ex; ++ const char *fmode; ++ ++ if (!filename) { ++ cli_dbgmsg("%s() failed at %d\n", __func__, __LINE__); ++ return NULL; ++ } ++ mspack_handle = malloc(sizeof(*mspack_handle)); ++ if (!mspack_handle) { ++ cli_dbgmsg("%s() failed at %d\n", __func__, __LINE__); ++ return NULL; ++ } ++ switch (mode) { ++ case MSPACK_SYS_OPEN_READ: ++ mspack_handle->type = FILETYPE_FMAP; ++ ++ mspack_name = (struct mspack_name *)filename; ++ mspack_handle->fmap = mspack_name->fmap; ++ mspack_handle->org = mspack_name->org; ++ mspack_handle->offset = 0; ++ ++ return (struct mspack_file *)mspack_handle; ++ ++ case MSPACK_SYS_OPEN_WRITE: ++ fmode = "wb"; ++ break; ++ case MSPACK_SYS_OPEN_UPDATE: ++ fmode = "r+b"; ++ break; ++ case MSPACK_SYS_OPEN_APPEND: ++ fmode = "ab"; ++ break; ++ default: ++ cli_dbgmsg("%s() wrong mode\n", __func__); ++ goto out_err; ++ } ++ ++ mspack_handle->type = FILETYPE_FILENAME; ++ ++ mspack_handle->f = fopen(filename, fmode); ++ if (!mspack_handle->f) { ++ cli_dbgmsg("%s() failed %d\n", __func__, __LINE__); ++ goto out_err; ++ } ++ self_ex = container_of(self, struct mspack_system_ex, ops); ++ mspack_handle->max_size = self_ex->max_size; ++ return (struct mspack_file *)mspack_handle; ++ ++out_err: ++ free(mspack_handle); ++ return NULL; ++} ++ ++static void mspack_fmap_close(struct mspack_file *file) ++{ ++ struct mspack_handle *mspack_handle = (struct mspack_handle *)file; ++ ++ if (!mspack_handle) ++ return; ++ ++ if (mspack_handle->type == FILETYPE_FILENAME) ++ fclose(mspack_handle->f); ++ free(mspack_handle); ++} ++ ++static int mspack_fmap_read(struct mspack_file *file, void *buffer, int bytes) ++{ ++ struct mspack_handle *mspack_handle = (struct mspack_handle *)file; ++ off_t offset; ++ size_t count; ++ int ret; ++ ++ if (bytes < 0) { ++ cli_dbgmsg("%s() %d\n", __func__, __LINE__); ++ return -1; ++ } ++ if (!mspack_handle) { ++ cli_dbgmsg("%s() %d\n", __func__, __LINE__); ++ return -1; ++ } ++ ++ if (mspack_handle->type == FILETYPE_FMAP) { ++ offset = mspack_handle->offset + mspack_handle->org; ++ ++ ret = fmap_readn(mspack_handle->fmap, buffer, offset, bytes); ++ if (ret != bytes) { ++ cli_dbgmsg("%s() %d %d, %d\n", __func__, __LINE__, bytes, ret); ++ return ret; ++ } ++ ++ mspack_handle->offset += bytes; ++ return bytes; ++ } ++ count = fread(buffer, bytes, 1, mspack_handle->f); ++ if (count < 1) { ++ cli_dbgmsg("%s() %d %d, %zd\n", __func__, __LINE__, bytes, count); ++ return -1; ++ } ++ return bytes; ++} ++ ++static int mspack_fmap_write(struct mspack_file *file, void *buffer, int bytes) ++{ ++ struct mspack_handle *mspack_handle = (struct mspack_handle *)file; ++ size_t count; ++ off_t max_size; ++ ++ if (bytes < 0 || !mspack_handle) { ++ cli_dbgmsg("%s() err %d\n", __func__, __LINE__); ++ return -1; ++ } ++ ++ if (mspack_handle->type == FILETYPE_FMAP) { ++ cli_dbgmsg("%s() err %d\n", __func__, __LINE__); ++ return -1; ++ } ++ ++ if (!bytes) ++ return 0; ++ ++ max_size = mspack_handle->max_size; ++ if (!max_size) ++ return bytes; ++ ++ max_size = min_t(off_t, max_size, bytes); ++ mspack_handle->max_size -= max_size; ++ ++ count = fwrite(buffer, max_size, 1, mspack_handle->f); ++ if (count < 1) { ++ cli_dbgmsg("%s() err %m <%zd %d>\n", __func__, count, bytes); ++ return -1; ++ } ++ ++ return bytes; ++} ++ ++static int mspack_fmap_seek(struct mspack_file *file, off_t offset, int mode) ++{ ++ struct mspack_handle *mspack_handle = (struct mspack_handle *)file; ++ ++ if (!mspack_handle) { ++ cli_dbgmsg("%s() err %d\n", __func__, __LINE__); ++ return -1; ++ } ++ ++ if (mspack_handle->type == FILETYPE_FMAP) { ++ off_t new_pos; ++ ++ switch (mode) { ++ case MSPACK_SYS_SEEK_START: ++ new_pos = offset; ++ break; ++ case MSPACK_SYS_SEEK_CUR: ++ new_pos = mspack_handle->offset + offset; ++ break; ++ case MSPACK_SYS_SEEK_END: ++ new_pos = mspack_handle->fmap->len + offset; ++ break; ++ default: ++ cli_dbgmsg("%s() err %d\n", __func__, __LINE__); ++ return -1; ++ } ++ if (new_pos < 0 || new_pos > mspack_handle->fmap->len) { ++ cli_dbgmsg("%s() err %d\n", __func__, __LINE__); ++ return -1; ++ } ++ ++ mspack_handle->offset = new_pos; ++ return 0; ++ } ++ ++ switch (mode) { ++ case MSPACK_SYS_SEEK_START: ++ mode = SEEK_SET; ++ break; ++ case MSPACK_SYS_SEEK_CUR: ++ mode = SEEK_CUR; ++ break; ++ case MSPACK_SYS_SEEK_END: ++ mode = SEEK_END; ++ break; ++ default: ++ cli_dbgmsg("%s() err %d\n", __func__, __LINE__); ++ return -1; ++ } ++ ++ return fseeko(mspack_handle->f, offset, mode); ++} ++ ++static off_t mspack_fmap_tell(struct mspack_file *file) ++{ ++ struct mspack_handle *mspack_handle = (struct mspack_handle *)file; ++ ++ if (!mspack_handle) ++ return -1; ++ ++ if (mspack_handle->type == FILETYPE_FMAP) ++ return mspack_handle->offset; ++ ++ return ftello(mspack_handle->f); ++} ++ ++static void mspack_fmap_message(struct mspack_file *file, const char *fmt, ...) ++{ ++ cli_dbgmsg("%s() %s\n", __func__, fmt); ++} ++static void *mspack_fmap_alloc(struct mspack_system *self, size_t num) ++{ ++ return malloc(num); ++} ++ ++static void mspack_fmap_free(void *mem) ++{ ++ free(mem); ++} ++ ++static void mspack_fmap_copy(void *src, void *dst, size_t num) ++{ ++ memcpy(dst, src, num); ++} ++ ++static struct mspack_system mspack_sys_fmap_ops = { ++ .open = mspack_fmap_open, ++ .close = mspack_fmap_close, ++ .read = mspack_fmap_read, ++ .write = mspack_fmap_write, ++ .seek = mspack_fmap_seek, ++ .tell = mspack_fmap_tell, ++ .message = mspack_fmap_message, ++ .alloc = mspack_fmap_alloc, ++ .free = mspack_fmap_free, ++ .copy = mspack_fmap_copy, ++}; ++ ++static int cli_scanfile(const char *filename, cli_ctx *ctx) ++{ ++ int fd, ret; ++ ++ /* internal version of cl_scanfile with arec/mrec preserved */ ++ fd = safe_open(filename, O_RDONLY|O_BINARY); ++ if (fd < 0) ++ return CL_EOPEN; ++ ++ ret = cli_magic_scandesc(fd, ctx); ++ ++ close(fd); ++ return ret; ++} ++ ++int cli_scanmscab(cli_ctx *ctx, off_t sfx_offset) ++{ ++ struct mscab_decompressor *cab_d; ++ struct mscabd_cabinet *cab_h; ++ struct mscabd_file *cab_f; ++ int ret; ++ int files; ++ int virus_num = 0; ++ struct mspack_name mspack_fmap = { ++ .fmap = *ctx->fmap, ++ .org = sfx_offset, ++ }; ++ struct mspack_system_ex ops_ex = { ++ .ops = mspack_sys_fmap_ops, ++ }; ++ ++ MSPACK_SYS_SELFTEST(ret); ++ if (ret) { ++ cli_dbgmsg("%s() failed at %d\n", __func__, __LINE__); ++ return CL_EUNPACK; ++ } ++ ++ cab_d = mspack_create_cab_decompressor(&ops_ex.ops); ++ if (!cab_d) { ++ cli_dbgmsg("%s() failed at %d\n", __func__, __LINE__); ++ return CL_EUNPACK; ++ } ++ ++ cab_h = cab_d->open(cab_d, (char *)&mspack_fmap); ++ if (!cab_h) { ++ ret = CL_EFORMAT; ++ cli_dbgmsg("%s() failed at %d\n", __func__, __LINE__); ++ goto out_dest; ++ } ++ files = 0; ++ for (cab_f = cab_h->files; cab_f; cab_f = cab_f->next) { ++ off_t max_size; ++ char *tmp_fname; ++ ++ ret = cli_matchmeta(ctx, cab_f->filename, 0, cab_f->length, 0, ++ files, 0, NULL); ++ if (ret) { ++ if (ret == CL_VIRUS) { ++ virus_num++; ++ if (!SCAN_ALL) ++ break; ++ } ++ goto out_close; ++ } ++ ++ if (ctx->engine->maxscansize) { ++ if (ctx->scansize >= ctx->engine->maxscansize) { ++ ret = CL_CLEAN; ++ break; ++ } ++ } ++ ++ if (ctx->engine->maxscansize && ++ ctx->scansize + ctx->engine->maxfilesize >= ++ ctx->engine->maxscansize) ++ max_size = ctx->engine->maxscansize - ++ ctx->scansize; ++ else ++ max_size = ctx->engine->maxfilesize ? ++ ctx->engine->maxfilesize : ++ 0xffffffff; ++ ++ tmp_fname = cli_gentemp(ctx->engine->tmpdir); ++ if (!tmp_fname) { ++ ret = CL_EMEM; ++ break; ++ } ++ ++ ops_ex.max_size = max_size; ++ /* scan */ ++ ret = cab_d->extract(cab_d, cab_f, tmp_fname); ++ if (ret) { ++ /* Failed to extract */ ++ cli_dbgmsg("%s() failed to extract %d\n", __func__, ret); ++ } else { ++ ret = cli_scanfile(tmp_fname, ctx); ++ if (ret == CL_VIRUS) ++ virus_num++; ++ } ++ if (!ctx->engine->keeptmp) { ++ if (!access(tmp_fname, R_OK) && cli_unlink(tmp_fname)) { ++ free(tmp_fname); ++ ret = CL_EUNLINK; ++ break; ++ } ++ } ++ free(tmp_fname); ++ files++; ++ if (ret == CL_VIRUS && SCAN_ALL) ++ continue; ++ if (ret) ++ break; ++ } ++ ++out_close: ++ cab_d->close(cab_d, cab_h); ++out_dest: ++ mspack_destroy_cab_decompressor(cab_d); ++ if (virus_num) ++ return CL_VIRUS; ++ return ret; ++} ++ ++int cli_scanmschm(cli_ctx *ctx) ++{ ++ struct mschm_decompressor *mschm_d; ++ struct mschmd_header *mschm_h; ++ struct mschmd_file *mschm_f; ++ int ret; ++ int files; ++ int virus_num = 0; ++ struct mspack_name mspack_fmap = { ++ .fmap = *ctx->fmap, ++ }; ++ struct mspack_system_ex ops_ex = { ++ .ops = mspack_sys_fmap_ops, ++ }; ++ ++ MSPACK_SYS_SELFTEST(ret); ++ if (ret) { ++ cli_dbgmsg("%s() failed at %d\n", __func__, __LINE__); ++ return CL_EUNPACK; ++ } ++ ++ mschm_d = mspack_create_chm_decompressor(&ops_ex.ops); ++ if (!mschm_d) { ++ cli_dbgmsg("%s() failed at %d\n", __func__, __LINE__); ++ return CL_EUNPACK; ++ } ++ ++ mschm_h = mschm_d->open(mschm_d, (char *)&mspack_fmap); ++ if (!mschm_h) { ++ ret = CL_EFORMAT; ++ cli_dbgmsg("%s() failed at %d\n", __func__, __LINE__); ++ goto out_dest; ++ } ++ files = 0; ++ for (mschm_f = mschm_h->files; mschm_f; mschm_f = mschm_f->next) { ++ off_t max_size; ++ char *tmp_fname; ++ ++ ret = cli_matchmeta(ctx, mschm_f->filename, 0, mschm_f->length, ++ 0, files, 0, NULL); ++ if (ret) { ++ if (ret == CL_VIRUS) { ++ virus_num++; ++ if (!SCAN_ALL) ++ break; ++ } ++ goto out_close; ++ } ++ ++ if (ctx->engine->maxscansize) { ++ if (ctx->scansize >= ctx->engine->maxscansize) { ++ ret = CL_CLEAN; ++ break; ++ } ++ } ++ ++ if (ctx->engine->maxscansize && ++ ctx->scansize + ctx->engine->maxfilesize >= ++ ctx->engine->maxscansize) ++ max_size = ctx->engine->maxscansize - ++ ctx->scansize; ++ else ++ max_size = ctx->engine->maxfilesize ? ++ ctx->engine->maxfilesize : ++ 0xffffffff; ++ ++ ops_ex.max_size = max_size; ++ ++ tmp_fname = cli_gentemp(ctx->engine->tmpdir); ++ if (!tmp_fname) { ++ ret = CL_EMEM; ++ break; ++ } ++ ++ /* scan */ ++ ret = mschm_d->extract(mschm_d, mschm_f, tmp_fname); ++ if (ret) { ++ /* Failed to extract */ ++ cli_dbgmsg("%s() failed to extract %d\n", __func__, ret); ++ } else { ++ ret = cli_scanfile(tmp_fname, ctx); ++ if (ret == CL_VIRUS) ++ virus_num++; ++ } ++ if (!ctx->engine->keeptmp) { ++ if (!access(tmp_fname, R_OK) && cli_unlink(tmp_fname)) { ++ free(tmp_fname); ++ ret = CL_EUNLINK; ++ break; ++ } ++ } ++ free(tmp_fname); ++ files++; ++ if (ret == CL_VIRUS && SCAN_ALL) ++ continue; ++ if (ret) ++ break; ++ } ++ ++out_close: ++ mschm_d->close(mschm_d, mschm_h); ++out_dest: ++ mspack_destroy_chm_decompressor(mschm_d); ++ if (virus_num) ++ return CL_VIRUS; ++ return ret; ++ ++ return 0; ++} +diff --git a/libclamav/libmspack.h b/libclamav/libmspack.h +new file mode 100644 +index 000000000000..07a9442bf253 +--- /dev/null ++++ b/libclamav/libmspack.h +@@ -0,0 +1,7 @@ ++#ifndef __LIBMSPACK_H__ ++#define __LIBMSPACK_H__ ++ ++int cli_scanmscab(cli_ctx *ctx, off_t sfx_offset); ++int cli_scanmschm(cli_ctx *ctx); ++ ++#endif +diff --git a/libclamav/mspack.c b/libclamav/mspack.c +deleted file mode 100644 +index cc4c0a59fc9a..000000000000 +--- a/libclamav/mspack.c ++++ /dev/null +@@ -1,2026 +0,0 @@ +-/* +- * This file includes code from libmspack adapted for libclamav by +- * tkojm@clamav.net and draynor@sourcefire.com +- * +- * Copyright (C) 2003-2004 Stuart Caie +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License version 2.1 as published by the Free Software Foundation. +- * +- * This library is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this library; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 +- * USA +- */ +- +-#if HAVE_CONFIG_H +-#include "clamav-config.h" +-#endif +- +-#include +-#include +- +-#include "others.h" +-#include "clamav.h" +-#include "mspack.h" +- +-#if HAVE_LIMITS_H +-# include +-#endif +-#ifndef CHAR_BIT +-# define CHAR_BIT (8) +-#endif +- +- +-/*************************************************************************** +- * MS-ZIP decompression implementation +- *************************************************************************** +- * The LZX method was created by Jonathan Forbes and Tomi Poutanen, adapted +- * by Microsoft Corporation. +- * +- * The deflate method was created by Phil Katz. MSZIP is equivalent to the +- * deflate method. +- * +- */ +- +-/* match lengths for literal codes 257.. 285 */ +-static const unsigned short mszip_lit_lengths[29] = { +- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, +- 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 +-}; +- +-/* match offsets for distance codes 0 .. 29 */ +-static const unsigned short mszip_dist_offsets[30] = { +- 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, +- 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 +-}; +- +-/* extra bits required for literal codes 257.. 285 */ +-static const unsigned char mszip_lit_extrabits[29] = { +- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, +- 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 +-}; +- +-/* extra bits required for distance codes 0 .. 29 */ +-static const unsigned char mszip_dist_extrabits[30] = { +- 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, +- 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 +-}; +- +-/* the order of the bit length Huffman code lengths */ +-static const unsigned char mszip_bitlen_order[19] = { +- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 +-}; +- +-/* ANDing with mszip_bit_mask[n] masks the lower n bits */ +-static const unsigned short mszip_bit_mask_tab[17] = { +- 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, +- 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff +-}; +- +-#define MSZIP_STORE_BITS do { \ +- zip->i_ptr = i_ptr; \ +- zip->i_end = i_end; \ +- zip->bit_buffer = bit_buffer; \ +- zip->bits_left = bits_left; \ +-} while (0) +- +-#define MSZIP_RESTORE_BITS do { \ +- i_ptr = zip->i_ptr; \ +- i_end = zip->i_end; \ +- bit_buffer = zip->bit_buffer; \ +- bits_left = zip->bits_left; \ +-} while (0) +- +-#define MSZIP_ENSURE_BITS(nbits) do { \ +- while (bits_left < (nbits)) { \ +- if (i_ptr >= i_end) { \ +- if (mszip_read_input(zip)) return zip->error; \ +- i_ptr = zip->i_ptr; \ +- i_end = zip->i_end; \ +- if(i_ptr == i_end) break; \ +- } \ +- bit_buffer |= *i_ptr++ << bits_left; bits_left += 8; \ +- } \ +-} while (0) +- +-#define MSZIP_PEEK_BITS(nbits) (bit_buffer & ((1<<(nbits))-1)) +-#define MSZIP_PEEK_BITS_T(nbits) (bit_buffer & mszip_bit_mask_tab[(nbits)]) +- +-#define MSZIP_REMOVE_BITS(nbits) ((bit_buffer >>= (nbits)), (bits_left -= (nbits))) +- +-#define MSZIP_READ_BITS(val, nbits) do { \ +- MSZIP_ENSURE_BITS(nbits); (val) = MSZIP_PEEK_BITS(nbits); MSZIP_REMOVE_BITS(nbits); \ +-} while (0) +- +-#define MSZIP_READ_BITS_T(val, nbits) do { \ +- MSZIP_ENSURE_BITS(nbits); (val) = MSZIP_PEEK_BITS_T(nbits); MSZIP_REMOVE_BITS(nbits); \ +-} while (0) +- +-static int mszip_read_input(struct mszip_stream *zip) { +- int nread = zip->read_cb(zip->file, zip->inbuf, (int)zip->inbuf_size); +- if (nread < 0) { +- if (zip->file->error == CL_BREAK) { +- if ((unsigned int)nread == zip->last) { +- cli_dbgmsg("mszip_read_input: Two consecutive CL_BREAKs reached.\n"); +- return CL_BREAK; +- } +- // Need short circuit to ensure scanning small files +- cli_dbgmsg("mszip_read_input: First CL_BREAK reached.\n"); +- zip->i_ptr = zip->i_end; +- zip->last = nread; +- return CL_SUCCESS; +- } +- else +- return zip->error = CL_EFORMAT; +- } +- +- zip->last = nread; +- zip->i_ptr = &zip->inbuf[0]; +- zip->i_end = &zip->inbuf[nread]; +- +- return CL_SUCCESS; +-} +- +-/* inflate() error codes */ +-#define INF_ERR_BLOCKTYPE (-1) /* unknown block type */ +-#define INF_ERR_COMPLEMENT (-2) /* block size complement mismatch */ +-#define INF_ERR_FLUSH (-3) /* error from flush_window() callback */ +-#define INF_ERR_BITBUF (-4) /* too many bits in bit buffer */ +-#define INF_ERR_SYMLENS (-5) /* too many symbols in blocktype 2 header */ +-#define INF_ERR_BITLENTBL (-6) /* failed to build bitlens huffman table */ +-#define INF_ERR_LITERALTBL (-7) /* failed to build literals huffman table */ +-#define INF_ERR_DISTANCETBL (-8) /* failed to build distance huffman table */ +-#define INF_ERR_BITOVERRUN (-9) /* bitlen RLE code goes over table size */ +-#define INF_ERR_BADBITLEN (-10) /* invalid bit-length code */ +-#define INF_ERR_LITCODE (-11) /* out-of-range literal code */ +-#define INF_ERR_DISTCODE (-12) /* out-of-range distance code */ +-#define INF_ERR_DISTANCE (-13) /* somehow, distance is beyond 32k */ +-#define INF_ERR_HUFFSYM (-14) /* out of bits decoding huffman symbol */ +- +-/* mszip_make_decode_table(nsyms, nbits, length[], table[]) +- * +- * This function was coded by David Tritscher. It builds a fast huffman +- * decoding table out of just a canonical huffman code lengths table. +- * +- * NOTE: this is NOT identical to the mszip_make_decode_table() in lzxd.c. This +- * one reverses the quick-lookup bit pattern. Bits are read MSB to LSB in LZX, +- * but LSB to MSB in MSZIP. +- * +- * nsyms = total number of symbols in this huffman tree. +- * nbits = any symbols with a code length of nbits or less can be decoded +- * in one lookup of the table. +- * length = A table to get code lengths from [0 to nsyms-1] +- * table = The table to fill up with decoded symbols and pointers. +- * +- * Returns 0 for OK or 1 for error +- */ +-static int mszip_make_decode_table(unsigned int nsyms, unsigned int nbits, +- unsigned char *length, unsigned short *table) +-{ +- register unsigned int leaf, reverse, fill; +- register unsigned short sym, next_sym; +- register unsigned char bit_num; +- unsigned int pos = 0; /* the current position in the decode table */ +- unsigned int table_mask = 1 << nbits; +- unsigned int mszip_bit_mask = table_mask >> 1; /* don't do 0 length codes */ +- +- /* fill entries for codes short enough for a direct mapping */ +- for (bit_num = 1; bit_num <= nbits; bit_num++) { +- for (sym = 0; sym < nsyms; sym++) { +- if (length[sym] != bit_num) continue; +- +- /* reverse the significant bits */ +- fill = length[sym]; reverse = pos >> (nbits - fill); leaf = 0; +- do {leaf <<= 1; leaf |= reverse & 1; reverse >>= 1;} while (--fill); +- +- if((pos += mszip_bit_mask) > table_mask) return 1; /* table overrun */ +- +- /* fill all possible lookups of this symbol with the symbol itself */ +- fill = mszip_bit_mask; next_sym = 1 << bit_num; +- do { table[leaf] = sym; leaf += next_sym; } while (--fill); +- } +- mszip_bit_mask >>= 1; +- } +- +- /* exit with success if table is now complete */ +- if (pos == table_mask) return 0; +- +- /* mark all remaining table entries as unused */ +- for (sym = pos; sym < table_mask; sym++) { +- reverse = sym; leaf = 0; fill = nbits; +- do { leaf <<= 1; leaf |= reverse & 1; reverse >>= 1; } while (--fill); +- table[leaf] = 0xFFFF; +- } +- +- /* where should the longer codes be allocated from? */ +- next_sym = ((table_mask >> 1) < nsyms) ? nsyms : (table_mask >> 1); +- +- /* give ourselves room for codes to grow by up to 16 more bits. +- * codes now start at bit nbits+16 and end at (nbits+16-codelength) */ +- pos <<= 16; +- table_mask <<= 16; +- mszip_bit_mask = 1 << 15; +- +- for (bit_num = nbits+1; bit_num <= MSZIP_MAX_HUFFBITS; bit_num++) { +- for (sym = 0; sym < nsyms; sym++) { +- if (length[sym] != bit_num) continue; +- +- /* leaf = the first nbits of the code, reversed */ +- reverse = pos >> 16; leaf = 0; fill = nbits; +- do {leaf <<= 1; leaf |= reverse & 1; reverse >>= 1;} while (--fill); +- +- for (fill = 0; fill < (bit_num - nbits); fill++) { +- /* if this path hasn't been taken yet, 'allocate' two entries */ +- if (table[leaf] == 0xFFFF) { +- table[(next_sym << 1) ] = 0xFFFF; +- table[(next_sym << 1) + 1 ] = 0xFFFF; +- table[leaf] = next_sym++; +- } +- /* follow the path and select either left or right for next bit */ +- leaf = (table[leaf] << 1) | ((pos >> (15 - fill)) & 1); +- } +- table[leaf] = sym; +- +- if ((pos += mszip_bit_mask) > table_mask) return 1; /* table overflow */ +- } +- mszip_bit_mask >>= 1; +- } +- +- /* full table? */ +- return (pos != table_mask) ? 1 : 0; +-} +- +-/* MSZIP_READ_HUFFSYM(tablename, var) decodes one huffman symbol from the +- * bitstream using the stated table and puts it in var. +- */ +-#define MSZIP_READ_HUFFSYM(tbl, var) do { \ +- /* huffman symbols can be up to 16 bits long */ \ +- MSZIP_ENSURE_BITS(MSZIP_MAX_HUFFBITS); \ +- /* immediate table lookup of [tablebits] bits of the code */ \ +- sym = zip->tbl##_table[MSZIP_PEEK_BITS(MSZIP_##tbl##_TABLEBITS)]; \ +- /* is the symbol is longer than [tablebits] bits? (i=node index) */ \ +- if (sym >= MSZIP_##tbl##_MAXSYMBOLS) { \ +- /* decode remaining bits by tree traversal */ \ +- i = MSZIP_##tbl##_TABLEBITS - 1; \ +- do { \ +- /* check next bit. error if we run out of bits before decode */ \ +- if (i++ > MSZIP_MAX_HUFFBITS) { \ +- cli_dbgmsg("zip_inflate: out of bits in huffman decode\n"); \ +- return INF_ERR_HUFFSYM; \ +- } \ +- sym = (sym << 1) | ((bit_buffer >> i) & 1); \ +- if(sym >= MSZIP_##tbl##_TABLESIZE) { \ +- cli_dbgmsg("zip_inflate: index out of table\n"); \ +- return INF_ERR_HUFFSYM; \ +- } \ +- /* double node index and add 0 (left branch) or 1 (right) */ \ +- sym = zip->tbl##_table[sym]; \ +- /* while we are still in node indicies, not decoded symbols */ \ +- } while (sym >= MSZIP_##tbl##_MAXSYMBOLS); \ +- } \ +- /* result */ \ +- (var) = sym; \ +- /* look up the code length of that symbol and discard those bits */ \ +- i = zip->tbl##_len[sym]; \ +- MSZIP_REMOVE_BITS(i); \ +-} while (0) +- +-static int mszip_read_lens(struct mszip_stream *zip) { +- /* for the bit buffer and huffman decoding */ +- register unsigned int bit_buffer; +- register int bits_left; +- unsigned char *i_ptr, *i_end; +- +- /* bitlen Huffman codes -- immediate lookup, 7 bit max code length */ +- unsigned short bl_table[(1 << 7)]; +- unsigned char bl_len[19]; +- +- unsigned char lens[MSZIP_LITERAL_MAXSYMBOLS + MSZIP_DISTANCE_MAXSYMBOLS]; +- unsigned int lit_codes, dist_codes, code, last_code=0, bitlen_codes, i, run; +- +- MSZIP_RESTORE_BITS; +- +- /* read the number of codes */ +- MSZIP_READ_BITS(lit_codes, 5); lit_codes += 257; +- MSZIP_READ_BITS(dist_codes, 5); dist_codes += 1; +- MSZIP_READ_BITS(bitlen_codes, 4); bitlen_codes += 4; +- if (lit_codes > MSZIP_LITERAL_MAXSYMBOLS) return INF_ERR_SYMLENS; +- if (dist_codes > MSZIP_DISTANCE_MAXSYMBOLS) return INF_ERR_SYMLENS; +- +- /* read in the bit lengths in their unusual order */ +- for (i = 0; i < bitlen_codes; i++) MSZIP_READ_BITS(bl_len[mszip_bitlen_order[i]], 3); +- while (i < 19) bl_len[mszip_bitlen_order[i++]] = 0; +- +- /* create decoding table with an immediate lookup */ +- if (mszip_make_decode_table(19, 7, &bl_len[0], &bl_table[0])) { +- return INF_ERR_BITLENTBL; +- } +- +- /* read literal / distance code lengths */ +- for (i = 0; i < (lit_codes + dist_codes); i++) { +- /* single-level huffman lookup */ +- MSZIP_ENSURE_BITS(7); +- code = bl_table[MSZIP_PEEK_BITS(7)]; +- MSZIP_REMOVE_BITS(bl_len[code]); +- +- if (code < 16) lens[i] = last_code = code; +- else { +- switch (code) { +- case 16: MSZIP_READ_BITS(run, 2); run += 3; code = last_code; break; +- case 17: MSZIP_READ_BITS(run, 3); run += 3; code = 0; break; +- case 18: MSZIP_READ_BITS(run, 7); run += 11; code = 0; break; +- default: cli_dbgmsg("zip_read_lens: bad code!: %u\n", code); return INF_ERR_BADBITLEN; +- } +- if ((i + run) > (lit_codes + dist_codes)) return INF_ERR_BITOVERRUN; +- while (run--) lens[i++] = code; +- i--; +- } +- } +- +- /* copy LITERAL code lengths and clear any remaining */ +- i = lit_codes; +- memcpy(&zip->LITERAL_len[0], &lens[0], i); +- while (i < MSZIP_LITERAL_MAXSYMBOLS) zip->LITERAL_len[i++] = 0; +- +- i = dist_codes; +- memcpy(&zip->DISTANCE_len[0], &lens[lit_codes], i); +- while (i < MSZIP_DISTANCE_MAXSYMBOLS) zip->DISTANCE_len[i++] = 0; +- +- MSZIP_STORE_BITS; +- return 0; +-} +- +-static int mspack_write(int fd, const void *buff, unsigned int count, struct cab_file *file) +-{ +- int ret; +- +- if(file->max_size) { +- if(file->written_size >= file->max_size) +- return CL_BREAK; +- +- if(file->written_size + count > file->max_size) +- count = file->max_size - file->written_size; +- } +- if((ret = cli_writen(fd, buff, count)) > 0) +- file->written_size += ret; +- +- return (ret == -1) ? CL_EWRITE : CL_SUCCESS; +-} +- +-/* a clean implementation of RFC 1951 / inflate */ +-static int mszip_inflate(struct mszip_stream *zip) { +- unsigned int last_block, block_type, distance, length, this_run, i; +- +- /* for the bit buffer and huffman decoding */ +- register unsigned int bit_buffer; +- register int bits_left; +- register unsigned short sym; +- unsigned char *i_ptr, *i_end; +- +- MSZIP_RESTORE_BITS; +- +- do { +- /* read in last block bit */ +- MSZIP_READ_BITS(last_block, 1); +- +- /* read in block type */ +- MSZIP_READ_BITS(block_type, 2); +- +- if (block_type == 0) { +- /* uncompressed block */ +- unsigned char lens_buf[4]; +- +- /* go to byte boundary */ +- i = bits_left & 7; MSZIP_REMOVE_BITS(i); +- +- /* read 4 bytes of data, emptying the bit-buffer if necessary */ +- for (i = 0; (bits_left >= 8); i++) { +- if (i == 4) return INF_ERR_BITBUF; +- lens_buf[i] = MSZIP_PEEK_BITS(8); +- MSZIP_REMOVE_BITS(8); +- } +- if (bits_left != 0) return INF_ERR_BITBUF; +- while (i < 4) { +- if (i_ptr >= i_end) { +- if (mszip_read_input(zip)) return zip->error; +- i_ptr = zip->i_ptr; +- i_end = zip->i_end; +- if(i_ptr == i_end) break; +- } +- lens_buf[i++] = *i_ptr++; +- } +- if (i < 4) return INF_ERR_BITBUF; +- +- /* get the length and its complement */ +- length = lens_buf[0] | (lens_buf[1] << 8); +- i = lens_buf[2] | (lens_buf[3] << 8); +- if (length != (~i & 0xFFFF)) return INF_ERR_COMPLEMENT; +- +- /* read and copy the uncompressed data into the window */ +- while (length > 0) { +- if (i_ptr >= i_end) { +- if (mszip_read_input(zip)) return zip->error; +- i_ptr = zip->i_ptr; +- i_end = zip->i_end; +- if(i_ptr == i_end) break; +- } +- +- this_run = length; +- if (this_run > (unsigned int)(i_end - i_ptr)) this_run = i_end - i_ptr; +- if (this_run > (MSZIP_FRAME_SIZE - zip->window_posn)) +- this_run = MSZIP_FRAME_SIZE - zip->window_posn; +- +- memcpy(&zip->window[zip->window_posn], i_ptr, this_run); +- zip->window_posn += this_run; +- i_ptr += this_run; +- length -= this_run; +- +- if (zip->window_posn == MSZIP_FRAME_SIZE) { +- if (zip->flush_window(zip, MSZIP_FRAME_SIZE)) return INF_ERR_FLUSH; +- zip->window_posn = 0; +- } +- } +- } +- else if ((block_type == 1) || (block_type == 2)) { +- /* Huffman-compressed LZ77 block */ +- unsigned int window_posn, match_posn, code; +- +- if (block_type == 1) { +- /* block with fixed Huffman codes */ +- i = 0; +- while (i < 144) zip->LITERAL_len[i++] = 8; +- while (i < 256) zip->LITERAL_len[i++] = 9; +- while (i < 280) zip->LITERAL_len[i++] = 7; +- while (i < 288) zip->LITERAL_len[i++] = 8; +- for (i = 0; i < 32; i++) zip->DISTANCE_len[i] = 5; +- } +- else { +- /* block with dynamic Huffman codes */ +- MSZIP_STORE_BITS; +- if ((i = mszip_read_lens(zip))) return i; +- MSZIP_RESTORE_BITS; +- } +- +- /* now huffman lengths are read for either kind of block, +- * create huffman decoding tables */ +- if (mszip_make_decode_table(MSZIP_LITERAL_MAXSYMBOLS, MSZIP_LITERAL_TABLEBITS, +- &zip->LITERAL_len[0], &zip->LITERAL_table[0])) +- { +- return INF_ERR_LITERALTBL; +- } +- +- if (mszip_make_decode_table(MSZIP_DISTANCE_MAXSYMBOLS,MSZIP_DISTANCE_TABLEBITS, +- &zip->DISTANCE_len[0], &zip->DISTANCE_table[0])) +- { +- return INF_ERR_DISTANCETBL; +- } +- +- /* decode forever until end of block code */ +- window_posn = zip->window_posn; +- while (1) { +- MSZIP_READ_HUFFSYM(LITERAL, code); +- if (code < 256) { +- zip->window[window_posn++] = (unsigned char) code; +- if (window_posn == MSZIP_FRAME_SIZE) { +- if (zip->flush_window(zip, MSZIP_FRAME_SIZE)) return INF_ERR_FLUSH; +- window_posn = 0; +- } +- } +- else if (code == 256) { +- /* END OF BLOCK CODE: loop break point */ +- break; +- } +- else { +- code -= 257; +- if (code >= 29) return INF_ERR_LITCODE; +- MSZIP_READ_BITS_T(length, mszip_lit_extrabits[code]); +- length += mszip_lit_lengths[code]; +- +- MSZIP_READ_HUFFSYM(DISTANCE, code); +- if (code >= 30) return INF_ERR_DISTCODE; +- MSZIP_READ_BITS_T(distance, mszip_dist_extrabits[code]); +- distance += mszip_dist_offsets[code]; +- +- /* match position is window position minus distance. If distance +- * is more than window position numerically, it must 'wrap +- * around' the frame size. */ +- match_posn = ((distance > window_posn) ? MSZIP_FRAME_SIZE : 0) +- + window_posn - distance; +- +- /* copy match */ +- if (length < 12) { +- /* short match, use slower loop but no loop setup code */ +- while (length--) { +- zip->window[window_posn++] = zip->window[match_posn++]; +- match_posn &= MSZIP_FRAME_SIZE - 1; +- +- if (window_posn == MSZIP_FRAME_SIZE) { +- if (zip->flush_window(zip, MSZIP_FRAME_SIZE)) +- return INF_ERR_FLUSH; +- window_posn = 0; +- } +- } +- } +- else { +- /* longer match, use faster loop but with setup expense */ +- unsigned char *runsrc, *rundest; +- do { +- this_run = length; +- if ((match_posn + this_run) > MSZIP_FRAME_SIZE) +- this_run = MSZIP_FRAME_SIZE - match_posn; +- if ((window_posn + this_run) > MSZIP_FRAME_SIZE) +- this_run = MSZIP_FRAME_SIZE - window_posn; +- +- rundest = &zip->window[window_posn]; window_posn += this_run; +- runsrc = &zip->window[match_posn]; match_posn += this_run; +- length -= this_run; +- while (this_run--) *rundest++ = *runsrc++; +- +- /* flush if necessary */ +- if (window_posn == MSZIP_FRAME_SIZE) { +- if (zip->flush_window(zip, MSZIP_FRAME_SIZE)) +- return INF_ERR_FLUSH; +- window_posn = 0; +- } +- if (match_posn == MSZIP_FRAME_SIZE) match_posn = 0; +- } while (length > 0); +- } +- +- } /* else (code >= 257) */ +- +- } /* while (forever) -- break point at 'code == 256' */ +- zip->window_posn = window_posn; +- } +- else { +- /* block_type == 3 -- bad block type */ +- return INF_ERR_BLOCKTYPE; +- } +- } while (!last_block); +- +- /* flush the remaining data */ +- if (zip->window_posn) { +- if (zip->flush_window(zip, zip->window_posn)) return INF_ERR_FLUSH; +- } +- MSZIP_STORE_BITS; +- +- /* return success */ +- return 0; +-} +- +-/* inflate() calls this whenever the window should be flushed. As +- * MSZIP only expands to the size of the window, the implementation used +- * simply keeps track of the amount of data flushed, and if more than 32k +- * is flushed, an error is raised. +- */ +-static int mszip_flush_window(struct mszip_stream *zip, +- unsigned int data_flushed) +-{ +- zip->bytes_output += data_flushed; +- if (zip->bytes_output > MSZIP_FRAME_SIZE) { +- cli_dbgmsg("mszip_flush_window: overflow: %u bytes flushed, total is now %u\n", data_flushed, zip->bytes_output); +- return 1; +- } +- return 0; +-} +- +-struct mszip_stream *mszip_init(int ofd, +- int input_buffer_size, +- int repair_mode, +- struct cab_file *file, +- int (*read_cb)(struct cab_file *, unsigned char *, int)) +-{ +- struct mszip_stream *zip; +- +- input_buffer_size = (input_buffer_size + 1) & -2; +- if (!input_buffer_size) return NULL; +- +- /* allocate decompression state */ +- if (!(zip = cli_calloc(1, sizeof(struct mszip_stream)))) { +- cli_errmsg("mszip_stream: Unable to allocate zip buffer\n"); +- return NULL; +- } +- +- /* allocate input buffer */ +- zip->inbuf = cli_malloc((size_t) input_buffer_size); +- if (!zip->inbuf) { +- cli_errmsg("mszip_stream: Unable to allocate input buffer\n"); +- free(zip); +- return NULL; +- } +- +- /* initialise decompression state */ +- zip->ofd = ofd; +- zip->wflag = 1; +- zip->inbuf_size = input_buffer_size; +- zip->error = CL_SUCCESS; +- zip->repair_mode = repair_mode; +- zip->flush_window = &mszip_flush_window; +- zip->input_end = 0; +- +- zip->i_ptr = zip->i_end = &zip->inbuf[0]; +- zip->o_ptr = zip->o_end = NULL; +- zip->bit_buffer = 0; zip->bits_left = 0; +- +- zip->file = file; +- zip->read_cb = read_cb; +- +- return zip; +-} +- +-int mszip_decompress(struct mszip_stream *zip, uint32_t out_bytes) { +- /* for the bit buffer */ +- register unsigned int bit_buffer; +- register int bits_left; +- unsigned char *i_ptr, *i_end; +- +- int i, ret, state, error; +- +- /* easy answers */ +- if (!zip) return CL_ENULLARG; +- if (zip->error) return zip->error; +- +- /* flush out any stored-up bytes before we begin */ +- i = zip->o_end - zip->o_ptr; +- if (((off_t) i > out_bytes) && ((int) out_bytes >= 0)) i = (int) out_bytes; +- if (i) { +- if (zip->wflag && (ret = mspack_write(zip->ofd, zip->o_ptr, i, zip->file)) != CL_SUCCESS) { +- return zip->error = ret; +- } +- zip->o_ptr += i; +- out_bytes -= i; +- } +- if (out_bytes == 0) return CL_SUCCESS; +- +- while (out_bytes > 0) { +- /* unpack another block */ +- MSZIP_RESTORE_BITS; +- +- /* skip to next read 'CK' header */ +- i = bits_left & 7; MSZIP_REMOVE_BITS(i); /* align to bytestream */ +- state = 0; +- do { +- MSZIP_READ_BITS(i, 8); +- if (i == 'C') state = 1; +- else if ((state == 1) && (i == 'K')) state = 2; +- else state = 0; +- } while (state != 2); +- +- /* inflate a block, repair and realign if necessary */ +- zip->window_posn = 0; +- zip->bytes_output = 0; +- MSZIP_STORE_BITS; +- if ((error = mszip_inflate(zip))) { +- cli_dbgmsg("mszip_decompress: inflate error %d\n", error); +- if (zip->repair_mode) { +- cli_dbgmsg("mszip_decompress: MSZIP error, %u bytes of data lost\n", +- MSZIP_FRAME_SIZE - zip->bytes_output); +- for (i = zip->bytes_output; i < MSZIP_FRAME_SIZE; i++) { +- zip->window[i] = '\0'; +- } +- zip->bytes_output = MSZIP_FRAME_SIZE; +- } +- else { +- return zip->error = (error > 0) ? error : CL_EFORMAT; +- } +- } +- zip->o_ptr = &zip->window[0]; +- zip->o_end = &zip->o_ptr[zip->bytes_output]; +- +- /* write a frame */ +- i = (out_bytes < (off_t)zip->bytes_output) ? +- (int)out_bytes : zip->bytes_output; +- if (zip->wflag && (ret = mspack_write(zip->ofd, zip->o_ptr, i, zip->file)) != CL_SUCCESS) { +- return zip->error = ret; +- } +- +- /* mspack errors (i.e. read errors) are fatal and can't be recovered */ +- if ((error > 0) && zip->repair_mode) return error; +- +- zip->o_ptr += i; +- out_bytes -= i; +- } +- +- if (out_bytes) +- cli_dbgmsg("mszip_decompress: bytes left to output\n"); +- +- return CL_SUCCESS; +-} +- +-void mszip_free(struct mszip_stream *zip) { +- if (zip) { +- free(zip->inbuf); +- free(zip); +- } +-} +- +-/*************************************************************************** +- * LZX decompression implementation +- *************************************************************************** +- * The LZX method was created by Jonathan Forbes and Tomi Poutanen, adapted +- * by Microsoft Corporation. +- * +- */ +- +-/* LZX decompressor input macros +- * +- * LZX_STORE_BITS stores bitstream state in lzx_stream structure +- * LZX_RESTORE_BITS restores bitstream state from lzx_stream structure +- * LZX_READ_BITS(var,n) takes N bits from the buffer and puts them in var +- * LZX_ENSURE_BITS(n) ensures there are at least N bits in the bit buffer. +- * LZX_PEEK_BITS(n) extracts without removing N bits from the bit buffer +- * LZX_REMOVE_BITS(n) removes N bits from the bit buffer +- * +- */ +- +-#define LZX_BITBUF_WIDTH (sizeof(bit_buffer) * CHAR_BIT) +- +-#define LZX_STORE_BITS do { \ +- lzx->i_ptr = i_ptr; \ +- lzx->i_end = i_end; \ +- lzx->bit_buffer = bit_buffer; \ +- lzx->bits_left = bits_left; \ +-} while (0) +- +-#define LZX_RESTORE_BITS do { \ +- i_ptr = lzx->i_ptr; \ +- i_end = lzx->i_end; \ +- bit_buffer = lzx->bit_buffer; \ +- bits_left = lzx->bits_left; \ +-} while (0) +- +-#define LZX_ENSURE_BITS(nbits) \ +- while (bits_left < (nbits)) { \ +- if (i_ptr + 1 >= i_end) { \ +- if (lzx_read_input(lzx)) return lzx->error; \ +- i_ptr = lzx->i_ptr; \ +- i_end = lzx->i_end; \ +- } \ +- bit_buffer |= ((i_ptr[1] << 8) | i_ptr[0]) \ +- << (LZX_BITBUF_WIDTH - 16 - bits_left); \ +- bits_left += 16; \ +- i_ptr += 2; \ +- } +- +-#define LZX_PEEK_BITS(nbits) (bit_buffer >> (LZX_BITBUF_WIDTH - (nbits))) +- +-#define LZX_REMOVE_BITS(nbits) ((bit_buffer <<= (nbits)), (bits_left -= (nbits))) +- +-#define LZX_READ_BITS(val, nbits) do { \ +- LZX_ENSURE_BITS(nbits); \ +- (val) = LZX_PEEK_BITS(nbits); \ +- LZX_REMOVE_BITS(nbits); \ +-} while (0) +- +-static int lzx_read_input(struct lzx_stream *lzx) { +- int bread = lzx->read_cb(lzx->file, &lzx->inbuf[0], (int)lzx->inbuf_size); +- if (bread < 0) { +- if (lzx->file->error == CL_BREAK) +- return lzx->error = CL_BREAK; +- else +- return lzx->error = CL_EFORMAT; +- } +- +- /* huff decode's ENSURE_BYTES(16) might overrun the input stream, even +- * if those bits aren't used, so fake 2 more bytes */ +- if (bread == 0) { +- if (lzx->input_end) { +- cli_dbgmsg("lzx_read_input: out of input bytes\n"); +- return lzx->error = CL_EREAD; +- } +- else { +- bread = 2; +- lzx->inbuf[0] = lzx->inbuf[1] = 0; +- lzx->input_end = 1; +- } +- } +- +- lzx->i_ptr = &lzx->inbuf[0]; +- lzx->i_end = &lzx->inbuf[bread]; +- +- return CL_SUCCESS; +-} +- +-/* Huffman decoding macros */ +- +-/* LZX_READ_HUFFSYM(tablename, var) decodes one huffman symbol from the +- * bitstream using the stated table and puts it in var. +- */ +-#define LZX_READ_HUFFSYM(tbl, var) do { \ +- /* huffman symbols can be up to 16 bits long */ \ +- LZX_ENSURE_BITS(16); \ +- /* immediate table lookup of [tablebits] bits of the code */ \ +- sym = lzx->tbl##_table[LZX_PEEK_BITS(LZX_##tbl##_TABLEBITS)]; \ +- /* is the symbol is longer than [tablebits] bits? (i=node index) */ \ +- if (sym >= LZX_##tbl##_MAXSYMBOLS) { \ +- /* decode remaining bits by tree traversal */ \ +- i = 1 << (LZX_BITBUF_WIDTH - LZX_##tbl##_TABLEBITS); \ +- do { \ +- /* one less bit. error if we run out of bits before decode */ \ +- i >>= 1; \ +- if (i == 0) { \ +- cli_dbgmsg("lzx: out of bits in huffman decode\n"); \ +- return lzx->error = CL_EFORMAT; \ +- } \ +- /* double node index and add 0 (left branch) or 1 (right) */ \ +- sym <<= 1; sym |= (bit_buffer & i) ? 1 : 0; \ +- /* hop to next node index / decoded symbol */ \ +- if(sym >= (1 << LZX_##tbl##_TABLEBITS) + (LZX_##tbl##_MAXSYMBOLS * 2)) { \ +- cli_dbgmsg("lzx: index out of table\n"); \ +- return lzx->error = CL_EFORMAT; \ +- } \ +- sym = lzx->tbl##_table[sym]; \ +- /* while we are still in node indicies, not decoded symbols */ \ +- } while (sym >= LZX_##tbl##_MAXSYMBOLS); \ +- } \ +- /* result */ \ +- (var) = sym; \ +- /* look up the code length of that symbol and discard those bits */ \ +- i = lzx->tbl##_len[sym]; \ +- LZX_REMOVE_BITS(i); \ +-} while (0) +- +-/* LZX_BUILD_TABLE(tbl) builds a huffman lookup table from code lengths */ +-#define LZX_BUILD_TABLE(tbl) \ +- if (lzx_make_decode_table(LZX_##tbl##_MAXSYMBOLS, LZX_##tbl##_TABLEBITS, \ +- &lzx->tbl##_len[0], &lzx->tbl##_table[0])) \ +- { \ +- cli_dbgmsg("lzx: failed to build %s table\n", #tbl); \ +- return lzx->error = CL_EFORMAT; \ +- } +- +-/* lzx_make_decode_table(nsyms, nbits, length[], table[]) +- * +- * This function was coded by David Tritscher. It builds a fast huffman +- * decoding table from a canonical huffman code lengths table. +- * +- * nsyms = total number of symbols in this huffman tree. +- * nbits = any symbols with a code length of nbits or less can be decoded +- * in one lookup of the table. +- * length = A table to get code lengths from [0 to syms-1] +- * table = The table to fill up with decoded symbols and pointers. +- * +- * Returns 0 for OK or 1 for error +- */ +- +-static int lzx_make_decode_table(unsigned int nsyms, unsigned int nbits, +- unsigned char *length, unsigned short *table) +-{ +- register unsigned short sym; +- register unsigned int leaf, fill; +- register unsigned char bit_num; +- unsigned int pos = 0; /* the current position in the decode table */ +- unsigned int table_mask = 1 << nbits; +- unsigned int bit_mask = table_mask >> 1; /* don't do 0 length codes */ +- unsigned int next_symbol = bit_mask; /* base of allocation for long codes */ +- +- /* fill entries for codes short enough for a direct mapping */ +- for (bit_num = 1; bit_num <= nbits; bit_num++) { +- for (sym = 0; sym < nsyms; sym++) { +- if (length[sym] != bit_num) continue; +- leaf = pos; +- if((pos += bit_mask) > table_mask) return 1; /* table overrun */ +- /* fill all possible lookups of this symbol with the symbol itself */ +- for (fill = bit_mask; fill-- > 0;) table[leaf++] = sym; +- } +- bit_mask >>= 1; +- } +- +- /* full table already? */ +- if (pos == table_mask) return 0; +- +- /* clear the remainder of the table */ +- for (sym = pos; sym < table_mask; sym++) table[sym] = 0xFFFF; +- +- /* allow codes to be up to nbits+16 long, instead of nbits */ +- pos <<= 16; +- table_mask <<= 16; +- bit_mask = 1 << 15; +- +- for (bit_num = nbits+1; bit_num <= 16; bit_num++) { +- for (sym = 0; sym < nsyms; sym++) { +- if (length[sym] != bit_num) continue; +- +- leaf = pos >> 16; +- for (fill = 0; fill < bit_num - nbits; fill++) { +- /* if this path hasn't been taken yet, 'allocate' two entries */ +- if (table[leaf] == 0xFFFF) { +- table[(next_symbol << 1)] = 0xFFFF; +- table[(next_symbol << 1) + 1] = 0xFFFF; +- table[leaf] = next_symbol++; +- } +- /* follow the path and select either left or right for next bit */ +- leaf = table[leaf] << 1; +- if ((pos >> (15-fill)) & 1) leaf++; +- } +- table[leaf] = sym; +- +- if ((pos += bit_mask) > table_mask) return 1; /* table overflow */ +- } +- bit_mask >>= 1; +- } +- +- /* full table? */ +- if (pos == table_mask) return 0; +- +- /* either erroneous table, or all elements are 0 - let's find out. */ +- for (sym = 0; sym < nsyms; sym++) if (length[sym]) return 1; +- return 0; +-} +- +-/* LZX_READ_LENGTHS(tablename, first, last) reads in code lengths for symbols +- * first to last in the given table. The code lengths are stored in their +- * own special LZX way. +- */ +-#define LZX_READ_LENGTHS(tbl, first, last) do { \ +- LZX_STORE_BITS; \ +- if (lzx_read_lens(lzx, &lzx->tbl##_len[0], (first), \ +- (unsigned int)(last))) return lzx->error; \ +- LZX_RESTORE_BITS; \ +-} while (0) +- +-static int lzx_read_lens(struct lzx_stream *lzx, unsigned char *lens, +- unsigned int first, unsigned int last) +-{ +- /* bit buffer and huffman symbol decode variables */ +- register unsigned int bit_buffer; +- register int bits_left, i; +- register unsigned short sym; +- unsigned char *i_ptr, *i_end; +- +- unsigned int x, y; +- int z; +- +- LZX_RESTORE_BITS; +- +- /* read lengths for pretree (20 symbols, lengths stored in fixed 4 bits) */ +- for (x = 0; x < 20; x++) { +- LZX_READ_BITS(y, 4); +- lzx->PRETREE_len[x] = y; +- } +- LZX_BUILD_TABLE(PRETREE); +- +- for (x = first; x < last; ) { +- LZX_READ_HUFFSYM(PRETREE, z); +- if (z == 17) { +- /* code = 17, run of ([read 4 bits]+4) zeros */ +- LZX_READ_BITS(y, 4); y += 4; +- while (y--) lens[x++] = 0; +- } +- else if (z == 18) { +- /* code = 18, run of ([read 5 bits]+20) zeros */ +- LZX_READ_BITS(y, 5); y += 20; +- while (y--) lens[x++] = 0; +- } +- else if (z == 19) { +- /* code = 19, run of ([read 1 bit]+4) [read huffman symbol] */ +- LZX_READ_BITS(y, 1); y += 4; +- LZX_READ_HUFFSYM(PRETREE, z); +- z = lens[x] - z; if (z < 0) z += 17; +- while (y--) lens[x++] = z; +- } +- else { +- /* code = 0 to 16, delta current length entry */ +- z = lens[x] - z; if (z < 0) z += 17; +- lens[x++] = z; +- } +- } +- +- LZX_STORE_BITS; +- +- return CL_SUCCESS; +-} +- +-static void lzx_reset_state(struct lzx_stream *lzx) { +- int i; +- +- lzx->R0 = 1; +- lzx->R1 = 1; +- lzx->R2 = 1; +- lzx->header_read = 0; +- lzx->block_remaining = 0; +- lzx->block_type = LZX_BLOCKTYPE_INVALID; +- +- /* initialise tables to 0 (because deltas will be applied to them) */ +- for (i = 0; i < LZX_MAINTREE_MAXSYMBOLS; i++) lzx->MAINTREE_len[i] = 0; +- for (i = 0; i < LZX_LENGTH_MAXSYMBOLS; i++) lzx->LENGTH_len[i] = 0; +-} +- +-/*-------- main LZX code --------*/ +- +-struct lzx_stream *lzx_init(int ofd, +- int window_bits, +- int reset_interval, +- int input_buffer_size, +- off_t output_length, +- struct cab_file *file, +- int (*read_cb)(struct cab_file *, unsigned char *, int)) +-{ +- unsigned int window_size = 1 << window_bits; +- struct lzx_stream *lzx; +- int i, j; +- +- /* LZX supports window sizes of 2^15 (32Kb) through 2^21 (2Mb) */ +- if (window_bits < 15 || window_bits > 21) return NULL; +- +- input_buffer_size = (input_buffer_size + 1) & -2; +- if (!input_buffer_size) return NULL; +- +- /* allocate decompression state */ +- if (!(lzx = cli_calloc(1, sizeof(struct lzx_stream)))) { +- return NULL; +- } +- +- for (i = 0, j = 0; i < 51; i += 2) { +- lzx->extra_bits[i] = j; /* 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7... */ +- if(i < 50) +- lzx->extra_bits[i+1] = j; +- if ((i != 0) && (j < 17)) j++; /* 0,0,1,2,3,4...15,16,17,17,17,17... */ +- } +- +- for (i = 0, j = 0; i < 51; i++) { +- lzx->position_base[i] = j; /* 0,1,2,3,4,6,8,12,16,24,32,... */ +- j += 1 << lzx->extra_bits[i]; /* 1,1,1,1,2,2,4,4,8,8,16,16,32,32,... */ +- } +- +- /* allocate decompression window and input buffer */ +- lzx->window = cli_calloc(1, (size_t) window_size); +- if(!lzx->window) { +- free(lzx); +- return NULL; +- } +- +- lzx->inbuf = cli_calloc(1, (size_t) input_buffer_size); +- if (!lzx->inbuf) { +- free(lzx->window); +- free(lzx); +- return NULL; +- } +- +- /* initialise decompression state */ +- lzx->ofd = ofd; +- lzx->wflag = 1; +- lzx->offset = 0; +- lzx->length = output_length; +- lzx->file = file; +- lzx->read_cb = read_cb; +- +- lzx->inbuf_size = input_buffer_size; +- lzx->window_size = 1 << window_bits; +- lzx->window_posn = 0; +- lzx->frame_posn = 0; +- lzx->frame = 0; +- lzx->reset_interval = reset_interval; +- lzx->intel_filesize = 0; +- lzx->intel_curpos = 0; +- +- /* window bits: 15 16 17 18 19 20 21 +- * position slots: 30 32 34 36 38 42 50 */ +- lzx->posn_slots = ((window_bits == 21) ? 50 : +- ((window_bits == 20) ? 42 : (window_bits << 1))); +- lzx->intel_started = 0; +- lzx->input_end = 0; +- +- lzx->error = CL_SUCCESS; +- +- lzx->i_ptr = lzx->i_end = &lzx->inbuf[0]; +- lzx->o_ptr = lzx->o_end = &lzx->e8_buf[0]; +- lzx->bit_buffer = lzx->bits_left = 0; +- +- lzx_reset_state(lzx); +- return lzx; +-} +- +-void lzx_set_output_length(struct lzx_stream *lzx, off_t out_bytes) { +- if (lzx) lzx->length = out_bytes; +-} +- +-int lzx_decompress(struct lzx_stream *lzx, uint32_t out_bytes) { +- /* bitstream reading and huffman variables */ +- register unsigned int bit_buffer; +- register int bits_left, i=0; +- register unsigned short sym; +- unsigned char *i_ptr, *i_end; +- +- int match_length, length_footer, extra, verbatim_bits, bytes_todo; +- int this_run, main_element, aligned_bits, j, ret, warned=0; +- unsigned char *window, *runsrc, *rundest, buf[12]; +- unsigned int frame_size=0, end_frame, match_offset, window_posn; +- unsigned int R0, R1, R2; +- +- /* easy answers */ +- if (!lzx) return CL_ENULLARG; +- if (lzx->error) return lzx->error; +- +- /* flush out any stored-up bytes before we begin */ +- i = lzx->o_end - lzx->o_ptr; +- if (((off_t) i > out_bytes) && ((int) out_bytes >= 0)) i = (int) out_bytes; +- if (i) { +- if (lzx->wflag && (ret = mspack_write(lzx->ofd, lzx->o_ptr, i, lzx->file)) != CL_SUCCESS) { +- return lzx->error = ret; +- } +- lzx->o_ptr += i; +- lzx->offset += i; +- out_bytes -= i; +- } +- if (out_bytes == 0) return CL_SUCCESS; +- +- /* restore local state */ +- LZX_RESTORE_BITS; +- window = lzx->window; +- window_posn = lzx->window_posn; +- R0 = lzx->R0; +- R1 = lzx->R1; +- R2 = lzx->R2; +- +- end_frame = (unsigned int)((lzx->offset + out_bytes) / LZX_FRAME_SIZE) + 1; +- cli_dbgmsg("lzx_decompress: end frame = %u\n", end_frame); +- +- while (lzx->frame < end_frame) { +- cli_dbgmsg("lzx_decompress: current frame = %u\n", lzx->frame); +- /* have we reached the reset interval? (if there is one?) */ +- if (lzx->reset_interval && ((lzx->frame % lzx->reset_interval) == 0)) { +- if (lzx->block_remaining) { +- /* this is a file format error, but we need to extract what we can and scan that */ +- cli_dbgmsg("lzx_decompress: %d bytes remaining at reset interval\n", lzx->block_remaining); +- if (!warned) { +- cli_dbgmsg("Detected an invalid reset interval during decompression.\n"); +- warned++; +- } +- if (!lzx->header_read) { +- /* cannot continue if no header at all */ +- return lzx->error = CL_EFORMAT; +- } +- } else { +- /* re-read the intel header and reset the huffman lengths */ +- lzx_reset_state(lzx); +- } +- } +- +- /* read header if necessary */ +- if (!lzx->header_read) { +- /* read 1 bit. if bit=0, intel filesize = 0. +- * if bit=1, read intel filesize (32 bits) */ +- j = 0; LZX_READ_BITS(i, 1); if (i) { LZX_READ_BITS(i, 16); LZX_READ_BITS(j, 16); } +- lzx->intel_filesize = (i << 16) | j; +- lzx->header_read = 1; +- } +- +- /* calculate size of frame: all frames are 32k except the final frame +- * which is 32kb or less. this can only be calculated when lzx->length +- * has been filled in. */ +- frame_size = LZX_FRAME_SIZE; +- if (lzx->length && (lzx->length - lzx->offset) < (off_t)frame_size) { +- frame_size = lzx->length - lzx->offset; +- } +- +- /* decode until one more frame is available */ +- bytes_todo = lzx->frame_posn + frame_size - window_posn; +- while (bytes_todo > 0) { +- /* initialise new block, if one is needed */ +- if (lzx->block_remaining == 0) { +- /* realign if previous block was an odd-sized UNCOMPRESSED block */ +- if ((lzx->block_type == LZX_BLOCKTYPE_UNCOMPRESSED) && +- (lzx->block_length & 1)) +- { +- if (i_ptr == i_end) { +- if (lzx_read_input(lzx)) return lzx->error; +- i_ptr = lzx->i_ptr; +- i_end = lzx->i_end; +- } +- i_ptr++; +- } +- +- /* read block type (3 bits) and block length (24 bits) */ +- LZX_READ_BITS(lzx->block_type, 3); +- LZX_READ_BITS(i, 16); LZX_READ_BITS(j, 8); +- lzx->block_remaining = lzx->block_length = (i << 8) | j; +- +- /* read individual block headers */ +- switch (lzx->block_type) { +- case LZX_BLOCKTYPE_ALIGNED: +- /* read lengths of and build aligned huffman decoding tree */ +- for (i = 0; i < 8; i++) { LZX_READ_BITS(j, 3); lzx->ALIGNED_len[i] = j; } +- LZX_BUILD_TABLE(ALIGNED); +- /* no break -- rest of aligned header is same as verbatim */ +- case LZX_BLOCKTYPE_VERBATIM: +- /* read lengths of and build main huffman decoding tree */ +- LZX_READ_LENGTHS(MAINTREE, 0, 256); +- LZX_READ_LENGTHS(MAINTREE, 256, LZX_NUM_CHARS + (lzx->posn_slots << 3)); +- LZX_BUILD_TABLE(MAINTREE); +- /* if the literal 0xE8 is anywhere in the block... */ +- if (lzx->MAINTREE_len[0xE8] != 0) lzx->intel_started = 1; +- /* read lengths of and build lengths huffman decoding tree */ +- LZX_READ_LENGTHS(LENGTH, 0, LZX_NUM_SECONDARY_LENGTHS); +- LZX_BUILD_TABLE(LENGTH); +- break; +- +- case LZX_BLOCKTYPE_UNCOMPRESSED: +- /* because we can't assume otherwise */ +- lzx->intel_started = 1; +- +- /* read 1-16 (not 0-15) bits to align to bytes */ +- LZX_ENSURE_BITS(16); +- if (bits_left > 16) i_ptr -= 2; +- bits_left = 0; bit_buffer = 0; +- +- /* read 12 bytes of stored R0 / R1 / R2 values */ +- for (rundest = &buf[0], i = 0; i < 12; i++) { +- if (i_ptr == i_end) { +- if (lzx_read_input(lzx)) return lzx->error; +- i_ptr = lzx->i_ptr; +- i_end = lzx->i_end; +- } +- *rundest++ = *i_ptr++; +- } +- R0 = buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24); +- R1 = buf[4] | (buf[5] << 8) | (buf[6] << 16) | (buf[7] << 24); +- R2 = buf[8] | (buf[9] << 8) | (buf[10] << 16) | (buf[11] << 24); +- break; +- +- default: +- cli_dbgmsg("lzx_decompress: bad block type (0x%x)\n", lzx->block_type); +- return lzx->error = CL_EFORMAT; +- } +- } +- +- /* decode more of the block: +- * run = min(what's available, what's needed) */ +- this_run = lzx->block_remaining; +- if (this_run > bytes_todo) this_run = bytes_todo; +- +- /* assume we decode exactly this_run bytes, for now */ +- bytes_todo -= this_run; +- lzx->block_remaining -= this_run; +- +- /* decode at least this_run bytes */ +- switch (lzx->block_type) { +- case LZX_BLOCKTYPE_VERBATIM: +- while (this_run > 0) { +- LZX_READ_HUFFSYM(MAINTREE, main_element); +- if (main_element < LZX_NUM_CHARS) { +- /* literal: 0 to LZX_NUM_CHARS-1 */ +- window[window_posn++] = main_element; +- this_run--; +- } +- else { +- /* match: LZX_NUM_CHARS + ((slot<<3) | length_header (3 bits)) */ +- main_element -= LZX_NUM_CHARS; +- +- /* get match length */ +- match_length = main_element & LZX_NUM_PRIMARY_LENGTHS; +- if (match_length == LZX_NUM_PRIMARY_LENGTHS) { +- LZX_READ_HUFFSYM(LENGTH, length_footer); +- match_length += length_footer; +- } +- match_length += LZX_MIN_MATCH; +- +- /* get match offset */ +- switch ((match_offset = (main_element >> 3))) { +- case 0: match_offset = R0; break; +- case 1: match_offset = R1; R1=R0; R0 = match_offset; break; +- case 2: match_offset = R2; R2=R0; R0 = match_offset; break; +- case 3: match_offset = 1; R2=R1; R1=R0; R0 = match_offset; break; +- default: +- extra = lzx->extra_bits[match_offset]; +- LZX_READ_BITS(verbatim_bits, extra); +- match_offset = lzx->position_base[match_offset] - 2 + verbatim_bits; +- R2 = R1; R1 = R0; R0 = match_offset; +- } +- +- if ((window_posn + match_length) > lzx->window_size) { +- cli_dbgmsg("lzx_decompress: match ran over window wrap\n"); +- return lzx->error = CL_EFORMAT; +- } +- +- /* copy match */ +- rundest = &window[window_posn]; +- i = match_length; +- /* does match offset wrap the window? */ +- if (match_offset > window_posn) { +- /* j = length from match offset to end of window */ +- j = match_offset - window_posn; +- if (j > (int) lzx->window_size) { +- cli_dbgmsg("lzx_decompress: match offset beyond window boundaries\n"); +- return lzx->error = CL_EFORMAT; +- } +- runsrc = &window[lzx->window_size - j]; +- if (j < i) { +- /* if match goes over the window edge, do two copy runs */ +- i -= j; while (j-- > 0) *rundest++ = *runsrc++; +- runsrc = window; +- } +- while (i-- > 0) *rundest++ = *runsrc++; +- } +- else { +- runsrc = rundest - match_offset; +- if(i > (int) (lzx->window_size - window_posn)) +- i = lzx->window_size - window_posn; +- while (i-- > 0) *rundest++ = *runsrc++; +- } +- +- this_run -= match_length; +- window_posn += match_length; +- } +- } /* while (this_run > 0) */ +- break; +- +- case LZX_BLOCKTYPE_ALIGNED: +- while (this_run > 0) { +- LZX_READ_HUFFSYM(MAINTREE, main_element); +- if (main_element < LZX_NUM_CHARS) { +- /* literal: 0 to LZX_NUM_CHARS-1 */ +- window[window_posn++] = main_element; +- this_run--; +- } +- else { +- /* match: LZX_NUM_CHARS + ((slot<<3) | length_header (3 bits)) */ +- main_element -= LZX_NUM_CHARS; +- +- /* get match length */ +- match_length = main_element & LZX_NUM_PRIMARY_LENGTHS; +- if (match_length == LZX_NUM_PRIMARY_LENGTHS) { +- LZX_READ_HUFFSYM(LENGTH, length_footer); +- match_length += length_footer; +- } +- match_length += LZX_MIN_MATCH; +- +- /* get match offset */ +- switch ((match_offset = (main_element >> 3))) { +- case 0: match_offset = R0; break; +- case 1: match_offset = R1; R1 = R0; R0 = match_offset; break; +- case 2: match_offset = R2; R2 = R0; R0 = match_offset; break; +- default: +- extra = lzx->extra_bits[match_offset]; +- match_offset = lzx->position_base[match_offset] - 2; +- if (extra > 3) { +- /* verbatim and aligned bits */ +- extra -= 3; +- LZX_READ_BITS(verbatim_bits, extra); +- match_offset += (verbatim_bits << 3); +- LZX_READ_HUFFSYM(ALIGNED, aligned_bits); +- match_offset += aligned_bits; +- } +- else if (extra == 3) { +- /* aligned bits only */ +- LZX_READ_HUFFSYM(ALIGNED, aligned_bits); +- match_offset += aligned_bits; +- } +- else if (extra > 0) { /* extra==1, extra==2 */ +- /* verbatim bits only */ +- LZX_READ_BITS(verbatim_bits, extra); +- match_offset += verbatim_bits; +- } +- else /* extra == 0 */ { +- /* ??? not defined in LZX specification! */ +- match_offset = 1; +- } +- /* update repeated offset LRU queue */ +- R2 = R1; R1 = R0; R0 = match_offset; +- } +- +- if ((window_posn + match_length) > lzx->window_size) { +- cli_dbgmsg("lzx_decompress: match ran over window wrap\n"); +- return lzx->error = CL_EFORMAT; +- } +- +- /* copy match */ +- rundest = &window[window_posn]; +- i = match_length; +- /* does match offset wrap the window? */ +- if (match_offset > window_posn) { +- /* j = length from match offset to end of window */ +- j = match_offset - window_posn; +- if (j > (int) lzx->window_size) { +- cli_dbgmsg("lzx_decompress: match offset beyond window boundaries\n"); +- return lzx->error = CL_EFORMAT; +- } +- runsrc = &window[lzx->window_size - j]; +- if (j < i) { +- /* if match goes over the window edge, do two copy runs */ +- i -= j; while (j-- > 0) *rundest++ = *runsrc++; +- runsrc = window; +- } +- while (i-- > 0) *rundest++ = *runsrc++; +- } +- else { +- runsrc = rundest - match_offset; +- while (i-- > 0) *rundest++ = *runsrc++; +- } +- +- this_run -= match_length; +- window_posn += match_length; +- } +- } /* while (this_run > 0) */ +- break; +- +- case LZX_BLOCKTYPE_UNCOMPRESSED: +- /* as this_run is limited not to wrap a frame, this also means it +- * won't wrap the window (as the window is a multiple of 32k) */ +- rundest = &window[window_posn]; +- window_posn += this_run; +- while (this_run > 0) { +- if ((i = i_end - i_ptr)) { +- if (i > this_run) i = this_run; +- memcpy(rundest, i_ptr, (size_t) i); +- rundest += i; +- i_ptr += i; +- this_run -= i; +- } +- else { +- if (lzx_read_input(lzx)) return lzx->error; +- i_ptr = lzx->i_ptr; +- i_end = lzx->i_end; +- } +- } +- break; +- +- default: +- return lzx->error = CL_EFORMAT; /* might as well */ +- } +- +- /* did the final match overrun our desired this_run length? */ +- if (this_run < 0) { +- if ((unsigned int)(-this_run) > lzx->block_remaining) { +- cli_dbgmsg("lzx_decompress: overrun went past end of block by %d (%d remaining)\n", -this_run, lzx->block_remaining); +- return lzx->error = CL_EFORMAT; +- } +- lzx->block_remaining -= -this_run; +- } +- } /* while (bytes_todo > 0) */ +- +- /* streams don't extend over frame boundaries */ +- if ((window_posn - lzx->frame_posn) != frame_size) { +- cli_dbgmsg("lzx_decompress: decode beyond output frame limits! %d != %d\n", window_posn - lzx->frame_posn, frame_size); +- return lzx->error = CL_EFORMAT; +- } +- +- /* re-align input bitstream */ +- if (bits_left > 0) LZX_ENSURE_BITS(16); +- if (bits_left & 15) LZX_REMOVE_BITS(bits_left & 15); +- +- /* check that we've used all of the previous frame first */ +- if (lzx->o_ptr != lzx->o_end) { +- cli_dbgmsg("lzx_decompress: %ld avail bytes, new %d frame\n", lzx->o_end-lzx->o_ptr, frame_size); +- return lzx->error = CL_EFORMAT; +- } +- +- /* does this intel block _really_ need decoding? */ +- if (lzx->intel_started && lzx->intel_filesize && +- (lzx->frame <= 32768) && (frame_size > 10)) +- { +- unsigned char *data = &lzx->e8_buf[0]; +- unsigned char *dataend = &lzx->e8_buf[frame_size - 10]; +- signed int curpos = lzx->intel_curpos; +- signed int filesize = lzx->intel_filesize; +- signed int abs_off, rel_off; +- +- /* copy e8 block to the e8 buffer and tweak if needed */ +- lzx->o_ptr = data; +- memcpy(data, &lzx->window[lzx->frame_posn], frame_size); +- +- while (data < dataend) { +- if (*data++ != 0xE8) { curpos++; continue; } +- abs_off = data[0] | (data[1]<<8) | (data[2]<<16) | (data[3]<<24); +- if ((abs_off >= -curpos) && (abs_off < filesize)) { +- rel_off = (abs_off >= 0) ? abs_off - curpos : abs_off + filesize; +- data[0] = (unsigned char) rel_off; +- data[1] = (unsigned char) (rel_off >> 8); +- data[2] = (unsigned char) (rel_off >> 16); +- data[3] = (unsigned char) (rel_off >> 24); +- } +- data += 4; +- curpos += 5; +- } +- lzx->intel_curpos += frame_size; +- } +- else { +- lzx->o_ptr = &lzx->window[lzx->frame_posn]; +- if (lzx->intel_filesize) lzx->intel_curpos += frame_size; +- } +- lzx->o_end = &lzx->o_ptr[frame_size]; +- +- /* write a frame */ +- i = (out_bytes < (off_t)frame_size) ? (unsigned int)out_bytes : frame_size; +- if (lzx->wflag && (ret = mspack_write(lzx->ofd, lzx->o_ptr, i, lzx->file)) != CL_SUCCESS) { +- return lzx->error = ret; +- } +- lzx->o_ptr += i; +- lzx->offset += i; +- out_bytes -= i; +- +- /* advance frame start position */ +- lzx->frame_posn += frame_size; +- lzx->frame++; +- +- /* wrap window / frame position pointers */ +- if (window_posn == lzx->window_size) window_posn = 0; +- if (lzx->frame_posn == lzx->window_size) lzx->frame_posn = 0; +- +- } /* while (lzx->frame < end_frame) */ +- +- if (out_bytes) +- cli_dbgmsg("lzx_decompress: bytes left to output\n"); +- +- /* store local state */ +- LZX_STORE_BITS; +- lzx->window_posn = window_posn; +- lzx->R0 = R0; +- lzx->R1 = R1; +- lzx->R2 = R2; +- +- return CL_SUCCESS; +-} +- +-void lzx_free(struct lzx_stream *lzx) { +- if (lzx) { +- free(lzx->inbuf); +- free(lzx->window); +- free(lzx); +- } +-} +- +-/*************************************************************************** +- * Quantum decompression implementation +- *************************************************************************** +- * The Quantum method was created by David Stafford, adapted by Microsoft +- * Corporation. +- * +- * This decompressor is based on an implementation by Matthew Russotto, used +- * with permission. +- * +- * This decompressor was researched and implemented by Matthew Russotto. It +- * has since been tidied up by Stuart Caie. More information can be found at +- * http://www.speakeasy.org/~russotto/quantumcomp.html +- */ +- +-/* Quantum decompressor bitstream reading macros +- * +- * QTM_STORE_BITS stores bitstream state in qtm_stream structure +- * QTM_RESTORE_BITS restores bitstream state from qtm_stream structure +- * QTM_READ_BITS(var,n) takes N bits from the buffer and puts them in var +- * QTM_FILL_BUFFER if there is room for another 16 bits, reads another +- * 16 bits from the input stream. +- * QTM_PEEK_BITS(n) extracts without removing N bits from the bit buffer +- * QTM_REMOVE_BITS(n) removes N bits from the bit buffer +- * +- * These bit access routines work by using the area beyond the MSB and the +- * LSB as a free source of zeroes. This avoids having to mask any bits. +- * So we have to know the bit width of the bitbuffer variable. +- */ +- +-#define QTM_BITBUF_WIDTH (sizeof(unsigned int) * CHAR_BIT) +- +-#define QTM_STORE_BITS do { \ +- qtm->i_ptr = i_ptr; \ +- qtm->i_end = i_end; \ +- qtm->bit_buffer = bit_buffer; \ +- qtm->bits_left = bits_left; \ +-} while (0) +- +-#define QTM_RESTORE_BITS do { \ +- i_ptr = qtm->i_ptr; \ +- i_end = qtm->i_end; \ +- bit_buffer = qtm->bit_buffer; \ +- bits_left = qtm->bits_left; \ +-} while (0) +- +-/* adds 16 bits to bit buffer, if there's space for the new bits */ +-#define QTM_FILL_BUFFER do { \ +- if (bits_left <= (QTM_BITBUF_WIDTH - 16)) { \ +- if (i_ptr >= i_end) { \ +- if (qtm_read_input(qtm)) return qtm->error; \ +- i_ptr = qtm->i_ptr; \ +- i_end = qtm->i_end; \ +- } \ +- bit_buffer |= ((i_ptr[0] << 8) | i_ptr[1]) \ +- << (QTM_BITBUF_WIDTH - 16 - bits_left); \ +- bits_left += 16; \ +- i_ptr += 2; \ +- } \ +-} while (0) +- +-#define QTM_PEEK_BITS(n) (bit_buffer >> (QTM_BITBUF_WIDTH - (n))) +-#define QTM_REMOVE_BITS(n) ((bit_buffer <<= (n)), (bits_left -= (n))) +- +-#define QTM_READ_BITS(val, bits) do { \ +- (val) = 0; \ +- for (bits_needed = (bits); bits_needed > 0; bits_needed -= bit_run) { \ +- QTM_FILL_BUFFER; \ +- bit_run = (bits_left < bits_needed) ? bits_left : bits_needed; \ +- (val) = ((val) << bit_run) | QTM_PEEK_BITS(bit_run); \ +- QTM_REMOVE_BITS(bit_run); \ +- } \ +-} while (0) +- +-static int qtm_read_input(struct qtm_stream *qtm) { +- int nread = qtm->read_cb(qtm->file, &qtm->inbuf[0], (int)qtm->inbuf_size); +- if (nread < 0) { +- if (qtm->file->error == CL_BREAK) +- return qtm->error = CL_BREAK; +- else +- return qtm->error = CL_EFORMAT; +- } +- +- if (nread == 0) { +- if (qtm->input_end) { +- cli_dbgmsg("qtm_read_input: out of input bytes\n"); +- return qtm->error = CL_EREAD; +- } +- else { +- nread = 2; +- qtm->inbuf[0] = qtm->inbuf[1] = 0; +- qtm->input_end = 1; +- } +- } +- +- qtm->i_ptr = &qtm->inbuf[0]; +- qtm->i_end = &qtm->inbuf[nread]; +- return CL_SUCCESS; +-} +- +-/* Arithmetic decoder: +- * +- * QTM_GET_SYMBOL(model, var) fetches the next symbol from the stated model +- * and puts it in var. +- * +- * If necessary, qtm_update_model() is called. +- */ +-#define QTM_GET_SYMBOL(model, var) do { \ +- range = ((H - L) & 0xFFFF) + 1; \ +- symf = ((((C - L + 1) * model.syms[0].cumfreq)-1) / range) & 0xFFFF; \ +- \ +- for (i = 1; i < model.entries; i++) { \ +- if (model.syms[i].cumfreq <= symf) break; \ +- } \ +- (var) = model.syms[i-1].sym; \ +- \ +- range = (H - L) + 1; \ +- symf = model.syms[0].cumfreq; \ +- H = L + ((model.syms[i-1].cumfreq * range) / symf) - 1; \ +- L = L + ((model.syms[i].cumfreq * range) / symf); \ +- \ +- do { model.syms[--i].cumfreq += 8; } while (i > 0); \ +- if (model.syms[0].cumfreq > 3800) qtm_update_model(&model); \ +- \ +- while (1) { \ +- if ((L & 0x8000) != (H & 0x8000)) { \ +- if ((L & 0x4000) && !(H & 0x4000)) { \ +- /* underflow case */ \ +- C ^= 0x4000; L &= 0x3FFF; H |= 0x4000; \ +- } \ +- else break; \ +- } \ +- L <<= 1; H = (H << 1) | 1; \ +- QTM_FILL_BUFFER; \ +- C = (C << 1) | QTM_PEEK_BITS(1); \ +- QTM_REMOVE_BITS(1); \ +- } \ +-} while (0) +- +-static void qtm_update_model(struct qtm_model *model) { +- struct qtm_modelsym tmp; +- int i, j; +- +- if (--model->shiftsleft) { +- for (i = model->entries - 1; i >= 0; i--) { +- /* -1, not -2; the 0 entry saves this */ +- model->syms[i].cumfreq >>= 1; +- if (model->syms[i].cumfreq <= model->syms[i+1].cumfreq) { +- model->syms[i].cumfreq = model->syms[i+1].cumfreq + 1; +- } +- } +- } +- else { +- model->shiftsleft = 50; +- for (i = 0; i < model->entries; i++) { +- /* no -1, want to include the 0 entry */ +- /* this converts cumfreqs into frequencies, then shifts right */ +- model->syms[i].cumfreq -= model->syms[i+1].cumfreq; +- model->syms[i].cumfreq++; /* avoid losing things entirely */ +- model->syms[i].cumfreq >>= 1; +- } +- +- /* now sort by frequencies, decreasing order -- this must be an +- * inplace selection sort, or a sort with the same (in)stability +- * characteristics */ +- for (i = 0; i < model->entries - 1; i++) { +- for (j = i + 1; j < model->entries; j++) { +- if (model->syms[i].cumfreq < model->syms[j].cumfreq) { +- tmp = model->syms[i]; +- model->syms[i] = model->syms[j]; +- model->syms[j] = tmp; +- } +- } +- } +- +- /* then convert frequencies back to cumfreq */ +- for (i = model->entries - 1; i >= 0; i--) { +- model->syms[i].cumfreq += model->syms[i+1].cumfreq; +- } +- } +-} +- +-/* Initialises a model to decode symbols from [start] to [start]+[len]-1 */ +-static void qtm_init_model(struct qtm_model *model, +- struct qtm_modelsym *syms, int start, int len) +-{ +- int i; +- +- model->shiftsleft = 4; +- model->entries = len; +- model->syms = syms; +- +- for (i = 0; i <= len; i++) { +- syms[i].sym = start + i; /* actual symbol */ +- syms[i].cumfreq = len - i; /* current frequency of that symbol */ +- } +-} +- +- +-/*-------- main Quantum code --------*/ +- +-struct qtm_stream *qtm_init(int ofd, +- int window_bits, int input_buffer_size, +- struct cab_file *file, +- int (*read_cb)(struct cab_file *, unsigned char *, int)) +-{ +- unsigned int window_size = 1 << window_bits; +- struct qtm_stream *qtm; +- unsigned offset; +- int i; +- +- /* Quantum supports window sizes of 2^10 (1Kb) through 2^21 (2Mb) */ +- +- /* tk: temporary fix: only process 32KB+ window sizes */ +- if (window_bits < 15 || window_bits > 21) return NULL; +- +- input_buffer_size = (input_buffer_size + 1) & -2; +- if (input_buffer_size < 2) return NULL; +- +- /* allocate decompression state */ +- if (!(qtm = cli_calloc(1, sizeof(struct qtm_stream)))) { +- return NULL; +- } +- +- for (i = 0, offset = 0; i < 42; i++) { +- qtm->position_base[i] = offset; +- qtm->extra_bits[i] = ((i < 2) ? 0 : (i - 2)) >> 1; +- offset += 1 << qtm->extra_bits[i]; +- } +- +- for (i = 0, offset = 0; i < 26; i++) { +- qtm->length_base[i] = offset; +- qtm->length_extra[i] = (i < 2 ? 0 : i - 2) >> 2; +- offset += 1 << qtm->length_extra[i]; +- } +- qtm->length_base[26] = 254; qtm->length_extra[26] = 0; +- +- /* allocate decompression window and input buffer */ +- qtm->window = cli_malloc((size_t) window_size); +- if (!qtm->window) { +- cli_errmsg("qtm_init: Unable to allocate decompression window\n"); +- free(qtm); +- return NULL; +- } +- +- qtm->inbuf = cli_malloc((size_t) input_buffer_size); +- if (!qtm->inbuf) { +- cli_errmsg("qtm_init: Unable to allocate input buffer\n"); +- free(qtm->window); +- free(qtm); +- return NULL; +- } +- +- /* initialise decompression state */ +- qtm->ofd = ofd; +- qtm->wflag = 1; +- qtm->inbuf_size = input_buffer_size; +- qtm->window_size = window_size; +- qtm->window_posn = 0; +- qtm->frame_start = 0; +- qtm->header_read = 0; +- qtm->error = CL_SUCCESS; +- +- qtm->i_ptr = qtm->i_end = &qtm->inbuf[0]; +- qtm->o_ptr = qtm->o_end = &qtm->window[0]; +- qtm->bits_left = 0; +- qtm->bit_buffer = 0; +- +- /* initialise arithmetic coding models +- * - model 4 depends on window size, ranges from 20 to 24 +- * - model 5 depends on window size, ranges from 20 to 36 +- * - model 6pos depends on window size, ranges from 20 to 42 +- */ +- i = window_bits * 2; +- qtm_init_model(&qtm->model0, &qtm->m0sym[0], 0, 64); +- qtm_init_model(&qtm->model1, &qtm->m1sym[0], 64, 64); +- qtm_init_model(&qtm->model2, &qtm->m2sym[0], 128, 64); +- qtm_init_model(&qtm->model3, &qtm->m3sym[0], 192, 64); +- qtm_init_model(&qtm->model4, &qtm->m4sym[0], 0, (i > 24) ? 24 : i); +- qtm_init_model(&qtm->model5, &qtm->m5sym[0], 0, (i > 36) ? 36 : i); +- qtm_init_model(&qtm->model6, &qtm->m6sym[0], 0, i); +- qtm_init_model(&qtm->model6len, &qtm->m6lsym[0], 0, 27); +- qtm_init_model(&qtm->model7, &qtm->m7sym[0], 0, 7); +- +- qtm->file = file; +- qtm->read_cb = read_cb; +- +- /* all ok */ +- return qtm; +-} +- +-int qtm_decompress(struct qtm_stream *qtm, uint32_t out_bytes) { +- unsigned int frame_start, frame_end, window_posn, match_offset, range; +- unsigned char *window, *i_ptr, *i_end, *runsrc, *rundest; +- int i, j, selector, extra, sym, match_length, ret; +- unsigned short H, L, C, symf; +- +- register unsigned int bit_buffer; +- register unsigned char bits_left; +- unsigned char bits_needed, bit_run; +- +- /* easy answers */ +- if (!qtm) return CL_ENULLARG; +- if (qtm->error) return qtm->error; +- +- /* flush out any stored-up bytes before we begin */ +- i = qtm->o_end - qtm->o_ptr; +- if (((off_t) i > out_bytes) && ((int) out_bytes >= 0)) i = (int) out_bytes; +- if (i) { +- if (qtm->wflag && (ret = mspack_write(qtm->ofd, qtm->o_ptr, i, qtm->file)) != CL_SUCCESS) { +- return qtm->error = ret; +- } +- qtm->o_ptr += i; +- out_bytes -= i; +- } +- if (out_bytes == 0) return CL_SUCCESS; +- +- /* restore local state */ +- QTM_RESTORE_BITS; +- window = qtm->window; +- window_posn = qtm->window_posn; +- frame_start = qtm->frame_start; +- H = qtm->H; +- L = qtm->L; +- C = qtm->C; +- +- /* while we do not have enough decoded bytes in reserve: */ +- while ((qtm->o_end - qtm->o_ptr) < out_bytes) { +- +- /* read header if necessary. Initialises H, L and C */ +- if (!qtm->header_read) { +- H = 0xFFFF; L = 0; QTM_READ_BITS(C, 16); +- qtm->header_read = 1; +- } +- +- /* decode more, at most up to to frame boundary */ +- frame_end = window_posn + (out_bytes - (qtm->o_end - qtm->o_ptr)); +- if ((frame_start + QTM_FRAME_SIZE) < frame_end) { +- frame_end = frame_start + QTM_FRAME_SIZE; +- } +- if (frame_end < window_posn) { +- cli_dbgmsg("qtm_decompress: window position beyond end of frame\n"); +- return qtm->error = CL_EFORMAT; +- } +- +- while (window_posn < frame_end) { +- QTM_GET_SYMBOL(qtm->model7, selector); +- if (selector < 4) { +- struct qtm_model *mdl = (selector == 0) ? &qtm->model0 : +- ((selector == 1) ? &qtm->model1 : +- ((selector == 2) ? &qtm->model2 : +- &qtm->model3)); +- QTM_GET_SYMBOL((*mdl), sym); +- window[window_posn++] = sym; +- } +- else { +- switch (selector) { +- case 4: /* selector 4 = fixed length match (3 bytes) */ +- QTM_GET_SYMBOL(qtm->model4, sym); +- QTM_READ_BITS(extra, qtm->extra_bits[sym]); +- match_offset = qtm->position_base[sym] + extra + 1; +- match_length = 3; +- break; +- +- case 5: /* selector 5 = fixed length match (4 bytes) */ +- QTM_GET_SYMBOL(qtm->model5, sym); +- QTM_READ_BITS(extra, qtm->extra_bits[sym]); +- match_offset = qtm->position_base[sym] + extra + 1; +- match_length = 4; +- break; +- +- case 6: /* selector 6 = variable length match */ +- QTM_GET_SYMBOL(qtm->model6len, sym); +- QTM_READ_BITS(extra, qtm->length_extra[sym]); +- match_length = qtm->length_base[sym] + extra + 5; +- +- QTM_GET_SYMBOL(qtm->model6, sym); +- QTM_READ_BITS(extra, qtm->extra_bits[sym]); +- match_offset = qtm->position_base[sym] + extra + 1; +- break; +- +- default: +- /* should be impossible, model7 can only return 0-6 */ +- return qtm->error = CL_EFORMAT; +- } +- +- if (window_posn + match_length > qtm->window_size) { +- cli_dbgmsg("qtm_decompress: match ran over window wrap\n"); +- return qtm->error = CL_EFORMAT; +- } +- +- rundest = &window[window_posn]; +- i = match_length; +- /* does match offset wrap the window? */ +- if (match_offset > window_posn) { +- /* j = length from match offset to end of window */ +- j = match_offset - window_posn; +- if (j > (int) qtm->window_size) { +- cli_dbgmsg("qtm_decompress: match offset beyond window boundaries\n"); +- return qtm->error = CL_EFORMAT; +- } +- runsrc = &window[qtm->window_size - j]; +- if (j < i) { +- /* if match goes over the window edge, do two copy runs */ +- i -= j; while (j-- > 0) *rundest++ = *runsrc++; +- runsrc = window; +- } +- while (i-- > 0) *rundest++ = *runsrc++; +- } +- else { +- runsrc = rundest - match_offset; +- if(i > (int) (qtm->window_size - window_posn)) +- i = qtm->window_size - window_posn; +- while (i-- > 0) *rundest++ = *runsrc++; +- } +- window_posn += match_length; +- } +- } /* while (window_posn < frame_end) */ +- +- qtm->o_end = &window[window_posn]; +- +- /* another frame completed? */ +- if ((window_posn - frame_start) >= QTM_FRAME_SIZE) { +- if ((window_posn - frame_start) != QTM_FRAME_SIZE) { +- cli_dbgmsg("qtm_decompress: overshot frame alignment\n"); +- return qtm->error = CL_EFORMAT; +- } +- +- /* re-align input */ +- if (bits_left & 7) QTM_REMOVE_BITS(bits_left & 7); +- do { QTM_READ_BITS(i, 8); } while (i != 0xFF); +- qtm->header_read = 0; +- +- /* window wrap? */ +- if (window_posn == qtm->window_size) { +- /* flush all currently stored data */ +- i = (qtm->o_end - qtm->o_ptr); +- if(i <= 0) +- break; +- if (qtm->wflag && (ret = mspack_write(qtm->ofd, qtm->o_ptr, i, qtm->file)) != CL_SUCCESS) { +- return qtm->error = ret; +- } +- out_bytes -= i; +- qtm->o_ptr = &window[0]; +- qtm->o_end = &window[0]; +- window_posn = 0; +- } +- +- frame_start = window_posn; +- } +- +- } /* while (more bytes needed) */ +- +- if (out_bytes > 0) { +- i = (int) out_bytes; +- if (qtm->wflag && (ret = mspack_write(qtm->ofd, qtm->o_ptr, i, qtm->file)) != CL_SUCCESS) { +- return qtm->error = ret; +- } +- qtm->o_ptr += i; +- } +- +- /* store local state */ +- QTM_STORE_BITS; +- qtm->window_posn = window_posn; +- qtm->frame_start = frame_start; +- qtm->H = H; +- qtm->L = L; +- qtm->C = C; +- +- return CL_SUCCESS; +-} +- +-void qtm_free(struct qtm_stream *qtm) { +- if (qtm) { +- free(qtm->window); +- free(qtm->inbuf); +- free(qtm); +- } +-} +diff --git a/libclamav/mspack.h b/libclamav/mspack.h +deleted file mode 100644 +index 0ed472caeea3..000000000000 +--- a/libclamav/mspack.h ++++ /dev/null +@@ -1,294 +0,0 @@ +-/* +- * This file includes code from libmspack adapted for libclamav by +- * tkojm@clamav.net +- * +- * Copyright (C) 2003-2004 Stuart Caie +- * +- * This library is free software; you can redistribute it and/or +- * modify it under the terms of the GNU Lesser General Public +- * License version 2.1 as published by the Free Software Foundation. +- * +- * This library is distributed in the hope that it will be useful, +- * but WITHOUT ANY WARRANTY; without even the implied warranty of +- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +- * Lesser General Public License for more details. +- * +- * You should have received a copy of the GNU Lesser General Public +- * License along with this library; if not, write to the Free Software +- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 +- * USA +- */ +- +-#ifndef __MSPACK_H +-#define __MSPACK_H +- +-#include +-#include "cab.h" +- +- +-/*************************************************************************** +- * MS-ZIP decompression definitions * +- ***************************************************************************/ +- +-#define MSZIP_FRAME_SIZE (32768) /* size of LZ history window */ +-#define MSZIP_MAX_HUFFBITS (16) /* maximum huffman code length */ +-#define MSZIP_LITERAL_MAXSYMBOLS (288) /* literal/length huffman tree */ +-#define MSZIP_LITERAL_TABLEBITS (9) +-#define MSZIP_DISTANCE_MAXSYMBOLS (32) /* distance huffman tree */ +-#define MSZIP_DISTANCE_TABLEBITS (6) +- +-/* if there are less direct lookup entries than symbols, the longer +- * code pointers will be <= maxsymbols. This must not happen, or we +- * will decode entries badly */ +-#if (1 << MSZIP_LITERAL_TABLEBITS) < (MSZIP_LITERAL_MAXSYMBOLS * 2) +-# define MSZIP_LITERAL_TABLESIZE (MSZIP_LITERAL_MAXSYMBOLS * 4) +-#else +-# define MSZIP_LITERAL_TABLESIZE ((1 << MSZIP_LITERAL_TABLEBITS) + \ +- (MSZIP_LITERAL_MAXSYMBOLS * 2)) +-#endif +- +-#if (1 << MSZIP_DISTANCE_TABLEBITS) < (MSZIP_DISTANCE_MAXSYMBOLS * 2) +-# define MSZIP_DISTANCE_TABLESIZE (MSZIP_DISTANCE_MAXSYMBOLS * 4) +-#else +-# define MSZIP_DISTANCE_TABLESIZE ((1 << MSZIP_DISTANCE_TABLEBITS) + \ +- (MSZIP_DISTANCE_MAXSYMBOLS * 2)) +-#endif +- +-struct mszip_stream { +- int ofd; /* output file descriptor */ +- +- /* inflate() will call this whenever the window should be emptied. */ +- int (*flush_window)(struct mszip_stream *, unsigned int); +- +- int error, repair_mode, bytes_output, input_end; +- +- /* I/O buffering */ +- unsigned char *inbuf, *i_ptr, *i_end, *o_ptr, *o_end; +- unsigned int bit_buffer, bits_left, inbuf_size; +- +- unsigned int window_posn; /* offset within window */ +- +- /* huffman code lengths */ +- unsigned char LITERAL_len[MSZIP_LITERAL_MAXSYMBOLS]; +- unsigned char DISTANCE_len[MSZIP_DISTANCE_MAXSYMBOLS]; +- +- /* huffman decoding tables */ +- unsigned short LITERAL_table [MSZIP_LITERAL_TABLESIZE]; +- unsigned short DISTANCE_table[MSZIP_DISTANCE_TABLESIZE]; +- +- /* 32kb history window */ +- unsigned char window[MSZIP_FRAME_SIZE]; +- +- /* cabinet related stuff */ +- struct cab_file *file; +- int (*read_cb)(struct cab_file *, unsigned char *, int); +- +- unsigned char wflag; /* write flag */ +- unsigned int last; /* prior end of content buffer */ +- +-}; +- +-struct mszip_stream *mszip_init(int ofd, +- int input_buffer_size, +- int repair_mode, +- struct cab_file *file, +- int (*read_cb)(struct cab_file *, unsigned char *, int)); +- +-extern int mszip_decompress(struct mszip_stream *zip, uint32_t out_bytes); +- +-void mszip_free(struct mszip_stream *zip); +- +- +-/*************************************************************************** +- * Quantum decompression definitions * +- ***************************************************************************/ +- +-/* Quantum compression / decompression definitions */ +- +-#define QTM_FRAME_SIZE (32768) +- +-struct qtm_modelsym { +- unsigned short sym, cumfreq; +-}; +- +-struct qtm_model { +- int shiftsleft, entries; +- struct qtm_modelsym *syms; +-}; +- +-struct qtm_stream { +- int ofd; /* output file descriptor */ +- +- unsigned char *window; /* decoding window */ +- unsigned int window_size; /* window size */ +- unsigned int window_posn; /* decompression offset within window */ +- unsigned int frame_start; /* start of current frame within window */ +- +- unsigned short H, L, C; /* high/low/current: arith coding state */ +- unsigned char header_read; /* have we started decoding a new frame? */ +- unsigned char wflag; /* write flag */ +- +- int error, input_end; +- +- /* data tables */ +- unsigned int position_base[42]; +- unsigned char extra_bits[42], length_base[27], length_extra[27]; +- +- /* four literal models, each representing 64 symbols +- * model0 for literals from 0 to 63 (selector = 0) +- * model1 for literals from 64 to 127 (selector = 1) +- * model2 for literals from 128 to 191 (selector = 2) +- * model3 for literals from 129 to 255 (selector = 3) */ +- struct qtm_model model0, model1, model2, model3; +- +- /* three match models. +- * model4 for match with fixed length of 3 bytes +- * model5 for match with fixed length of 4 bytes +- * model6 for variable length match, encoded with model6len model */ +- struct qtm_model model4, model5, model6, model6len; +- +- /* selector model. 0-6 to say literal (0,1,2,3) or match (4,5,6) */ +- struct qtm_model model7; +- +- /* symbol arrays for all models */ +- struct qtm_modelsym m0sym[64 + 1]; +- struct qtm_modelsym m1sym[64 + 1]; +- struct qtm_modelsym m2sym[64 + 1]; +- struct qtm_modelsym m3sym[64 + 1]; +- struct qtm_modelsym m4sym[24 + 1]; +- struct qtm_modelsym m5sym[36 + 1]; +- struct qtm_modelsym m6sym[42 + 1], m6lsym[27 + 1]; +- struct qtm_modelsym m7sym[7 + 1]; +- +- /* I/O buffers - 1*/ +- unsigned int bit_buffer; +- +- /* cabinet related stuff */ +- struct cab_file *file; +- int (*read_cb)(struct cab_file *, unsigned char *, int); +- +- /* I/O buffers - 2*/ +- unsigned char *inbuf, *i_ptr, *i_end, *o_ptr, *o_end; +- unsigned int inbuf_size; +- unsigned char bits_left; +- +-}; +- +-extern struct qtm_stream *qtm_init(int ofd, +- int window_bits, +- int input_buffer_size, +- struct cab_file *file, +- int (*read_cb)(struct cab_file *, unsigned char *, int)); +- +-extern int qtm_decompress(struct qtm_stream *qtm, uint32_t out_bytes); +- +-void qtm_free(struct qtm_stream *qtm); +- +-/*************************************************************************** +- * LZX decompression definitions * +- ***************************************************************************/ +- +-/* some constants defined by the LZX specification */ +-#define LZX_MIN_MATCH (2) +-#define LZX_MAX_MATCH (257) +-#define LZX_NUM_CHARS (256) +-#define LZX_BLOCKTYPE_INVALID (0) /* also blocktypes 4-7 invalid */ +-#define LZX_BLOCKTYPE_VERBATIM (1) +-#define LZX_BLOCKTYPE_ALIGNED (2) +-#define LZX_BLOCKTYPE_UNCOMPRESSED (3) +-#define LZX_PRETREE_NUM_ELEMENTS (20) +-#define LZX_ALIGNED_NUM_ELEMENTS (8) /* aligned offset tree #elements */ +-#define LZX_NUM_PRIMARY_LENGTHS (7) /* this one missing from spec! */ +-#define LZX_NUM_SECONDARY_LENGTHS (249) /* length tree #elements */ +- +-/* LZX huffman defines: tweak tablebits as desired */ +-#define LZX_PRETREE_MAXSYMBOLS (LZX_PRETREE_NUM_ELEMENTS) +-#define LZX_PRETREE_TABLEBITS (6) +-#define LZX_MAINTREE_MAXSYMBOLS (LZX_NUM_CHARS + 50*8) +-#define LZX_MAINTREE_TABLEBITS (12) +-#define LZX_LENGTH_MAXSYMBOLS (LZX_NUM_SECONDARY_LENGTHS+1) +-#define LZX_LENGTH_TABLEBITS (12) +-#define LZX_ALIGNED_MAXSYMBOLS (LZX_ALIGNED_NUM_ELEMENTS) +-#define LZX_ALIGNED_TABLEBITS (7) +-#define LZX_LENTABLE_SAFETY (64) /* table decoding overruns are allowed */ +- +-#define LZX_FRAME_SIZE (32768) /* the size of a frame in LZX */ +- +-struct lzx_stream { +- int ofd; /* output file descriptor */ +- +- off_t offset; /* number of bytes actually output */ +- off_t length; /* overall decompressed length of stream */ +- +- unsigned char *window; /* decoding window */ +- unsigned int window_size; /* window size */ +- unsigned int window_posn; /* decompression offset within window */ +- unsigned int frame_posn; /* current frame offset within in window */ +- unsigned int frame; /* the number of 32kb frames processed */ +- unsigned int reset_interval; /* which frame do we reset the compressor? */ +- +- unsigned int R0, R1, R2; /* for the LRU offset system */ +- unsigned int block_length; /* uncompressed length of this LZX block */ +- unsigned int block_remaining; /* uncompressed bytes still left to decode */ +- +- signed int intel_filesize; /* magic header value used for transform */ +- signed int intel_curpos; /* current offset in transform space */ +- +- unsigned char intel_started; /* has intel E8 decoding started? */ +- unsigned char block_type; /* type of the current block */ +- unsigned char header_read; /* have we started decoding at all yet? */ +- unsigned char posn_slots; /* how many posn slots in stream? */ +- +- int error; +- +- /* I/O buffering */ +- unsigned char *inbuf, *i_ptr, *i_end, *o_ptr, *o_end; +- unsigned int bit_buffer, bits_left, inbuf_size; +- +- /* huffman code lengths */ +- unsigned char PRETREE_len [LZX_PRETREE_MAXSYMBOLS + LZX_LENTABLE_SAFETY]; +- unsigned char MAINTREE_len [LZX_MAINTREE_MAXSYMBOLS + LZX_LENTABLE_SAFETY]; +- unsigned char LENGTH_len [LZX_LENGTH_MAXSYMBOLS + LZX_LENTABLE_SAFETY]; +- unsigned char ALIGNED_len [LZX_ALIGNED_MAXSYMBOLS + LZX_LENTABLE_SAFETY]; +- +- /* huffman decoding tables */ +- unsigned short PRETREE_table [(1 << LZX_PRETREE_TABLEBITS) + +- (LZX_PRETREE_MAXSYMBOLS * 2)]; +- unsigned short MAINTREE_table[(1 << LZX_MAINTREE_TABLEBITS) + +- (LZX_MAINTREE_MAXSYMBOLS * 2)]; +- unsigned short LENGTH_table [(1 << LZX_LENGTH_TABLEBITS) + +- (LZX_LENGTH_MAXSYMBOLS * 2)]; +- unsigned short ALIGNED_table [(1 << LZX_ALIGNED_TABLEBITS) + +- (LZX_ALIGNED_MAXSYMBOLS * 2)]; +- unsigned char input_end; /* have we reached the end of input? */ +- unsigned char wflag; /* write flag */ +- +- /* this is used purely for doing the intel E8 transform */ +- unsigned char e8_buf[LZX_FRAME_SIZE]; +- +- unsigned int position_base[51]; +- +- /* cabinet related stuff */ +- struct cab_file *file; +- int (*read_cb)(struct cab_file *, unsigned char *, int); +- +- unsigned char extra_bits[51]; +- +-}; +- +-struct lzx_stream *lzx_init(int ofd, +- int window_bits, +- int reset_interval, +- int input_buffer_size, +- off_t output_length, +- struct cab_file *file, +- int (*read_cb)(struct cab_file *, unsigned char *, int)); +- +-extern void lzx_set_output_length(struct lzx_stream *lzx, +- off_t output_length); +- +-extern int lzx_decompress(struct lzx_stream *lzx, uint32_t out_bytes); +- +-void lzx_free(struct lzx_stream *lzx); +- +-#endif +diff --git a/libclamav/scanners.c b/libclamav/scanners.c +index fa9063d08018..07a38eedc7a5 100644 +--- a/libclamav/scanners.c ++++ b/libclamav/scanners.c +@@ -60,7 +60,7 @@ + #include "vba_extract.h" + #include "msexpand.h" + #include "mbox.h" +-#include "chmunpack.h" ++#include "libmspack.h" + #include "pe.h" + #include "elf.h" + #include "filetypes.h" +@@ -73,8 +73,6 @@ + #include "sis.h" + #include "pdf.h" + #include "str.h" +-#include "mspack.h" +-#include "cab.h" + #include "rtf.h" + #include "unarj.h" + #include "nsis/nulsft.h" +@@ -853,82 +851,6 @@ static int cli_scanszdd(cli_ctx *ctx) + return ret; + } + +-static int cli_scanmscab(cli_ctx *ctx, off_t sfx_offset) +-{ +- char *tempname; +- int ret; +- unsigned int files = 0; +- struct cab_archive cab; +- struct cab_file *file; +- unsigned int corrupted_input; +- unsigned int viruses_found = 0; +- +- cli_dbgmsg("in cli_scanmscab()\n"); +- +- if((ret = cab_open(*ctx->fmap, sfx_offset, &cab))) +- return ret; +- +- for(file = cab.files; file; file = file->next) { +- files++; +- +- if(cli_matchmeta(ctx, file->name, 0, file->length, 0, files, 0, NULL) == CL_VIRUS) { +- if (!SCAN_ALL) { +- ret = CL_VIRUS; +- break; +- } +- viruses_found++; +- } +- +- if(ctx->engine->maxscansize && ctx->scansize >= ctx->engine->maxscansize) { +- ret = CL_CLEAN; +- break; +- } +- +- if(!(tempname = cli_gentemp(ctx->engine->tmpdir))) { +- ret = CL_EMEM; +- break; +- } +- +- if(ctx->engine->maxscansize && ctx->scansize + ctx->engine->maxfilesize >= ctx->engine->maxscansize) +- file->max_size = ctx->engine->maxscansize - ctx->scansize; +- else +- file->max_size = ctx->engine->maxfilesize ? ctx->engine->maxfilesize : 0xffffffff; +- +- cli_dbgmsg("CAB: Extracting file %s to %s, size %u, max_size: %u\n", file->name, tempname, file->length, (unsigned int) file->max_size); +- file->written_size = 0; +- if((ret = cab_extract(file, tempname))) { +- cli_dbgmsg("CAB: Failed to extract file: %s\n", cl_strerror(ret)); +- } else { +- corrupted_input = ctx->corrupted_input; +- if(file->length != file->written_size) { +- cli_dbgmsg("CAB: Length from header %u but wrote %u bytes\n", (unsigned int) file->length, (unsigned int) file->written_size); +- ctx->corrupted_input = 1; +- } +- ret = cli_scanfile(tempname, ctx); +- ctx->corrupted_input = corrupted_input; +- } +- if(!ctx->engine->keeptmp) { +- if (!access(tempname, R_OK) && cli_unlink(tempname)) { +- free(tempname); +- ret = CL_EUNLINK; +- break; +- } +- } +- free(tempname); +- if(ret == CL_VIRUS) { +- if (SCAN_ALL) +- viruses_found++; +- else +- break; +- } +- } +- +- cab_free(&cab); +- if (viruses_found) +- return CL_VIRUS; +- return ret; +-} +- + static int vba_scandata(const unsigned char *data, unsigned int len, cli_ctx *ctx) + { + struct cli_matcher *groot = ctx->engine->root[0]; +@@ -1568,72 +1490,6 @@ static int cli_scantar(cli_ctx *ctx, unsigned int posix) + return ret; + } + +-static int cli_scanmschm(cli_ctx *ctx) +-{ +- int ret = CL_CLEAN, rc; +- chm_metadata_t metadata; +- char *dir; +- unsigned int viruses_found = 0; +- +- cli_dbgmsg("in cli_scanmschm()\n"); +- +- /* generate the temporary directory */ +- if(!(dir = cli_gentemp(ctx->engine->tmpdir))) +- return CL_EMEM; +- +- if(mkdir(dir, 0700)) { +- cli_dbgmsg("CHM: Can't create temporary directory %s\n", dir); +- free(dir); +- return CL_ETMPDIR; +- } +- +- ret = cli_chm_open(dir, &metadata, ctx); +- if (ret != CL_SUCCESS) { +- if(!ctx->engine->keeptmp) +- cli_rmdirs(dir); +- free(dir); +- cli_dbgmsg("CHM: Error: %s\n", cl_strerror(ret)); +- return ret; +- } +- +- do { +- ret = cli_chm_prepare_file(&metadata); +- if (ret != CL_SUCCESS) { +- break; +- } +- ret = cli_chm_extract_file(dir, &metadata, ctx); +- if (ret == CL_SUCCESS) { +- rc = cli_magic_scandesc(metadata.ofd, ctx); +- close(metadata.ofd); +- if (rc == CL_VIRUS) { +- cli_dbgmsg("CHM: infected with %s\n", cli_get_last_virus(ctx)); +- if (SCAN_ALL) +- viruses_found++; +- else { +- ret = CL_VIRUS; +- break; +- } +- } +- } +- +- } while(ret == CL_SUCCESS); +- +- cli_chm_close(&metadata); +- +- if(!ctx->engine->keeptmp) +- cli_rmdirs(dir); +- +- free(dir); +- +- cli_dbgmsg("CHM: Exit code: %d\n", ret); +- if (ret == CL_BREAK) +- ret = CL_CLEAN; +- +- if (SCAN_ALL && viruses_found) +- return CL_VIRUS; +- return ret; +-} +- + static int cli_scanscrenc(cli_ctx *ctx) + { + char *tempname; diff --git a/recipes-security/clamav/clamav-0.98.5/0008-Add-upstream-systemd-support-for-clamav-daemon-and-c.patch b/recipes-security/clamav/clamav-0.98.5/0008-Add-upstream-systemd-support-for-clamav-daemon-and-c.patch new file mode 100644 index 0000000..2229296 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0008-Add-upstream-systemd-support-for-clamav-daemon-and-c.patch @@ -0,0 +1,655 @@ +From d2564db5d3f50adc67474ffb22b0ee7027a82828 Mon Sep 17 00:00:00 2001 +From: Andreas Cadhalpun +Date: Mon, 11 Aug 2014 23:22:05 +0200 +Subject: Add upstream systemd support for clamav-daemon and clamav-freshclam. + +--- + Makefile.am | 2 +- + clamd/Makefile.am | 4 ++ + clamd/clamav-daemon.service.in | 17 ++++++ + clamd/clamav-daemon.socket | 12 ++++ + clamd/clamd.c | 102 +++++++++++++++++++++++++++------- + clamd/localserver.c | 34 ++++++++++++ + clamd/server-th.c | 55 +++++++++++------- + clamd/tcpserver.c | 50 +++++++++++++++++ + configure.ac | 3 + + freshclam/Makefile.am | 4 ++ + freshclam/clamav-freshclam.service.in | 12 ++++ + freshclam/freshclam.c | 39 +++++++++++-- + m4/reorganization/libs/systemd.m4 | 18 ++++++ + shared/misc.h | 8 +++ + shared/optparser.c | 2 +- + 15 files changed, 318 insertions(+), 44 deletions(-) + create mode 100644 clamd/clamav-daemon.service.in + create mode 100644 clamd/clamav-daemon.socket + create mode 100644 freshclam/clamav-freshclam.service.in + create mode 100644 m4/reorganization/libs/systemd.m4 + +diff --git a/Makefile.am b/Makefile.am +index 2eecd94b668b..017d6327ff58 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -33,7 +33,7 @@ pkgconfig_DATA = libclamav.pc + # don't complain that configuration files and databases are not removed, this is intended + distuninstallcheck_listfiles = find . -type f ! -name clamd.conf ! -name freshclam.conf ! -name daily.cvd ! -name main.cvd -print + DISTCLEANFILES = target.h +-DISTCHECK_CONFIGURE_FLAGS=--enable-milter --disable-clamav --enable-all-jit-targets --enable-llvm=yes ++DISTCHECK_CONFIGURE_FLAGS=--enable-milter --disable-clamav --enable-all-jit-targets --enable-llvm=yes --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir) + lcov: + ($(MAKE); cd unit_tests; $(MAKE) lcov) + quick-check: +diff --git a/clamd/Makefile.am b/clamd/Makefile.am +index 61bbd69d1133..edc133138e58 100644 +--- a/clamd/Makefile.am ++++ b/clamd/Makefile.am +@@ -50,6 +50,10 @@ clamd_SOURCES = \ + + AM_CFLAGS=@WERR_CFLAGS@ + ++if INSTALL_SYSTEMD_UNITS ++systemdsystemunit_DATA = clamav-daemon.socket clamav-daemon.service ++endif ++ + endif + + LIBS = $(top_builddir)/libclamav/libclamav.la @CLAMD_LIBS@ @THREAD_LIBS@ +diff --git a/clamd/clamav-daemon.service.in b/clamd/clamav-daemon.service.in +new file mode 100644 +index 000000000000..0a5d456a2b36 +--- /dev/null ++++ b/clamd/clamav-daemon.service.in +@@ -0,0 +1,17 @@ ++[Unit] ++Description=Clam AntiVirus userspace daemon ++Documentation=man:clamd(8) man:clamd.conf(5) http://www.clamav.net/lang/en/doc/ ++Requires=clamav-daemon.socket ++# Check for database existence ++ConditionPathExistsGlob=@DBDIR@/main.{c[vl]d,inc} ++ConditionPathExistsGlob=@DBDIR@/daily.{c[vl]d,inc} ++ ++[Service] ++ExecStart=@prefix@/sbin/clamd --foreground=true ++# Reload the database ++ExecReload=/bin/kill -USR2 $MAINPID ++StandardOutput=syslog ++ ++[Install] ++WantedBy=multi-user.target ++Also=clamav-daemon.socket +diff --git a/clamd/clamav-daemon.socket b/clamd/clamav-daemon.socket +new file mode 100644 +index 000000000000..43a34cd36aad +--- /dev/null ++++ b/clamd/clamav-daemon.socket +@@ -0,0 +1,12 @@ ++[Unit] ++Description=Socket for Clam AntiVirus userspace daemon ++Documentation=man:clamd(8) man:clamd.conf(5) http://www.clamav.net/lang/en/doc/ ++ ++[Socket] ++ListenStream=/run/clamav/clamd.ctl ++#ListenStream=127.0.0.1:1024 ++ExecStartPost=/bin/chown -R clamav:clamav /run/clamav/ ++ExecStopPost=/bin/rm /run/clamav/clamd.ctl ++ ++[Install] ++WantedBy=sockets.target +diff --git a/clamd/clamd.c b/clamd/clamd.c +index 96204291f433..ec15eacc8c25 100644 +--- a/clamd/clamd.c ++++ b/clamd/clamd.c +@@ -72,7 +72,7 @@ + #include "scanner.h" + + short debug_mode = 0, logok = 0; +-short foreground = 0; ++short foreground = -1; + char hostid[37]; + + char *get_hostid(void *cbdata); +@@ -160,6 +160,31 @@ int main(int argc, char **argv) + debug_mode = 1; + } + ++ /* check foreground option from command line to override config file */ ++ int j; ++ for(j = 0; j < argc; j += 1) ++ { ++ if ((memcmp(argv[j], "--foreground", 12) == 0) || (memcmp(argv[j], "-F", 2) == 0)) ++ { ++ /* found */ ++ break; ++ } ++ } ++ ++ if (j < argc) ++ { ++ if(optget(opts, "Foreground")->enabled) ++ { ++ foreground = 1; ++ } ++ else ++ { ++ foreground = 0; ++ } ++ } ++ ++ int num_fd = sd_listen_fds(0); ++ + /* parse the config file */ + cfgfile = optget(opts, "config-file")->strarg; + pt = strdup(cfgfile); +@@ -295,7 +320,9 @@ int main(int argc, char **argv) + if(optget(opts, "LocalSocket")->enabled) + localsock = 1; + +- if(!tcpsock && !localsock) { ++ logg("#Received %d file descriptor(s) from systemd.\n", num_fd); ++ ++ if(!tcpsock && !localsock && num_fd == 0) { + logg("!Please define server type (local and/or TCP).\n"); + ret = 1; + break; +@@ -577,7 +604,9 @@ int main(int argc, char **argv) + break; + } + +- if(tcpsock) { ++ if(tcpsock || num_fd > 0) { ++ int *t; ++ + opt = optget(opts, "TCPAddr"); + if (opt->enabled) { + int breakout = 0; +@@ -604,7 +633,7 @@ int main(int argc, char **argv) + } + } + #ifndef _WIN32 +- if(localsock) { ++ if(localsock && num_fd == 0) { + int *t; + mode_t sock_mode, umsk = umask(0777); /* socket is created with 000 to avoid races */ + +@@ -666,8 +695,43 @@ int main(int argc, char **argv) + nlsockets++; + } + ++ /* check for local sockets passed by systemd */ ++ if (num_fd > 0) ++ { ++ int *t; ++ t = realloc(lsockets, sizeof(int) * (nlsockets + 1)); ++ if (!(t)) { ++ ret = 1; ++ break; ++ } ++ lsockets = t; ++ ++ lsockets[nlsockets] = localserver(opts); ++ if (lsockets[nlsockets] == -1) ++ { ++ ret = 1; ++ break; ++ } ++ else if (lsockets[nlsockets] > 0) ++ { ++ nlsockets++; ++ } ++ } ++ + /* fork into background */ +- if(!optget(opts, "Foreground")->enabled) { ++ if (foreground == -1) ++ { ++ if (optget(opts, "Foreground")->enabled) ++ { ++ foreground = 1; ++ } ++ else ++ { ++ foreground = 0; ++ } ++ } ++ if(foreground == 0) ++ { + #ifdef C_BSD + /* workaround for OpenBSD bug, see https://wwws.clamav.net/bugzilla/show_bug.cgi?id=885 */ + for(ret=0;(unsigned int)ret 1) ? "s" : ""); +- +- for (i = 0; i < nlsockets; i++) { +- closesocket(lsockets[i]); +- } ++ if (num_fd == 0) ++ { ++ logg("*Closing the main socket%s.\n", (nlsockets > 1) ? "s" : ""); + ++ for (i = 0; i < nlsockets; i++) { ++ closesocket(lsockets[i]); ++ } + #ifndef _WIN32 +- if(nlsockets && localsock) { +- opt = optget(opts, "LocalSocket"); ++ if(nlsockets && localsock) { ++ opt = optget(opts, "LocalSocket"); + +- if(unlink(opt->strarg) == -1) +- logg("!Can't unlink the socket file %s\n", opt->strarg); +- else +- logg("Socket file removed.\n"); +- } ++ if(unlink(opt->strarg) == -1) ++ logg("!Can't unlink the socket file %s\n", opt->strarg); ++ else ++ logg("Socket file removed.\n"); ++ } + #endif ++ } + + free(lsockets); + +diff --git a/clamd/localserver.c b/clamd/localserver.c +index db07415212ad..d963efd244f5 100644 +--- a/clamd/localserver.c ++++ b/clamd/localserver.c +@@ -39,6 +39,7 @@ + + #include "shared/optparser.h" + #include "shared/output.h" ++#include "shared/misc.h" + + #include "others.h" + #include "server.h" +@@ -60,6 +61,39 @@ int localserver(const struct optstruct *opts) + STATBUF foo; + char *estr; + ++ int num_fd = sd_listen_fds(0); ++ if (num_fd > 2) ++ { ++ logg("!LOCAL: Received more than two file descriptors from systemd.\n"); ++ return -1; ++ } ++ else if (num_fd > 0) ++ { ++ /* use socket passed by systemd */ ++ int i; ++ for(i = 0; i < num_fd; i += 1) ++ { ++ sockfd = SD_LISTEN_FDS_START + i; ++ if (sd_is_socket(sockfd, AF_UNIX, SOCK_STREAM, 1) == 1) ++ { ++ /* correct socket */ ++ break; ++ } ++ else ++ { ++ /* wrong socket */ ++ sockfd = -2; ++ } ++ } ++ if (sockfd == -2) ++ { ++ logg("#LOCAL: No local AF_UNIX SOCK_STREAM socket received from systemd.\n"); ++ return -2; ++ } ++ logg("#LOCAL: Received AF_UNIX SOCK_STREAM socket from systemd.\n"); ++ return sockfd; ++ } ++ /* create socket */ + memset((char *) &server, 0, sizeof(server)); + server.sun_family = AF_UNIX; + strncpy(server.sun_path, optget(opts, "LocalSocket")->strarg, sizeof(server.sun_path)); +diff --git a/clamd/server-th.c b/clamd/server-th.c +index d97cd6fb34e1..5c12811b662b 100644 +--- a/clamd/server-th.c ++++ b/clamd/server-th.c +@@ -48,6 +48,7 @@ + + #include "shared/output.h" + #include "shared/optparser.h" ++#include "shared/misc.h" + + #include "fan.h" + #include "server.h" +@@ -445,13 +446,19 @@ static void *acceptloop_th(void *arg) + } + pthread_mutex_unlock(fds->buf_mutex); + +- for (i=0;i < fds->nfds; i++) { +- if (fds->buf[i].fd == -1) +- continue; +- logg("$Shutdown: closed fd %d\n", fds->buf[i].fd); +- shutdown(fds->buf[i].fd, 2); +- closesocket(fds->buf[i].fd); ++ if (sd_listen_fds(0) == 0) ++ { ++ /* only close the sockets, when not using systemd socket activation */ ++ for (i=0;i < fds->nfds; i++) ++ { ++ if (fds->buf[i].fd == -1) ++ continue; ++ logg("$Shutdown: closed fd %d\n", fds->buf[i].fd); ++ shutdown(fds->buf[i].fd, 2); ++ closesocket(fds->buf[i].fd); ++ } + } ++ + fds_free(fds); + pthread_mutex_destroy(fds->buf_mutex); + pthread_mutex_lock(&exit_mutex); +@@ -1344,16 +1351,22 @@ int recvloop_th(int *socketds, unsigned nsockets, struct cl_engine *engine, unsi + if (progexit) { + pthread_mutex_unlock(&exit_mutex); + pthread_mutex_lock(fds->buf_mutex); +- for (i=0;i < fds->nfds; i++) { +- if (fds->buf[i].fd == -1) +- continue; +- thrmgr_group_terminate(fds->buf[i].group); +- if (thrmgr_group_finished(fds->buf[i].group, EXIT_ERROR)) { +- logg("$Shutdown closed fd %d\n", fds->buf[i].fd); +- shutdown(fds->buf[i].fd, 2); +- closesocket(fds->buf[i].fd); +- fds->buf[i].fd = -1; +- } ++ if (sd_listen_fds(0) == 0) ++ { ++ /* only close the sockets, when not using systemd socket activation */ ++ for (i=0;i < fds->nfds; i++) ++ { ++ if (fds->buf[i].fd == -1) ++ continue; ++ thrmgr_group_terminate(fds->buf[i].group); ++ if (thrmgr_group_finished(fds->buf[i].group, EXIT_ERROR)) ++ { ++ logg("$Shutdown closed fd %d\n", fds->buf[i].fd); ++ shutdown(fds->buf[i].fd, 2); ++ closesocket(fds->buf[i].fd); ++ fds->buf[i].fd = -1; ++ } ++ } + } + pthread_mutex_unlock(fds->buf_mutex); + break; +@@ -1462,9 +1475,13 @@ int recvloop_th(int *socketds, unsigned nsockets, struct cl_engine *engine, unsi + #endif + if(dbstat.entries) + cl_statfree(&dbstat); +- logg("*Shutting down the main socket%s.\n", (nsockets > 1) ? "s" : ""); +- for (i = 0; i < nsockets; i++) +- shutdown(socketds[i], 2); ++ if (sd_listen_fds(0) == 0) ++ { ++ /* only close the sockets, when not using systemd socket activation */ ++ logg("*Shutting down the main socket%s.\n", (nsockets > 1) ? "s" : ""); ++ for (i = 0; i < nsockets; i++) ++ shutdown(socketds[i], 2); ++ } + + if((opt = optget(opts, "PidFile"))->enabled) { + if(unlink(opt->strarg) == -1) +diff --git a/clamd/tcpserver.c b/clamd/tcpserver.c +index c3027a85c1f4..81387b3c8512 100644 +--- a/clamd/tcpserver.c ++++ b/clamd/tcpserver.c +@@ -60,6 +60,56 @@ int tcpserver(int **lsockets, unsigned int *nlsockets, char *ipaddr, const struc + + sockets = *lsockets; + ++ int num_fd = sd_listen_fds(0); ++ if (num_fd > 2) ++ { ++ logg("!TCP: Received more than two file descriptors from systemd.\n"); ++ return -1; ++ } ++ else if (num_fd > 0) ++ { ++ /* use socket passed by systemd */ ++ int i; ++ for(i = 0; i < num_fd; i += 1) ++ { ++ sockfd = SD_LISTEN_FDS_START + i; ++ if (sd_is_socket(sockfd, AF_INET, SOCK_STREAM, 1) == 1) ++ { ++ /* correct socket */ ++ logg("#TCP: Received AF_INET SOCK_STREAM socket from systemd.\n"); ++ break; ++ } ++ else if (sd_is_socket(sockfd, AF_INET6, SOCK_STREAM, 1) == 1) ++ { ++ /* correct socket */ ++ logg("#TCP: Received AF_INET6 SOCK_STREAM socket from systemd.\n"); ++ break; ++ } ++ else ++ { ++ /* wrong socket */ ++ sockfd = -2; ++ } ++ } ++ if (sockfd == -2) ++ { ++ logg("#TCP: No tcp AF_INET/AF_INET6 SOCK_STREAM socket received from systemd.\n"); ++ return -2; ++ } ++ ++ t = realloc(sockets, sizeof(int) * (*nlsockets + 1)); ++ if (!(t)) { ++ return -1; ++ } ++ sockets = t; ++ ++ sockets[*nlsockets] = sockfd; ++ (*nlsockets)++; ++ *lsockets = sockets; ++ return 0; ++ } ++ ++ /* create socket */ + snprintf(port, sizeof(port), "%lld", optget(opts, "TCPSocket")->numarg); + + memset(&hints, 0x00, sizeof(struct addrinfo)); +diff --git a/configure.ac b/configure.ac +index 41043753fc92..02caad29410a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -86,6 +86,7 @@ AM_MAINTAINER_MODE + m4_include([m4/reorganization/libs/libz.m4]) + m4_include([m4/reorganization/libs/bzip.m4]) + m4_include([m4/reorganization/libs/unrar.m4]) ++m4_include([m4/reorganization/libs/systemd.m4]) + m4_include([m4/reorganization/code_checks/ipv6.m4]) + m4_include([m4/reorganization/code_checks/dns.m4]) + m4_include([m4/reorganization/code_checks/fanotify.m4]) +@@ -137,9 +138,11 @@ clamscan/Makefile + database/Makefile + docs/Makefile + clamd/Makefile ++clamd/clamav-daemon.service + clamdscan/Makefile + clamsubmit/Makefile + clamav-milter/Makefile ++freshclam/clamav-freshclam.service + freshclam/Makefile + sigtool/Makefile + clamconf/Makefile +diff --git a/freshclam/Makefile.am b/freshclam/Makefile.am +index 58fc17471c35..051bf3380e98 100644 +--- a/freshclam/Makefile.am ++++ b/freshclam/Makefile.am +@@ -49,6 +49,10 @@ freshclam_SOURCES = \ + mirman.c \ + mirman.h + ++if INSTALL_SYSTEMD_UNITS ++systemdsystemunit_DATA = clamav-freshclam.service ++endif ++ + AM_CFLAGS=@WERR_CFLAGS@ + DEFS = @DEFS@ -DCL_NOTHREADS + AM_CPPFLAGS = @SSL_CPPFLAGS@ -I$(top_srcdir) -I$(top_srcdir)/shared -I$(top_srcdir)/libclamav @FRESHCLAM_CPPFLAGS@ @JSON_CPPFLAGS@ +diff --git a/freshclam/clamav-freshclam.service.in b/freshclam/clamav-freshclam.service.in +new file mode 100644 +index 000000000000..f717cd642106 +--- /dev/null ++++ b/freshclam/clamav-freshclam.service.in +@@ -0,0 +1,12 @@ ++[Unit] ++Description=ClamAV virus database updater ++Documentation=man:freshclam(1) man:freshclam.conf(5) http://www.clamav.net/lang/en/doc/ ++# If user wants it run from cron, don't start the daemon. ++ConditionPathExists=!/etc/cron.d/clamav-freshclam ++ ++[Service] ++ExecStart=@prefix@/bin/freshclam -d --foreground=true ++StandardOutput=syslog ++ ++[Install] ++WantedBy=multi-user.target +diff --git a/freshclam/freshclam.c b/freshclam/freshclam.c +index 166586bf6447..f170613877c4 100644 +--- a/freshclam/freshclam.c ++++ b/freshclam/freshclam.c +@@ -64,7 +64,7 @@ + static short terminate = 0; + extern int active_children; + +-static short foreground = 1; ++static short foreground = -1; + char updtmpdir[512], dbdir[512]; + int sigchld_wait = 1; + const char *pidfile = NULL; +@@ -117,7 +117,7 @@ sighandler (int sig) + if (pidfile) + unlink (pidfile); + logg ("Update process terminated\n"); +- exit (2); ++ exit (0); + } + + return; +@@ -322,6 +322,26 @@ main (int argc, char **argv) + return 0; + } + ++ /* check foreground option from command line to override config file */ ++ int j; ++ for(j = 0; j < argc; j += 1) ++ { ++ if ((memcmp(argv[j], "--foreground", 12) == 0) || (memcmp(argv[j], "-F", 2) == 0)) ++ { ++ /* found */ ++ break; ++ } ++ } ++ ++ if (j < argc) { ++ if(optget(opts, "Foreground")->enabled) { ++ foreground = 1; ++ } ++ else { ++ foreground = 0; ++ } ++ } ++ + /* parse the config file */ + cfgfile = optget (opts, "config-file")->strarg; + pt = strdup (cfgfile); +@@ -638,7 +658,19 @@ main (int argc, char **argv) + bigsleep = 24 * 3600 / checks; + + #ifndef _WIN32 +- if (!optget (opts, "Foreground")->enabled) ++ /* fork into background */ ++ if (foreground == -1) ++ { ++ if (optget(opts, "Foreground")->enabled) ++ { ++ foreground = 1; ++ } ++ else ++ { ++ foreground = 0; ++ } ++ } ++ if(foreground == 0) + { + if (daemonize () == -1) + { +@@ -646,7 +678,6 @@ main (int argc, char **argv) + optfree (opts); + return FCE_FAILEDUPDATE; + } +- foreground = 0; + mprintf_disabled = 1; + } + #endif +diff --git a/m4/reorganization/libs/systemd.m4 b/m4/reorganization/libs/systemd.m4 +new file mode 100644 +index 000000000000..cac5d4272fda +--- /dev/null ++++ b/m4/reorganization/libs/systemd.m4 +@@ -0,0 +1,18 @@ ++dnl Check for systemd-daemon ++PKG_CHECK_MODULES(SYSTEMD, [libsystemd-daemon], [AC_DEFINE([HAVE_SYSTEMD],,[systemd-daemon is supported])], [AC_MSG_RESULT([systemd-daemon is not supported])]) ++CLAMD_LIBS="$CLAMD_LIBS $SYSTEMD_LIBS" ++CFLAGS="$CFLAGS $SYSTEMD_CFLAGS" ++ ++dnl Check for systemd system unit installation directory (see man 7 daemon) ++AC_ARG_WITH([systemdsystemunitdir], AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]),, [with_systemdsystemunitdir=auto]) ++AS_IF([test "x$with_systemdsystemunitdir" = "xyes" -o "x$with_systemdsystemunitdir" = "xauto"], [ ++ def_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd) ++ AS_IF([test "x$def_systemdsystemunitdir" = "x"], ++ [AS_IF([test "x$with_systemdsystemunitdir" = "xyes"], [AC_MSG_ERROR([systemd support requested but pkg-config unable to query systemd package])]) ++ with_systemdsystemunitdir=no], ++ [with_systemdsystemunitdir=$def_systemdsystemunitdir])]) ++AS_IF([test "x$with_systemdsystemunitdir" != "xno"], ++ [AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir])]) ++AM_CONDITIONAL(INSTALL_SYSTEMD_UNITS, [test "x$with_systemdsystemunitdir" != "xno"]) ++AC_MSG_RESULT([checking for systemd system unit installation directory... $with_systemdsystemunitdir]) ++ +diff --git a/shared/misc.h b/shared/misc.h +index 7f3a9f962d0d..3e093936caa1 100644 +--- a/shared/misc.h ++++ b/shared/misc.h +@@ -37,6 +37,14 @@ + # endif + #endif + ++#ifdef HAVE_SYSTEMD ++# include ++#else ++# define sd_listen_fds(u) 0 ++# define SD_LISTEN_FDS_START 3 ++# define sd_is_socket(f, a, s, l) 1 ++#endif ++ + #include + + #ifndef PATH_MAX +diff --git a/shared/optparser.c b/shared/optparser.c +index 63c88550d5b8..b61ec832a32f 100644 +--- a/shared/optparser.c ++++ b/shared/optparser.c +@@ -272,7 +272,7 @@ const struct clam_option __clam_options[] = { + + { "AllowAllMatchScan", NULL, 0, CLOPT_TYPE_BOOL, MATCH_BOOL, 1, NULL, 0, OPT_CLAMD, "Permit use of the ALLMATCHSCAN command.", "yes" }, + +- { "Foreground", NULL, 0, CLOPT_TYPE_BOOL, MATCH_BOOL, 0, NULL, 0, OPT_CLAMD | OPT_FRESHCLAM | OPT_MILTER, "Don't fork into background.", "no" }, ++ { "Foreground", "foreground", 'F', CLOPT_TYPE_BOOL, MATCH_BOOL, 0, NULL, 0, OPT_CLAMD | OPT_FRESHCLAM | OPT_MILTER, "Don't fork into background.", "no" }, + + { "Debug", NULL, 0, CLOPT_TYPE_BOOL, MATCH_BOOL, 0, NULL, 0, OPT_CLAMD | OPT_FRESHCLAM, "Enable debug messages in libclamav.", "no" }, + diff --git a/recipes-security/clamav/clamav-0.98.5/0009-fix-ssize_t-size_t-off_t-printf-modifier.patch b/recipes-security/clamav/clamav-0.98.5/0009-fix-ssize_t-size_t-off_t-printf-modifier.patch new file mode 100644 index 0000000..ee60f92 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0009-fix-ssize_t-size_t-off_t-printf-modifier.patch @@ -0,0 +1,478 @@ +From 26516ebe7ae678be78e748bc973835844e369f72 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Sun, 17 Aug 2014 21:24:03 +0200 +Subject: fix ssize_t/size_t/off_t printf modifier +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This fixes a segfault on ARM, Sparc, … if 64bit off_t is used. Once LFS +is enabled then off_t becomes 64bit and there is no portable way to express +it except to cast the variable to signed long long. However with LFS +enabled we can spare that cast. +The 32bit Architectures may explode here because the earlier 64bit off_t +consumes two argument slots and the filename (on which glibc uses +strlen()) becomes invalid. + +In brief: +ssize_t -> %zd +size_t -> %zu +off_t -> %llu (with LFS enabled) + +https://bugzilla.clamav.net/show_bug.cgi?id=11092 + +Signed-off-by: Sebastian Andrzej Siewior +--- + clamd/clamd.c | 2 +- + clamd/server-th.c | 3 ++- + libclamav/adc.c | 5 +++-- + libclamav/asn1.c | 3 ++- + libclamav/bytecode.c | 4 ++-- + libclamav/bytecode_api.c | 2 +- + libclamav/hashtab.c | 32 +++++++++++++++++++++----------- + libclamav/jsparse/js-norm.c | 6 ++++-- + libclamav/matcher.c | 6 ++++-- + libclamav/pdf.c | 29 +++++++++++++++++++---------- + libclamav/regex_list.c | 5 ++++- + libclamav/scanners.c | 5 +++-- + shared/misc.h | 4 ++++ + shared/output.c | 3 ++- + sigtool/sigtool.c | 3 ++- + 15 files changed, 74 insertions(+), 38 deletions(-) + +diff --git a/clamd/clamd.c b/clamd/clamd.c +index ec15eacc8c25..8c87e1bb9a87 100644 +--- a/clamd/clamd.c ++++ b/clamd/clamd.c +@@ -355,7 +355,7 @@ int main(int argc, char **argv) + + + if(logg_size) +- logg("#Log file size limited to %u bytes.\n", logg_size); ++ logg("#Log file size limited to %" PRId64 "bytes.\n", logg_size); + else + logg("#Log file size limit disabled.\n"); + +diff --git a/clamd/server-th.c b/clamd/server-th.c +index 5c12811b662b..84086f39fbfb 100644 +--- a/clamd/server-th.c ++++ b/clamd/server-th.c +@@ -689,7 +689,8 @@ static int handle_stream(client_conn_t *conn, struct fd_buf *buf, const struct o + logg("!INSTREAM: Can't write to temporary file.\n"); + *error = 1; + } +- logg("$Processed %lu bytes of chunkdata, pos %lu\n", cmdlen, pos); ++ logg("$Processed %" _sizet " bytes of chunkdata, pos %" _sizet "\n", ++ cmdlen, pos); + pos += cmdlen; + if (pos == buf->off) { + buf->off = 0; +diff --git a/libclamav/adc.c b/libclamav/adc.c +index 6ad00ea96571..684335f1bfb5 100644 +--- a/libclamav/adc.c ++++ b/libclamav/adc.c +@@ -28,6 +28,7 @@ + #include + #endif + ++#include "shared/misc.h" + #include "clamav.h" + #include "cltypes.h" + #include "others.h" +@@ -86,8 +87,8 @@ int adc_decompress(adc_stream *strm) + return ADC_DATA_ERROR; + } + +- cli_dbgmsg("adc_decompress: avail_in %lu avail_out %lu state %u\n", strm->avail_in, strm->avail_out, strm->state); +- ++ cli_dbgmsg("adc_decompress: avail_in %" _sizet " avail_out %" _sizet " state %u\n", ++ strm->avail_in, strm->avail_out, strm->state); + while (strm->avail_out) { + /* Exit if needs more in bytes and none available */ + int needsInput; +diff --git a/libclamav/asn1.c b/libclamav/asn1.c +index c6cf0dd00c50..e6f55642640d 100644 +--- a/libclamav/asn1.c ++++ b/libclamav/asn1.c +@@ -24,6 +24,7 @@ + + #include + ++#include "shared/misc.h" + #include "clamav.h" + #include "asn1.h" + #include "bignum.h" +@@ -1481,7 +1482,7 @@ int asn1_check_mscat(struct cl_engine *engine, fmap_t *map, size_t offset, unsig + if (engine->dconf->pe & PE_CONF_DISABLECERT) + return CL_VIRUS; + +- cli_dbgmsg("in asn1_check_mscat (offset: %lu)\n", offset); ++ cli_dbgmsg("in asn1_check_mscat (offset: %" _sizet ")\n", offset); + crtmgr_init(&certs); + if(crtmgr_add_roots(engine, &certs)) { + crtmgr_free(&certs); +diff --git a/libclamav/bytecode.c b/libclamav/bytecode.c +index 28d2d716f93b..b34f818fdaba 100644 +--- a/libclamav/bytecode.c ++++ b/libclamav/bytecode.c +@@ -1489,8 +1489,8 @@ void cli_sigperf_print() + cli_infomsg (NULL, "%-*s %*s %*s %*s %*s\n", max_name_len, "=============", + 8, "=====", 8, "========", 12, "===========", 9, "========="); + while (elem->run_count) { +- cli_infomsg (NULL, "%-*s %*lu %*lu %*llu %*.2f\n", max_name_len, elem->bc_name, +- 8, elem->run_count, 8, elem->match_count, ++ cli_infomsg (NULL, "%-*s %*lu %*lu %*" PRIu64 " %*.2f\n", max_name_len, ++ elem->bc_name, 8, elem->run_count, 8, elem->match_count, + 12, elem->usecs, 9, (double)elem->usecs/elem->run_count); + elem++; + } +diff --git a/libclamav/bytecode_api.c b/libclamav/bytecode_api.c +index 5bded4ebaca0..72a9393183a2 100644 +--- a/libclamav/bytecode_api.c ++++ b/libclamav/bytecode_api.c +@@ -122,7 +122,7 @@ int32_t cli_bcapi_seek(struct cli_bc_ctx* ctx, int32_t pos, uint32_t whence) + return -1; + } + if (off < 0 || off > ctx->file_size) { +- cli_dbgmsg("bcapi_seek: out of file: %ld (max %d)\n", ++ cli_dbgmsg("bcapi_seek: out of file: %" PRId64 " (max %d)\n", + off, ctx->file_size); + return -1; + } +diff --git a/libclamav/hashtab.c b/libclamav/hashtab.c +index 88e81ba2c2ef..cafce3ac8927 100644 +--- a/libclamav/hashtab.c ++++ b/libclamav/hashtab.c +@@ -25,6 +25,7 @@ + #include + #include + ++#include "shared/misc.h" + #include "cltypes.h" + #include "clamav.h" + #include "others.h" +@@ -329,9 +330,10 @@ static int cli_hashtab_grow(struct cli_hashtable *s) + struct cli_element* htable; + size_t i,idx, used = 0; + +- cli_dbgmsg("hashtab.c: new capacity: %lu\n",new_capacity); ++ cli_dbgmsg("hashtab.c: new capacity: %" _sizet "\n",new_capacity); + if(new_capacity == s->capacity) { +- cli_errmsg("hashtab.c: capacity problem growing from: %lu\n",s->capacity); ++ cli_errmsg("hashtab.c: capacity problem growing from: %" _sizet ++ "\n", s->capacity); + return CL_EMEM; + } + htable = cli_calloc(new_capacity, sizeof(*s->htable)); +@@ -372,7 +374,7 @@ static int cli_hashtab_grow(struct cli_hashtable *s) + s->used = used; + s->capacity = new_capacity; + s->maxfill = new_capacity*8/10; +- cli_dbgmsg("Table %p size after grow:%ld\n",(void*)s,s->capacity); ++ cli_dbgmsg("Table %p size after grow: %" _sizet "\n", s, s->capacity); + PROFILE_GROW_DONE(s); + return CL_SUCCESS; + } +@@ -386,7 +388,7 @@ static int cli_htu32_grow(struct cli_htu32 *s, mpool_t *mempool) + const size_t new_capacity = nearest_power(s->capacity + 1); + struct cli_htu32_element* htable = mpool_calloc(mempool, new_capacity, sizeof(*s->htable)); + size_t i,idx, used = 0; +- cli_dbgmsg("hashtab.c: new capacity: %lu\n",new_capacity); ++ cli_dbgmsg("hashtab.c: new capacity: %" _sizet "\n", new_capacity); + if(new_capacity == s->capacity || !htable) + return CL_EMEM; + +@@ -422,7 +424,7 @@ static int cli_htu32_grow(struct cli_htu32 *s, mpool_t *mempool) + s->used = used; + s->capacity = new_capacity; + s->maxfill = new_capacity*8/10; +- cli_dbgmsg("Table %p size after grow:%ld\n",(void*)s,s->capacity); ++ cli_dbgmsg("Table %p size after grow: %" _sizet "\n", s, s->capacity); + PROFILE_GROW_DONE(s); + return CL_SUCCESS; + } +@@ -437,7 +439,9 @@ const struct cli_element* cli_hashtab_insert(struct cli_hashtable *s, const char + if(!s) + return NULL; + if(s->used > s->maxfill) { +- cli_dbgmsg("hashtab.c:Growing hashtable %p, because it has exceeded maxfill, old size:%ld\n",(void*)s,s->capacity); ++ cli_dbgmsg("hashtab.c:Growing hashtable %p, because it has " ++ "exceeded maxfill, old size: %" _sizet "\n", s, ++ s->capacity); + cli_hashtab_grow(s); + } + do { +@@ -486,7 +490,8 @@ const struct cli_element* cli_hashtab_insert(struct cli_hashtable *s, const char + } while (tries <= s->capacity); + /* no free place found*/ + PROFILE_HASH_EXHAUSTED(s); +- cli_dbgmsg("hashtab.c: Growing hashtable %p, because its full, old size:%ld.\n",(void*)s,s->capacity); ++ cli_dbgmsg("hashtab.c: Growing hashtable %p, because its full, " ++ "old size: %" _sizet ".\n", s, s->capacity); + } while( cli_hashtab_grow(s) >= 0 ); + cli_warnmsg("hashtab.c: Unable to grow hashtable\n"); + return NULL; +@@ -504,7 +509,9 @@ int cli_htu32_insert(struct cli_htu32 *s, const struct cli_htu32_element *item, + if(!s) + return CL_ENULLARG; + if(s->used > s->maxfill) { +- cli_dbgmsg("hashtab.c:Growing hashtable %p, because it has exceeded maxfill, old size:%ld\n",(void*)s,s->capacity); ++ cli_dbgmsg("hashtab.c:Growing hashtable %p, because it has " ++ "exceeded maxfill, old size: %" _sizet "\n", s, ++ s->capacity); + cli_htu32_grow(s, mempool); + } + do { +@@ -543,7 +550,8 @@ int cli_htu32_insert(struct cli_htu32 *s, const struct cli_htu32_element *item, + } while (tries <= s->capacity); + /* no free place found*/ + PROFILE_HASH_EXHAUSTED(s); +- cli_dbgmsg("hashtab.c: Growing hashtable %p, because its full, old size:%ld.\n",(void*)s,s->capacity); ++ cli_dbgmsg("hashtab.c: Growing hashtable %p, because its full, " ++ "old size: %" _sizet ".\n", s, s->capacity); + } while( (ret = cli_htu32_grow(s, mempool)) >= 0 ); + cli_warnmsg("hashtab.c: Unable to grow hashtable\n"); + return ret; +@@ -632,11 +640,13 @@ int cli_hashtab_generate_c(const struct cli_hashtable *s,const char* name) + else if(e->key == DELETED_KEY) + printf("\t{DELETED_KEY,0,0},\n"); + else +- printf("\t{\"%s\", %ld, %ld},\n", e->key, e->data, e->len); ++ printf("\t{\"%s\", %ld, %" _sizet"},\n", e->key, ++ e->data, e->len); + } + printf("};\n"); + printf("const struct cli_hashtable %s = {\n",name); +- printf("\t%s_elements, %ld, %ld, %ld", name, s->capacity, s->used, s->maxfill); ++ printf("\t%s_elements, %" _sizet ", %" _sizet" , %" _sizet, name, ++ s->capacity, s->used, s->maxfill); + printf("\n};\n"); + + PROFILE_REPORT(s); +diff --git a/libclamav/jsparse/js-norm.c b/libclamav/jsparse/js-norm.c +index 85eba72c2e87..9a56aa34856f 100644 +--- a/libclamav/jsparse/js-norm.c ++++ b/libclamav/jsparse/js-norm.c +@@ -34,6 +34,7 @@ + #include + #include + ++#include "shared/misc.h" + #include "clamav.h" + #include "cltypes.h" + #include "jsparse/lexglobal.h" +@@ -525,7 +526,8 @@ static int replace_token_range(struct tokens *dst, size_t start, size_t end, con + { + const size_t len = with ? with->cnt : 0; + size_t i; +- cli_dbgmsg(MODULE "Replacing tokens %lu - %lu with %lu tokens\n",start, end, len); ++ cli_dbgmsg(MODULE "Replacing tokens %" _sizet " - %" _sizet " with %" ++ _sizet " tokens\n", start, end, len); + if(start >= dst->cnt || end > dst->cnt) + return -1; + for(i=start;icnt + src->cnt)) + return CL_EMEM; +- cli_dbgmsg(MODULE "Appending %lu tokens\n", src->cnt); ++ cli_dbgmsg(MODULE "Appending %" _sizet " tokens\n", src->cnt); + memcpy(&dst->data[dst->cnt], src->data, src->cnt * sizeof(dst->data[0])); + dst->cnt += src->cnt; + return CL_SUCCESS; +diff --git a/libclamav/matcher.c b/libclamav/matcher.c +index 3f4f5c1659d5..e684f7122e26 100644 +--- a/libclamav/matcher.c ++++ b/libclamav/matcher.c +@@ -52,6 +52,7 @@ + #include "perflogging.h" + #include "bytecode_priv.h" + #include "bytecode_api_impl.h" ++#include "shared/misc.h" + + #ifdef CLI_PERF_LOGGING + +@@ -1069,8 +1070,9 @@ int cli_matchmeta(cli_ctx *ctx, const char *fname, size_t fsizec, size_t fsizer, + const struct cli_cdb *cdb; + unsigned int viruses_found = 0; + +- cli_dbgmsg("CDBNAME:%s:%lu:%s:%lu:%lu:%d:%u:%u:%p\n", +- cli_ftname(ctx->container_type), fsizec, fname, fsizec, fsizer, encrypted, filepos, res1, res2); ++ cli_dbgmsg("CDBNAME:%s:%" _sizet ":%s:%" _sizet ":%" _sizet ":%d:%u:%u:%p\n", ++ cli_ftname(ctx->container_type), fsizec, fname, fsizec, fsizer, ++ encrypted, filepos, res1, res2); + + if (ctx->engine && ctx->engine->cb_meta) + if (ctx->engine->cb_meta(cli_ftname(ctx->container_type), fsizec, fname, fsizer, encrypted, filepos, ctx->cb_ctx) == CL_VIRUS) { +diff --git a/libclamav/pdf.c b/libclamav/pdf.c +index 2e469c1e5d56..2de348e7c3fd 100644 +--- a/libclamav/pdf.c ++++ b/libclamav/pdf.c +@@ -60,6 +60,7 @@ + #include "rijndael.h" + #include "textnorm.h" + #include "json_api.h" ++#include "shared/misc.h" + + #ifdef CL_DEBUG + /*#define SAVE_TMP +@@ -1019,10 +1020,12 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) + + orig_length = length; + if (length > pdf->size || obj->start + p_stream + length > pdf->size) { +- cli_dbgmsg("cli_pdf: length out of file: %ld + %ld > %ld\n", +- p_stream, length, pdf->size); +- noisy_warnmsg("length out of file, truncated: %ld + %ld > %ld\n", +- p_stream, length, pdf->size); ++ cli_dbgmsg("cli_pdf: length out of file: %" PRId64 " + %" ++ PRId64 " > % " PRId64 "\n", p_stream, ++ length, pdf->size); ++ noisy_warnmsg("length out of file, truncated: %" PRId64 ++ " + %" PRId64 " > %" PRId64 "\n", ++ p_stream, length, pdf->size); + length = pdf->size - (obj->start + p_stream); + } + +@@ -1044,17 +1047,21 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) + if (length < 0) + length = 0; + +- cli_dbgmsg("cli_pdf: calculated length %ld\n", length); ++ cli_dbgmsg("cli_pdf: calculated length %" PRId64 "\n", ++ length); + } else { + if (size > (size_t)length+2) { +- cli_dbgmsg("cli_pdf: calculated length %ld < %ld\n", ++ cli_dbgmsg("cli_pdf: calculated length %" PRId64 " < %" ++ _ssizet "\n", + length, size); + length = size; + } + } + + if (orig_length && size > (size_t)orig_length + 20) { +- cli_dbgmsg("cli_pdf: orig length: %ld, length: %ld, size: %ld\n", orig_length, length, size); ++ cli_dbgmsg("cli_pdf: orig length: %" PRId64 ", length: %" ++ PRId64", size: %" _ssizet "\n", orig_length, ++ length, size); + pdfobj_flag(pdf, obj, BAD_STREAMLEN); + } + +@@ -1240,7 +1247,7 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) + } + } while (0); + +- cli_dbgmsg("cli_pdf: extracted %ld bytes %u %u obj to %s\n", sum, obj->id>>8, obj->id&0xff, fullname); ++ cli_dbgmsg("cli_pdf: extracted %" PRId64 " bytes %u %u obj to %p\n", sum, obj->id>>8, obj->id&0xff, fullname); + + if (flags & PDF_EXTRACT_OBJ_SCAN && sum) { + int rc2; +@@ -2493,7 +2500,8 @@ int cli_pdf(const char *dir, cli_ctx *ctx, off_t offset) + + if (pdfver != start || offset) { + pdf.flags |= 1 << BAD_PDF_HEADERPOS; +- cli_dbgmsg("cli_pdf: PDF header is not at position 0: %ld\n",pdfver-start+offset); ++ cli_dbgmsg("cli_pdf: PDF header is not at position 0: %" PRId64 "\n", ++ pdfver - start + offset); + #if HAVE_JSON + if (pdfobj) + cli_jsonbool(pdfobj, "BadVersionLocation", 1); +@@ -2602,7 +2610,8 @@ int cli_pdf(const char *dir, cli_ctx *ctx, off_t offset) + while ((rc = pdf_findobj(&pdf)) > 0) { + struct pdf_obj *obj = &pdf.objs[pdf.nobjs-1]; + +- cli_dbgmsg("cli_pdf: found %d %d obj @%ld\n", obj->id >> 8, obj->id&0xff, obj->start + offset); ++ cli_dbgmsg("cli_pdf: found %d %d obj @%" PRId64 "\n", obj->id >> 8, ++ obj->id & 0xff, obj->start + offset); + } + + if (pdf.nobjs) +diff --git a/libclamav/regex_list.c b/libclamav/regex_list.c +index f30cc4cd4349..4b27c2974fb6 100644 +--- a/libclamav/regex_list.c ++++ b/libclamav/regex_list.c +@@ -41,6 +41,7 @@ + #include + + #include "regex/regex.h" ++#include "shared/misc.h" + + #include "clamav.h" + #include "others.h" +@@ -84,7 +85,9 @@ static inline size_t get_char_at_pos_with_skip(const struct pre_fixup_info* info + return (pos <= strlen(buffer)) ? buffer[pos>0 ? pos-1:0] : '\0'; + } + str = info->pre_displayLink.data; +- cli_dbgmsg("calc_pos_with_skip: skip:%lu, %lu - %lu \"%s\",\"%s\"\n", pos, info->host_start, info->host_end, str, buffer); ++ cli_dbgmsg("calc_pos_with_skip: skip: %" _sizet ", %" _sizet " - %" ++ _sizet " \"%s\",\"%s\"\n", pos, info->host_start, ++ info->host_end, str, buffer); + pos += info->host_start; + while(str[realpos] && !isalnum(str[realpos])) realpos++; + for(; str[realpos] && (pos>0); pos--) { +diff --git a/libclamav/scanners.c b/libclamav/scanners.c +index 07a38eedc7a5..49cd70a18d9e 100644 +--- a/libclamav/scanners.c ++++ b/libclamav/scanners.c +@@ -49,6 +49,7 @@ + #define DCONF_MAIL ctx->dconf->mail + #define DCONF_OTHER ctx->dconf->other + ++#include "shared/misc.h" + #include "clamav.h" + #include "others.h" + #include "dconf.h" +@@ -3171,8 +3172,8 @@ int cli_map_scandesc(cl_fmap_t *map, off_t offset, size_t length, cli_ctx *ctx, + + if (!length) length = old_len - offset; + if (length > old_len - offset) { +- cli_dbgmsg("Data truncated: %lu -> %lu\n", +- (unsigned long)length, old_len - offset); ++ cli_dbgmsg("Data truncated: %" _sizet" -> %" PRIu64" \n", length, ++ old_len - offset); + length = old_len - offset; + } + +diff --git a/shared/misc.h b/shared/misc.h +index 3e093936caa1..65f8c9ce0382 100644 +--- a/shared/misc.h ++++ b/shared/misc.h +@@ -51,6 +51,10 @@ + #define PATH_MAX 1024 + #endif + ++#include ++#define _sizet "zu" ++#define _ssizet "zd" ++ + char *freshdbdir(void); + void print_version(const char *dbdir); + int check_flevel(void); +diff --git a/shared/output.c b/shared/output.c +index 5e947a57a6f9..ab054a8bbeee 100644 +--- a/shared/output.c ++++ b/shared/output.c +@@ -214,7 +214,8 @@ static int rename_logg(STATBUF *sb) + + if (!logg_rotate) { + if (logg_fp) { +- fprintf(logg_fp, "Log size = %zu, max = %zu\n", sb->st_size, logg_size); ++ fprintf(logg_fp, "Log size = %" PRId64 ", max = %" PRId64 "\n", ++ sb->st_size, logg_size); + fprintf(logg_fp, "WARNING: Log size limit met but log file rotation turned off. Forcing log file rotation anyways.\n"); + } + +diff --git a/sigtool/sigtool.c b/sigtool/sigtool.c +index f2135c210e02..d67e662cfea1 100644 +--- a/sigtool/sigtool.c ++++ b/sigtool/sigtool.c +@@ -373,7 +373,8 @@ static char *getdsig(const char *host, const char *user, const unsigned char *da + closesocket(sockd); + return NULL; + } else { +- mprintf("Signature received (length = %lu)\n", (unsigned long)strlen(buff) - 10); ++ mprintf("Signature received (length = %" _sizet ")\n", ++ (unsigned long)strlen(buff) - 10); + } + } else { + mprintf("!getdsig: Communication error with remote server\n"); diff --git a/recipes-security/clamav/clamav-0.98.5/0010-hardcode-LLVM-linker-flag-because-llvm-config-return.patch b/recipes-security/clamav/clamav-0.98.5/0010-hardcode-LLVM-linker-flag-because-llvm-config-return.patch new file mode 100644 index 0000000..9699b50 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0010-hardcode-LLVM-linker-flag-because-llvm-config-return.patch @@ -0,0 +1,26 @@ +From 86ebd6e3f8fa60d0bdbed10eb10c5a7699b821e4 Mon Sep 17 00:00:00 2001 +From: Andreas Cadhalpun +Date: Mon, 25 Aug 2014 22:54:37 +0200 +Subject: hardcode LLVM linker flag, because llvm-config returns only flags for + linking statically + +this reduces the size of libclamav by more than 80 percent +--- + libclamav/c++/configure.ac | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/libclamav/c++/configure.ac b/libclamav/c++/configure.ac +index a6697ddd8e82..3c7c7e26fbf8 100644 +--- a/libclamav/c++/configure.ac ++++ b/libclamav/c++/configure.ac +@@ -121,8 +121,8 @@ if test "x$llvmconfig" != "x"; then + else + AC_SUBST(LLVMCONFIG_LDFLAGS, [`$llvmconfig --ldflags`]) + fi +- AC_SUBST(LLVMCONFIG_LIBS, [`$llvmconfig --libs jit nativecodegen scalaropts ipo`]) +- AC_SUBST(LLVMCONFIG_LIBFILES, [`$llvmconfig --libfiles jit nativecodegen scalaropts ipo`]) ++ AC_SUBST(LLVMCONFIG_LIBS, [-lLLVM-$llvmver]) ++ AC_SUBST(LLVMCONFIG_LIBFILES, []) + AC_MSG_NOTICE([CXXFLAGS from llvm-config: $LLVMCONFIG_CXXFLAGS]) + AC_MSG_NOTICE([LDFLAGS from llvm-config: $LLVMCONFIG_LDFLAGS]) + AC_MSG_NOTICE([LIBS from llvm-config: $LLVMCONFIG_LIBS]) diff --git a/recipes-security/clamav/clamav-0.98.5/0011-Add-libmspack-library-from-upstream-without-unnecess.patch b/recipes-security/clamav/clamav-0.98.5/0011-Add-libmspack-library-from-upstream-without-unnecess.patch new file mode 100644 index 0000000..b6df9c2 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0011-Add-libmspack-library-from-upstream-without-unnecess.patch @@ -0,0 +1,56090 @@ +From e61759267dd586ead646ac7717edf73cf04fe4f3 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Wed, 30 Jul 2014 21:01:09 +0200 +Subject: Add libmspack library from upstream without unnecessary files + +this is from http://www.cabextract.org.uk/libmspack/libmspack-0.4alpha.tar.gz + +Signed-off-by: Sebastian Andrzej Siewior +--- + libclamav/libmspack-0.4alpha/AUTHORS | 12 + + libclamav/libmspack-0.4alpha/COPYING.LIB | 504 + + libclamav/libmspack-0.4alpha/ChangeLog | 491 + + libclamav/libmspack-0.4alpha/INSTALL | 370 + + libclamav/libmspack-0.4alpha/Makefile.am | 100 + + libclamav/libmspack-0.4alpha/Makefile.in | 1371 ++ + libclamav/libmspack-0.4alpha/NEWS | 0 + libclamav/libmspack-0.4alpha/README | 130 + + libclamav/libmspack-0.4alpha/TODO | 8 + + libclamav/libmspack-0.4alpha/aclocal.m4 | 1033 ++ + libclamav/libmspack-0.4alpha/config.guess | 1530 +++ + libclamav/libmspack-0.4alpha/config.h.in | 113 + + libclamav/libmspack-0.4alpha/config.sub | 1773 +++ + libclamav/libmspack-0.4alpha/configure | 14567 ++++++++++++++++++++++ + libclamav/libmspack-0.4alpha/configure.ac | 50 + + libclamav/libmspack-0.4alpha/depcomp | 688 + + libclamav/libmspack-0.4alpha/install-sh | 520 + + libclamav/libmspack-0.4alpha/libmspack.pc.in | 10 + + libclamav/libmspack-0.4alpha/ltmain.sh | 9661 ++++++++++++++ + libclamav/libmspack-0.4alpha/m4/libtool.m4 | 8001 ++++++++++++ + libclamav/libmspack-0.4alpha/m4/ltoptions.m4 | 384 + + libclamav/libmspack-0.4alpha/m4/ltsugar.m4 | 123 + + libclamav/libmspack-0.4alpha/m4/ltversion.m4 | 23 + + libclamav/libmspack-0.4alpha/m4/lt~obsolete.m4 | 98 + + libclamav/libmspack-0.4alpha/missing | 331 + + libclamav/libmspack-0.4alpha/mspack/cab.h | 127 + + libclamav/libmspack-0.4alpha/mspack/cabc.c | 24 + + libclamav/libmspack-0.4alpha/mspack/cabd.c | 1444 +++ + libclamav/libmspack-0.4alpha/mspack/chm.h | 122 + + libclamav/libmspack-0.4alpha/mspack/chmc.c | 24 + + libclamav/libmspack-0.4alpha/mspack/chmd.c | 1392 +++ + libclamav/libmspack-0.4alpha/mspack/crc32.c | 95 + + libclamav/libmspack-0.4alpha/mspack/crc32.h | 17 + + libclamav/libmspack-0.4alpha/mspack/des.h | 15 + + libclamav/libmspack-0.4alpha/mspack/hlp.h | 33 + + libclamav/libmspack-0.4alpha/mspack/hlpc.c | 24 + + libclamav/libmspack-0.4alpha/mspack/hlpd.c | 24 + + libclamav/libmspack-0.4alpha/mspack/kwaj.h | 118 + + libclamav/libmspack-0.4alpha/mspack/kwajc.c | 24 + + libclamav/libmspack-0.4alpha/mspack/kwajd.c | 561 + + libclamav/libmspack-0.4alpha/mspack/lit.h | 35 + + libclamav/libmspack-0.4alpha/mspack/litc.c | 24 + + libclamav/libmspack-0.4alpha/mspack/litd.c | 24 + + libclamav/libmspack-0.4alpha/mspack/lzss.h | 66 + + libclamav/libmspack-0.4alpha/mspack/lzssd.c | 93 + + libclamav/libmspack-0.4alpha/mspack/lzx.h | 221 + + libclamav/libmspack-0.4alpha/mspack/lzxc.c | 18 + + libclamav/libmspack-0.4alpha/mspack/lzxd.c | 895 ++ + libclamav/libmspack-0.4alpha/mspack/mspack.h | 2353 ++++ + libclamav/libmspack-0.4alpha/mspack/mszip.h | 126 + + libclamav/libmspack-0.4alpha/mspack/mszipc.c | 18 + + libclamav/libmspack-0.4alpha/mspack/mszipd.c | 514 + + libclamav/libmspack-0.4alpha/mspack/oab.h | 60 + + libclamav/libmspack-0.4alpha/mspack/oabc.c | 24 + + libclamav/libmspack-0.4alpha/mspack/oabd.c | 408 + + libclamav/libmspack-0.4alpha/mspack/qtm.h | 128 + + libclamav/libmspack-0.4alpha/mspack/qtmd.c | 489 + + libclamav/libmspack-0.4alpha/mspack/readbits.h | 207 + + libclamav/libmspack-0.4alpha/mspack/readhuff.h | 173 + + libclamav/libmspack-0.4alpha/mspack/sha.h | 15 + + libclamav/libmspack-0.4alpha/mspack/system.c | 239 + + libclamav/libmspack-0.4alpha/mspack/system.h | 124 + + libclamav/libmspack-0.4alpha/mspack/szdd.h | 39 + + libclamav/libmspack-0.4alpha/mspack/szddc.c | 24 + + libclamav/libmspack-0.4alpha/mspack/szddd.c | 247 + + libclamav/libmspack-0.4alpha/test/cabd_md5.c | 161 + + libclamav/libmspack-0.4alpha/test/cabd_memory.c | 179 + + libclamav/libmspack-0.4alpha/test/cabd_test.c | 386 + + libclamav/libmspack-0.4alpha/test/cabrip.c | 81 + + libclamav/libmspack-0.4alpha/test/chmd_find.c | 95 + + libclamav/libmspack-0.4alpha/test/chmd_md5.c | 67 + + libclamav/libmspack-0.4alpha/test/chmd_order.c | 144 + + libclamav/libmspack-0.4alpha/test/chminfo.c | 284 + + libclamav/libmspack-0.4alpha/test/chmx.c | 216 + + libclamav/libmspack-0.4alpha/test/error.h | 22 + + libclamav/libmspack-0.4alpha/test/expand.c | 79 + + libclamav/libmspack-0.4alpha/test/md5.c | 457 + + libclamav/libmspack-0.4alpha/test/md5.h | 165 + + libclamav/libmspack-0.4alpha/test/md5_fh.h | 123 + + libclamav/libmspack-0.4alpha/test/multifh.c | 435 + + libclamav/libmspack-0.4alpha/test/oabx.c | 41 + + 81 files changed, 55434 insertions(+) + create mode 100644 libclamav/libmspack-0.4alpha/AUTHORS + create mode 100644 libclamav/libmspack-0.4alpha/COPYING.LIB + create mode 100644 libclamav/libmspack-0.4alpha/ChangeLog + create mode 100644 libclamav/libmspack-0.4alpha/INSTALL + create mode 100644 libclamav/libmspack-0.4alpha/Makefile.am + create mode 100644 libclamav/libmspack-0.4alpha/Makefile.in + create mode 100644 libclamav/libmspack-0.4alpha/NEWS + create mode 100644 libclamav/libmspack-0.4alpha/README + create mode 100644 libclamav/libmspack-0.4alpha/TODO + create mode 100644 libclamav/libmspack-0.4alpha/aclocal.m4 + create mode 100755 libclamav/libmspack-0.4alpha/config.guess + create mode 100644 libclamav/libmspack-0.4alpha/config.h.in + create mode 100755 libclamav/libmspack-0.4alpha/config.sub + create mode 100755 libclamav/libmspack-0.4alpha/configure + create mode 100644 libclamav/libmspack-0.4alpha/configure.ac + create mode 100755 libclamav/libmspack-0.4alpha/depcomp + create mode 100755 libclamav/libmspack-0.4alpha/install-sh + create mode 100644 libclamav/libmspack-0.4alpha/libmspack.pc.in + create mode 100644 libclamav/libmspack-0.4alpha/ltmain.sh + create mode 100644 libclamav/libmspack-0.4alpha/m4/libtool.m4 + create mode 100644 libclamav/libmspack-0.4alpha/m4/ltoptions.m4 + create mode 100644 libclamav/libmspack-0.4alpha/m4/ltsugar.m4 + create mode 100644 libclamav/libmspack-0.4alpha/m4/ltversion.m4 + create mode 100644 libclamav/libmspack-0.4alpha/m4/lt~obsolete.m4 + create mode 100755 libclamav/libmspack-0.4alpha/missing + create mode 100644 libclamav/libmspack-0.4alpha/mspack/cab.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/cabc.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/cabd.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/chm.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/chmc.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/chmd.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/crc32.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/crc32.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/des.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/hlp.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/hlpc.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/hlpd.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/kwaj.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/kwajc.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/kwajd.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/lit.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/litc.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/litd.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/lzss.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/lzssd.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/lzx.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/lzxc.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/lzxd.c + create mode 100755 libclamav/libmspack-0.4alpha/mspack/mspack.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/mszip.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/mszipc.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/mszipd.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/oab.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/oabc.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/oabd.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/qtm.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/qtmd.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/readbits.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/readhuff.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/sha.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/system.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/system.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/szdd.h + create mode 100644 libclamav/libmspack-0.4alpha/mspack/szddc.c + create mode 100644 libclamav/libmspack-0.4alpha/mspack/szddd.c + create mode 100644 libclamav/libmspack-0.4alpha/test/cabd_md5.c + create mode 100644 libclamav/libmspack-0.4alpha/test/cabd_memory.c + create mode 100644 libclamav/libmspack-0.4alpha/test/cabd_test.c + create mode 100644 libclamav/libmspack-0.4alpha/test/cabrip.c + create mode 100644 libclamav/libmspack-0.4alpha/test/chmd_find.c + create mode 100644 libclamav/libmspack-0.4alpha/test/chmd_md5.c + create mode 100644 libclamav/libmspack-0.4alpha/test/chmd_order.c + create mode 100644 libclamav/libmspack-0.4alpha/test/chminfo.c + create mode 100644 libclamav/libmspack-0.4alpha/test/chmx.c + create mode 100644 libclamav/libmspack-0.4alpha/test/error.h + create mode 100644 libclamav/libmspack-0.4alpha/test/expand.c + create mode 100644 libclamav/libmspack-0.4alpha/test/md5.c + create mode 100644 libclamav/libmspack-0.4alpha/test/md5.h + create mode 100644 libclamav/libmspack-0.4alpha/test/md5_fh.h + create mode 100644 libclamav/libmspack-0.4alpha/test/multifh.c + create mode 100644 libclamav/libmspack-0.4alpha/test/oabx.c + +diff --git a/libclamav/libmspack-0.4alpha/AUTHORS b/libclamav/libmspack-0.4alpha/AUTHORS +new file mode 100644 +index 000000000000..be28722a8075 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/AUTHORS +@@ -0,0 +1,12 @@ ++Principal author: Stuart Caie ++ ++Based on specification documents from Microsoft Corporation and PKWARE. ++ ++Contributors: ++- LZX compressor by Matthew Russotto ++- Quantum decompressor by Matthew Russotto ++- old inflate decompressor by Dirk Stoecker / InfoZIP team ++- Huffman table builder adapted from unlzx by Dave Tritscher ++- LZX decompressor fixes by Jae Jung and Igor Glucksmann ++- Debianisation by Markus Sinner ++- Quantum decompressor fix by Larry Frieson +diff --git a/libclamav/libmspack-0.4alpha/COPYING.LIB b/libclamav/libmspack-0.4alpha/COPYING.LIB +new file mode 100644 +index 000000000000..b1e3f5a26387 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/COPYING.LIB +@@ -0,0 +1,504 @@ ++ GNU LESSER GENERAL PUBLIC LICENSE ++ Version 2.1, February 1999 ++ ++ Copyright (C) 1991, 1999 Free Software Foundation, Inc. ++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++[This is the first released version of the Lesser GPL. It also counts ++ as the successor of the GNU Library Public License, version 2, hence ++ the version number 2.1.] ++ ++ Preamble ++ ++ The licenses for most software are designed to take away your ++freedom to share and change it. By contrast, the GNU General Public ++Licenses are intended to guarantee your freedom to share and change ++free software--to make sure the software is free for all its users. ++ ++ This license, the Lesser General Public License, applies to some ++specially designated software packages--typically libraries--of the ++Free Software Foundation and other authors who decide to use it. You ++can use it too, but we suggest you first think carefully about whether ++this license or the ordinary General Public License is the better ++strategy to use in any particular case, based on the explanations below. ++ ++ When we speak of free software, we are referring to freedom of use, ++not price. Our General Public Licenses are designed to make sure that ++you have the freedom to distribute copies of free software (and charge ++for this service if you wish); that you receive source code or can get ++it if you want it; that you can change the software and use pieces of ++it in new free programs; and that you are informed that you can do ++these things. ++ ++ To protect your rights, we need to make restrictions that forbid ++distributors to deny you these rights or to ask you to surrender these ++rights. These restrictions translate to certain responsibilities for ++you if you distribute copies of the library or if you modify it. ++ ++ For example, if you distribute copies of the library, whether gratis ++or for a fee, you must give the recipients all the rights that we gave ++you. You must make sure that they, too, receive or can get the source ++code. If you link other code with the library, you must provide ++complete object files to the recipients, so that they can relink them ++with the library after making changes to the library and recompiling ++it. And you must show them these terms so they know their rights. ++ ++ We protect your rights with a two-step method: (1) we copyright the ++library, and (2) we offer you this license, which gives you legal ++permission to copy, distribute and/or modify the library. ++ ++ To protect each distributor, we want to make it very clear that ++there is no warranty for the free library. Also, if the library is ++modified by someone else and passed on, the recipients should know ++that what they have is not the original version, so that the original ++author's reputation will not be affected by problems that might be ++introduced by others. ++ ++ Finally, software patents pose a constant threat to the existence of ++any free program. We wish to make sure that a company cannot ++effectively restrict the users of a free program by obtaining a ++restrictive license from a patent holder. Therefore, we insist that ++any patent license obtained for a version of the library must be ++consistent with the full freedom of use specified in this license. ++ ++ Most GNU software, including some libraries, is covered by the ++ordinary GNU General Public License. This license, the GNU Lesser ++General Public License, applies to certain designated libraries, and ++is quite different from the ordinary General Public License. We use ++this license for certain libraries in order to permit linking those ++libraries into non-free programs. ++ ++ When a program is linked with a library, whether statically or using ++a shared library, the combination of the two is legally speaking a ++combined work, a derivative of the original library. The ordinary ++General Public License therefore permits such linking only if the ++entire combination fits its criteria of freedom. The Lesser General ++Public License permits more lax criteria for linking other code with ++the library. ++ ++ We call this license the "Lesser" General Public License because it ++does Less to protect the user's freedom than the ordinary General ++Public License. It also provides other free software developers Less ++of an advantage over competing non-free programs. These disadvantages ++are the reason we use the ordinary General Public License for many ++libraries. However, the Lesser license provides advantages in certain ++special circumstances. ++ ++ For example, on rare occasions, there may be a special need to ++encourage the widest possible use of a certain library, so that it becomes ++a de-facto standard. To achieve this, non-free programs must be ++allowed to use the library. A more frequent case is that a free ++library does the same job as widely used non-free libraries. In this ++case, there is little to gain by limiting the free library to free ++software only, so we use the Lesser General Public License. ++ ++ In other cases, permission to use a particular library in non-free ++programs enables a greater number of people to use a large body of ++free software. For example, permission to use the GNU C Library in ++non-free programs enables many more people to use the whole GNU ++operating system, as well as its variant, the GNU/Linux operating ++system. ++ ++ Although the Lesser General Public License is Less protective of the ++users' freedom, it does ensure that the user of a program that is ++linked with the Library has the freedom and the wherewithal to run ++that program using a modified version of the Library. ++ ++ The precise terms and conditions for copying, distribution and ++modification follow. Pay close attention to the difference between a ++"work based on the library" and a "work that uses the library". The ++former contains code derived from the library, whereas the latter must ++be combined with the library in order to run. ++ ++ GNU LESSER GENERAL PUBLIC LICENSE ++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ++ ++ 0. This License Agreement applies to any software library or other ++program which contains a notice placed by the copyright holder or ++other authorized party saying it may be distributed under the terms of ++this Lesser General Public License (also called "this License"). ++Each licensee is addressed as "you". ++ ++ A "library" means a collection of software functions and/or data ++prepared so as to be conveniently linked with application programs ++(which use some of those functions and data) to form executables. ++ ++ The "Library", below, refers to any such software library or work ++which has been distributed under these terms. A "work based on the ++Library" means either the Library or any derivative work under ++copyright law: that is to say, a work containing the Library or a ++portion of it, either verbatim or with modifications and/or translated ++straightforwardly into another language. (Hereinafter, translation is ++included without limitation in the term "modification".) ++ ++ "Source code" for a work means the preferred form of the work for ++making modifications to it. For a library, complete source code means ++all the source code for all modules it contains, plus any associated ++interface definition files, plus the scripts used to control compilation ++and installation of the library. ++ ++ Activities other than copying, distribution and modification are not ++covered by this License; they are outside its scope. The act of ++running a program using the Library is not restricted, and output from ++such a program is covered only if its contents constitute a work based ++on the Library (independent of the use of the Library in a tool for ++writing it). Whether that is true depends on what the Library does ++and what the program that uses the Library does. ++ ++ 1. You may copy and distribute verbatim copies of the Library's ++complete source code as you receive it, in any medium, provided that ++you conspicuously and appropriately publish on each copy an ++appropriate copyright notice and disclaimer of warranty; keep intact ++all the notices that refer to this License and to the absence of any ++warranty; and distribute a copy of this License along with the ++Library. ++ ++ You may charge a fee for the physical act of transferring a copy, ++and you may at your option offer warranty protection in exchange for a ++fee. ++ ++ 2. You may modify your copy or copies of the Library or any portion ++of it, thus forming a work based on the Library, and copy and ++distribute such modifications or work under the terms of Section 1 ++above, provided that you also meet all of these conditions: ++ ++ a) The modified work must itself be a software library. ++ ++ b) You must cause the files modified to carry prominent notices ++ stating that you changed the files and the date of any change. ++ ++ c) You must cause the whole of the work to be licensed at no ++ charge to all third parties under the terms of this License. ++ ++ d) If a facility in the modified Library refers to a function or a ++ table of data to be supplied by an application program that uses ++ the facility, other than as an argument passed when the facility ++ is invoked, then you must make a good faith effort to ensure that, ++ in the event an application does not supply such function or ++ table, the facility still operates, and performs whatever part of ++ its purpose remains meaningful. ++ ++ (For example, a function in a library to compute square roots has ++ a purpose that is entirely well-defined independent of the ++ application. Therefore, Subsection 2d requires that any ++ application-supplied function or table used by this function must ++ be optional: if the application does not supply it, the square ++ root function must still compute square roots.) ++ ++These requirements apply to the modified work as a whole. If ++identifiable sections of that work are not derived from the Library, ++and can be reasonably considered independent and separate works in ++themselves, then this License, and its terms, do not apply to those ++sections when you distribute them as separate works. But when you ++distribute the same sections as part of a whole which is a work based ++on the Library, the distribution of the whole must be on the terms of ++this License, whose permissions for other licensees extend to the ++entire whole, and thus to each and every part regardless of who wrote ++it. ++ ++Thus, it is not the intent of this section to claim rights or contest ++your rights to work written entirely by you; rather, the intent is to ++exercise the right to control the distribution of derivative or ++collective works based on the Library. ++ ++In addition, mere aggregation of another work not based on the Library ++with the Library (or with a work based on the Library) on a volume of ++a storage or distribution medium does not bring the other work under ++the scope of this License. ++ ++ 3. You may opt to apply the terms of the ordinary GNU General Public ++License instead of this License to a given copy of the Library. To do ++this, you must alter all the notices that refer to this License, so ++that they refer to the ordinary GNU General Public License, version 2, ++instead of to this License. (If a newer version than version 2 of the ++ordinary GNU General Public License has appeared, then you can specify ++that version instead if you wish.) Do not make any other change in ++these notices. ++ ++ Once this change is made in a given copy, it is irreversible for ++that copy, so the ordinary GNU General Public License applies to all ++subsequent copies and derivative works made from that copy. ++ ++ This option is useful when you wish to copy part of the code of ++the Library into a program that is not a library. ++ ++ 4. You may copy and distribute the Library (or a portion or ++derivative of it, under Section 2) in object code or executable form ++under the terms of Sections 1 and 2 above provided that you accompany ++it with the complete corresponding machine-readable source code, which ++must be distributed under the terms of Sections 1 and 2 above on a ++medium customarily used for software interchange. ++ ++ If distribution of object code is made by offering access to copy ++from a designated place, then offering equivalent access to copy the ++source code from the same place satisfies the requirement to ++distribute the source code, even though third parties are not ++compelled to copy the source along with the object code. ++ ++ 5. A program that contains no derivative of any portion of the ++Library, but is designed to work with the Library by being compiled or ++linked with it, is called a "work that uses the Library". Such a ++work, in isolation, is not a derivative work of the Library, and ++therefore falls outside the scope of this License. ++ ++ However, linking a "work that uses the Library" with the Library ++creates an executable that is a derivative of the Library (because it ++contains portions of the Library), rather than a "work that uses the ++library". The executable is therefore covered by this License. ++Section 6 states terms for distribution of such executables. ++ ++ When a "work that uses the Library" uses material from a header file ++that is part of the Library, the object code for the work may be a ++derivative work of the Library even though the source code is not. ++Whether this is true is especially significant if the work can be ++linked without the Library, or if the work is itself a library. The ++threshold for this to be true is not precisely defined by law. ++ ++ If such an object file uses only numerical parameters, data ++structure layouts and accessors, and small macros and small inline ++functions (ten lines or less in length), then the use of the object ++file is unrestricted, regardless of whether it is legally a derivative ++work. (Executables containing this object code plus portions of the ++Library will still fall under Section 6.) ++ ++ Otherwise, if the work is a derivative of the Library, you may ++distribute the object code for the work under the terms of Section 6. ++Any executables containing that work also fall under Section 6, ++whether or not they are linked directly with the Library itself. ++ ++ 6. As an exception to the Sections above, you may also combine or ++link a "work that uses the Library" with the Library to produce a ++work containing portions of the Library, and distribute that work ++under terms of your choice, provided that the terms permit ++modification of the work for the customer's own use and reverse ++engineering for debugging such modifications. ++ ++ You must give prominent notice with each copy of the work that the ++Library is used in it and that the Library and its use are covered by ++this License. You must supply a copy of this License. If the work ++during execution displays copyright notices, you must include the ++copyright notice for the Library among them, as well as a reference ++directing the user to the copy of this License. Also, you must do one ++of these things: ++ ++ a) Accompany the work with the complete corresponding ++ machine-readable source code for the Library including whatever ++ changes were used in the work (which must be distributed under ++ Sections 1 and 2 above); and, if the work is an executable linked ++ with the Library, with the complete machine-readable "work that ++ uses the Library", as object code and/or source code, so that the ++ user can modify the Library and then relink to produce a modified ++ executable containing the modified Library. (It is understood ++ that the user who changes the contents of definitions files in the ++ Library will not necessarily be able to recompile the application ++ to use the modified definitions.) ++ ++ b) Use a suitable shared library mechanism for linking with the ++ Library. A suitable mechanism is one that (1) uses at run time a ++ copy of the library already present on the user's computer system, ++ rather than copying library functions into the executable, and (2) ++ will operate properly with a modified version of the library, if ++ the user installs one, as long as the modified version is ++ interface-compatible with the version that the work was made with. ++ ++ c) Accompany the work with a written offer, valid for at ++ least three years, to give the same user the materials ++ specified in Subsection 6a, above, for a charge no more ++ than the cost of performing this distribution. ++ ++ d) If distribution of the work is made by offering access to copy ++ from a designated place, offer equivalent access to copy the above ++ specified materials from the same place. ++ ++ e) Verify that the user has already received a copy of these ++ materials or that you have already sent this user a copy. ++ ++ For an executable, the required form of the "work that uses the ++Library" must include any data and utility programs needed for ++reproducing the executable from it. However, as a special exception, ++the materials to be distributed need not include anything that is ++normally distributed (in either source or binary form) with the major ++components (compiler, kernel, and so on) of the operating system on ++which the executable runs, unless that component itself accompanies ++the executable. ++ ++ It may happen that this requirement contradicts the license ++restrictions of other proprietary libraries that do not normally ++accompany the operating system. Such a contradiction means you cannot ++use both them and the Library together in an executable that you ++distribute. ++ ++ 7. You may place library facilities that are a work based on the ++Library side-by-side in a single library together with other library ++facilities not covered by this License, and distribute such a combined ++library, provided that the separate distribution of the work based on ++the Library and of the other library facilities is otherwise ++permitted, and provided that you do these two things: ++ ++ a) Accompany the combined library with a copy of the same work ++ based on the Library, uncombined with any other library ++ facilities. This must be distributed under the terms of the ++ Sections above. ++ ++ b) Give prominent notice with the combined library of the fact ++ that part of it is a work based on the Library, and explaining ++ where to find the accompanying uncombined form of the same work. ++ ++ 8. You may not copy, modify, sublicense, link with, or distribute ++the Library except as expressly provided under this License. Any ++attempt otherwise to copy, modify, sublicense, link with, or ++distribute the Library is void, and will automatically terminate your ++rights under this License. However, parties who have received copies, ++or rights, from you under this License will not have their licenses ++terminated so long as such parties remain in full compliance. ++ ++ 9. You are not required to accept this License, since you have not ++signed it. However, nothing else grants you permission to modify or ++distribute the Library or its derivative works. These actions are ++prohibited by law if you do not accept this License. Therefore, by ++modifying or distributing the Library (or any work based on the ++Library), you indicate your acceptance of this License to do so, and ++all its terms and conditions for copying, distributing or modifying ++the Library or works based on it. ++ ++ 10. Each time you redistribute the Library (or any work based on the ++Library), the recipient automatically receives a license from the ++original licensor to copy, distribute, link with or modify the Library ++subject to these terms and conditions. You may not impose any further ++restrictions on the recipients' exercise of the rights granted herein. ++You are not responsible for enforcing compliance by third parties with ++this License. ++ ++ 11. If, as a consequence of a court judgment or allegation of patent ++infringement or for any other reason (not limited to patent issues), ++conditions are imposed on you (whether by court order, agreement or ++otherwise) that contradict the conditions of this License, they do not ++excuse you from the conditions of this License. If you cannot ++distribute so as to satisfy simultaneously your obligations under this ++License and any other pertinent obligations, then as a consequence you ++may not distribute the Library at all. For example, if a patent ++license would not permit royalty-free redistribution of the Library by ++all those who receive copies directly or indirectly through you, then ++the only way you could satisfy both it and this License would be to ++refrain entirely from distribution of the Library. ++ ++If any portion of this section is held invalid or unenforceable under any ++particular circumstance, the balance of the section is intended to apply, ++and the section as a whole is intended to apply in other circumstances. ++ ++It is not the purpose of this section to induce you to infringe any ++patents or other property right claims or to contest validity of any ++such claims; this section has the sole purpose of protecting the ++integrity of the free software distribution system which is ++implemented by public license practices. Many people have made ++generous contributions to the wide range of software distributed ++through that system in reliance on consistent application of that ++system; it is up to the author/donor to decide if he or she is willing ++to distribute software through any other system and a licensee cannot ++impose that choice. ++ ++This section is intended to make thoroughly clear what is believed to ++be a consequence of the rest of this License. ++ ++ 12. If the distribution and/or use of the Library is restricted in ++certain countries either by patents or by copyrighted interfaces, the ++original copyright holder who places the Library under this License may add ++an explicit geographical distribution limitation excluding those countries, ++so that distribution is permitted only in or among countries not thus ++excluded. In such case, this License incorporates the limitation as if ++written in the body of this License. ++ ++ 13. The Free Software Foundation may publish revised and/or new ++versions of the Lesser General Public License from time to time. ++Such new versions will be similar in spirit to the present version, ++but may differ in detail to address new problems or concerns. ++ ++Each version is given a distinguishing version number. If the Library ++specifies a version number of this License which applies to it and ++"any later version", you have the option of following the terms and ++conditions either of that version or of any later version published by ++the Free Software Foundation. If the Library does not specify a ++license version number, you may choose any version ever published by ++the Free Software Foundation. ++ ++ 14. If you wish to incorporate parts of the Library into other free ++programs whose distribution conditions are incompatible with these, ++write to the author to ask for permission. For software which is ++copyrighted by the Free Software Foundation, write to the Free ++Software Foundation; we sometimes make exceptions for this. Our ++decision will be guided by the two goals of preserving the free status ++of all derivatives of our free software and of promoting the sharing ++and reuse of software generally. ++ ++ NO WARRANTY ++ ++ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO ++WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. ++EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR ++OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY ++KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE ++IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE ++LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME ++THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. ++ ++ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN ++WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY ++AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU ++FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR ++CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE ++LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING ++RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A ++FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF ++SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH ++DAMAGES. ++ ++ END OF TERMS AND CONDITIONS ++ ++ How to Apply These Terms to Your New Libraries ++ ++ If you develop a new library, and you want it to be of the greatest ++possible use to the public, we recommend making it free software that ++everyone can redistribute and change. You can do so by permitting ++redistribution under these terms (or, alternatively, under the terms of the ++ordinary General Public License). ++ ++ To apply these terms, attach the following notices to the library. It is ++safest to attach them to the start of each source file to most effectively ++convey the exclusion of warranty; and each file should have at least the ++"copyright" line and a pointer to where the full notice is found. ++ ++ ++ Copyright (C) ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with this library; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ ++Also add information on how to contact you by electronic and paper mail. ++ ++You should also get your employer (if you work as a programmer) or your ++school, if any, to sign a "copyright disclaimer" for the library, if ++necessary. Here is a sample; alter the names: ++ ++ Yoyodyne, Inc., hereby disclaims all copyright interest in the ++ library `Frob' (a library for tweaking knobs) written by James Random Hacker. ++ ++ , 1 April 1990 ++ Ty Coon, President of Vice ++ ++That's all there is to it! ++ ++ +diff --git a/libclamav/libmspack-0.4alpha/ChangeLog b/libclamav/libmspack-0.4alpha/ChangeLog +new file mode 100644 +index 000000000000..2d3cf198d499 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/ChangeLog +@@ -0,0 +1,491 @@ ++2013-05-27 Stuart Caie ++ ++ * test/oabx.c: added new example command for unpacking OAB files. ++ ++2013-05-17 Stuart Caie ++ ++ * mspack.h: Support for decompressing a new file format, the Exchange ++ Offline Address Book (OAB). Thanks to David Woodhouse for writing ++ the implementation. I've bumped the version to 0.4alpha in celebration. ++ ++2012-04-15 Stuart Caie ++ ++ * chmd_read_headers(): More thorough validation of CHM header values. ++ Thanks to Sergei Trofimovich for finding sample files. ++ ++ * read_reset_table(): Better test for overflow. Thanks again to ++ Sergei Trofimovich for generating a good example. ++ ++ * test/chminfo.c: this test program reads the reset table by itself ++ and was also susceptible to the same overflow problems. ++ ++2012-03-16 Stuart Caie ++ ++ * Makefile.am, configure.ac: make the GCC warning flags conditional ++ on using the GCC compiler. Thanks to Dagobert Michelsen for letting ++ me know. ++ ++2011-11-25 Stuart Caie ++ ++ * lzxd_decompress(): Prevent matches that go beyond the start ++ of the LZX stream. Thanks to Sergei Trofimovich for testing ++ with valgrind and finding a corrupt sample file that exercises ++ this scenario. ++ ++2011-11-23 Stuart Caie ++ ++ * chmd_fast_find(): add a simple check against infinite PGML ++ loops. Thanks to Sergei Trofimovich for finding sample files. ++ Multi-step PGML or PGMI infinite loops remain possible. ++ ++2011-06-17 Stuart Caie ++ ++ * read_reset_table(): wasn't reading the right offset for getting ++ the LZX uncompressed length. Thanks to Sergei Trofimovich for ++ finding the bug. ++ ++2011-05-31 Stuart Caie ++ ++ * kwajd.c, mszipd.c: KWAJ type 4 files (MSZIP) are now supported. ++ Thanks to Clive Turvey for sending me the format details. ++ ++ * doc/szdd_kwaj_format.html: Updated documentation to cover ++ KWAJ's MSZIP compression. ++ ++2011-05-11 Stuart Caie ++ ++ * cabd_find(): rethought how large vs small file support is ++ handled, as users were getting "library not compiled to support ++ large files" message on some small files. Now checks for actual ++ off_t overflow, rather than trying to preempt it. ++ ++2011-05-10: Stuart Caie ++ ++ * chmd.c: implemented fast_find() ++ ++ * test/chmx.c: removed the multiple extraction orders, now it just ++ extracts in the fastest order ++ ++ * test/chmd_order.c: new program added to test that different ++ extraction orders don't affect the results of extraction ++ ++ * test/chmd_find.c: new program to test that fast_find() works. ++ Either supply your own filename to find, or it will try finding ++ every file in the CHM. ++ ++ * configure.ac: because CHM fast find requires case-insensitive ++ comparisons, tolower() or towlower() are used where possible. ++ These functions and their headers are checked for. ++ ++ * mspack.h: exposed struct mschmd_sec_mscompressed's spaninfo ++ and struct mschmd_header's first_pmgl, last_pmgl and chunk_cache ++ to the world. Check that the CHM decoder version is v2 or higher ++ before using them. ++ ++ * system.c: set CHM decoder version to v2 ++ ++2011-04-27: Stuart Caie ++ ++ * many files: Made C++ compilers much happier with libmspack. ++ Changed char * to const char * where possible. ++ ++ * mspack.h: Changed user-supplied char * to const char *. ++ Unless you've written your own mspack_system implementation, ++ you will likely be unaffected. ++ If you have written your own mspack_system implementation: ++ 1: change open() so it takes a const char *filename ++ 2: change message() so it takes a const char *format ++ If you cast your function into the mspack_system struct, ++ you can change the cast instead of the function. ++ ++2011-04-27: Stuart Caie ++ ++ * Makefile.am: changed CFLAGS from "-Wsign-compare -Wconversion ++ -pedantic" to "-W -Wno-unused". This enables more warnings, and ++ disables these specific warnings which are now a hinderance. ++ ++2011-04-27: Stuart Caie ++ ++ * test/cabrip.c, test/chminfo.c: used macros from system.h for ++ printing offsets and reading 64-bit values, rather than ++ reinvent the wheel. ++ ++ * cabd_can_merge_folders(): declare variables at the start of ++ a block so older C compilers won't choke. ++ ++ * cabd_find(): avoid compiler complaints about non-initialised ++ variables. We know they'll get initialised before use, but the ++ compiler can't reverse a state machine to draw the same conclusion. ++ ++2011-04-26: Stuart Caie ++ ++ * configure.ac, mspack/system.h: Added a configure test to get ++ the size of off_t. If off_t is 8 bytes or more, we presume this ++ system has large file support. This fixes LFS detection for Fedora ++ x86_64 and Darwin/Mac OS X, neither of which declare FILESIZEBITS in ++ . It's not against the POSIX standard to do this: "A ++ definition of [FILESIZEBITS] shall be omitted from the ++ header on specific implementations where the corresponding value is ++ equal to or greater than the stated minimum, but where the value can ++ vary depending on the file to which it is applied." ++ (http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html) ++ Thanks to Edward Sheldrake for the patch. ++ ++2011-04-26: Stuart Caie ++ ++ * chmd.c: all 64-bit integer reads are now consolidated into ++ the read_off64() function ++ ++ * chmd_read_headers(): this function has been made resilient ++ against accessing memory past the end of a chunk. Thanks to ++ Sergei Trofimovich for sending me examples and analysis. ++ ++ * chmd_init_decomp(): this function now reads the SpanInfo file ++ if the ResetTable file isn't available, it also checks that each ++ system file it needs is large enough before accessing it, and ++ some of its code has been split into several new functions: ++ find_sys_file(), read_reset_table() and read_spaninfo() ++ ++2011-04-26: Stuart Caie ++ ++ * mspack.h, chmd.c: now reads the SpanInfo system file if the ++ ResetTable file isn't available. This adds a new spaninfo pointer ++ into struct mschmd_sec_mscompressed ++ ++2011-04-26: Stuart Caie ++ ++ * test/chminfo.c: more sanity checks for corrupted CHM files where ++ entries go past the end of a PGML/PGMI chunk, thanks to ++ Sergei Trofimovich for sending me examples and analysis. ++ ++2011-04-25: Stuart Caie ++ ++ * cabd_merge(): Drew D'Addesio showed me spanning cabinets which ++ don't have all the CFFILE entries they should, but otherwise have ++ all necessary data for extraction. Changed the merging folders ++ test to be less strict; if folders don't exactly match, warn which ++ files are missing, but allow merging if at least one necessary ++ file is present. ++ ++2010-09-24: Stuart Caie ++ ++ * readhuff.h: Don't let build_decode_table() allow empty trees. ++ It's meant to be special case just for the LZX length tree, so ++ move that logic out to the LZX code. Thanks to Danny Kroshin for ++ discovering the bug. ++ ++ * lzxd.c: Allow empty length trees, but not other trees. If ++ the length tree is empty, fail if asked to decode a length symbol. ++ Again, thanks to Danny Kroshin for discovering the bug. ++ ++2010-09-20: Stuart Caie ++ ++ * Makefile.am: Set EXTRA_DIST so it doesn't include .svn ++ directories in the distribution, but does include docs. ++ ++2010-09-20: Stuart Caie ++ ++ * Makefile.am, configure.ac: Use modern auto* practises; turn on ++ automake silent rules where possible, use "m4" directory for libtool ++ macros, use LT_INIT instead of AC_PROG_LIBTOOL and use AM_CPPFLAGS ++ instead of INCLUDES. Thanks to Sergei Trofimovich for the patch. ++ ++2010-09-15: Stuart Caie ++ ++ * many files: Made the code compile with C++ ++ - Renamed all 'this' variables/parameters to 'self' ++ - Added casts to all memory allocations. ++ - Added extern "C" to header files with extern declarations. ++ - Made system.c include system.h. ++ - Changed the K&R-style headers to ANSI-style headers in md5.c ++ ++2010-08-04: Stuart Caie ++ ++ * many files: removed unnecessary include ++ ++2010-07-19: Stuart Caie ++ ++ * cabd_md5.c, chmd_md5.c: Replace writing files to disk then ++ MD5summing them, with an MD5summer built into mspack_system. ++ Much, much faster results. ++ ++ * qtmd_decompress(): Robert Riebisch pointed out a Quantum ++ data integrity check that could never be tripped, because ++ frame_todo is unsigned, so it will never be decremented ++ below zero. Replaced the check with one that assumes that ++ decrementing past zero wraps frame_todo round to a number ++ more than its maximum value (QTM_FRAME_SIZE). ++ ++2010-07-18: Stuart Caie ++ ++ * cabd.c: Special logic to pass cabd_sys_read() errors back ++ to cabd_extract() wasn't compatible with the decompressor ++ logic of returning the same error repeatedly once unpacking ++ fails. This meant that if decompressing failed because of ++ a read error, then the next file in the same folder would ++ come back as "no error", but the decompressed wouldn't have ++ even attempted to decompress the file. Added a new state ++ variable, read_error, with the same lifespan as a decompressor, ++ to pass the underlying reason for MSPACK_ERR_READ errors back. ++ ++ * mszipd.c: improve MS-ZIP recovery by saving all the bytes ++ decoded prior to a block failing. This requires remembering ++ how far we got through the block, so the code has been made ++ slightly slower (about 0.003 seconds slower per gigabyte ++ unpacked) by removing the local variable window_posn ++ and keeping it in the state structure instead. ++ ++2010-07-16: Stuart Caie ++ ++ * Makefile.am: strange interactions. When -std=c99 is used, ++ my Ubuntu's (libc6-dev 2.11.1-0ubuntu7.2) does NOT ++ define fseeko() unless _LARGEFILE_SOURCE is also defined. But ++ configure always uses -std=gnu99, not -std=c99, so its test ++ determines _LARGEFILE_SOURCE isn't needed but HAVE_FSEEKO is ++ true. The implicit fseeko definition has a 32-bit rather than ++ 64-bit offset, which means the mode parameter is interpreted ++ as part of the offset, and the mode is taken from the stack, ++ which is generally 0 (SEEK_SET). This breaks all SEEK_CURs. ++ The code works fine when -std=c99 is not set, so just remove ++ it for the time being. ++ ++2010-07-12: Stuart Caie ++ ++ * system.c: Reject reading/writing a negative number of bytes. ++ ++ * chmd.c: allow zero-length files to be seen. Previously they were ++ skipped because they were mistaken for directory entries. ++ ++2010-07-08: Stuart Caie ++ ++ * qtmd.c: Larry Frieson found an important bug in the Quantum ++ decoder. Window wraps flush all unwritten data to disk. ++ However, sometimes less data is needed, which makes ++ out_bytes negative, which is then passed to write(). Some ++ write() implementations treat negative sizes it as a large ++ positive integer and segfault trying to write the buffer. ++ ++ * Makefile.am, test/*.c: fixed automake file so that the ++ package passes a "make distcheck". ++ ++2010-07-07: Stuart Caie ++ ++ * doc/szdd_kwaj_format.html: explain SZDD/KWAJ file format. ++ ++ * lzssd.c: fixed SZDD decompression bugs. ++ ++ * test/chmd_compare: Add scripts for comparing chmd_md5 against ++ Microsoft's own code. ++ ++ * test/chmd_md5.c: remove the need to decompress everything ++ twice, as this is already in chmx.c if needed. ++ ++2010-07-06: Stuart Caie ++ ++ * many files: added SZDD and KWAJ decompression support. ++ ++2010-06-18: Stuart Caie ++ ++ * system.h: expanded the test for 64-bit largefile support so ++ it also works on 64-bit native operating systems where you ++ don't have to define _FILE_OFFSET_BITS. ++ ++2010-06-17: Stuart Caie ++ ++ * libmspack.pc.in: Added pkg-config support. Thanks to ++ Patrice Dumas for the patch. ++ ++2010-06-14: Stuart Caie ++ ++ * qtmd.c, lzxd.c, mszipd.c: created new headers, readbits.h and ++ readhuff.h, which bundle up the bit-reading and huffman-reading ++ code found in the MSZIP, LZX and Quantum decoders. ++ ++2010-06-11: Stuart Caie ++ ++ * qtmd_static_init(): Removed function in favour of static const ++ tables, same rationale as for lzxd_static_init(). ++ ++ * qtmd_read_input(), zipd_read_input(): After testing against my ++ set of CABs from the wild, I've found both these functions _need_ ++ an extra EOF flag, like lzxd_read_input() has. So I've added ++ it. This means CABs get decoded properly AND there's no reading ++ fictional bytes. ++ ++2010-06-03: Stuart Caie ++ ++ * test/cabd_md5.c: updated this so it has better output and ++ doesn't need to be in the same directory as the files for multi- ++ part sets. ++ ++2010-05-20: Stuart Caie ++ ++ * qtmd_read_input(), zipd_read_input(): Both these functions are ++ essentially copies of lzxd_read_input(), but that has a feature ++ they don't have - an extra EOF flag. So if EOF is ++ encountered (sys->read() returns 0 bytes), these don't pass on the ++ error. Their respective bit-reading functions that called them ++ then go on to access at least one byte of the input buffer, which ++ doesn't exist as sys->read() returned 0. Thanks to Michael ++ Vidrevich for spotting this and providing a test case. ++ ++2010-05-20: Stuart Caie ++ ++ * system.h: It turns out no configure.ac tests are needed to ++ decide between __func__ and __FUNCTION__, so I put the standard ++ one (__func__) back into the D() macro, along with some ++ special-case ifdefs for old versions of GCC. ++ ++ * lzxd_static_init(): Removed function in favour of static const ++ tables. Jorge Lodos thinks it causes multithreading problems, I ++ disagree. However, there are speed benefits to declaring the ++ tables as static const. ++ ++ * cabd_init_decomp(): Fixed code which never runs but would write ++ to a null pointer if it could. Changed it to an assert() as it ++ will only trip if someone rewrites the internals of cabd.c. Thanks ++ to Jorge Lodos for finding it. ++ ++ * inflate(): Fixed an off-by-one error: if the LITERAL table ++ emitted code 286, this would read one byte past the end of ++ lit_extrabits[]. Thanks to Jorge Lodos for finding it. ++ ++2010-05-06: Stuart Caie ++ ++ * test/cabrip.c, test/chminfo.c: add fseeko() support ++ ++2009-06-01: Stuart Caie ++ ++ * README: clarify the extended license terms ++ ++ * doc, Makefile.am: make the doxygen makefile work when using ++ an alternate build directory ++ ++2006-09-20: Stuart Caie ++ ++ * system.h: I had a choice of adding more to configure.ac to ++ test for __func__ and __FUNCTION__, or just removing __FUNCTION__ ++ from the D() macro. I chose the latter. ++ ++ * Makefile.am: Now the --enable-debug in configure will actually ++ apply -DDEBUG to the sources. ++ ++2006-09-20: Stuart Caie ++ ++ * qtmd_decompress(): Fixed a major bug in the QTM decoder, as ++ reported by Tomasz Kojm last year. Removed the restriction on ++ window sizes as a result. Correctly decodes the XLVIEW cabinets. ++ ++2006-08-31: Stuart Caie ++ ++ * lzxd_decompress(): Two major bugs fixed. Firstly, the R0/R1/R2 ++ local variables weren't set to 1 after lzxd_reset_state(). ++ Secondly, the LZX decompression stream can sometimes become ++ odd-aligned (after an uncompressed block) and the next 16 bit ++ fetch needs to be split across two input buffers, ENSURE_BITS() ++ didn't cover this case. Many thanks to Igor Glucksmann for ++ discovering both these bugs. ++ ++2005-06-30: Stuart Caie ++ ++ * cabd_search(): fixed problems with searching files > 4GB for ++ cabinets. ++ ++2005-06-23: Stuart Caie ++ ++ * qtmd_init(): The QTM decoder is broken for QTM streams with a ++ window size less than the frame size. Until this is fixed, fail ++ to initialise QTM window sizes less than 15. Thanks to Tomasz Kojm ++ for finding the bug. ++ ++2005-03-22: Stuart Caie ++ ++ * system.h: now undefs "read", as the latest glibc defines read() ++ as a macro which messes everything up. Thanks to Ville Skyttä for ++ the update. ++ ++2005-03-14: Stuart Caie ++ ++ * test/multifh.c: write an mspack_system implementation that can ++ handle normal disk files, open file handles, open file descriptors ++ and raw memory all at the same time. ++ ++2005-02-24: Stuart Caie ++ ++ * chmd_read_headers(): avoid infinite loop when chmhs1_ChunkSize is ++ zero. Thanks to Serge Semashko for the research and discovery. ++ ++2005-02-18: Stuart Caie ++ ++ * mspack.h: renamed the "interface" parameter of mspack_version() to ++ "entity", as interface is a reserved word in C++. Thanks to Yuriy Z ++ for the discovery. ++ ++2004-12-09: Stuart Caie ++ ++ * lzss.h, szdd.h, szddd.h: more work on the SZDD/LZSS design. ++ ++2004-06-12: Stuart Caie ++ ++ * lzxd_static_init(): removed write to lzxd_extra_bits[52], thanks ++ to Nigel Horne from the ClamAV project. ++ ++2004-04-23: Stuart Caie ++ ++ * mspack.h: changed 'this' parameters to 'self' to allow compiling in ++ C++ compilers, thanks to Michal Cihar for the suggestion. ++ ++ * mspack.h, system.h, mspack.def, winbuild.sh: integrated some changes ++ from Petr Blahos to let libmspack build as a Win32 DLL. ++ ++ * chmd_fast_find(): added the first part of this code, and comments ++ sufficient to finish it :) ++ ++2004-04-08 Stuart Caie ++ ++ * test/chminfo.c: added a program for dumping useful data from CHM ++ files, e.g. index entries and reset tables. I wrote this a while ago ++ for investigating a corrupt cabinet, but I never committed it. ++ ++2004-03-26 Stuart Caie ++ ++ * test/cabd_memory.c: added a new test example which shows an ++ mspack_system implementation that reads and writes from memory only, ++ no file I/O. Even the source code has a little cab file embedded in it. ++ ++2004-03-10 Stuart Caie ++ ++ * cabd.c: updated the location of the CAB SDK. ++ ++ * cabd.c: changed a couple of MSPACK_ERR_READ errors not based on ++ read() failures into MSPACK_ERR_DATAFORMAT errors. ++ ++ * mszipd_decompress(): repair mode now aborts after writing a ++ repaired block if the error was a hard error (e.g. read error, out ++ of blocks, etc) ++ ++2004-03-08 Stuart Caie ++ ++ * Makefile.am: now builds and installs a versioned library. ++ ++ * mszipd.c: completed a new MS-ZIP and inflate implementation. ++ ++ * system.c: added mspack_version() and committed to a versioned ++ ABI for the library. ++ ++ * cabd.c: made mszip repair functionality work correctly. ++ ++ * cabd.c: now identifies invalid block headers ++ ++ * doc/: API documentation is now included with the library, not ++ just on the web. ++ ++ * chmd.c: fixed error messages and 64-bit debug output. ++ ++ * chmd.c: now also catches NULL files in section 1. ++ ++ * test/chmx.c: now acts more like cabextract. ++ ++2003-08-29 Stuart Caie ++ ++ * ChangeLog: started keeping a ChangeLog :) +diff --git a/libclamav/libmspack-0.4alpha/INSTALL b/libclamav/libmspack-0.4alpha/INSTALL +new file mode 100644 +index 000000000000..a1e89e18ad20 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/INSTALL +@@ -0,0 +1,370 @@ ++Installation Instructions ++************************* ++ ++Copyright (C) 1994-1996, 1999-2002, 2004-2011 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. ++ ++ HP-UX `make' updates targets which have the same time stamps as ++their prerequisites, which makes it generally unusable when shipped ++generated files such as `configure' are involved. Use GNU `make' ++instead. ++ ++ 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. ++ +diff --git a/libclamav/libmspack-0.4alpha/Makefile.am b/libclamav/libmspack-0.4alpha/Makefile.am +new file mode 100644 +index 000000000000..4f249275001a +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/Makefile.am +@@ -0,0 +1,100 @@ ++EXTRA_DIST = $(srcdir)/debian/* $(srcdir)/doc/* $(srcdir)/test/test_files/*/* ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA = libmspack.pc ++ ++dist-hook: ++ -rm -f $(distdir)/*.la ++ ++ACLOCAL_AMFLAGS = -I m4 ++AM_CFLAGS = ++# add "-DMSPACK_NO_DEFAULT_SYSTEM" to remove default mspack_system ++if DEBUG ++AM_CFLAGS += -DDEBUG ++endif ++if GCC ++AM_CFLAGS += -Wall -W -Wno-unused ++endif ++AM_CPPFLAGS = -I$(top_srcdir)/mspack -I$(top_srcdir)/test ++ ++lib_LTLIBRARIES = libmspack.la ++include_HEADERS = mspack/mspack.h ++ ++noinst_LTLIBRARIES = libmscabd.la libmschmd.la ++noinst_PROGRAMS = test/cabd_md5 test/cabd_memory test/cabd_test \ ++ test/cabrip test/chmd_md5 test/chmx test/chminfo \ ++ test/multifh test/expand test/chmd_find \ ++ test/chmd_order test/oabx ++ ++libmspack_la_SOURCES = mspack/mspack.h \ ++ mspack/system.h mspack/system.c \ ++ mspack/cab.h mspack/cabc.c mspack/cabd.c \ ++ mspack/chm.h mspack/chmc.c mspack/chmd.c \ ++ mspack/hlp.h mspack/hlpc.c mspack/hlpd.c \ ++ mspack/lit.h mspack/litc.c mspack/litd.c \ ++ mspack/kwaj.h mspack/kwajc.c mspack/kwajd.c \ ++ mspack/szdd.h mspack/szddc.c mspack/szddd.c \ ++ mspack/oab.h mspack/oabc.c mspack/oabd.c \ ++ mspack/lzx.h mspack/lzxc.c mspack/lzxd.c \ ++ mspack/mszip.h mspack/mszipc.c mspack/mszipd.c \ ++ mspack/qtm.h mspack/qtmd.c \ ++ mspack/readbits.h mspack/readhuff.h \ ++ mspack/lzss.h mspack/lzssd.c \ ++ mspack/des.h mspack/sha.h \ ++ mspack/crc32.c mspack/crc32.h ++libmspack_la_LDFLAGS = -export-symbols-regex '^mspack_' -version-info 1:0:1 ++ ++libmscabd_la_SOURCES = mspack/mspack.h \ ++ mspack/system.h mspack/system.c \ ++ mspack/cab.h mspack/cabd.c \ ++ mspack/lzx.h mspack/lzxd.c \ ++ mspack/mszip.h mspack/mszipd.c \ ++ mspack/qtm.h mspack/qtmd.c \ ++ mspack/readbits.h mspack/readhuff.h ++libmscabd_la_LDFLAGS = -export-symbols-regex '^mspack_' ++ ++libmschmd_la_SOURCES = mspack/mspack.h \ ++ mspack/system.h mspack/system.c \ ++ mspack/chm.h mspack/chmd.c \ ++ mspack/lzx.h mspack/lzxd.c \ ++ mspack/readbits.h mspack/readhuff.h ++libmschmd_la_LDFLAGS = -export-symbols-regex '^mspack_' ++ ++test_chmx_SOURCES = test/chmx.c test/error.h libmschmd.la ++test_chmx_LDADD = libmschmd.la ++ ++test_chmd_md5_SOURCES = test/chmd_md5.c test/md5.c test/md5.h test/md5_fh.h \ ++ test/error.h libmschmd.la ++test_chmd_md5_LDADD = libmschmd.la ++ ++test_cabd_md5_SOURCES = test/cabd_md5.c test/md5.c test/md5.h test/md5_fh.h \ ++ test/error.h libmscabd.la ++test_cabd_md5_LDADD = libmscabd.la ++ ++test_cabd_test_SOURCES= test/cabd_test.c libmscabd.la ++test_cabd_test_LDADD = libmscabd.la ++ ++test_cabrip_SOURCES = test/cabrip.c libmscabd.la ++test_cabrip_LDADD = libmscabd.la ++ ++test_cabd_memory_SOURCES = test/cabd_memory.c libmscabd.la ++test_cabd_memory_LDADD = libmscabd.la ++ ++test_chminfo_SOURCES = test/chminfo.c libmschmd.la ++test_chminfo_LDADD = libmschmd.la ++ ++test_multifh_SOURCES = test/multifh.c libmscabd.la ++test_multifh_LDADD = libmscabd.la ++ ++test_expand_SOURCES = test/expand.c test/error.h libmspack.la ++test_expand_LDADD = libmspack.la ++ ++test_chmd_find_SOURCES = test/chmd_find.c test/error.h libmschmd.la ++test_chmd_find_LDADD = libmschmd.la ++ ++test_chmd_order_SOURCES = test/chmd_order.c test/md5.c test/md5.h test/md5_fh.h \ ++ test/error.h libmschmd.la ++test_chmd_order_LDADD = libmschmd.la ++ ++test_oabx_SOURCES = test/oabx.c test/md5.c test/md5.h test/md5_fh.h \ ++ test/error.h libmspack.la ++test_oabx_LDADD = libmspack.la +diff --git a/libclamav/libmspack-0.4alpha/Makefile.in b/libclamav/libmspack-0.4alpha/Makefile.in +new file mode 100644 +index 000000000000..2c1e02e9aa9c +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/Makefile.in +@@ -0,0 +1,1371 @@ ++# Makefile.in generated by automake 1.11.3 from Makefile.am. ++# @configure_input@ ++ ++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, ++# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software ++# Foundation, Inc. ++# This Makefile.in is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++@SET_MAKE@ ++ ++ ++ ++ ++VPATH = @srcdir@ ++pkgdatadir = $(datadir)/@PACKAGE@ ++pkgincludedir = $(includedir)/@PACKAGE@ ++pkglibdir = $(libdir)/@PACKAGE@ ++pkglibexecdir = $(libexecdir)/@PACKAGE@ ++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd ++install_sh_DATA = $(install_sh) -c -m 644 ++install_sh_PROGRAM = $(install_sh) -c ++install_sh_SCRIPT = $(install_sh) -c ++INSTALL_HEADER = $(INSTALL_DATA) ++transform = $(program_transform_name) ++NORMAL_INSTALL = : ++PRE_INSTALL = : ++POST_INSTALL = : ++NORMAL_UNINSTALL = : ++PRE_UNINSTALL = : ++POST_UNINSTALL = : ++build_triplet = @build@ ++host_triplet = @host@ ++# add "-DMSPACK_NO_DEFAULT_SYSTEM" to remove default mspack_system ++@DEBUG_TRUE@am__append_1 = -DDEBUG ++@GCC_TRUE@am__append_2 = -Wall -W -Wno-unused ++noinst_PROGRAMS = test/cabd_md5$(EXEEXT) test/cabd_memory$(EXEEXT) \ ++ test/cabd_test$(EXEEXT) test/cabrip$(EXEEXT) \ ++ test/chmd_md5$(EXEEXT) test/chmx$(EXEEXT) \ ++ test/chminfo$(EXEEXT) test/multifh$(EXEEXT) \ ++ test/expand$(EXEEXT) test/chmd_find$(EXEEXT) \ ++ test/chmd_order$(EXEEXT) test/oabx$(EXEEXT) ++subdir = . ++DIST_COMMON = README $(am__configure_deps) $(include_HEADERS) \ ++ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ ++ $(srcdir)/config.h.in $(srcdir)/libmspack.pc.in \ ++ $(top_srcdir)/configure $(top_srcdir)/doc/Doxyfile.in \ ++ $(top_srcdir)/doc/Makefile.in AUTHORS COPYING.LIB ChangeLog \ ++ INSTALL NEWS TODO config.guess config.sub depcomp install-sh \ ++ ltmain.sh missing ++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 ++am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ ++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ ++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ ++ $(top_srcdir)/configure.ac ++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ ++ $(ACLOCAL_M4) ++am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ ++ configure.lineno config.status.lineno ++mkinstalldirs = $(install_sh) -d ++CONFIG_HEADER = config.h ++CONFIG_CLEAN_FILES = doc/Makefile doc/Doxyfile libmspack.pc ++CONFIG_CLEAN_VPATH_FILES = ++am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; ++am__vpath_adj = case $$p in \ ++ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ ++ *) f=$$p;; \ ++ esac; ++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; ++am__install_max = 40 ++am__nobase_strip_setup = \ ++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` ++am__nobase_strip = \ ++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" ++am__nobase_list = $(am__nobase_strip_setup); \ ++ for p in $$list; do echo "$$p $$p"; done | \ ++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ ++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ ++ if (++n[$$2] == $(am__install_max)) \ ++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ ++ END { for (dir in files) print dir, files[dir] }' ++am__base_list = \ ++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ ++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' ++am__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)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" \ ++ "$(DESTDIR)$(includedir)" ++LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) ++libmscabd_la_LIBADD = ++am_libmscabd_la_OBJECTS = system.lo cabd.lo lzxd.lo mszipd.lo qtmd.lo ++libmscabd_la_OBJECTS = $(am_libmscabd_la_OBJECTS) ++AM_V_lt = $(am__v_lt_@AM_V@) ++am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) ++am__v_lt_0 = --silent ++libmscabd_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ ++ $(libmscabd_la_LDFLAGS) $(LDFLAGS) -o $@ ++libmschmd_la_LIBADD = ++am_libmschmd_la_OBJECTS = system.lo chmd.lo lzxd.lo ++libmschmd_la_OBJECTS = $(am_libmschmd_la_OBJECTS) ++libmschmd_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ ++ $(libmschmd_la_LDFLAGS) $(LDFLAGS) -o $@ ++libmspack_la_LIBADD = ++am_libmspack_la_OBJECTS = system.lo cabc.lo cabd.lo chmc.lo chmd.lo \ ++ hlpc.lo hlpd.lo litc.lo litd.lo kwajc.lo kwajd.lo szddc.lo \ ++ szddd.lo oabc.lo oabd.lo lzxc.lo lzxd.lo mszipc.lo mszipd.lo \ ++ qtmd.lo lzssd.lo crc32.lo ++libmspack_la_OBJECTS = $(am_libmspack_la_OBJECTS) ++libmspack_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ ++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ ++ $(libmspack_la_LDFLAGS) $(LDFLAGS) -o $@ ++PROGRAMS = $(noinst_PROGRAMS) ++am_test_cabd_md5_OBJECTS = cabd_md5.$(OBJEXT) md5.$(OBJEXT) ++test_cabd_md5_OBJECTS = $(am_test_cabd_md5_OBJECTS) ++test_cabd_md5_DEPENDENCIES = libmscabd.la ++am__dirstamp = $(am__leading_dot)dirstamp ++am_test_cabd_memory_OBJECTS = cabd_memory.$(OBJEXT) ++test_cabd_memory_OBJECTS = $(am_test_cabd_memory_OBJECTS) ++test_cabd_memory_DEPENDENCIES = libmscabd.la ++am_test_cabd_test_OBJECTS = cabd_test.$(OBJEXT) ++test_cabd_test_OBJECTS = $(am_test_cabd_test_OBJECTS) ++test_cabd_test_DEPENDENCIES = libmscabd.la ++am_test_cabrip_OBJECTS = cabrip.$(OBJEXT) ++test_cabrip_OBJECTS = $(am_test_cabrip_OBJECTS) ++test_cabrip_DEPENDENCIES = libmscabd.la ++am_test_chmd_find_OBJECTS = chmd_find.$(OBJEXT) ++test_chmd_find_OBJECTS = $(am_test_chmd_find_OBJECTS) ++test_chmd_find_DEPENDENCIES = libmschmd.la ++am_test_chmd_md5_OBJECTS = chmd_md5.$(OBJEXT) md5.$(OBJEXT) ++test_chmd_md5_OBJECTS = $(am_test_chmd_md5_OBJECTS) ++test_chmd_md5_DEPENDENCIES = libmschmd.la ++am_test_chmd_order_OBJECTS = chmd_order.$(OBJEXT) md5.$(OBJEXT) ++test_chmd_order_OBJECTS = $(am_test_chmd_order_OBJECTS) ++test_chmd_order_DEPENDENCIES = libmschmd.la ++am_test_chminfo_OBJECTS = chminfo.$(OBJEXT) ++test_chminfo_OBJECTS = $(am_test_chminfo_OBJECTS) ++test_chminfo_DEPENDENCIES = libmschmd.la ++am_test_chmx_OBJECTS = chmx.$(OBJEXT) ++test_chmx_OBJECTS = $(am_test_chmx_OBJECTS) ++test_chmx_DEPENDENCIES = libmschmd.la ++am_test_expand_OBJECTS = expand.$(OBJEXT) ++test_expand_OBJECTS = $(am_test_expand_OBJECTS) ++test_expand_DEPENDENCIES = libmspack.la ++am_test_multifh_OBJECTS = multifh.$(OBJEXT) ++test_multifh_OBJECTS = $(am_test_multifh_OBJECTS) ++test_multifh_DEPENDENCIES = libmscabd.la ++am_test_oabx_OBJECTS = oabx.$(OBJEXT) md5.$(OBJEXT) ++test_oabx_OBJECTS = $(am_test_oabx_OBJECTS) ++test_oabx_DEPENDENCIES = libmspack.la ++DEFAULT_INCLUDES = -I.@am__isrc@ ++depcomp = $(SHELL) $(top_srcdir)/depcomp ++am__depfiles_maybe = depfiles ++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_at = $(am__v_at_@AM_V@) ++am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) ++am__v_at_0 = @ ++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_GEN = $(am__v_GEN_@AM_V@) ++am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) ++am__v_GEN_0 = @echo " GEN " $@; ++SOURCES = $(libmscabd_la_SOURCES) $(libmschmd_la_SOURCES) \ ++ $(libmspack_la_SOURCES) $(test_cabd_md5_SOURCES) \ ++ $(test_cabd_memory_SOURCES) $(test_cabd_test_SOURCES) \ ++ $(test_cabrip_SOURCES) $(test_chmd_find_SOURCES) \ ++ $(test_chmd_md5_SOURCES) $(test_chmd_order_SOURCES) \ ++ $(test_chminfo_SOURCES) $(test_chmx_SOURCES) \ ++ $(test_expand_SOURCES) $(test_multifh_SOURCES) \ ++ $(test_oabx_SOURCES) ++DIST_SOURCES = $(libmscabd_la_SOURCES) $(libmschmd_la_SOURCES) \ ++ $(libmspack_la_SOURCES) $(test_cabd_md5_SOURCES) \ ++ $(test_cabd_memory_SOURCES) $(test_cabd_test_SOURCES) \ ++ $(test_cabrip_SOURCES) $(test_chmd_find_SOURCES) \ ++ $(test_chmd_md5_SOURCES) $(test_chmd_order_SOURCES) \ ++ $(test_chminfo_SOURCES) $(test_chmx_SOURCES) \ ++ $(test_expand_SOURCES) $(test_multifh_SOURCES) \ ++ $(test_oabx_SOURCES) ++DATA = $(pkgconfig_DATA) ++HEADERS = $(include_HEADERS) ++ETAGS = etags ++CTAGS = ctags ++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 ++DIST_ARCHIVES = $(distdir).tar.gz ++GZIP_ENV = --best ++distuninstallcheck_listfiles = find . -type f -print ++am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ ++ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' ++distcleancheck_listfiles = find . -type f -print ++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@ ++CPP = @CPP@ ++CPPFLAGS = @CPPFLAGS@ ++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@ ++EXEEXT = @EXEEXT@ ++FGREP = @FGREP@ ++GREP = @GREP@ ++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@ ++MAKEINFO = @MAKEINFO@ ++MANIFEST_TOOL = @MANIFEST_TOOL@ ++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@ ++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@ ++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@ ++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 = $(srcdir)/debian/* $(srcdir)/doc/* $(srcdir)/test/test_files/*/* ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA = libmspack.pc ++ACLOCAL_AMFLAGS = -I m4 ++AM_CFLAGS = $(am__append_1) $(am__append_2) ++AM_CPPFLAGS = -I$(top_srcdir)/mspack -I$(top_srcdir)/test ++lib_LTLIBRARIES = libmspack.la ++include_HEADERS = mspack/mspack.h ++noinst_LTLIBRARIES = libmscabd.la libmschmd.la ++libmspack_la_SOURCES = mspack/mspack.h \ ++ mspack/system.h mspack/system.c \ ++ mspack/cab.h mspack/cabc.c mspack/cabd.c \ ++ mspack/chm.h mspack/chmc.c mspack/chmd.c \ ++ mspack/hlp.h mspack/hlpc.c mspack/hlpd.c \ ++ mspack/lit.h mspack/litc.c mspack/litd.c \ ++ mspack/kwaj.h mspack/kwajc.c mspack/kwajd.c \ ++ mspack/szdd.h mspack/szddc.c mspack/szddd.c \ ++ mspack/oab.h mspack/oabc.c mspack/oabd.c \ ++ mspack/lzx.h mspack/lzxc.c mspack/lzxd.c \ ++ mspack/mszip.h mspack/mszipc.c mspack/mszipd.c \ ++ mspack/qtm.h mspack/qtmd.c \ ++ mspack/readbits.h mspack/readhuff.h \ ++ mspack/lzss.h mspack/lzssd.c \ ++ mspack/des.h mspack/sha.h \ ++ mspack/crc32.c mspack/crc32.h ++ ++libmspack_la_LDFLAGS = -export-symbols-regex '^mspack_' -version-info 1:0:1 ++libmscabd_la_SOURCES = mspack/mspack.h \ ++ mspack/system.h mspack/system.c \ ++ mspack/cab.h mspack/cabd.c \ ++ mspack/lzx.h mspack/lzxd.c \ ++ mspack/mszip.h mspack/mszipd.c \ ++ mspack/qtm.h mspack/qtmd.c \ ++ mspack/readbits.h mspack/readhuff.h ++ ++libmscabd_la_LDFLAGS = -export-symbols-regex '^mspack_' ++libmschmd_la_SOURCES = mspack/mspack.h \ ++ mspack/system.h mspack/system.c \ ++ mspack/chm.h mspack/chmd.c \ ++ mspack/lzx.h mspack/lzxd.c \ ++ mspack/readbits.h mspack/readhuff.h ++ ++libmschmd_la_LDFLAGS = -export-symbols-regex '^mspack_' ++test_chmx_SOURCES = test/chmx.c test/error.h libmschmd.la ++test_chmx_LDADD = libmschmd.la ++test_chmd_md5_SOURCES = test/chmd_md5.c test/md5.c test/md5.h test/md5_fh.h \ ++ test/error.h libmschmd.la ++ ++test_chmd_md5_LDADD = libmschmd.la ++test_cabd_md5_SOURCES = test/cabd_md5.c test/md5.c test/md5.h test/md5_fh.h \ ++ test/error.h libmscabd.la ++ ++test_cabd_md5_LDADD = libmscabd.la ++test_cabd_test_SOURCES = test/cabd_test.c libmscabd.la ++test_cabd_test_LDADD = libmscabd.la ++test_cabrip_SOURCES = test/cabrip.c libmscabd.la ++test_cabrip_LDADD = libmscabd.la ++test_cabd_memory_SOURCES = test/cabd_memory.c libmscabd.la ++test_cabd_memory_LDADD = libmscabd.la ++test_chminfo_SOURCES = test/chminfo.c libmschmd.la ++test_chminfo_LDADD = libmschmd.la ++test_multifh_SOURCES = test/multifh.c libmscabd.la ++test_multifh_LDADD = libmscabd.la ++test_expand_SOURCES = test/expand.c test/error.h libmspack.la ++test_expand_LDADD = libmspack.la ++test_chmd_find_SOURCES = test/chmd_find.c test/error.h libmschmd.la ++test_chmd_find_LDADD = libmschmd.la ++test_chmd_order_SOURCES = test/chmd_order.c test/md5.c test/md5.h test/md5_fh.h \ ++ test/error.h libmschmd.la ++ ++test_chmd_order_LDADD = libmschmd.la ++test_oabx_SOURCES = test/oabx.c test/md5.c test/md5.h test/md5_fh.h \ ++ test/error.h libmspack.la ++ ++test_oabx_LDADD = libmspack.la ++all: config.h ++ $(MAKE) $(AM_MAKEFLAGS) all-am ++ ++.SUFFIXES: ++.SUFFIXES: .c .lo .o .obj ++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) --gnu'; \ ++ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ ++ && exit 0; \ ++ exit 1;; \ ++ esac; \ ++ done; \ ++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ ++ $(am__cd) $(top_srcdir) && \ ++ $(AUTOMAKE) --gnu Makefile ++.PRECIOUS: Makefile ++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status ++ @case '$?' in \ ++ *config.status*) \ ++ echo ' $(SHELL) ./config.status'; \ ++ $(SHELL) ./config.status;; \ ++ *) \ ++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ ++ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ ++ esac; ++ ++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) ++ $(SHELL) ./config.status --recheck ++ ++$(top_srcdir)/configure: $(am__configure_deps) ++ $(am__cd) $(srcdir) && $(AUTOCONF) ++$(ACLOCAL_M4): $(am__aclocal_m4_deps) ++ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) ++$(am__aclocal_m4_deps): ++ ++config.h: stamp-h1 ++ @if test ! -f $@; then rm -f stamp-h1; else :; fi ++ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi ++ ++stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status ++ @rm -f stamp-h1 ++ cd $(top_builddir) && $(SHELL) ./config.status config.h ++$(srcdir)/config.h.in: $(am__configure_deps) ++ ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) ++ rm -f stamp-h1 ++ touch $@ ++ ++distclean-hdr: ++ -rm -f config.h stamp-h1 ++doc/Makefile: $(top_builddir)/config.status $(top_srcdir)/doc/Makefile.in ++ cd $(top_builddir) && $(SHELL) ./config.status $@ ++doc/Doxyfile: $(top_builddir)/config.status $(top_srcdir)/doc/Doxyfile.in ++ cd $(top_builddir) && $(SHELL) ./config.status $@ ++libmspack.pc: $(top_builddir)/config.status $(srcdir)/libmspack.pc.in ++ cd $(top_builddir) && $(SHELL) ./config.status $@ ++install-libLTLIBRARIES: $(lib_LTLIBRARIES) ++ @$(NORMAL_INSTALL) ++ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" ++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ ++ list2=; for p in $$list; do \ ++ if test -f $$p; then \ ++ list2="$$list2 $$p"; \ ++ else :; fi; \ ++ done; \ ++ test -z "$$list2" || { \ ++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ ++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ ++ } ++ ++uninstall-libLTLIBRARIES: ++ @$(NORMAL_UNINSTALL) ++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ ++ for p in $$list; do \ ++ $(am__strip_dir) \ ++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ ++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ ++ done ++ ++clean-libLTLIBRARIES: ++ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) ++ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ ++ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ ++ test "$$dir" != "$$p" || dir=.; \ ++ echo "rm -f \"$${dir}/so_locations\""; \ ++ rm -f "$${dir}/so_locations"; \ ++ done ++ ++clean-noinstLTLIBRARIES: ++ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) ++ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ ++ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ ++ test "$$dir" != "$$p" || dir=.; \ ++ echo "rm -f \"$${dir}/so_locations\""; \ ++ rm -f "$${dir}/so_locations"; \ ++ done ++libmscabd.la: $(libmscabd_la_OBJECTS) $(libmscabd_la_DEPENDENCIES) $(EXTRA_libmscabd_la_DEPENDENCIES) ++ $(AM_V_CCLD)$(libmscabd_la_LINK) $(libmscabd_la_OBJECTS) $(libmscabd_la_LIBADD) $(LIBS) ++libmschmd.la: $(libmschmd_la_OBJECTS) $(libmschmd_la_DEPENDENCIES) $(EXTRA_libmschmd_la_DEPENDENCIES) ++ $(AM_V_CCLD)$(libmschmd_la_LINK) $(libmschmd_la_OBJECTS) $(libmschmd_la_LIBADD) $(LIBS) ++libmspack.la: $(libmspack_la_OBJECTS) $(libmspack_la_DEPENDENCIES) $(EXTRA_libmspack_la_DEPENDENCIES) ++ $(AM_V_CCLD)$(libmspack_la_LINK) -rpath $(libdir) $(libmspack_la_OBJECTS) $(libmspack_la_LIBADD) $(LIBS) ++ ++clean-noinstPROGRAMS: ++ @list='$(noinst_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/$(am__dirstamp): ++ @$(MKDIR_P) test ++ @: > test/$(am__dirstamp) ++test/cabd_md5$(EXEEXT): $(test_cabd_md5_OBJECTS) $(test_cabd_md5_DEPENDENCIES) $(EXTRA_test_cabd_md5_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/cabd_md5$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_cabd_md5_OBJECTS) $(test_cabd_md5_LDADD) $(LIBS) ++test/cabd_memory$(EXEEXT): $(test_cabd_memory_OBJECTS) $(test_cabd_memory_DEPENDENCIES) $(EXTRA_test_cabd_memory_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/cabd_memory$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_cabd_memory_OBJECTS) $(test_cabd_memory_LDADD) $(LIBS) ++test/cabd_test$(EXEEXT): $(test_cabd_test_OBJECTS) $(test_cabd_test_DEPENDENCIES) $(EXTRA_test_cabd_test_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/cabd_test$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_cabd_test_OBJECTS) $(test_cabd_test_LDADD) $(LIBS) ++test/cabrip$(EXEEXT): $(test_cabrip_OBJECTS) $(test_cabrip_DEPENDENCIES) $(EXTRA_test_cabrip_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/cabrip$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_cabrip_OBJECTS) $(test_cabrip_LDADD) $(LIBS) ++test/chmd_find$(EXEEXT): $(test_chmd_find_OBJECTS) $(test_chmd_find_DEPENDENCIES) $(EXTRA_test_chmd_find_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/chmd_find$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_chmd_find_OBJECTS) $(test_chmd_find_LDADD) $(LIBS) ++test/chmd_md5$(EXEEXT): $(test_chmd_md5_OBJECTS) $(test_chmd_md5_DEPENDENCIES) $(EXTRA_test_chmd_md5_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/chmd_md5$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_chmd_md5_OBJECTS) $(test_chmd_md5_LDADD) $(LIBS) ++test/chmd_order$(EXEEXT): $(test_chmd_order_OBJECTS) $(test_chmd_order_DEPENDENCIES) $(EXTRA_test_chmd_order_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/chmd_order$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_chmd_order_OBJECTS) $(test_chmd_order_LDADD) $(LIBS) ++test/chminfo$(EXEEXT): $(test_chminfo_OBJECTS) $(test_chminfo_DEPENDENCIES) $(EXTRA_test_chminfo_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/chminfo$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_chminfo_OBJECTS) $(test_chminfo_LDADD) $(LIBS) ++test/chmx$(EXEEXT): $(test_chmx_OBJECTS) $(test_chmx_DEPENDENCIES) $(EXTRA_test_chmx_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/chmx$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_chmx_OBJECTS) $(test_chmx_LDADD) $(LIBS) ++test/expand$(EXEEXT): $(test_expand_OBJECTS) $(test_expand_DEPENDENCIES) $(EXTRA_test_expand_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/expand$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_expand_OBJECTS) $(test_expand_LDADD) $(LIBS) ++test/multifh$(EXEEXT): $(test_multifh_OBJECTS) $(test_multifh_DEPENDENCIES) $(EXTRA_test_multifh_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/multifh$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_multifh_OBJECTS) $(test_multifh_LDADD) $(LIBS) ++test/oabx$(EXEEXT): $(test_oabx_OBJECTS) $(test_oabx_DEPENDENCIES) $(EXTRA_test_oabx_DEPENDENCIES) test/$(am__dirstamp) ++ @rm -f test/oabx$(EXEEXT) ++ $(AM_V_CCLD)$(LINK) $(test_oabx_OBJECTS) $(test_oabx_LDADD) $(LIBS) ++ ++mostlyclean-compile: ++ -rm -f *.$(OBJEXT) ++ ++distclean-compile: ++ -rm -f *.tab.c ++ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cabc.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cabd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cabd_md5.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cabd_memory.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cabd_test.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cabrip.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmc.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmd_find.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmd_md5.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmd_order.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chminfo.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chmx.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expand.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hlpc.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hlpd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kwajc.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kwajd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/litc.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/litd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lzssd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lzxc.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lzxd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mszipc.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mszipd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multifh.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oabc.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oabd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oabx.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qtmd.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/system.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/szddc.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/szddd.Plo@am__quote@ ++ ++.c.o: ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 $< ++ ++.c.obj: ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 `$(CYGPATH_W) '$<'` ++ ++.c.lo: ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 $@ $< ++ ++system.lo: mspack/system.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT system.lo -MD -MP -MF $(DEPDIR)/system.Tpo -c -o system.lo `test -f 'mspack/system.c' || echo '$(srcdir)/'`mspack/system.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/system.Tpo $(DEPDIR)/system.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/system.c' object='system.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o system.lo `test -f 'mspack/system.c' || echo '$(srcdir)/'`mspack/system.c ++ ++cabd.lo: mspack/cabd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabd.lo -MD -MP -MF $(DEPDIR)/cabd.Tpo -c -o cabd.lo `test -f 'mspack/cabd.c' || echo '$(srcdir)/'`mspack/cabd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabd.Tpo $(DEPDIR)/cabd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/cabd.c' object='cabd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabd.lo `test -f 'mspack/cabd.c' || echo '$(srcdir)/'`mspack/cabd.c ++ ++lzxd.lo: mspack/lzxd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzxd.lo -MD -MP -MF $(DEPDIR)/lzxd.Tpo -c -o lzxd.lo `test -f 'mspack/lzxd.c' || echo '$(srcdir)/'`mspack/lzxd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lzxd.Tpo $(DEPDIR)/lzxd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/lzxd.c' object='lzxd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzxd.lo `test -f 'mspack/lzxd.c' || echo '$(srcdir)/'`mspack/lzxd.c ++ ++mszipd.lo: mspack/mszipd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mszipd.lo -MD -MP -MF $(DEPDIR)/mszipd.Tpo -c -o mszipd.lo `test -f 'mspack/mszipd.c' || echo '$(srcdir)/'`mspack/mszipd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mszipd.Tpo $(DEPDIR)/mszipd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/mszipd.c' object='mszipd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mszipd.lo `test -f 'mspack/mszipd.c' || echo '$(srcdir)/'`mspack/mszipd.c ++ ++qtmd.lo: mspack/qtmd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT qtmd.lo -MD -MP -MF $(DEPDIR)/qtmd.Tpo -c -o qtmd.lo `test -f 'mspack/qtmd.c' || echo '$(srcdir)/'`mspack/qtmd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/qtmd.Tpo $(DEPDIR)/qtmd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/qtmd.c' object='qtmd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o qtmd.lo `test -f 'mspack/qtmd.c' || echo '$(srcdir)/'`mspack/qtmd.c ++ ++chmd.lo: mspack/chmd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmd.lo -MD -MP -MF $(DEPDIR)/chmd.Tpo -c -o chmd.lo `test -f 'mspack/chmd.c' || echo '$(srcdir)/'`mspack/chmd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmd.Tpo $(DEPDIR)/chmd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/chmd.c' object='chmd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmd.lo `test -f 'mspack/chmd.c' || echo '$(srcdir)/'`mspack/chmd.c ++ ++cabc.lo: mspack/cabc.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabc.lo -MD -MP -MF $(DEPDIR)/cabc.Tpo -c -o cabc.lo `test -f 'mspack/cabc.c' || echo '$(srcdir)/'`mspack/cabc.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabc.Tpo $(DEPDIR)/cabc.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/cabc.c' object='cabc.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabc.lo `test -f 'mspack/cabc.c' || echo '$(srcdir)/'`mspack/cabc.c ++ ++chmc.lo: mspack/chmc.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmc.lo -MD -MP -MF $(DEPDIR)/chmc.Tpo -c -o chmc.lo `test -f 'mspack/chmc.c' || echo '$(srcdir)/'`mspack/chmc.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmc.Tpo $(DEPDIR)/chmc.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/chmc.c' object='chmc.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmc.lo `test -f 'mspack/chmc.c' || echo '$(srcdir)/'`mspack/chmc.c ++ ++hlpc.lo: mspack/hlpc.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hlpc.lo -MD -MP -MF $(DEPDIR)/hlpc.Tpo -c -o hlpc.lo `test -f 'mspack/hlpc.c' || echo '$(srcdir)/'`mspack/hlpc.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hlpc.Tpo $(DEPDIR)/hlpc.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/hlpc.c' object='hlpc.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hlpc.lo `test -f 'mspack/hlpc.c' || echo '$(srcdir)/'`mspack/hlpc.c ++ ++hlpd.lo: mspack/hlpd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hlpd.lo -MD -MP -MF $(DEPDIR)/hlpd.Tpo -c -o hlpd.lo `test -f 'mspack/hlpd.c' || echo '$(srcdir)/'`mspack/hlpd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hlpd.Tpo $(DEPDIR)/hlpd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/hlpd.c' object='hlpd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hlpd.lo `test -f 'mspack/hlpd.c' || echo '$(srcdir)/'`mspack/hlpd.c ++ ++litc.lo: mspack/litc.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT litc.lo -MD -MP -MF $(DEPDIR)/litc.Tpo -c -o litc.lo `test -f 'mspack/litc.c' || echo '$(srcdir)/'`mspack/litc.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/litc.Tpo $(DEPDIR)/litc.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/litc.c' object='litc.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o litc.lo `test -f 'mspack/litc.c' || echo '$(srcdir)/'`mspack/litc.c ++ ++litd.lo: mspack/litd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT litd.lo -MD -MP -MF $(DEPDIR)/litd.Tpo -c -o litd.lo `test -f 'mspack/litd.c' || echo '$(srcdir)/'`mspack/litd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/litd.Tpo $(DEPDIR)/litd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/litd.c' object='litd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o litd.lo `test -f 'mspack/litd.c' || echo '$(srcdir)/'`mspack/litd.c ++ ++kwajc.lo: mspack/kwajc.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT kwajc.lo -MD -MP -MF $(DEPDIR)/kwajc.Tpo -c -o kwajc.lo `test -f 'mspack/kwajc.c' || echo '$(srcdir)/'`mspack/kwajc.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/kwajc.Tpo $(DEPDIR)/kwajc.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/kwajc.c' object='kwajc.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o kwajc.lo `test -f 'mspack/kwajc.c' || echo '$(srcdir)/'`mspack/kwajc.c ++ ++kwajd.lo: mspack/kwajd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT kwajd.lo -MD -MP -MF $(DEPDIR)/kwajd.Tpo -c -o kwajd.lo `test -f 'mspack/kwajd.c' || echo '$(srcdir)/'`mspack/kwajd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/kwajd.Tpo $(DEPDIR)/kwajd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/kwajd.c' object='kwajd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o kwajd.lo `test -f 'mspack/kwajd.c' || echo '$(srcdir)/'`mspack/kwajd.c ++ ++szddc.lo: mspack/szddc.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT szddc.lo -MD -MP -MF $(DEPDIR)/szddc.Tpo -c -o szddc.lo `test -f 'mspack/szddc.c' || echo '$(srcdir)/'`mspack/szddc.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/szddc.Tpo $(DEPDIR)/szddc.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/szddc.c' object='szddc.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o szddc.lo `test -f 'mspack/szddc.c' || echo '$(srcdir)/'`mspack/szddc.c ++ ++szddd.lo: mspack/szddd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT szddd.lo -MD -MP -MF $(DEPDIR)/szddd.Tpo -c -o szddd.lo `test -f 'mspack/szddd.c' || echo '$(srcdir)/'`mspack/szddd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/szddd.Tpo $(DEPDIR)/szddd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/szddd.c' object='szddd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o szddd.lo `test -f 'mspack/szddd.c' || echo '$(srcdir)/'`mspack/szddd.c ++ ++oabc.lo: mspack/oabc.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT oabc.lo -MD -MP -MF $(DEPDIR)/oabc.Tpo -c -o oabc.lo `test -f 'mspack/oabc.c' || echo '$(srcdir)/'`mspack/oabc.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/oabc.Tpo $(DEPDIR)/oabc.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/oabc.c' object='oabc.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o oabc.lo `test -f 'mspack/oabc.c' || echo '$(srcdir)/'`mspack/oabc.c ++ ++oabd.lo: mspack/oabd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT oabd.lo -MD -MP -MF $(DEPDIR)/oabd.Tpo -c -o oabd.lo `test -f 'mspack/oabd.c' || echo '$(srcdir)/'`mspack/oabd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/oabd.Tpo $(DEPDIR)/oabd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/oabd.c' object='oabd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o oabd.lo `test -f 'mspack/oabd.c' || echo '$(srcdir)/'`mspack/oabd.c ++ ++lzxc.lo: mspack/lzxc.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzxc.lo -MD -MP -MF $(DEPDIR)/lzxc.Tpo -c -o lzxc.lo `test -f 'mspack/lzxc.c' || echo '$(srcdir)/'`mspack/lzxc.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lzxc.Tpo $(DEPDIR)/lzxc.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/lzxc.c' object='lzxc.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzxc.lo `test -f 'mspack/lzxc.c' || echo '$(srcdir)/'`mspack/lzxc.c ++ ++mszipc.lo: mspack/mszipc.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mszipc.lo -MD -MP -MF $(DEPDIR)/mszipc.Tpo -c -o mszipc.lo `test -f 'mspack/mszipc.c' || echo '$(srcdir)/'`mspack/mszipc.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mszipc.Tpo $(DEPDIR)/mszipc.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/mszipc.c' object='mszipc.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mszipc.lo `test -f 'mspack/mszipc.c' || echo '$(srcdir)/'`mspack/mszipc.c ++ ++lzssd.lo: mspack/lzssd.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lzssd.lo -MD -MP -MF $(DEPDIR)/lzssd.Tpo -c -o lzssd.lo `test -f 'mspack/lzssd.c' || echo '$(srcdir)/'`mspack/lzssd.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lzssd.Tpo $(DEPDIR)/lzssd.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/lzssd.c' object='lzssd.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lzssd.lo `test -f 'mspack/lzssd.c' || echo '$(srcdir)/'`mspack/lzssd.c ++ ++crc32.lo: mspack/crc32.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT crc32.lo -MD -MP -MF $(DEPDIR)/crc32.Tpo -c -o crc32.lo `test -f 'mspack/crc32.c' || echo '$(srcdir)/'`mspack/crc32.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/crc32.Tpo $(DEPDIR)/crc32.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mspack/crc32.c' object='crc32.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o crc32.lo `test -f 'mspack/crc32.c' || echo '$(srcdir)/'`mspack/crc32.c ++ ++cabd_md5.o: test/cabd_md5.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabd_md5.o -MD -MP -MF $(DEPDIR)/cabd_md5.Tpo -c -o cabd_md5.o `test -f 'test/cabd_md5.c' || echo '$(srcdir)/'`test/cabd_md5.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabd_md5.Tpo $(DEPDIR)/cabd_md5.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/cabd_md5.c' object='cabd_md5.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabd_md5.o `test -f 'test/cabd_md5.c' || echo '$(srcdir)/'`test/cabd_md5.c ++ ++cabd_md5.obj: test/cabd_md5.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabd_md5.obj -MD -MP -MF $(DEPDIR)/cabd_md5.Tpo -c -o cabd_md5.obj `if test -f 'test/cabd_md5.c'; then $(CYGPATH_W) 'test/cabd_md5.c'; else $(CYGPATH_W) '$(srcdir)/test/cabd_md5.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabd_md5.Tpo $(DEPDIR)/cabd_md5.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/cabd_md5.c' object='cabd_md5.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabd_md5.obj `if test -f 'test/cabd_md5.c'; then $(CYGPATH_W) 'test/cabd_md5.c'; else $(CYGPATH_W) '$(srcdir)/test/cabd_md5.c'; fi` ++ ++md5.o: test/md5.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT md5.o -MD -MP -MF $(DEPDIR)/md5.Tpo -c -o md5.o `test -f 'test/md5.c' || echo '$(srcdir)/'`test/md5.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/md5.Tpo $(DEPDIR)/md5.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/md5.c' object='md5.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o md5.o `test -f 'test/md5.c' || echo '$(srcdir)/'`test/md5.c ++ ++md5.obj: test/md5.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT md5.obj -MD -MP -MF $(DEPDIR)/md5.Tpo -c -o md5.obj `if test -f 'test/md5.c'; then $(CYGPATH_W) 'test/md5.c'; else $(CYGPATH_W) '$(srcdir)/test/md5.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/md5.Tpo $(DEPDIR)/md5.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/md5.c' object='md5.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o md5.obj `if test -f 'test/md5.c'; then $(CYGPATH_W) 'test/md5.c'; else $(CYGPATH_W) '$(srcdir)/test/md5.c'; fi` ++ ++cabd_memory.o: test/cabd_memory.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabd_memory.o -MD -MP -MF $(DEPDIR)/cabd_memory.Tpo -c -o cabd_memory.o `test -f 'test/cabd_memory.c' || echo '$(srcdir)/'`test/cabd_memory.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabd_memory.Tpo $(DEPDIR)/cabd_memory.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/cabd_memory.c' object='cabd_memory.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabd_memory.o `test -f 'test/cabd_memory.c' || echo '$(srcdir)/'`test/cabd_memory.c ++ ++cabd_memory.obj: test/cabd_memory.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabd_memory.obj -MD -MP -MF $(DEPDIR)/cabd_memory.Tpo -c -o cabd_memory.obj `if test -f 'test/cabd_memory.c'; then $(CYGPATH_W) 'test/cabd_memory.c'; else $(CYGPATH_W) '$(srcdir)/test/cabd_memory.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabd_memory.Tpo $(DEPDIR)/cabd_memory.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/cabd_memory.c' object='cabd_memory.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabd_memory.obj `if test -f 'test/cabd_memory.c'; then $(CYGPATH_W) 'test/cabd_memory.c'; else $(CYGPATH_W) '$(srcdir)/test/cabd_memory.c'; fi` ++ ++cabd_test.o: test/cabd_test.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabd_test.o -MD -MP -MF $(DEPDIR)/cabd_test.Tpo -c -o cabd_test.o `test -f 'test/cabd_test.c' || echo '$(srcdir)/'`test/cabd_test.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabd_test.Tpo $(DEPDIR)/cabd_test.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/cabd_test.c' object='cabd_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabd_test.o `test -f 'test/cabd_test.c' || echo '$(srcdir)/'`test/cabd_test.c ++ ++cabd_test.obj: test/cabd_test.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabd_test.obj -MD -MP -MF $(DEPDIR)/cabd_test.Tpo -c -o cabd_test.obj `if test -f 'test/cabd_test.c'; then $(CYGPATH_W) 'test/cabd_test.c'; else $(CYGPATH_W) '$(srcdir)/test/cabd_test.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabd_test.Tpo $(DEPDIR)/cabd_test.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/cabd_test.c' object='cabd_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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabd_test.obj `if test -f 'test/cabd_test.c'; then $(CYGPATH_W) 'test/cabd_test.c'; else $(CYGPATH_W) '$(srcdir)/test/cabd_test.c'; fi` ++ ++cabrip.o: test/cabrip.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabrip.o -MD -MP -MF $(DEPDIR)/cabrip.Tpo -c -o cabrip.o `test -f 'test/cabrip.c' || echo '$(srcdir)/'`test/cabrip.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabrip.Tpo $(DEPDIR)/cabrip.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/cabrip.c' object='cabrip.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabrip.o `test -f 'test/cabrip.c' || echo '$(srcdir)/'`test/cabrip.c ++ ++cabrip.obj: test/cabrip.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cabrip.obj -MD -MP -MF $(DEPDIR)/cabrip.Tpo -c -o cabrip.obj `if test -f 'test/cabrip.c'; then $(CYGPATH_W) 'test/cabrip.c'; else $(CYGPATH_W) '$(srcdir)/test/cabrip.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cabrip.Tpo $(DEPDIR)/cabrip.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/cabrip.c' object='cabrip.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cabrip.obj `if test -f 'test/cabrip.c'; then $(CYGPATH_W) 'test/cabrip.c'; else $(CYGPATH_W) '$(srcdir)/test/cabrip.c'; fi` ++ ++chmd_find.o: test/chmd_find.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmd_find.o -MD -MP -MF $(DEPDIR)/chmd_find.Tpo -c -o chmd_find.o `test -f 'test/chmd_find.c' || echo '$(srcdir)/'`test/chmd_find.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmd_find.Tpo $(DEPDIR)/chmd_find.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chmd_find.c' object='chmd_find.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmd_find.o `test -f 'test/chmd_find.c' || echo '$(srcdir)/'`test/chmd_find.c ++ ++chmd_find.obj: test/chmd_find.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmd_find.obj -MD -MP -MF $(DEPDIR)/chmd_find.Tpo -c -o chmd_find.obj `if test -f 'test/chmd_find.c'; then $(CYGPATH_W) 'test/chmd_find.c'; else $(CYGPATH_W) '$(srcdir)/test/chmd_find.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmd_find.Tpo $(DEPDIR)/chmd_find.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chmd_find.c' object='chmd_find.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmd_find.obj `if test -f 'test/chmd_find.c'; then $(CYGPATH_W) 'test/chmd_find.c'; else $(CYGPATH_W) '$(srcdir)/test/chmd_find.c'; fi` ++ ++chmd_md5.o: test/chmd_md5.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmd_md5.o -MD -MP -MF $(DEPDIR)/chmd_md5.Tpo -c -o chmd_md5.o `test -f 'test/chmd_md5.c' || echo '$(srcdir)/'`test/chmd_md5.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmd_md5.Tpo $(DEPDIR)/chmd_md5.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chmd_md5.c' object='chmd_md5.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmd_md5.o `test -f 'test/chmd_md5.c' || echo '$(srcdir)/'`test/chmd_md5.c ++ ++chmd_md5.obj: test/chmd_md5.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmd_md5.obj -MD -MP -MF $(DEPDIR)/chmd_md5.Tpo -c -o chmd_md5.obj `if test -f 'test/chmd_md5.c'; then $(CYGPATH_W) 'test/chmd_md5.c'; else $(CYGPATH_W) '$(srcdir)/test/chmd_md5.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmd_md5.Tpo $(DEPDIR)/chmd_md5.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chmd_md5.c' object='chmd_md5.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmd_md5.obj `if test -f 'test/chmd_md5.c'; then $(CYGPATH_W) 'test/chmd_md5.c'; else $(CYGPATH_W) '$(srcdir)/test/chmd_md5.c'; fi` ++ ++chmd_order.o: test/chmd_order.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmd_order.o -MD -MP -MF $(DEPDIR)/chmd_order.Tpo -c -o chmd_order.o `test -f 'test/chmd_order.c' || echo '$(srcdir)/'`test/chmd_order.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmd_order.Tpo $(DEPDIR)/chmd_order.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chmd_order.c' object='chmd_order.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmd_order.o `test -f 'test/chmd_order.c' || echo '$(srcdir)/'`test/chmd_order.c ++ ++chmd_order.obj: test/chmd_order.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmd_order.obj -MD -MP -MF $(DEPDIR)/chmd_order.Tpo -c -o chmd_order.obj `if test -f 'test/chmd_order.c'; then $(CYGPATH_W) 'test/chmd_order.c'; else $(CYGPATH_W) '$(srcdir)/test/chmd_order.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmd_order.Tpo $(DEPDIR)/chmd_order.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chmd_order.c' object='chmd_order.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmd_order.obj `if test -f 'test/chmd_order.c'; then $(CYGPATH_W) 'test/chmd_order.c'; else $(CYGPATH_W) '$(srcdir)/test/chmd_order.c'; fi` ++ ++chminfo.o: test/chminfo.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chminfo.o -MD -MP -MF $(DEPDIR)/chminfo.Tpo -c -o chminfo.o `test -f 'test/chminfo.c' || echo '$(srcdir)/'`test/chminfo.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chminfo.Tpo $(DEPDIR)/chminfo.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chminfo.c' object='chminfo.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chminfo.o `test -f 'test/chminfo.c' || echo '$(srcdir)/'`test/chminfo.c ++ ++chminfo.obj: test/chminfo.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chminfo.obj -MD -MP -MF $(DEPDIR)/chminfo.Tpo -c -o chminfo.obj `if test -f 'test/chminfo.c'; then $(CYGPATH_W) 'test/chminfo.c'; else $(CYGPATH_W) '$(srcdir)/test/chminfo.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chminfo.Tpo $(DEPDIR)/chminfo.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chminfo.c' object='chminfo.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chminfo.obj `if test -f 'test/chminfo.c'; then $(CYGPATH_W) 'test/chminfo.c'; else $(CYGPATH_W) '$(srcdir)/test/chminfo.c'; fi` ++ ++chmx.o: test/chmx.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmx.o -MD -MP -MF $(DEPDIR)/chmx.Tpo -c -o chmx.o `test -f 'test/chmx.c' || echo '$(srcdir)/'`test/chmx.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmx.Tpo $(DEPDIR)/chmx.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chmx.c' object='chmx.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmx.o `test -f 'test/chmx.c' || echo '$(srcdir)/'`test/chmx.c ++ ++chmx.obj: test/chmx.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT chmx.obj -MD -MP -MF $(DEPDIR)/chmx.Tpo -c -o chmx.obj `if test -f 'test/chmx.c'; then $(CYGPATH_W) 'test/chmx.c'; else $(CYGPATH_W) '$(srcdir)/test/chmx.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/chmx.Tpo $(DEPDIR)/chmx.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/chmx.c' object='chmx.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o chmx.obj `if test -f 'test/chmx.c'; then $(CYGPATH_W) 'test/chmx.c'; else $(CYGPATH_W) '$(srcdir)/test/chmx.c'; fi` ++ ++expand.o: test/expand.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT expand.o -MD -MP -MF $(DEPDIR)/expand.Tpo -c -o expand.o `test -f 'test/expand.c' || echo '$(srcdir)/'`test/expand.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/expand.Tpo $(DEPDIR)/expand.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/expand.c' object='expand.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o expand.o `test -f 'test/expand.c' || echo '$(srcdir)/'`test/expand.c ++ ++expand.obj: test/expand.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT expand.obj -MD -MP -MF $(DEPDIR)/expand.Tpo -c -o expand.obj `if test -f 'test/expand.c'; then $(CYGPATH_W) 'test/expand.c'; else $(CYGPATH_W) '$(srcdir)/test/expand.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/expand.Tpo $(DEPDIR)/expand.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/expand.c' object='expand.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o expand.obj `if test -f 'test/expand.c'; then $(CYGPATH_W) 'test/expand.c'; else $(CYGPATH_W) '$(srcdir)/test/expand.c'; fi` ++ ++multifh.o: test/multifh.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT multifh.o -MD -MP -MF $(DEPDIR)/multifh.Tpo -c -o multifh.o `test -f 'test/multifh.c' || echo '$(srcdir)/'`test/multifh.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/multifh.Tpo $(DEPDIR)/multifh.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/multifh.c' object='multifh.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o multifh.o `test -f 'test/multifh.c' || echo '$(srcdir)/'`test/multifh.c ++ ++multifh.obj: test/multifh.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT multifh.obj -MD -MP -MF $(DEPDIR)/multifh.Tpo -c -o multifh.obj `if test -f 'test/multifh.c'; then $(CYGPATH_W) 'test/multifh.c'; else $(CYGPATH_W) '$(srcdir)/test/multifh.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/multifh.Tpo $(DEPDIR)/multifh.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/multifh.c' object='multifh.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o multifh.obj `if test -f 'test/multifh.c'; then $(CYGPATH_W) 'test/multifh.c'; else $(CYGPATH_W) '$(srcdir)/test/multifh.c'; fi` ++ ++oabx.o: test/oabx.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT oabx.o -MD -MP -MF $(DEPDIR)/oabx.Tpo -c -o oabx.o `test -f 'test/oabx.c' || echo '$(srcdir)/'`test/oabx.c ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/oabx.Tpo $(DEPDIR)/oabx.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/oabx.c' object='oabx.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o oabx.o `test -f 'test/oabx.c' || echo '$(srcdir)/'`test/oabx.c ++ ++oabx.obj: test/oabx.c ++@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT oabx.obj -MD -MP -MF $(DEPDIR)/oabx.Tpo -c -o oabx.obj `if test -f 'test/oabx.c'; then $(CYGPATH_W) 'test/oabx.c'; else $(CYGPATH_W) '$(srcdir)/test/oabx.c'; fi` ++@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/oabx.Tpo $(DEPDIR)/oabx.Po ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test/oabx.c' object='oabx.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) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o oabx.obj `if test -f 'test/oabx.c'; then $(CYGPATH_W) 'test/oabx.c'; else $(CYGPATH_W) '$(srcdir)/test/oabx.c'; fi` ++ ++mostlyclean-libtool: ++ -rm -f *.lo ++ ++clean-libtool: ++ -rm -rf .libs _libs ++ -rm -rf test/.libs test/_libs ++ ++distclean-libtool: ++ -rm -f libtool config.lt ++install-pkgconfigDATA: $(pkgconfig_DATA) ++ @$(NORMAL_INSTALL) ++ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" ++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ ++ for p in $$list; do \ ++ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ ++ echo "$$d$$p"; \ ++ done | $(am__base_list) | \ ++ while read files; do \ ++ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ ++ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ ++ done ++ ++uninstall-pkgconfigDATA: ++ @$(NORMAL_UNINSTALL) ++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ ++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ ++ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) ++install-includeHEADERS: $(include_HEADERS) ++ @$(NORMAL_INSTALL) ++ test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)" ++ @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ ++ for p in $$list; do \ ++ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ ++ echo "$$d$$p"; \ ++ done | $(am__base_list) | \ ++ while read files; do \ ++ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ ++ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ ++ done ++ ++uninstall-includeHEADERS: ++ @$(NORMAL_UNINSTALL) ++ @list='$(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: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) ++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | \ ++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ mkid -fID $$unique ++tags: TAGS ++ ++TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ ++ $(TAGS_FILES) $(LISP) ++ set x; \ ++ here=`pwd`; \ ++ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | \ ++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ shift; \ ++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ ++ test -n "$$unique" || unique=$$empty_fix; \ ++ if test $$# -gt 0; then \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ "$$@" $$unique; \ ++ else \ ++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ ++ $$unique; \ ++ fi; \ ++ fi ++ctags: CTAGS ++CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ ++ $(TAGS_FILES) $(LISP) ++ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ ++ unique=`for i in $$list; do \ ++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ ++ done | \ ++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ ++ END { if (nonempty) { for (i in files) print i; }; }'`; \ ++ test -z "$(CTAGS_ARGS)$$unique" \ ++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ ++ $$unique ++ ++GTAGS: ++ here=`$(am__cd) $(top_builddir) && pwd` \ ++ && $(am__cd) $(top_srcdir) \ ++ && gtags -i $(GTAGS_ARGS) "$$here" ++ ++distclean-tags: ++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags ++ ++distdir: $(DISTFILES) ++ $(am__remove_distdir) ++ test -d "$(distdir)" || mkdir "$(distdir)" ++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ ++ list='$(DISTFILES)'; \ ++ dist_files=`for file in $$list; do echo $$file; done | \ ++ sed -e "s|^$$srcdirstrip/||;t" \ ++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ ++ case $$dist_files in \ ++ */*) $(MKDIR_P) `echo "$$dist_files" | \ ++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ ++ sort -u` ;; \ ++ esac; \ ++ for file in $$dist_files; do \ ++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ ++ if test -d $$d/$$file; then \ ++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ ++ if test -d "$(distdir)/$$file"; then \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ ++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ ++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ ++ fi; \ ++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ ++ else \ ++ test -f "$(distdir)/$$file" \ ++ || cp -p $$d/$$file "$(distdir)/$$file" \ ++ || exit 1; \ ++ fi; \ ++ done ++ $(MAKE) $(AM_MAKEFLAGS) \ ++ top_distdir="$(top_distdir)" distdir="$(distdir)" \ ++ dist-hook ++ -test -n "$(am__skip_mode_fix)" \ ++ || find "$(distdir)" -type d ! -perm -755 \ ++ -exec chmod u+rwx,go+rx {} \; -o \ ++ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ++ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ++ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ ++ || chmod -R a+r "$(distdir)" ++dist-gzip: distdir ++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz ++ $(am__remove_distdir) ++ ++dist-bzip2: distdir ++ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 ++ $(am__remove_distdir) ++ ++dist-lzip: distdir ++ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz ++ $(am__remove_distdir) ++ ++dist-lzma: distdir ++ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma ++ $(am__remove_distdir) ++ ++dist-xz: distdir ++ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz ++ $(am__remove_distdir) ++ ++dist-tarZ: distdir ++ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z ++ $(am__remove_distdir) ++ ++dist-shar: distdir ++ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz ++ $(am__remove_distdir) ++ ++dist-zip: distdir ++ -rm -f $(distdir).zip ++ zip -rq $(distdir).zip $(distdir) ++ $(am__remove_distdir) ++ ++dist dist-all: distdir ++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz ++ $(am__remove_distdir) ++ ++# This target untars the dist file and tries a VPATH configuration. Then ++# it guarantees that the distribution is self-contained by making another ++# tarfile. ++distcheck: dist ++ case '$(DIST_ARCHIVES)' in \ ++ *.tar.gz*) \ ++ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ ++ *.tar.bz2*) \ ++ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ ++ *.tar.lzma*) \ ++ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ ++ *.tar.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*) \ ++ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ ++ *.zip*) \ ++ unzip $(distdir).zip ;;\ ++ esac ++ chmod -R a-w $(distdir); chmod a+w $(distdir) ++ mkdir $(distdir)/_build ++ mkdir $(distdir)/_inst ++ chmod a-w $(distdir) ++ test -d $(distdir)/_build || exit 0; \ ++ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ ++ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ ++ && am__cwd=`pwd` \ ++ && $(am__cd) $(distdir)/_build \ ++ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ ++ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ ++ $(DISTCHECK_CONFIGURE_FLAGS) \ ++ && $(MAKE) $(AM_MAKEFLAGS) \ ++ && $(MAKE) $(AM_MAKEFLAGS) dvi \ ++ && $(MAKE) $(AM_MAKEFLAGS) check \ ++ && $(MAKE) $(AM_MAKEFLAGS) install \ ++ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ ++ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ ++ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ ++ distuninstallcheck \ ++ && chmod -R a-w "$$dc_install_base" \ ++ && ({ \ ++ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ ++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ ++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ ++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ ++ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ ++ } || { rm -rf "$$dc_destdir"; exit 1; }) \ ++ && rm -rf "$$dc_destdir" \ ++ && $(MAKE) $(AM_MAKEFLAGS) dist \ ++ && rm -rf $(DIST_ARCHIVES) \ ++ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ ++ && cd "$$am__cwd" \ ++ || exit 1 ++ $(am__remove_distdir) ++ @(echo "$(distdir) archives ready for distribution: "; \ ++ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ ++ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' ++distuninstallcheck: ++ @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-am ++all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) $(HEADERS) \ ++ config.h ++installdirs: ++ for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(includedir)"; do \ ++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ ++ done ++install: install-am ++install-exec: install-exec-am ++install-data: install-data-am ++uninstall: uninstall-am ++ ++install-am: all-am ++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am ++ ++installcheck: installcheck-am ++install-strip: ++ 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) ++ -rm -f test/$(am__dirstamp) ++ ++maintainer-clean-generic: ++ @echo "This command is intended for maintainers to use" ++ @echo "it deletes files that may require special tools to rebuild." ++clean: clean-am ++ ++clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ ++ clean-noinstLTLIBRARIES clean-noinstPROGRAMS mostlyclean-am ++ ++distclean: distclean-am ++ -rm -f $(am__CONFIG_DISTCLEAN_FILES) ++ -rm -rf ./$(DEPDIR) ++ -rm -f Makefile ++distclean-am: clean-am distclean-compile distclean-generic \ ++ distclean-hdr distclean-libtool distclean-tags ++ ++dvi: dvi-am ++ ++dvi-am: ++ ++html: html-am ++ ++html-am: ++ ++info: info-am ++ ++info-am: ++ ++install-data-am: install-includeHEADERS install-pkgconfigDATA ++ ++install-dvi: install-dvi-am ++ ++install-dvi-am: ++ ++install-exec-am: install-libLTLIBRARIES ++ ++install-html: install-html-am ++ ++install-html-am: ++ ++install-info: install-info-am ++ ++install-info-am: ++ ++install-man: ++ ++install-pdf: install-pdf-am ++ ++install-pdf-am: ++ ++install-ps: install-ps-am ++ ++install-ps-am: ++ ++installcheck-am: ++ ++maintainer-clean: maintainer-clean-am ++ -rm -f $(am__CONFIG_DISTCLEAN_FILES) ++ -rm -rf $(top_srcdir)/autom4te.cache ++ -rm -rf ./$(DEPDIR) ++ -rm -f Makefile ++maintainer-clean-am: distclean-am maintainer-clean-generic ++ ++mostlyclean: mostlyclean-am ++ ++mostlyclean-am: mostlyclean-compile mostlyclean-generic \ ++ mostlyclean-libtool ++ ++pdf: pdf-am ++ ++pdf-am: ++ ++ps: ps-am ++ ++ps-am: ++ ++uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES \ ++ uninstall-pkgconfigDATA ++ ++.MAKE: all install-am install-strip ++ ++.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ ++ clean-generic clean-libLTLIBRARIES clean-libtool \ ++ clean-noinstLTLIBRARIES clean-noinstPROGRAMS ctags dist \ ++ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-lzma \ ++ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ ++ distclean-compile 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-includeHEADERS install-info \ ++ install-info-am install-libLTLIBRARIES install-man install-pdf \ ++ install-pdf-am install-pkgconfigDATA install-ps install-ps-am \ ++ install-strip installcheck installcheck-am installdirs \ ++ maintainer-clean maintainer-clean-generic mostlyclean \ ++ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ ++ pdf pdf-am ps ps-am tags uninstall uninstall-am \ ++ uninstall-includeHEADERS uninstall-libLTLIBRARIES \ ++ uninstall-pkgconfigDATA ++ ++ ++dist-hook: ++ -rm -f $(distdir)/*.la ++ ++# 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: +diff --git a/libclamav/libmspack-0.4alpha/NEWS b/libclamav/libmspack-0.4alpha/NEWS +new file mode 100644 +index 000000000000..e69de29bb2d1 +diff --git a/libclamav/libmspack-0.4alpha/README b/libclamav/libmspack-0.4alpha/README +new file mode 100644 +index 000000000000..4361b5516e75 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/README +@@ -0,0 +1,130 @@ ++libmspack 0.4alpha ++ ++The purpose of libmspack is to provide compressors and decompressors, ++archivers and dearchivers for Microsoft compression formats: CAB, CHM, WIM, ++LIT, HLP, KWAJ and SZDD. It is also designed to be easily embeddable, ++stable, robust and resource-efficient. ++ ++The library is not intended as a generalised "any archiver" interface. ++Users of the library must explicitly choose the format they intend to work ++with. ++ ++All special features of the above formats will be covered as fully as ++possible -- for example, CAB's multi-part cabinet sets, or CHM's fast ++lookup indices. All compression methods used by the formats will be ++implemented as completely as possible. ++ ++However, other than what is required for access to these formats and their ++features, no other functionality is intended. There is no file metadata ++translation functionality. All file I/O is abstracted, although a default ++implementation using the standard C library is provided. ++ ++ ++DOCUMENTATION ++ ++The API documentation is stored in the doc/ directory. It is generated ++automatically from mspack.h with doxygen. It is also available online at ++http://www.cabextract.org.uk/libmspack/doc/ ++ ++ ++BUILDING / INSTALLING ++ ++./configure ++make ++make install ++ ++This will install the main libmspack library and mspack.h header file. ++Some other libraries and executables are built, but not installed. ++ ++If building from the Subversion repository, running rebuild.sh will create ++all the automatically generated files like the configure script, and will ++then ./configure, make and make distcheck. Running cleanup.sh will perform ++a thorough clean, deleting all automatically generated files. ++ ++In addition to gcc, you also need the following for building from Subversion: ++ ++- at least autoconf 2.57 ++- at least automake 1.7 ++- libtool ++ ++This is an alpha release. Unless you are in a position to package the ++libmspack library for the environment you intend to run your application, ++it is recommended that you do not rely on users of your software having ++the binary library installed and instead you should include the libmspack ++source files directly in your application's build environment. ++ ++ ++LEGAL ISSUES ++ ++The the best of my knowledge, libmspack does not infringe on any ++compression or decompression patents. However, this is not legal ++advice, and it is recommended that you perform your own patent search. ++ ++libmspack is licensed under the LGPL - see COPYING.LIB in this directory. ++ ++The LGPL requires you to build libmspack as a stand alone library then link ++your code to it using a linker. I personally grant you some extra rights: ++you can incorporate libmspack's source code wholly or partially in your own ++code, without having to build and link libmspack as an independent library, ++provided you meet ALL of the following conditions: ++ ++1. ANY modifications to the existing libmspack source code are published and ++ distributed under the LGPL license. ++2. You MUST NOT use libmspack function calls, structures or definitions unless ++ they are defined in the public library interface "mspack.h". ++3. When distributing your code, you MUST make clear your code uses libmspack, ++ and either include the full libmspack distribution with your code, or ++ provide access to it as per clause 4 of the LGPL. ++ ++EXAMPLE CODE ++ ++There are a number of useful programs in the test/ directory which ++exercise and demonstrate libmspack's features. ++ ++cabd_c10 - Tests the CAB decompressor on the C10 collection. ++cabd_compare - Compares the CAB decompressor with Microsoft's EXTRACT.EXE ++cabd_md5 - Prints the MD5 checksums of all files within a CAB file/set. ++cabd_memory - An mspack_system implementation that reads/writes to memory. ++cabd_test - Regression tests for libmspack's CAB decompression. ++cabrip - Extracts any CAB files embedded in another file. ++chmd_compare - Compares the CHM decompressor to Microsoft's HH.EXE ++chmd_find - Fast-finds a file within a CHM file. ++chmd_md5 - Prints the MD5 checksums of all files within a CHM file. ++chmd_order - Tests extracting files in a CHM file in four different ways. ++chminfo - Prints verbose information about CHM file structures. ++chmx - Extracts all files in a CHM file to disk. ++expand - Extracts an SZDD or KWAJ file. ++msdecompile_md5- Runs Microsoft's HH.EXE -DECOMPILE via WINE. ++msexpand_md5 - Runs Microsoft's EXTRACT.EXE via WINE. ++multifh - An mspack_system implementation that can simultaneously work ++ on in-memory images, raw file descriptors, open file handles ++ and regular disk files. ++ ++Here is a simple example of usage, which will create a CAB decompressor, ++then use that to open an existing Microsoft CAB file called "example.cab", ++and list the names of all the files contained in that cab. ++ ++#include ++#include ++#include ++ ++int main() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ struct mscabd_file *file; ++ int test; ++ ++ MSPACK_SYS_SELFTEST(test); ++ if (test != MSPACK_ERR_OK) exit(0); ++ ++ if ((cabd = mspack_create_cab_decompressor(NULL))) { ++ if ((cab = cabd->open(cabd, "example.cab"))) { ++ for (file = cab->files; file; file = file->next) { ++ printf("%s\n", file->filename); ++ } ++ cabd->close(cabd, cab); ++ } ++ mspack_destroy_cab_decompressor(cabd); ++ } ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/TODO b/libclamav/libmspack-0.4alpha/TODO +new file mode 100644 +index 000000000000..df1095d66332 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/TODO +@@ -0,0 +1,8 @@ ++* CAB compression ++* cabd_find(): if many bytes are missing from the end of a cabinet, it should still find it ++* CHM compression ++* HLP: everything ++* LIT: everything ++* SZDD/KWAJ: compression ++* WIM: everything ++* chm: make chunk cache size user-controllable +diff --git a/libclamav/libmspack-0.4alpha/aclocal.m4 b/libclamav/libmspack-0.4alpha/aclocal.m4 +new file mode 100644 +index 000000000000..22b5a662417c +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/aclocal.m4 +@@ -0,0 +1,1033 @@ ++# generated automatically by aclocal 1.11.3 -*- Autoconf -*- ++ ++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, ++# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, ++# Inc. ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without ++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A ++# PARTICULAR PURPOSE. ++ ++m4_ifndef([AC_AUTOCONF_VERSION], ++ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl ++m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, ++[m4_warning([this file was generated for autoconf 2.68. ++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, 2003, 2005, 2006, 2007, 2008, 2011 Free Software ++# Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 1 ++ ++# AM_AUTOMAKE_VERSION(VERSION) ++# ---------------------------- ++# Automake X.Y traces this macro to ensure aclocal.m4 has been ++# generated from the m4 files accompanying Automake X.Y. ++# (This private macro should not be called outside this file.) ++AC_DEFUN([AM_AUTOMAKE_VERSION], ++[am__api_version='1.11' ++dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to ++dnl require some minimum version. Point them to the right macro. ++m4_if([$1], [1.11.3], [], ++ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ++]) ++ ++# _AM_AUTOCONF_VERSION(VERSION) ++# ----------------------------- ++# aclocal traces this macro to find the Autoconf version. ++# This is a private macro too. Using m4_define simplifies ++# the logic in aclocal, which can simply ignore this definition. ++m4_define([_AM_AUTOCONF_VERSION], []) ++ ++# AM_SET_CURRENT_AUTOMAKE_VERSION ++# ------------------------------- ++# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. ++# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. ++AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], ++[AM_AUTOMAKE_VERSION([1.11.3])dnl ++m4_ifndef([AC_AUTOCONF_VERSION], ++ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl ++_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) ++ ++# AM_AUX_DIR_EXPAND -*- Autoconf -*- ++ ++# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 1 ++ ++# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets ++# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to ++# `$srcdir', `$srcdir/..', or `$srcdir/../..'. ++# ++# Of course, Automake must honor this variable whenever it calls a ++# tool from the auxiliary directory. The problem is that $srcdir (and ++# therefore $ac_aux_dir as well) can be either absolute or relative, ++# depending on how configure is run. This is pretty annoying, since ++# it makes $ac_aux_dir quite unusable in subdirectories: in the top ++# source directory, any form will work fine, but in subdirectories a ++# relative path needs to be adjusted first. ++# ++# $ac_aux_dir/missing ++# fails when called from a subdirectory if $ac_aux_dir is relative ++# $top_srcdir/$ac_aux_dir/missing ++# fails if $ac_aux_dir is absolute, ++# fails when called from a subdirectory in a VPATH build with ++# a relative $ac_aux_dir ++# ++# The reason of the latter failure is that $top_srcdir and $ac_aux_dir ++# are both prefixed by $srcdir. In an in-source build this is usually ++# harmless because $srcdir is `.', but things will broke when you ++# start a VPATH build or use an absolute $srcdir. ++# ++# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, ++# iff we strip the leading $srcdir from $ac_aux_dir. That would be: ++# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` ++# and then we would define $MISSING as ++# MISSING="\${SHELL} $am_aux_dir/missing" ++# This will work as long as MISSING is not called from configure, because ++# unfortunately $(top_srcdir) has no meaning in configure. ++# However there are other variables, like CC, which are often used in ++# configure, and could therefore not use this "fixed" $ac_aux_dir. ++# ++# Another solution, used here, is to always expand $ac_aux_dir to an ++# absolute PATH. The drawback is that using absolute paths prevent a ++# configured tree to be moved without reconfiguration. ++ ++AC_DEFUN([AM_AUX_DIR_EXPAND], ++[dnl Rely on autoconf to set up CDPATH properly. ++AC_PREREQ([2.50])dnl ++# expand $ac_aux_dir to an absolute path ++am_aux_dir=`cd $ac_aux_dir && pwd` ++]) ++ ++# AM_CONDITIONAL -*- Autoconf -*- ++ ++# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 ++# Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 9 ++ ++# AM_CONDITIONAL(NAME, SHELL-CONDITION) ++# ------------------------------------- ++# Define a conditional. ++AC_DEFUN([AM_CONDITIONAL], ++[AC_PREREQ(2.52)dnl ++ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], ++ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl ++AC_SUBST([$1_TRUE])dnl ++AC_SUBST([$1_FALSE])dnl ++_AM_SUBST_NOTMAKE([$1_TRUE])dnl ++_AM_SUBST_NOTMAKE([$1_FALSE])dnl ++m4_define([_AM_COND_VALUE_$1], [$2])dnl ++if $2; then ++ $1_TRUE= ++ $1_FALSE='#' ++else ++ $1_TRUE='#' ++ $1_FALSE= ++fi ++AC_CONFIG_COMMANDS_PRE( ++[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then ++ AC_MSG_ERROR([[conditional "$1" was never defined. ++Usually this means the macro was only invoked conditionally.]]) ++fi])]) ++ ++# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, ++# 2010, 2011 Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 12 ++ ++# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be ++# written in clear, in which case automake, when reading aclocal.m4, ++# will think it sees a *use*, and therefore will trigger all it's ++# C support machinery. Also note that it means that autoscan, seeing ++# CC etc. in the Makefile, will ask for an AC_PROG_CC use... ++ ++ ++# _AM_DEPENDENCIES(NAME) ++# ---------------------- ++# See how the compiler implements dependency checking. ++# NAME is "CC", "CXX", "GCJ", or "OBJC". ++# We try a few techniques and use that to set a single cache variable. ++# ++# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was ++# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular ++# dependency, and given that the user is not expected to run this macro, ++# just rely on AC_PROG_CC. ++AC_DEFUN([_AM_DEPENDENCIES], ++[AC_REQUIRE([AM_SET_DEPDIR])dnl ++AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl ++AC_REQUIRE([AM_MAKE_INCLUDE])dnl ++AC_REQUIRE([AM_DEP_TRACK])dnl ++ ++ifelse([$1], CC, [depcc="$CC" am_compiler_list=], ++ [$1], CXX, [depcc="$CXX" am_compiler_list=], ++ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], ++ [$1], UPC, [depcc="$UPC" am_compiler_list=], ++ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], ++ [depcc="$$1" am_compiler_list=]) ++ ++AC_CACHE_CHECK([dependency style of $depcc], ++ [am_cv_$1_dependencies_compiler_type], ++[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then ++ # We make a subdir and do the tests there. Otherwise we can end up ++ # making bogus files that we don't know about and never remove. For ++ # instance it was reported that on HP-UX the gcc test will end up ++ # making a dummy file named `D' -- because `-MD' means `put the output ++ # in D'. ++ 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 8's {/usr,}/bin/sh. ++ touch sub/conftst$i.h ++ done ++ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf ++ ++ # We check with `-c' and `-o' for the sake of the "dashmstdout" ++ # mode. It turns out that the SunPro C++ compiler does not properly ++ # handle `-M -o', and we need to detect this. Also, some Intel ++ # versions had trouble with output in subdirs ++ am__obj=sub/conftest.${OBJEXT-o} ++ am__minus_obj="-o $am__obj" ++ case $depmode in ++ gcc) ++ # This depmode causes a compiler race in universal mode. ++ test "$am__universal" = false || continue ++ ;; ++ nosideeffect) ++ # after this tag, mechanisms are not by side-effect, so they'll ++ # only be used when explicitly requested ++ if test "x$enable_dependency_tracking" = xyes; then ++ continue ++ else ++ break ++ fi ++ ;; ++ 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, ++[ --disable-dependency-tracking speeds up one-time build ++ --enable-dependency-tracking do not reject slow dependency extractors]) ++if test "x$enable_dependency_tracking" != xno; then ++ am_depcomp="$ac_aux_dir/depcomp" ++ AMDEPBACKSLASH='\' ++ 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, 2000, 2001, 2002, 2003, 2004, 2005, 2008 ++# Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++#serial 5 ++ ++# _AM_OUTPUT_DEPENDENCY_COMMANDS ++# ------------------------------ ++AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], ++[{ ++ # Autoconf 2.62 quotes --file arguments for eval, but not when files ++ # are listed without --file. Let's play safe and only enable the eval ++ # if we detect the quoting. ++ case $CONFIG_FILES in ++ *\'*) eval set x "$CONFIG_FILES" ;; ++ *) set x $CONFIG_FILES ;; ++ esac ++ shift ++ for mf ++ do ++ # Strip MF so we end up with the name of the file. ++ mf=`echo "$mf" | sed -e 's/:.*$//'` ++ # Check whether this is an Automake generated Makefile or not. ++ # We used to match only the files named `Makefile.in', but ++ # some people rename them; so instead we look at the file content. ++ # Grep'ing the first line is not enough: some people post-process ++ # each Makefile.in and add a new line on top of each file to say so. ++ # Grep'ing the whole file is not good either: AIX grep has a line ++ # limit of 2048, but all sed's we know have understand at least 4000. ++ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then ++ dirpart=`AS_DIRNAME("$mf")` ++ else ++ continue ++ fi ++ # Extract the definition of DEPDIR, am__include, and am__quote ++ # from the Makefile without running `make'. ++ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` ++ test -z "$DEPDIR" && continue ++ am__include=`sed -n 's/^am__include = //p' < "$mf"` ++ test -z "am__include" && continue ++ am__quote=`sed -n 's/^am__quote = //p' < "$mf"` ++ # When using ansi2knr, U may be empty or an underscore; expand it ++ U=`sed -n 's/^U = //p' < "$mf"` ++ # Find all dependency output files, they are included files with ++ # $(DEPDIR) in their names. We invoke sed twice because it is the ++ # simplest approach to changing $(DEPDIR) to its actual value in the ++ # expansion. ++ for file in `sed -n " ++ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ ++ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do ++ # Make sure the directory exists. ++ test -f "$dirpart/$file" && continue ++ fdir=`AS_DIRNAME(["$file"])` ++ AS_MKDIR_P([$dirpart/$fdir]) ++ # echo "creating $dirpart/$file" ++ echo '# dummy' > "$dirpart/$file" ++ done ++ done ++} ++])# _AM_OUTPUT_DEPENDENCY_COMMANDS ++ ++ ++# AM_OUTPUT_DEPENDENCY_COMMANDS ++# ----------------------------- ++# This macro should only be invoked once -- use via AC_REQUIRE. ++# ++# This code is only required when automatic dependency tracking ++# is enabled. FIXME. This creates each `.P' file that we will ++# need in order to bootstrap the dependency handling code. ++AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], ++[AC_CONFIG_COMMANDS([depfiles], ++ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], ++ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ++]) ++ ++# Do all the work for Automake. -*- Autoconf -*- ++ ++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, ++# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 16 ++ ++# This macro actually does too much. Some checks are only needed if ++# your package does certain things. But this isn't really a big deal. ++ ++# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) ++# AM_INIT_AUTOMAKE([OPTIONS]) ++# ----------------------------------------------- ++# The call with PACKAGE and VERSION arguments is the old style ++# call (pre autoconf-2.50), which is being phased out. PACKAGE ++# and VERSION should now be passed to AC_INIT and removed from ++# the call to AM_INIT_AUTOMAKE. ++# We support both call styles for the transition. After ++# the next Automake release, Autoconf can make the AC_INIT ++# arguments mandatory, and then we can depend on a new Autoconf ++# release and drop the old call support. ++AC_DEFUN([AM_INIT_AUTOMAKE], ++[AC_PREREQ([2.62])dnl ++dnl Autoconf wants to disallow AM_ names. We explicitly allow ++dnl the ones we care about. ++m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl ++AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl ++AC_REQUIRE([AC_PROG_INSTALL])dnl ++if test "`cd $srcdir && pwd`" != "`pwd`"; then ++ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output ++ # is not polluted with repeated "-I." ++ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl ++ # test to see if srcdir already configured ++ if test -f $srcdir/config.status; then ++ AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) ++ fi ++fi ++ ++# test whether we have cygpath ++if test -z "$CYGPATH_W"; then ++ if (cygpath --version) >/dev/null 2>/dev/null; then ++ CYGPATH_W='cygpath -w' ++ else ++ CYGPATH_W=echo ++ fi ++fi ++AC_SUBST([CYGPATH_W]) ++ ++# Define the identity of the package. ++dnl Distinguish between old-style and new-style calls. ++m4_ifval([$2], ++[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl ++ AC_SUBST([PACKAGE], [$1])dnl ++ AC_SUBST([VERSION], [$2])], ++[_AM_SET_OPTIONS([$1])dnl ++dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. ++m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, ++ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl ++ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl ++ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl ++ ++_AM_IF_OPTION([no-define],, ++[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) ++ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl ++ ++# Some tools Automake needs. ++AC_REQUIRE([AM_SANITY_CHECK])dnl ++AC_REQUIRE([AC_ARG_PROGRAM])dnl ++AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) ++AM_MISSING_PROG(AUTOCONF, autoconf) ++AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) ++AM_MISSING_PROG(AUTOHEADER, autoheader) ++AM_MISSING_PROG(MAKEINFO, makeinfo) ++AC_REQUIRE([AM_PROG_INSTALL_SH])dnl ++AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl ++AC_REQUIRE([AM_PROG_MKDIR_P])dnl ++# We need awk for the "check" target. The system "awk" is bad on ++# some platforms. ++AC_REQUIRE([AC_PROG_AWK])dnl ++AC_REQUIRE([AC_PROG_MAKE_SET])dnl ++AC_REQUIRE([AM_SET_LEADING_DOT])dnl ++_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], ++ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], ++ [_AM_PROG_TAR([v7])])]) ++_AM_IF_OPTION([no-dependencies],, ++[AC_PROVIDE_IFELSE([AC_PROG_CC], ++ [_AM_DEPENDENCIES(CC)], ++ [define([AC_PROG_CC], ++ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl ++AC_PROVIDE_IFELSE([AC_PROG_CXX], ++ [_AM_DEPENDENCIES(CXX)], ++ [define([AC_PROG_CXX], ++ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ++AC_PROVIDE_IFELSE([AC_PROG_OBJC], ++ [_AM_DEPENDENCIES(OBJC)], ++ [define([AC_PROG_OBJC], ++ defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ++]) ++_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl ++dnl The `parallel-tests' driver may need to know about EXEEXT, so add the ++dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro ++dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. ++AC_CONFIG_COMMANDS_PRE(dnl ++[m4_provide_if([_AM_COMPILER_EXEEXT], ++ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ++]) ++ ++dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not ++dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further ++dnl mangled by Autoconf and run in a shell conditional statement. ++m4_define([_AC_COMPILER_EXEEXT], ++m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) ++ ++ ++# When config.status generates a header, we must update the stamp-h file. ++# This file resides in the same directory as the config header ++# that is generated. The stamp files are numbered to have different names. ++ ++# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the ++# loop where config.status creates the headers, so we can generate ++# our stamp files there. ++AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], ++[# Compute $1's index in $config_headers. ++_am_arg=$1 ++_am_stamp_count=1 ++for _am_header in $config_headers :; do ++ case $_am_header in ++ $_am_arg | $_am_arg:* ) ++ break ;; ++ * ) ++ _am_stamp_count=`expr $_am_stamp_count + 1` ;; ++ esac ++done ++echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) ++ ++# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, ++# Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 1 ++ ++# AM_PROG_INSTALL_SH ++# ------------------ ++# Define $install_sh. ++AC_DEFUN([AM_PROG_INSTALL_SH], ++[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl ++if test x"${install_sh}" != xset; then ++ case $am_aux_dir in ++ *\ * | *\ *) ++ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; ++ *) ++ install_sh="\${SHELL} $am_aux_dir/install-sh" ++ esac ++fi ++AC_SUBST(install_sh)]) ++ ++# Copyright (C) 2003, 2005 Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 2 ++ ++# Check whether the underlying file-system supports filenames ++# with a leading dot. For instance MS-DOS doesn't. ++AC_DEFUN([AM_SET_LEADING_DOT], ++[rm -rf .tst 2>/dev/null ++mkdir .tst 2>/dev/null ++if test -d .tst; then ++ am__leading_dot=. ++else ++ am__leading_dot=_ ++fi ++rmdir .tst 2>/dev/null ++AC_SUBST([am__leading_dot])]) ++ ++# Check to see how 'make' treats includes. -*- Autoconf -*- ++ ++# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 4 ++ ++# AM_MAKE_INCLUDE() ++# ----------------- ++# Check to see how make treats includes. ++AC_DEFUN([AM_MAKE_INCLUDE], ++[am_make=${MAKE-make} ++cat > confinc << 'END' ++am__doit: ++ @echo this is the am__doit target ++.PHONY: am__doit ++END ++# If we don't find an include directive, just comment out the code. ++AC_MSG_CHECKING([for style of include used by $am_make]) ++am__include="#" ++am__quote= ++_am_result=none ++# First try GNU make style include. ++echo "include confinc" > confmf ++# Ignore all kinds of additional output from `make'. ++case `$am_make -s -f confmf 2> /dev/null` in #( ++*the\ am__doit\ target*) ++ am__include=include ++ am__quote= ++ _am_result=GNU ++ ;; ++esac ++# Now try BSD make style include. ++if test "$am__include" = "#"; then ++ echo '.include "confinc"' > confmf ++ case `$am_make -s -f confmf 2> /dev/null` in #( ++ *the\ am__doit\ target*) ++ am__include=.include ++ am__quote="\"" ++ _am_result=BSD ++ ;; ++ esac ++fi ++AC_SUBST([am__include]) ++AC_SUBST([am__quote]) ++AC_MSG_RESULT([$_am_result]) ++rm -f confinc confmf ++]) ++ ++# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- ++ ++# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 ++# Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 6 ++ ++# AM_MISSING_PROG(NAME, PROGRAM) ++# ------------------------------ ++AC_DEFUN([AM_MISSING_PROG], ++[AC_REQUIRE([AM_MISSING_HAS_RUN]) ++$1=${$1-"${am_missing_run}$2"} ++AC_SUBST($1)]) ++ ++ ++# AM_MISSING_HAS_RUN ++# ------------------ ++# Define MISSING if not defined so far and test if it supports --run. ++# If it does, set am_missing_run to use it, otherwise, to nothing. ++AC_DEFUN([AM_MISSING_HAS_RUN], ++[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl ++AC_REQUIRE_AUX_FILE([missing])dnl ++if test x"${MISSING+set}" != xset; then ++ case $am_aux_dir in ++ *\ * | *\ *) ++ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; ++ *) ++ MISSING="\${SHELL} $am_aux_dir/missing" ;; ++ esac ++fi ++# Use eval to expand $SHELL ++if eval "$MISSING --run true"; then ++ am_missing_run="$MISSING --run " ++else ++ am_missing_run= ++ AC_MSG_WARN([`missing' script is too old or missing]) ++fi ++]) ++ ++# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, ++# Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 1 ++ ++# AM_PROG_MKDIR_P ++# --------------- ++# Check for `mkdir -p'. ++AC_DEFUN([AM_PROG_MKDIR_P], ++[AC_PREREQ([2.60])dnl ++AC_REQUIRE([AC_PROG_MKDIR_P])dnl ++dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, ++dnl while keeping a definition of mkdir_p for backward compatibility. ++dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. ++dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of ++dnl Makefile.ins that do not define MKDIR_P, so we do our own ++dnl adjustment using top_builddir (which is defined more often than ++dnl MKDIR_P). ++AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl ++case $mkdir_p in ++ [[\\/$]]* | ?:[[\\/]]*) ;; ++ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; ++esac ++]) ++ ++# Helper functions for option handling. -*- Autoconf -*- ++ ++# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software ++# Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 5 ++ ++# _AM_MANGLE_OPTION(NAME) ++# ----------------------- ++AC_DEFUN([_AM_MANGLE_OPTION], ++[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) ++ ++# _AM_SET_OPTION(NAME) ++# -------------------- ++# Set option NAME. Presently that only means defining a flag for this option. ++AC_DEFUN([_AM_SET_OPTION], ++[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) ++ ++# _AM_SET_OPTIONS(OPTIONS) ++# ------------------------ ++# OPTIONS is a space-separated list of Automake options. ++AC_DEFUN([_AM_SET_OPTIONS], ++[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) ++ ++# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) ++# ------------------------------------------- ++# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. ++AC_DEFUN([_AM_IF_OPTION], ++[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) ++ ++# Check to make sure that the build environment is sane. -*- Autoconf -*- ++ ++# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 ++# Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 5 ++ ++# AM_SANITY_CHECK ++# --------------- ++AC_DEFUN([AM_SANITY_CHECK], ++[AC_MSG_CHECKING([whether build environment is sane]) ++# Just in case ++sleep 1 ++echo timestamp > conftest.file ++# Reject unsafe characters in $srcdir or the absolute working directory ++# name. Accept space and tab only in the latter. ++am_lf=' ++' ++case `pwd` in ++ *[[\\\"\#\$\&\'\`$am_lf]]*) ++ AC_MSG_ERROR([unsafe absolute working directory name]);; ++esac ++case $srcdir in ++ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) ++ AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; ++esac ++ ++# Do `set' in a subshell so we don't clobber the current shell's ++# arguments. Must try -L first in case configure is actually a ++# symlink; some systems play weird games with the mod time of symlinks ++# (eg FreeBSD returns the mod time of the symlink's containing ++# directory). ++if ( ++ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` ++ if test "$[*]" = "X"; then ++ # -L didn't work. ++ set X `ls -t "$srcdir/configure" conftest.file` ++ fi ++ rm -f conftest.file ++ if test "$[*]" != "X $srcdir/configure conftest.file" \ ++ && test "$[*]" != "X conftest.file $srcdir/configure"; then ++ ++ # If neither matched, then we have a broken ls. This can happen ++ # if, for instance, CONFIG_SHELL is bash and it inherits a ++ # broken ls alias from the environment. This has actually ++ # happened. Such a system could not be considered "sane". ++ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken ++alias in your environment]) ++ fi ++ ++ test "$[2]" = conftest.file ++ ) ++then ++ # Ok. ++ : ++else ++ AC_MSG_ERROR([newly created file is older than distributed files! ++Check your system clock]) ++fi ++AC_MSG_RESULT(yes)]) ++ ++# Copyright (C) 2009, 2011 Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 2 ++ ++# AM_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], ++[ --enable-silent-rules less verbose build output (undo: `make V=1') ++ --disable-silent-rules verbose build output (undo: `make V=0')]) ++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, 2003, 2005, 2011 Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 1 ++ ++# AM_PROG_INSTALL_STRIP ++# --------------------- ++# One issue with vendor `install' (even GNU) is that you can't ++# specify the program used to strip binaries. This is especially ++# annoying in cross-compiling environments, where the build's strip ++# is unlikely to handle the host's binaries. ++# Fortunately install-sh will honor a STRIPPROG variable, so we ++# always use install-sh in `make install-strip', and initialize ++# STRIPPROG with the value of the STRIP variable (set by the user). ++AC_DEFUN([AM_PROG_INSTALL_STRIP], ++[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl ++# Installed binaries are usually stripped using `strip' when the user ++# run `make install-strip'. However `strip' might not be the right ++# tool to use in cross-compilation environments, therefore Automake ++# will honor the `STRIP' environment variable to overrule this program. ++dnl Don't test for $cross_compiling = yes, because it might be `maybe'. ++if test "$cross_compiling" != no; then ++ AC_CHECK_TOOL([STRIP], [strip], :) ++fi ++INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" ++AC_SUBST([INSTALL_STRIP_PROGRAM])]) ++ ++# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 3 ++ ++# _AM_SUBST_NOTMAKE(VARIABLE) ++# --------------------------- ++# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. ++# This macro is traced by Automake. ++AC_DEFUN([_AM_SUBST_NOTMAKE]) ++ ++# AM_SUBST_NOTMAKE(VARIABLE) ++# -------------------------- ++# Public sister of _AM_SUBST_NOTMAKE. ++AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) ++ ++# Check how to create a tarball. -*- Autoconf -*- ++ ++# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. ++# ++# This file is free software; the Free Software Foundation ++# gives unlimited permission to copy and/or distribute it, ++# with or without modifications, as long as this notice is preserved. ++ ++# serial 2 ++ ++# _AM_PROG_TAR(FORMAT) ++# -------------------- ++# Check how to create a tarball in format FORMAT. ++# FORMAT should be one of `v7', `ustar', or `pax'. ++# ++# Substitute a variable $(am__tar) that is a command ++# writing to stdout a FORMAT-tarball containing the directory ++# $tardir. ++# tardir=directory && $(am__tar) > result.tar ++# ++# Substitute a variable $(am__untar) that extract such ++# a tarball read from stdin. ++# $(am__untar) < result.tar ++AC_DEFUN([_AM_PROG_TAR], ++[# Always define AMTAR for backward compatibility. Yes, it's still used ++# in the wild :-( We should find a proper way to deprecate it ... ++AC_SUBST([AMTAR], ['$${TAR-tar}']) ++m4_if([$1], [v7], ++ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], ++ [m4_case([$1], [ustar],, [pax],, ++ [m4_fatal([Unknown tar format])]) ++AC_MSG_CHECKING([how to create a $1 tar archive]) ++# Loop over all known methods to create a tar archive until one works. ++_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' ++_am_tools=${am_cv_prog_tar_$1-$_am_tools} ++# Do not fold the above two line into one, because Tru64 sh and ++# Solaris sh will not grok spaces in the rhs of `-'. ++for _am_tool in $_am_tools ++do ++ case $_am_tool in ++ gnutar) ++ for _am_tar in tar gnutar gtar; ++ do ++ AM_RUN_LOG([$_am_tar --version]) && break ++ done ++ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' ++ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' ++ am__untar="$_am_tar -xf -" ++ ;; ++ plaintar) ++ # Must skip GNU tar: if it does not support --format= it doesn't create ++ # ustar tarball either. ++ (tar --version) >/dev/null 2>&1 && continue ++ am__tar='tar chf - "$$tardir"' ++ am__tar_='tar chf - "$tardir"' ++ am__untar='tar xf -' ++ ;; ++ pax) ++ am__tar='pax -L -x $1 -w "$$tardir"' ++ am__tar_='pax -L -x $1 -w "$tardir"' ++ am__untar='pax -r' ++ ;; ++ cpio) ++ am__tar='find "$$tardir" -print | cpio -o -H $1 -L' ++ am__tar_='find "$tardir" -print | cpio -o -H $1 -L' ++ am__untar='cpio -i -H $1 -d' ++ ;; ++ none) ++ am__tar=false ++ am__tar_=false ++ am__untar=false ++ ;; ++ esac ++ ++ # If the value was cached, stop now. We just wanted to have am__tar ++ # and am__untar set. ++ test -n "${am_cv_prog_tar_$1}" && break ++ ++ # tar/untar a dummy directory, and stop if the command works ++ rm -rf conftest.dir ++ mkdir conftest.dir ++ echo GrepMe > conftest.dir/file ++ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) ++ rm -rf conftest.dir ++ if test -s conftest.tar; then ++ AM_RUN_LOG([$am__untar /dev/null 2>&1 && break ++ fi ++done ++rm -rf conftest.dir ++ ++AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) ++AC_MSG_RESULT([$am_cv_prog_tar_$1])]) ++AC_SUBST([am__tar]) ++AC_SUBST([am__untar]) ++]) # _AM_PROG_TAR ++ ++m4_include([m4/libtool.m4]) ++m4_include([m4/ltoptions.m4]) ++m4_include([m4/ltsugar.m4]) ++m4_include([m4/ltversion.m4]) ++m4_include([m4/lt~obsolete.m4]) +diff --git a/libclamav/libmspack-0.4alpha/config.guess b/libclamav/libmspack-0.4alpha/config.guess +new file mode 100755 +index 000000000000..d622a44e551f +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/config.guess +@@ -0,0 +1,1530 @@ ++#! /bin/sh ++# Attempt to guess a canonical system name. ++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, ++# 2011, 2012 Free Software Foundation, Inc. ++ ++timestamp='2012-02-10' ++ ++# This file is free software; you can redistribute it and/or modify it ++# under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++# General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, 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 Per Bothner. Please send patches (context ++# diff format) to and include a ChangeLog ++# entry. ++# ++# This script attempts to guess a canonical system name similar to ++# config.sub. If it succeeds, it prints the system name on stdout, and ++# exits with 0. Otherwise, it exits with 1. ++# ++# You can get the latest version of this script from: ++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD ++ ++me=`echo "$0" | sed -e 's,.*/,,'` ++ ++usage="\ ++Usage: $0 [OPTION] ++ ++Output the configuration name of the system \`$me' is run on. ++ ++Operation modes: ++ -h, --help print this help, then exit ++ -t, --time-stamp print date of last modification, then exit ++ -v, --version print version number, then exit ++ ++Report bugs and patches to ." ++ ++version="\ ++GNU config.guess ($timestamp) ++ ++Originally written by Per Bothner. ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 ++Free Software Foundation, Inc. ++ ++This is free software; see the source for copying conditions. There is NO ++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." ++ ++help=" ++Try \`$me --help' for more information." ++ ++# Parse command line ++while test $# -gt 0 ; do ++ case $1 in ++ --time-stamp | --time* | -t ) ++ echo "$timestamp" ; exit ;; ++ --version | -v ) ++ echo "$version" ; exit ;; ++ --help | --h* | -h ) ++ echo "$usage"; exit ;; ++ -- ) # Stop option processing ++ shift; break ;; ++ - ) # Use stdin as input. ++ break ;; ++ -* ) ++ echo "$me: invalid option $1$help" >&2 ++ exit 1 ;; ++ * ) ++ break ;; ++ esac ++done ++ ++if test $# != 0; then ++ echo "$me: too many arguments$help" >&2 ++ exit 1 ++fi ++ ++trap 'exit 1' 1 2 15 ++ ++# CC_FOR_BUILD -- compiler used by this script. Note that the use of a ++# compiler to aid in system detection is discouraged as it requires ++# temporary files to be created and, as you can see below, it is a ++# headache to deal with in a portable fashion. ++ ++# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still ++# use `HOST_CC' if defined, but it is deprecated. ++ ++# Portable tmp directory creation inspired by the Autoconf team. ++ ++set_cc_for_build=' ++trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; ++trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; ++: ${TMPDIR=/tmp} ; ++ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || ++ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || ++ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || ++ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; ++dummy=$tmp/dummy ; ++tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; ++case $CC_FOR_BUILD,$HOST_CC,$CC in ++ ,,) echo "int x;" > $dummy.c ; ++ for c in cc gcc c89 c99 ; do ++ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then ++ CC_FOR_BUILD="$c"; break ; ++ fi ; ++ done ; ++ if test x"$CC_FOR_BUILD" = x ; then ++ CC_FOR_BUILD=no_compiler_found ; ++ fi ++ ;; ++ ,,*) CC_FOR_BUILD=$CC ;; ++ ,*,*) CC_FOR_BUILD=$HOST_CC ;; ++esac ; set_cc_for_build= ;' ++ ++# This is needed to find uname on a Pyramid OSx when run in the BSD universe. ++# (ghazi@noc.rutgers.edu 1994-08-24) ++if (test -f /.attbin/uname) >/dev/null 2>&1 ; then ++ PATH=$PATH:/.attbin ; export PATH ++fi ++ ++UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown ++UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown ++UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown ++UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown ++ ++# Note: order is significant - the case branches are not exclusive. ++ ++case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in ++ *:NetBSD:*:*) ++ # NetBSD (nbsd) targets should (where applicable) match one or ++ # more of the 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". ++ sysctl="sysctl -n hw.machine_arch" ++ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ ++ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` ++ case "${UNAME_MACHINE_ARCH}" in ++ armeb) machine=armeb-unknown ;; ++ arm*) machine=arm-unknown ;; ++ sh3el) machine=shl-unknown ;; ++ sh3eb) machine=sh-unknown ;; ++ sh5el) machine=sh5le-unknown ;; ++ *) machine=${UNAME_MACHINE_ARCH}-unknown ;; ++ esac ++ # The Operating System including object format, if it has switched ++ # to ELF recently, or will in the future. ++ case "${UNAME_MACHINE_ARCH}" in ++ arm*|i386|m68k|ns32k|sh3*|sparc|vax) ++ eval $set_cc_for_build ++ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ELF__ ++ then ++ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). ++ # Return netbsd for either. FIX? ++ os=netbsd ++ else ++ os=netbsdelf ++ fi ++ ;; ++ *) ++ os=netbsd ++ ;; ++ esac ++ # The OS release ++ # Debian GNU/NetBSD machines have a different userland, and ++ # thus, need a distinct triplet. However, they do not need ++ # kernel version information, so it can be replaced with a ++ # suitable tag, in the style of linux-gnu. ++ case "${UNAME_VERSION}" in ++ Debian*) ++ release='-gnu' ++ ;; ++ *) ++ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ++ ;; ++ esac ++ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: ++ # contains redundant information, the shorter form: ++ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. ++ echo "${machine}-${os}${release}" ++ exit ;; ++ *:OpenBSD:*:*) ++ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` ++ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} ++ exit ;; ++ *:ekkoBSD:*:*) ++ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} ++ exit ;; ++ *:SolidBSD:*:*) ++ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} ++ exit ;; ++ macppc:MirBSD:*:*) ++ echo powerpc-unknown-mirbsd${UNAME_RELEASE} ++ exit ;; ++ *:MirBSD:*:*) ++ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} ++ exit ;; ++ alpha:OSF1:*:*) ++ case $UNAME_RELEASE in ++ *4.0) ++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ++ ;; ++ *5.*) ++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ++ ;; ++ esac ++ # According to Compaq, /usr/sbin/psrinfo has been available on ++ # OSF/1 and Tru64 systems produced since 1995. I hope that ++ # covers most systems running today. This code pipes the CPU ++ # types through head -n 1, so we only detect the type of CPU 0. ++ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` ++ case "$ALPHA_CPU_TYPE" in ++ "EV4 (21064)") ++ UNAME_MACHINE="alpha" ;; ++ "EV4.5 (21064)") ++ UNAME_MACHINE="alpha" ;; ++ "LCA4 (21066/21068)") ++ UNAME_MACHINE="alpha" ;; ++ "EV5 (21164)") ++ UNAME_MACHINE="alphaev5" ;; ++ "EV5.6 (21164A)") ++ UNAME_MACHINE="alphaev56" ;; ++ "EV5.6 (21164PC)") ++ UNAME_MACHINE="alphapca56" ;; ++ "EV5.7 (21164PC)") ++ UNAME_MACHINE="alphapca57" ;; ++ "EV6 (21264)") ++ UNAME_MACHINE="alphaev6" ;; ++ "EV6.7 (21264A)") ++ UNAME_MACHINE="alphaev67" ;; ++ "EV6.8CB (21264C)") ++ UNAME_MACHINE="alphaev68" ;; ++ "EV6.8AL (21264B)") ++ UNAME_MACHINE="alphaev68" ;; ++ "EV6.8CX (21264D)") ++ UNAME_MACHINE="alphaev68" ;; ++ "EV6.9A (21264/EV69A)") ++ UNAME_MACHINE="alphaev69" ;; ++ "EV7 (21364)") ++ UNAME_MACHINE="alphaev7" ;; ++ "EV7.9 (21364A)") ++ UNAME_MACHINE="alphaev79" ;; ++ esac ++ # A Pn.n version is a patched version. ++ # A Vn.n version is a released version. ++ # A Tn.n version is a released field test version. ++ # A Xn.n version is an unreleased experimental baselevel. ++ # 1.2 uses "1.2" for uname -r. ++ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` ++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code. ++ exitcode=$? ++ trap '' 0 ++ exit $exitcode ;; ++ Alpha\ *:Windows_NT*:*) ++ # How do we know it's Interix rather than the generic POSIX subsystem? ++ # Should we change UNAME_MACHINE based on the output of uname instead ++ # of the specific Alpha model? ++ echo alpha-pc-interix ++ exit ;; ++ 21064:Windows_NT:50:3) ++ echo alpha-dec-winnt3.5 ++ exit ;; ++ Amiga*:UNIX_System_V:4.0:*) ++ echo m68k-unknown-sysv4 ++ exit ;; ++ *:[Aa]miga[Oo][Ss]:*:*) ++ echo ${UNAME_MACHINE}-unknown-amigaos ++ exit ;; ++ *:[Mm]orph[Oo][Ss]:*:*) ++ echo ${UNAME_MACHINE}-unknown-morphos ++ exit ;; ++ *:OS/390:*:*) ++ echo i370-ibm-openedition ++ exit ;; ++ *:z/VM:*:*) ++ echo s390-ibm-zvmoe ++ exit ;; ++ *:OS400:*:*) ++ echo powerpc-ibm-os400 ++ exit ;; ++ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) ++ echo arm-acorn-riscix${UNAME_RELEASE} ++ exit ;; ++ arm:riscos:*:*|arm:RISCOS:*:*) ++ echo arm-unknown-riscos ++ exit ;; ++ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) ++ echo hppa1.1-hitachi-hiuxmpp ++ exit ;; ++ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) ++ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. ++ if test "`(/bin/universe) 2>/dev/null`" = att ; then ++ echo pyramid-pyramid-sysv3 ++ else ++ echo pyramid-pyramid-bsd ++ fi ++ exit ;; ++ NILE*:*:*:dcosx) ++ echo pyramid-pyramid-svr4 ++ exit ;; ++ DRS?6000:unix:4.0:6*) ++ echo sparc-icl-nx6 ++ exit ;; ++ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) ++ case `/usr/bin/uname -p` in ++ sparc) echo sparc-icl-nx7; exit ;; ++ esac ;; ++ s390x:SunOS:*:*) ++ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ sun4H:SunOS:5.*:*) ++ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) ++ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) ++ echo i386-pc-auroraux${UNAME_RELEASE} ++ exit ;; ++ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) ++ eval $set_cc_for_build ++ SUN_ARCH="i386" ++ # If there is a compiler, see if it is configured for 64-bit objects. ++ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. ++ # This test works for both compilers. ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ SUN_ARCH="x86_64" ++ fi ++ fi ++ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ sun4*:SunOS:6*:*) ++ # According to config.sub, this is the proper way to canonicalize ++ # SunOS6. Hard to guess exactly what SunOS6 will be like, but ++ # it's likely to be more like Solaris than SunOS4. ++ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ sun4*:SunOS:*:*) ++ case "`/usr/bin/arch -k`" in ++ Series*|S4*) ++ UNAME_RELEASE=`uname -v` ++ ;; ++ esac ++ # Japanese Language versions have a version number like `4.1.3-JL'. ++ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` ++ exit ;; ++ sun3*:SunOS:*:*) ++ echo m68k-sun-sunos${UNAME_RELEASE} ++ exit ;; ++ sun*:*:4.2BSD:*) ++ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` ++ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 ++ case "`/bin/arch`" in ++ sun3) ++ echo m68k-sun-sunos${UNAME_RELEASE} ++ ;; ++ sun4) ++ echo sparc-sun-sunos${UNAME_RELEASE} ++ ;; ++ esac ++ exit ;; ++ aushp:SunOS:*:*) ++ echo sparc-auspex-sunos${UNAME_RELEASE} ++ exit ;; ++ # The situation for MiNT is a little confusing. The machine name ++ # can be virtually everything (everything which is not ++ # "atarist" or "atariste" at least should have a processor ++ # > m68000). The system name ranges from "MiNT" over "FreeMiNT" ++ # to the lowercase version "mint" (or "freemint"). Finally ++ # the system name "TOS" denotes a system which is actually not ++ # MiNT. But MiNT is downward compatible to TOS, so this should ++ # be no problem. ++ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; ++ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; ++ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) ++ echo m68k-atari-mint${UNAME_RELEASE} ++ exit ;; ++ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) ++ echo m68k-milan-mint${UNAME_RELEASE} ++ exit ;; ++ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) ++ echo m68k-hades-mint${UNAME_RELEASE} ++ exit ;; ++ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) ++ echo m68k-unknown-mint${UNAME_RELEASE} ++ exit ;; ++ m68k:machten:*:*) ++ echo m68k-apple-machten${UNAME_RELEASE} ++ exit ;; ++ powerpc:machten:*:*) ++ echo powerpc-apple-machten${UNAME_RELEASE} ++ exit ;; ++ RISC*:Mach:*:*) ++ echo mips-dec-mach_bsd4.3 ++ exit ;; ++ RISC*:ULTRIX:*:*) ++ echo mips-dec-ultrix${UNAME_RELEASE} ++ exit ;; ++ VAX*:ULTRIX*:*:*) ++ echo vax-dec-ultrix${UNAME_RELEASE} ++ exit ;; ++ 2020:CLIX:*:* | 2430:CLIX:*:*) ++ echo clipper-intergraph-clix${UNAME_RELEASE} ++ exit ;; ++ mips:*:*:UMIPS | mips:*:*:RISCos) ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++#ifdef __cplusplus ++#include /* for printf() prototype */ ++ int main (int argc, char *argv[]) { ++#else ++ int main (argc, argv) int argc; char *argv[]; { ++#endif ++ #if defined (host_mips) && defined (MIPSEB) ++ #if defined (SYSTYPE_SYSV) ++ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); ++ #endif ++ #if defined (SYSTYPE_SVR4) ++ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); ++ #endif ++ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) ++ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); ++ #endif ++ #endif ++ exit (-1); ++ } ++EOF ++ $CC_FOR_BUILD -o $dummy $dummy.c && ++ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && ++ SYSTEM_NAME=`$dummy $dummyarg` && ++ { echo "$SYSTEM_NAME"; exit; } ++ echo mips-mips-riscos${UNAME_RELEASE} ++ exit ;; ++ Motorola:PowerMAX_OS:*:*) ++ echo powerpc-motorola-powermax ++ exit ;; ++ Motorola:*:4.3:PL8-*) ++ echo powerpc-harris-powermax ++ exit ;; ++ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) ++ echo powerpc-harris-powermax ++ exit ;; ++ Night_Hawk:Power_UNIX:*:*) ++ echo powerpc-harris-powerunix ++ exit ;; ++ m88k:CX/UX:7*:*) ++ echo m88k-harris-cxux7 ++ exit ;; ++ m88k:*:4*:R4*) ++ echo m88k-motorola-sysv4 ++ exit ;; ++ m88k:*:3*:R3*) ++ echo m88k-motorola-sysv3 ++ exit ;; ++ AViiON:dgux:*:*) ++ # DG/UX returns AViiON for all architectures ++ UNAME_PROCESSOR=`/usr/bin/uname -p` ++ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] ++ then ++ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ ++ [ ${TARGET_BINARY_INTERFACE}x = x ] ++ then ++ echo m88k-dg-dgux${UNAME_RELEASE} ++ else ++ echo m88k-dg-dguxbcs${UNAME_RELEASE} ++ fi ++ else ++ echo i586-dg-dgux${UNAME_RELEASE} ++ fi ++ exit ;; ++ M88*:DolphinOS:*:*) # DolphinOS (SVR3) ++ echo m88k-dolphin-sysv3 ++ exit ;; ++ M88*:*:R3*:*) ++ # Delta 88k system running SVR3 ++ echo m88k-motorola-sysv3 ++ exit ;; ++ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) ++ echo m88k-tektronix-sysv3 ++ exit ;; ++ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) ++ echo m68k-tektronix-bsd ++ exit ;; ++ *:IRIX*:*:*) ++ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` ++ exit ;; ++ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. ++ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id ++ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' ++ i*86:AIX:*:*) ++ echo i386-ibm-aix ++ exit ;; ++ ia64:AIX:*:*) ++ if [ -x /usr/bin/oslevel ] ; then ++ IBM_REV=`/usr/bin/oslevel` ++ else ++ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} ++ fi ++ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} ++ exit ;; ++ *:AIX:2:3) ++ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ #include ++ ++ main() ++ { ++ if (!__power_pc()) ++ exit(1); ++ puts("powerpc-ibm-aix3.2.5"); ++ exit(0); ++ } ++EOF ++ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` ++ then ++ echo "$SYSTEM_NAME" ++ else ++ echo rs6000-ibm-aix3.2.5 ++ fi ++ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then ++ echo rs6000-ibm-aix3.2.4 ++ else ++ echo rs6000-ibm-aix3.2 ++ fi ++ exit ;; ++ *:AIX:*:[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 [ -x /usr/bin/oslevel ] ; then ++ IBM_REV=`/usr/bin/oslevel` ++ else ++ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} ++ fi ++ echo ${IBM_ARCH}-ibm-aix${IBM_REV} ++ exit ;; ++ *:AIX:*:*) ++ echo rs6000-ibm-aix ++ exit ;; ++ ibmrt:4.4BSD:*|romp-ibm:BSD:*) ++ echo romp-ibm-bsd4.4 ++ exit ;; ++ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and ++ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to ++ exit ;; # report: romp-ibm BSD 4.3 ++ *:BOSX:*:*) ++ echo rs6000-bull-bosx ++ exit ;; ++ DPX/2?00:B.O.S.:*:*) ++ echo m68k-bull-sysv3 ++ exit ;; ++ 9000/[34]??:4.3bsd:1.*:*) ++ echo m68k-hp-bsd ++ exit ;; ++ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) ++ echo m68k-hp-bsd4.4 ++ exit ;; ++ 9000/[34678]??:HP-UX:*:*) ++ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` ++ case "${UNAME_MACHINE}" in ++ 9000/31? ) HP_ARCH=m68000 ;; ++ 9000/[34]?? ) HP_ARCH=m68k ;; ++ 9000/[678][0-9][0-9]) ++ if [ -x /usr/bin/getconf ]; then ++ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` ++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` ++ case "${sc_cpu_version}" in ++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 ++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 ++ 532) # CPU_PA_RISC2_0 ++ case "${sc_kernel_bits}" in ++ 32) HP_ARCH="hppa2.0n" ;; ++ 64) HP_ARCH="hppa2.0w" ;; ++ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 ++ esac ;; ++ esac ++ fi ++ if [ "${HP_ARCH}" = "" ]; then ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ ++ #define _HPUX_SOURCE ++ #include ++ #include ++ ++ int main () ++ { ++ #if defined(_SC_KERNEL_BITS) ++ long bits = sysconf(_SC_KERNEL_BITS); ++ #endif ++ long cpu = sysconf (_SC_CPU_VERSION); ++ ++ switch (cpu) ++ { ++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break; ++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break; ++ case CPU_PA_RISC2_0: ++ #if defined(_SC_KERNEL_BITS) ++ switch (bits) ++ { ++ case 64: puts ("hppa2.0w"); break; ++ case 32: puts ("hppa2.0n"); break; ++ default: puts ("hppa2.0"); break; ++ } break; ++ #else /* !defined(_SC_KERNEL_BITS) */ ++ puts ("hppa2.0"); break; ++ #endif ++ default: puts ("hppa1.0"); break; ++ } ++ exit (0); ++ } ++EOF ++ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` ++ test -z "$HP_ARCH" && HP_ARCH=hppa ++ fi ;; ++ esac ++ if [ ${HP_ARCH} = "hppa2.0w" ] ++ then ++ eval $set_cc_for_build ++ ++ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating ++ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler ++ # generating 64-bit code. GNU and HP use different nomenclature: ++ # ++ # $ CC_FOR_BUILD=cc ./config.guess ++ # => hppa2.0w-hp-hpux11.23 ++ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess ++ # => hppa64-hp-hpux11.23 ++ ++ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | ++ grep -q __LP64__ ++ then ++ HP_ARCH="hppa2.0w" ++ else ++ HP_ARCH="hppa64" ++ fi ++ fi ++ echo ${HP_ARCH}-hp-hpux${HPUX_REV} ++ exit ;; ++ ia64:HP-UX:*:*) ++ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` ++ echo ia64-hp-hpux${HPUX_REV} ++ exit ;; ++ 3050*:HI-UX:*:*) ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ #include ++ int ++ main () ++ { ++ long cpu = sysconf (_SC_CPU_VERSION); ++ /* The order matters, because CPU_IS_HP_MC68K erroneously returns ++ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct ++ results, however. */ ++ if (CPU_IS_PA_RISC (cpu)) ++ { ++ switch (cpu) ++ { ++ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; ++ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; ++ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; ++ default: puts ("hppa-hitachi-hiuxwe2"); break; ++ } ++ } ++ else if (CPU_IS_HP_MC68K (cpu)) ++ puts ("m68k-hitachi-hiuxwe2"); ++ else puts ("unknown-hitachi-hiuxwe2"); ++ exit (0); ++ } ++EOF ++ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && ++ { echo "$SYSTEM_NAME"; exit; } ++ echo unknown-hitachi-hiuxwe2 ++ exit ;; ++ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) ++ echo hppa1.1-hp-bsd ++ exit ;; ++ 9000/8??:4.3bsd:*:*) ++ echo hppa1.0-hp-bsd ++ exit ;; ++ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) ++ echo hppa1.0-hp-mpeix ++ exit ;; ++ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) ++ echo hppa1.1-hp-osf ++ exit ;; ++ hp8??:OSF1:*:*) ++ echo hppa1.0-hp-osf ++ exit ;; ++ i*86:OSF1:*:*) ++ if [ -x /usr/sbin/sysversion ] ; then ++ echo ${UNAME_MACHINE}-unknown-osf1mk ++ else ++ echo ${UNAME_MACHINE}-unknown-osf1 ++ fi ++ exit ;; ++ parisc*:Lites*:*:*) ++ echo hppa1.1-hp-lites ++ exit ;; ++ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) ++ echo c1-convex-bsd ++ exit ;; ++ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) ++ if getsysinfo -f scalar_acc ++ then echo c32-convex-bsd ++ else echo c2-convex-bsd ++ fi ++ exit ;; ++ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) ++ echo c34-convex-bsd ++ exit ;; ++ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) ++ echo c38-convex-bsd ++ exit ;; ++ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) ++ echo c4-convex-bsd ++ exit ;; ++ CRAY*Y-MP:*:*:*) ++ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ CRAY*[A-Z]90:*:*:*) ++ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ ++ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ ++ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ ++ -e 's/\.[^.]*$/.X/' ++ exit ;; ++ CRAY*TS:*:*:*) ++ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ CRAY*T3E:*:*:*) ++ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ CRAY*SV1:*:*:*) ++ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ *:UNICOS/mp:*:*) ++ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' ++ exit ;; ++ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) ++ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` ++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; ++ 5000:UNIX_System_V:4.*:*) ++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` ++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` ++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" ++ exit ;; ++ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) ++ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} ++ exit ;; ++ sparc*:BSD/OS:*:*) ++ echo sparc-unknown-bsdi${UNAME_RELEASE} ++ exit ;; ++ *:BSD/OS:*:*) ++ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} ++ exit ;; ++ *:FreeBSD:*:*) ++ UNAME_PROCESSOR=`/usr/bin/uname -p` ++ case ${UNAME_PROCESSOR} in ++ amd64) ++ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ *) ++ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; ++ esac ++ exit ;; ++ i*:CYGWIN*:*) ++ echo ${UNAME_MACHINE}-pc-cygwin ++ exit ;; ++ *:MINGW*:*) ++ echo ${UNAME_MACHINE}-pc-mingw32 ++ exit ;; ++ i*:MSYS*:*) ++ echo ${UNAME_MACHINE}-pc-msys ++ exit ;; ++ i*:windows32*:*) ++ # uname -m includes "-pc" on this system. ++ echo ${UNAME_MACHINE}-mingw32 ++ exit ;; ++ i*:PW*:*) ++ echo ${UNAME_MACHINE}-pc-pw32 ++ exit ;; ++ *:Interix*:*) ++ case ${UNAME_MACHINE} in ++ x86) ++ echo i586-pc-interix${UNAME_RELEASE} ++ exit ;; ++ authenticamd | genuineintel | EM64T) ++ echo x86_64-unknown-interix${UNAME_RELEASE} ++ exit ;; ++ IA64) ++ echo ia64-unknown-interix${UNAME_RELEASE} ++ exit ;; ++ esac ;; ++ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) ++ echo i${UNAME_MACHINE}-pc-mks ++ exit ;; ++ 8664:Windows_NT:*) ++ echo x86_64-pc-mks ++ exit ;; ++ i*:Windows_NT*:* | Pentium*:Windows_NT*:*) ++ # How do we know it's Interix rather than the generic POSIX subsystem? ++ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we ++ # UNAME_MACHINE based on the output of uname instead of i386? ++ echo i586-pc-interix ++ exit ;; ++ i*:UWIN*:*) ++ echo ${UNAME_MACHINE}-pc-uwin ++ exit ;; ++ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) ++ echo x86_64-unknown-cygwin ++ exit ;; ++ p*:CYGWIN*:*) ++ echo powerpcle-unknown-cygwin ++ exit ;; ++ prep*:SunOS:5.*:*) ++ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` ++ exit ;; ++ *:GNU:*:*) ++ # the GNU system ++ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` ++ exit ;; ++ *:GNU/*:*:*) ++ # other systems with GNU libc and userland ++ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu ++ exit ;; ++ i*86:Minix:*:*) ++ echo ${UNAME_MACHINE}-pc-minix ++ exit ;; ++ aarch64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ aarch64_be:Linux:*:*) ++ UNAME_MACHINE=aarch64_be ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ alpha:Linux:*:*) ++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in ++ EV5) UNAME_MACHINE=alphaev5 ;; ++ EV56) UNAME_MACHINE=alphaev56 ;; ++ PCA56) UNAME_MACHINE=alphapca56 ;; ++ PCA57) UNAME_MACHINE=alphapca56 ;; ++ EV6) UNAME_MACHINE=alphaev6 ;; ++ EV67) UNAME_MACHINE=alphaev67 ;; ++ EV68*) UNAME_MACHINE=alphaev68 ;; ++ esac ++ objdump --private-headers /bin/sh | grep -q ld.so.1 ++ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi ++ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ++ exit ;; ++ arm*:Linux:*:*) ++ eval $set_cc_for_build ++ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_EABI__ ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ else ++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ ++ | grep -q __ARM_PCS_VFP ++ then ++ echo ${UNAME_MACHINE}-unknown-linux-gnueabi ++ else ++ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf ++ fi ++ fi ++ exit ;; ++ avr32*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ cris:Linux:*:*) ++ echo ${UNAME_MACHINE}-axis-linux-gnu ++ exit ;; ++ crisv32:Linux:*:*) ++ echo ${UNAME_MACHINE}-axis-linux-gnu ++ exit ;; ++ frv:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ hexagon:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ i*86:Linux:*:*) ++ LIBC=gnu ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ #ifdef __dietlibc__ ++ LIBC=dietlibc ++ #endif ++EOF ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ++ echo "${UNAME_MACHINE}-pc-linux-${LIBC}" ++ exit ;; ++ ia64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ m32r*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ m68*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ mips:Linux:*:* | mips64:Linux:*:*) ++ eval $set_cc_for_build ++ sed 's/^ //' << EOF >$dummy.c ++ #undef CPU ++ #undef ${UNAME_MACHINE} ++ #undef ${UNAME_MACHINE}el ++ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) ++ CPU=${UNAME_MACHINE}el ++ #else ++ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) ++ CPU=${UNAME_MACHINE} ++ #else ++ CPU= ++ #endif ++ #endif ++EOF ++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` ++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ++ ;; ++ or32:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ padre:Linux:*:*) ++ echo sparc-unknown-linux-gnu ++ exit ;; ++ parisc64:Linux:*:* | hppa64:Linux:*:*) ++ echo hppa64-unknown-linux-gnu ++ exit ;; ++ parisc:Linux:*:* | hppa:Linux:*:*) ++ # Look for CPU level ++ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in ++ PA7*) echo hppa1.1-unknown-linux-gnu ;; ++ PA8*) echo hppa2.0-unknown-linux-gnu ;; ++ *) echo hppa-unknown-linux-gnu ;; ++ esac ++ exit ;; ++ ppc64:Linux:*:*) ++ echo powerpc64-unknown-linux-gnu ++ exit ;; ++ ppc:Linux:*:*) ++ echo powerpc-unknown-linux-gnu ++ exit ;; ++ s390:Linux:*:* | s390x:Linux:*:*) ++ echo ${UNAME_MACHINE}-ibm-linux ++ exit ;; ++ sh64*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ sh*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ sparc:Linux:*:* | sparc64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ tile*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ vax:Linux:*:*) ++ echo ${UNAME_MACHINE}-dec-linux-gnu ++ exit ;; ++ x86_64:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ xtensa*:Linux:*:*) ++ echo ${UNAME_MACHINE}-unknown-linux-gnu ++ exit ;; ++ i*86:DYNIX/ptx:4*:*) ++ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. ++ # earlier versions are messed up and put the nodename in both ++ # sysname and nodename. ++ echo i386-sequent-sysv4 ++ exit ;; ++ i*86:UNIX_SV:4.2MP:2.*) ++ # Unixware is an offshoot of SVR4, but it has its own version ++ # number series starting with 2... ++ # I am not positive that other SVR4 systems won't match this, ++ # I just have to hope. -- rms. ++ # Use sysv4.2uw... so that sysv4* matches it. ++ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} ++ exit ;; ++ i*86:OS/2:*:*) ++ # If we were able to find `uname', then EMX Unix compatibility ++ # is probably installed. ++ echo ${UNAME_MACHINE}-pc-os2-emx ++ exit ;; ++ i*86:XTS-300:*:STOP) ++ echo ${UNAME_MACHINE}-unknown-stop ++ exit ;; ++ i*86:atheos:*:*) ++ echo ${UNAME_MACHINE}-unknown-atheos ++ exit ;; ++ i*86:syllable:*:*) ++ echo ${UNAME_MACHINE}-pc-syllable ++ exit ;; ++ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) ++ echo i386-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ i*86:*DOS:*:*) ++ echo ${UNAME_MACHINE}-pc-msdosdjgpp ++ exit ;; ++ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) ++ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` ++ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then ++ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} ++ else ++ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} ++ fi ++ exit ;; ++ i*86:*:5:[678]*) ++ # UnixWare 7.x, OpenUNIX and OpenServer 6. ++ case `/bin/uname -X | grep "^Machine"` in ++ *486*) UNAME_MACHINE=i486 ;; ++ *Pentium) UNAME_MACHINE=i586 ;; ++ *Pent*|*Celeron) UNAME_MACHINE=i686 ;; ++ esac ++ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ++ exit ;; ++ i*86:*:3.2:*) ++ if test -f /usr/options/cb.name; then ++ UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then ++ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` ++ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 ++ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ ++ && UNAME_MACHINE=i586 ++ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ ++ && UNAME_MACHINE=i686 ++ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ ++ && UNAME_MACHINE=i686 ++ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL ++ else ++ echo ${UNAME_MACHINE}-pc-sysv32 ++ fi ++ exit ;; ++ pc:*:*:*) ++ # Left here for compatibility: ++ # uname -m prints for DJGPP always 'pc', but it prints nothing about ++ # the processor, so we play safe by assuming i586. ++ # Note: whatever this is, it MUST be the same as what config.sub ++ # prints for the "djgpp" host, or else GDB configury will decide that ++ # this is a cross-build. ++ echo i586-pc-msdosdjgpp ++ exit ;; ++ Intel:Mach:3*:*) ++ echo i386-pc-mach3 ++ exit ;; ++ paragon:*:*:*) ++ echo i860-intel-osf1 ++ exit ;; ++ i860:*:4.*:*) # i860-SVR4 ++ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then ++ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 ++ else # Add other i860-SVR4 vendors below as they are discovered. ++ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 ++ fi ++ exit ;; ++ mini*:CTIX:SYS*5:*) ++ # "miniframe" ++ echo m68010-convergent-sysv ++ exit ;; ++ mc68k:UNIX:SYSTEM5:3.51m) ++ echo m68k-convergent-sysv ++ exit ;; ++ M680?0:D-NIX:5.3:*) ++ echo m68k-diab-dnix ++ exit ;; ++ M68*:*:R3V[5678]*:*) ++ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; ++ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) ++ OS_REL='' ++ test -r /etc/.relid \ ++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; ++ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4; exit; } ;; ++ NCR*:*:4.2:* | MPRAS*:*:4.2:*) ++ OS_REL='.3' ++ test -r /etc/.relid \ ++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` ++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ ++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ++ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ ++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; ++ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) ++ echo m68k-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ mc68030:UNIX_System_V:4.*:*) ++ echo m68k-atari-sysv4 ++ exit ;; ++ TSUNAMI:LynxOS:2.*:*) ++ echo sparc-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ rs6000:LynxOS:2.*:*) ++ echo rs6000-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) ++ echo powerpc-unknown-lynxos${UNAME_RELEASE} ++ exit ;; ++ SM[BE]S:UNIX_SV:*:*) ++ echo mips-dde-sysv${UNAME_RELEASE} ++ exit ;; ++ RM*:ReliantUNIX-*:*:*) ++ echo mips-sni-sysv4 ++ exit ;; ++ RM*:SINIX-*:*:*) ++ echo mips-sni-sysv4 ++ exit ;; ++ *:SINIX-*:*:*) ++ if uname -p 2>/dev/null >/dev/null ; then ++ UNAME_MACHINE=`(uname -p) 2>/dev/null` ++ echo ${UNAME_MACHINE}-sni-sysv4 ++ else ++ echo ns32k-sni-sysv ++ fi ++ exit ;; ++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort ++ # says ++ echo i586-unisys-sysv4 ++ exit ;; ++ *:UNIX_System_V:4*:FTX*) ++ # From Gerald Hewes . ++ # How about differentiating between stratus architectures? -djm ++ echo hppa1.1-stratus-sysv4 ++ exit ;; ++ *:*:*:FTX*) ++ # From seanf@swdc.stratus.com. ++ echo i860-stratus-sysv4 ++ exit ;; ++ i*86:VOS:*:*) ++ # From Paul.Green@stratus.com. ++ echo ${UNAME_MACHINE}-stratus-vos ++ exit ;; ++ *:VOS:*:*) ++ # From Paul.Green@stratus.com. ++ echo hppa1.1-stratus-vos ++ exit ;; ++ mc68*:A/UX:*:*) ++ echo m68k-apple-aux${UNAME_RELEASE} ++ exit ;; ++ news*:NEWS-OS:6*:*) ++ echo mips-sony-newsos6 ++ exit ;; ++ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) ++ if [ -d /usr/nec ]; then ++ echo mips-nec-sysv${UNAME_RELEASE} ++ else ++ echo mips-unknown-sysv${UNAME_RELEASE} ++ fi ++ exit ;; ++ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. ++ echo powerpc-be-beos ++ exit ;; ++ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. ++ echo powerpc-apple-beos ++ exit ;; ++ BePC:BeOS:*:*) # BeOS running on Intel PC compatible. ++ echo i586-pc-beos ++ exit ;; ++ BePC:Haiku:*:*) # Haiku running on Intel PC compatible. ++ echo i586-pc-haiku ++ exit ;; ++ SX-4:SUPER-UX:*:*) ++ echo sx4-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-5:SUPER-UX:*:*) ++ echo sx5-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-6:SUPER-UX:*:*) ++ echo sx6-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-7:SUPER-UX:*:*) ++ echo sx7-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-8:SUPER-UX:*:*) ++ echo sx8-nec-superux${UNAME_RELEASE} ++ exit ;; ++ SX-8R:SUPER-UX:*:*) ++ echo sx8r-nec-superux${UNAME_RELEASE} ++ exit ;; ++ Power*:Rhapsody:*:*) ++ echo powerpc-apple-rhapsody${UNAME_RELEASE} ++ exit ;; ++ *:Rhapsody:*:*) ++ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} ++ exit ;; ++ *:Darwin:*:*) ++ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown ++ case $UNAME_PROCESSOR in ++ i386) ++ eval $set_cc_for_build ++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then ++ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ ++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ ++ grep IS_64BIT_ARCH >/dev/null ++ then ++ UNAME_PROCESSOR="x86_64" ++ fi ++ fi ;; ++ unknown) UNAME_PROCESSOR=powerpc ;; ++ esac ++ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} ++ exit ;; ++ *:procnto*:*:* | *:QNX:[0123456789]*:*) ++ UNAME_PROCESSOR=`uname -p` ++ if test "$UNAME_PROCESSOR" = "x86"; then ++ UNAME_PROCESSOR=i386 ++ UNAME_MACHINE=pc ++ fi ++ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} ++ exit ;; ++ *:QNX:*:4*) ++ echo i386-pc-qnx ++ exit ;; ++ NEO-?:NONSTOP_KERNEL:*:*) ++ echo neo-tandem-nsk${UNAME_RELEASE} ++ exit ;; ++ NSE-?:NONSTOP_KERNEL:*:*) ++ echo nse-tandem-nsk${UNAME_RELEASE} ++ exit ;; ++ NSR-?:NONSTOP_KERNEL:*:*) ++ echo nsr-tandem-nsk${UNAME_RELEASE} ++ exit ;; ++ *:NonStop-UX:*:*) ++ echo mips-compaq-nonstopux ++ exit ;; ++ BS2000:POSIX*:*:*) ++ echo bs2000-siemens-sysv ++ exit ;; ++ DS/*:UNIX_System_V:*:*) ++ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} ++ exit ;; ++ *:Plan9:*:*) ++ # "uname -m" is not consistent, so use $cputype instead. 386 ++ # is converted to i386 for consistency with other x86 ++ # operating systems. ++ if test "$cputype" = "386"; then ++ UNAME_MACHINE=i386 ++ else ++ UNAME_MACHINE="$cputype" ++ fi ++ echo ${UNAME_MACHINE}-unknown-plan9 ++ exit ;; ++ *:TOPS-10:*:*) ++ echo pdp10-unknown-tops10 ++ exit ;; ++ *:TENEX:*:*) ++ echo pdp10-unknown-tenex ++ exit ;; ++ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) ++ echo pdp10-dec-tops20 ++ exit ;; ++ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) ++ echo pdp10-xkl-tops20 ++ exit ;; ++ *:TOPS-20:*:*) ++ echo pdp10-unknown-tops20 ++ exit ;; ++ *:ITS:*:*) ++ echo pdp10-unknown-its ++ exit ;; ++ SEI:*:*:SEIUX) ++ echo mips-sei-seiux${UNAME_RELEASE} ++ exit ;; ++ *:DragonFly:*:*) ++ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ++ exit ;; ++ *:*VMS:*:*) ++ UNAME_MACHINE=`(uname -p) 2>/dev/null` ++ case "${UNAME_MACHINE}" in ++ A*) echo alpha-dec-vms ; exit ;; ++ I*) echo ia64-dec-vms ; exit ;; ++ V*) echo vax-dec-vms ; exit ;; ++ esac ;; ++ *:XENIX:*:SysV) ++ echo i386-pc-xenix ++ exit ;; ++ i*86:skyos:*:*) ++ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' ++ exit ;; ++ i*86:rdos:*:*) ++ echo ${UNAME_MACHINE}-pc-rdos ++ exit ;; ++ i*86:AROS:*:*) ++ echo ${UNAME_MACHINE}-pc-aros ++ exit ;; ++ x86_64:VMkernel:*:*) ++ echo ${UNAME_MACHINE}-unknown-esx ++ exit ;; ++esac ++ ++#echo '(No uname command or uname output not recognized.)' 1>&2 ++#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 ++ ++eval $set_cc_for_build ++cat >$dummy.c < ++# include ++#endif ++main () ++{ ++#if defined (sony) ++#if defined (MIPSEB) ++ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, ++ I don't know.... */ ++ printf ("mips-sony-bsd\n"); exit (0); ++#else ++#include ++ printf ("m68k-sony-newsos%s\n", ++#ifdef NEWSOS4 ++ "4" ++#else ++ "" ++#endif ++ ); exit (0); ++#endif ++#endif ++ ++#if defined (__arm) && defined (__acorn) && defined (__unix) ++ printf ("arm-acorn-riscix\n"); exit (0); ++#endif ++ ++#if defined (hp300) && !defined (hpux) ++ printf ("m68k-hp-bsd\n"); exit (0); ++#endif ++ ++#if defined (NeXT) ++#if !defined (__ARCHITECTURE__) ++#define __ARCHITECTURE__ "m68k" ++#endif ++ int version; ++ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; ++ if (version < 4) ++ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); ++ else ++ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); ++ exit (0); ++#endif ++ ++#if defined (MULTIMAX) || defined (n16) ++#if defined (UMAXV) ++ printf ("ns32k-encore-sysv\n"); exit (0); ++#else ++#if defined (CMU) ++ printf ("ns32k-encore-mach\n"); exit (0); ++#else ++ printf ("ns32k-encore-bsd\n"); exit (0); ++#endif ++#endif ++#endif ++ ++#if defined (__386BSD__) ++ printf ("i386-pc-bsd\n"); exit (0); ++#endif ++ ++#if defined (sequent) ++#if defined (i386) ++ printf ("i386-sequent-dynix\n"); exit (0); ++#endif ++#if defined (ns32000) ++ printf ("ns32k-sequent-dynix\n"); exit (0); ++#endif ++#endif ++ ++#if defined (_SEQUENT_) ++ struct utsname un; ++ ++ uname(&un); ++ ++ if (strncmp(un.version, "V2", 2) == 0) { ++ printf ("i386-sequent-ptx2\n"); exit (0); ++ } ++ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ ++ printf ("i386-sequent-ptx1\n"); exit (0); ++ } ++ printf ("i386-sequent-ptx\n"); exit (0); ++ ++#endif ++ ++#if defined (vax) ++# if !defined (ultrix) ++# include ++# if defined (BSD) ++# if BSD == 43 ++ printf ("vax-dec-bsd4.3\n"); exit (0); ++# else ++# if BSD == 199006 ++ printf ("vax-dec-bsd4.3reno\n"); exit (0); ++# else ++ printf ("vax-dec-bsd\n"); exit (0); ++# endif ++# endif ++# else ++ printf ("vax-dec-bsd\n"); exit (0); ++# endif ++# else ++ printf ("vax-dec-ultrix\n"); exit (0); ++# endif ++#endif ++ ++#if defined (alliant) && defined (i860) ++ printf ("i860-alliant-bsd\n"); exit (0); ++#endif ++ ++ exit (1); ++} ++EOF ++ ++$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && ++ { echo "$SYSTEM_NAME"; exit; } ++ ++# Apollos put the system type in the environment. ++ ++test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } ++ ++# Convex versions that predate uname can use getsysinfo(1) ++ ++if [ -x /usr/convex/getsysinfo ] ++then ++ case `getsysinfo -f cpu_type` in ++ c1*) ++ echo c1-convex-bsd ++ exit ;; ++ c2*) ++ if getsysinfo -f scalar_acc ++ then echo c32-convex-bsd ++ else echo c2-convex-bsd ++ fi ++ exit ;; ++ c34*) ++ echo c34-convex-bsd ++ exit ;; ++ c38*) ++ echo c38-convex-bsd ++ exit ;; ++ c4*) ++ echo c4-convex-bsd ++ exit ;; ++ esac ++fi ++ ++cat >&2 < in order to provide the needed ++information to handle your system. ++ ++config.guess timestamp = $timestamp ++ ++uname -m = `(uname -m) 2>/dev/null || echo unknown` ++uname -r = `(uname -r) 2>/dev/null || echo unknown` ++uname -s = `(uname -s) 2>/dev/null || echo unknown` ++uname -v = `(uname -v) 2>/dev/null || echo unknown` ++ ++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` ++/bin/uname -X = `(/bin/uname -X) 2>/dev/null` ++ ++hostinfo = `(hostinfo) 2>/dev/null` ++/bin/universe = `(/bin/universe) 2>/dev/null` ++/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` ++/bin/arch = `(/bin/arch) 2>/dev/null` ++/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` ++/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` ++ ++UNAME_MACHINE = ${UNAME_MACHINE} ++UNAME_RELEASE = ${UNAME_RELEASE} ++UNAME_SYSTEM = ${UNAME_SYSTEM} ++UNAME_VERSION = ${UNAME_VERSION} ++EOF ++ ++exit 1 ++ ++# Local variables: ++# eval: (add-hook 'write-file-hooks 'time-stamp) ++# time-stamp-start: "timestamp='" ++# time-stamp-format: "%:y-%02m-%02d" ++# time-stamp-end: "'" ++# End: +diff --git a/libclamav/libmspack-0.4alpha/config.h.in b/libclamav/libmspack-0.4alpha/config.h.in +new file mode 100644 +index 000000000000..3c763df74f7a +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/config.h.in +@@ -0,0 +1,113 @@ ++/* config.h.in. Generated from configure.ac by autoheader. */ ++ ++/* Turn debugging mode on? */ ++#undef DEBUG ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_CTYPE_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_DLFCN_H ++ ++/* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ ++#undef HAVE_FSEEKO ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_INTTYPES_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_LIMITS_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_MEMORY_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_STDINT_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_STDLIB_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_STRINGS_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_STRING_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_SYS_STAT_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_SYS_TYPES_H ++ ++/* Define to 1 if you have the `tolower' function. */ ++#undef HAVE_TOLOWER ++ ++/* Define to 1 if you have the `towlower' function. */ ++#undef HAVE_TOWLOWER ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_UNISTD_H ++ ++/* Define to 1 if you have the header file. */ ++#undef HAVE_WCTYPE_H ++ ++/* Define to the sub-directory in which libtool stores uninstalled libraries. ++ */ ++#undef LT_OBJDIR ++ ++/* 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 ++ ++/* The size of `off_t', as computed by sizeof. */ ++#undef SIZEOF_OFF_T ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#undef STDC_HEADERS ++ ++/* Version number of package */ ++#undef VERSION ++ ++/* Number of bits in a file offset, on hosts where this is settable. */ ++#undef _FILE_OFFSET_BITS ++ ++/* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ ++#undef _LARGEFILE_SOURCE ++ ++/* Define for large files, on AIX-style hosts. */ ++#undef _LARGE_FILES ++ ++/* Define to empty if `const' does not conform to ANSI C. */ ++#undef const ++ ++/* Define to `__inline__' or `__inline' if that's what the C compiler ++ calls it, or to nothing if 'inline' is not supported under any name. */ ++#ifndef __cplusplus ++#undef inline ++#endif ++ ++/* Define to `int' if does not define. */ ++#undef mode_t ++ ++/* Define to `long int' if does not define. */ ++#undef off_t ++ ++/* Define to `unsigned int' if does not define. */ ++#undef size_t +diff --git a/libclamav/libmspack-0.4alpha/config.sub b/libclamav/libmspack-0.4alpha/config.sub +new file mode 100755 +index 000000000000..c894da45500c +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/config.sub +@@ -0,0 +1,1773 @@ ++#! /bin/sh ++# Configuration validation subroutine script. ++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, ++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, ++# 2011, 2012 Free Software Foundation, Inc. ++ ++timestamp='2012-02-10' ++ ++# This file is (in principle) common to ALL GNU software. ++# The presence of a machine in this file suggests that SOME GNU software ++# can handle that machine. It does not imply ALL GNU software can. ++# ++# This file is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, 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. ++ ++ ++# Please send patches to . Submit a context ++# diff and a properly formatted GNU ChangeLog entry. ++# ++# Configuration subroutine to validate and canonicalize a configuration type. ++# Supply the specified configuration type as an argument. ++# If it is invalid, we print an error message on stderr and exit with code 1. ++# Otherwise, we print the canonical config type on stdout and succeed. ++ ++# You can get the latest version of this script from: ++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD ++ ++# This file is supposed to be the same for all GNU packages ++# and recognize all the CPU types, system types and aliases ++# that are meaningful with *any* GNU software. ++# Each package is responsible for reporting which valid configurations ++# it does not support. The user should be able to distinguish ++# a failure to support a valid configuration from a meaningless ++# configuration. ++ ++# The goal of this file is to map all the various variations of a given ++# machine specification into a single specification in the form: ++# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM ++# or in some cases, the newer four-part form: ++# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM ++# It is wrong to echo any other type of specification. ++ ++me=`echo "$0" | sed -e 's,.*/,,'` ++ ++usage="\ ++Usage: $0 [OPTION] CPU-MFR-OPSYS ++ $0 [OPTION] ALIAS ++ ++Canonicalize a configuration name. ++ ++Operation modes: ++ -h, --help print this help, then exit ++ -t, --time-stamp print date of last modification, then exit ++ -v, --version print version number, then exit ++ ++Report bugs and patches to ." ++ ++version="\ ++GNU config.sub ($timestamp) ++ ++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, ++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 ++Free Software Foundation, Inc. ++ ++This is free software; see the source for copying conditions. There is NO ++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." ++ ++help=" ++Try \`$me --help' for more information." ++ ++# Parse command line ++while test $# -gt 0 ; do ++ case $1 in ++ --time-stamp | --time* | -t ) ++ echo "$timestamp" ; exit ;; ++ --version | -v ) ++ echo "$version" ; exit ;; ++ --help | --h* | -h ) ++ echo "$usage"; exit ;; ++ -- ) # Stop option processing ++ shift; break ;; ++ - ) # Use stdin as input. ++ break ;; ++ -* ) ++ echo "$me: invalid option $1$help" ++ exit 1 ;; ++ ++ *local*) ++ # First pass through any local machine types. ++ echo $1 ++ exit ;; ++ ++ * ) ++ break ;; ++ esac ++done ++ ++case $# in ++ 0) echo "$me: missing argument$help" >&2 ++ exit 1;; ++ 1) ;; ++ *) echo "$me: too many arguments$help" >&2 ++ exit 1;; ++esac ++ ++# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). ++# Here we must recognize all the valid KERNEL-OS combinations. ++maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` ++case $maybe_os in ++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ ++ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ ++ knetbsd*-gnu* | netbsd*-gnu* | \ ++ kopensolaris*-gnu* | \ ++ storm-chaos* | os2-emx* | rtmk-nova*) ++ os=-$maybe_os ++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ++ ;; ++ android-linux) ++ os=-linux-android ++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ++ ;; ++ *) ++ basic_machine=`echo $1 | sed 's/-[^-]*$//'` ++ if [ $basic_machine != $1 ] ++ then os=`echo $1 | sed 's/.*-/-/'` ++ else os=; fi ++ ;; ++esac ++ ++### Let's recognize common machines as not being operating systems so ++### that things like config.sub decstation-3100 work. We also ++### recognize some manufacturers as not being operating systems, so we ++### can provide default operating systems below. ++case $os in ++ -sun*os*) ++ # Prevent following clause from handling this invalid input. ++ ;; ++ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ ++ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ ++ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ ++ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ ++ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ ++ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ ++ -apple | -axis | -knuth | -cray | -microblaze) ++ os= ++ basic_machine=$1 ++ ;; ++ -bluegene*) ++ os=-cnk ++ ;; ++ -sim | -cisco | -oki | -wec | -winbond) ++ os= ++ basic_machine=$1 ++ ;; ++ -scout) ++ ;; ++ -wrs) ++ os=-vxworks ++ basic_machine=$1 ++ ;; ++ -chorusos*) ++ os=-chorusos ++ basic_machine=$1 ++ ;; ++ -chorusrdb) ++ os=-chorusrdb ++ basic_machine=$1 ++ ;; ++ -hiux*) ++ os=-hiuxwe2 ++ ;; ++ -sco6) ++ os=-sco5v6 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco5) ++ os=-sco3.2v5 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco4) ++ os=-sco3.2v4 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco3.2.[4-9]*) ++ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco3.2v[4-9]*) ++ # Don't forget version if it is 3.2v4 or newer. ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco5v6*) ++ # Don't forget version if it is 3.2v4 or newer. ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -sco*) ++ os=-sco3.2v2 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -udk*) ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -isc) ++ os=-isc2.2 ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -clix*) ++ basic_machine=clipper-intergraph ++ ;; ++ -isc*) ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ++ ;; ++ -lynx*) ++ os=-lynxos ++ ;; ++ -ptx*) ++ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ++ ;; ++ -windowsnt*) ++ os=`echo $os | sed -e 's/windowsnt/winnt/'` ++ ;; ++ -psos*) ++ os=-psos ++ ;; ++ -mint | -mint[0-9]*) ++ basic_machine=m68k-atari ++ os=-mint ++ ;; ++esac ++ ++# Decode aliases for certain CPU-COMPANY combinations. ++case $basic_machine in ++ # Recognize the basic CPU types without company name. ++ # Some are omitted here because they have special meanings below. ++ 1750a | 580 \ ++ | a29k \ ++ | aarch64 | aarch64_be \ ++ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ ++ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ ++ | am33_2.0 \ ++ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ ++ | be32 | be64 \ ++ | bfin \ ++ | c4x | clipper \ ++ | d10v | d30v | dlx | dsp16xx \ ++ | epiphany \ ++ | fido | fr30 | frv \ ++ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ ++ | hexagon \ ++ | i370 | i860 | i960 | ia64 \ ++ | ip2k | iq2000 \ ++ | le32 | le64 \ ++ | lm32 \ ++ | m32c | m32r | m32rle | m68000 | m68k | m88k \ ++ | maxq | mb | microblaze | mcore | mep | metag \ ++ | mips | mipsbe | mipseb | mipsel | mipsle \ ++ | mips16 \ ++ | mips64 | mips64el \ ++ | mips64octeon | mips64octeonel \ ++ | mips64orion | mips64orionel \ ++ | mips64r5900 | mips64r5900el \ ++ | mips64vr | mips64vrel \ ++ | mips64vr4100 | mips64vr4100el \ ++ | mips64vr4300 | mips64vr4300el \ ++ | mips64vr5000 | mips64vr5000el \ ++ | mips64vr5900 | mips64vr5900el \ ++ | mipsisa32 | mipsisa32el \ ++ | mipsisa32r2 | mipsisa32r2el \ ++ | mipsisa64 | mipsisa64el \ ++ | mipsisa64r2 | mipsisa64r2el \ ++ | mipsisa64sb1 | mipsisa64sb1el \ ++ | mipsisa64sr71k | mipsisa64sr71kel \ ++ | mipstx39 | mipstx39el \ ++ | mn10200 | mn10300 \ ++ | moxie \ ++ | mt \ ++ | msp430 \ ++ | nds32 | nds32le | nds32be \ ++ | nios | nios2 \ ++ | ns16k | ns32k \ ++ | open8 \ ++ | or32 \ ++ | pdp10 | pdp11 | pj | pjl \ ++ | powerpc | powerpc64 | powerpc64le | powerpcle \ ++ | pyramid \ ++ | rl78 | rx \ ++ | score \ ++ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ ++ | sh64 | sh64le \ ++ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ ++ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ ++ | spu \ ++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ ++ | ubicom32 \ ++ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ ++ | we32k \ ++ | x86 | xc16x | xstormy16 | xtensa \ ++ | z8k | z80) ++ basic_machine=$basic_machine-unknown ++ ;; ++ c54x) ++ basic_machine=tic54x-unknown ++ ;; ++ c55x) ++ basic_machine=tic55x-unknown ++ ;; ++ c6x) ++ basic_machine=tic6x-unknown ++ ;; ++ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) ++ basic_machine=$basic_machine-unknown ++ os=-none ++ ;; ++ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ++ ;; ++ ms1) ++ basic_machine=mt-unknown ++ ;; ++ ++ strongarm | thumb | xscale) ++ basic_machine=arm-unknown ++ ;; ++ xgate) ++ basic_machine=$basic_machine-unknown ++ os=-none ++ ;; ++ xscaleeb) ++ basic_machine=armeb-unknown ++ ;; ++ ++ xscaleel) ++ basic_machine=armel-unknown ++ ;; ++ ++ # We use `pc' rather than `unknown' ++ # because (1) that's what they normally are, and ++ # (2) the word "unknown" tends to confuse beginning users. ++ i*86 | x86_64) ++ basic_machine=$basic_machine-pc ++ ;; ++ # Object if more than one company name word. ++ *-*-*) ++ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 ++ exit 1 ++ ;; ++ # Recognize the basic CPU types with company name. ++ 580-* \ ++ | a29k-* \ ++ | aarch64-* | aarch64_be-* \ ++ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ ++ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ ++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ ++ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ ++ | avr-* | avr32-* \ ++ | be32-* | be64-* \ ++ | bfin-* | bs2000-* \ ++ | c[123]* | c30-* | [cjt]90-* | c4x-* \ ++ | clipper-* | craynv-* | cydra-* \ ++ | d10v-* | d30v-* | dlx-* \ ++ | elxsi-* \ ++ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ ++ | h8300-* | h8500-* \ ++ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ ++ | hexagon-* \ ++ | i*86-* | i860-* | i960-* | ia64-* \ ++ | ip2k-* | iq2000-* \ ++ | le32-* | le64-* \ ++ | lm32-* \ ++ | m32c-* | m32r-* | m32rle-* \ ++ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ ++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ ++ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ ++ | mips16-* \ ++ | mips64-* | mips64el-* \ ++ | mips64octeon-* | mips64octeonel-* \ ++ | mips64orion-* | mips64orionel-* \ ++ | mips64r5900-* | mips64r5900el-* \ ++ | mips64vr-* | mips64vrel-* \ ++ | mips64vr4100-* | mips64vr4100el-* \ ++ | mips64vr4300-* | mips64vr4300el-* \ ++ | mips64vr5000-* | mips64vr5000el-* \ ++ | mips64vr5900-* | mips64vr5900el-* \ ++ | mipsisa32-* | mipsisa32el-* \ ++ | mipsisa32r2-* | mipsisa32r2el-* \ ++ | mipsisa64-* | mipsisa64el-* \ ++ | mipsisa64r2-* | mipsisa64r2el-* \ ++ | mipsisa64sb1-* | mipsisa64sb1el-* \ ++ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ ++ | mipstx39-* | mipstx39el-* \ ++ | mmix-* \ ++ | mt-* \ ++ | msp430-* \ ++ | nds32-* | nds32le-* | nds32be-* \ ++ | nios-* | nios2-* \ ++ | none-* | np1-* | ns16k-* | ns32k-* \ ++ | open8-* \ ++ | orion-* \ ++ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ ++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ ++ | pyramid-* \ ++ | rl78-* | romp-* | rs6000-* | rx-* \ ++ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ ++ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ ++ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ ++ | sparclite-* \ ++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ ++ | tahoe-* \ ++ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ ++ | tile*-* \ ++ | tron-* \ ++ | ubicom32-* \ ++ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ ++ | vax-* \ ++ | we32k-* \ ++ | x86-* | x86_64-* | xc16x-* | xps100-* \ ++ | xstormy16-* | xtensa*-* \ ++ | ymp-* \ ++ | z8k-* | z80-*) ++ ;; ++ # Recognize the basic CPU types without company name, with glob match. ++ xtensa*) ++ basic_machine=$basic_machine-unknown ++ ;; ++ # Recognize the various machine names and aliases which stand ++ # for a CPU type and a company and sometimes even an OS. ++ 386bsd) ++ basic_machine=i386-unknown ++ os=-bsd ++ ;; ++ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) ++ basic_machine=m68000-att ++ ;; ++ 3b*) ++ basic_machine=we32k-att ++ ;; ++ a29khif) ++ basic_machine=a29k-amd ++ os=-udi ++ ;; ++ abacus) ++ basic_machine=abacus-unknown ++ ;; ++ adobe68k) ++ basic_machine=m68010-adobe ++ os=-scout ++ ;; ++ alliant | fx80) ++ basic_machine=fx80-alliant ++ ;; ++ altos | altos3068) ++ basic_machine=m68k-altos ++ ;; ++ am29k) ++ basic_machine=a29k-none ++ os=-bsd ++ ;; ++ amd64) ++ basic_machine=x86_64-pc ++ ;; ++ amd64-*) ++ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ amdahl) ++ basic_machine=580-amdahl ++ os=-sysv ++ ;; ++ amiga | amiga-*) ++ basic_machine=m68k-unknown ++ ;; ++ amigaos | amigados) ++ basic_machine=m68k-unknown ++ os=-amigaos ++ ;; ++ amigaunix | amix) ++ basic_machine=m68k-unknown ++ os=-sysv4 ++ ;; ++ apollo68) ++ basic_machine=m68k-apollo ++ os=-sysv ++ ;; ++ apollo68bsd) ++ basic_machine=m68k-apollo ++ os=-bsd ++ ;; ++ aros) ++ basic_machine=i386-pc ++ os=-aros ++ ;; ++ aux) ++ basic_machine=m68k-apple ++ os=-aux ++ ;; ++ balance) ++ basic_machine=ns32k-sequent ++ os=-dynix ++ ;; ++ blackfin) ++ basic_machine=bfin-unknown ++ os=-linux ++ ;; ++ blackfin-*) ++ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; ++ bluegene*) ++ basic_machine=powerpc-ibm ++ os=-cnk ++ ;; ++ c54x-*) ++ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c55x-*) ++ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c6x-*) ++ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ c90) ++ basic_machine=c90-cray ++ os=-unicos ++ ;; ++ cegcc) ++ basic_machine=arm-unknown ++ os=-cegcc ++ ;; ++ convex-c1) ++ basic_machine=c1-convex ++ os=-bsd ++ ;; ++ convex-c2) ++ basic_machine=c2-convex ++ os=-bsd ++ ;; ++ convex-c32) ++ basic_machine=c32-convex ++ os=-bsd ++ ;; ++ convex-c34) ++ basic_machine=c34-convex ++ os=-bsd ++ ;; ++ convex-c38) ++ basic_machine=c38-convex ++ os=-bsd ++ ;; ++ cray | j90) ++ basic_machine=j90-cray ++ os=-unicos ++ ;; ++ craynv) ++ basic_machine=craynv-cray ++ os=-unicosmp ++ ;; ++ cr16 | cr16-*) ++ basic_machine=cr16-unknown ++ os=-elf ++ ;; ++ crds | unos) ++ basic_machine=m68k-crds ++ ;; ++ crisv32 | crisv32-* | etraxfs*) ++ basic_machine=crisv32-axis ++ ;; ++ cris | cris-* | etrax*) ++ basic_machine=cris-axis ++ ;; ++ crx) ++ basic_machine=crx-unknown ++ os=-elf ++ ;; ++ da30 | da30-*) ++ basic_machine=m68k-da30 ++ ;; ++ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) ++ basic_machine=mips-dec ++ ;; ++ decsystem10* | dec10*) ++ basic_machine=pdp10-dec ++ os=-tops10 ++ ;; ++ decsystem20* | dec20*) ++ basic_machine=pdp10-dec ++ os=-tops20 ++ ;; ++ delta | 3300 | motorola-3300 | motorola-delta \ ++ | 3300-motorola | delta-motorola) ++ basic_machine=m68k-motorola ++ ;; ++ delta88) ++ basic_machine=m88k-motorola ++ os=-sysv3 ++ ;; ++ dicos) ++ basic_machine=i686-pc ++ os=-dicos ++ ;; ++ djgpp) ++ basic_machine=i586-pc ++ os=-msdosdjgpp ++ ;; ++ dpx20 | dpx20-*) ++ basic_machine=rs6000-bull ++ os=-bosx ++ ;; ++ dpx2* | dpx2*-bull) ++ basic_machine=m68k-bull ++ os=-sysv3 ++ ;; ++ ebmon29k) ++ basic_machine=a29k-amd ++ os=-ebmon ++ ;; ++ elxsi) ++ basic_machine=elxsi-elxsi ++ os=-bsd ++ ;; ++ encore | umax | mmax) ++ basic_machine=ns32k-encore ++ ;; ++ es1800 | OSE68k | ose68k | ose | OSE) ++ basic_machine=m68k-ericsson ++ os=-ose ++ ;; ++ fx2800) ++ basic_machine=i860-alliant ++ ;; ++ genix) ++ basic_machine=ns32k-ns ++ ;; ++ gmicro) ++ basic_machine=tron-gmicro ++ os=-sysv ++ ;; ++ go32) ++ basic_machine=i386-pc ++ os=-go32 ++ ;; ++ h3050r* | hiux*) ++ basic_machine=hppa1.1-hitachi ++ os=-hiuxwe2 ++ ;; ++ h8300hms) ++ basic_machine=h8300-hitachi ++ os=-hms ++ ;; ++ h8300xray) ++ basic_machine=h8300-hitachi ++ os=-xray ++ ;; ++ h8500hms) ++ basic_machine=h8500-hitachi ++ os=-hms ++ ;; ++ harris) ++ basic_machine=m88k-harris ++ os=-sysv3 ++ ;; ++ hp300-*) ++ basic_machine=m68k-hp ++ ;; ++ hp300bsd) ++ basic_machine=m68k-hp ++ os=-bsd ++ ;; ++ hp300hpux) ++ basic_machine=m68k-hp ++ os=-hpux ++ ;; ++ hp3k9[0-9][0-9] | hp9[0-9][0-9]) ++ basic_machine=hppa1.0-hp ++ ;; ++ hp9k2[0-9][0-9] | hp9k31[0-9]) ++ basic_machine=m68000-hp ++ ;; ++ hp9k3[2-9][0-9]) ++ basic_machine=m68k-hp ++ ;; ++ hp9k6[0-9][0-9] | hp6[0-9][0-9]) ++ basic_machine=hppa1.0-hp ++ ;; ++ hp9k7[0-79][0-9] | hp7[0-79][0-9]) ++ basic_machine=hppa1.1-hp ++ ;; ++ hp9k78[0-9] | hp78[0-9]) ++ # FIXME: really hppa2.0-hp ++ basic_machine=hppa1.1-hp ++ ;; ++ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) ++ # FIXME: really hppa2.0-hp ++ basic_machine=hppa1.1-hp ++ ;; ++ hp9k8[0-9][13679] | hp8[0-9][13679]) ++ basic_machine=hppa1.1-hp ++ ;; ++ hp9k8[0-9][0-9] | hp8[0-9][0-9]) ++ basic_machine=hppa1.0-hp ++ ;; ++ hppa-next) ++ os=-nextstep3 ++ ;; ++ hppaosf) ++ basic_machine=hppa1.1-hp ++ os=-osf ++ ;; ++ hppro) ++ basic_machine=hppa1.1-hp ++ os=-proelf ++ ;; ++ i370-ibm* | ibm*) ++ basic_machine=i370-ibm ++ ;; ++ i*86v32) ++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` ++ os=-sysv32 ++ ;; ++ i*86v4*) ++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` ++ os=-sysv4 ++ ;; ++ i*86v) ++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` ++ os=-sysv ++ ;; ++ i*86sol2) ++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` ++ os=-solaris2 ++ ;; ++ i386mach) ++ basic_machine=i386-mach ++ os=-mach ++ ;; ++ i386-vsta | vsta) ++ basic_machine=i386-unknown ++ os=-vsta ++ ;; ++ iris | iris4d) ++ basic_machine=mips-sgi ++ case $os in ++ -irix*) ++ ;; ++ *) ++ os=-irix4 ++ ;; ++ esac ++ ;; ++ isi68 | isi) ++ basic_machine=m68k-isi ++ os=-sysv ++ ;; ++ m68knommu) ++ basic_machine=m68k-unknown ++ os=-linux ++ ;; ++ m68knommu-*) ++ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; ++ m88k-omron*) ++ basic_machine=m88k-omron ++ ;; ++ magnum | m3230) ++ basic_machine=mips-mips ++ os=-sysv ++ ;; ++ merlin) ++ basic_machine=ns32k-utek ++ os=-sysv ++ ;; ++ microblaze) ++ basic_machine=microblaze-xilinx ++ ;; ++ mingw32) ++ basic_machine=i386-pc ++ os=-mingw32 ++ ;; ++ mingw32ce) ++ basic_machine=arm-unknown ++ os=-mingw32ce ++ ;; ++ miniframe) ++ basic_machine=m68000-convergent ++ ;; ++ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) ++ basic_machine=m68k-atari ++ os=-mint ++ ;; ++ mips3*-*) ++ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ++ ;; ++ mips3*) ++ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ++ ;; ++ monitor) ++ basic_machine=m68k-rom68k ++ os=-coff ++ ;; ++ morphos) ++ basic_machine=powerpc-unknown ++ os=-morphos ++ ;; ++ msdos) ++ basic_machine=i386-pc ++ os=-msdos ++ ;; ++ ms1-*) ++ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ++ ;; ++ msys) ++ basic_machine=i386-pc ++ os=-msys ++ ;; ++ mvs) ++ basic_machine=i370-ibm ++ os=-mvs ++ ;; ++ nacl) ++ basic_machine=le32-unknown ++ os=-nacl ++ ;; ++ ncr3000) ++ basic_machine=i486-ncr ++ os=-sysv4 ++ ;; ++ netbsd386) ++ basic_machine=i386-unknown ++ os=-netbsd ++ ;; ++ netwinder) ++ basic_machine=armv4l-rebel ++ os=-linux ++ ;; ++ news | news700 | news800 | news900) ++ basic_machine=m68k-sony ++ os=-newsos ++ ;; ++ news1000) ++ basic_machine=m68030-sony ++ os=-newsos ++ ;; ++ news-3600 | risc-news) ++ basic_machine=mips-sony ++ os=-newsos ++ ;; ++ necv70) ++ basic_machine=v70-nec ++ os=-sysv ++ ;; ++ next | m*-next ) ++ basic_machine=m68k-next ++ case $os in ++ -nextstep* ) ++ ;; ++ -ns2*) ++ os=-nextstep2 ++ ;; ++ *) ++ os=-nextstep3 ++ ;; ++ esac ++ ;; ++ nh3000) ++ basic_machine=m68k-harris ++ os=-cxux ++ ;; ++ nh[45]000) ++ basic_machine=m88k-harris ++ os=-cxux ++ ;; ++ nindy960) ++ basic_machine=i960-intel ++ os=-nindy ++ ;; ++ mon960) ++ basic_machine=i960-intel ++ os=-mon960 ++ ;; ++ nonstopux) ++ basic_machine=mips-compaq ++ os=-nonstopux ++ ;; ++ np1) ++ basic_machine=np1-gould ++ ;; ++ neo-tandem) ++ basic_machine=neo-tandem ++ ;; ++ nse-tandem) ++ basic_machine=nse-tandem ++ ;; ++ nsr-tandem) ++ basic_machine=nsr-tandem ++ ;; ++ op50n-* | op60c-*) ++ basic_machine=hppa1.1-oki ++ os=-proelf ++ ;; ++ openrisc | openrisc-*) ++ basic_machine=or32-unknown ++ ;; ++ os400) ++ basic_machine=powerpc-ibm ++ os=-os400 ++ ;; ++ OSE68000 | ose68000) ++ basic_machine=m68000-ericsson ++ os=-ose ++ ;; ++ os68k) ++ basic_machine=m68k-none ++ os=-os68k ++ ;; ++ pa-hitachi) ++ basic_machine=hppa1.1-hitachi ++ os=-hiuxwe2 ++ ;; ++ paragon) ++ basic_machine=i860-intel ++ os=-osf ++ ;; ++ parisc) ++ basic_machine=hppa-unknown ++ os=-linux ++ ;; ++ parisc-*) ++ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` ++ os=-linux ++ ;; ++ pbd) ++ basic_machine=sparc-tti ++ ;; ++ pbb) ++ basic_machine=m68k-tti ++ ;; ++ pc532 | pc532-*) ++ basic_machine=ns32k-pc532 ++ ;; ++ pc98) ++ basic_machine=i386-pc ++ ;; ++ pc98-*) ++ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pentium | p5 | k5 | k6 | nexgen | viac3) ++ basic_machine=i586-pc ++ ;; ++ pentiumpro | p6 | 6x86 | athlon | athlon_*) ++ basic_machine=i686-pc ++ ;; ++ pentiumii | pentium2 | pentiumiii | pentium3) ++ basic_machine=i686-pc ++ ;; ++ pentium4) ++ basic_machine=i786-pc ++ ;; ++ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) ++ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pentiumpro-* | p6-* | 6x86-* | athlon-*) ++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) ++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pentium4-*) ++ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ pn) ++ basic_machine=pn-gould ++ ;; ++ power) basic_machine=power-ibm ++ ;; ++ ppc | ppcbe) basic_machine=powerpc-unknown ++ ;; ++ ppc-* | ppcbe-*) ++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ ppcle | powerpclittle | ppc-le | powerpc-little) ++ basic_machine=powerpcle-unknown ++ ;; ++ ppcle-* | powerpclittle-*) ++ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ ppc64) basic_machine=powerpc64-unknown ++ ;; ++ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ ppc64le | powerpc64little | ppc64-le | powerpc64-little) ++ basic_machine=powerpc64le-unknown ++ ;; ++ ppc64le-* | powerpc64little-*) ++ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ ps2) ++ basic_machine=i386-ibm ++ ;; ++ pw32) ++ basic_machine=i586-unknown ++ os=-pw32 ++ ;; ++ rdos) ++ basic_machine=i386-pc ++ os=-rdos ++ ;; ++ rom68k) ++ basic_machine=m68k-rom68k ++ os=-coff ++ ;; ++ rm[46]00) ++ basic_machine=mips-siemens ++ ;; ++ rtpc | rtpc-*) ++ basic_machine=romp-ibm ++ ;; ++ s390 | s390-*) ++ basic_machine=s390-ibm ++ ;; ++ s390x | s390x-*) ++ basic_machine=s390x-ibm ++ ;; ++ sa29200) ++ basic_machine=a29k-amd ++ os=-udi ++ ;; ++ sb1) ++ basic_machine=mipsisa64sb1-unknown ++ ;; ++ sb1el) ++ basic_machine=mipsisa64sb1el-unknown ++ ;; ++ sde) ++ basic_machine=mipsisa32-sde ++ os=-elf ++ ;; ++ sei) ++ basic_machine=mips-sei ++ os=-seiux ++ ;; ++ sequent) ++ basic_machine=i386-sequent ++ ;; ++ sh) ++ basic_machine=sh-hitachi ++ os=-hms ++ ;; ++ sh5el) ++ basic_machine=sh5le-unknown ++ ;; ++ sh64) ++ basic_machine=sh64-unknown ++ ;; ++ sparclite-wrs | simso-wrs) ++ basic_machine=sparclite-wrs ++ os=-vxworks ++ ;; ++ sps7) ++ basic_machine=m68k-bull ++ os=-sysv2 ++ ;; ++ spur) ++ basic_machine=spur-unknown ++ ;; ++ st2000) ++ basic_machine=m68k-tandem ++ ;; ++ stratus) ++ basic_machine=i860-stratus ++ os=-sysv4 ++ ;; ++ strongarm-* | thumb-*) ++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ++ ;; ++ sun2) ++ basic_machine=m68000-sun ++ ;; ++ sun2os3) ++ basic_machine=m68000-sun ++ os=-sunos3 ++ ;; ++ sun2os4) ++ basic_machine=m68000-sun ++ os=-sunos4 ++ ;; ++ sun3os3) ++ basic_machine=m68k-sun ++ os=-sunos3 ++ ;; ++ sun3os4) ++ basic_machine=m68k-sun ++ os=-sunos4 ++ ;; ++ sun4os3) ++ basic_machine=sparc-sun ++ os=-sunos3 ++ ;; ++ sun4os4) ++ basic_machine=sparc-sun ++ os=-sunos4 ++ ;; ++ sun4sol2) ++ basic_machine=sparc-sun ++ os=-solaris2 ++ ;; ++ sun3 | sun3-*) ++ basic_machine=m68k-sun ++ ;; ++ sun4) ++ basic_machine=sparc-sun ++ ;; ++ sun386 | sun386i | roadrunner) ++ basic_machine=i386-sun ++ ;; ++ sv1) ++ basic_machine=sv1-cray ++ os=-unicos ++ ;; ++ symmetry) ++ basic_machine=i386-sequent ++ os=-dynix ++ ;; ++ t3e) ++ basic_machine=alphaev5-cray ++ os=-unicos ++ ;; ++ t90) ++ basic_machine=t90-cray ++ os=-unicos ++ ;; ++ tile*) ++ basic_machine=$basic_machine-unknown ++ os=-linux-gnu ++ ;; ++ tx39) ++ basic_machine=mipstx39-unknown ++ ;; ++ tx39el) ++ basic_machine=mipstx39el-unknown ++ ;; ++ toad1) ++ basic_machine=pdp10-xkl ++ os=-tops20 ++ ;; ++ tower | tower-32) ++ basic_machine=m68k-ncr ++ ;; ++ tpf) ++ basic_machine=s390x-ibm ++ os=-tpf ++ ;; ++ udi29k) ++ basic_machine=a29k-amd ++ os=-udi ++ ;; ++ ultra3) ++ basic_machine=a29k-nyu ++ os=-sym1 ++ ;; ++ v810 | necv810) ++ basic_machine=v810-nec ++ os=-none ++ ;; ++ vaxv) ++ basic_machine=vax-dec ++ os=-sysv ++ ;; ++ vms) ++ basic_machine=vax-dec ++ os=-vms ++ ;; ++ vpp*|vx|vx-*) ++ basic_machine=f301-fujitsu ++ ;; ++ vxworks960) ++ basic_machine=i960-wrs ++ os=-vxworks ++ ;; ++ vxworks68) ++ basic_machine=m68k-wrs ++ os=-vxworks ++ ;; ++ vxworks29k) ++ basic_machine=a29k-wrs ++ os=-vxworks ++ ;; ++ w65*) ++ basic_machine=w65-wdc ++ os=-none ++ ;; ++ w89k-*) ++ basic_machine=hppa1.1-winbond ++ os=-proelf ++ ;; ++ xbox) ++ basic_machine=i686-pc ++ os=-mingw32 ++ ;; ++ xps | xps100) ++ basic_machine=xps100-honeywell ++ ;; ++ xscale-* | xscalee[bl]-*) ++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ++ ;; ++ ymp) ++ basic_machine=ymp-cray ++ os=-unicos ++ ;; ++ z8k-*-coff) ++ basic_machine=z8k-unknown ++ os=-sim ++ ;; ++ z80-*-coff) ++ basic_machine=z80-unknown ++ os=-sim ++ ;; ++ none) ++ basic_machine=none-none ++ os=-none ++ ;; ++ ++# Here we handle the default manufacturer of certain CPU types. It is in ++# some cases the only manufacturer, in others, it is the most popular. ++ w89k) ++ basic_machine=hppa1.1-winbond ++ ;; ++ op50n) ++ basic_machine=hppa1.1-oki ++ ;; ++ op60c) ++ basic_machine=hppa1.1-oki ++ ;; ++ romp) ++ basic_machine=romp-ibm ++ ;; ++ mmix) ++ basic_machine=mmix-knuth ++ ;; ++ rs6000) ++ basic_machine=rs6000-ibm ++ ;; ++ vax) ++ basic_machine=vax-dec ++ ;; ++ pdp10) ++ # there are many clones, so DEC is not a safe bet ++ basic_machine=pdp10-unknown ++ ;; ++ pdp11) ++ basic_machine=pdp11-dec ++ ;; ++ we32k) ++ basic_machine=we32k-att ++ ;; ++ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) ++ basic_machine=sh-unknown ++ ;; ++ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) ++ basic_machine=sparc-sun ++ ;; ++ cydra) ++ basic_machine=cydra-cydrome ++ ;; ++ orion) ++ basic_machine=orion-highlevel ++ ;; ++ orion105) ++ basic_machine=clipper-highlevel ++ ;; ++ mac | mpw | mac-mpw) ++ basic_machine=m68k-apple ++ ;; ++ pmac | pmac-mpw) ++ basic_machine=powerpc-apple ++ ;; ++ *-unknown) ++ # Make sure to match an already-canonicalized machine name. ++ ;; ++ *) ++ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 ++ exit 1 ++ ;; ++esac ++ ++# Here we canonicalize certain aliases for manufacturers. ++case $basic_machine in ++ *-digital*) ++ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ++ ;; ++ *-commodore*) ++ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ++ ;; ++ *) ++ ;; ++esac ++ ++# Decode manufacturer-specific aliases for certain operating systems. ++ ++if [ x"$os" != x"" ] ++then ++case $os in ++ # First match some system type aliases ++ # that might get confused with valid system types. ++ # -solaris* is a basic system type, with this one exception. ++ -auroraux) ++ os=-auroraux ++ ;; ++ -solaris1 | -solaris1.*) ++ os=`echo $os | sed -e 's|solaris1|sunos4|'` ++ ;; ++ -solaris) ++ os=-solaris2 ++ ;; ++ -svr4*) ++ os=-sysv4 ++ ;; ++ -unixware*) ++ os=-sysv4.2uw ++ ;; ++ -gnu/linux*) ++ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ++ ;; ++ # First accept the basic system types. ++ # The portable systems comes first. ++ # Each alternative MUST END IN A *, to match a version number. ++ # -sysv* is not here because it comes later, after sysvr4. ++ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ ++ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ ++ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ ++ | -sym* | -kopensolaris* \ ++ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ ++ | -aos* | -aros* \ ++ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ ++ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ ++ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ ++ | -openbsd* | -solidbsd* \ ++ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ ++ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ ++ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ ++ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ ++ | -chorusos* | -chorusrdb* | -cegcc* \ ++ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ ++ | -mingw32* | -linux-gnu* | -linux-android* \ ++ | -linux-newlib* | -linux-uclibc* \ ++ | -uxpv* | -beos* | -mpeix* | -udk* \ ++ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ ++ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ ++ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ ++ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ ++ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ ++ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ ++ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) ++ # Remember, each alternative MUST END IN *, to match a version number. ++ ;; ++ -qnx*) ++ case $basic_machine in ++ x86-* | i*86-*) ++ ;; ++ *) ++ os=-nto$os ++ ;; ++ esac ++ ;; ++ -nto-qnx*) ++ ;; ++ -nto*) ++ os=`echo $os | sed -e 's|nto|nto-qnx|'` ++ ;; ++ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ ++ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ ++ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ++ ;; ++ -mac*) ++ os=`echo $os | sed -e 's|mac|macos|'` ++ ;; ++ -linux-dietlibc) ++ os=-linux-dietlibc ++ ;; ++ -linux*) ++ os=`echo $os | sed -e 's|linux|linux-gnu|'` ++ ;; ++ -sunos5*) ++ os=`echo $os | sed -e 's|sunos5|solaris2|'` ++ ;; ++ -sunos6*) ++ os=`echo $os | sed -e 's|sunos6|solaris3|'` ++ ;; ++ -opened*) ++ os=-openedition ++ ;; ++ -os400*) ++ os=-os400 ++ ;; ++ -wince*) ++ os=-wince ++ ;; ++ -osfrose*) ++ os=-osfrose ++ ;; ++ -osf*) ++ os=-osf ++ ;; ++ -utek*) ++ os=-bsd ++ ;; ++ -dynix*) ++ os=-bsd ++ ;; ++ -acis*) ++ os=-aos ++ ;; ++ -atheos*) ++ os=-atheos ++ ;; ++ -syllable*) ++ os=-syllable ++ ;; ++ -386bsd) ++ os=-bsd ++ ;; ++ -ctix* | -uts*) ++ os=-sysv ++ ;; ++ -nova*) ++ os=-rtmk-nova ++ ;; ++ -ns2 ) ++ os=-nextstep2 ++ ;; ++ -nsk*) ++ os=-nsk ++ ;; ++ # Preserve the version number of sinix5. ++ -sinix5.*) ++ os=`echo $os | sed -e 's|sinix|sysv|'` ++ ;; ++ -sinix*) ++ os=-sysv4 ++ ;; ++ -tpf*) ++ os=-tpf ++ ;; ++ -triton*) ++ os=-sysv3 ++ ;; ++ -oss*) ++ os=-sysv3 ++ ;; ++ -svr4) ++ os=-sysv4 ++ ;; ++ -svr3) ++ os=-sysv3 ++ ;; ++ -sysvr4) ++ os=-sysv4 ++ ;; ++ # This must come after -sysvr4. ++ -sysv*) ++ ;; ++ -ose*) ++ os=-ose ++ ;; ++ -es1800*) ++ os=-ose ++ ;; ++ -xenix) ++ os=-xenix ++ ;; ++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) ++ os=-mint ++ ;; ++ -aros*) ++ os=-aros ++ ;; ++ -kaos*) ++ os=-kaos ++ ;; ++ -zvmoe) ++ os=-zvmoe ++ ;; ++ -dicos*) ++ os=-dicos ++ ;; ++ -nacl*) ++ ;; ++ -none) ++ ;; ++ *) ++ # Get rid of the `-' at the beginning of $os. ++ os=`echo $os | sed 's/[^-]*-//'` ++ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 ++ exit 1 ++ ;; ++esac ++else ++ ++# Here we handle the default operating systems that come with various machines. ++# The value should be what the vendor currently ships out the door with their ++# machine or put another way, the most popular os provided with the machine. ++ ++# Note that if you're going to try to match "-MANUFACTURER" here (say, ++# "-sun"), then you have to tell the case statement up towards the top ++# that MANUFACTURER isn't an operating system. Otherwise, code above ++# will signal an error saying that MANUFACTURER isn't an operating ++# system, and we'll never get to this point. ++ ++case $basic_machine in ++ score-*) ++ os=-elf ++ ;; ++ spu-*) ++ os=-elf ++ ;; ++ *-acorn) ++ os=-riscix1.2 ++ ;; ++ arm*-rebel) ++ os=-linux ++ ;; ++ arm*-semi) ++ os=-aout ++ ;; ++ c4x-* | tic4x-*) ++ os=-coff ++ ;; ++ tic54x-*) ++ os=-coff ++ ;; ++ tic55x-*) ++ os=-coff ++ ;; ++ tic6x-*) ++ os=-coff ++ ;; ++ # This must come before the *-dec entry. ++ pdp10-*) ++ os=-tops20 ++ ;; ++ pdp11-*) ++ os=-none ++ ;; ++ *-dec | vax-*) ++ os=-ultrix4.2 ++ ;; ++ m68*-apollo) ++ os=-domain ++ ;; ++ i386-sun) ++ os=-sunos4.0.2 ++ ;; ++ m68000-sun) ++ os=-sunos3 ++ ;; ++ m68*-cisco) ++ os=-aout ++ ;; ++ mep-*) ++ os=-elf ++ ;; ++ mips*-cisco) ++ os=-elf ++ ;; ++ mips*-*) ++ os=-elf ++ ;; ++ or32-*) ++ os=-coff ++ ;; ++ *-tti) # must be before sparc entry or we get the wrong os. ++ os=-sysv3 ++ ;; ++ sparc-* | *-sun) ++ os=-sunos4.1.1 ++ ;; ++ *-be) ++ os=-beos ++ ;; ++ *-haiku) ++ os=-haiku ++ ;; ++ *-ibm) ++ os=-aix ++ ;; ++ *-knuth) ++ os=-mmixware ++ ;; ++ *-wec) ++ os=-proelf ++ ;; ++ *-winbond) ++ os=-proelf ++ ;; ++ *-oki) ++ os=-proelf ++ ;; ++ *-hp) ++ os=-hpux ++ ;; ++ *-hitachi) ++ os=-hiux ++ ;; ++ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) ++ os=-sysv ++ ;; ++ *-cbm) ++ os=-amigaos ++ ;; ++ *-dg) ++ os=-dgux ++ ;; ++ *-dolphin) ++ os=-sysv3 ++ ;; ++ m68k-ccur) ++ os=-rtu ++ ;; ++ m88k-omron*) ++ os=-luna ++ ;; ++ *-next ) ++ os=-nextstep ++ ;; ++ *-sequent) ++ os=-ptx ++ ;; ++ *-crds) ++ os=-unos ++ ;; ++ *-ns) ++ os=-genix ++ ;; ++ i370-*) ++ os=-mvs ++ ;; ++ *-next) ++ os=-nextstep3 ++ ;; ++ *-gould) ++ os=-sysv ++ ;; ++ *-highlevel) ++ os=-bsd ++ ;; ++ *-encore) ++ os=-bsd ++ ;; ++ *-sgi) ++ os=-irix ++ ;; ++ *-siemens) ++ os=-sysv4 ++ ;; ++ *-masscomp) ++ os=-rtu ++ ;; ++ f30[01]-fujitsu | f700-fujitsu) ++ os=-uxpv ++ ;; ++ *-rom68k) ++ os=-coff ++ ;; ++ *-*bug) ++ os=-coff ++ ;; ++ *-apple) ++ os=-macos ++ ;; ++ *-atari*) ++ os=-mint ++ ;; ++ *) ++ os=-none ++ ;; ++esac ++fi ++ ++# Here we handle the case where we know the os, and the CPU type, but not the ++# manufacturer. We pick the logical manufacturer. ++vendor=unknown ++case $basic_machine in ++ *-unknown) ++ case $os in ++ -riscix*) ++ vendor=acorn ++ ;; ++ -sunos*) ++ vendor=sun ++ ;; ++ -cnk*|-aix*) ++ vendor=ibm ++ ;; ++ -beos*) ++ vendor=be ++ ;; ++ -hpux*) ++ vendor=hp ++ ;; ++ -mpeix*) ++ vendor=hp ++ ;; ++ -hiux*) ++ vendor=hitachi ++ ;; ++ -unos*) ++ vendor=crds ++ ;; ++ -dgux*) ++ vendor=dg ++ ;; ++ -luna*) ++ vendor=omron ++ ;; ++ -genix*) ++ vendor=ns ++ ;; ++ -mvs* | -opened*) ++ vendor=ibm ++ ;; ++ -os400*) ++ vendor=ibm ++ ;; ++ -ptx*) ++ vendor=sequent ++ ;; ++ -tpf*) ++ vendor=ibm ++ ;; ++ -vxsim* | -vxworks* | -windiss*) ++ vendor=wrs ++ ;; ++ -aux*) ++ vendor=apple ++ ;; ++ -hms*) ++ vendor=hitachi ++ ;; ++ -mpw* | -macos*) ++ vendor=apple ++ ;; ++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) ++ vendor=atari ++ ;; ++ -vos*) ++ vendor=stratus ++ ;; ++ esac ++ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ++ ;; ++esac ++ ++echo $basic_machine$os ++exit ++ ++# Local variables: ++# eval: (add-hook 'write-file-hooks 'time-stamp) ++# time-stamp-start: "timestamp='" ++# time-stamp-format: "%:y-%02m-%02d" ++# time-stamp-end: "'" ++# End: +diff --git a/libclamav/libmspack-0.4alpha/configure b/libclamav/libmspack-0.4alpha/configure +new file mode 100755 +index 000000000000..5f03b36c49ac +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/configure +@@ -0,0 +1,14567 @@ ++#! /bin/sh ++# Guess values for system-dependent variables and create Makefiles. ++# Generated by GNU Autoconf 2.68 for libmspack 0.4alpha. ++# ++# Report bugs to . ++# ++# ++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, ++# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software ++# Foundation, Inc. ++# ++# ++# This configure script is free software; the Free Software Foundation ++# gives unlimited permission to copy, distribute and modify it. ++## -------------------- ## ++## M4sh Initialization. ## ++## -------------------- ## ++ ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : ++ emulate sh ++ NULLCMD=: ++ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in #( ++ *posix*) : ++ set -o posix ;; #( ++ *) : ++ ;; ++esac ++fi ++ ++ ++as_nl=' ++' ++export as_nl ++# Printing a long string crashes Solaris 7 /usr/bin/printf. ++as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo ++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo ++# Prefer a ksh shell builtin over an external printf program on Solaris, ++# but without wasting forks for bash or zsh. ++if test -z "$BASH_VERSION$ZSH_VERSION" \ ++ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then ++ as_echo='print -r --' ++ as_echo_n='print -rn --' ++elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then ++ as_echo='printf %s\n' ++ as_echo_n='printf %s' ++else ++ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then ++ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' ++ as_echo_n='/usr/ucb/echo -n' ++ else ++ as_echo_body='eval expr "X$1" : "X\\(.*\\)"' ++ as_echo_n_body='eval ++ arg=$1; ++ case $arg in #( ++ *"$as_nl"*) ++ expr "X$arg" : "X\\(.*\\)$as_nl"; ++ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; ++ esac; ++ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ++ ' ++ export as_echo_n_body ++ as_echo_n='sh -c $as_echo_n_body as_echo' ++ fi ++ export as_echo_body ++ as_echo='sh -c $as_echo_body as_echo' ++fi ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ PATH_SEPARATOR=: ++ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { ++ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || ++ PATH_SEPARATOR=';' ++ } ++fi ++ ++ ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++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 ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++ done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ exit 1 ++fi ++ ++# Unset variables that we do not need and which cause bugs (e.g. in ++# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" ++# suppresses any "Segmentation fault" message there. '((' could ++# trigger a bug in pdksh 5.2.14. ++for as_var in BASH_ENV ENV MAIL MAILPATH ++do eval test x\${$as_var+set} = xset \ ++ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : ++done ++PS1='$ ' ++PS2='> ' ++PS4='+ ' ++ ++# NLS nuisances. ++LC_ALL=C ++export LC_ALL ++LANGUAGE=C ++export LANGUAGE ++ ++# CDPATH. ++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH ++ ++if test "x$CONFIG_SHELL" = x; then ++ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : ++ emulate sh ++ NULLCMD=: ++ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '\${1+\"\$@\"}'='\"\$@\"' ++ setopt NO_GLOB_SUBST ++else ++ case \`(set -o) 2>/dev/null\` in #( ++ *posix*) : ++ set -o posix ;; #( ++ *) : ++ ;; ++esac ++fi ++" ++ as_required="as_fn_return () { (exit \$1); } ++as_fn_success () { as_fn_return 0; } ++as_fn_failure () { as_fn_return 1; } ++as_fn_ret_success () { return 0; } ++as_fn_ret_failure () { return 1; } ++ ++exitcode=0 ++as_fn_success || { exitcode=1; echo as_fn_success failed.; } ++as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } ++as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } ++as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } ++if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : ++ ++else ++ exitcode=1; echo positional parameters were not saved. ++fi ++test x\$exitcode = x0 || exit 1" ++ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO ++ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO ++ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && ++ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 ++ ++ test -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 ++ as_have_required=no ++fi ++ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : ++ ++else ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++as_found=false ++for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ as_found=: ++ case $as_dir in #( ++ /*) ++ for as_base in sh bash ksh sh5; do ++ # Try only shells that exist, to save several forks. ++ as_shell=$as_dir/$as_base ++ if { test -f "$as_shell" || test -f "$as_shell.exe"; } && ++ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : ++ CONFIG_SHELL=$as_shell as_have_required=yes ++ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : ++ break 2 ++fi ++fi ++ done;; ++ esac ++ as_found=false ++done ++$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && ++ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : ++ CONFIG_SHELL=$SHELL as_have_required=yes ++fi; } ++IFS=$as_save_IFS ++ ++ ++ if test "x$CONFIG_SHELL" != x; then : ++ # We cannot yet assume a decent shell, so we have to provide a ++ # neutralization value for shells without unset; and this also ++ # works around shells that cannot unset nonexistent variables. ++ # 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 ++ export CONFIG_SHELL ++ 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+"$@"} ++fi ++ ++ if test x$as_have_required = xno; then : ++ $as_echo "$0: This script requires a shell more modern than all" ++ $as_echo "$0: the shells that I found on your system." ++ if test x${ZSH_VERSION+set} = xset ; then ++ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" ++ $as_echo "$0: be upgraded to zsh 4.3.4 or later." ++ else ++ $as_echo "$0: Please tell bug-autoconf@gnu.org and kyzer@4u.net about ++$0: your system, including any error possibly output before ++$0: this message. Then install a modern shell, or manually ++$0: run the script under such a shell if you do have one." ++ fi ++ exit 1 ++fi ++fi ++fi ++SHELL=${CONFIG_SHELL-/bin/sh} ++export SHELL ++# Unset more variables known to interfere with behavior of common tools. ++CLICOLOR_FORCE= GREP_OPTIONS= ++unset CLICOLOR_FORCE GREP_OPTIONS ++ ++## --------------------- ## ++## M4sh Shell Functions. ## ++## --------------------- ## ++# as_fn_unset VAR ++# --------------- ++# Portably unset VAR. ++as_fn_unset () ++{ ++ { eval $1=; unset $1;} ++} ++as_unset=as_fn_unset ++ ++# as_fn_set_status STATUS ++# ----------------------- ++# Set $? to STATUS, without forking. ++as_fn_set_status () ++{ ++ return $1 ++} # as_fn_set_status ++ ++# as_fn_exit STATUS ++# ----------------- ++# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. ++as_fn_exit () ++{ ++ set +e ++ as_fn_set_status $1 ++ exit $1 ++} # as_fn_exit ++ ++# as_fn_mkdir_p ++# ------------- ++# Create "$as_dir" as a directory, including parents if necessary. ++as_fn_mkdir_p () ++{ ++ ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || eval $as_mkdir_p || { ++ as_dirs= ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || ++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ ++ X"$as_dir" : 'X\(//\)[^/]' \| \ ++ X"$as_dir" : 'X\(//\)$' \| \ ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || ++$as_echo X"$as_dir" | ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break ++ done ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" ++ ++ ++} # as_fn_mkdir_p ++# as_fn_append VAR VALUE ++# ---------------------- ++# Append the text in VALUE to the end of the definition contained in VAR. Take ++# advantage of any shell optimizations that allow amortized linear growth over ++# repeated appends, instead of the typical quadratic growth present in naive ++# implementations. ++if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : ++ eval 'as_fn_append () ++ { ++ eval $1+=\$2 ++ }' ++else ++ as_fn_append () ++ { ++ eval $1=\$$1\$2 ++ } ++fi # as_fn_append ++ ++# as_fn_arith ARG... ++# ------------------ ++# Perform arithmetic evaluation on the ARGs, and store the result in the ++# global $as_val. Take advantage of shells that can avoid forks. The arguments ++# must be portable across $(()) and expr. ++if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : ++ eval 'as_fn_arith () ++ { ++ as_val=$(( $* )) ++ }' ++else ++ as_fn_arith () ++ { ++ as_val=`expr "$@" || test $? -eq 1` ++ } ++fi # as_fn_arith ++ ++ ++# as_fn_error STATUS ERROR [LINENO LOG_FD] ++# ---------------------------------------- ++# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are ++# provided, also output the error to LOG_FD, referencing LINENO. Then exit the ++# script with STATUS, using 1 if that was 0. ++as_fn_error () ++{ ++ as_status=$1; test $as_status -eq 0 && as_status=1 ++ if test "$4"; then ++ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 ++ fi ++ $as_echo "$as_me: error: $2" >&2 ++ as_fn_exit $as_status ++} # as_fn_error ++ ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then ++ as_expr=expr ++else ++ as_expr=false ++fi ++ ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then ++ as_basename=basename ++else ++ as_basename=false ++fi ++ ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++as_me=`$as_basename -- "$0" || ++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ ++ X"$0" : 'X\(//\)$' \| \ ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || ++$as_echo X/"$0" | ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++ ++ as_lineno_1=$LINENO as_lineno_1a=$LINENO ++ as_lineno_2=$LINENO as_lineno_2a=$LINENO ++ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && ++ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { ++ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) ++ sed -n ' ++ p ++ /[$]LINENO/= ++ ' <$as_myself | ++ sed ' ++ s/[$]LINENO.*/&-/ ++ t lineno ++ b ++ :lineno ++ N ++ :loop ++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ ++ t loop ++ s/-\n.*// ++ ' >$as_me.lineno && ++ chmod +x "$as_me.lineno" || ++ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } ++ ++ # Don't try to exec as it changes $[0], causing all sort of problems ++ # (the dirname of $[0] is not the place where we might find the ++ # original and so on. Autoconf is especially sensitive to this). ++ . "./$as_me.lineno" ++ # Exit status is that of the last command. ++ exit ++} ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in #((((( ++-n*) ++ case `echo 'xy\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ xy) ECHO_C='\c';; ++ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ++ ECHO_T=' ';; ++ esac;; ++*) ++ ECHO_N='-n';; ++esac ++ ++rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir 2>/dev/null ++fi ++if (echo >conf$$.file) 2>/dev/null; then ++ if ln -s conf$$.file conf$$ 2>/dev/null; then ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || ++ as_ln_s='cp -p' ++ elif ln conf$$.file conf$$ 2>/dev/null; then ++ as_ln_s=ln ++ else ++ as_ln_s='cp -p' ++ fi ++else ++ as_ln_s='cp -p' ++fi ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null ++ ++if mkdir -p . 2>/dev/null; then ++ as_mkdir_p='mkdir -p "$as_dir"' ++else ++ test -d ./-p && rmdir ./-p ++ as_mkdir_p=false ++fi ++ ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in #( ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x ++ ++# Sed expression to map a string onto a valid CPP name. ++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" ++ ++# Sed expression to map a string onto a valid variable name. ++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" ++ ++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='libmspack' ++PACKAGE_TARNAME='libmspack' ++PACKAGE_VERSION='0.4alpha' ++PACKAGE_STRING='libmspack 0.4alpha' ++PACKAGE_BUGREPORT='kyzer@4u.net' ++PACKAGE_URL='' ++ ++ac_unique_file="mspack/mspack.h" ++# Factoring default headers for most tests. ++ac_includes_default="\ ++#include ++#ifdef HAVE_SYS_TYPES_H ++# include ++#endif ++#ifdef HAVE_SYS_STAT_H ++# include ++#endif ++#ifdef STDC_HEADERS ++# include ++# include ++#else ++# ifdef HAVE_STDLIB_H ++# include ++# endif ++#endif ++#ifdef HAVE_STRING_H ++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H ++# include ++# endif ++# include ++#endif ++#ifdef HAVE_STRINGS_H ++# include ++#endif ++#ifdef HAVE_INTTYPES_H ++# include ++#endif ++#ifdef HAVE_STDINT_H ++# include ++#endif ++#ifdef HAVE_UNISTD_H ++# include ++#endif" ++ ++ac_subst_vars='am__EXEEXT_FALSE ++am__EXEEXT_TRUE ++LTLIBOBJS ++LIBOBJS ++CPP ++OTOOL64 ++OTOOL ++LIPO ++NMEDIT ++DSYMUTIL ++MANIFEST_TOOL ++RANLIB ++ac_ct_AR ++AR ++DLLTOOL ++OBJDUMP ++LN_S ++NM ++ac_ct_DUMPBIN ++DUMPBIN ++LD ++FGREP ++EGREP ++GREP ++SED ++host_os ++host_vendor ++host_cpu ++host ++build_os ++build_vendor ++build_cpu ++build ++LIBTOOL ++GCC_FALSE ++GCC_TRUE ++am__fastdepCC_FALSE ++am__fastdepCC_TRUE ++CCDEPMODE ++am__nodep ++AMDEPBACKSLASH ++AMDEP_FALSE ++AMDEP_TRUE ++am__quote ++am__include ++DEPDIR ++OBJEXT ++EXEEXT ++ac_ct_CC ++CPPFLAGS ++LDFLAGS ++CFLAGS ++CC ++DEBUG_FALSE ++DEBUG_TRUE ++AM_BACKSLASH ++AM_DEFAULT_VERBOSITY ++AM_DEFAULT_V ++AM_V ++am__untar ++am__tar ++AMTAR ++am__leading_dot ++SET_MAKE ++AWK ++mkdir_p ++MKDIR_P ++INSTALL_STRIP_PROGRAM ++STRIP ++install_sh ++MAKEINFO ++AUTOHEADER ++AUTOMAKE ++AUTOCONF ++ACLOCAL ++VERSION ++PACKAGE ++CYGPATH_W ++am__isrc ++INSTALL_DATA ++INSTALL_SCRIPT ++INSTALL_PROGRAM ++target_alias ++host_alias ++build_alias ++LIBS ++ECHO_T ++ECHO_N ++ECHO_C ++DEFS ++mandir ++localedir ++libdir ++psdir ++pdfdir ++dvidir ++htmldir ++infodir ++docdir ++oldincludedir ++includedir ++localstatedir ++sharedstatedir ++sysconfdir ++datadir ++datarootdir ++libexecdir ++sbindir ++bindir ++program_transform_name ++prefix ++exec_prefix ++PACKAGE_URL ++PACKAGE_BUGREPORT ++PACKAGE_STRING ++PACKAGE_VERSION ++PACKAGE_TARNAME ++PACKAGE_NAME ++PATH_SEPARATOR ++SHELL' ++ac_subst_files='' ++ac_user_opts=' ++enable_option_checking ++enable_silent_rules ++enable_debug ++enable_dependency_tracking ++enable_shared ++enable_static ++with_pic ++enable_fast_install ++with_gnu_ld ++with_sysroot ++enable_libtool_lock ++enable_largefile ++' ++ ac_precious_vars='build_alias ++host_alias ++target_alias ++CC ++CFLAGS ++LDFLAGS ++LIBS ++CPPFLAGS ++CPP' ++ ++ ++# Initialize some variables set by options. ++ac_init_help= ++ac_init_version=false ++ac_unrecognized_opts= ++ac_unrecognized_sep= ++# The variables have the same names as the options, with ++# dashes changed to underlines. ++cache_file=/dev/null ++exec_prefix=NONE ++no_create= ++no_recursion= ++prefix=NONE ++program_prefix=NONE ++program_suffix=NONE ++program_transform_name=s,x,x, ++silent= ++site= ++srcdir= ++verbose= ++x_includes=NONE ++x_libraries=NONE ++ ++# Installation directory options. ++# These are left unexpanded so users can "make install exec_prefix=/foo" ++# and all the variables that are supposed to be based on exec_prefix ++# by default will actually change. ++# Use braces instead of parens because sh, perl, etc. also accept them. ++# (The list follows the same order as the GNU Coding Standards.) ++bindir='${exec_prefix}/bin' ++sbindir='${exec_prefix}/sbin' ++libexecdir='${exec_prefix}/libexec' ++datarootdir='${prefix}/share' ++datadir='${datarootdir}' ++sysconfdir='${prefix}/etc' ++sharedstatedir='${prefix}/com' ++localstatedir='${prefix}/var' ++includedir='${prefix}/include' ++oldincludedir='/usr/include' ++docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' ++infodir='${datarootdir}/info' ++htmldir='${docdir}' ++dvidir='${docdir}' ++pdfdir='${docdir}' ++psdir='${docdir}' ++libdir='${exec_prefix}/lib' ++localedir='${datarootdir}/locale' ++mandir='${datarootdir}/man' ++ ++ac_prev= ++ac_dashdash= ++for ac_option ++do ++ # If the previous option needs an argument, assign it. ++ if test -n "$ac_prev"; then ++ eval $ac_prev=\$ac_option ++ ac_prev= ++ continue ++ fi ++ ++ case $ac_option in ++ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; ++ *=) ac_optarg= ;; ++ *) ac_optarg=yes ;; ++ esac ++ ++ # Accept the important Cygnus configure options, so we can diagnose typos. ++ ++ case $ac_dashdash$ac_option in ++ --) ++ ac_dashdash=yes ;; ++ ++ -bindir | --bindir | --bindi | --bind | --bin | --bi) ++ ac_prev=bindir ;; ++ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) ++ bindir=$ac_optarg ;; ++ ++ -build | --build | --buil | --bui | --bu) ++ ac_prev=build_alias ;; ++ -build=* | --build=* | --buil=* | --bui=* | --bu=*) ++ build_alias=$ac_optarg ;; ++ ++ -cache-file | --cache-file | --cache-fil | --cache-fi \ ++ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ++ ac_prev=cache_file ;; ++ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ ++ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) ++ cache_file=$ac_optarg ;; ++ ++ --config-cache | -C) ++ cache_file=config.cache ;; ++ ++ -datadir | --datadir | --datadi | --datad) ++ ac_prev=datadir ;; ++ -datadir=* | --datadir=* | --datadi=* | --datad=*) ++ datadir=$ac_optarg ;; ++ ++ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ ++ | --dataroo | --dataro | --datar) ++ ac_prev=datarootdir ;; ++ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ ++ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) ++ datarootdir=$ac_optarg ;; ++ ++ -disable-* | --disable-*) ++ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` ++ # Reject names that are not valid shell variable names. ++ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && ++ as_fn_error $? "invalid feature name: $ac_useropt" ++ ac_useropt_orig=$ac_useropt ++ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` ++ case $ac_user_opts in ++ *" ++"enable_$ac_useropt" ++"*) ;; ++ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ++ ac_unrecognized_sep=', ';; ++ esac ++ eval enable_$ac_useropt=no ;; ++ ++ -docdir | --docdir | --docdi | --doc | --do) ++ ac_prev=docdir ;; ++ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) ++ docdir=$ac_optarg ;; ++ ++ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ++ ac_prev=dvidir ;; ++ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) ++ dvidir=$ac_optarg ;; ++ ++ -enable-* | --enable-*) ++ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` ++ # Reject names that are not valid shell variable names. ++ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && ++ as_fn_error $? "invalid feature name: $ac_useropt" ++ ac_useropt_orig=$ac_useropt ++ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` ++ case $ac_user_opts in ++ *" ++"enable_$ac_useropt" ++"*) ;; ++ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ++ ac_unrecognized_sep=', ';; ++ esac ++ eval enable_$ac_useropt=\$ac_optarg ;; ++ ++ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ ++ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ ++ | --exec | --exe | --ex) ++ ac_prev=exec_prefix ;; ++ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ ++ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ ++ | --exec=* | --exe=* | --ex=*) ++ exec_prefix=$ac_optarg ;; ++ ++ -gas | --gas | --ga | --g) ++ # Obsolete; use --with-gas. ++ with_gas=yes ;; ++ ++ -help | --help | --hel | --he | -h) ++ ac_init_help=long ;; ++ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ++ ac_init_help=recursive ;; ++ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ++ ac_init_help=short ;; ++ ++ -host | --host | --hos | --ho) ++ ac_prev=host_alias ;; ++ -host=* | --host=* | --hos=* | --ho=*) ++ host_alias=$ac_optarg ;; ++ ++ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ++ ac_prev=htmldir ;; ++ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ ++ | --ht=*) ++ htmldir=$ac_optarg ;; ++ ++ -includedir | --includedir | --includedi | --included | --include \ ++ | --includ | --inclu | --incl | --inc) ++ ac_prev=includedir ;; ++ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ ++ | --includ=* | --inclu=* | --incl=* | --inc=*) ++ includedir=$ac_optarg ;; ++ ++ -infodir | --infodir | --infodi | --infod | --info | --inf) ++ ac_prev=infodir ;; ++ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) ++ infodir=$ac_optarg ;; ++ ++ -libdir | --libdir | --libdi | --libd) ++ ac_prev=libdir ;; ++ -libdir=* | --libdir=* | --libdi=* | --libd=*) ++ libdir=$ac_optarg ;; ++ ++ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ ++ | --libexe | --libex | --libe) ++ ac_prev=libexecdir ;; ++ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ ++ | --libexe=* | --libex=* | --libe=*) ++ libexecdir=$ac_optarg ;; ++ ++ -localedir | --localedir | --localedi | --localed | --locale) ++ ac_prev=localedir ;; ++ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) ++ localedir=$ac_optarg ;; ++ ++ -localstatedir | --localstatedir | --localstatedi | --localstated \ ++ | --localstate | --localstat | --localsta | --localst | --locals) ++ ac_prev=localstatedir ;; ++ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ ++ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) ++ localstatedir=$ac_optarg ;; ++ ++ -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ++ ac_prev=mandir ;; ++ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) ++ mandir=$ac_optarg ;; ++ ++ -nfp | --nfp | --nf) ++ # Obsolete; use --without-fp. ++ with_fp=no ;; ++ ++ -no-create | --no-create | --no-creat | --no-crea | --no-cre \ ++ | --no-cr | --no-c | -n) ++ no_create=yes ;; ++ ++ -no-recursion | --no-recursion | --no-recursio | --no-recursi \ ++ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ++ no_recursion=yes ;; ++ ++ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ ++ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ ++ | --oldin | --oldi | --old | --ol | --o) ++ ac_prev=oldincludedir ;; ++ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ ++ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ ++ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) ++ oldincludedir=$ac_optarg ;; ++ ++ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ++ ac_prev=prefix ;; ++ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ++ prefix=$ac_optarg ;; ++ ++ -program-prefix | --program-prefix | --program-prefi | --program-pref \ ++ | --program-pre | --program-pr | --program-p) ++ ac_prev=program_prefix ;; ++ -program-prefix=* | --program-prefix=* | --program-prefi=* \ ++ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) ++ program_prefix=$ac_optarg ;; ++ ++ -program-suffix | --program-suffix | --program-suffi | --program-suff \ ++ | --program-suf | --program-su | --program-s) ++ ac_prev=program_suffix ;; ++ -program-suffix=* | --program-suffix=* | --program-suffi=* \ ++ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) ++ program_suffix=$ac_optarg ;; ++ ++ -program-transform-name | --program-transform-name \ ++ | --program-transform-nam | --program-transform-na \ ++ | --program-transform-n | --program-transform- \ ++ | --program-transform | --program-transfor \ ++ | --program-transfo | --program-transf \ ++ | --program-trans | --program-tran \ ++ | --progr-tra | --program-tr | --program-t) ++ ac_prev=program_transform_name ;; ++ -program-transform-name=* | --program-transform-name=* \ ++ | --program-transform-nam=* | --program-transform-na=* \ ++ | --program-transform-n=* | --program-transform-=* \ ++ | --program-transform=* | --program-transfor=* \ ++ | --program-transfo=* | --program-transf=* \ ++ | --program-trans=* | --program-tran=* \ ++ | --progr-tra=* | --program-tr=* | --program-t=*) ++ program_transform_name=$ac_optarg ;; ++ ++ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ++ ac_prev=pdfdir ;; ++ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) ++ pdfdir=$ac_optarg ;; ++ ++ -psdir | --psdir | --psdi | --psd | --ps) ++ ac_prev=psdir ;; ++ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) ++ psdir=$ac_optarg ;; ++ ++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \ ++ | -silent | --silent | --silen | --sile | --sil) ++ silent=yes ;; ++ ++ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ++ ac_prev=sbindir ;; ++ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ ++ | --sbi=* | --sb=*) ++ sbindir=$ac_optarg ;; ++ ++ -sharedstatedir | --sharedstatedir | --sharedstatedi \ ++ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ ++ | --sharedst | --shareds | --shared | --share | --shar \ ++ | --sha | --sh) ++ ac_prev=sharedstatedir ;; ++ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ ++ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ ++ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ ++ | --sha=* | --sh=*) ++ sharedstatedir=$ac_optarg ;; ++ ++ -site | --site | --sit) ++ ac_prev=site ;; ++ -site=* | --site=* | --sit=*) ++ site=$ac_optarg ;; ++ ++ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ++ ac_prev=srcdir ;; ++ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ++ srcdir=$ac_optarg ;; ++ ++ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ ++ | --syscon | --sysco | --sysc | --sys | --sy) ++ ac_prev=sysconfdir ;; ++ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ ++ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) ++ sysconfdir=$ac_optarg ;; ++ ++ -target | --target | --targe | --targ | --tar | --ta | --t) ++ ac_prev=target_alias ;; ++ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) ++ target_alias=$ac_optarg ;; ++ ++ -v | -verbose | --verbose | --verbos | --verbo | --verb) ++ verbose=yes ;; ++ ++ -version | --version | --versio | --versi | --vers | -V) ++ ac_init_version=: ;; ++ ++ -with-* | --with-*) ++ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` ++ # Reject names that are not valid shell variable names. ++ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && ++ as_fn_error $? "invalid package name: $ac_useropt" ++ ac_useropt_orig=$ac_useropt ++ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` ++ case $ac_user_opts in ++ *" ++"with_$ac_useropt" ++"*) ;; ++ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ++ ac_unrecognized_sep=', ';; ++ esac ++ eval with_$ac_useropt=\$ac_optarg ;; ++ ++ -without-* | --without-*) ++ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` ++ # Reject names that are not valid shell variable names. ++ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && ++ as_fn_error $? "invalid package name: $ac_useropt" ++ ac_useropt_orig=$ac_useropt ++ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` ++ case $ac_user_opts in ++ *" ++"with_$ac_useropt" ++"*) ;; ++ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ++ ac_unrecognized_sep=', ';; ++ esac ++ eval with_$ac_useropt=no ;; ++ ++ --x) ++ # Obsolete; use --with-x. ++ with_x=yes ;; ++ ++ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ ++ | --x-incl | --x-inc | --x-in | --x-i) ++ ac_prev=x_includes ;; ++ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ ++ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) ++ x_includes=$ac_optarg ;; ++ ++ -x-libraries | --x-libraries | --x-librarie | --x-librari \ ++ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ++ ac_prev=x_libraries ;; ++ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ ++ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) ++ x_libraries=$ac_optarg ;; ++ ++ -*) as_fn_error $? "unrecognized option: \`$ac_option' ++Try \`$0 --help' for more information" ++ ;; ++ ++ *=*) ++ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` ++ # Reject names that are not valid shell variable names. ++ case $ac_envvar in #( ++ '' | [0-9]* | *[!_$as_cr_alnum]* ) ++ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; ++ esac ++ eval $ac_envvar=\$ac_optarg ++ export $ac_envvar ;; ++ ++ *) ++ # FIXME: should be removed in autoconf 3.0. ++ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 ++ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && ++ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 ++ : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ++ ;; ++ ++ esac ++done ++ ++if test -n "$ac_prev"; then ++ ac_option=--`echo $ac_prev | sed 's/_/-/g'` ++ as_fn_error $? "missing argument to $ac_option" ++fi ++ ++if test -n "$ac_unrecognized_opts"; then ++ case $enable_option_checking in ++ no) ;; ++ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; ++ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; ++ esac ++fi ++ ++# Check all directory arguments for consistency. ++for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ ++ datadir sysconfdir sharedstatedir localstatedir includedir \ ++ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ ++ libdir localedir mandir ++do ++ eval ac_val=\$$ac_var ++ # Remove trailing slashes. ++ case $ac_val in ++ */ ) ++ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` ++ eval $ac_var=\$ac_val;; ++ esac ++ # Be sure to have absolute directory names. ++ case $ac_val in ++ [\\/$]* | ?:[\\/]* ) continue;; ++ NONE | '' ) case $ac_var in *prefix ) continue;; esac;; ++ esac ++ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" ++done ++ ++# There might be people who depend on the old broken behavior: `$host' ++# used to hold the argument of --host etc. ++# FIXME: To remove some day. ++build=$build_alias ++host=$host_alias ++target=$target_alias ++ ++# FIXME: To remove some day. ++if test "x$host_alias" != x; then ++ if test "x$build_alias" = x; then ++ cross_compiling=maybe ++ $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. ++ If a cross compiler is detected then cross compile mode will be used" >&2 ++ elif test "x$build_alias" != "x$host_alias"; then ++ cross_compiling=yes ++ fi ++fi ++ ++ac_tool_prefix= ++test -n "$host_alias" && ac_tool_prefix=$host_alias- ++ ++test "$silent" = yes && exec 6>/dev/null ++ ++ ++ac_pwd=`pwd` && test -n "$ac_pwd" && ++ac_ls_di=`ls -di .` && ++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || ++ as_fn_error $? "working directory cannot be determined" ++test "X$ac_ls_di" = "X$ac_pwd_ls_di" || ++ as_fn_error $? "pwd does not report name of working directory" ++ ++ ++# Find the source files, if location was not specified. ++if test -z "$srcdir"; then ++ ac_srcdir_defaulted=yes ++ # Try the directory containing this script, then the parent directory. ++ ac_confdir=`$as_dirname -- "$as_myself" || ++$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ ++ X"$as_myself" : 'X\(//\)[^/]' \| \ ++ X"$as_myself" : 'X\(//\)$' \| \ ++ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || ++$as_echo X"$as_myself" | ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ srcdir=$ac_confdir ++ if test ! -r "$srcdir/$ac_unique_file"; then ++ srcdir=.. ++ fi ++else ++ ac_srcdir_defaulted=no ++fi ++if test ! -r "$srcdir/$ac_unique_file"; then ++ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." ++ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" ++fi ++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ++ac_abs_confdir=`( ++ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" ++ pwd)` ++# When building in place, set srcdir=. ++if test "$ac_abs_confdir" = "$ac_pwd"; then ++ srcdir=. ++fi ++# Remove unnecessary trailing slashes from srcdir. ++# Double slashes in file names in object file debugging info ++# mess up M-x gdb in Emacs. ++case $srcdir in ++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; ++esac ++for ac_var in $ac_precious_vars; do ++ eval ac_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_env_${ac_var}_value=\$${ac_var} ++ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} ++ eval ac_cv_env_${ac_var}_value=\$${ac_var} ++done ++ ++# ++# Report the --help message. ++# ++if test "$ac_init_help" = "long"; then ++ # Omit some internal or obsolete options to make the list less imposing. ++ # This message is too long to be a string in the A/UX 3.1 sh. ++ cat <<_ACEOF ++\`configure' configures libmspack 0.4alpha to adapt to many kinds of systems. ++ ++Usage: $0 [OPTION]... [VAR=VALUE]... ++ ++To assign environment variables (e.g., CC, CFLAGS...), specify them as ++VAR=VALUE. See below for descriptions of some of the useful variables. ++ ++Defaults for the options are specified in brackets. ++ ++Configuration: ++ -h, --help display this help and exit ++ --help=short display options specific to this package ++ --help=recursive display the short help of all the included packages ++ -V, --version display version information and exit ++ -q, --quiet, --silent do not print \`checking ...' messages ++ --cache-file=FILE cache test results in FILE [disabled] ++ -C, --config-cache alias for \`--cache-file=config.cache' ++ -n, --no-create do not create output files ++ --srcdir=DIR find the sources in DIR [configure dir or \`..'] ++ ++Installation directories: ++ --prefix=PREFIX install architecture-independent files in PREFIX ++ [$ac_default_prefix] ++ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX ++ [PREFIX] ++ ++By default, \`make install' will install all the files in ++\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify ++an installation prefix other than \`$ac_default_prefix' using \`--prefix', ++for instance \`--prefix=\$HOME'. ++ ++For better control, use the options below. ++ ++Fine tuning of the installation directories: ++ --bindir=DIR user executables [EPREFIX/bin] ++ --sbindir=DIR system admin executables [EPREFIX/sbin] ++ --libexecdir=DIR program executables [EPREFIX/libexec] ++ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] ++ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] ++ --localstatedir=DIR modifiable single-machine data [PREFIX/var] ++ --libdir=DIR object code libraries [EPREFIX/lib] ++ --includedir=DIR C header files [PREFIX/include] ++ --oldincludedir=DIR C header files for non-gcc [/usr/include] ++ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] ++ --datadir=DIR read-only architecture-independent data [DATAROOTDIR] ++ --infodir=DIR info documentation [DATAROOTDIR/info] ++ --localedir=DIR locale-dependent data [DATAROOTDIR/locale] ++ --mandir=DIR man documentation [DATAROOTDIR/man] ++ --docdir=DIR documentation root [DATAROOTDIR/doc/libmspack] ++ --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 libmspack 0.4alpha:";; ++ 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') ++ --enable-debug enable debugging ++ --disable-dependency-tracking speeds up one-time build ++ --enable-dependency-tracking do not reject slow dependency extractors ++ --enable-shared[=PKGS] build shared libraries [default=yes] ++ --enable-static[=PKGS] build static libraries [default=yes] ++ --enable-fast-install[=PKGS] ++ optimize for fast installation [default=yes] ++ --disable-libtool-lock avoid locking (might break parallel builds) ++ --disable-largefile omit support for large files ++ ++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-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 ++ CPP C preprocessor ++ ++Use these variables to override the choices made by `configure' or to help ++it to find libraries and programs with nonstandard names/locations. ++ ++Report bugs to . ++_ACEOF ++ac_status=$? ++fi ++ ++if test "$ac_init_help" = "recursive"; then ++ # If there are subdirs, report their specific --help. ++ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue ++ test -d "$ac_dir" || ++ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || ++ continue ++ ac_builddir=. ++ ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) ++ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix ++ ++case $srcdir in ++ .) # We are building in place. ++ ac_srcdir=. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. ++ ac_srcdir=$srcdir$ac_dir_suffix; ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix ++ ++ cd "$ac_dir" || { ac_status=$?; continue; } ++ # Check for guested configure. ++ if test -f "$ac_srcdir/configure.gnu"; then ++ echo && ++ $SHELL "$ac_srcdir/configure.gnu" --help=recursive ++ elif test -f "$ac_srcdir/configure"; then ++ echo && ++ $SHELL "$ac_srcdir/configure" --help=recursive ++ else ++ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 ++ fi || ac_status=$? ++ cd "$ac_pwd" || { ac_status=$?; break; } ++ done ++fi ++ ++test -n "$ac_init_help" && exit $ac_status ++if $ac_init_version; then ++ cat <<\_ACEOF ++libmspack configure 0.4alpha ++generated by GNU Autoconf 2.68 ++ ++Copyright (C) 2010 Free Software Foundation, Inc. ++This configure script is free software; the Free Software Foundation ++gives unlimited permission to copy, distribute and modify it. ++_ACEOF ++ exit ++fi ++ ++## ------------------------ ## ++## Autoconf initialization. ## ++## ------------------------ ## ++ ++# ac_fn_c_try_compile LINENO ++# -------------------------- ++# Try to compile conftest.$ac_ext, and return whether this succeeded. ++ac_fn_c_try_compile () ++{ ++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ rm -f conftest.$ac_objext ++ if { { ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_compile") 2>conftest.err ++ ac_status=$? ++ if test -s conftest.err; then ++ grep -v '^ *+' conftest.err >conftest.er1 ++ cat conftest.er1 >&5 ++ mv -f conftest.er1 conftest.err ++ fi ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest.$ac_objext; then : ++ ac_retval=0 ++else ++ $as_echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_retval=1 ++fi ++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ++ as_fn_set_status $ac_retval ++ ++} # ac_fn_c_try_compile ++ ++# ac_fn_c_try_link LINENO ++# ----------------------- ++# Try to link conftest.$ac_ext, and return whether this succeeded. ++ac_fn_c_try_link () ++{ ++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ rm -f conftest.$ac_objext conftest$ac_exeext ++ if { { ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_link") 2>conftest.err ++ ac_status=$? ++ if test -s conftest.err; then ++ grep -v '^ *+' conftest.err >conftest.er1 ++ cat conftest.er1 >&5 ++ mv -f conftest.er1 conftest.err ++ fi ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } && { ++ test -z "$ac_c_werror_flag" || ++ test ! -s conftest.err ++ } && test -s conftest$ac_exeext && { ++ test "$cross_compiling" = yes || ++ $as_test_x conftest$ac_exeext ++ }; then : ++ ac_retval=0 ++else ++ $as_echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_retval=1 ++fi ++ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information ++ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would ++ # interfere with the next link command; also delete a directory that is ++ # left behind by Apple's compiler. We do this before executing the actions. ++ rm -rf conftest.dSYM conftest_ipa8_conftest.oo ++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ++ as_fn_set_status $ac_retval ++ ++} # ac_fn_c_try_link ++ ++# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES ++# ------------------------------------------------------- ++# Tests whether HEADER exists and can be compiled using the include files in ++# INCLUDES, setting the cache variable VAR accordingly. ++ac_fn_c_check_header_compile () ++{ ++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 ++$as_echo_n "checking for $2... " >&6; } ++if eval \${$3+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++#include <$2> ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ eval "$3=yes" ++else ++ eval "$3=no" ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++eval ac_res=\$$3 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 ++$as_echo "$ac_res" >&6; } ++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ++ ++} # ac_fn_c_check_header_compile ++ ++# ac_fn_c_try_cpp LINENO ++# ---------------------- ++# Try to preprocess conftest.$ac_ext, and return whether this succeeded. ++ac_fn_c_try_cpp () ++{ ++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ if { { ac_try="$ac_cpp conftest.$ac_ext" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ++ ac_status=$? ++ if test -s conftest.err; then ++ grep -v '^ *+' conftest.err >conftest.er1 ++ cat conftest.er1 >&5 ++ mv -f conftest.er1 conftest.err ++ fi ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } > conftest.i && { ++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || ++ test ! -s conftest.err ++ }; then : ++ ac_retval=0 ++else ++ $as_echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_retval=1 ++fi ++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ++ as_fn_set_status $ac_retval ++ ++} # ac_fn_c_try_cpp ++ ++# ac_fn_c_try_run LINENO ++# ---------------------- ++# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes ++# that executables *can* be run. ++ac_fn_c_try_run () ++{ ++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ if { { ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_link") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' ++ { { case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_try") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; }; then : ++ ac_retval=0 ++else ++ $as_echo "$as_me: program exited with status $ac_status" >&5 ++ $as_echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++ ac_retval=$ac_status ++fi ++ rm -rf conftest.dSYM conftest_ipa8_conftest.oo ++ eval $as_lineno_stack; ${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 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 ++$as_echo_n "checking for $2... " >&6; } ++if eval \${$3+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++/* Define $2 to an innocuous variant, in case declares $2. ++ For example, HP-UX 11i declares gettimeofday. */ ++#define $2 innocuous_$2 ++ ++/* System header to define __stub macros and hopefully few prototypes, ++ which can conflict with char $2 (); below. ++ Prefer to if __STDC__ is defined, since ++ exists even on freestanding compilers. */ ++ ++#ifdef __STDC__ ++# include ++#else ++# include ++#endif ++ ++#undef $2 ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char $2 (); ++/* The GNU C library defines this for functions which it implements ++ to always fail with ENOSYS. Some functions are actually named ++ something starting with __ and the normal name is an alias. */ ++#if defined __stub_$2 || defined __stub___$2 ++choke me ++#endif ++ ++int ++main () ++{ ++return $2 (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ eval "$3=yes" ++else ++ eval "$3=no" ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++fi ++eval ac_res=\$$3 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 ++$as_echo "$ac_res" >&6; } ++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ++ ++} # ac_fn_c_check_func ++ ++# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES ++# ------------------------------------------------------- ++# Tests whether HEADER exists, giving a warning if it cannot be compiled using ++# the include files in INCLUDES and setting the cache variable VAR ++# accordingly. ++ac_fn_c_check_header_mongrel () ++{ ++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ if eval \${$3+:} false; then : ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 ++$as_echo_n "checking for $2... " >&6; } ++if eval \${$3+:} false; then : ++ $as_echo_n "(cached) " >&6 ++fi ++eval ac_res=\$$3 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 ++$as_echo "$ac_res" >&6; } ++else ++ # Is the header compilable? ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 ++$as_echo_n "checking $2 usability... " >&6; } ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++#include <$2> ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_header_compiler=yes ++else ++ ac_header_compiler=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 ++$as_echo "$ac_header_compiler" >&6; } ++ ++# Is the header present? ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 ++$as_echo_n "checking $2 presence... " >&6; } ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include <$2> ++_ACEOF ++if ac_fn_c_try_cpp "$LINENO"; then : ++ ac_header_preproc=yes ++else ++ ac_header_preproc=no ++fi ++rm -f conftest.err conftest.i conftest.$ac_ext ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 ++$as_echo "$ac_header_preproc" >&6; } ++ ++# So? What about this header? ++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( ++ yes:no: ) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 ++$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 ++$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ++ ;; ++ no:yes:* ) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 ++$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 ++$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 ++$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 ++$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 ++$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ++( $as_echo "## --------------------------- ## ++## Report this to kyzer@4u.net ## ++## --------------------------- ##" ++ ) | sed "s/^/$as_me: WARNING: /" >&2 ++ ;; ++esac ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 ++$as_echo_n "checking for $2... " >&6; } ++if eval \${$3+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ eval "$3=\$ac_header_compiler" ++fi ++eval ac_res=\$$3 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 ++$as_echo "$ac_res" >&6; } ++fi ++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ++ ++} # ac_fn_c_check_header_mongrel ++ ++# 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 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 ++$as_echo_n "checking for $2... " >&6; } ++if eval \${$3+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ eval "$3=no" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++int ++main () ++{ ++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 () ++{ ++if (sizeof (($2))) ++ return 0; ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ++else ++ eval "$3=yes" ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++eval ac_res=\$$3 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 ++$as_echo "$ac_res" >&6; } ++ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno ++ ++} # ac_fn_c_check_type ++ ++# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES ++# -------------------------------------------- ++# Tries to find the compile-time value of EXPR in a program that includes ++# INCLUDES, setting VAR accordingly. Returns whether the value could be ++# computed ++ac_fn_c_compute_int () ++{ ++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ if test "$cross_compiling" = yes; then ++ # Depending upon the size, compute the lo and hi bounds. ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++int ++main () ++{ ++static int test_array [1 - 2 * !(($2) >= 0)]; ++test_array [0] = 0 ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_lo=0 ac_mid=0 ++ while :; do ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++int ++main () ++{ ++static int test_array [1 - 2 * !(($2) <= $ac_mid)]; ++test_array [0] = 0 ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_hi=$ac_mid; break ++else ++ as_fn_arith $ac_mid + 1 && ac_lo=$as_val ++ if test $ac_lo -le $ac_mid; then ++ ac_lo= ac_hi= ++ break ++ fi ++ as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ done ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++int ++main () ++{ ++static int test_array [1 - 2 * !(($2) < 0)]; ++test_array [0] = 0 ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_hi=-1 ac_mid=-1 ++ while :; do ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++int ++main () ++{ ++static int test_array [1 - 2 * !(($2) >= $ac_mid)]; ++test_array [0] = 0 ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_lo=$ac_mid; break ++else ++ as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val ++ if test $ac_mid -le $ac_hi; then ++ ac_lo= ac_hi= ++ break ++ fi ++ as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ done ++else ++ ac_lo= ac_hi= ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++# Binary search between lo and hi bounds. ++while test "x$ac_lo" != "x$ac_hi"; do ++ as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++int ++main () ++{ ++static int test_array [1 - 2 * !(($2) <= $ac_mid)]; ++test_array [0] = 0 ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_hi=$ac_mid ++else ++ as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++done ++case $ac_lo in #(( ++?*) eval "$3=\$ac_lo"; ac_retval=0 ;; ++'') ac_retval=1 ;; ++esac ++ else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++$4 ++static long int longval () { return $2; } ++static unsigned long int ulongval () { return $2; } ++#include ++#include ++int ++main () ++{ ++ ++ FILE *f = fopen ("conftest.val", "w"); ++ if (! f) ++ return 1; ++ if (($2) < 0) ++ { ++ long int i = longval (); ++ if (i != ($2)) ++ return 1; ++ fprintf (f, "%ld", i); ++ } ++ else ++ { ++ unsigned long int i = ulongval (); ++ if (i != ($2)) ++ return 1; ++ fprintf (f, "%lu", i); ++ } ++ /* Do not output a trailing newline, as this causes \r\n confusion ++ on some platforms. */ ++ return ferror (f) || fclose (f) != 0; ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_run "$LINENO"; then : ++ echo >>conftest.val; read $3 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 libmspack $as_me 0.4alpha, which was ++generated by GNU Autoconf 2.68. Invocation command line was ++ ++ $ $0 $@ ++ ++_ACEOF ++exec 5>>config.log ++{ ++cat <<_ASUNAME ++## --------- ## ++## Platform. ## ++## --------- ## ++ ++hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` ++uname -m = `(uname -m) 2>/dev/null || echo unknown` ++uname -r = `(uname -r) 2>/dev/null || echo unknown` ++uname -s = `(uname -s) 2>/dev/null || echo unknown` ++uname -v = `(uname -v) 2>/dev/null || echo unknown` ++ ++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` ++/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` ++ ++/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` ++/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` ++/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` ++/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` ++/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` ++/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` ++/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` ++ ++_ASUNAME ++ ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ $as_echo "PATH: $as_dir" ++ done ++IFS=$as_save_IFS ++ ++} >&5 ++ ++cat >&5 <<_ACEOF ++ ++ ++## ----------- ## ++## Core tests. ## ++## ----------- ## ++ ++_ACEOF ++ ++ ++# Keep a trace of the command line. ++# Strip out --no-create and --no-recursion so they do not pile up. ++# Strip out --silent because we don't want to record it for future runs. ++# Also quote any args containing shell meta-characters. ++# Make two passes to allow for proper duplicate-argument suppression. ++ac_configure_args= ++ac_configure_args0= ++ac_configure_args1= ++ac_must_keep_next=false ++for ac_pass in 1 2 ++do ++ for ac_arg ++ do ++ case $ac_arg in ++ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; ++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \ ++ | -silent | --silent | --silen | --sile | --sil) ++ continue ;; ++ *\'*) ++ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; ++ esac ++ case $ac_pass in ++ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; ++ 2) ++ as_fn_append ac_configure_args1 " '$ac_arg'" ++ if test $ac_must_keep_next = true; then ++ ac_must_keep_next=false # Got value, back to normal. ++ else ++ case $ac_arg in ++ *=* | --config-cache | -C | -disable-* | --disable-* \ ++ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ ++ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ ++ | -with-* | --with-* | -without-* | --without-* | --x) ++ case "$ac_configure_args0 " in ++ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; ++ esac ++ ;; ++ -* ) ac_must_keep_next=true ;; ++ esac ++ fi ++ as_fn_append ac_configure_args " '$ac_arg'" ++ ;; ++ esac ++ done ++done ++{ ac_configure_args0=; unset ac_configure_args0;} ++{ ac_configure_args1=; unset ac_configure_args1;} ++ ++# When interrupted or exit'd, cleanup temporary files, and complete ++# config.log. We remove comments because anyway the quotes in there ++# would cause problems or look ugly. ++# WARNING: Use '\'' to represent an apostrophe within the trap. ++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. ++trap 'exit_status=$? ++ # Save into config.log some information that might help in debugging. ++ { ++ echo ++ ++ $as_echo "## ---------------- ## ++## Cache variables. ## ++## ---------------- ##" ++ echo ++ # The following way of writing the cache mishandles newlines in values, ++( ++ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do ++ eval ac_val=\$$ac_var ++ case $ac_val in #( ++ *${as_nl}*) ++ case $ac_var in #( ++ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 ++$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( ++ *) { eval $ac_var=; unset $ac_var;} ;; ++ esac ;; ++ esac ++ done ++ (set) 2>&1 | ++ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) ++ sed -n \ ++ "s/'\''/'\''\\\\'\'''\''/g; ++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ++ ;; #( ++ *) ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ++ ;; ++ esac | ++ sort ++) ++ echo ++ ++ $as_echo "## ----------------- ## ++## Output variables. ## ++## ----------------- ##" ++ echo ++ for ac_var in $ac_subst_vars ++ do ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ $as_echo "$ac_var='\''$ac_val'\''" ++ done | sort ++ echo ++ ++ if test -n "$ac_subst_files"; then ++ $as_echo "## ------------------- ## ++## File substitutions. ## ++## ------------------- ##" ++ echo ++ for ac_var in $ac_subst_files ++ do ++ eval ac_val=\$$ac_var ++ case $ac_val in ++ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; ++ esac ++ $as_echo "$ac_var='\''$ac_val'\''" ++ done | sort ++ echo ++ fi ++ ++ if test -s confdefs.h; then ++ $as_echo "## ----------- ## ++## confdefs.h. ## ++## ----------- ##" ++ echo ++ cat confdefs.h ++ echo ++ fi ++ test "$ac_signal" != 0 && ++ $as_echo "$as_me: caught signal $ac_signal" ++ $as_echo "$as_me: exit $exit_status" ++ } >&5 ++ rm -f core *.core core.conftest.* && ++ rm -f -r conftest* confdefs* conf$$* $ac_clean_files && ++ exit $exit_status ++' 0 ++for ac_signal in 1 2 13 15; do ++ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal ++done ++ac_signal=0 ++ ++# confdefs.h avoids OS command line length limits that DEFS can exceed. ++rm -f -r conftest* confdefs.h ++ ++$as_echo "/* confdefs.h */" > confdefs.h ++ ++# Predefined preprocessor variables. ++ ++cat >>confdefs.h <<_ACEOF ++#define PACKAGE_NAME "$PACKAGE_NAME" ++_ACEOF ++ ++cat >>confdefs.h <<_ACEOF ++#define PACKAGE_TARNAME "$PACKAGE_TARNAME" ++_ACEOF ++ ++cat >>confdefs.h <<_ACEOF ++#define PACKAGE_VERSION "$PACKAGE_VERSION" ++_ACEOF ++ ++cat >>confdefs.h <<_ACEOF ++#define PACKAGE_STRING "$PACKAGE_STRING" ++_ACEOF ++ ++cat >>confdefs.h <<_ACEOF ++#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" ++_ACEOF ++ ++cat >>confdefs.h <<_ACEOF ++#define PACKAGE_URL "$PACKAGE_URL" ++_ACEOF ++ ++ ++# Let the site file select an alternate cache file if it wants to. ++# Prefer an explicitly selected file to automatically selected ones. ++ac_site_file1=NONE ++ac_site_file2=NONE ++if test -n "$CONFIG_SITE"; then ++ # We do not want a PATH search for config.site. ++ case $CONFIG_SITE in #(( ++ -*) ac_site_file1=./$CONFIG_SITE;; ++ */*) ac_site_file1=$CONFIG_SITE;; ++ *) ac_site_file1=./$CONFIG_SITE;; ++ esac ++elif test "x$prefix" != xNONE; then ++ ac_site_file1=$prefix/share/config.site ++ ac_site_file2=$prefix/etc/config.site ++else ++ ac_site_file1=$ac_default_prefix/share/config.site ++ ac_site_file2=$ac_default_prefix/etc/config.site ++fi ++for ac_site_file in "$ac_site_file1" "$ac_site_file2" ++do ++ test "x$ac_site_file" = xNONE && continue ++ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 ++$as_echo "$as_me: loading site script $ac_site_file" >&6;} ++ sed 's/^/| /' "$ac_site_file" >&5 ++ . "$ac_site_file" \ ++ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error $? "failed to load site script $ac_site_file ++See \`config.log' for more details" "$LINENO" 5; } ++ fi ++done ++ ++if test -r "$cache_file"; then ++ # Some versions of bash will fail to source /dev/null (special files ++ # actually), so we avoid doing that. DJGPP emulates it as a regular file. ++ if test /dev/null != "$cache_file" && test -f "$cache_file"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 ++$as_echo "$as_me: loading cache $cache_file" >&6;} ++ case $cache_file in ++ [\\/]* | ?:[\\/]* ) . "$cache_file";; ++ *) . "./$cache_file";; ++ esac ++ fi ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 ++$as_echo "$as_me: creating cache $cache_file" >&6;} ++ >$cache_file ++fi ++ ++# Check that the precious variables saved in the cache have kept the same ++# value. ++ac_cache_corrupted=false ++for ac_var in $ac_precious_vars; do ++ eval ac_old_set=\$ac_cv_env_${ac_var}_set ++ eval ac_new_set=\$ac_env_${ac_var}_set ++ eval ac_old_val=\$ac_cv_env_${ac_var}_value ++ eval ac_new_val=\$ac_env_${ac_var}_value ++ case $ac_old_set,$ac_new_set in ++ set,) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 ++$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ++ ac_cache_corrupted=: ;; ++ ,set) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 ++$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ++ ac_cache_corrupted=: ;; ++ ,);; ++ *) ++ if test "x$ac_old_val" != "x$ac_new_val"; then ++ # differences in whitespace do not lead to failure. ++ ac_old_val_w=`echo x $ac_old_val` ++ ac_new_val_w=`echo x $ac_new_val` ++ if test "$ac_old_val_w" != "$ac_new_val_w"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 ++$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ++ ac_cache_corrupted=: ++ else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 ++$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} ++ eval $ac_var=\$ac_old_val ++ fi ++ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 ++$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} ++ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 ++$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} ++ fi;; ++ esac ++ # Pass precious variables to config.status. ++ if test "$ac_new_set" = set; then ++ case $ac_new_val in ++ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; ++ *) ac_arg=$ac_var=$ac_new_val ;; ++ esac ++ case " $ac_configure_args " in ++ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. ++ *) as_fn_append ac_configure_args " '$ac_arg'" ;; ++ esac ++ fi ++done ++if $ac_cache_corrupted; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 ++$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} ++ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 ++fi ++## -------------------- ## ++## Main body of script. ## ++## -------------------- ## ++ ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++ ++am__api_version='1.11' ++ ++ac_aux_dir= ++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do ++ if test -f "$ac_dir/install-sh"; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/install-sh -c" ++ break ++ elif test -f "$ac_dir/install.sh"; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/install.sh -c" ++ break ++ elif test -f "$ac_dir/shtool"; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/shtool install -c" ++ break ++ fi ++done ++if test -z "$ac_aux_dir"; then ++ as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 ++fi ++ ++# These three variables are undocumented and unsupported, ++# and are intended to be withdrawn in a future Autoconf release. ++# They can cause serious problems if a builder's source tree is in a directory ++# whose full name contains unusual characters. ++ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ++ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ++ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ++ ++ ++# Find a good install program. We prefer a C program (faster), ++# so one script is as good as another. But avoid the broken or ++# incompatible versions: ++# SysV /etc/install, /usr/sbin/install ++# SunOS /usr/etc/install ++# IRIX /sbin/install ++# AIX /bin/install ++# AmigaOS /C/install, which installs bootblocks on floppy discs ++# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag ++# AFS /usr/afsws/bin/install, which mishandles nonexistent args ++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" ++# OS/2's system install, which has a completely different semantic ++# ./install, which can be erroneously created by make from ./install.sh. ++# Reject install programs that cannot install multiple files. ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 ++$as_echo_n "checking for a BSD-compatible install... " >&6; } ++if test -z "$INSTALL"; then ++if ${ac_cv_path_install+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ # Account for people who put trailing slashes in PATH elements. ++case $as_dir/ in #(( ++ ./ | .// | /[cC]/* | \ ++ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ++ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ ++ /usr/ucb/* ) ;; ++ *) ++ # OSF1 and SCO ODT 3.0 have their own names for install. ++ # Don't use installbsd from OSF since it installs stuff as root ++ # by default. ++ for ac_prog in ginstall scoinst install; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then ++ if test $ac_prog = install && ++ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then ++ # AIX install. It has an incompatible calling convention. ++ : ++ elif test $ac_prog = install && ++ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then ++ # program-specific install script used by HP pwplus--don't use. ++ : ++ else ++ rm -rf conftest.one conftest.two conftest.dir ++ echo one > conftest.one ++ echo two > conftest.two ++ mkdir conftest.dir ++ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && ++ test -s conftest.one && test -s conftest.two && ++ test -s conftest.dir/conftest.one && ++ test -s conftest.dir/conftest.two ++ then ++ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" ++ break 3 ++ fi ++ fi ++ fi ++ done ++ done ++ ;; ++esac ++ ++ done ++IFS=$as_save_IFS ++ ++rm -rf conftest.one conftest.two conftest.dir ++ ++fi ++ if test "${ac_cv_path_install+set}" = set; then ++ INSTALL=$ac_cv_path_install ++ else ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for INSTALL within a source directory, because that will ++ # break other packages using the cache if that directory is ++ # removed, or if the value is a relative name. ++ INSTALL=$ac_install_sh ++ fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 ++$as_echo "$INSTALL" >&6; } ++ ++# Use test -z because SunOS4 sh mishandles braces in ${var-val}. ++# It thinks the first close brace ends the variable substitution. ++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' ++ ++test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' ++ ++test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 ++$as_echo_n "checking whether build environment is sane... " >&6; } ++# Just in case ++sleep 1 ++echo timestamp > conftest.file ++# Reject unsafe characters in $srcdir or the absolute working directory ++# name. Accept space and tab only in the latter. ++am_lf=' ++' ++case `pwd` in ++ *[\\\"\#\$\&\'\`$am_lf]*) ++ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; ++esac ++case $srcdir in ++ *[\\\"\#\$\&\'\`$am_lf\ \ ]*) ++ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; ++esac ++ ++# Do `set' in a subshell so we don't clobber the current shell's ++# arguments. Must try -L first in case configure is actually a ++# symlink; some systems play weird games with the mod time of symlinks ++# (eg FreeBSD returns the mod time of the symlink's containing ++# directory). ++if ( ++ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` ++ if test "$*" = "X"; then ++ # -L didn't work. ++ set X `ls -t "$srcdir/configure" conftest.file` ++ fi ++ rm -f conftest.file ++ if test "$*" != "X $srcdir/configure conftest.file" \ ++ && test "$*" != "X conftest.file $srcdir/configure"; then ++ ++ # If neither matched, then we have a broken ls. This can happen ++ # if, for instance, CONFIG_SHELL is bash and it inherits a ++ # broken ls alias from the environment. This has actually ++ # happened. Such a system could not be considered "sane". ++ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken ++alias in your environment" "$LINENO" 5 ++ fi ++ ++ test "$2" = conftest.file ++ ) ++then ++ # Ok. ++ : ++else ++ as_fn_error $? "newly created file is older than distributed files! ++Check your system clock" "$LINENO" 5 ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++test "$program_prefix" != NONE && ++ program_transform_name="s&^&$program_prefix&;$program_transform_name" ++# Use a double $ so make ignores it. ++test "$program_suffix" != NONE && ++ program_transform_name="s&\$&$program_suffix&;$program_transform_name" ++# Double any \ or $. ++# By default was `s,x,x', remove it if useless. ++ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' ++program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` ++ ++# expand $ac_aux_dir to an absolute path ++am_aux_dir=`cd $ac_aux_dir && pwd` ++ ++if test x"${MISSING+set}" != xset; then ++ case $am_aux_dir in ++ *\ * | *\ *) ++ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; ++ *) ++ MISSING="\${SHELL} $am_aux_dir/missing" ;; ++ esac ++fi ++# Use eval to expand $SHELL ++if eval "$MISSING --run true"; then ++ am_missing_run="$MISSING --run " ++else ++ am_missing_run= ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 ++$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} ++fi ++ ++if test x"${install_sh}" != xset; then ++ case $am_aux_dir in ++ *\ * | *\ *) ++ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; ++ *) ++ install_sh="\${SHELL} $am_aux_dir/install-sh" ++ esac ++fi ++ ++# Installed binaries are usually stripped using `strip' when the user ++# run `make install-strip'. However `strip' might not be the right ++# tool to use in cross-compilation environments, therefore Automake ++# will honor the `STRIP' environment variable to overrule this program. ++if test "$cross_compiling" != no; then ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. ++set dummy ${ac_tool_prefix}strip; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_STRIP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$STRIP"; then ++ ac_cv_prog_STRIP="$STRIP" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_STRIP="${ac_tool_prefix}strip" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++STRIP=$ac_cv_prog_STRIP ++if test -n "$STRIP"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 ++$as_echo "$STRIP" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_STRIP"; then ++ ac_ct_STRIP=$STRIP ++ # Extract the first word of "strip", so it can be a program name with args. ++set dummy strip; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_STRIP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_STRIP"; then ++ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_STRIP="strip" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP ++if test -n "$ac_ct_STRIP"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 ++$as_echo "$ac_ct_STRIP" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi ++else ++ STRIP="$ac_cv_prog_STRIP" ++fi ++ ++fi ++INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 ++$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } ++if test -z "$MKDIR_P"; then ++ if ${ac_cv_path_mkdir+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in mkdir gmkdir; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue ++ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( ++ 'mkdir (GNU coreutils) '* | \ ++ 'mkdir (coreutils) '* | \ ++ 'mkdir (fileutils) '4.1*) ++ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext ++ break 3;; ++ esac ++ done ++ done ++ done ++IFS=$as_save_IFS ++ ++fi ++ ++ test -d ./--version && rmdir ./--version ++ if test "${ac_cv_path_mkdir+set}" = set; then ++ MKDIR_P="$ac_cv_path_mkdir -p" ++ else ++ # As a last resort, use the slow shell script. Don't cache a ++ # value for MKDIR_P within a source directory, because that will ++ # break other packages using the cache if that directory is ++ # removed, or if the value is a relative name. ++ MKDIR_P="$ac_install_sh -d" ++ fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 ++$as_echo "$MKDIR_P" >&6; } ++ ++mkdir_p="$MKDIR_P" ++case $mkdir_p in ++ [\\/$]* | ?:[\\/]*) ;; ++ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; ++esac ++ ++for ac_prog in gawk mawk nawk awk ++do ++ # Extract the first word of "$ac_prog", so it can be a program name with args. ++set dummy $ac_prog; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_AWK+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$AWK"; then ++ ac_cv_prog_AWK="$AWK" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_AWK="$ac_prog" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++AWK=$ac_cv_prog_AWK ++if test -n "$AWK"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 ++$as_echo "$AWK" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ test -n "$AWK" && break ++done ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 ++$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } ++set x ${MAKE-make} ++ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` ++if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat >conftest.make <<\_ACEOF ++SHELL = /bin/sh ++all: ++ @echo '@@@%%%=$(MAKE)=@@@%%%' ++_ACEOF ++# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. ++case `${MAKE-make} -f conftest.make 2>/dev/null` in ++ *@@@%%%=?*=@@@%%%*) ++ eval ac_cv_prog_make_${ac_make}_set=yes;; ++ *) ++ eval ac_cv_prog_make_${ac_make}_set=no;; ++esac ++rm -f conftest.make ++fi ++if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ SET_MAKE= ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ SET_MAKE="MAKE=${MAKE-make}" ++fi ++ ++rm -rf .tst 2>/dev/null ++mkdir .tst 2>/dev/null ++if test -d .tst; then ++ am__leading_dot=. ++else ++ am__leading_dot=_ ++fi ++rmdir .tst 2>/dev/null ++ ++if test "`cd $srcdir && pwd`" != "`pwd`"; then ++ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output ++ # is not polluted with repeated "-I." ++ am__isrc=' -I$(srcdir)' ++ # test to see if srcdir already configured ++ if test -f $srcdir/config.status; then ++ as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 ++ fi ++fi ++ ++# test whether we have cygpath ++if test -z "$CYGPATH_W"; then ++ if (cygpath --version) >/dev/null 2>/dev/null; then ++ CYGPATH_W='cygpath -w' ++ else ++ CYGPATH_W=echo ++ fi ++fi ++ ++ ++# Define the identity of the package. ++ PACKAGE='libmspack' ++ VERSION='0.4alpha' ++ ++ ++cat >>confdefs.h <<_ACEOF ++#define PACKAGE "$PACKAGE" ++_ACEOF ++ ++ ++cat >>confdefs.h <<_ACEOF ++#define VERSION "$VERSION" ++_ACEOF ++ ++# Some tools Automake needs. ++ ++ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} ++ ++ ++AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} ++ ++ ++AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} ++ ++ ++AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} ++ ++ ++MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} ++ ++# We need awk for the "check" target. The system "awk" is bad on ++# some platforms. ++# Always define AMTAR for backward compatibility. Yes, it's still used ++# in the wild :-( We should find a proper way to deprecate it ... ++AMTAR='$${TAR-tar}' ++ ++am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' ++ ++ ++ ++ ++ ++ ++ac_config_headers="$ac_config_headers config.h" ++ ++ ++# Check whether --enable-silent-rules was given. ++if test "${enable_silent_rules+set}" = set; 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} ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 ++$as_echo_n "checking whether $am_make supports nested variables... " >&6; } ++if ${am_cv_make_support_nested_variables+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 ++$as_echo "$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='\' ++ ++ ++# --enable-debug option ++# Check whether --enable-debug was given. ++if test "${enable_debug+set}" = set; then : ++ enableval=$enable_debug; enable_debug=$enableval ++else ++ enable_debug=no ++fi ++ ++if test x$enable_debug = xyes; then ++ ++$as_echo "#define DEBUG 1" >>confdefs.h ++ ++fi ++ if test x$enable_debug = 'xyes'; then ++ DEBUG_TRUE= ++ DEBUG_FALSE='#' ++else ++ DEBUG_TRUE='#' ++ DEBUG_FALSE= ++fi ++ ++ ++# Checks for programs. ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. ++set dummy ${ac_tool_prefix}gcc; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_CC+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$CC"; then ++ ac_cv_prog_CC="$CC" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_CC="${ac_tool_prefix}gcc" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++CC=$ac_cv_prog_CC ++if test -n "$CC"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 ++$as_echo "$CC" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_CC"; then ++ ac_ct_CC=$CC ++ # Extract the first word of "gcc", so it can be a program name with args. ++set dummy gcc; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_CC+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_CC"; then ++ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_CC="gcc" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_CC=$ac_cv_prog_ac_ct_CC ++if test -n "$ac_ct_CC"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 ++$as_echo "$ac_ct_CC" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi ++else ++ CC="$ac_cv_prog_CC" ++fi ++ ++if test -z "$CC"; then ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. ++set dummy ${ac_tool_prefix}cc; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_CC+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$CC"; then ++ ac_cv_prog_CC="$CC" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_CC="${ac_tool_prefix}cc" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++CC=$ac_cv_prog_CC ++if test -n "$CC"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 ++$as_echo "$CC" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ fi ++fi ++if test -z "$CC"; then ++ # Extract the first word of "cc", so it can be a program name with args. ++set dummy cc; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_CC+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$CC"; then ++ ac_cv_prog_CC="$CC" # Let the user override the test. ++else ++ ac_prog_rejected=no ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ++ ac_prog_rejected=yes ++ continue ++ fi ++ ac_cv_prog_CC="cc" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++if test $ac_prog_rejected = yes; then ++ # We found a bogon in the path, so make sure we never use it. ++ set dummy $ac_cv_prog_CC ++ shift ++ if test $# != 0; then ++ # We chose a different compiler from the bogus one. ++ # However, it has the same basename, so the bogon will be chosen ++ # first if we set CC to just the basename; use the full file name. ++ shift ++ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" ++ fi ++fi ++fi ++fi ++CC=$ac_cv_prog_CC ++if test -n "$CC"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 ++$as_echo "$CC" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$CC"; then ++ if test -n "$ac_tool_prefix"; then ++ for ac_prog in cl.exe ++ do ++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. ++set dummy $ac_tool_prefix$ac_prog; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_CC+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$CC"; then ++ ac_cv_prog_CC="$CC" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_CC="$ac_tool_prefix$ac_prog" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++CC=$ac_cv_prog_CC ++if test -n "$CC"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 ++$as_echo "$CC" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ test -n "$CC" && break ++ done ++fi ++if test -z "$CC"; then ++ ac_ct_CC=$CC ++ for ac_prog in cl.exe ++do ++ # Extract the first word of "$ac_prog", so it can be a program name with args. ++set dummy $ac_prog; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_CC+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_CC"; then ++ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_CC="$ac_prog" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_CC=$ac_cv_prog_ac_ct_CC ++if test -n "$ac_ct_CC"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 ++$as_echo "$ac_ct_CC" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ test -n "$ac_ct_CC" && break ++done ++ ++ if test "x$ac_ct_CC" = x; then ++ CC="" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ CC=$ac_ct_CC ++ fi ++fi ++ ++fi ++ ++ ++test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error $? "no acceptable C compiler found in \$PATH ++See \`config.log' for more details" "$LINENO" 5; } ++ ++# Provide some information about the compiler. ++$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 ++set X $ac_compile ++ac_compiler=$2 ++for ac_option in --version -v -V -qversion; do ++ { { ac_try="$ac_compiler $ac_option >&5" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_compiler $ac_option >&5") 2>conftest.err ++ ac_status=$? ++ if test -s conftest.err; then ++ sed '10a\ ++... rest of stderr output deleted ... ++ 10q' conftest.err >conftest.er1 ++ cat conftest.er1 >&5 ++ fi ++ rm -f conftest.er1 conftest.err ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } ++done ++ ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++ac_clean_files_save=$ac_clean_files ++ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" ++# Try to create an executable without -o first, disregard a.out. ++# It will help us diagnose broken compilers, and finding out an intuition ++# of exeext. ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 ++$as_echo_n "checking whether the C compiler works... " >&6; } ++ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` ++ ++# The possible output files: ++ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ++ ++ac_rmfiles= ++for ac_file in $ac_files ++do ++ case $ac_file in ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; ++ * ) ac_rmfiles="$ac_rmfiles $ac_file";; ++ esac ++done ++rm -f $ac_rmfiles ++ ++if { { ac_try="$ac_link_default" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_link_default") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then : ++ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. ++# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' ++# in a Makefile. We should not override ac_cv_exeext if it was cached, ++# so that the user can short-circuit this test for compilers unknown to ++# Autoconf. ++for ac_file in $ac_files '' ++do ++ test -f "$ac_file" || continue ++ case $ac_file in ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ++ ;; ++ [ab].out ) ++ # We found the default executable, but exeext='' is most ++ # certainly right. ++ break;; ++ *.* ) ++ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; ++ then :; else ++ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` ++ fi ++ # We set ac_cv_exeext here because the later test for it is not ++ # safe: cross compilers may not add the suffix if given an `-o' ++ # argument, so we may need to know it at that point already. ++ # Even if this section looks crufty: it has the advantage of ++ # actually working. ++ break;; ++ * ) ++ break;; ++ esac ++done ++test "$ac_cv_exeext" = no && ac_cv_exeext= ++ ++else ++ ac_file='' ++fi ++if test -z "$ac_file"; then : ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++$as_echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error 77 "C compiler cannot create executables ++See \`config.log' for more details" "$LINENO" 5; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 ++$as_echo_n "checking for C compiler default output file name... " >&6; } ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 ++$as_echo "$ac_file" >&6; } ++ac_exeext=$ac_cv_exeext ++ ++rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ++ac_clean_files=$ac_clean_files_save ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 ++$as_echo_n "checking for suffix of executables... " >&6; } ++if { { ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_link") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then : ++ # If both `conftest.exe' and `conftest' are `present' (well, observable) ++# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will ++# work properly (i.e., refer to `conftest.exe'), while it won't with ++# `rm'. ++for ac_file in conftest.exe conftest conftest.*; do ++ test -f "$ac_file" || continue ++ case $ac_file in ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; ++ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` ++ break;; ++ * ) break;; ++ esac ++done ++else ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error $? "cannot compute suffix of executables: cannot compile and link ++See \`config.log' for more details" "$LINENO" 5; } ++fi ++rm -f conftest conftest$ac_cv_exeext ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 ++$as_echo "$ac_cv_exeext" >&6; } ++ ++rm -f conftest.$ac_ext ++EXEEXT=$ac_cv_exeext ++ac_exeext=$EXEEXT ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++int ++main () ++{ ++FILE *f = fopen ("conftest.out", "w"); ++ return ferror (f) || fclose (f) != 0; ++ ++ ; ++ return 0; ++} ++_ACEOF ++ac_clean_files="$ac_clean_files conftest.out" ++# Check that the compiler produces executables we can run. If not, either ++# the compiler is broken, or we cross compile. ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 ++$as_echo_n "checking whether we are cross compiling... " >&6; } ++if test "$cross_compiling" != yes; then ++ { { ac_try="$ac_link" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_link") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } ++ if { ac_try='./conftest$ac_cv_exeext' ++ { { case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_try") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; }; then ++ cross_compiling=no ++ else ++ if test "$cross_compiling" = maybe; then ++ cross_compiling=yes ++ else ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error $? "cannot run C compiled programs. ++If you meant to cross compile, use \`--host'. ++See \`config.log' for more details" "$LINENO" 5; } ++ fi ++ fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 ++$as_echo "$cross_compiling" >&6; } ++ ++rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ++ac_clean_files=$ac_clean_files_save ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 ++$as_echo_n "checking for suffix of object files... " >&6; } ++if ${ac_cv_objext+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++rm -f conftest.o conftest.obj ++if { { ac_try="$ac_compile" ++case "(($ac_try" in ++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; ++ *) ac_try_echo=$ac_try;; ++esac ++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" ++$as_echo "$ac_try_echo"; } >&5 ++ (eval "$ac_compile") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then : ++ for ac_file in conftest.o conftest.obj conftest.*; do ++ test -f "$ac_file" || continue; ++ case $ac_file in ++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; ++ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` ++ break;; ++ esac ++done ++else ++ $as_echo "$as_me: failed program was:" >&5 ++sed 's/^/| /' conftest.$ac_ext >&5 ++ ++{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error $? "cannot compute suffix of object files: cannot compile ++See \`config.log' for more details" "$LINENO" 5; } ++fi ++rm -f conftest.$ac_cv_objext conftest.$ac_ext ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 ++$as_echo "$ac_cv_objext" >&6; } ++OBJEXT=$ac_cv_objext ++ac_objext=$OBJEXT ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 ++$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } ++if ${ac_cv_c_compiler_gnu+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++#ifndef __GNUC__ ++ choke me ++#endif ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_compiler_gnu=yes ++else ++ ac_compiler_gnu=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ac_cv_c_compiler_gnu=$ac_compiler_gnu ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 ++$as_echo "$ac_cv_c_compiler_gnu" >&6; } ++if test $ac_compiler_gnu = yes; then ++ GCC=yes ++else ++ GCC= ++fi ++ac_test_CFLAGS=${CFLAGS+set} ++ac_save_CFLAGS=$CFLAGS ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 ++$as_echo_n "checking whether $CC accepts -g... " >&6; } ++if ${ac_cv_prog_cc_g+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_save_c_werror_flag=$ac_c_werror_flag ++ ac_c_werror_flag=yes ++ ac_cv_prog_cc_g=no ++ CFLAGS="-g" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_prog_cc_g=yes ++else ++ CFLAGS="" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ++else ++ ac_c_werror_flag=$ac_save_c_werror_flag ++ CFLAGS="-g" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_prog_cc_g=yes ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_c_werror_flag=$ac_save_c_werror_flag ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 ++$as_echo "$ac_cv_prog_cc_g" >&6; } ++if test "$ac_test_CFLAGS" = set; then ++ CFLAGS=$ac_save_CFLAGS ++elif test $ac_cv_prog_cc_g = yes; then ++ if test "$GCC" = yes; then ++ CFLAGS="-g -O2" ++ else ++ CFLAGS="-g" ++ fi ++else ++ if test "$GCC" = yes; then ++ CFLAGS="-O2" ++ else ++ CFLAGS= ++ fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 ++$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } ++if ${ac_cv_prog_cc_c89+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_cv_prog_cc_c89=no ++ac_save_CC=$CC ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++#include ++#include ++#include ++/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ ++struct buf { int x; }; ++FILE * (*rcsopen) (struct buf *, struct stat *, int); ++static char *e (p, i) ++ char **p; ++ int i; ++{ ++ return p[i]; ++} ++static char *f (char * (*g) (char **, int), char **p, ...) ++{ ++ char *s; ++ va_list v; ++ va_start (v,p); ++ s = g (p, va_arg (v,int)); ++ va_end (v); ++ return s; ++} ++ ++/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has ++ function prototypes and stuff, but not '\xHH' hex character constants. ++ These don't provoke an error unfortunately, instead are silently treated ++ as 'x'. The following induces an error, until -std is added to get ++ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an ++ array size at least. It's necessary to write '\x00'==0 to get something ++ that's true only with -std. */ ++int osf4_cc_array ['\x00' == 0 ? 1 : -1]; ++ ++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters ++ inside strings and character constants. */ ++#define FOO(x) 'x' ++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; ++ ++int test (int i, double x); ++struct s1 {int (*f) (int a);}; ++struct s2 {int (*f) (double a);}; ++int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); ++int argc; ++char **argv; ++int ++main () ++{ ++return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ++ ; ++ return 0; ++} ++_ACEOF ++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ ++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" ++do ++ CC="$ac_save_CC $ac_arg" ++ if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_prog_cc_c89=$ac_arg ++fi ++rm -f core conftest.err conftest.$ac_objext ++ test "x$ac_cv_prog_cc_c89" != "xno" && break ++done ++rm -f conftest.$ac_ext ++CC=$ac_save_CC ++ ++fi ++# AC_CACHE_VAL ++case "x$ac_cv_prog_cc_c89" in ++ x) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 ++$as_echo "none needed" >&6; } ;; ++ xno) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 ++$as_echo "unsupported" >&6; } ;; ++ *) ++ CC="$CC $ac_cv_prog_cc_c89" ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 ++$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; ++esac ++if test "x$ac_cv_prog_cc_c89" != xno; then : ++ ++fi ++ ++ac_ext=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" ++ ++ ++am_make=${MAKE-make} ++cat > confinc << 'END' ++am__doit: ++ @echo this is the am__doit target ++.PHONY: am__doit ++END ++# If we don't find an include directive, just comment out the code. ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 ++$as_echo_n "checking for style of include used by $am_make... " >&6; } ++am__include="#" ++am__quote= ++_am_result=none ++# First try GNU make style include. ++echo "include confinc" > confmf ++# Ignore all kinds of additional output from `make'. ++case `$am_make -s -f confmf 2> /dev/null` in #( ++*the\ am__doit\ target*) ++ am__include=include ++ am__quote= ++ _am_result=GNU ++ ;; ++esac ++# Now try BSD make style include. ++if test "$am__include" = "#"; then ++ echo '.include "confinc"' > confmf ++ case `$am_make -s -f confmf 2> /dev/null` in #( ++ *the\ am__doit\ target*) ++ am__include=.include ++ am__quote="\"" ++ _am_result=BSD ++ ;; ++ esac ++fi ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 ++$as_echo "$_am_result" >&6; } ++rm -f confinc confmf ++ ++# Check whether --enable-dependency-tracking was given. ++if test "${enable_dependency_tracking+set}" = set; then : ++ enableval=$enable_dependency_tracking; ++fi ++ ++if test "x$enable_dependency_tracking" != xno; then ++ am_depcomp="$ac_aux_dir/depcomp" ++ AMDEPBACKSLASH='\' ++ 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= ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 ++$as_echo_n "checking dependency style of $depcc... " >&6; } ++if ${am_cv_CC_dependencies_compiler_type+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then ++ # We make a subdir and do the tests there. Otherwise we can end up ++ # making bogus files that we don't know about and never remove. For ++ # instance it was reported that on HP-UX the gcc test will end up ++ # making a dummy file named `D' -- because `-MD' means `put the output ++ # in D'. ++ 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 8's {/usr,}/bin/sh. ++ touch sub/conftst$i.h ++ done ++ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf ++ ++ # We check with `-c' and `-o' for the sake of the "dashmstdout" ++ # mode. It turns out that the SunPro C++ compiler does not properly ++ # handle `-M -o', and we need to detect this. Also, some Intel ++ # versions had trouble with output in subdirs ++ am__obj=sub/conftest.${OBJEXT-o} ++ am__minus_obj="-o $am__obj" ++ case $depmode in ++ gcc) ++ # This depmode causes a compiler race in universal mode. ++ test "$am__universal" = false || continue ++ ;; ++ nosideeffect) ++ # after this tag, mechanisms are not by side-effect, so they'll ++ # only be used when explicitly requested ++ if test "x$enable_dependency_tracking" = xyes; then ++ continue ++ else ++ break ++ fi ++ ;; ++ 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 ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 ++$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } ++CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type ++ ++ if ++ test "x$enable_dependency_tracking" != xno \ ++ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then ++ am__fastdepCC_TRUE= ++ am__fastdepCC_FALSE='#' ++else ++ am__fastdepCC_TRUE='#' ++ am__fastdepCC_FALSE= ++fi ++ ++ ++ if test x$GCC = 'xyes'; then ++ GCC_TRUE= ++ GCC_FALSE='#' ++else ++ GCC_TRUE='#' ++ GCC_FALSE= ++fi ++ ++ ++case `pwd` in ++ *\ * | *\ *) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 ++$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; ++esac ++ ++ ++ ++macro_version='2.4.2' ++macro_revision='1.3337' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ltmain="$ac_aux_dir/ltmain.sh" ++ ++# Make sure we can run config.sub. ++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || ++ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 ++$as_echo_n "checking build system type... " >&6; } ++if ${ac_cv_build+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_build_alias=$build_alias ++test "x$ac_build_alias" = x && ++ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` ++test "x$ac_build_alias" = x && ++ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || ++ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 ++$as_echo "$ac_cv_build" >&6; } ++case $ac_cv_build in ++*-*-*) ;; ++*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; ++esac ++build=$ac_cv_build ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_build ++shift ++build_cpu=$1 ++build_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++build_os=$* ++IFS=$ac_save_IFS ++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 ++$as_echo_n "checking host system type... " >&6; } ++if ${ac_cv_host+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test "x$host_alias" = x; then ++ ac_cv_host=$ac_cv_build ++else ++ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || ++ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 ++fi ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 ++$as_echo "$ac_cv_host" >&6; } ++case $ac_cv_host in ++*-*-*) ;; ++*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; ++esac ++host=$ac_cv_host ++ac_save_IFS=$IFS; IFS='-' ++set x $ac_cv_host ++shift ++host_cpu=$1 ++host_vendor=$2 ++shift; shift ++# Remember, the first character of IFS is used to create $*, ++# except with old shells: ++host_os=$* ++IFS=$ac_save_IFS ++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ++ ++ ++# 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 ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 ++$as_echo_n "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*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 ++$as_echo "printf" >&6; } ;; ++ print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 ++$as_echo "print -r" >&6; } ;; ++ *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 ++$as_echo "cat" >&6; } ;; ++esac ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 ++$as_echo_n "checking for a sed that does not truncate output... " >&6; } ++if ${ac_cv_path_SED+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ ++ for ac_i in 1 2 3 4 5 6 7; do ++ ac_script="$ac_script$as_nl$ac_script" ++ done ++ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed ++ { ac_script=; unset ac_script;} ++ if test -z "$SED"; then ++ ac_path_SED_found=false ++ # Loop through the user's path and test for each of PROGNAME-LIST ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in sed gsed; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue ++# Check for GNU ac_path_SED and select it if it is found. ++ # Check for GNU $ac_path_SED ++case `"$ac_path_SED" --version 2>&1` in ++*GNU*) ++ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; ++*) ++ ac_count=0 ++ $as_echo_n 0123456789 >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ $as_echo '' >> "conftest.nl" ++ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ as_fn_arith $ac_count + 1 && ac_count=$as_val ++ if test $ac_count -gt ${ac_path_SED_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_SED="$ac_path_SED" ++ ac_path_SED_max=$ac_count ++ fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac ++ ++ $ac_path_SED_found && break 3 ++ done ++ done ++ done ++IFS=$as_save_IFS ++ if test -z "$ac_cv_path_SED"; then ++ as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 ++ fi ++else ++ ac_cv_path_SED=$SED ++fi ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 ++$as_echo "$ac_cv_path_SED" >&6; } ++ SED="$ac_cv_path_SED" ++ rm -f conftest.sed ++ ++test -z "$SED" && SED=sed ++Xsed="$SED -e 1s/^X//" ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 ++$as_echo_n "checking for grep that handles long lines and -e... " >&6; } ++if ${ac_cv_path_GREP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -z "$GREP"; then ++ ac_path_GREP_found=false ++ # Loop through the user's path and test for each of PROGNAME-LIST ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in grep ggrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue ++# Check for GNU ac_path_GREP and select it if it is found. ++ # Check for GNU $ac_path_GREP ++case `"$ac_path_GREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; ++*) ++ ac_count=0 ++ $as_echo_n 0123456789 >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ $as_echo 'GREP' >> "conftest.nl" ++ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ as_fn_arith $ac_count + 1 && ac_count=$as_val ++ if test $ac_count -gt ${ac_path_GREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_GREP="$ac_path_GREP" ++ ac_path_GREP_max=$ac_count ++ fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac ++ ++ $ac_path_GREP_found && break 3 ++ done ++ done ++ done ++IFS=$as_save_IFS ++ if test -z "$ac_cv_path_GREP"; then ++ as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 ++ fi ++else ++ ac_cv_path_GREP=$GREP ++fi ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 ++$as_echo "$ac_cv_path_GREP" >&6; } ++ GREP="$ac_cv_path_GREP" ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 ++$as_echo_n "checking for egrep... " >&6; } ++if ${ac_cv_path_EGREP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 ++ then ac_cv_path_EGREP="$GREP -E" ++ else ++ if test -z "$EGREP"; then ++ ac_path_EGREP_found=false ++ # Loop through the user's path and test for each of PROGNAME-LIST ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in egrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue ++# Check for GNU ac_path_EGREP and select it if it is found. ++ # Check for GNU $ac_path_EGREP ++case `"$ac_path_EGREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; ++*) ++ ac_count=0 ++ $as_echo_n 0123456789 >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ $as_echo 'EGREP' >> "conftest.nl" ++ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ as_fn_arith $ac_count + 1 && ac_count=$as_val ++ if test $ac_count -gt ${ac_path_EGREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_EGREP="$ac_path_EGREP" ++ ac_path_EGREP_max=$ac_count ++ fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac ++ ++ $ac_path_EGREP_found && break 3 ++ done ++ done ++ done ++IFS=$as_save_IFS ++ if test -z "$ac_cv_path_EGREP"; then ++ as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 ++ fi ++else ++ ac_cv_path_EGREP=$EGREP ++fi ++ ++ fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 ++$as_echo "$ac_cv_path_EGREP" >&6; } ++ EGREP="$ac_cv_path_EGREP" ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 ++$as_echo_n "checking for fgrep... " >&6; } ++if ${ac_cv_path_FGREP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 ++ then ac_cv_path_FGREP="$GREP -F" ++ else ++ if test -z "$FGREP"; then ++ ac_path_FGREP_found=false ++ # Loop through the user's path and test for each of PROGNAME-LIST ++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_prog in fgrep; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" ++ { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue ++# Check for GNU ac_path_FGREP and select it if it is found. ++ # Check for GNU $ac_path_FGREP ++case `"$ac_path_FGREP" --version 2>&1` in ++*GNU*) ++ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; ++*) ++ ac_count=0 ++ $as_echo_n 0123456789 >"conftest.in" ++ while : ++ do ++ cat "conftest.in" "conftest.in" >"conftest.tmp" ++ mv "conftest.tmp" "conftest.in" ++ cp "conftest.in" "conftest.nl" ++ $as_echo 'FGREP' >> "conftest.nl" ++ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break ++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break ++ as_fn_arith $ac_count + 1 && ac_count=$as_val ++ if test $ac_count -gt ${ac_path_FGREP_max-0}; then ++ # Best one so far, save it but keep looking for a better one ++ ac_cv_path_FGREP="$ac_path_FGREP" ++ ac_path_FGREP_max=$ac_count ++ fi ++ # 10*(2^10) chars as input seems more than enough ++ test $ac_count -gt 10 && break ++ done ++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; ++esac ++ ++ $ac_path_FGREP_found && break 3 ++ done ++ done ++ done ++IFS=$as_save_IFS ++ if test -z "$ac_cv_path_FGREP"; then ++ as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 ++ fi ++else ++ ac_cv_path_FGREP=$FGREP ++fi ++ ++ fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 ++$as_echo "$ac_cv_path_FGREP" >&6; } ++ FGREP="$ac_cv_path_FGREP" ++ ++ ++test -z "$GREP" && GREP=grep ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++# Check whether --with-gnu-ld was given. ++if test "${with_gnu_ld+set}" = set; then : ++ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes ++else ++ with_gnu_ld=no ++fi ++ ++ac_prog=ld ++if test "$GCC" = yes; then ++ # Check if gcc -print-prog-name=ld gives a path. ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 ++$as_echo_n "checking for ld used by $CC... " >&6; } ++ case $host in ++ *-*-mingw*) ++ # gcc leaves a trailing carriage return which upsets mingw ++ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; ++ *) ++ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; ++ esac ++ case $ac_prog in ++ # Accept absolute paths. ++ [\\/]* | ?:[\\/]*) ++ re_direlt='/[^/][^/]*/\.\./' ++ # Canonicalize the pathname of ld ++ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` ++ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ++ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` ++ done ++ test -z "$LD" && LD="$ac_prog" ++ ;; ++ "") ++ # If it fails, then pretend we aren't using GCC. ++ ac_prog=ld ++ ;; ++ *) ++ # If it is relative, then search for the first ld in PATH. ++ with_gnu_ld=unknown ++ ;; ++ esac ++elif test "$with_gnu_ld" = yes; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 ++$as_echo_n "checking for GNU ld... " >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 ++$as_echo_n "checking for non-GNU ld... " >&6; } ++fi ++if ${lt_cv_path_LD+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -z "$LD"; then ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++ for ac_dir in $PATH; do ++ IFS="$lt_save_ifs" ++ test -z "$ac_dir" && ac_dir=. ++ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then ++ lt_cv_path_LD="$ac_dir/$ac_prog" ++ # Check to see if the program is GNU ld. I'd rather use --version, ++ # but apparently some variants of GNU ld only accept -v. ++ # Break only if it was the GNU/non-GNU ld that we prefer. ++ case `"$lt_cv_path_LD" -v 2>&1 &5 ++$as_echo "$LD" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 ++$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } ++if ${lt_cv_prog_gnu_ld+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ # I'd rather use --version here, but apparently some GNU lds only accept -v. ++case `$LD -v 2>&1 &5 ++$as_echo "$lt_cv_prog_gnu_ld" >&6; } ++with_gnu_ld=$lt_cv_prog_gnu_ld ++ ++ ++ ++ ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 ++$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } ++if ${lt_cv_path_NM+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$NM"; then ++ # Let the user override the test. ++ lt_cv_path_NM="$NM" ++else ++ lt_nm_to_check="${ac_tool_prefix}nm" ++ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then ++ lt_nm_to_check="$lt_nm_to_check nm" ++ fi ++ for lt_tmp_nm in $lt_nm_to_check; do ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do ++ IFS="$lt_save_ifs" ++ test -z "$ac_dir" && ac_dir=. ++ tmp_nm="$ac_dir/$lt_tmp_nm" ++ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then ++ # Check to see if the nm accepts a BSD-compat flag. ++ # Adding the `sed 1q' prevents false positives on HP-UX, which says: ++ # nm: unknown option "B" ignored ++ # Tru64's nm complains that /dev/null is an invalid object file ++ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in ++ */dev/null* | *'Invalid file or object type'*) ++ lt_cv_path_NM="$tmp_nm -B" ++ break ++ ;; ++ *) ++ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in ++ */dev/null*) ++ lt_cv_path_NM="$tmp_nm -p" ++ break ++ ;; ++ *) ++ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but ++ continue # so that we can try to find one that supports BSD flags ++ ;; ++ esac ++ ;; ++ esac ++ fi ++ done ++ IFS="$lt_save_ifs" ++ done ++ : ${lt_cv_path_NM=no} ++fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 ++$as_echo "$lt_cv_path_NM" >&6; } ++if test "$lt_cv_path_NM" != "no"; then ++ NM="$lt_cv_path_NM" ++else ++ # Didn't find any BSD compatible name lister, look for dumpbin. ++ if test -n "$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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_DUMPBIN+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$DUMPBIN"; then ++ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++DUMPBIN=$ac_cv_prog_DUMPBIN ++if test -n "$DUMPBIN"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 ++$as_echo "$DUMPBIN" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ test -n "$DUMPBIN" && break ++ done ++fi ++if test -z "$DUMPBIN"; then ++ ac_ct_DUMPBIN=$DUMPBIN ++ for ac_prog in dumpbin "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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_DUMPBIN"; then ++ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN ++if test -n "$ac_ct_DUMPBIN"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 ++$as_echo "$ac_ct_DUMPBIN" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ test -n "$ac_ct_DUMPBIN" && break ++done ++ ++ if test "x$ac_ct_DUMPBIN" = x; then ++ DUMPBIN=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ DUMPBIN=$ac_ct_DUMPBIN ++ fi ++fi ++ ++ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in ++ *COFF*) ++ DUMPBIN="$DUMPBIN -symbols" ++ ;; ++ *) ++ DUMPBIN=: ++ ;; ++ esac ++ fi ++ ++ if test "$DUMPBIN" != ":"; then ++ NM="$DUMPBIN" ++ fi ++fi ++test -z "$NM" && NM=nm ++ ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 ++$as_echo_n "checking the name lister ($NM) interface... " >&6; } ++if ${lt_cv_nm_interface+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_nm_interface="BSD nm" ++ echo "int some_variable = 0;" > conftest.$ac_ext ++ (eval echo "\"\$as_me:$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* ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 ++$as_echo "$lt_cv_nm_interface" >&6; } ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 ++$as_echo_n "checking whether ln -s works... " >&6; } ++LN_S=$as_ln_s ++if test "$LN_S" = "ln -s"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 ++$as_echo "no, using $LN_S" >&6; } ++fi ++ ++# find the maximum length of command line arguments ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 ++$as_echo_n "checking the maximum length of command line arguments... " >&6; } ++if ${lt_cv_sys_max_cmd_len+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ i=0 ++ teststring="ABCD" ++ ++ case $build_os in ++ msdosdjgpp*) ++ # On DJGPP, this test can blow up pretty badly due to problems in libc ++ # (any single argument exceeding 2000 bytes causes a buffer overrun ++ # during glob expansion). Even if it were fixed, the result of this ++ # check would be larger than it should be. ++ lt_cv_sys_max_cmd_len=12288; # 12K is about right ++ ;; ++ ++ gnu*) ++ # Under GNU Hurd, this test is not required because there is ++ # no limit to the length of command line arguments. ++ # Libtool will interpret -1 as no limit whatsoever ++ lt_cv_sys_max_cmd_len=-1; ++ ;; ++ ++ cygwin* | mingw* | cegcc*) ++ # On Win9x/ME, this test blows up -- it succeeds, but takes ++ # about 5 minutes as the teststring grows exponentially. ++ # Worse, since 9x/ME are not pre-emptively multitasking, ++ # you end up with a "frozen" computer, even though with patience ++ # the test eventually succeeds (with a max line length of 256k). ++ # Instead, let's just punt: use the minimum linelength reported by ++ # all of the supported platforms: 8192 (on NT/2K/XP). ++ lt_cv_sys_max_cmd_len=8192; ++ ;; ++ ++ 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; ++ ;; ++ ++ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) ++ # This has been around since 386BSD, at least. Likely further. ++ if test -x /sbin/sysctl; then ++ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` ++ elif test -x /usr/sbin/sysctl; then ++ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` ++ else ++ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs ++ fi ++ # And add a safety zone ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ++ ;; ++ ++ interix*) ++ # We know the value 262144 and hardcode it with a safety zone (like BSD) ++ lt_cv_sys_max_cmd_len=196608 ++ ;; ++ ++ 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"; 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 $i != 17 # 1/2 MB should be enough ++ do ++ i=`expr $i + 1` ++ teststring=$teststring$teststring ++ done ++ # Only check the string length outside the loop. ++ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` ++ teststring= ++ # Add a significant safety factor because C++ compilers can tack on ++ # massive amounts of additional arguments before passing them to the ++ # linker. It appears as though 1/2 is a usable value. ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ++ fi ++ ;; ++ esac ++ ++fi ++ ++if test -n $lt_cv_sys_max_cmd_len ; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 ++$as_echo "$lt_cv_sys_max_cmd_len" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 ++$as_echo "none" >&6; } ++fi ++max_cmd_len=$lt_cv_sys_max_cmd_len ++ ++ ++ ++ ++ ++ ++: ${CP="cp -f"} ++: ${MV="mv -f"} ++: ${RM="rm -f"} ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 ++$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } ++# Try some XSI features ++xsi_shell=no ++( _lt_dummy="a/b/c" ++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ ++ = c,a/b,b/c, \ ++ && eval 'test $(( 1 + 1 )) -eq 2 \ ++ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ ++ && xsi_shell=yes ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 ++$as_echo "$xsi_shell" >&6; } ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 ++$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } ++lt_shell_append=no ++( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ ++ >/dev/null 2>&1 \ ++ && lt_shell_append=yes ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 ++$as_echo "$lt_shell_append" >&6; } ++ ++ ++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then ++ lt_unset=unset ++else ++ lt_unset=false ++fi ++ ++ ++ ++ ++ ++# test EBCDIC or ASCII ++case `echo X|tr X '\101'` in ++ A) # ASCII based system ++ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr ++ lt_SP2NL='tr \040 \012' ++ lt_NL2SP='tr \015\012 \040\040' ++ ;; ++ *) # EBCDIC based system ++ lt_SP2NL='tr \100 \n' ++ lt_NL2SP='tr \r\n \100\100' ++ ;; ++esac ++ ++ ++ ++ ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 ++$as_echo_n "checking how to convert $build file names to $host format... " >&6; } ++if ${lt_cv_to_host_file_cmd+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 ++ ++fi ++ ++to_host_file_cmd=$lt_cv_to_host_file_cmd ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 ++$as_echo "$lt_cv_to_host_file_cmd" >&6; } ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 ++$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } ++if ${lt_cv_to_tool_file_cmd+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ #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 ++ ++fi ++ ++to_tool_file_cmd=$lt_cv_to_tool_file_cmd ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 ++$as_echo "$lt_cv_to_tool_file_cmd" >&6; } ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 ++$as_echo_n "checking for $LD option to reload object files... " >&6; } ++if ${lt_cv_ld_reload_flag+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_ld_reload_flag='-r' ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 ++$as_echo "$lt_cv_ld_reload_flag" >&6; } ++reload_flag=$lt_cv_ld_reload_flag ++case $reload_flag in ++"" | " "*) ;; ++*) reload_flag=" $reload_flag" ;; ++esac ++reload_cmds='$LD$reload_flag -o $output$reload_objs' ++case $host_os in ++ cygwin* | mingw* | pw32* | cegcc*) ++ if test "$GCC" != yes; then ++ reload_cmds=false ++ fi ++ ;; ++ darwin*) ++ if test "$GCC" = yes; then ++ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' ++ else ++ reload_cmds='$LD$reload_flag -o $output$reload_objs' ++ fi ++ ;; ++esac ++ ++ ++ ++ ++ ++ ++ ++ ++ ++if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. ++set dummy ${ac_tool_prefix}objdump; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_OBJDUMP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$OBJDUMP"; then ++ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++OBJDUMP=$ac_cv_prog_OBJDUMP ++if test -n "$OBJDUMP"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 ++$as_echo "$OBJDUMP" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_OBJDUMP"; then ++ ac_ct_OBJDUMP=$OBJDUMP ++ # Extract the first word of "objdump", so it can be a program name with args. ++set dummy objdump; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_OBJDUMP"; then ++ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_OBJDUMP="objdump" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP ++if test -n "$ac_ct_OBJDUMP"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 ++$as_echo "$ac_ct_OBJDUMP" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_OBJDUMP" = x; then ++ OBJDUMP="false" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ OBJDUMP=$ac_ct_OBJDUMP ++ fi ++else ++ OBJDUMP="$ac_cv_prog_OBJDUMP" ++fi ++ ++test -z "$OBJDUMP" && OBJDUMP=objdump ++ ++ ++ ++ ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 ++$as_echo_n "checking how to recognize dependent libraries... " >&6; } ++if ${lt_cv_deplibs_check_method+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_file_magic_cmd='$MAGIC_CMD' ++lt_cv_file_magic_test_file= ++lt_cv_deplibs_check_method='unknown' ++# Need to set the preceding variable on all platforms that support ++# interlibrary dependencies. ++# 'none' -- dependencies not supported. ++# `unknown' -- same as none, but documents that we really don't know. ++# 'pass_all' -- all dependencies passed with no checks. ++# 'test_compile' -- check by making test program. ++# 'file_magic [[regex]]' -- check by looking for files in library path ++# which responds to the $file_magic_cmd with a given extended regex. ++# If you have `file' or equivalent on your system and you're not sure ++# whether `pass_all' will *always* work, you probably want this one. ++ ++case $host_os in ++aix[4-9]*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++beos*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++bsdi[45]*) ++ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' ++ lt_cv_file_magic_cmd='/usr/bin/file -L' ++ lt_cv_file_magic_test_file=/shlib/libc.so ++ ;; ++ ++cygwin*) ++ # func_win32_libid is a shell function defined in ltmain.sh ++ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' ++ lt_cv_file_magic_cmd='func_win32_libid' ++ ;; ++ ++mingw* | pw32*) ++ # Base MSYS/MinGW do not provide the 'file' command needed by ++ # func_win32_libid shell function, so use a weaker test based on 'objdump', ++ # unless we find 'file', for example because we are cross-compiling. ++ # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. ++ if ( test "$lt_cv_nm_interface" = "BSD nm" && 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*) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then ++ case $host_cpu in ++ i*86 ) ++ # Not sure whether the presence of OpenBSD here was a mistake. ++ # Let's accept both of them until this is cleared up. ++ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' ++ lt_cv_file_magic_cmd=/usr/bin/file ++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ++ ;; ++ esac ++ else ++ lt_cv_deplibs_check_method=pass_all ++ fi ++ ;; ++ ++gnu*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++haiku*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++hpux10.20* | hpux11*) ++ lt_cv_file_magic_cmd=/usr/bin/file ++ case $host_cpu in ++ ia64*) ++ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' ++ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ++ ;; ++ hppa*64*) ++ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-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) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++netbsd* | netbsdelf*-gnu) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then ++ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' ++ else ++ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' ++ fi ++ ;; ++ ++newos6*) ++ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' ++ lt_cv_file_magic_cmd=/usr/bin/file ++ lt_cv_file_magic_test_file=/usr/lib/libnls.so ++ ;; ++ ++*nto* | *qnx*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++openbsd*) ++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' ++ else ++ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' ++ fi ++ ;; ++ ++osf3* | osf4* | osf5*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++rdos*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++solaris*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++sysv4 | sysv4.3*) ++ case $host_vendor in ++ motorola) ++ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' ++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ++ ;; ++ ncr) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ sequent) ++ lt_cv_file_magic_cmd='/bin/file' ++ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ++ ;; ++ sni) ++ lt_cv_file_magic_cmd='/bin/file' ++ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" ++ lt_cv_file_magic_test_file=/lib/libc.so ++ ;; ++ siemens) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ pc) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ esac ++ ;; ++ ++tpf*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++esac ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 ++$as_echo "$lt_cv_deplibs_check_method" >&6; } ++ ++file_magic_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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_DLLTOOL+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++DLLTOOL=$ac_cv_prog_DLLTOOL ++if test -n "$DLLTOOL"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 ++$as_echo "$DLLTOOL" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_DLLTOOL="dlltool" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL ++if test -n "$ac_ct_DLLTOOL"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 ++$as_echo "$ac_ct_DLLTOOL" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_DLLTOOL" = x; then ++ DLLTOOL="false" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ DLLTOOL=$ac_ct_DLLTOOL ++ fi ++else ++ DLLTOOL="$ac_cv_prog_DLLTOOL" ++fi ++ ++test -z "$DLLTOOL" && DLLTOOL=dlltool ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 ++$as_echo_n "checking how to associate runtime and link libraries... " >&6; } ++if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 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 ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 ++$as_echo "$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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_AR+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$AR"; then ++ ac_cv_prog_AR="$AR" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_AR="$ac_tool_prefix$ac_prog" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++AR=$ac_cv_prog_AR ++if test -n "$AR"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 ++$as_echo "$AR" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ 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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_AR+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_AR"; then ++ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_AR="$ac_prog" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_AR=$ac_cv_prog_ac_ct_AR ++if test -n "$ac_ct_AR"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 ++$as_echo "$ac_ct_AR" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ 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:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ AR=$ac_ct_AR ++ fi ++fi ++ ++: ${AR=ar} ++: ${AR_FLAGS=cru} ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 ++$as_echo_n "checking for archiver @FILE support... " >&6; } ++if ${lt_cv_ar_at_file+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_ar_at_file=no ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ 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=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } ++ if test "$ac_status" -eq 0; 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=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } ++ if test "$ac_status" -ne 0; then ++ lt_cv_ar_at_file=@ ++ fi ++ fi ++ rm -f conftest.* libconftest.a ++ ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 ++$as_echo "$lt_cv_ar_at_file" >&6; } ++ ++if test "x$lt_cv_ar_at_file" = xno; 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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_STRIP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$STRIP"; then ++ ac_cv_prog_STRIP="$STRIP" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_STRIP="${ac_tool_prefix}strip" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++STRIP=$ac_cv_prog_STRIP ++if test -n "$STRIP"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 ++$as_echo "$STRIP" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_STRIP"; then ++ ac_ct_STRIP=$STRIP ++ # Extract the first word of "strip", so it can be a program name with args. ++set dummy strip; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_STRIP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_STRIP"; then ++ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_STRIP="strip" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP ++if test -n "$ac_ct_STRIP"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 ++$as_echo "$ac_ct_STRIP" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_STRIP" = x; then ++ STRIP=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ STRIP=$ac_ct_STRIP ++ fi ++else ++ STRIP="$ac_cv_prog_STRIP" ++fi ++ ++test -z "$STRIP" && STRIP=: ++ ++ ++ ++ ++ ++ ++if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. ++set dummy ${ac_tool_prefix}ranlib; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_RANLIB+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$RANLIB"; then ++ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++RANLIB=$ac_cv_prog_RANLIB ++if test -n "$RANLIB"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 ++$as_echo "$RANLIB" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_RANLIB"; then ++ ac_ct_RANLIB=$RANLIB ++ # Extract the first word of "ranlib", so it can be a program name with args. ++set dummy ranlib; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_RANLIB"; then ++ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_RANLIB="ranlib" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB ++if test -n "$ac_ct_RANLIB"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 ++$as_echo "$ac_ct_RANLIB" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_RANLIB" = x; then ++ RANLIB=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ RANLIB=$ac_ct_RANLIB ++ fi ++else ++ RANLIB="$ac_cv_prog_RANLIB" ++fi ++ ++test -z "$RANLIB" && RANLIB=: ++ ++ ++ ++ ++ ++ ++# Determine commands to create old-style static archives. ++old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' ++old_postinstall_cmds='chmod 644 $oldlib' ++old_postuninstall_cmds= ++ ++if test -n "$RANLIB"; then ++ case $host_os in ++ openbsd*) ++ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$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. ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 ++$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } ++if ${lt_cv_sys_global_symbol_pipe+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ++# These are sane defaults that work on at least a few old systems. ++# [They come from Ultrix. What could be older than Ultrix?!! ;)] ++ ++# Character class describing NM global symbol codes. ++symcode='[BCDEGRST]' ++ ++# Regexp to match symbols that can be accessed directly from C. ++sympat='\([_A-Za-z][_A-Za-z0-9]*\)' ++ ++# Define system-specific variables. ++case $host_os in ++aix*) ++ symcode='[BCDT]' ++ ;; ++cygwin* | mingw* | pw32* | cegcc*) ++ symcode='[ABCDGISTW]' ++ ;; ++hpux*) ++ if test "$host_cpu" = ia64; then ++ symcode='[ABCDEGRST]' ++ fi ++ ;; ++irix* | nonstopux*) ++ symcode='[BCDEGRST]' ++ ;; ++osf*) ++ symcode='[BCDEGQRST]' ++ ;; ++solaris*) ++ symcode='[BDRT]' ++ ;; ++sco3.2v5*) ++ symcode='[DT]' ++ ;; ++sysv4.2uw2*) ++ symcode='[DT]' ++ ;; ++sysv5* | sco5v6* | unixware* | OpenUNIX*) ++ symcode='[ABDT]' ++ ;; ++sysv4) ++ symcode='[DFNSTU]' ++ ;; ++esac ++ ++# If we're using GNU nm, then use its standard symbol codes. ++case `$NM -V 2>&1` in ++*GNU* | *'with BFD'*) ++ symcode='[ABCDGIRSTW]' ;; ++esac ++ ++# Transform an extracted symbol line into a proper C declaration. ++# Some systems (esp. on ia64) link data and code symbols differently, ++# so use this general approach. ++lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" ++ ++# Transform an extracted symbol line into symbol name and symbol address ++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" ++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" ++ ++# Handle CRLF in mingw tool chain ++opt_cr= ++case $build_os in ++mingw*) ++ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ++ ;; ++esac ++ ++# Try without a prefix underscore, then with it. ++for ac_symprfx in "" "_"; do ++ ++ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. ++ symxfrm="\\1 $ac_symprfx\\2 \\2" ++ ++ # Write the raw and C identifiers. ++ if test "$lt_cv_nm_interface" = "MS dumpbin"; then ++ # Fake it for dumpbin and say T for any non-static function ++ # and D for any global variable. ++ # Also find C++ and __fastcall symbols from MSVC++, ++ # which start with @ or ?. ++ lt_cv_sys_global_symbol_pipe="$AWK '"\ ++" {last_section=section; section=\$ 3};"\ ++" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ ++" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ ++" \$ 0!~/External *\|/{next};"\ ++" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ ++" {if(hide[section]) next};"\ ++" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ ++" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ ++" s[1]~/^[@?]/{print s[1], s[1]; next};"\ ++" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ ++" ' prfx=^$ac_symprfx" ++ else ++ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" ++ fi ++ 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=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ # Now try to grab the symbols. ++ nlist=conftest.nm ++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 ++ (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } && test -s "$nlist"; then ++ # Try sorting and uniquifying the output. ++ if sort "$nlist" | uniq > "$nlist"T; then ++ mv -f "$nlist"T "$nlist" ++ else ++ rm -f "$nlist"T ++ fi ++ ++ # Make sure that we snagged all the symbols we need. ++ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then ++ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then ++ cat <<_LT_EOF > conftest.$ac_ext ++/* 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 con'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* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext ++ cat <<\_LT_EOF >> conftest.$ac_ext ++ {0, (void *) 0} ++}; ++ ++/* This works around a problem in FreeBSD linker */ ++#ifdef FREEBSD_WORKAROUND ++static const void *lt_preloaded_setup() { ++ return lt__PROGRAM__LTX_preloaded_symbols; ++} ++#endif ++ ++#ifdef __cplusplus ++} ++#endif ++_LT_EOF ++ # Now try linking the two files. ++ mv conftest.$ac_objext conftstm.$ac_objext ++ lt_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=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } && test -s conftest${ac_exeext}; then ++ pipe_works=yes ++ fi ++ LIBS=$lt_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 "$pipe_works" = yes; then ++ break ++ else ++ lt_cv_sys_global_symbol_pipe= ++ fi ++done ++ ++fi ++ ++if test -z "$lt_cv_sys_global_symbol_pipe"; then ++ lt_cv_sys_global_symbol_to_cdecl= ++fi ++if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 ++$as_echo "failed" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 ++$as_echo "ok" >&6; } ++fi ++ ++# 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 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 ++$as_echo_n "checking for sysroot... " >&6; } ++ ++# Check whether --with-sysroot was given. ++if test "${with_sysroot+set}" = set; then : ++ withval=$with_sysroot; ++else ++ with_sysroot=no ++fi ++ ++ ++lt_sysroot= ++case ${with_sysroot} in #( ++ yes) ++ if test "$GCC" = yes; then ++ lt_sysroot=`$CC --print-sysroot 2>/dev/null` ++ fi ++ ;; #( ++ /*) ++ lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ++ ;; #( ++ no|'') ++ ;; #( ++ *) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 ++$as_echo "${with_sysroot}" >&6; } ++ as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ++ ;; ++esac ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 ++$as_echo "${lt_sysroot:-no}" >&6; } ++ ++ ++ ++ ++ ++# Check whether --enable-libtool-lock was given. ++if test "${enable_libtool_lock+set}" = set; then : ++ enableval=$enable_libtool_lock; ++fi ++ ++test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes ++ ++# Some flags need to be propagated to the compiler or linker for good ++# libtool support. ++case $host in ++ia64-*-hpux*) ++ # Find out which ABI we are using. ++ echo 'int i;' > conftest.$ac_ext ++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *ELF-32*) ++ HPUX_IA64_MODE="32" ++ ;; ++ *ELF-64*) ++ HPUX_IA64_MODE="64" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++*-*-irix6*) ++ # Find out which ABI we are using. ++ echo '#line '$LINENO' "configure"' > conftest.$ac_ext ++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ if test "$lt_cv_prog_gnu_ld" = yes; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *32-bit*) ++ LD="${LD-ld} -melf32bsmip" ++ ;; ++ *N32*) ++ LD="${LD-ld} -melf32bmipn32" ++ ;; ++ *64-bit*) ++ LD="${LD-ld} -melf64bmip" ++ ;; ++ esac ++ else ++ case `/usr/bin/file conftest.$ac_objext` in ++ *32-bit*) ++ LD="${LD-ld} -32" ++ ;; ++ *N32*) ++ LD="${LD-ld} -n32" ++ ;; ++ *64-bit*) ++ LD="${LD-ld} -64" ++ ;; ++ esac ++ fi ++ fi ++ rm -rf conftest* ++ ;; ++ ++x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ ++s390*-*linux*|s390*-*tpf*|sparc*-*linux*) ++ # Find out which ABI we are using. ++ echo 'int i;' > conftest.$ac_ext ++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ case `/usr/bin/file conftest.o` in ++ *32-bit*) ++ case $host in ++ x86_64-*kfreebsd*-gnu) ++ LD="${LD-ld} -m elf_i386_fbsd" ++ ;; ++ x86_64-*linux*) ++ LD="${LD-ld} -m elf_i386" ++ ;; ++ ppc64-*linux*|powerpc64-*linux*) ++ LD="${LD-ld} -m elf32ppclinux" ++ ;; ++ s390x-*linux*) ++ LD="${LD-ld} -m elf_s390" ++ ;; ++ sparc64-*linux*) ++ LD="${LD-ld} -m elf32_sparc" ++ ;; ++ esac ++ ;; ++ *64-bit*) ++ case $host in ++ x86_64-*kfreebsd*-gnu) ++ LD="${LD-ld} -m elf_x86_64_fbsd" ++ ;; ++ x86_64-*linux*) ++ LD="${LD-ld} -m elf_x86_64" ++ ;; ++ ppc*-*linux*|powerpc*-*linux*) ++ LD="${LD-ld} -m elf64ppc" ++ ;; ++ s390*-*linux*|s390*-*tpf*) ++ LD="${LD-ld} -m elf64_s390" ++ ;; ++ sparc*-*linux*) ++ LD="${LD-ld} -m elf64_sparc" ++ ;; ++ esac ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ ++*-*-sco3.2v5*) ++ # On SCO OpenServer 5, we need -belf to get full-featured binaries. ++ SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -belf" ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 ++$as_echo_n "checking whether the C compiler needs -belf... " >&6; } ++if ${lt_cv_cc_needs_belf+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ lt_cv_cc_needs_belf=yes ++else ++ lt_cv_cc_needs_belf=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 ++$as_echo "$lt_cv_cc_needs_belf" >&6; } ++ if test x"$lt_cv_cc_needs_belf" != x"yes"; then ++ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf ++ CFLAGS="$SAVE_CFLAGS" ++ fi ++ ;; ++*-*solaris*) ++ # Find out which ABI we are using. ++ echo 'int i;' > conftest.$ac_ext ++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ case `/usr/bin/file conftest.o` in ++ *64-bit*) ++ case $lt_cv_prog_gnu_ld in ++ yes*) ++ case $host in ++ i?86-*-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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL ++if test -n "$MANIFEST_TOOL"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 ++$as_echo "$MANIFEST_TOOL" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL ++if test -n "$ac_ct_MANIFEST_TOOL"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 ++$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_MANIFEST_TOOL" = x; then ++ MANIFEST_TOOL=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL ++ fi ++else ++ MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" ++fi ++ ++test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 ++$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } ++if ${lt_cv_path_mainfest_tool+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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* ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 ++$as_echo "$lt_cv_path_mainfest_tool" >&6; } ++if test "x$lt_cv_path_mainfest_tool" != xyes; 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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_DSYMUTIL+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$DSYMUTIL"; then ++ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++DSYMUTIL=$ac_cv_prog_DSYMUTIL ++if test -n "$DSYMUTIL"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 ++$as_echo "$DSYMUTIL" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_DSYMUTIL"; then ++ ac_ct_DSYMUTIL=$DSYMUTIL ++ # Extract the first word of "dsymutil", so it can be a program name with args. ++set dummy dsymutil; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_DSYMUTIL"; then ++ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL ++if test -n "$ac_ct_DSYMUTIL"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 ++$as_echo "$ac_ct_DSYMUTIL" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_DSYMUTIL" = x; then ++ DSYMUTIL=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ DSYMUTIL=$ac_ct_DSYMUTIL ++ fi ++else ++ DSYMUTIL="$ac_cv_prog_DSYMUTIL" ++fi ++ ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. ++set dummy ${ac_tool_prefix}nmedit; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_NMEDIT+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$NMEDIT"; then ++ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++NMEDIT=$ac_cv_prog_NMEDIT ++if test -n "$NMEDIT"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 ++$as_echo "$NMEDIT" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_NMEDIT"; then ++ ac_ct_NMEDIT=$NMEDIT ++ # Extract the first word of "nmedit", so it can be a program name with args. ++set dummy nmedit; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_NMEDIT"; then ++ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_NMEDIT="nmedit" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT ++if test -n "$ac_ct_NMEDIT"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 ++$as_echo "$ac_ct_NMEDIT" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_NMEDIT" = x; then ++ NMEDIT=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ NMEDIT=$ac_ct_NMEDIT ++ fi ++else ++ NMEDIT="$ac_cv_prog_NMEDIT" ++fi ++ ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. ++set dummy ${ac_tool_prefix}lipo; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_LIPO+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$LIPO"; then ++ ac_cv_prog_LIPO="$LIPO" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_LIPO="${ac_tool_prefix}lipo" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++LIPO=$ac_cv_prog_LIPO ++if test -n "$LIPO"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 ++$as_echo "$LIPO" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_LIPO"; then ++ ac_ct_LIPO=$LIPO ++ # Extract the first word of "lipo", so it can be a program name with args. ++set dummy lipo; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_LIPO+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_LIPO"; then ++ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_LIPO="lipo" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO ++if test -n "$ac_ct_LIPO"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 ++$as_echo "$ac_ct_LIPO" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_LIPO" = x; then ++ LIPO=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ LIPO=$ac_ct_LIPO ++ fi ++else ++ LIPO="$ac_cv_prog_LIPO" ++fi ++ ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. ++set dummy ${ac_tool_prefix}otool; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_OTOOL+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$OTOOL"; then ++ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_OTOOL="${ac_tool_prefix}otool" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++OTOOL=$ac_cv_prog_OTOOL ++if test -n "$OTOOL"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 ++$as_echo "$OTOOL" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_OTOOL"; then ++ ac_ct_OTOOL=$OTOOL ++ # Extract the first word of "otool", so it can be a program name with args. ++set dummy otool; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_OTOOL"; then ++ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_OTOOL="otool" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL ++if test -n "$ac_ct_OTOOL"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 ++$as_echo "$ac_ct_OTOOL" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_OTOOL" = x; then ++ OTOOL=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ OTOOL=$ac_ct_OTOOL ++ fi ++else ++ OTOOL="$ac_cv_prog_OTOOL" ++fi ++ ++ if test -n "$ac_tool_prefix"; then ++ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. ++set dummy ${ac_tool_prefix}otool64; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_OTOOL64+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$OTOOL64"; then ++ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++OTOOL64=$ac_cv_prog_OTOOL64 ++if test -n "$OTOOL64"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 ++$as_echo "$OTOOL64" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++fi ++if test -z "$ac_cv_prog_OTOOL64"; then ++ ac_ct_OTOOL64=$OTOOL64 ++ # Extract the first word of "otool64", so it can be a program name with args. ++set dummy otool64; ac_word=$2 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 ++$as_echo_n "checking for $ac_word... " >&6; } ++if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test -n "$ac_ct_OTOOL64"; then ++ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. ++else ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ ac_cv_prog_ac_ct_OTOOL64="otool64" ++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 ++ break 2 ++ fi ++done ++ done ++IFS=$as_save_IFS ++ ++fi ++fi ++ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 ++if test -n "$ac_ct_OTOOL64"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 ++$as_echo "$ac_ct_OTOOL64" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ if test "x$ac_ct_OTOOL64" = x; then ++ OTOOL64=":" ++ else ++ case $cross_compiling:$ac_tool_warned in ++yes:) ++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 ++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ++ac_tool_warned=yes ;; ++esac ++ OTOOL64=$ac_ct_OTOOL64 ++ fi ++else ++ OTOOL64="$ac_cv_prog_OTOOL64" ++fi ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 ++$as_echo_n "checking for -single_module linker flag... " >&6; } ++if ${lt_cv_apple_cc_single_mod+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_apple_cc_single_mod=no ++ if test -z "${LT_MULTI_MODULE}"; then ++ # By default we will add the -single_module flag. You can override ++ # by either setting the environment variable LT_MULTI_MODULE ++ # non-empty at configure time, or by adding -multi_module to the ++ # link flags. ++ rm -rf libconftest.dylib* ++ echo "int foo(void){return 1;}" > conftest.c ++ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ ++-dynamiclib -Wl,-single_module conftest.c" >&5 ++ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ ++ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err ++ _lt_result=$? ++ # If 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 $_lt_result -eq 0; then ++ lt_cv_apple_cc_single_mod=yes ++ else ++ cat conftest.err >&5 ++ fi ++ rm -rf libconftest.dylib* ++ rm -f conftest.* ++ fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 ++$as_echo "$lt_cv_apple_cc_single_mod" >&6; } ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 ++$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } ++if ${lt_cv_ld_exported_symbols_list+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_ld_exported_symbols_list=no ++ save_LDFLAGS=$LDFLAGS ++ echo "_main" > conftest.sym ++ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ lt_cv_ld_exported_symbols_list=yes ++else ++ lt_cv_ld_exported_symbols_list=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ LDFLAGS="$save_LDFLAGS" ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 ++$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 ++$as_echo_n "checking for -force_load linker flag... " >&6; } ++if ${lt_cv_ld_force_load+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 cru libconftest.a conftest.o" >&5 ++ $AR cru 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 $_lt_result -eq 0 && $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 ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 ++$as_echo "$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*) # darwin 5.x on ++ # if running on 10.5 or later, the deployment target defaults ++ # to the OS version, if on x86, and 10.4, the deployment ++ # target defaults to 10.4. Don't you love it? ++ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in ++ 10.0,*86*-darwin8*|10.0,*-darwin[91]*) ++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; ++ 10.[012]*) ++ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; ++ 10.*) ++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; ++ esac ++ ;; ++ esac ++ if test "$lt_cv_apple_cc_single_mod" = "yes"; then ++ _lt_dar_single_mod='$single_module' ++ fi ++ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then ++ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' ++ else ++ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' ++ fi ++ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then ++ _lt_dsymutil='~$DSYMUTIL $lib || :' ++ else ++ _lt_dsymutil= ++ fi ++ ;; ++ esac ++ ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 ++$as_echo_n "checking how to run the C preprocessor... " >&6; } ++# On Suns, sometimes $CPP names a directory. ++if test -n "$CPP" && test -d "$CPP"; then ++ CPP= ++fi ++if test -z "$CPP"; then ++ if ${ac_cv_prog_CPP+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ # Double quotes because CPP needs to be expanded ++ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" ++ do ++ ac_preproc_ok=false ++for ac_c_preproc_warn_flag in '' yes ++do ++ # Use a header file that comes with gcc, so configuring glibc ++ # with a fresh cross-compiler works. ++ # Prefer to if __STDC__ is defined, since ++ # exists even on freestanding compilers. ++ # On the NeXT, cc -E runs the code through the compiler's parser, ++ # not just through cpp. "Syntax error" is here to catch this case. ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#ifdef __STDC__ ++# include ++#else ++# include ++#endif ++ Syntax error ++_ACEOF ++if ac_fn_c_try_cpp "$LINENO"; then : ++ ++else ++ # Broken: fails on valid input. ++continue ++fi ++rm -f conftest.err conftest.i conftest.$ac_ext ++ ++ # OK, works on sane cases. Now check whether nonexistent headers ++ # can be detected and how. ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++_ACEOF ++if ac_fn_c_try_cpp "$LINENO"; then : ++ # Broken: success on invalid input. ++continue ++else ++ # Passes both tests. ++ac_preproc_ok=: ++break ++fi ++rm -f conftest.err conftest.i conftest.$ac_ext ++ ++done ++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. ++rm -f conftest.i conftest.err conftest.$ac_ext ++if $ac_preproc_ok; then : ++ break ++fi ++ ++ done ++ ac_cv_prog_CPP=$CPP ++ ++fi ++ CPP=$ac_cv_prog_CPP ++else ++ ac_cv_prog_CPP=$CPP ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 ++$as_echo "$CPP" >&6; } ++ac_preproc_ok=false ++for ac_c_preproc_warn_flag in '' yes ++do ++ # Use a header file that comes with gcc, so configuring glibc ++ # with a fresh cross-compiler works. ++ # Prefer to if __STDC__ is defined, since ++ # exists even on freestanding compilers. ++ # On the NeXT, cc -E runs the code through the compiler's parser, ++ # not just through cpp. "Syntax error" is here to catch this case. ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#ifdef __STDC__ ++# include ++#else ++# include ++#endif ++ Syntax error ++_ACEOF ++if ac_fn_c_try_cpp "$LINENO"; then : ++ ++else ++ # Broken: fails on valid input. ++continue ++fi ++rm -f conftest.err conftest.i conftest.$ac_ext ++ ++ # OK, works on sane cases. Now check whether nonexistent headers ++ # can be detected and how. ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++_ACEOF ++if ac_fn_c_try_cpp "$LINENO"; then : ++ # Broken: success on invalid input. ++continue ++else ++ # Passes both tests. ++ac_preproc_ok=: ++break ++fi ++rm -f conftest.err conftest.i conftest.$ac_ext ++ ++done ++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. ++rm -f conftest.i conftest.err conftest.$ac_ext ++if $ac_preproc_ok; then : ++ ++else ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error $? "C preprocessor \"$CPP\" fails sanity check ++See \`config.log' for more details" "$LINENO" 5; } ++fi ++ ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 ++$as_echo_n "checking for ANSI C header files... " >&6; } ++if ${ac_cv_header_stdc+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++#include ++#include ++#include ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_header_stdc=yes ++else ++ ac_cv_header_stdc=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++if test $ac_cv_header_stdc = yes; then ++ # SunOS 4.x string.h does not declare mem*, contrary to ANSI. ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++ ++_ACEOF ++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ++ $EGREP "memchr" >/dev/null 2>&1; then : ++ ++else ++ ac_cv_header_stdc=no ++fi ++rm -f conftest* ++ ++fi ++ ++if test $ac_cv_header_stdc = yes; then ++ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++ ++_ACEOF ++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ++ $EGREP "free" >/dev/null 2>&1; then : ++ ++else ++ ac_cv_header_stdc=no ++fi ++rm -f conftest* ++ ++fi ++ ++if test $ac_cv_header_stdc = yes; then ++ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. ++ if test "$cross_compiling" = yes; then : ++ : ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++#include ++#if ((' ' & 0x0FF) == 0x020) ++# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') ++# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) ++#else ++# define ISLOWER(c) \ ++ (('a' <= (c) && (c) <= 'i') \ ++ || ('j' <= (c) && (c) <= 'r') \ ++ || ('s' <= (c) && (c) <= 'z')) ++# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) ++#endif ++ ++#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) ++int ++main () ++{ ++ int i; ++ for (i = 0; i < 256; i++) ++ if (XOR (islower (i), ISLOWER (i)) ++ || toupper (i) != TOUPPER (i)) ++ return 2; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_run "$LINENO"; then : ++ ++else ++ ac_cv_header_stdc=no ++fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ ++ conftest.$ac_objext conftest.beam conftest.$ac_ext ++fi ++ ++fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 ++$as_echo "$ac_cv_header_stdc" >&6; } ++if test $ac_cv_header_stdc = yes; then ++ ++$as_echo "#define STDC_HEADERS 1" >>confdefs.h ++ ++fi ++ ++# On IRIX 5.3, sys/types and inttypes.h are conflicting. ++for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ ++ inttypes.h stdint.h unistd.h ++do : ++ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ++ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default ++" ++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : ++ cat >>confdefs.h <<_ACEOF ++#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 ++_ACEOF ++ ++fi ++ ++done ++ ++ ++for ac_header in dlfcn.h ++do : ++ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default ++" ++if test "x$ac_cv_header_dlfcn_h" = xyes; then : ++ cat >>confdefs.h <<_ACEOF ++#define HAVE_DLFCN_H 1 ++_ACEOF ++ ++fi ++ ++done ++ ++ ++ ++ ++ ++# Set options ++ ++ ++ ++ enable_dlopen=no ++ ++ ++ enable_win32_dll=no ++ ++ ++ # Check whether --enable-shared was given. ++if test "${enable_shared+set}" = set; then : ++ enableval=$enable_shared; p=${PACKAGE-default} ++ case $enableval in ++ yes) enable_shared=yes ;; ++ no) enable_shared=no ;; ++ *) ++ enable_shared=no ++ # Look at the argument we got. We use all the common list separators. ++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," ++ for pkg in $enableval; do ++ IFS="$lt_save_ifs" ++ if test "X$pkg" = "X$p"; then ++ enable_shared=yes ++ fi ++ done ++ IFS="$lt_save_ifs" ++ ;; ++ esac ++else ++ enable_shared=yes ++fi ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ # Check whether --enable-static was given. ++if test "${enable_static+set}" = set; then : ++ enableval=$enable_static; p=${PACKAGE-default} ++ case $enableval in ++ yes) enable_static=yes ;; ++ no) enable_static=no ;; ++ *) ++ enable_static=no ++ # Look at the argument we got. We use all the common list separators. ++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," ++ for pkg in $enableval; do ++ IFS="$lt_save_ifs" ++ if test "X$pkg" = "X$p"; then ++ enable_static=yes ++ fi ++ done ++ IFS="$lt_save_ifs" ++ ;; ++ esac ++else ++ enable_static=yes ++fi ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++# Check whether --with-pic was given. ++if test "${with_pic+set}" = set; then : ++ withval=$with_pic; 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 ++ pic_mode=default ++fi ++ ++ ++test -z "$pic_mode" && pic_mode=default ++ ++ ++ ++ ++ ++ ++ ++ # Check whether --enable-fast-install was given. ++if test "${enable_fast_install+set}" = set; then : ++ enableval=$enable_fast_install; p=${PACKAGE-default} ++ case $enableval in ++ yes) enable_fast_install=yes ;; ++ no) enable_fast_install=no ;; ++ *) ++ enable_fast_install=no ++ # Look at the argument we got. We use all the common list separators. ++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," ++ for pkg in $enableval; do ++ IFS="$lt_save_ifs" ++ if test "X$pkg" = "X$p"; then ++ enable_fast_install=yes ++ fi ++ done ++ IFS="$lt_save_ifs" ++ ;; ++ esac ++else ++ enable_fast_install=yes ++fi ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++# This can be used to rebuild libtool when needed ++LIBTOOL_DEPS="$ltmain" ++ ++# Always use our own libtool. ++LIBTOOL='$(SHELL) $(top_builddir)/libtool' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++test -z "$LN_S" && LN_S="ln -s" ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++if test -n "${ZSH_VERSION+set}" ; then ++ setopt NO_GLOB_SUBST ++fi ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 ++$as_echo_n "checking for objdir... " >&6; } ++if ${lt_cv_objdir+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ rm -f .libs 2>/dev/null ++mkdir .libs 2>/dev/null ++if test -d .libs; then ++ lt_cv_objdir=.libs ++else ++ # MS-DOS does not allow filenames that begin with a dot. ++ lt_cv_objdir=_libs ++fi ++rmdir .libs 2>/dev/null ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 ++$as_echo "$lt_cv_objdir" >&6; } ++objdir=$lt_cv_objdir ++ ++ ++ ++ ++ ++cat >>confdefs.h <<_ACEOF ++#define LT_OBJDIR "$lt_cv_objdir/" ++_ACEOF ++ ++ ++ ++ ++case $host_os in ++aix3*) ++ # AIX sometimes has problems with the GCC collect2 program. For some ++ # reason, if we set the COLLECT_NAMES environment variable, the problems ++ # vanish in a puff of smoke. ++ if test "X${COLLECT_NAMES+set}" != Xset; then ++ COLLECT_NAMES= ++ export COLLECT_NAMES ++ fi ++ ;; ++esac ++ ++# Global variables: ++ofile=libtool ++can_build_shared=yes ++ ++# All known linkers require a `.a' archive for static linking (except MSVC, ++# which needs '.lib'). ++libext=a ++ ++with_gnu_ld="$lt_cv_prog_gnu_ld" ++ ++old_CC="$CC" ++old_CFLAGS="$CFLAGS" ++ ++# Set sane defaults for various variables ++test -z "$CC" && CC=cc ++test -z "$LTCC" && LTCC=$CC ++test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS ++test -z "$LD" && LD=ld ++test -z "$ac_objext" && ac_objext=o ++ ++for cc_temp in $compiler""; do ++ case $cc_temp in ++ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; ++ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; ++ \-*) ;; ++ *) break;; ++ esac ++done ++cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ++ ++ ++# Only perform the check for file, if the check method requires it ++test -z "$MAGIC_CMD" && MAGIC_CMD=file ++case $deplibs_check_method in ++file_magic*) ++ if test "$file_magic_cmd" = '$MAGIC_CMD'; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 ++$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } ++if ${lt_cv_path_MAGIC_CMD+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $MAGIC_CMD in ++[\\/*] | ?:[\\/]*) ++ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ++ ;; ++*) ++ lt_save_MAGIC_CMD="$MAGIC_CMD" ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" ++ for ac_dir in $ac_dummy; do ++ IFS="$lt_save_ifs" ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/${ac_tool_prefix}file; then ++ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" ++ if test -n "$file_magic_test_file"; then ++ case $deplibs_check_method in ++ "file_magic "*) ++ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` ++ MAGIC_CMD="$lt_cv_path_MAGIC_CMD" ++ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | ++ $EGREP "$file_magic_regex" > /dev/null; then ++ : ++ else ++ cat <<_LT_EOF 1>&2 ++ ++*** Warning: the command libtool uses to detect shared libraries, ++*** $file_magic_cmd, produces output that libtool cannot recognize. ++*** The result is that libtool may fail to recognize shared libraries ++*** as such. This will affect the creation of libtool libraries that ++*** depend on shared libraries, but programs linked with such libtool ++*** libraries will work regardless of this problem. Nevertheless, you ++*** may want to report the problem to your system manager and/or to ++*** bug-libtool@gnu.org ++ ++_LT_EOF ++ fi ;; ++ esac ++ fi ++ break ++ fi ++ done ++ IFS="$lt_save_ifs" ++ MAGIC_CMD="$lt_save_MAGIC_CMD" ++ ;; ++esac ++fi ++ ++MAGIC_CMD="$lt_cv_path_MAGIC_CMD" ++if test -n "$MAGIC_CMD"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 ++$as_echo "$MAGIC_CMD" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ ++ ++ ++if test -z "$lt_cv_path_MAGIC_CMD"; then ++ if test -n "$ac_tool_prefix"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 ++$as_echo_n "checking for file... " >&6; } ++if ${lt_cv_path_MAGIC_CMD+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ case $MAGIC_CMD in ++[\\/*] | ?:[\\/]*) ++ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ++ ;; ++*) ++ lt_save_MAGIC_CMD="$MAGIC_CMD" ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" ++ for ac_dir in $ac_dummy; do ++ IFS="$lt_save_ifs" ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/file; then ++ lt_cv_path_MAGIC_CMD="$ac_dir/file" ++ if test -n "$file_magic_test_file"; then ++ case $deplibs_check_method in ++ "file_magic "*) ++ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` ++ MAGIC_CMD="$lt_cv_path_MAGIC_CMD" ++ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | ++ $EGREP "$file_magic_regex" > /dev/null; then ++ : ++ else ++ cat <<_LT_EOF 1>&2 ++ ++*** Warning: the command libtool uses to detect shared libraries, ++*** $file_magic_cmd, produces output that libtool cannot recognize. ++*** The result is that libtool may fail to recognize shared libraries ++*** as such. This will affect the creation of libtool libraries that ++*** depend on shared libraries, but programs linked with such libtool ++*** libraries will work regardless of this problem. Nevertheless, you ++*** may want to report the problem to your system manager and/or to ++*** bug-libtool@gnu.org ++ ++_LT_EOF ++ fi ;; ++ esac ++ fi ++ break ++ fi ++ done ++ IFS="$lt_save_ifs" ++ MAGIC_CMD="$lt_save_MAGIC_CMD" ++ ;; ++esac ++fi ++ ++MAGIC_CMD="$lt_cv_path_MAGIC_CMD" ++if test -n "$MAGIC_CMD"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 ++$as_echo "$MAGIC_CMD" >&6; } ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++fi ++ ++ ++ else ++ MAGIC_CMD=: ++ fi ++fi ++ ++ fi ++ ;; ++esac ++ ++# Use C for the default configuration in the libtool script ++ ++lt_save_CC="$CC" ++ac_ext=c ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_compiler_gnu=$ac_cv_c_compiler_gnu ++ ++ ++# Source file extension for C test sources. ++ac_ext=c ++ ++# Object file extension for compiled C test sources. ++objext=o ++objext=$objext ++ ++# Code to be used in simple compile tests ++lt_simple_compile_test_code="int some_variable = 0;" ++ ++# Code to be used in simple link tests ++lt_simple_link_test_code='int main(){return(0);}' ++ ++ ++ ++ ++ ++ ++ ++# If no C compiler was specified, use CC. ++LTCC=${LTCC-"$CC"} ++ ++# If no C compiler flags were specified, use CFLAGS. ++LTCFLAGS=${LTCFLAGS-"$CFLAGS"} ++ ++# Allow CC to be a program name with arguments. ++compiler=$CC ++ ++# Save the default compiler, since it gets overwritten when the other ++# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. ++compiler_DEFAULT=$CC ++ ++# save warnings/boilerplate of simple test code ++ac_outfile=conftest.$ac_objext ++echo "$lt_simple_compile_test_code" >conftest.$ac_ext ++eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err ++_lt_compiler_boilerplate=`cat conftest.err` ++$RM conftest* ++ ++ac_outfile=conftest.$ac_objext ++echo "$lt_simple_link_test_code" >conftest.$ac_ext ++eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err ++_lt_linker_boilerplate=`cat conftest.err` ++$RM -r conftest* ++ ++ ++## CAVEAT EMPTOR: ++## There is no encapsulation within the following macros, do not change ++## the running order or otherwise move them around unless you know exactly ++## what you are doing... ++if test -n "$compiler"; then ++ ++lt_prog_compiler_no_builtin_flag= ++ ++if test "$GCC" = yes; then ++ case $cc_basename in ++ nvcc*) ++ lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; ++ *) ++ lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; ++ esac ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 ++$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } ++if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_prog_compiler_rtti_exceptions=no ++ ac_outfile=conftest.$ac_objext ++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext ++ lt_compiler_flag="-fno-rtti -fno-exceptions" ++ # Insert the option either (1) after the last *FLAGS variable, or ++ # (2) before a word containing "conftest.", or (3) at the end. ++ # Note that $ac_compile itself does not contain backslashes and begins ++ # with a dollar sign (not a hyphen), so the echo should work correctly. ++ # The option is referenced via a variable to avoid confusing sed. ++ lt_compile=`echo "$ac_compile" | $SED \ ++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ ++ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ ++ -e 's:$: $lt_compiler_flag:'` ++ (eval echo "\"\$as_me:$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* ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 ++$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } ++ ++if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then ++ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" ++else ++ : ++fi ++ ++fi ++ ++ ++ ++ ++ ++ ++ lt_prog_compiler_wl= ++lt_prog_compiler_pic= ++lt_prog_compiler_static= ++ ++ ++ if test "$GCC" = yes; then ++ lt_prog_compiler_wl='-Wl,' ++ lt_prog_compiler_static='-static' ++ ++ case $host_os in ++ aix*) ++ # All AIX code is PIC. ++ if test "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ lt_prog_compiler_static='-Bstatic' ++ fi ++ ;; ++ ++ amigaos*) ++ case $host_cpu in ++ powerpc) ++ # see comment about AmigaOS4 .so support ++ lt_prog_compiler_pic='-fPIC' ++ ;; ++ m68k) ++ # FIXME: we need at least 68020 code to build shared libraries, but ++ # adding the `-m68020' flag to GCC prevents building anything better, ++ # like `-m68040'. ++ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ++ ;; ++ esac ++ ;; ++ ++ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) ++ # PIC is the default for these OSes. ++ ;; ++ ++ mingw* | cygwin* | pw32* | os2* | cegcc*) ++ # This hack is so that the source file can tell whether it is being ++ # built for inclusion in a dll (and should export symbols for example). ++ # Although the cygwin gcc ignores -fPIC, still need this for old-style ++ # (--disable-auto-import) libraries ++ lt_prog_compiler_pic='-DDLL_EXPORT' ++ ;; ++ ++ darwin* | rhapsody*) ++ # PIC is the default on this platform ++ # Common symbols not allowed in MH_DYLIB files ++ lt_prog_compiler_pic='-fno-common' ++ ;; ++ ++ 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 "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ lt_prog_compiler_static='-Bstatic' ++ else ++ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' ++ fi ++ ;; ++ ++ mingw* | cygwin* | pw32* | os2* | cegcc*) ++ # This hack is so that the source file can tell whether it is being ++ # built for inclusion in a dll (and should export symbols for example). ++ lt_prog_compiler_pic='-DDLL_EXPORT' ++ ;; ++ ++ hpux9* | hpux10* | hpux11*) ++ lt_prog_compiler_wl='-Wl,' ++ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but ++ # not for PA HP-UX. ++ case $host_cpu in ++ hppa*64*|ia64*) ++ # +Z the default ++ ;; ++ *) ++ lt_prog_compiler_pic='+Z' ++ ;; ++ esac ++ # Is there a better lt_prog_compiler_static that works with the bundled CC? ++ lt_prog_compiler_static='${wl}-a ${wl}archive' ++ ;; ++ ++ irix5* | irix6* | nonstopux*) ++ lt_prog_compiler_wl='-Wl,' ++ # PIC (with -KPIC) is the default. ++ lt_prog_compiler_static='-non_shared' ++ ;; ++ ++ linux* | k*bsd*-gnu | kopensolaris*-gnu) ++ case $cc_basename in ++ # old Intel for x86_64 which still supported -KPIC. ++ ecc*) ++ lt_prog_compiler_wl='-Wl,' ++ lt_prog_compiler_pic='-KPIC' ++ lt_prog_compiler_static='-static' ++ ;; ++ # icc used to be incompatible with GCC. ++ # ICC 10 doesn't accept -KPIC any more. ++ icc* | ifort*) ++ lt_prog_compiler_wl='-Wl,' ++ lt_prog_compiler_pic='-fPIC' ++ lt_prog_compiler_static='-static' ++ ;; ++ # Lahey Fortran 8.1. ++ lf95*) ++ lt_prog_compiler_wl='-Wl,' ++ lt_prog_compiler_pic='--shared' ++ lt_prog_compiler_static='--static' ++ ;; ++ nagfor*) ++ # NAG Fortran compiler ++ lt_prog_compiler_wl='-Wl,-Wl,,' ++ lt_prog_compiler_pic='-PIC' ++ lt_prog_compiler_static='-Bstatic' ++ ;; ++ 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 which do not support PIC, -DPIC is meaningless: ++ *djgpp*) ++ lt_prog_compiler_pic= ++ ;; ++ *) ++ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ++ ;; ++esac ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 ++$as_echo_n "checking for $compiler option to produce PIC... " >&6; } ++if ${lt_cv_prog_compiler_pic+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_prog_compiler_pic=$lt_prog_compiler_pic ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 ++$as_echo "$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 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 ++$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } ++if ${lt_cv_prog_compiler_pic_works+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_prog_compiler_pic_works=no ++ ac_outfile=conftest.$ac_objext ++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext ++ lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ++ # Insert the option either (1) after the last *FLAGS variable, or ++ # (2) before a word containing "conftest.", or (3) at the end. ++ # Note that $ac_compile itself does not contain backslashes and begins ++ # with a dollar sign (not a hyphen), so the echo should work correctly. ++ # The option is referenced via a variable to avoid confusing sed. ++ lt_compile=`echo "$ac_compile" | $SED \ ++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ ++ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ ++ -e 's:$: $lt_compiler_flag:'` ++ (eval echo "\"\$as_me:$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* ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 ++$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } ++ ++if test x"$lt_cv_prog_compiler_pic_works" = xyes; then ++ case $lt_prog_compiler_pic in ++ "" | " "*) ;; ++ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; ++ esac ++else ++ lt_prog_compiler_pic= ++ lt_prog_compiler_can_build_shared=no ++fi ++ ++fi ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++# ++# Check to make sure the static flag actually works. ++# ++wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 ++$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } ++if ${lt_cv_prog_compiler_static_works+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_prog_compiler_static_works=no ++ save_LDFLAGS="$LDFLAGS" ++ LDFLAGS="$LDFLAGS $lt_tmp_static_flag" ++ echo "$lt_simple_link_test_code" > conftest.$ac_ext ++ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then ++ # The linker can only warn and ignore the option if not recognized ++ # So say no if there are warnings ++ if test -s conftest.err; then ++ # Append any errors to the config.log. ++ cat conftest.err 1>&5 ++ $ECHO "$_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" ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 ++$as_echo "$lt_cv_prog_compiler_static_works" >&6; } ++ ++if test x"$lt_cv_prog_compiler_static_works" = xyes; then ++ : ++else ++ lt_prog_compiler_static= ++fi ++ ++ ++ ++ ++ ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 ++$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } ++if ${lt_cv_prog_compiler_c_o+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_prog_compiler_c_o=no ++ $RM -r conftest 2>/dev/null ++ mkdir conftest ++ cd conftest ++ mkdir out ++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext ++ ++ lt_compiler_flag="-o out/conftest2.$ac_objext" ++ # Insert the option either (1) after the last *FLAGS variable, or ++ # (2) before a word containing "conftest.", or (3) at the end. ++ # Note that $ac_compile itself does not contain backslashes and begins ++ # with a dollar sign (not a hyphen), so the echo should work correctly. ++ lt_compile=`echo "$ac_compile" | $SED \ ++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ ++ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ ++ -e 's:$: $lt_compiler_flag:'` ++ (eval echo "\"\$as_me:$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* ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 ++$as_echo "$lt_cv_prog_compiler_c_o" >&6; } ++ ++ ++ ++ ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 ++$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } ++if ${lt_cv_prog_compiler_c_o+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ lt_cv_prog_compiler_c_o=no ++ $RM -r conftest 2>/dev/null ++ mkdir conftest ++ cd conftest ++ mkdir out ++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext ++ ++ lt_compiler_flag="-o out/conftest2.$ac_objext" ++ # Insert the option either (1) after the last *FLAGS variable, or ++ # (2) before a word containing "conftest.", or (3) at the end. ++ # Note that $ac_compile itself does not contain backslashes and begins ++ # with a dollar sign (not a hyphen), so the echo should work correctly. ++ lt_compile=`echo "$ac_compile" | $SED \ ++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ ++ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ ++ -e 's:$: $lt_compiler_flag:'` ++ (eval echo "\"\$as_me:$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* ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 ++$as_echo "$lt_cv_prog_compiler_c_o" >&6; } ++ ++ ++ ++ ++hard_links="nottested" ++if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then ++ # do not overwrite the value of need_locks provided by the user ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 ++$as_echo_n "checking if we can lock with hard links... " >&6; } ++ hard_links=yes ++ $RM conftest* ++ ln conftest.a conftest.b 2>/dev/null && hard_links=no ++ touch conftest.a ++ ln conftest.a conftest.b 2>&5 || hard_links=no ++ ln conftest.a conftest.b 2>/dev/null && hard_links=no ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 ++$as_echo "$hard_links" >&6; } ++ if test "$hard_links" = no; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 ++$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} ++ need_locks=warn ++ fi ++else ++ need_locks=no ++fi ++ ++ ++ ++ ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 ++$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ++ ++ runpath_var= ++ allow_undefined_flag= ++ always_export_symbols=no ++ archive_cmds= ++ archive_expsym_cmds= ++ compiler_needs_object=no ++ enable_shared_with_static_runtimes=no ++ export_dynamic_flag_spec= ++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ++ hardcode_automatic=no ++ hardcode_direct=no ++ hardcode_direct_absolute=no ++ hardcode_libdir_flag_spec= ++ hardcode_libdir_separator= ++ hardcode_minus_L=no ++ hardcode_shlibpath_var=unsupported ++ inherit_rpath=no ++ link_all_deplibs=unknown ++ module_cmds= ++ module_expsym_cmds= ++ old_archive_from_new_cmds= ++ old_archive_from_expsyms_cmds= ++ thread_safe_flag_spec= ++ whole_archive_flag_spec= ++ # include_expsyms should be a list of space-separated symbols to be *always* ++ # included in the symbol list ++ include_expsyms= ++ # exclude_expsyms can be an extended regexp of symbols to exclude ++ # it will be wrapped by ` (' and `)$', so one must not match beginning or ++ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', ++ # as well as any symbol that contains `d'. ++ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' ++ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out ++ # platforms (ab)use it in PIC code, but their linkers get confused if ++ # the symbol is explicitly referenced. Since portable code cannot ++ # rely on this symbol name, it's probably fine to never include it in ++ # preloaded symbol tables. ++ # Exclude shared library initialization/finalization symbols. ++ extract_expsyms_cmds= ++ ++ case $host_os in ++ cygwin* | mingw* | pw32* | cegcc*) ++ # FIXME: the MSVC++ port hasn't been tested in a loooong time ++ # When not using gcc, we currently assume that we are using ++ # Microsoft Visual C++. ++ if test "$GCC" != yes; then ++ with_gnu_ld=no ++ fi ++ ;; ++ interix*) ++ # we just hope/assume this is gcc and not c89 (= MSVC++) ++ with_gnu_ld=yes ++ ;; ++ openbsd*) ++ with_gnu_ld=no ++ ;; ++ linux* | k*bsd*-gnu | gnu*) ++ link_all_deplibs=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 "$with_gnu_ld" = yes; 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 "$lt_use_gnu_ld_interface" = yes; then ++ # If archive_cmds runs LD, not CC, wlarc should be empty ++ wlarc='${wl}' ++ ++ # Set some defaults for GNU ld with shared library support. These ++ # are reset later if shared libraries are not supported. Putting them ++ # here allows them to be overridden if necessary. ++ runpath_var=LD_RUN_PATH ++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' ++ export_dynamic_flag_spec='${wl}--export-dynamic' ++ # ancient GNU ld didn't support --whole-archive et. al. ++ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then ++ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' ++ else ++ whole_archive_flag_spec= ++ fi ++ supports_anon_versioning=no ++ case `$LD -v 2>&1` in ++ *GNU\ gold*) supports_anon_versioning=yes ;; ++ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 ++ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... ++ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... ++ *\ 2.11.*) ;; # other 2.11 versions ++ *) supports_anon_versioning=yes ;; ++ esac ++ ++ # See if GNU ld supports shared libraries. ++ case $host_os in ++ aix[3-9]*) ++ # On AIX/PPC, the GNU linker is very broken ++ if test "$host_cpu" != ia64; then ++ ld_shlibs=no ++ cat <<_LT_EOF 1>&2 ++ ++*** Warning: the GNU linker, at least up to release 2.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 (1st line ++ # is EXPORTS), use it as is; otherwise, prepend... ++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then ++ cp $export_symbols $output_objdir/$soname.def; ++ else ++ echo EXPORTS > $output_objdir/$soname.def; ++ cat $export_symbols >> $output_objdir/$soname.def; ++ fi~ ++ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' ++ else ++ ld_shlibs=no ++ fi ++ ;; ++ ++ haiku*) ++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ link_all_deplibs=yes ++ ;; ++ ++ interix[3-9]*) ++ hardcode_direct=no ++ hardcode_shlibpath_var=no ++ hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ++ export_dynamic_flag_spec='${wl}-E' ++ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. ++ # Instead, shared libraries are loaded at an image base (0x10000000 by ++ # default) and relocated if they conflict, which is a slow very memory ++ # consuming and fragmenting process. To avoid this, we pick a random, ++ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link ++ # time. Moving up from 0x10000000 also allows more sbrk(2) space. ++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ++ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ++ ;; ++ ++ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) ++ tmp_diet=no ++ if test "$host_os" = linux-dietlibc; then ++ case $cc_basename in ++ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) ++ esac ++ fi ++ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ ++ && test "$tmp_diet" = no ++ then ++ tmp_addflag=' $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' ;; ++ 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 "x$supports_anon_versioning" = xyes; then ++ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ ++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ ++ echo "local: *; };" >> $output_objdir/$libname.ver~ ++ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' ++ fi ++ ++ case $cc_basename in ++ xlf* | 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 "x$supports_anon_versioning" = xyes; then ++ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ ++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ ++ echo "local: *; };" >> $output_objdir/$libname.ver~ ++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' ++ fi ++ ;; ++ esac ++ else ++ ld_shlibs=no ++ fi ++ ;; ++ ++ netbsd* | netbsdelf*-gnu) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then ++ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' ++ wlarc= ++ else ++ archive_cmds='$CC -shared $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 can not ++*** reliably create shared libraries on SCO systems. Therefore, libtool ++*** is disabling shared libraries support. We urge you to upgrade GNU ++*** binutils to release 2.16.91.0.3 or newer. Another option is to modify ++*** your PATH or compiler configuration so that the native linker is ++*** used, and then restart. ++ ++_LT_EOF ++ ;; ++ *) ++ # For security reasons, it is highly recommended that you always ++ # use absolute paths for naming shared libraries, and exclude the ++ # DT_RUNPATH tag from executables and libraries. But doing so ++ # requires that you compile everything twice, which is a pain. ++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' ++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ else ++ ld_shlibs=no ++ fi ++ ;; ++ esac ++ ;; ++ ++ sunos4*) ++ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' ++ wlarc= ++ hardcode_direct=yes ++ hardcode_shlibpath_var=no ++ ;; ++ ++ *) ++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ archive_cmds='$CC -shared $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 "$ld_shlibs" = no; then ++ runpath_var= ++ hardcode_libdir_flag_spec= ++ export_dynamic_flag_spec= ++ whole_archive_flag_spec= ++ fi ++ else ++ # PORTME fill in a description of your system's linker (not GNU ld) ++ case $host_os in ++ aix3*) ++ allow_undefined_flag=unsupported ++ always_export_symbols=yes ++ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' ++ # Note: this linker hardcodes the directories in LIBPATH if there ++ # are no directories specified by -L. ++ hardcode_minus_L=yes ++ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then ++ # Neither direct hardcoding nor static linking is supported with a ++ # broken collect2. ++ hardcode_direct=unsupported ++ fi ++ ;; ++ ++ aix[4-9]*) ++ if test "$host_cpu" = ia64; then ++ # On IA64, the linker does run time linking by default, so we don't ++ # have to do anything special. ++ aix_use_runtimelinking=no ++ exp_sym_flag='-Bexport' ++ no_entry_flag="" ++ else ++ # If we're using GNU nm, then we don't want the "-C" option. ++ # -C means demangle to AIX nm, but means don't demangle with GNU nm ++ # Also, AIX nm treats weak defined symbols like other global ++ # defined symbols, whereas GNU nm marks them as "W". ++ 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) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ else ++ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ fi ++ aix_use_runtimelinking=no ++ ++ # Test if we are trying to use run time linking or normal ++ # AIX style linking. If -brtl is somewhere in LDFLAGS, we ++ # need to do runtime linking. ++ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) ++ for ld_flag in $LDFLAGS; do ++ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then ++ aix_use_runtimelinking=yes ++ break ++ fi ++ done ++ ;; ++ esac ++ ++ exp_sym_flag='-bexport' ++ no_entry_flag='-bnoentry' ++ fi ++ ++ # When large executables or shared objects are built, AIX ld can ++ # have problems creating the table of contents. If linking a library ++ # or program results in "error TOC overflow" add -mminimal-toc to ++ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not ++ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. ++ ++ archive_cmds='' ++ hardcode_direct=yes ++ hardcode_direct_absolute=yes ++ hardcode_libdir_separator=':' ++ link_all_deplibs=yes ++ file_list_spec='${wl}-f,' ++ ++ if test "$GCC" = yes; then ++ case $host_os in aix4.[012]|aix4.[012].*) ++ # We only want to do this on AIX 4.2 and lower, the check ++ # below for broken collect2 doesn't work under 4.3+ ++ collect2name=`${CC} -print-prog-name=collect2` ++ if test -f "$collect2name" && ++ strings "$collect2name" | $GREP resolve_lib_name >/dev/null ++ then ++ # We have reworked collect2 ++ : ++ else ++ # We have old collect2 ++ hardcode_direct=unsupported ++ # It fails to find uninstalled libraries when the uninstalled ++ # path is not listed in the libpath. Setting hardcode_minus_L ++ # to unsupported forces relinking ++ hardcode_minus_L=yes ++ hardcode_libdir_flag_spec='-L$libdir' ++ hardcode_libdir_separator= ++ fi ++ ;; ++ esac ++ shared_flag='-shared' ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag="$shared_flag "'${wl}-G' ++ fi ++ link_all_deplibs=no ++ else ++ # not using gcc ++ if test "$host_cpu" = ia64; then ++ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release ++ # chokes on -Wl,-G. The following line is correct: ++ shared_flag='-G' ++ else ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag='${wl}-G' ++ else ++ shared_flag='${wl}-bM:SRE' ++ fi ++ fi ++ fi ++ ++ export_dynamic_flag_spec='${wl}-bexpall' ++ # It seems that -bexpall does not export symbols beginning with ++ # underscore (_), so it is better to generate a list of symbols to export. ++ always_export_symbols=yes ++ if test "$aix_use_runtimelinking" = yes; then ++ # Warning - without using the other runtime loading flags (-brtl), ++ # -berok will link without error, but may produce a broken library. ++ allow_undefined_flag='-berok' ++ # Determine the default libpath from the value encoded in an ++ # empty executable. ++ if test "${lt_cv_aix_libpath+set}" = set; then ++ aix_libpath=$lt_cv_aix_libpath ++else ++ if ${lt_cv_aix_libpath_+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ++ lt_aix_libpath_sed=' ++ /Import File Strings/,/^$/ { ++ /^0/ { ++ s/^0 *\([^ ]*\) *$/\1/ ++ p ++ } ++ }' ++ 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$ac_exeext conftest.$ac_ext ++ if test -z "$lt_cv_aix_libpath_"; then ++ lt_cv_aix_libpath_="/usr/lib:/lib" ++ fi ++ ++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 "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" ++ else ++ if test "$host_cpu" = ia64; then ++ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' ++ allow_undefined_flag="-z nodefs" ++ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" ++ else ++ # Determine the default libpath from the value encoded in an ++ # empty executable. ++ if test "${lt_cv_aix_libpath+set}" = set; then ++ aix_libpath=$lt_cv_aix_libpath ++else ++ if ${lt_cv_aix_libpath_+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ++ lt_aix_libpath_sed=' ++ /Import File Strings/,/^$/ { ++ /^0/ { ++ s/^0 *\([^ ]*\) *$/\1/ ++ p ++ } ++ }' ++ 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$ac_exeext conftest.$ac_ext ++ if test -z "$lt_cv_aix_libpath_"; then ++ lt_cv_aix_libpath_="/usr/lib:/lib" ++ fi ++ ++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 "$with_gnu_ld" = yes; 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 ++ # This is similar to how AIX traditionally builds its shared libraries. ++ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' ++ fi ++ fi ++ ;; ++ ++ amigaos*) ++ case $host_cpu in ++ powerpc) ++ # see comment about AmigaOS4 .so support ++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ archive_expsym_cmds='' ++ ;; ++ m68k) ++ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' ++ hardcode_libdir_flag_spec='-L$libdir' ++ hardcode_minus_L=yes ++ ;; ++ esac ++ ;; ++ ++ bsdi[45]*) ++ export_dynamic_flag_spec=-rdynamic ++ ;; ++ ++ cygwin* | mingw* | pw32* | cegcc*) ++ # When not using gcc, we currently assume that we are using ++ # Microsoft Visual C++. ++ # hardcode_libdir_flag_spec is actually meaningless, as there is ++ # no search path for DLLs. ++ case $cc_basename in ++ cl*) ++ # Native MSVC ++ 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~linknames=' ++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then ++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; ++ else ++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $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 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 "$lt_cv_ld_force_load" = "yes"; 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*) _lt_dar_can_shared=yes ;; ++ *) _lt_dar_can_shared=$GCC ;; ++ esac ++ if test "$_lt_dar_can_shared" = "yes"; 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*) ++ 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 "$GCC" = yes; 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 $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ else ++ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ fi ++ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' ++ hardcode_libdir_separator=: ++ hardcode_direct=yes ++ ++ # hardcode_minus_L: Not really in the search PATH, ++ # but as the default location of the library. ++ hardcode_minus_L=yes ++ export_dynamic_flag_spec='${wl}-E' ++ ;; ++ ++ hpux10*) ++ if test "$GCC" = yes && test "$with_gnu_ld" = no; 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 "$with_gnu_ld" = no; 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 "$GCC" = yes && test "$with_gnu_ld" = no; then ++ case $host_cpu in ++ hppa*64*) ++ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ ia64*) ++ archive_cmds='$CC -shared $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) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 ++$as_echo_n "checking if $CC understands -b... " >&6; } ++if ${lt_cv_prog_compiler__b+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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" ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 ++$as_echo "$lt_cv_prog_compiler__b" >&6; } ++ ++if test x"$lt_cv_prog_compiler__b" = xyes; 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 "$with_gnu_ld" = no; then ++ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' ++ hardcode_libdir_separator=: ++ ++ case $host_cpu in ++ hppa*64*|ia64*) ++ hardcode_direct=no ++ hardcode_shlibpath_var=no ++ ;; ++ *) ++ hardcode_direct=yes ++ hardcode_direct_absolute=yes ++ export_dynamic_flag_spec='${wl}-E' ++ ++ # hardcode_minus_L: Not really in the search PATH, ++ # but as the default location of the library. ++ hardcode_minus_L=yes ++ ;; ++ esac ++ fi ++ ;; ++ ++ irix5* | irix6* | nonstopux*) ++ if test "$GCC" = yes; then ++ archive_cmds='$CC -shared $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. ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 ++$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } ++if ${lt_cv_irix_exported_symbol+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 ++ lt_cv_irix_exported_symbol=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ LDFLAGS="$save_LDFLAGS" ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 ++$as_echo "$lt_cv_irix_exported_symbol" >&6; } ++ if test "$lt_cv_irix_exported_symbol" = yes; 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 ++ ;; ++ ++ netbsd* | netbsdelf*-gnu) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then ++ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out ++ else ++ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF ++ fi ++ hardcode_libdir_flag_spec='-R$libdir' ++ hardcode_direct=yes ++ hardcode_shlibpath_var=no ++ ;; ++ ++ newsos6) ++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ hardcode_direct=yes ++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' ++ hardcode_libdir_separator=: ++ hardcode_shlibpath_var=no ++ ;; ++ ++ *nto* | *qnx*) ++ ;; ++ ++ openbsd*) ++ if test -f /usr/libexec/ld.so; then ++ hardcode_direct=yes ++ hardcode_shlibpath_var=no ++ hardcode_direct_absolute=yes ++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ++ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' ++ hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ++ export_dynamic_flag_spec='${wl}-E' ++ else ++ case $host_os in ++ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) ++ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' ++ hardcode_libdir_flag_spec='-R$libdir' ++ ;; ++ *) ++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ++ hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ++ ;; ++ esac ++ fi ++ else ++ ld_shlibs=no ++ fi ++ ;; ++ ++ os2*) ++ hardcode_libdir_flag_spec='-L$libdir' ++ hardcode_minus_L=yes ++ allow_undefined_flag=unsupported ++ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' ++ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ++ ;; ++ ++ osf3*) ++ if test "$GCC" = yes; then ++ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' ++ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && 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 "$GCC" = yes; 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 "$GCC" = yes; 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 "$GCC" = yes; then ++ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ++ else ++ whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ++ fi ++ ;; ++ esac ++ link_all_deplibs=yes ++ ;; ++ ++ sunos4*) ++ if test "x$host_vendor" = xsequent; then ++ # Use $CC to link under sequent, because it throws in some extra .o ++ # files that make .init and .fini sections work. ++ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' ++ fi ++ hardcode_libdir_flag_spec='-L$libdir' ++ hardcode_direct=yes ++ hardcode_minus_L=yes ++ hardcode_shlibpath_var=no ++ ;; ++ ++ sysv4) ++ case $host_vendor in ++ sni) ++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ hardcode_direct=yes # is this really true??? ++ ;; ++ siemens) ++ ## LD is ld it makes a PLAMLIB ++ ## CC just makes a GrossModule. ++ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' ++ reload_cmds='$CC -r -o $output$reload_objs' ++ hardcode_direct=no ++ ;; ++ motorola) ++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ hardcode_direct=no #Motorola manual says yes, but my tests say they lie ++ ;; ++ esac ++ runpath_var='LD_RUN_PATH' ++ hardcode_shlibpath_var=no ++ ;; ++ ++ sysv4.3*) ++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ hardcode_shlibpath_var=no ++ export_dynamic_flag_spec='-Bexport' ++ ;; ++ ++ sysv4*MP*) ++ if test -d /usr/nec; then ++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ hardcode_shlibpath_var=no ++ runpath_var=LD_RUN_PATH ++ hardcode_runpath_var=yes ++ ld_shlibs=yes ++ fi ++ ;; ++ ++ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ++ no_undefined_flag='${wl}-z,text' ++ archive_cmds_need_lc=no ++ hardcode_shlibpath_var=no ++ runpath_var='LD_RUN_PATH' ++ ++ if test "$GCC" = yes; then ++ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ fi ++ ;; ++ ++ sysv5* | sco3.2v5* | sco5v6*) ++ # Note: We can NOT use -z defs as we might desire, because we do not ++ # link with -lc, and that would cause any symbols used from libc to ++ # always be unresolved, which means just about no library would ++ # ever link correctly. If we're not using GNU ld we use -z text ++ # though, which does catch some bad symbols but isn't as heavy-handed ++ # as -z defs. ++ no_undefined_flag='${wl}-z,text' ++ allow_undefined_flag='${wl}-z,nodefs' ++ archive_cmds_need_lc=no ++ hardcode_shlibpath_var=no ++ hardcode_libdir_flag_spec='${wl}-R,$libdir' ++ hardcode_libdir_separator=':' ++ link_all_deplibs=yes ++ export_dynamic_flag_spec='${wl}-Bexport' ++ runpath_var='LD_RUN_PATH' ++ ++ if test "$GCC" = yes; then ++ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ fi ++ ;; ++ ++ uts4*) ++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ hardcode_libdir_flag_spec='-L$libdir' ++ hardcode_shlibpath_var=no ++ ;; ++ ++ *) ++ ld_shlibs=no ++ ;; ++ esac ++ ++ if test x$host_vendor = xsni; then ++ case $host in ++ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ++ export_dynamic_flag_spec='${wl}-Blargedynsym' ++ ;; ++ esac ++ fi ++ fi ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 ++$as_echo "$ld_shlibs" >&6; } ++test "$ld_shlibs" = no && can_build_shared=no ++ ++with_gnu_ld=$with_gnu_ld ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++# ++# Do we need to explicitly link libc? ++# ++case "x$archive_cmds_need_lc" in ++x|xyes) ++ # Assume -lc should be added ++ archive_cmds_need_lc=yes ++ ++ if test "$enable_shared" = yes && test "$GCC" = yes; then ++ case $archive_cmds in ++ *'~'*) ++ # FIXME: we may have to deal with multi-command sequences. ++ ;; ++ '$CC '*) ++ # Test whether the compiler implicitly links with -lc since on some ++ # systems, -lgcc has to come before -lc. If gcc already passes -lc ++ # to ld, don't add -lc before -lgcc. ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 ++$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } ++if ${lt_cv_archive_cmds_need_lc+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ $RM conftest* ++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext ++ ++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 ++ (eval $ac_compile) 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } 2>conftest.err; then ++ soname=conftest ++ lib=conftest ++ libobjs=conftest.$ac_objext ++ deplibs= ++ wl=$lt_prog_compiler_wl ++ pic_flag=$lt_prog_compiler_pic ++ compiler_flags=-v ++ linker_flags=-v ++ verstring= ++ output_objdir=. ++ libname=conftest ++ lt_save_allow_undefined_flag=$allow_undefined_flag ++ allow_undefined_flag= ++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 ++ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } ++ then ++ 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* ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 ++$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } ++ archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ++ ;; ++ esac ++ fi ++ ;; ++esac ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 ++$as_echo_n "checking dynamic linker characteristics... " >&6; } ++ ++if test "$GCC" = yes; then ++ case $host_os in ++ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; ++ *) lt_awk_arg="/^libraries:/" ;; ++ esac ++ 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` ++ for lt_sys_path in $lt_search_path_spec; do ++ if test -d "$lt_sys_path/$lt_multi_os_dir"; then ++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" ++ else ++ test -d "$lt_sys_path" && \ ++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" ++ fi ++ done ++ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' ++BEGIN {RS=" "; FS="/|\n";} { ++ lt_foo=""; ++ lt_count=0; ++ for (lt_i = NF; lt_i > 0; lt_i--) { ++ if ($lt_i != "" && $lt_i != ".") { ++ if ($lt_i == "..") { ++ lt_count++; ++ } else { ++ if (lt_count == 0) { ++ lt_foo="/" $lt_i lt_foo; ++ } else { ++ lt_count--; ++ } ++ } ++ } ++ } ++ if (lt_foo != "") { lt_freq[lt_foo]++; } ++ if (lt_freq[lt_foo] == 1) { print lt_foo; } ++}'` ++ # 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 "$host_cpu" = ia64; then ++ # AIX 5 supports IA64 ++ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' ++ shlibpath_var=LD_LIBRARY_PATH ++ else ++ # With GCC up to 2.95.x, collect2 would create an import file ++ # for dependence libraries. The import file would start with ++ # the line `#! .'. This would cause the generated library to ++ # depend on `.', always an invalid library. This was fixed in ++ # development snapshots of GCC prior to 3.0. ++ case $host_os in ++ aix4 | aix4.[01] | aix4.[01].*) ++ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' ++ echo ' yes ' ++ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then ++ : ++ else ++ can_build_shared=no ++ fi ++ ;; ++ esac ++ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct ++ # soname into executable. Probably we can add versioning support to ++ # collect2, so additional links can be useful in future. ++ if test "$aix_use_runtimelinking" = yes; then ++ # If using run time linking (on AIX 4.2 or later) use lib.so ++ # instead of lib.a to let people know that these are not ++ # typical AIX shared libraries. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ else ++ # We preserve .a as extension for shared libraries through AIX4.2 ++ # and later when we are not doing run time linking. ++ library_names_spec='${libname}${release}.a $libname.a' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ fi ++ shlibpath_var=LIBPATH ++ fi ++ ;; ++ ++amigaos*) ++ case $host_cpu in ++ powerpc) ++ # Since July 2007 AmigaOS4 officially supports .so libraries. ++ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ ;; ++ m68k) ++ library_names_spec='$libname.ixlibrary $libname.a' ++ # Create ${libname}_ixlibrary.a entries in /sys/libs. ++ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ++ ;; ++ esac ++ ;; ++ ++beos*) ++ library_names_spec='${libname}${shared_ext}' ++ dynamic_linker="$host_os ld.so" ++ shlibpath_var=LIBRARY_PATH ++ ;; ++ ++bsdi[45]*) ++ version_type=linux # 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*) ++ # Native MSVC ++ 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 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*) ++ # 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} $libname${shared_ext}' ++ need_version=no ++ need_lib_prefix=no ++ ;; ++ freebsd-*) ++ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' ++ need_version=yes ++ ;; ++ esac ++ shlibpath_var=LD_LIBRARY_PATH ++ case $host_os in ++ freebsd2.*) ++ shlibpath_overrides_runpath=yes ++ ;; ++ freebsd3.[01]* | freebsdelf3.[01]*) ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ ;; ++ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ ++ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) ++ shlibpath_overrides_runpath=no ++ hardcode_into_libs=yes ++ ;; ++ *) # from 4.6 on, and DragonFly ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ ;; ++ esac ++ ;; ++ ++gnu*) ++ version_type=linux # 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=no ++ hardcode_into_libs=yes ++ ;; ++ ++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=yes ++ 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 "X$HPUX_IA64_MODE" = X32; then ++ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" ++ else ++ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" ++ fi ++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ++ ;; ++ hppa*64*) ++ shrext_cmds='.sl' ++ hardcode_into_libs=yes ++ dynamic_linker="$host_os dld.sl" ++ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH ++ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" ++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ++ ;; ++ *) ++ shrext_cmds='.sl' ++ dynamic_linker="$host_os dld.sl" ++ shlibpath_var=SHLIB_PATH ++ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ ;; ++ esac ++ # HP-UX runs *really* slowly unless shared libraries are mode 555, ... ++ postinstall_cmds='chmod 555 $lib' ++ # 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 "$lt_cv_prog_gnu_ld" = yes; 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 ++ ;; ++ ++# This must be glibc/ELF. ++linux* | k*bsd*-gnu | kopensolaris*-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 ${lt_cv_shlibpath_overrides_runpath+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ 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 () ++{ ++ ++ ; ++ 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$ac_exeext conftest.$ac_ext ++ LDFLAGS=$save_LDFLAGS ++ libdir=$save_libdir ++ ++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 ++ ++ # Append ld.so.conf contents to the search path ++ if test -f /etc/ld.so.conf; then ++ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` ++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" ++ fi ++ ++ # We used to test for /lib/ld.so.1 and disable shared libraries on ++ # powerpc, because MkLinux only supported shared libraries with the ++ # GNU dynamic linker. Since this was broken with cross compilers, ++ # most powerpc-linux boxes support dynamic linking these days and ++ # people can always --disable-shared, the test was removed, and we ++ # assume the GNU/Linux dynamic linker is in use. ++ dynamic_linker='GNU/Linux ld.so' ++ ;; ++ ++netbsdelf*-gnu) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=no ++ hardcode_into_libs=yes ++ dynamic_linker='NetBSD ld.elf_so' ++ ;; ++ ++netbsd*) ++ version_type=sunos ++ need_lib_prefix=no ++ need_version=no ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' ++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' ++ dynamic_linker='NetBSD (a.out) ld.so' ++ else ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ dynamic_linker='NetBSD ld.elf_so' ++ fi ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ ;; ++ ++newsos6) ++ version_type=linux # 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*) ++ version_type=sunos ++ sys_lib_dlsearch_path_spec="/usr/lib" ++ need_lib_prefix=no ++ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. ++ case $host_os in ++ openbsd3.3 | openbsd3.3.*) need_version=yes ;; ++ *) need_version=no ;; ++ esac ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' ++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' ++ shlibpath_var=LD_LIBRARY_PATH ++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ case $host_os in ++ openbsd2.[89] | openbsd2.[89].*) ++ shlibpath_overrides_runpath=no ++ ;; ++ *) ++ shlibpath_overrides_runpath=yes ++ ;; ++ esac ++ else ++ shlibpath_overrides_runpath=yes ++ fi ++ ;; ++ ++os2*) ++ libname_spec='$name' ++ shrext_cmds=".dll" ++ need_lib_prefix=no ++ library_names_spec='$libname${shared_ext} $libname.a' ++ dynamic_linker='OS/2 ld.exe' ++ shlibpath_var=LIBPATH ++ ;; ++ ++osf3* | osf4* | osf5*) ++ version_type=osf ++ need_lib_prefix=no ++ need_version=no ++ soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ shlibpath_var=LD_LIBRARY_PATH ++ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" ++ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ++ ;; ++ ++rdos*) ++ dynamic_linker=no ++ ;; ++ ++solaris*) ++ version_type=linux # 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 "$with_gnu_ld" = yes; 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=freebsd-elf ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ if test "$with_gnu_ld" = yes; then ++ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' ++ else ++ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' ++ case $host_os in ++ sco3.2v5*) ++ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ++ ;; ++ esac ++ fi ++ sys_lib_dlsearch_path_spec='/usr/lib' ++ ;; ++ ++tpf*) ++ # TPF is a cross-target only. Preferred cross-host = GNU/Linux. ++ version_type=linux # 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 ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 ++$as_echo "$dynamic_linker" >&6; } ++test "$dynamic_linker" = no && can_build_shared=no ++ ++variables_saved_for_relink="PATH $shlibpath_var $runpath_var" ++if test "$GCC" = yes; then ++ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" ++fi ++ ++if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then ++ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" ++fi ++if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then ++ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" ++fi ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 ++$as_echo_n "checking how to hardcode library paths into programs... " >&6; } ++hardcode_action= ++if test -n "$hardcode_libdir_flag_spec" || ++ test -n "$runpath_var" || ++ test "X$hardcode_automatic" = "Xyes" ; then ++ ++ # We can hardcode non-existent directories. ++ if test "$hardcode_direct" != no && ++ # If the only mechanism to avoid hardcoding is shlibpath_var, we ++ # have to relink, otherwise we might link with an installed library ++ # when we should be linking with a yet-to-be-installed one ++ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && ++ test "$hardcode_minus_L" != no; then ++ # Linking always hardcodes the temporary library directory. ++ hardcode_action=relink ++ else ++ # We can link without hardcoding, and we can hardcode nonexisting dirs. ++ hardcode_action=immediate ++ fi ++else ++ # We cannot hardcode anything, or else we can only hardcode existing ++ # directories. ++ hardcode_action=unsupported ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 ++$as_echo "$hardcode_action" >&6; } ++ ++if test "$hardcode_action" = relink || ++ test "$inherit_rpath" = yes; then ++ # Fast installation is not supported ++ enable_fast_install=no ++elif test "$shlibpath_overrides_runpath" = yes || ++ test "$enable_shared" = no; then ++ # Fast installation is not necessary ++ enable_fast_install=needless ++fi ++ ++ ++ ++ ++ ++ ++ if test "x$enable_dlopen" != xyes; then ++ enable_dlopen=unknown ++ enable_dlopen_self=unknown ++ enable_dlopen_self_static=unknown ++else ++ lt_cv_dlopen=no ++ lt_cv_dlopen_libs= ++ ++ case $host_os in ++ beos*) ++ lt_cv_dlopen="load_add_on" ++ lt_cv_dlopen_libs= ++ lt_cv_dlopen_self=yes ++ ;; ++ ++ mingw* | pw32* | cegcc*) ++ lt_cv_dlopen="LoadLibrary" ++ lt_cv_dlopen_libs= ++ ;; ++ ++ cygwin*) ++ lt_cv_dlopen="dlopen" ++ lt_cv_dlopen_libs= ++ ;; ++ ++ darwin*) ++ # if libdl is installed we need to link against it ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 ++$as_echo_n "checking for dlopen in -ldl... " >&6; } ++if ${ac_cv_lib_dl_dlopen+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_check_lib_save_LIBS=$LIBS ++LIBS="-ldl $LIBS" ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char dlopen (); ++int ++main () ++{ ++return dlopen (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_lib_dl_dlopen=yes ++else ++ ac_cv_lib_dl_dlopen=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++LIBS=$ac_check_lib_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 ++$as_echo "$ac_cv_lib_dl_dlopen" >&6; } ++if test "x$ac_cv_lib_dl_dlopen" = xyes; then : ++ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" ++else ++ ++ lt_cv_dlopen="dyld" ++ lt_cv_dlopen_libs= ++ lt_cv_dlopen_self=yes ++ ++fi ++ ++ ;; ++ ++ *) ++ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" ++if test "x$ac_cv_func_shl_load" = xyes; then : ++ lt_cv_dlopen="shl_load" ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 ++$as_echo_n "checking for shl_load in -ldld... " >&6; } ++if ${ac_cv_lib_dld_shl_load+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_check_lib_save_LIBS=$LIBS ++LIBS="-ldld $LIBS" ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char shl_load (); ++int ++main () ++{ ++return shl_load (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_lib_dld_shl_load=yes ++else ++ ac_cv_lib_dld_shl_load=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++LIBS=$ac_check_lib_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 ++$as_echo "$ac_cv_lib_dld_shl_load" >&6; } ++if test "x$ac_cv_lib_dld_shl_load" = xyes; then : ++ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" ++else ++ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" ++if test "x$ac_cv_func_dlopen" = xyes; then : ++ lt_cv_dlopen="dlopen" ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 ++$as_echo_n "checking for dlopen in -ldl... " >&6; } ++if ${ac_cv_lib_dl_dlopen+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_check_lib_save_LIBS=$LIBS ++LIBS="-ldl $LIBS" ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char dlopen (); ++int ++main () ++{ ++return dlopen (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_lib_dl_dlopen=yes ++else ++ ac_cv_lib_dl_dlopen=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++LIBS=$ac_check_lib_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 ++$as_echo "$ac_cv_lib_dl_dlopen" >&6; } ++if test "x$ac_cv_lib_dl_dlopen" = xyes; then : ++ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 ++$as_echo_n "checking for dlopen in -lsvld... " >&6; } ++if ${ac_cv_lib_svld_dlopen+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_check_lib_save_LIBS=$LIBS ++LIBS="-lsvld $LIBS" ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char dlopen (); ++int ++main () ++{ ++return dlopen (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_lib_svld_dlopen=yes ++else ++ ac_cv_lib_svld_dlopen=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++LIBS=$ac_check_lib_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 ++$as_echo "$ac_cv_lib_svld_dlopen" >&6; } ++if test "x$ac_cv_lib_svld_dlopen" = xyes; then : ++ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" ++else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 ++$as_echo_n "checking for dld_link in -ldld... " >&6; } ++if ${ac_cv_lib_dld_dld_link+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_check_lib_save_LIBS=$LIBS ++LIBS="-ldld $LIBS" ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char dld_link (); ++int ++main () ++{ ++return dld_link (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_lib_dld_dld_link=yes ++else ++ ac_cv_lib_dld_dld_link=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++LIBS=$ac_check_lib_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 ++$as_echo "$ac_cv_lib_dld_dld_link" >&6; } ++if test "x$ac_cv_lib_dld_dld_link" = xyes; then : ++ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" ++fi ++ ++ ++fi ++ ++ ++fi ++ ++ ++fi ++ ++ ++fi ++ ++ ++fi ++ ++ ;; ++ esac ++ ++ if test "x$lt_cv_dlopen" != xno; then ++ enable_dlopen=yes ++ else ++ enable_dlopen=no ++ fi ++ ++ case $lt_cv_dlopen in ++ dlopen) ++ save_CPPFLAGS="$CPPFLAGS" ++ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" ++ ++ save_LDFLAGS="$LDFLAGS" ++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" ++ ++ save_LIBS="$LIBS" ++ LIBS="$lt_cv_dlopen_libs $LIBS" ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 ++$as_echo_n "checking whether a program can dlopen itself... " >&6; } ++if ${lt_cv_dlopen_self+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test "$cross_compiling" = yes; then : ++ lt_cv_dlopen_self=cross ++else ++ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 ++ lt_status=$lt_dlunknown ++ cat > conftest.$ac_ext <<_LT_EOF ++#line $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 -fvisbility=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=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then ++ (./conftest; exit; ) >&5 2>/dev/null ++ lt_status=$? ++ case x$lt_status in ++ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; ++ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; ++ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; ++ esac ++ else : ++ # compilation failed ++ lt_cv_dlopen_self=no ++ fi ++fi ++rm -fr conftest* ++ ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 ++$as_echo "$lt_cv_dlopen_self" >&6; } ++ ++ if test "x$lt_cv_dlopen_self" = xyes; then ++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 ++$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } ++if ${lt_cv_dlopen_self_static+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if test "$cross_compiling" = yes; then : ++ lt_cv_dlopen_self_static=cross ++else ++ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 ++ lt_status=$lt_dlunknown ++ cat > conftest.$ac_ext <<_LT_EOF ++#line $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 -fvisbility=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=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then ++ (./conftest; exit; ) >&5 2>/dev/null ++ lt_status=$? ++ case x$lt_status in ++ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; ++ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; ++ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; ++ esac ++ else : ++ # compilation failed ++ lt_cv_dlopen_self_static=no ++ fi ++fi ++rm -fr conftest* ++ ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 ++$as_echo "$lt_cv_dlopen_self_static" >&6; } ++ fi ++ ++ CPPFLAGS="$save_CPPFLAGS" ++ LDFLAGS="$save_LDFLAGS" ++ LIBS="$save_LIBS" ++ ;; ++ esac ++ ++ case $lt_cv_dlopen_self in ++ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; ++ *) enable_dlopen_self=unknown ;; ++ esac ++ ++ case $lt_cv_dlopen_self_static in ++ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; ++ *) enable_dlopen_self_static=unknown ;; ++ esac ++fi ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++striplib= ++old_striplib= ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 ++$as_echo_n "checking whether stripping libraries is possible... " >&6; } ++if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then ++ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" ++ test -z "$striplib" && striplib="$STRIP --strip-unneeded" ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++else ++# FIXME - insert some real tests, host_os isn't really good enough ++ case $host_os in ++ darwin*) ++ if test -n "$STRIP" ; then ++ striplib="$STRIP -x" ++ old_striplib="$STRIP -S" ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ else ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ fi ++ ;; ++ *) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ ;; ++ esac ++fi ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ # Report which library types will actually be built ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 ++$as_echo_n "checking if libtool supports shared libraries... " >&6; } ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 ++$as_echo "$can_build_shared" >&6; } ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 ++$as_echo_n "checking whether to build shared libraries... " >&6; } ++ test "$can_build_shared" = "no" && enable_shared=no ++ ++ # On AIX, shared libraries and static libraries use the same namespace, and ++ # are all built from PIC. ++ case $host_os in ++ aix3*) ++ test "$enable_shared" = yes && enable_static=no ++ if test -n "$RANLIB"; then ++ archive_cmds="$archive_cmds~\$RANLIB \$lib" ++ postinstall_cmds='$RANLIB $lib' ++ fi ++ ;; ++ ++ aix[4-9]*) ++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then ++ test "$enable_shared" = yes && enable_static=no ++ fi ++ ;; ++ esac ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 ++$as_echo "$enable_shared" >&6; } ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 ++$as_echo_n "checking whether to build static libraries... " >&6; } ++ # Make sure either enable_shared or enable_static is yes. ++ test "$enable_shared" = yes || enable_static=yes ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 ++$as_echo "$enable_static" >&6; } ++ ++ ++ ++ ++fi ++ac_ext=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: ++ ++ ++ ++ ++# Checks for header files. ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 ++$as_echo_n "checking for ANSI C header files... " >&6; } ++if ${ac_cv_header_stdc+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++#include ++#include ++#include ++ ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_header_stdc=yes ++else ++ ac_cv_header_stdc=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ++if test $ac_cv_header_stdc = yes; then ++ # SunOS 4.x string.h does not declare mem*, contrary to ANSI. ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++ ++_ACEOF ++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ++ $EGREP "memchr" >/dev/null 2>&1; then : ++ ++else ++ ac_cv_header_stdc=no ++fi ++rm -f conftest* ++ ++fi ++ ++if test $ac_cv_header_stdc = yes; then ++ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++ ++_ACEOF ++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ++ $EGREP "free" >/dev/null 2>&1; then : ++ ++else ++ ac_cv_header_stdc=no ++fi ++rm -f conftest* ++ ++fi ++ ++if test $ac_cv_header_stdc = yes; then ++ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. ++ if test "$cross_compiling" = yes; then : ++ : ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++#include ++#if ((' ' & 0x0FF) == 0x020) ++# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') ++# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) ++#else ++# define ISLOWER(c) \ ++ (('a' <= (c) && (c) <= 'i') \ ++ || ('j' <= (c) && (c) <= 'r') \ ++ || ('s' <= (c) && (c) <= 'z')) ++# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) ++#endif ++ ++#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) ++int ++main () ++{ ++ int i; ++ for (i = 0; i < 256; i++) ++ if (XOR (islower (i), ISLOWER (i)) ++ || toupper (i) != TOUPPER (i)) ++ return 2; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_run "$LINENO"; then : ++ ++else ++ ac_cv_header_stdc=no ++fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ ++ conftest.$ac_objext conftest.beam conftest.$ac_ext ++fi ++ ++fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 ++$as_echo "$ac_cv_header_stdc" >&6; } ++if test $ac_cv_header_stdc = yes; then ++ ++$as_echo "#define STDC_HEADERS 1" >>confdefs.h ++ ++fi ++ ++for ac_header in ctype.h limits.h stdlib.h wctype.h ++do : ++ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ++ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" ++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : ++ cat >>confdefs.h <<_ACEOF ++#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 ++_ACEOF ++ ++fi ++ ++done ++ ++ ++# Checks for typedefs, structures, and compiler characteristics. ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 ++$as_echo_n "checking for an ANSI C-conforming const... " >&6; } ++if ${ac_cv_c_const+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++int ++main () ++{ ++/* FIXME: Include the comments suggested by Paul. */ ++#ifndef __cplusplus ++ /* Ultrix mips cc rejects this. */ ++ typedef int charset[2]; ++ const charset cs; ++ /* SunOS 4.1.1 cc rejects this. */ ++ char const *const *pcpcc; ++ char **ppc; ++ /* NEC SVR4.0.2 mips cc rejects this. */ ++ struct point {int x, y;}; ++ static struct point const zero = {0,0}; ++ /* AIX XL C 1.02.0.0 rejects this. ++ It does not let you subtract one const X* pointer from another in ++ an arm of an if-expression whose if-part is not a constant ++ expression */ ++ const char *g = "string"; ++ pcpcc = &g + (g ? g-g : 0); ++ /* HPUX 7.0 cc rejects these. */ ++ ++pcpcc; ++ ppc = (char**) pcpcc; ++ pcpcc = (char const *const *) ppc; ++ { /* SCO 3.2v4 cc rejects this. */ ++ char *t; ++ char const *s = 0 ? (char *) 0 : (char const *) 0; ++ ++ *t++ = 0; ++ if (s) return 0; ++ } ++ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ ++ int x[] = {25, 17}; ++ const int *foo = &x[0]; ++ ++foo; ++ } ++ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ ++ typedef const int *iptr; ++ iptr p = 0; ++ ++p; ++ } ++ { /* AIX XL C 1.02.0.0 rejects this saying ++ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ ++ struct s { int j; const int *ap[3]; }; ++ struct s *b; b->j = 5; ++ } ++ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ ++ const int foo = 10; ++ if (!foo) return 0; ++ } ++ return !cs[0] && !zero.x; ++#endif ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_c_const=yes ++else ++ ac_cv_c_const=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 ++$as_echo "$ac_cv_c_const" >&6; } ++if test $ac_cv_c_const = no; then ++ ++$as_echo "#define const /**/" >>confdefs.h ++ ++fi ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 ++$as_echo_n "checking for inline... " >&6; } ++if ${ac_cv_c_inline+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_cv_c_inline=no ++for ac_kw in inline __inline__ __inline; do ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#ifndef __cplusplus ++typedef int foo_t; ++static $ac_kw foo_t static_foo () {return 0; } ++$ac_kw foo_t foo () {return 0; } ++#endif ++ ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_c_inline=$ac_kw ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ test "$ac_cv_c_inline" != no && break ++done ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 ++$as_echo "$ac_cv_c_inline" >&6; } ++ ++case $ac_cv_c_inline in ++ inline | yes) ;; ++ *) ++ case $ac_cv_c_inline in ++ no) ac_val=;; ++ *) ac_val=$ac_cv_c_inline;; ++ esac ++ cat >>confdefs.h <<_ACEOF ++#ifndef __cplusplus ++#define inline $ac_val ++#endif ++_ACEOF ++ ;; ++esac ++ ++ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" ++if test "x$ac_cv_type_mode_t" = xyes; then : ++ ++else ++ ++cat >>confdefs.h <<_ACEOF ++#define mode_t int ++_ACEOF ++ ++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 ++ ++cat >>confdefs.h <<_ACEOF ++#define off_t long int ++_ACEOF ++ ++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 ++ ++cat >>confdefs.h <<_ACEOF ++#define size_t unsigned int ++_ACEOF ++ ++fi ++ ++# The cast to long int works around a bug in the HP C Compiler ++# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects ++# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. ++# This bug is HP SR number 8606223364. ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 ++$as_echo_n "checking size of off_t... " >&6; } ++if ${ac_cv_sizeof_off_t+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"; then : ++ ++else ++ if test "$ac_cv_type_off_t" = yes; then ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error 77 "cannot compute sizeof (off_t) ++See \`config.log' for more details" "$LINENO" 5; } ++ else ++ ac_cv_sizeof_off_t=0 ++ fi ++fi ++ ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 ++$as_echo "$ac_cv_sizeof_off_t" >&6; } ++ ++ ++ ++cat >>confdefs.h <<_ACEOF ++#define SIZEOF_OFF_T $ac_cv_sizeof_off_t ++_ACEOF ++ ++ ++for ac_func in tolower towlower ++do : ++ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ++ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" ++if eval test \"x\$"$as_ac_var"\" = x"yes"; then : ++ cat >>confdefs.h <<_ACEOF ++#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 ++_ACEOF ++ ++fi ++done ++ ++ ++# largefile support ++# Check whether --enable-largefile was given. ++if test "${enable_largefile+set}" = set; then : ++ enableval=$enable_largefile; ++fi ++ ++if test "$enable_largefile" != no; then ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 ++$as_echo_n "checking for special C compiler options needed for large files... " >&6; } ++if ${ac_cv_sys_largefile_CC+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_cv_sys_largefile_CC=no ++ if test "$GCC" != yes; then ++ ac_save_CC=$CC ++ while :; do ++ # IRIX 6.2 and later do not support large files by default, ++ # so use the C compiler's -n32 option if that helps. ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++ /* Check that off_t can represent 2**63 - 1 correctly. ++ We can't simply define LARGE_OFF_T to be 9223372036854775807, ++ since some C++ compilers masquerading as C compilers ++ incorrectly reject 9223372036854775807. */ ++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) ++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 ++ && LARGE_OFF_T % 2147483647 == 1) ++ ? 1 : -1]; ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++ if ac_fn_c_try_compile "$LINENO"; then : ++ break ++fi ++rm -f core conftest.err conftest.$ac_objext ++ CC="$CC -n32" ++ if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_sys_largefile_CC=' -n32'; break ++fi ++rm -f core conftest.err conftest.$ac_objext ++ break ++ done ++ CC=$ac_save_CC ++ rm -f conftest.$ac_ext ++ fi ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 ++$as_echo "$ac_cv_sys_largefile_CC" >&6; } ++ if test "$ac_cv_sys_largefile_CC" != no; then ++ CC=$CC$ac_cv_sys_largefile_CC ++ fi ++ ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 ++$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } ++if ${ac_cv_sys_file_offset_bits+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ while :; do ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++ /* Check that off_t can represent 2**63 - 1 correctly. ++ We can't simply define LARGE_OFF_T to be 9223372036854775807, ++ since some C++ compilers masquerading as C compilers ++ incorrectly reject 9223372036854775807. */ ++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) ++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 ++ && LARGE_OFF_T % 2147483647 == 1) ++ ? 1 : -1]; ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_sys_file_offset_bits=no; break ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#define _FILE_OFFSET_BITS 64 ++#include ++ /* Check that off_t can represent 2**63 - 1 correctly. ++ We can't simply define LARGE_OFF_T to be 9223372036854775807, ++ since some C++ compilers masquerading as C compilers ++ incorrectly reject 9223372036854775807. */ ++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) ++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 ++ && LARGE_OFF_T % 2147483647 == 1) ++ ? 1 : -1]; ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_sys_file_offset_bits=64; break ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_cv_sys_file_offset_bits=unknown ++ break ++done ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 ++$as_echo "$ac_cv_sys_file_offset_bits" >&6; } ++case $ac_cv_sys_file_offset_bits in #( ++ no | unknown) ;; ++ *) ++cat >>confdefs.h <<_ACEOF ++#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits ++_ACEOF ++;; ++esac ++rm -rf conftest* ++ if test $ac_cv_sys_file_offset_bits = unknown; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 ++$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } ++if ${ac_cv_sys_large_files+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ while :; do ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++ /* Check that off_t can represent 2**63 - 1 correctly. ++ We can't simply define LARGE_OFF_T to be 9223372036854775807, ++ since some C++ compilers masquerading as C compilers ++ incorrectly reject 9223372036854775807. */ ++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) ++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 ++ && LARGE_OFF_T % 2147483647 == 1) ++ ? 1 : -1]; ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_sys_large_files=no; break ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#define _LARGE_FILES 1 ++#include ++ /* Check that off_t can represent 2**63 - 1 correctly. ++ We can't simply define LARGE_OFF_T to be 9223372036854775807, ++ since some C++ compilers masquerading as C compilers ++ incorrectly reject 9223372036854775807. */ ++#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) ++ int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 ++ && LARGE_OFF_T % 2147483647 == 1) ++ ? 1 : -1]; ++int ++main () ++{ ++ ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ ac_cv_sys_large_files=1; break ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ ac_cv_sys_large_files=unknown ++ break ++done ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 ++$as_echo "$ac_cv_sys_large_files" >&6; } ++case $ac_cv_sys_large_files in #( ++ no | unknown) ;; ++ *) ++cat >>confdefs.h <<_ACEOF ++#define _LARGE_FILES $ac_cv_sys_large_files ++_ACEOF ++;; ++esac ++rm -rf conftest* ++ fi ++fi ++ ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 ++$as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } ++if ${ac_cv_sys_largefile_source+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ while :; do ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include /* for off_t */ ++ #include ++int ++main () ++{ ++int (*fp) (FILE *, off_t, int) = fseeko; ++ return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_sys_largefile_source=no; break ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#define _LARGEFILE_SOURCE 1 ++#include /* for off_t */ ++ #include ++int ++main () ++{ ++int (*fp) (FILE *, off_t, int) = fseeko; ++ return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_sys_largefile_source=1; break ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++ ac_cv_sys_largefile_source=unknown ++ break ++done ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 ++$as_echo "$ac_cv_sys_largefile_source" >&6; } ++case $ac_cv_sys_largefile_source in #( ++ no | unknown) ;; ++ *) ++cat >>confdefs.h <<_ACEOF ++#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source ++_ACEOF ++;; ++esac ++rm -rf conftest* ++ ++# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug ++# in glibc 2.1.3, but that breaks too many other things. ++# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. ++if test $ac_cv_sys_largefile_source != unknown; then ++ ++$as_echo "#define HAVE_FSEEKO 1" >>confdefs.h ++ ++fi ++ ++ ++# Checks for library functions. ++ac_config_files="$ac_config_files Makefile doc/Makefile doc/Doxyfile libmspack.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_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 ++$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ++ esac ++ case $ac_var in #( ++ _ | IFS | as_nl) ;; #( ++ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( ++ *) { eval $ac_var=; unset $ac_var;} ;; ++ esac ;; ++ esac ++ done ++ ++ (set) 2>&1 | ++ case $as_nl`(ac_space=' '; set) 2>&1` in #( ++ *${as_nl}ac_space=\ *) ++ # `set' does not quote correctly, so add quotes: double-quote ++ # substitution turns \\\\ into \\, and sed turns \\ into \. ++ sed -n \ ++ "s/'/'\\\\''/g; ++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ++ ;; #( ++ *) ++ # `set' quotes correctly as required by POSIX, so do not add quotes. ++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ++ ;; ++ esac | ++ sort ++) | ++ sed ' ++ /^ac_cv_env_/b end ++ t clear ++ :clear ++ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ ++ t end ++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ ++ :end' >>confcache ++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else ++ if test -w "$cache_file"; then ++ if test "x$cache_file" != "x/dev/null"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 ++$as_echo "$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 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 ++$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} ++ fi ++fi ++rm -f confcache ++ ++test "x$prefix" = xNONE && prefix=$ac_default_prefix ++# Let make expand exec_prefix. ++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' ++ ++DEFS=-DHAVE_CONFIG_H ++ ++ac_libobjs= ++ac_ltlibobjs= ++U= ++for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue ++ # 1. Remove the extension, and $U if already installed. ++ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ++ ac_i=`$as_echo "$ac_i" | sed "$ac_script"` ++ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR ++ # will be set to the directory where LIBOBJS objects are built. ++ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" ++ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' ++done ++LIBOBJS=$ac_libobjs ++ ++LTLIBOBJS=$ac_ltlibobjs ++ ++ ++ if test -n "$EXEEXT"; then ++ am__EXEEXT_TRUE= ++ am__EXEEXT_FALSE='#' ++else ++ am__EXEEXT_TRUE='#' ++ am__EXEEXT_FALSE= ++fi ++ ++if test -z "${DEBUG_TRUE}" && test -z "${DEBUG_FALSE}"; then ++ as_fn_error $? "conditional \"DEBUG\" 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 ++if test -z "${GCC_TRUE}" && test -z "${GCC_FALSE}"; then ++ as_fn_error $? "conditional \"GCC\" was never defined. ++Usually this means the macro was only invoked conditionally." "$LINENO" 5 ++fi ++ ++: "${CONFIG_STATUS=./config.status}" ++ac_write_fail=0 ++ac_clean_files_save=$ac_clean_files ++ac_clean_files="$ac_clean_files $CONFIG_STATUS" ++{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 ++$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} ++as_write_fail=0 ++cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 ++#! $SHELL ++# Generated by $as_me. ++# Run this file to recreate the current configuration. ++# Compiler output produced by configure, useful for debugging ++# configure, is in config.log if it exists. ++ ++debug=false ++ac_cs_recheck=false ++ac_cs_silent=false ++ ++SHELL=\${CONFIG_SHELL-$SHELL} ++export SHELL ++_ASEOF ++cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ++## -------------------- ## ++## M4sh Initialization. ## ++## -------------------- ## ++ ++# Be more Bourne compatible ++DUALCASE=1; export DUALCASE # for MKS sh ++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : ++ emulate sh ++ NULLCMD=: ++ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which ++ # is contrary to our usage. Disable this feature. ++ alias -g '${1+"$@"}'='"$@"' ++ setopt NO_GLOB_SUBST ++else ++ case `(set -o) 2>/dev/null` in #( ++ *posix*) : ++ set -o posix ;; #( ++ *) : ++ ;; ++esac ++fi ++ ++ ++as_nl=' ++' ++export as_nl ++# Printing a long string crashes Solaris 7 /usr/bin/printf. ++as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo ++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo ++# Prefer a ksh shell builtin over an external printf program on Solaris, ++# but without wasting forks for bash or zsh. ++if test -z "$BASH_VERSION$ZSH_VERSION" \ ++ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then ++ as_echo='print -r --' ++ as_echo_n='print -rn --' ++elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then ++ as_echo='printf %s\n' ++ as_echo_n='printf %s' ++else ++ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then ++ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' ++ as_echo_n='/usr/ucb/echo -n' ++ else ++ as_echo_body='eval expr "X$1" : "X\\(.*\\)"' ++ as_echo_n_body='eval ++ arg=$1; ++ case $arg in #( ++ *"$as_nl"*) ++ expr "X$arg" : "X\\(.*\\)$as_nl"; ++ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; ++ esac; ++ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ++ ' ++ export as_echo_n_body ++ as_echo_n='sh -c $as_echo_n_body as_echo' ++ fi ++ export as_echo_body ++ as_echo='sh -c $as_echo_body as_echo' ++fi ++ ++# The user is always right. ++if test "${PATH_SEPARATOR+set}" != set; then ++ PATH_SEPARATOR=: ++ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { ++ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || ++ PATH_SEPARATOR=';' ++ } ++fi ++ ++ ++# IFS ++# We need space, tab and new line, in precisely that order. Quoting is ++# there to prevent editors from complaining about space-tab. ++# (If _AS_PATH_WALK were called with IFS unset, it would disable word ++# splitting by setting IFS to empty value.) ++IFS=" "" $as_nl" ++ ++# Find who we are. Look in the path if we contain no directory separator. ++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 ++ test -z "$as_dir" && as_dir=. ++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break ++ done ++IFS=$as_save_IFS ++ ++ ;; ++esac ++# We did not find ourselves, most probably we were run as `sh COMMAND' ++# in which case we are not to be found in the path. ++if test "x$as_myself" = x; then ++ as_myself=$0 ++fi ++if test ! -f "$as_myself"; then ++ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 ++ exit 1 ++fi ++ ++# Unset variables that we do not need and which cause bugs (e.g. in ++# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" ++# suppresses any "Segmentation fault" message there. '((' could ++# trigger a bug in pdksh 5.2.14. ++for as_var in BASH_ENV ENV MAIL MAILPATH ++do eval test x\${$as_var+set} = xset \ ++ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : ++done ++PS1='$ ' ++PS2='> ' ++PS4='+ ' ++ ++# NLS nuisances. ++LC_ALL=C ++export LC_ALL ++LANGUAGE=C ++export LANGUAGE ++ ++# CDPATH. ++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH ++ ++ ++# as_fn_error STATUS ERROR [LINENO LOG_FD] ++# ---------------------------------------- ++# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are ++# provided, also output the error to LOG_FD, referencing LINENO. Then exit the ++# script with STATUS, using 1 if that was 0. ++as_fn_error () ++{ ++ as_status=$1; test $as_status -eq 0 && as_status=1 ++ if test "$4"; then ++ as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack ++ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 ++ fi ++ $as_echo "$as_me: error: $2" >&2 ++ as_fn_exit $as_status ++} # as_fn_error ++ ++ ++# as_fn_set_status STATUS ++# ----------------------- ++# Set $? to STATUS, without forking. ++as_fn_set_status () ++{ ++ return $1 ++} # as_fn_set_status ++ ++# as_fn_exit STATUS ++# ----------------- ++# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. ++as_fn_exit () ++{ ++ set +e ++ as_fn_set_status $1 ++ exit $1 ++} # as_fn_exit ++ ++# as_fn_unset VAR ++# --------------- ++# Portably unset VAR. ++as_fn_unset () ++{ ++ { eval $1=; unset $1;} ++} ++as_unset=as_fn_unset ++# as_fn_append VAR VALUE ++# ---------------------- ++# Append the text in VALUE to the end of the definition contained in VAR. Take ++# advantage of any shell optimizations that allow amortized linear growth over ++# repeated appends, instead of the typical quadratic growth present in naive ++# implementations. ++if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : ++ eval 'as_fn_append () ++ { ++ eval $1+=\$2 ++ }' ++else ++ as_fn_append () ++ { ++ eval $1=\$$1\$2 ++ } ++fi # as_fn_append ++ ++# as_fn_arith ARG... ++# ------------------ ++# Perform arithmetic evaluation on the ARGs, and store the result in the ++# global $as_val. Take advantage of shells that can avoid forks. The arguments ++# must be portable across $(()) and expr. ++if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : ++ eval 'as_fn_arith () ++ { ++ as_val=$(( $* )) ++ }' ++else ++ as_fn_arith () ++ { ++ as_val=`expr "$@" || test $? -eq 1` ++ } ++fi # as_fn_arith ++ ++ ++if expr a : '\(a\)' >/dev/null 2>&1 && ++ test "X`expr 00001 : '.*\(...\)'`" = X001; then ++ as_expr=expr ++else ++ as_expr=false ++fi ++ ++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then ++ as_basename=basename ++else ++ as_basename=false ++fi ++ ++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then ++ as_dirname=dirname ++else ++ as_dirname=false ++fi ++ ++as_me=`$as_basename -- "$0" || ++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ ++ X"$0" : 'X\(//\)$' \| \ ++ X"$0" : 'X\(/\)' \| . 2>/dev/null || ++$as_echo X/"$0" | ++ sed '/^.*\/\([^/][^/]*\)\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\/\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ ++# Avoid depending upon Character Ranges. ++as_cr_letters='abcdefghijklmnopqrstuvwxyz' ++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' ++as_cr_Letters=$as_cr_letters$as_cr_LETTERS ++as_cr_digits='0123456789' ++as_cr_alnum=$as_cr_Letters$as_cr_digits ++ ++ECHO_C= ECHO_N= ECHO_T= ++case `echo -n x` in #((((( ++-n*) ++ case `echo 'xy\c'` in ++ *c*) ECHO_T=' ';; # ECHO_T is single tab character. ++ xy) ECHO_C='\c';; ++ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ++ ECHO_T=' ';; ++ esac;; ++*) ++ ECHO_N='-n';; ++esac ++ ++rm -f conf$$ conf$$.exe conf$$.file ++if test -d conf$$.dir; then ++ rm -f conf$$.dir/conf$$.file ++else ++ rm -f conf$$.dir ++ mkdir conf$$.dir 2>/dev/null ++fi ++if (echo >conf$$.file) 2>/dev/null; then ++ if ln -s conf$$.file conf$$ 2>/dev/null; then ++ as_ln_s='ln -s' ++ # ... but there are two gotchas: ++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. ++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. ++ # In both cases, we have to default to `cp -p'. ++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || ++ as_ln_s='cp -p' ++ elif ln conf$$.file conf$$ 2>/dev/null; then ++ as_ln_s=ln ++ else ++ as_ln_s='cp -p' ++ fi ++else ++ as_ln_s='cp -p' ++fi ++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file ++rmdir conf$$.dir 2>/dev/null ++ ++ ++# as_fn_mkdir_p ++# ------------- ++# Create "$as_dir" as a directory, including parents if necessary. ++as_fn_mkdir_p () ++{ ++ ++ case $as_dir in #( ++ -*) as_dir=./$as_dir;; ++ esac ++ test -d "$as_dir" || eval $as_mkdir_p || { ++ as_dirs= ++ while :; do ++ case $as_dir in #( ++ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( ++ *) as_qdir=$as_dir;; ++ esac ++ as_dirs="'$as_qdir' $as_dirs" ++ as_dir=`$as_dirname -- "$as_dir" || ++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ ++ X"$as_dir" : 'X\(//\)[^/]' \| \ ++ X"$as_dir" : 'X\(//\)$' \| \ ++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || ++$as_echo X"$as_dir" | ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ test -d "$as_dir" && break ++ done ++ test -z "$as_dirs" || eval "mkdir $as_dirs" ++ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" ++ ++ ++} # as_fn_mkdir_p ++if mkdir -p . 2>/dev/null; then ++ as_mkdir_p='mkdir -p "$as_dir"' ++else ++ test -d ./-p && rmdir ./-p ++ as_mkdir_p=false ++fi ++ ++if test -x / >/dev/null 2>&1; then ++ as_test_x='test -x' ++else ++ if ls -dL / >/dev/null 2>&1; then ++ as_ls_L_option=L ++ else ++ as_ls_L_option= ++ fi ++ as_test_x=' ++ eval sh -c '\'' ++ if test -d "$1"; then ++ test -d "$1/."; ++ else ++ case $1 in #( ++ -*)set "./$1";; ++ esac; ++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ++ ???[sx]*):;;*)false;;esac;fi ++ '\'' sh ++ ' ++fi ++as_executable_p=$as_test_x ++ ++# Sed expression to map a string onto a valid CPP name. ++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" ++ ++# Sed expression to map a string onto a valid variable name. ++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" ++ ++ ++exec 6>&1 ++## ----------------------------------- ## ++## Main body of $CONFIG_STATUS script. ## ++## ----------------------------------- ## ++_ASEOF ++test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 ++ ++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ++# Save the log message, to keep $0 and so on meaningful, and to ++# report actual input values of CONFIG_FILES etc. instead of their ++# values after options handling. ++ac_log=" ++This file was extended by libmspack $as_me 0.4alpha, which was ++generated by GNU Autoconf 2.68. 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 ++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ++ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ++ac_cs_version="\\ ++libmspack config.status 0.4alpha ++configured by $0, generated by GNU Autoconf 2.68, ++ with options \\"\$ac_cs_config\\" ++ ++Copyright (C) 2010 Free Software Foundation, Inc. ++This config.status script is free software; the Free Software Foundation ++gives unlimited permission to copy, distribute and modify it." ++ ++ac_pwd='$ac_pwd' ++srcdir='$srcdir' ++INSTALL='$INSTALL' ++MKDIR_P='$MKDIR_P' ++AWK='$AWK' ++test -n "\$AWK" || AWK=awk ++_ACEOF ++ ++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ++# The default lists apply if the user does not specify any file. ++ac_need_defaults=: ++while test $# != 0 ++do ++ case $1 in ++ --*=?*) ++ ac_option=`expr "X$1" : 'X\([^=]*\)='` ++ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ++ ac_shift=: ++ ;; ++ --*=) ++ ac_option=`expr "X$1" : 'X\([^=]*\)='` ++ ac_optarg= ++ ac_shift=: ++ ;; ++ *) ++ ac_option=$1 ++ ac_optarg=$2 ++ ac_shift=shift ++ ;; ++ esac ++ ++ case $ac_option in ++ # Handling of the options. ++ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ++ ac_cs_recheck=: ;; ++ --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) ++ $as_echo "$ac_cs_version"; exit ;; ++ --config | --confi | --conf | --con | --co | --c ) ++ $as_echo "$ac_cs_config"; exit ;; ++ --debug | --debu | --deb | --de | --d | -d ) ++ debug=: ;; ++ --file | --fil | --fi | --f ) ++ $ac_shift ++ case $ac_optarg in ++ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; ++ '') as_fn_error $? "missing file argument" ;; ++ esac ++ as_fn_append CONFIG_FILES " '$ac_optarg'" ++ ac_need_defaults=false;; ++ --header | --heade | --head | --hea ) ++ $ac_shift ++ case $ac_optarg in ++ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; ++ esac ++ as_fn_append CONFIG_HEADERS " '$ac_optarg'" ++ ac_need_defaults=false;; ++ --he | --h) ++ # Conflict between --help and --header ++ as_fn_error $? "ambiguous option: \`$1' ++Try \`$0 --help' for more information.";; ++ --help | --hel | -h ) ++ $as_echo "$ac_cs_usage"; exit ;; ++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \ ++ | -silent | --silent | --silen | --sile | --sil | --si | --s) ++ ac_cs_silent=: ;; ++ ++ # This is an error. ++ -*) as_fn_error $? "unrecognized option: \`$1' ++Try \`$0 --help' for more information." ;; ++ ++ *) as_fn_append ac_config_targets " $1" ++ ac_need_defaults=false ;; ++ ++ esac ++ shift ++done ++ ++ac_configure_extra_args= ++ ++if $ac_cs_silent; then ++ exec 6>/dev/null ++ ac_configure_extra_args="$ac_configure_extra_args --silent" ++fi ++ ++_ACEOF ++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ++if \$ac_cs_recheck; then ++ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion ++ shift ++ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 ++ CONFIG_SHELL='$SHELL' ++ export CONFIG_SHELL ++ exec "\$@" ++fi ++ ++_ACEOF ++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ++exec 5>>config.log ++{ ++ echo ++ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ++## Running $as_me. ## ++_ASBOX ++ $as_echo "$ac_log" ++} >&5 ++ ++_ACEOF ++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ++# ++# INIT-COMMANDS ++# ++AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" ++ ++ ++# The HP-UX ksh and POSIX shell print the target directory to stdout ++# if CDPATH is set. ++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH ++ ++sed_quote_subst='$sed_quote_subst' ++double_quote_subst='$double_quote_subst' ++delay_variable_subst='$delay_variable_subst' ++macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' ++macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' ++enable_shared='`$ECHO "$enable_shared" | $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_fast_install='`$ECHO "$enable_fast_install" | $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"`' ++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"`' ++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_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"`' ++nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' ++lt_sysroot='`$ECHO "$lt_sysroot" | $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"`' ++sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $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 \ ++OBJDUMP \ ++deplibs_check_method \ ++file_magic_cmd \ ++file_magic_glob \ ++want_nocaseglob \ ++DLLTOOL \ ++sharedlib_from_linklib_cmd \ ++AR \ ++AR_FLAGS \ ++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_c_name_address \ ++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ ++nm_file_list_spec \ ++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\\"\\\`\\\\\\"" ++ ;; ++ *) ++ 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 \ ++sys_lib_dlsearch_path_spec; do ++ case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in ++ *[\\\\\\\`\\"\\\$]*) ++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ++ ;; ++ *) ++ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ++ ;; ++ esac ++done ++ ++ac_aux_dir='$ac_aux_dir' ++xsi_shell='$xsi_shell' ++lt_shell_append='$lt_shell_append' ++ ++# See if we are running on zsh, and set the options which allow our ++# commands through without removal of \ escapes INIT. ++if test -n "\${ZSH_VERSION+set}" ; then ++ setopt NO_GLOB_SUBST ++fi ++ ++ ++ PACKAGE='$PACKAGE' ++ VERSION='$VERSION' ++ TIMESTAMP='$TIMESTAMP' ++ RM='$RM' ++ ofile='$ofile' ++ ++ ++ ++ ++_ACEOF ++ ++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ++ ++# Handling of arguments. ++for ac_config_target in $ac_config_targets ++do ++ case $ac_config_target in ++ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; ++ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; ++ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; ++ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; ++ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; ++ "doc/Doxyfile") CONFIG_FILES="$CONFIG_FILES doc/Doxyfile" ;; ++ "libmspack.pc") CONFIG_FILES="$CONFIG_FILES libmspack.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+set}" = set || CONFIG_FILES=$config_files ++ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers ++ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands ++fi ++ ++# Have a temporary directory for convenience. Make it in the build tree ++# simply because there is no reason against having it here, and in addition, ++# creating and moving files from /tmp can sometimes cause problems. ++# Hook for its removal unless debugging. ++# Note that there is a small window in which the directory will not be cleaned: ++# after its creation but before its name has been assigned to `$tmp'. ++$debug || ++{ ++ tmp= 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=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac ++ as_fn_append ac_file_inputs " '$ac_f'" ++ done ++ ++ # Let's still pretend it is `configure' which instantiates (i.e., don't ++ # use $as_me), people would be surprised to read: ++ # /* config.h. Generated by config.status. */ ++ configure_input='Generated from '` ++ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' ++ `' by configure.' ++ if test x"$ac_file" != x-; then ++ configure_input="$ac_file. $configure_input" ++ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 ++$as_echo "$as_me: creating $ac_file" >&6;} ++ fi ++ # Neutralize special characters interpreted by sed in replacement strings. ++ case $configure_input in #( ++ *\&* | *\|* | *\\* ) ++ ac_sed_conf_input=`$as_echo "$configure_input" | ++ sed 's/[\\\\&|]/\\\\&/g'`;; #( ++ *) ac_sed_conf_input=$configure_input;; ++ esac ++ ++ case $ac_tag in ++ *:-:* | *:-) cat >"$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 || ++$as_echo X"$ac_file" | ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ as_dir="$ac_dir"; as_fn_mkdir_p ++ ac_builddir=. ++ ++case "$ac_dir" in ++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; ++*) ++ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` ++ # A ".." for each directory in $ac_dir_suffix. ++ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` ++ case $ac_top_builddir_sub in ++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;; ++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; ++ esac ;; ++esac ++ac_abs_top_builddir=$ac_pwd ++ac_abs_builddir=$ac_pwd$ac_dir_suffix ++# for backward compatibility: ++ac_top_builddir=$ac_top_build_prefix ++ ++case $srcdir in ++ .) # We are building in place. ++ ac_srcdir=. ++ ac_top_srcdir=$ac_top_builddir_sub ++ ac_abs_top_srcdir=$ac_pwd ;; ++ [\\/]* | ?:[\\/]* ) # Absolute name. ++ ac_srcdir=$srcdir$ac_dir_suffix; ++ ac_top_srcdir=$srcdir ++ ac_abs_top_srcdir=$srcdir ;; ++ *) # Relative name. ++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ++ ac_top_srcdir=$ac_top_build_prefix$srcdir ++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;; ++esac ++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix ++ ++ ++ case $ac_mode in ++ :F) ++ # ++ # CONFIG_FILE ++ # ++ ++ case $INSTALL in ++ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; ++ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; ++ esac ++ ac_MKDIR_P=$MKDIR_P ++ case $MKDIR_P in ++ [\\/$]* | ?:[\\/]* ) ;; ++ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; ++ esac ++_ACEOF ++ ++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ++# If the template does not know about datarootdir, expand it. ++# FIXME: This hack should be removed a few years after 2.60. ++ac_datarootdir_hack=; ac_datarootdir_seen= ++ac_sed_dataroot=' ++/datarootdir/ { ++ p ++ q ++} ++/@datadir@/p ++/@docdir@/p ++/@infodir@/p ++/@localedir@/p ++/@mandir@/p' ++case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in ++*datarootdir*) ac_datarootdir_seen=yes;; ++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 ++$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} ++_ACEOF ++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ++ ac_datarootdir_hack=' ++ s&@datadir@&$datadir&g ++ s&@docdir@&$docdir&g ++ s&@infodir@&$infodir&g ++ s&@localedir@&$localedir&g ++ s&@mandir@&$mandir&g ++ s&\\\${datarootdir}&$datarootdir&g' ;; ++esac ++_ACEOF ++ ++# Neutralize VPATH when `$srcdir' = `.'. ++# Shell code in configure.ac might set extrasub. ++# FIXME: do we really want to maintain this feature? ++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ++ac_sed_extra="$ac_vpsub ++$extrasub ++_ACEOF ++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ++:t ++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b ++s|@configure_input@|$ac_sed_conf_input|;t t ++s&@top_builddir@&$ac_top_builddir_sub&;t t ++s&@top_build_prefix@&$ac_top_build_prefix&;t t ++s&@srcdir@&$ac_srcdir&;t t ++s&@abs_srcdir@&$ac_abs_srcdir&;t t ++s&@top_srcdir@&$ac_top_srcdir&;t t ++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t ++s&@builddir@&$ac_builddir&;t t ++s&@abs_builddir@&$ac_abs_builddir&;t t ++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t ++s&@INSTALL@&$ac_INSTALL&;t t ++s&@MKDIR_P@&$ac_MKDIR_P&;t t ++$ac_datarootdir_hack ++" ++eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$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"; } && ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined" >&5 ++$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' ++which seems to be undefined. Please make sure it is defined" >&2;} ++ ++ rm -f "$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 ++ { ++ $as_echo "/* $configure_input */" \ ++ && 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 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 ++$as_echo "$as_me: $ac_file is unchanged" >&6;} ++ else ++ rm -f "$ac_file" ++ mv "$ac_tmp/config.h" "$ac_file" \ ++ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ++ fi ++ else ++ $as_echo "/* $configure_input */" \ ++ && 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 || ++$as_echo X"$_am_arg" | ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'`/stamp-h$_am_stamp_count ++ ;; ++ ++ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 ++$as_echo "$as_me: executing $ac_file commands" >&6;} ++ ;; ++ esac ++ ++ ++ case $ac_file$ac_mode in ++ "depfiles":C) test x"$AMDEP_TRUE" != x"" || { ++ # Autoconf 2.62 quotes --file arguments for eval, but not when files ++ # are listed without --file. Let's play safe and only enable the eval ++ # if we detect the quoting. ++ case $CONFIG_FILES in ++ *\'*) eval set x "$CONFIG_FILES" ;; ++ *) set x $CONFIG_FILES ;; ++ esac ++ shift ++ for mf ++ do ++ # Strip MF so we end up with the name of the file. ++ mf=`echo "$mf" | sed -e 's/:.*$//'` ++ # Check whether this is an Automake generated Makefile or not. ++ # We used to match only the files named `Makefile.in', but ++ # some people rename them; so instead we look at the file content. ++ # Grep'ing the first line is not enough: some people post-process ++ # each Makefile.in and add a new line on top of each file to say so. ++ # Grep'ing the whole file is not good either: AIX grep has a line ++ # limit of 2048, but all sed's we know have understand at least 4000. ++ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then ++ dirpart=`$as_dirname -- "$mf" || ++$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ ++ X"$mf" : 'X\(//\)[^/]' \| \ ++ X"$mf" : 'X\(//\)$' \| \ ++ X"$mf" : 'X\(/\)' \| . 2>/dev/null || ++$as_echo X"$mf" | ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ else ++ continue ++ fi ++ # Extract the definition of DEPDIR, am__include, and am__quote ++ # from the Makefile without running `make'. ++ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` ++ test -z "$DEPDIR" && continue ++ am__include=`sed -n 's/^am__include = //p' < "$mf"` ++ test -z "am__include" && continue ++ am__quote=`sed -n 's/^am__quote = //p' < "$mf"` ++ # When using ansi2knr, U may be empty or an underscore; expand it ++ U=`sed -n 's/^U = //p' < "$mf"` ++ # Find all dependency output files, they are included files with ++ # $(DEPDIR) in their names. We invoke sed twice because it is the ++ # simplest approach to changing $(DEPDIR) to its actual value in the ++ # expansion. ++ for file in `sed -n " ++ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ ++ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do ++ # Make sure the directory exists. ++ test -f "$dirpart/$file" && continue ++ fdir=`$as_dirname -- "$file" || ++$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ ++ X"$file" : 'X\(//\)[^/]' \| \ ++ X"$file" : 'X\(//\)$' \| \ ++ X"$file" : 'X\(/\)' \| . 2>/dev/null || ++$as_echo X"$file" | ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q'` ++ as_dir=$dirpart/$fdir; as_fn_mkdir_p ++ # echo "creating $dirpart/$file" ++ echo '# dummy' > "$dirpart/$file" ++ done ++ done ++} ++ ;; ++ "libtool":C) ++ ++ # See if we are running on zsh, and set the options which allow our ++ # commands through without removal of \ escapes. ++ if test -n "${ZSH_VERSION+set}" ; then ++ setopt NO_GLOB_SUBST ++ fi ++ ++ cfgfile="${ofile}T" ++ trap "$RM \"$cfgfile\"; exit 1" 1 2 15 ++ $RM "$cfgfile" ++ ++ cat <<_LT_EOF >> "$cfgfile" ++#! $SHELL ++ ++# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. ++# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION ++# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: ++# NOTE: Changes made to this file will be lost: look at ltmain.sh. ++# ++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, ++# 2006, 2007, 2008, 2009, 2010, 2011 Free Software ++# Foundation, Inc. ++# Written by Gordon Matzigkeit, 1996 ++# ++# This file is part of GNU Libtool. ++# ++# GNU Libtool is free software; you can redistribute it and/or ++# modify it under the terms of the GNU General Public License as ++# published by the Free Software Foundation; either version 2 of ++# the License, or (at your option) any later version. ++# ++# As a special exception to the GNU General Public License, ++# if you distribute this file as part of a program or library that ++# is built using GNU Libtool, you may include this file under the ++# same distribution terms that you use for the rest of that program. ++# ++# GNU Libtool is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with GNU Libtool; see the file COPYING. If not, a copy ++# can be downloaded from http://www.gnu.org/licenses/gpl.html, or ++# obtained by writing to the Free Software Foundation, Inc., ++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ ++# The names of the tagged configurations supported by this script. ++available_tags="" ++ ++# ### BEGIN LIBTOOL CONFIG ++ ++# Which release of libtool.m4 was used? ++macro_version=$macro_version ++macro_revision=$macro_revision ++ ++# Whether or not to build shared libraries. ++build_libtool_libs=$enable_shared ++ ++# Whether or not to build static libraries. ++build_old_libs=$enable_static ++ ++# What type of objects to build. ++pic_mode=$pic_mode ++ ++# Whether or not to optimize for fast installation. ++fast_install=$enable_fast_install ++ ++# 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 ++ ++# 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. ++AR_FLAGS=$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 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 ++ ++# 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 in which our libraries should be installed. ++lt_sysroot=$lt_sysroot ++ ++# 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 ++ ++# Run-time system search path for libraries. ++sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec ++ ++# Whether dlopen is supported. ++dlopen_support=$enable_dlopen ++ ++# Whether dlopen of programs is supported. ++dlopen_self=$enable_dlopen_self ++ ++# Whether dlopen of statically linked programs is supported. ++dlopen_self_static=$enable_dlopen_self_static ++ ++# Commands to strip libraries. ++old_striplib=$lt_old_striplib ++striplib=$lt_striplib ++ ++ ++# The linker used to build libraries. ++LD=$lt_LD ++ ++# 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 ++ ++ case $host_os in ++ aix3*) ++ cat <<\_LT_EOF >> "$cfgfile" ++# AIX sometimes has problems with the GCC collect2 program. For some ++# reason, if we set the COLLECT_NAMES environment variable, the problems ++# vanish in a puff of smoke. ++if test "X${COLLECT_NAMES+set}" != Xset; then ++ COLLECT_NAMES= ++ export COLLECT_NAMES ++fi ++_LT_EOF ++ ;; ++ esac ++ ++ ++ltmain="$ac_aux_dir/ltmain.sh" ++ ++ ++ # We use sed instead of cat because bash on DJGPP gets confused if ++ # if finds mixed CR/LF and LF-only lines. Since sed operates in ++ # text mode, it properly converts lines to CR/LF. This bash problem ++ # is reportedly fixed, but why not run on old versions too? ++ sed '$q' "$ltmain" >> "$cfgfile" \ ++ || (rm -f "$cfgfile"; exit 1) ++ ++ if test x"$xsi_shell" = xyes; then ++ sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ ++func_dirname ()\ ++{\ ++\ case ${1} in\ ++\ */*) func_dirname_result="${1%/*}${2}" ;;\ ++\ * ) func_dirname_result="${3}" ;;\ ++\ esac\ ++} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_basename ()$/,/^} # func_basename /c\ ++func_basename ()\ ++{\ ++\ func_basename_result="${1##*/}"\ ++} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ ++func_dirname_and_basename ()\ ++{\ ++\ case ${1} in\ ++\ */*) func_dirname_result="${1%/*}${2}" ;;\ ++\ * ) func_dirname_result="${3}" ;;\ ++\ esac\ ++\ func_basename_result="${1##*/}"\ ++} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ ++func_stripname ()\ ++{\ ++\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ ++\ # positional parameters, so assign one to ordinary parameter first.\ ++\ func_stripname_result=${3}\ ++\ func_stripname_result=${func_stripname_result#"${1}"}\ ++\ func_stripname_result=${func_stripname_result%"${2}"}\ ++} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ ++func_split_long_opt ()\ ++{\ ++\ func_split_long_opt_name=${1%%=*}\ ++\ func_split_long_opt_arg=${1#*=}\ ++} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ ++func_split_short_opt ()\ ++{\ ++\ func_split_short_opt_arg=${1#??}\ ++\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ ++} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ ++func_lo2o ()\ ++{\ ++\ case ${1} in\ ++\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ ++\ *) func_lo2o_result=${1} ;;\ ++\ esac\ ++} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_xform ()$/,/^} # func_xform /c\ ++func_xform ()\ ++{\ ++ func_xform_result=${1%.*}.lo\ ++} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_arith ()$/,/^} # func_arith /c\ ++func_arith ()\ ++{\ ++ func_arith_result=$(( $* ))\ ++} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_len ()$/,/^} # func_len /c\ ++func_len ()\ ++{\ ++ func_len_result=${#1}\ ++} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++fi ++ ++if test x"$lt_shell_append" = xyes; then ++ sed -e '/^func_append ()$/,/^} # func_append /c\ ++func_append ()\ ++{\ ++ eval "${1}+=\\${2}"\ ++} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ ++func_append_quoted ()\ ++{\ ++\ func_quote_for_eval "${2}"\ ++\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ ++} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++ ++ ++ # Save a `func_append' function call where possible by direct use of '+=' ++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++ test 0 -eq $? || _lt_function_replace_fail=: ++else ++ # Save a `func_append' function call even when '+=' is not available ++ sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++ test 0 -eq $? || _lt_function_replace_fail=: ++fi ++ ++if test x"$_lt_function_replace_fail" = x":"; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 ++$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} ++fi ++ ++ ++ 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 ++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 ++$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} ++fi ++ +diff --git a/libclamav/libmspack-0.4alpha/configure.ac b/libclamav/libmspack-0.4alpha/configure.ac +new file mode 100644 +index 000000000000..55fb6ce5ee9d +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/configure.ac +@@ -0,0 +1,50 @@ ++# -*- Autoconf -*- ++# Process this file with autoconf to produce a configure script. ++AC_PREREQ(2.59) ++AC_INIT([libmspack],[0.4alpha],[kyzer@4u.net]) ++AC_CONFIG_MACRO_DIR([m4]) ++AM_INIT_AUTOMAKE ++AC_CONFIG_SRCDIR([mspack/mspack.h]) ++AC_CONFIG_HEADER([config.h]) ++ ++dnl Enable silent rules by default (if yet support in automake) ++dnl use 'make V=1' to look at verbose commandline ++m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) ++ ++# --enable-debug option ++AC_ARG_ENABLE(debug, ++ AS_HELP_STRING(--enable-debug,enable debugging), ++ enable_debug=$enableval, ++ enable_debug=no) ++if test x$enable_debug = xyes; then ++ AC_DEFINE(DEBUG, 1, [Turn debugging mode on?]) ++fi ++AM_CONDITIONAL(DEBUG, test x$enable_debug = 'xyes') ++ ++# Checks for programs. ++AC_PROG_CC ++AM_CONDITIONAL(GCC, test x$GCC = 'xyes') ++AC_PROG_INSTALL ++LT_INIT ++AC_EXEEXT ++ ++# Checks for header files. ++AC_HEADER_STDC ++AC_CHECK_HEADERS([ctype.h limits.h stdlib.h wctype.h]) ++ ++# Checks for typedefs, structures, and compiler characteristics. ++AC_C_CONST ++AC_C_INLINE ++AC_TYPE_MODE_T ++AC_TYPE_OFF_T ++AC_TYPE_SIZE_T ++AC_CHECK_SIZEOF([off_t]) ++AC_CHECK_FUNCS([tolower towlower]) ++ ++# largefile support ++AC_SYS_LARGEFILE ++AC_FUNC_FSEEKO ++ ++# Checks for library functions. ++AC_CONFIG_FILES([Makefile doc/Makefile doc/Doxyfile libmspack.pc]) ++AC_OUTPUT +diff --git a/libclamav/libmspack-0.4alpha/depcomp b/libclamav/libmspack-0.4alpha/depcomp +new file mode 100755 +index 000000000000..bd0ac089584a +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/depcomp +@@ -0,0 +1,688 @@ ++#! /bin/sh ++# depcomp - compile a program generating dependencies as side-effects ++ ++scriptversion=2011-12-04.11; # UTC ++ ++# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, ++# 2011 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 ++ ++if test -z "$depmode" || test -z "$source" || test -z "$object"; then ++ echo "depcomp: Variables source, object and depmode must be set" 1>&2 ++ exit 1 ++fi ++ ++# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. ++depfile=${depfile-`echo "$object" | ++ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} ++tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} ++ ++rm -f "$tmpdepfile" ++ ++# Some modes work just like other modes, but use different flags. We ++# parameterize here, but still list the modes in the big case below, ++# to make depend.m4 easier to write. Note that we *cannot* use a case ++# here, because this file can only contain one case statement. ++if test "$depmode" = hp; then ++ # HP compiler uses -M and no extra arg. ++ gccflag=-M ++ depmode=gcc ++fi ++ ++if test "$depmode" = dashXmstdout; then ++ # This is just like dashmstdout with a different argument. ++ dashmflag=-xM ++ depmode=dashmstdout ++fi ++ ++cygpath_u="cygpath -u -f -" ++if test "$depmode" = msvcmsys; then ++ # This is just like msvisualcpp but w/o cygpath translation. ++ # Just convert the backslash-escaped backslashes to single forward ++ # slashes to satisfy depend.m4 ++ cygpath_u='sed s,\\\\,/,g' ++ depmode=msvisualcpp ++fi ++ ++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 ++ ++case "$depmode" in ++gcc3) ++## gcc 3 implements dependency tracking that does exactly what ++## we want. Yay! Note: for some reason libtool 1.4 doesn't like ++## it if -MD -MP comes after the -MF stuff. Hmm. ++## Unfortunately, FreeBSD c89 acceptance of flags depends upon ++## the command line argument order; so add the flags where they ++## appear in depend2.am. Note that the slowdown incurred here ++## affects only configure: in makefiles, %FASTDEP% shortcuts this. ++ for arg ++ do ++ case $arg in ++ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; ++ *) set fnord "$@" "$arg" ;; ++ esac ++ shift # fnord ++ shift # $arg ++ done ++ "$@" ++ stat=$? ++ if test $stat -eq 0; then : ++ else ++ rm -f "$tmpdepfile" ++ exit $stat ++ fi ++ mv "$tmpdepfile" "$depfile" ++ ;; ++ ++gcc) ++## There are various ways to get dependency output from gcc. Here's ++## why we pick this rather obscure method: ++## - Don't want to use -MD because we'd like the dependencies to end ++## up in a subdir. Having to rename by hand is ugly. ++## (We might end up doing this anyway to support other compilers.) ++## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ++## -MM, not -M (despite what the docs say). ++## - Using -M directly means running the compiler twice (even worse ++## than renaming). ++ if test -z "$gccflag"; then ++ gccflag=-MD, ++ fi ++ "$@" -Wp,"$gccflag$tmpdepfile" ++ stat=$? ++ if test $stat -eq 0; then : ++ else ++ rm -f "$tmpdepfile" ++ exit $stat ++ fi ++ rm -f "$depfile" ++ echo "$object : \\" > "$depfile" ++ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ++## The second -e expression handles DOS-style file names with drive letters. ++ sed -e 's/^[^:]*: / /' \ ++ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ++## This next piece of magic avoids the `deleted header file' problem. ++## The problem is that when a header file which appears in a .P file ++## is deleted, the dependency causes make to die (because there is ++## typically no way to rebuild the header). We avoid this by adding ++## dummy dependencies for each header file. Too bad gcc doesn't do ++## this for us directly. ++ tr ' ' ' ++' < "$tmpdepfile" | ++## Some versions of gcc put a space before the `:'. On the theory ++## that the space means something, we add a space to the output as ++## well. 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. ++ 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 -eq 0; then : ++ else ++ rm -f "$tmpdepfile" ++ exit $stat ++ fi ++ rm -f "$depfile" ++ ++ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files ++ echo "$object : \\" > "$depfile" ++ ++ # Clip off the initial element (the dependent). Don't try to be ++ # clever and replace this with sed code, as IRIX sed won't handle ++ # lines with more than a fixed number of characters (4096 in ++ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; ++ # the IRIX cc adds comments like `#:fec' to the end of the ++ # dependency line. ++ tr ' ' ' ++' < "$tmpdepfile" \ ++ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ ++ tr ' ++' ' ' >> "$depfile" ++ echo >> "$depfile" ++ ++ # The second pass generates a dummy entry for each header file. ++ tr ' ' ' ++' < "$tmpdepfile" \ ++ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ ++ >> "$depfile" ++ else ++ # The sourcefile does not contain any dependencies, so just ++ # store a dummy comment line, to avoid errors with the Makefile ++ # "include basename.Plo" scheme. ++ echo "#dummy" > "$depfile" ++ fi ++ rm -f "$tmpdepfile" ++ ;; ++ ++aix) ++ # The C for AIX Compiler uses -M and outputs the dependencies ++ # in a .u file. In older versions, this file always lives in the ++ # current directory. Also, the AIX compiler puts `$object:' at the ++ # start of each line; $object doesn't have directory information. ++ # Version 6 uses the directory in both cases. ++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` ++ test "x$dir" = "x$object" && dir= ++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` ++ if test "$libtool" = yes; then ++ tmpdepfile1=$dir$base.u ++ tmpdepfile2=$base.u ++ tmpdepfile3=$dir.libs/$base.u ++ "$@" -Wc,-M ++ else ++ tmpdepfile1=$dir$base.u ++ tmpdepfile2=$dir$base.u ++ tmpdepfile3=$dir$base.u ++ "$@" -M ++ fi ++ stat=$? ++ ++ if test $stat -eq 0; then : ++ else ++ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" ++ exit $stat ++ fi ++ ++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" ++ do ++ test -f "$tmpdepfile" && break ++ done ++ if test -f "$tmpdepfile"; then ++ # Each line is of the form `foo.o: dependent.h'. ++ # Do two passes, one to just change these to ++ # `$object: dependent.h' and one to simply `dependent.h:'. ++ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" ++ # That's a tab and a space in the []. ++ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" ++ else ++ # The sourcefile does not contain any dependencies, so just ++ # store a dummy comment line, to avoid errors with the Makefile ++ # "include basename.Plo" scheme. ++ echo "#dummy" > "$depfile" ++ fi ++ rm -f "$tmpdepfile" ++ ;; ++ ++icc) ++ # Intel's C compiler understands `-MD -MF file'. However on ++ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c ++ # ICC 7.0 will fill foo.d with something like ++ # foo.o: sub/foo.c ++ # foo.o: sub/foo.h ++ # which is wrong. We want: ++ # sub/foo.o: sub/foo.c ++ # sub/foo.o: sub/foo.h ++ # sub/foo.c: ++ # sub/foo.h: ++ # ICC 7.1 will output ++ # foo.o: sub/foo.c sub/foo.h ++ # and will wrap long lines using \ : ++ # foo.o: sub/foo.c ... \ ++ # sub/foo.h ... \ ++ # ... ++ ++ "$@" -MD -MF "$tmpdepfile" ++ stat=$? ++ if test $stat -eq 0; then : ++ else ++ rm -f "$tmpdepfile" ++ exit $stat ++ fi ++ rm -f "$depfile" ++ # Each line is of the form `foo.o: dependent.h', ++ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. ++ # Do two passes, one to just change these to ++ # `$object: dependent.h' and one to simply `dependent.h:'. ++ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" ++ # Some versions of the HPUX 10.20 sed can't process this invocation ++ # correctly. Breaking it into two sed invocations is a workaround. ++ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | ++ sed -e 's/$/ :/' >> "$depfile" ++ rm -f "$tmpdepfile" ++ ;; ++ ++hp2) ++ # The "hp" stanza above does not work with aCC (C++) and HP's ia64 ++ # compilers, which have integrated preprocessors. The correct option ++ # to use with these is +Maked; it writes dependencies to a file named ++ # 'foo.d', which lands next to the object file, wherever that ++ # happens to be. ++ # Much of this is similar to the tru64 case; see comments there. ++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` ++ test "x$dir" = "x$object" && dir= ++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` ++ if test "$libtool" = yes; then ++ tmpdepfile1=$dir$base.d ++ tmpdepfile2=$dir.libs/$base.d ++ "$@" -Wc,+Maked ++ else ++ tmpdepfile1=$dir$base.d ++ tmpdepfile2=$dir$base.d ++ "$@" +Maked ++ fi ++ stat=$? ++ if test $stat -eq 0; then : ++ else ++ rm -f "$tmpdepfile1" "$tmpdepfile2" ++ exit $stat ++ fi ++ ++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" ++ do ++ test -f "$tmpdepfile" && break ++ done ++ if test -f "$tmpdepfile"; then ++ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" ++ # Add `dependent.h:' lines. ++ sed -ne '2,${ ++ s/^ *// ++ s/ \\*$// ++ s/$/:/ ++ p ++ }' "$tmpdepfile" >> "$depfile" ++ else ++ echo "#dummy" > "$depfile" ++ fi ++ rm -f "$tmpdepfile" "$tmpdepfile2" ++ ;; ++ ++tru64) ++ # The Tru64 compiler uses -MD to generate dependencies as a side ++ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. ++ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put ++ # dependencies in `foo.d' instead, so we check for that too. ++ # Subdirectories are respected. ++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` ++ test "x$dir" = "x$object" && dir= ++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` ++ ++ if test "$libtool" = yes; then ++ # With Tru64 cc, shared objects can also be used to make a ++ # static library. This mechanism is used in libtool 1.4 series to ++ # handle both shared and static libraries in a single compilation. ++ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. ++ # ++ # With libtool 1.5 this exception was removed, and libtool now ++ # generates 2 separate objects for the 2 libraries. These two ++ # compilations output dependencies in $dir.libs/$base.o.d and ++ # in $dir$base.o.d. We have to check for both files, because ++ # one of the two compilations can be disabled. We should prefer ++ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is ++ # automatically cleaned when .libs/ is deleted, while ignoring ++ # the former would cause a distcleancheck panic. ++ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 ++ tmpdepfile2=$dir$base.o.d # libtool 1.5 ++ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 ++ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 ++ "$@" -Wc,-MD ++ else ++ tmpdepfile1=$dir$base.o.d ++ tmpdepfile2=$dir$base.d ++ tmpdepfile3=$dir$base.d ++ tmpdepfile4=$dir$base.d ++ "$@" -MD ++ fi ++ ++ stat=$? ++ if test $stat -eq 0; then : ++ else ++ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" ++ exit $stat ++ fi ++ ++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" ++ do ++ test -f "$tmpdepfile" && break ++ done ++ if test -f "$tmpdepfile"; then ++ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" ++ # That's a tab and a space in the []. ++ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" ++ else ++ echo "#dummy" > "$depfile" ++ fi ++ rm -f "$tmpdepfile" ++ ;; ++ ++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" = 0; then : ++ else ++ 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/\(.*\)/ \1 \\/p ++s/.\(.*\) \\/\1:/ ++H ++$ { ++ s/.*/ / ++ G ++ p ++}' >> "$depfile" ++ 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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" ++ rm -f "$depfile" ++ cat < "$tmpdepfile" > "$depfile" ++ tr ' ' ' ++' < "$tmpdepfile" | \ ++## Some versions of the HPUX 10.20 sed can't process this invocation ++## correctly. Breaking it into two sed invocations is a workaround. ++ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" ++ rm -f "$tmpdepfile" ++ ;; ++ ++dashXmstdout) ++ # This case only exists to satisfy depend.m4. It is never actually ++ # run, as this mode is specially recognized in the preamble. ++ exit 1 ++ ;; ++ ++makedepend) ++ "$@" || exit $? ++ # Remove any Libtool call ++ if test "$libtool" = yes; then ++ while test "X$1" != 'X--mode=compile'; do ++ shift ++ done ++ shift ++ fi ++ # X makedepend ++ shift ++ cleared=no eat=no ++ for arg ++ do ++ case $cleared in ++ no) ++ set ""; shift ++ cleared=yes ;; ++ esac ++ if test $eat = yes; then ++ eat=no ++ continue ++ fi ++ case "$arg" in ++ -D*|-I*) ++ set fnord "$@" "$arg"; shift ;; ++ # Strip any option that makedepend may not understand. Remove ++ # the object too, otherwise makedepend will parse it as a source file. ++ -arch) ++ eat=yes ;; ++ -*|$object) ++ ;; ++ *) ++ set fnord "$@" "$arg"; shift ;; ++ esac ++ done ++ obj_suffix=`echo "$object" | sed 's/^.*\././'` ++ touch "$tmpdepfile" ++ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" ++ rm -f "$depfile" ++ # 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" ++ sed '1,2d' "$tmpdepfile" | tr ' ' ' ++' | \ ++## Some versions of the HPUX 10.20 sed can't process this invocation ++## correctly. Breaking it into two sed invocations is a workaround. ++ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" ++ rm -f "$tmpdepfile" "$tmpdepfile".bak ++ ;; ++ ++cpp) ++ # Important note: in order to support this mode, a compiler *must* ++ # always write the preprocessed file to stdout. ++ "$@" || exit $? ++ ++ # Remove the call to Libtool. ++ if test "$libtool" = yes; then ++ while test "X$1" != 'X--mode=compile'; do ++ shift ++ done ++ shift ++ fi ++ ++ # Remove `-o $object'. ++ IFS=" " ++ for arg ++ do ++ case $arg in ++ -o) ++ shift ++ ;; ++ $object) ++ shift ++ ;; ++ *) ++ set fnord "$@" "$arg" ++ shift # fnord ++ shift # $arg ++ ;; ++ esac ++ done ++ ++ "$@" -E | ++ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ ++ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | ++ sed '$ s: \\$::' > "$tmpdepfile" ++ rm -f "$depfile" ++ echo "$object : \\" > "$depfile" ++ cat < "$tmpdepfile" >> "$depfile" ++ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" ++ rm -f "$tmpdepfile" ++ ;; ++ ++msvisualcpp) ++ # Important note: in order to support this mode, a compiler *must* ++ # always write the preprocessed file to stdout. ++ "$@" || exit $? ++ ++ # Remove the call to Libtool. ++ if test "$libtool" = yes; then ++ while test "X$1" != 'X--mode=compile'; do ++ shift ++ done ++ shift ++ fi ++ ++ IFS=" " ++ for arg ++ do ++ case "$arg" in ++ -o) ++ shift ++ ;; ++ $object) ++ shift ++ ;; ++ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") ++ set fnord "$@" ++ shift ++ shift ++ ;; ++ *) ++ set fnord "$@" "$arg" ++ shift ++ shift ++ ;; ++ esac ++ done ++ "$@" -E 2>/dev/null | ++ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" ++ rm -f "$depfile" ++ echo "$object : \\" > "$depfile" ++ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" ++ echo " " >> "$depfile" ++ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" ++ rm -f "$tmpdepfile" ++ ;; ++ ++msvcmsys) ++ # This case exists only to let depend.m4 do its work. It works by ++ # looking at the text of this script. This case will never be run, ++ # since it is checked for above. ++ exit 1 ++ ;; ++ ++none) ++ exec "$@" ++ ;; ++ ++*) ++ echo "Unknown depmode $depmode" 1>&2 ++ exit 1 ++ ;; ++esac ++ ++exit 0 ++ ++# Local Variables: ++# mode: shell-script ++# sh-indentation: 2 ++# eval: (add-hook 'write-file-hooks 'time-stamp) ++# time-stamp-start: "scriptversion=" ++# time-stamp-format: "%:y-%02m-%02d.%02H" ++# time-stamp-time-zone: "UTC" ++# time-stamp-end: "; # UTC" ++# End: +diff --git a/libclamav/libmspack-0.4alpha/install-sh b/libclamav/libmspack-0.4alpha/install-sh +new file mode 100755 +index 000000000000..6781b987bdbc +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/install-sh +@@ -0,0 +1,520 @@ ++#!/bin/sh ++# install - install a program, script, or datafile ++ ++scriptversion=2009-04-28.21; # UTC ++ ++# This originates from X11R5 (mit/util/scripts/install.sh), which was ++# later released in X11R6 (xc/config/util/install.sh) with the ++# following copyright and license. ++# ++# Copyright (C) 1994 X Consortium ++# ++# Permission is hereby granted, free of charge, to any person obtaining a copy ++# of this software and associated documentation files (the "Software"), to ++# deal in the Software without restriction, including without limitation the ++# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or ++# sell copies of the Software, and to permit persons to whom the Software is ++# furnished to do so, subject to the following conditions: ++# ++# The above copyright notice and this permission notice shall be included in ++# all copies or substantial portions of the Software. ++# ++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- ++# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++# ++# Except as contained in this notice, the name of the X Consortium shall not ++# be used in advertising or otherwise to promote the sale, use or other deal- ++# ings in this Software without prior written authorization from the X Consor- ++# tium. ++# ++# ++# FSF changes to this file are in the public domain. ++# ++# Calling this script install-sh is preferred over install.sh, to prevent ++# `make' implicit rules from creating a file called install from it ++# when there is no Makefile. ++# ++# This script is compatible with the BSD install script, but was written ++# from scratch. ++ ++nl=' ++' ++IFS=" "" $nl" ++ ++# set DOITPROG to echo to test this script ++ ++# Don't use :- since 4.3BSD and earlier shells don't like it. ++doit=${DOITPROG-} ++if test -z "$doit"; then ++ doit_exec=exec ++else ++ doit_exec=$doit ++fi ++ ++# Put in absolute file names if you don't have them in your path; ++# or use environment vars. ++ ++chgrpprog=${CHGRPPROG-chgrp} ++chmodprog=${CHMODPROG-chmod} ++chownprog=${CHOWNPROG-chown} ++cmpprog=${CMPPROG-cmp} ++cpprog=${CPPROG-cp} ++mkdirprog=${MKDIRPROG-mkdir} ++mvprog=${MVPROG-mv} ++rmprog=${RMPROG-rm} ++stripprog=${STRIPPROG-strip} ++ ++posix_glob='?' ++initialize_posix_glob=' ++ test "$posix_glob" != "?" || { ++ if (set -f) 2>/dev/null; then ++ posix_glob= ++ else ++ posix_glob=: ++ fi ++ } ++' ++ ++posix_mkdir= ++ ++# Desired mode of installed file. ++mode=0755 ++ ++chgrpcmd= ++chmodcmd=$chmodprog ++chowncmd= ++mvcmd=$mvprog ++rmcmd="$rmprog -f" ++stripcmd= ++ ++src= ++dst= ++dir_arg= ++dst_arg= ++ ++copy_on_change=false ++no_target_directory= ++ ++usage="\ ++Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE ++ or: $0 [OPTION]... SRCFILES... DIRECTORY ++ or: $0 [OPTION]... -t DIRECTORY SRCFILES... ++ or: $0 [OPTION]... -d DIRECTORIES... ++ ++In the 1st form, copy SRCFILE to DSTFILE. ++In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. ++In the 4th, create DIRECTORIES. ++ ++Options: ++ --help display this help and exit. ++ --version display version info and exit. ++ ++ -c (ignored) ++ -C install only if different (preserve the last data modification time) ++ -d create directories instead of installing files. ++ -g GROUP $chgrpprog installed files to GROUP. ++ -m MODE $chmodprog installed files to MODE. ++ -o USER $chownprog installed files to USER. ++ -s $stripprog installed files. ++ -t DIRECTORY install into DIRECTORY. ++ -T report an error if DSTFILE is a directory. ++ ++Environment variables override the default commands: ++ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG ++ RMPROG STRIPPROG ++" ++ ++while test $# -ne 0; do ++ case $1 in ++ -c) ;; ++ ++ -C) copy_on_change=true;; ++ ++ -d) dir_arg=true;; ++ ++ -g) chgrpcmd="$chgrpprog $2" ++ shift;; ++ ++ --help) echo "$usage"; exit $?;; ++ ++ -m) mode=$2 ++ case $mode in ++ *' '* | *' '* | *' ++'* | *'*'* | *'?'* | *'['*) ++ echo "$0: invalid mode: $mode" >&2 ++ exit 1;; ++ esac ++ shift;; ++ ++ -o) chowncmd="$chownprog $2" ++ shift;; ++ ++ -s) stripcmd=$stripprog;; ++ ++ -t) dst_arg=$2 ++ shift;; ++ ++ -T) no_target_directory=true;; ++ ++ --version) echo "$0 $scriptversion"; exit $?;; ++ ++ --) shift ++ break;; ++ ++ -*) echo "$0: invalid option: $1" >&2 ++ exit 1;; ++ ++ *) break;; ++ esac ++ shift ++done ++ ++if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then ++ # When -d is used, all remaining arguments are directories to create. ++ # When -t is used, the destination is already specified. ++ # Otherwise, the last argument is the destination. Remove it from $@. ++ for arg ++ do ++ if test -n "$dst_arg"; then ++ # $@ is not empty: it contains at least $arg. ++ set fnord "$@" "$dst_arg" ++ shift # fnord ++ fi ++ shift # arg ++ dst_arg=$arg ++ done ++fi ++ ++if test $# -eq 0; then ++ if test -z "$dir_arg"; then ++ echo "$0: no input file specified." >&2 ++ exit 1 ++ fi ++ # It's OK to call `install-sh -d' without argument. ++ # This can happen when creating conditional directories. ++ exit 0 ++fi ++ ++if test -z "$dir_arg"; then ++ trap '(exit $?); exit' 1 2 13 15 ++ ++ # Set umask so as not to create temps with too-generous modes. ++ # However, 'strip' requires both read and write access to temps. ++ case $mode in ++ # Optimize common cases. ++ *644) cp_umask=133;; ++ *755) cp_umask=22;; ++ ++ *[0-7]) ++ if test -z "$stripcmd"; then ++ u_plus_rw= ++ else ++ u_plus_rw='% 200' ++ fi ++ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; ++ *) ++ if test -z "$stripcmd"; then ++ u_plus_rw= ++ else ++ u_plus_rw=,u+rw ++ fi ++ cp_umask=$mode$u_plus_rw;; ++ esac ++fi ++ ++for src ++do ++ # Protect names starting with `-'. ++ case $src in ++ -*) src=./$src;; ++ esac ++ ++ if test -n "$dir_arg"; then ++ dst=$src ++ dstdir=$dst ++ test -d "$dstdir" ++ dstdir_status=$? ++ else ++ ++ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command ++ # might cause directories to be created, which would be especially bad ++ # if $src (and thus $dsttmp) contains '*'. ++ if test ! -f "$src" && test ! -d "$src"; then ++ echo "$0: $src does not exist." >&2 ++ exit 1 ++ fi ++ ++ if test -z "$dst_arg"; then ++ echo "$0: no destination specified." >&2 ++ exit 1 ++ fi ++ ++ dst=$dst_arg ++ # Protect names starting with `-'. ++ case $dst in ++ -*) dst=./$dst;; ++ esac ++ ++ # If destination is a directory, append the input filename; won't work ++ # if double slashes aren't ignored. ++ if test -d "$dst"; then ++ if test -n "$no_target_directory"; then ++ echo "$0: $dst_arg: Is a directory" >&2 ++ exit 1 ++ fi ++ dstdir=$dst ++ dst=$dstdir/`basename "$src"` ++ dstdir_status=0 ++ else ++ # Prefer dirname, but fall back on a substitute if dirname fails. ++ dstdir=` ++ (dirname "$dst") 2>/dev/null || ++ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ ++ X"$dst" : 'X\(//\)[^/]' \| \ ++ X"$dst" : 'X\(//\)$' \| \ ++ X"$dst" : 'X\(/\)' \| . 2>/dev/null || ++ echo X"$dst" | ++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)[^/].*/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\/\)$/{ ++ s//\1/ ++ q ++ } ++ /^X\(\/\).*/{ ++ s//\1/ ++ q ++ } ++ s/.*/./; q' ++ ` ++ ++ test -d "$dstdir" ++ dstdir_status=$? ++ fi ++ fi ++ ++ obsolete_mkdir_used=false ++ ++ if test $dstdir_status != 0; then ++ case $posix_mkdir in ++ '') ++ # Create intermediate dirs using mode 755 as modified by the umask. ++ # This is like FreeBSD 'install' as of 1997-10-28. ++ umask=`umask` ++ case $stripcmd.$umask in ++ # Optimize common cases. ++ *[2367][2367]) mkdir_umask=$umask;; ++ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; ++ ++ *[0-7]) ++ mkdir_umask=`expr $umask + 22 \ ++ - $umask % 100 % 40 + $umask % 20 \ ++ - $umask % 10 % 4 + $umask % 2 ++ `;; ++ *) mkdir_umask=$umask,go-w;; ++ esac ++ ++ # With -d, create the new directory with the user-specified mode. ++ # Otherwise, rely on $mkdir_umask. ++ if test -n "$dir_arg"; then ++ mkdir_mode=-m$mode ++ else ++ mkdir_mode= ++ fi ++ ++ posix_mkdir=false ++ case $umask in ++ *[123567][0-7][0-7]) ++ # POSIX mkdir -p sets u+wx bits regardless of umask, which ++ # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ++ ;; ++ *) ++ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ ++ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 ++ ++ if (umask $mkdir_umask && ++ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 ++ then ++ if test -z "$dir_arg" || { ++ # Check for POSIX incompatibilities with -m. ++ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or ++ # other-writeable bit of parent directory when it shouldn't. ++ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ++ ls_ld_tmpdir=`ls -ld "$tmpdir"` ++ case $ls_ld_tmpdir in ++ d????-?r-*) different_mode=700;; ++ d????-?--*) different_mode=755;; ++ *) false;; ++ esac && ++ $mkdirprog -m$different_mode -p -- "$tmpdir" && { ++ ls_ld_tmpdir_1=`ls -ld "$tmpdir"` ++ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" ++ } ++ } ++ then posix_mkdir=: ++ fi ++ rmdir "$tmpdir/d" "$tmpdir" ++ else ++ # Remove any dirs left behind by ancient mkdir implementations. ++ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null ++ fi ++ trap '' 0;; ++ esac;; ++ esac ++ ++ if ++ $posix_mkdir && ( ++ umask $mkdir_umask && ++ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ++ ) ++ then : ++ else ++ ++ # The umask is ridiculous, or mkdir does not conform to POSIX, ++ # or it failed possibly due to a race condition. Create the ++ # directory the slow way, step by step, checking for races as we go. ++ ++ case $dstdir in ++ /*) prefix='/';; ++ -*) prefix='./';; ++ *) prefix='';; ++ esac ++ ++ eval "$initialize_posix_glob" ++ ++ oIFS=$IFS ++ IFS=/ ++ $posix_glob set -f ++ set fnord $dstdir ++ shift ++ $posix_glob set +f ++ IFS=$oIFS ++ ++ prefixes= ++ ++ for d ++ do ++ test -z "$d" && continue ++ ++ prefix=$prefix$d ++ if test -d "$prefix"; then ++ prefixes= ++ else ++ if $posix_mkdir; then ++ (umask=$mkdir_umask && ++ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break ++ # Don't fail if two instances are running concurrently. ++ test -d "$prefix" || exit 1 ++ else ++ case $prefix in ++ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; ++ *) qprefix=$prefix;; ++ esac ++ prefixes="$prefixes '$qprefix'" ++ fi ++ fi ++ prefix=$prefix/ ++ done ++ ++ if test -n "$prefixes"; then ++ # Don't fail if two instances are running concurrently. ++ (umask $mkdir_umask && ++ eval "\$doit_exec \$mkdirprog $prefixes") || ++ test -d "$dstdir" || exit 1 ++ obsolete_mkdir_used=true ++ fi ++ fi ++ fi ++ ++ if test -n "$dir_arg"; then ++ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && ++ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && ++ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || ++ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 ++ else ++ ++ # Make a couple of temp file names in the proper directory. ++ dsttmp=$dstdir/_inst.$$_ ++ rmtmp=$dstdir/_rm.$$_ ++ ++ # Trap to clean up those temp files at exit. ++ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 ++ ++ # Copy the file name to the temp name. ++ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && ++ ++ # and set any options; do chmod last to preserve setuid bits. ++ # ++ # If any of these fail, we abort the whole thing. If we want to ++ # ignore errors from any of these, just make sure not to ignore ++ # errors from the above "$doit $cpprog $src $dsttmp" command. ++ # ++ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && ++ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && ++ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && ++ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && ++ ++ # If -C, don't bother to copy if it wouldn't change the file. ++ if $copy_on_change && ++ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && ++ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && ++ ++ eval "$initialize_posix_glob" && ++ $posix_glob set -f && ++ set X $old && old=:$2:$4:$5:$6 && ++ set X $new && new=:$2:$4:$5:$6 && ++ $posix_glob set +f && ++ ++ test "$old" = "$new" && ++ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 ++ then ++ rm -f "$dsttmp" ++ else ++ # Rename the file to the real destination. ++ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || ++ ++ # The rename failed, perhaps because mv can't rename something else ++ # to itself, or perhaps because mv is so ancient that it does not ++ # support -f. ++ { ++ # Now remove or move aside any old file at destination location. ++ # We try this two ways since rm can't unlink itself on some ++ # systems and the destination file might be busy for other ++ # reasons. In this case, the final cleanup might fail but the new ++ # file should still install successfully. ++ { ++ test ! -f "$dst" || ++ $doit $rmcmd -f "$dst" 2>/dev/null || ++ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && ++ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } ++ } || ++ { echo "$0: cannot unlink or rename $dst" >&2 ++ (exit 1); exit 1 ++ } ++ } && ++ ++ # Now rename the file to the real destination. ++ $doit $mvcmd "$dsttmp" "$dst" ++ } ++ fi || exit 1 ++ ++ trap '' 0 ++ fi ++done ++ ++# Local variables: ++# eval: (add-hook 'write-file-hooks 'time-stamp) ++# time-stamp-start: "scriptversion=" ++# time-stamp-format: "%:y-%02m-%02d.%02H" ++# time-stamp-time-zone: "UTC" ++# time-stamp-end: "; # UTC" ++# End: +diff --git a/libclamav/libmspack-0.4alpha/libmspack.pc.in b/libclamav/libmspack-0.4alpha/libmspack.pc.in +new file mode 100644 +index 000000000000..44b09f350580 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/libmspack.pc.in +@@ -0,0 +1,10 @@ ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++libdir=@libdir@ ++includedir=@includedir@ ++ ++Name: @PACKAGE@ ++Description: Compressors and decompressors for Microsoft formats ++Version: @VERSION@ ++Libs: -L${libdir} -lmspack ++Cflags: -I${includedir} +diff --git a/libclamav/libmspack-0.4alpha/ltmain.sh b/libclamav/libmspack-0.4alpha/ltmain.sh +new file mode 100644 +index 000000000000..c2852d856135 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/ltmain.sh +@@ -0,0 +1,9661 @@ ++ ++# libtool (GNU libtool) 2.4.2 ++# Written by Gordon Matzigkeit , 1996 ++ ++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, ++# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. ++# This is free software; see the source for copying conditions. There is NO ++# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++ ++# GNU Libtool is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2 of the License, or ++# (at your option) any later version. ++# ++# As a special exception to the GNU General Public License, ++# if you distribute this file as part of a program or library that ++# is built using GNU Libtool, you may include this file under the ++# same distribution terms that you use for the rest of that program. ++# ++# GNU Libtool is distributed in the hope that it will be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++# General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with GNU Libtool; see the file COPYING. If not, a copy ++# can be downloaded from http://www.gnu.org/licenses/gpl.html, ++# or obtained by writing to the Free Software Foundation, Inc., ++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++# Usage: $progname [OPTION]... [MODE-ARG]... ++# ++# Provide generalized library-building support services. ++# ++# --config show all configuration variables ++# --debug enable verbose shell tracing ++# -n, --dry-run display commands without modifying any files ++# --features display basic configuration information and exit ++# --mode=MODE use operation mode MODE ++# --preserve-dup-deps don't remove duplicate dependency libraries ++# --quiet, --silent don't print informational messages ++# --no-quiet, --no-silent ++# print informational messages (default) ++# --no-warn don't display warning messages ++# --tag=TAG use configuration variables from tag TAG ++# -v, --verbose print more informational messages than default ++# --no-verbose don't print the extra informational messages ++# --version print version information ++# -h, --help, --help-all print short, long, or detailed 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) ++# $progname: (GNU libtool) 2.4.2 Debian-2.4.2-1ubuntu1 ++# automake: $automake_version ++# autoconf: $autoconf_version ++# ++# Report bugs to . ++# GNU libtool home page: . ++# General help using GNU software: . ++ ++PROGRAM=libtool ++PACKAGE=libtool ++VERSION="2.4.2 Debian-2.4.2-1ubuntu1" ++TIMESTAMP="" ++package_revision=1.3337 ++ ++# 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 ++ ++# A function that is used when there is no print builtin or printf. ++func_fallback_echo () ++{ ++ eval 'cat <<_LTECHO_EOF ++$1 ++_LTECHO_EOF' ++} ++ ++# NLS nuisances: We save the old values to restore during execute mode. ++lt_user_locale= ++lt_safe_locale= ++for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES ++do ++ eval "if test \"\${$lt_var+set}\" = set; then ++ save_$lt_var=\$$lt_var ++ $lt_var=C ++ export $lt_var ++ lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" ++ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" ++ fi" ++done ++LC_ALL=C ++LANGUAGE=C ++export LANGUAGE LC_ALL ++ ++$lt_unset CDPATH ++ ++ ++# 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" ++ ++ ++ ++: ${CP="cp -f"} ++test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} ++: ${MAKE="make"} ++: ${MKDIR="mkdir"} ++: ${MV="mv -f"} ++: ${RM="rm -f"} ++: ${SHELL="${CONFIG_SHELL-/bin/sh}"} ++: ${Xsed="$SED -e 1s/^X//"} ++ ++# Global variables: ++EXIT_SUCCESS=0 ++EXIT_FAILURE=1 ++EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. ++EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. ++ ++exit_status=$EXIT_SUCCESS ++ ++# Make sure IFS has a sensible default ++lt_nl=' ++' ++IFS=" $lt_nl" ++ ++dirname="s,/[^/]*$,," ++basename="s,^.*/,," ++ ++# func_dirname file append nondir_replacement ++# Compute the dirname of FILE. If nonempty, add APPEND to the result, ++# otherwise set result to NONDIR_REPLACEMENT. ++func_dirname () ++{ ++ func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` ++ if test "X$func_dirname_result" = "X${1}"; then ++ func_dirname_result="${3}" ++ else ++ func_dirname_result="$func_dirname_result${2}" ++ fi ++} # func_dirname may be replaced by extended shell implementation ++ ++ ++# func_basename file ++func_basename () ++{ ++ func_basename_result=`$ECHO "${1}" | $SED "$basename"` ++} # func_basename may be replaced by extended shell implementation ++ ++ ++# func_dirname_and_basename file append nondir_replacement ++# perform func_basename and func_dirname in a single function ++# call: ++# dirname: Compute the dirname of FILE. If nonempty, ++# add APPEND to the result, otherwise set result ++# to NONDIR_REPLACEMENT. ++# value returned in "$func_dirname_result" ++# basename: Compute filename of FILE. ++# value retuned in "$func_basename_result" ++# Implementation must be kept synchronized with func_dirname ++# and func_basename. For efficiency, we do not delegate to ++# those functions but instead duplicate the functionality here. ++func_dirname_and_basename () ++{ ++ # Extract subdirectory from the argument. ++ func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` ++ if test "X$func_dirname_result" = "X${1}"; then ++ func_dirname_result="${3}" ++ else ++ func_dirname_result="$func_dirname_result${2}" ++ fi ++ func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` ++} # func_dirname_and_basename may be replaced by extended shell implementation ++ ++ ++# func_stripname prefix suffix name ++# strip PREFIX and SUFFIX off of NAME. ++# PREFIX and SUFFIX must not contain globbing or regex special ++# characters, hashes, percent signs, but SUFFIX may contain a leading ++# dot (in which case that matches only a dot). ++# func_strip_suffix prefix name ++func_stripname () ++{ ++ case ${2} in ++ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; ++ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; ++ esac ++} # func_stripname may be replaced by extended shell implementation ++ ++ ++# These SED scripts presuppose an absolute path with a trailing slash. ++pathcar='s,^/\([^/]*\).*$,\1,' ++pathcdr='s,^/[^/]*,,' ++removedotparts=':dotsl ++ s@/\./@/@g ++ t dotsl ++ s,/\.$,/,' ++collapseslashes='s@/\{1,\}@/@g' ++finalslash='s,/*$,/,' ++ ++# 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. ++# value returned in "$func_normal_abspath_result" ++func_normal_abspath () ++{ ++ # 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 "$removedotparts" -e "$collapseslashes" -e "$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 "$pathcar"` ++ func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ ++ -e "$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_normal_abspath_result=$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_relative_path SRCDIR DSTDIR ++# generates a relative path from SRCDIR to DSTDIR, with a trailing ++# slash if non-empty, suitable for immediately appending a filename ++# without needing to append a separator. ++# value returned in "$func_relative_path_result" ++func_relative_path () ++{ ++ 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 "x$func_relative_path_tlibdir" = x ; 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 "x$func_stripname_result" != x ; then ++ func_relative_path_result=${func_relative_path_result}/${func_stripname_result} ++ fi ++ ++ # Normalisation. If bindir is libdir, return empty string, ++ # else relative path ending with a slash; either way, target ++ # file name can be directly appended. ++ if test ! -z "$func_relative_path_result"; then ++ func_stripname './' '' "$func_relative_path_result/" ++ func_relative_path_result=$func_stripname_result ++ fi ++} ++ ++# The name of this program: ++func_dirname_and_basename "$progpath" ++progname=$func_basename_result ++ ++# Make sure we have an absolute path for reexecution: ++case $progpath in ++ [\\/]*|[A-Za-z]:\\*) ;; ++ *[\\/]*) ++ progdir=$func_dirname_result ++ progdir=`cd "$progdir" && pwd` ++ progpath="$progdir/$progname" ++ ;; ++ *) ++ save_IFS="$IFS" ++ IFS=${PATH_SEPARATOR-:} ++ for progdir in $PATH; do ++ IFS="$save_IFS" ++ test -x "$progdir/$progname" && break ++ done ++ IFS="$save_IFS" ++ test -n "$progdir" || progdir=`pwd` ++ progpath="$progdir/$progname" ++ ;; ++esac ++ ++# Sed substitution that helps us do robust quoting. It backslashifies ++# metacharacters that are still active within double-quoted strings. ++Xsed="${SED}"' -e 1s/^X//' ++sed_quote_subst='s/\([`"$\\]\)/\\\1/g' ++ ++# Same as above, but do not quote variable references. ++double_quote_subst='s/\(["`\\]\)/\\\1/g' ++ ++# 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 ++# which contains forward slashes, into one that contains ++# (escaped) backslashes. A very naive implementation. ++lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' ++ ++# Re-`\' parameter expansions in output of double_quote_subst that were ++# `\'-ed in input to the same. If an odd number of `\' preceded a '$' ++# in input to double_quote_subst, that '$' was protected from expansion. ++# Since each input `\' is now two `\'s, look for any number of runs of ++# four `\'s followed by two `\'s and then a '$'. `\' that '$'. ++bs='\\' ++bs2='\\\\' ++bs4='\\\\\\\\' ++dollar='\$' ++sed_double_backslash="\ ++ s/$bs4/&\\ ++/g ++ s/^$bs2$dollar/$bs&/ ++ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g ++ s/\n//g" ++ ++# Standard options: ++opt_dry_run=false ++opt_help=false ++opt_quiet=false ++opt_verbose=false ++opt_warning=: ++ ++# func_echo arg... ++# Echo program name prefixed message, along with the current mode ++# name if it has been set yet. ++func_echo () ++{ ++ $ECHO "$progname: ${opt_mode+$opt_mode: }$*" ++} ++ ++# func_verbose arg... ++# Echo program name prefixed message in verbose mode only. ++func_verbose () ++{ ++ $opt_verbose && func_echo ${1+"$@"} ++ ++ # A bug in bash halts the script if the last line of a function ++ # fails when set -e is in force, so we need another command to ++ # work around that: ++ : ++} ++ ++# func_echo_all arg... ++# Invoke $ECHO with all args, space-separated. ++func_echo_all () ++{ ++ $ECHO "$*" ++} ++ ++# func_error arg... ++# Echo program name prefixed message to standard error. ++func_error () ++{ ++ $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 ++} ++ ++# func_warning arg... ++# Echo program name prefixed warning message to standard error. ++func_warning () ++{ ++ $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 ++ ++ # bash bug again: ++ : ++} ++ ++# func_fatal_error arg... ++# Echo program name prefixed message to standard error, and exit. ++func_fatal_error () ++{ ++ func_error ${1+"$@"} ++ exit $EXIT_FAILURE ++} ++ ++# func_fatal_help arg... ++# Echo program name prefixed message to standard error, followed by ++# a help hint, and exit. ++func_fatal_help () ++{ ++ func_error ${1+"$@"} ++ func_fatal_error "$help" ++} ++help="Try \`$progname --help' for more information." ## default ++ ++ ++# func_grep expression filename ++# Check whether EXPRESSION matches any line of FILENAME, without output. ++func_grep () ++{ ++ $GREP "$1" "$2" >/dev/null 2>&1 ++} ++ ++ ++# func_mkdir_p directory-path ++# Make sure the entire path to DIRECTORY-PATH is available. ++func_mkdir_p () ++{ ++ my_directory_path="$1" ++ my_dir_list= ++ ++ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then ++ ++ # Protect directory names starting with `-' ++ case $my_directory_path in ++ -*) my_directory_path="./$my_directory_path" ;; ++ esac ++ ++ # While some portion of DIR does not yet exist... ++ while test ! -d "$my_directory_path"; do ++ # ...make a list in topmost first order. Use a colon delimited ++ # list incase some portion of path contains whitespace. ++ my_dir_list="$my_directory_path:$my_dir_list" ++ ++ # If the last portion added has no slash in it, the list is done ++ case $my_directory_path in */*) ;; *) break ;; esac ++ ++ # ...otherwise throw away the child directory and loop ++ my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` ++ done ++ my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` ++ ++ save_mkdir_p_IFS="$IFS"; IFS=':' ++ for my_dir in $my_dir_list; do ++ IFS="$save_mkdir_p_IFS" ++ # mkdir can fail with a `File exist' error if two processes ++ # try to create one of the directories concurrently. Don't ++ # stop in that case! ++ $MKDIR "$my_dir" 2>/dev/null || : ++ done ++ IFS="$save_mkdir_p_IFS" ++ ++ # Bail out if we (or some other process) failed to create a directory. ++ test -d "$my_directory_path" || \ ++ func_fatal_error "Failed to create \`$1'" ++ fi ++} ++ ++ ++# func_mktempdir [string] ++# Make a temporary directory that won't clash with other running ++# libtool processes, and avoids race conditions if possible. If ++# given, STRING is the basename for that directory. ++func_mktempdir () ++{ ++ my_template="${TMPDIR-/tmp}/${1-$progname}" ++ ++ if test "$opt_dry_run" = ":"; then ++ # Return a directory name, but don't create it in dry-run mode ++ my_tmpdir="${my_template}-$$" ++ else ++ ++ # If mktemp works, use that first and foremost ++ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` ++ ++ if test ! -d "$my_tmpdir"; then ++ # Failing that, at least try and use $RANDOM to avoid a race ++ my_tmpdir="${my_template}-${RANDOM-0}$$" ++ ++ save_mktempdir_umask=`umask` ++ umask 0077 ++ $MKDIR "$my_tmpdir" ++ umask $save_mktempdir_umask ++ fi ++ ++ # If we're not in dry-run mode, bomb out on failure ++ test -d "$my_tmpdir" || \ ++ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" ++ fi ++ ++ $ECHO "$my_tmpdir" ++} ++ ++ ++# func_quote_for_eval arg ++# Aesthetically quote ARG to be evaled later. ++# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT ++# is double-quoted, suitable for a subsequent eval, whereas ++# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters ++# which are still active within double quotes backslashified. ++func_quote_for_eval () ++{ ++ case $1 in ++ *[\\\`\"\$]*) ++ func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; ++ *) ++ func_quote_for_eval_unquoted_result="$1" ;; ++ esac ++ ++ case $func_quote_for_eval_unquoted_result in ++ # Double-quote args containing shell metacharacters to delay ++ # word splitting, command substitution and and variable ++ # expansion for a subsequent eval. ++ # Many Bourne shells cannot handle close brackets correctly ++ # in scan sets, so we specify it separately. ++ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") ++ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ++ ;; ++ *) ++ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" ++ esac ++} ++ ++ ++# func_quote_for_expand arg ++# Aesthetically quote ARG to be evaled later; same as above, ++# but do not quote variable references. ++func_quote_for_expand () ++{ ++ case $1 in ++ *[\\\`\"]*) ++ my_arg=`$ECHO "$1" | $SED \ ++ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; ++ *) ++ my_arg="$1" ;; ++ esac ++ ++ case $my_arg in ++ # Double-quote args containing shell metacharacters to delay ++ # word splitting and command substitution for a subsequent eval. ++ # Many Bourne shells cannot handle close brackets correctly ++ # in scan sets, so we specify it separately. ++ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") ++ my_arg="\"$my_arg\"" ++ ;; ++ esac ++ ++ func_quote_for_expand_result="$my_arg" ++} ++ ++ ++# func_show_eval cmd [fail_exp] ++# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is ++# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP ++# is given, then evaluate it. ++func_show_eval () ++{ ++ my_cmd="$1" ++ my_fail_exp="${2-:}" ++ ++ ${opt_silent-false} || { ++ func_quote_for_expand "$my_cmd" ++ eval "func_echo $func_quote_for_expand_result" ++ } ++ ++ if ${opt_dry_run-false}; then :; else ++ eval "$my_cmd" ++ my_status=$? ++ if test "$my_status" -eq 0; then :; else ++ eval "(exit $my_status); $my_fail_exp" ++ fi ++ fi ++} ++ ++ ++# func_show_eval_locale cmd [fail_exp] ++# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is ++# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP ++# is given, then evaluate it. Use the saved locale for evaluation. ++func_show_eval_locale () ++{ ++ my_cmd="$1" ++ my_fail_exp="${2-:}" ++ ++ ${opt_silent-false} || { ++ func_quote_for_expand "$my_cmd" ++ eval "func_echo $func_quote_for_expand_result" ++ } ++ ++ if ${opt_dry_run-false}; then :; else ++ eval "$lt_user_locale ++ $my_cmd" ++ my_status=$? ++ eval "$lt_safe_locale" ++ if test "$my_status" -eq 0; then :; else ++ eval "(exit $my_status); $my_fail_exp" ++ fi ++ fi ++} ++ ++# func_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 () ++{ ++ case $1 in ++ [0-9]* | *[!a-zA-Z0-9_]*) ++ func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ++ ;; ++ * ) ++ func_tr_sh_result=$1 ++ ;; ++ esac ++} ++ ++ ++# func_version ++# Echo version message to standard output and exit. ++func_version () ++{ ++ $opt_debug ++ ++ $SED -n '/(C)/!b go ++ :more ++ /\./!{ ++ N ++ s/\n# / / ++ b more ++ } ++ :go ++ /^# '$PROGRAM' (GNU /,/# warranty; / { ++ s/^# // ++ s/^# *$// ++ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ ++ p ++ }' < "$progpath" ++ exit $? ++} ++ ++# func_usage ++# Echo short help message to standard output and exit. ++func_usage () ++{ ++ $opt_debug ++ ++ $SED -n '/^# Usage:/,/^# *.*--help/ { ++ s/^# // ++ s/^# *$// ++ s/\$progname/'$progname'/ ++ p ++ }' < "$progpath" ++ echo ++ $ECHO "run \`$progname --help | more' for full usage" ++ exit $? ++} ++ ++# func_help [NOEXIT] ++# Echo long help message to standard output and exit, ++# unless 'noexit' is passed as argument. ++func_help () ++{ ++ $opt_debug ++ ++ $SED -n '/^# Usage:/,/# Report bugs to/ { ++ :print ++ s/^# // ++ s/^# *$// ++ s*\$progname*'$progname'* ++ s*\$host*'"$host"'* ++ s*\$SHELL*'"$SHELL"'* ++ s*\$LTCC*'"$LTCC"'* ++ s*\$LTCFLAGS*'"$LTCFLAGS"'* ++ s*\$LD*'"$LD"'* ++ s/\$with_gnu_ld/'"$with_gnu_ld"'/ ++ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ ++ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ ++ p ++ d ++ } ++ /^# .* home page:/b print ++ /^# General help using/b print ++ ' < "$progpath" ++ ret=$? ++ if test -z "$1"; then ++ exit $ret ++ fi ++} ++ ++# func_missing_arg argname ++# Echo program name prefixed message to standard error and set global ++# exit_cmd. ++func_missing_arg () ++{ ++ $opt_debug ++ ++ func_error "missing argument for $1." ++ exit_cmd=exit ++} ++ ++ ++# 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. ++func_split_short_opt () ++{ ++ my_sed_short_opt='1s/^\(..\).*$/\1/;q' ++ my_sed_short_rest='1s/^..\(.*\)$/\1/;q' ++ ++ func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` ++ func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` ++} # func_split_short_opt may be replaced by extended shell implementation ++ ++ ++# func_split_long_opt longopt ++# Set func_split_long_opt_name and func_split_long_opt_arg shell ++# variables after splitting LONGOPT at the `=' sign. ++func_split_long_opt () ++{ ++ my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' ++ my_sed_long_arg='1s/^--[^=]*=//' ++ ++ func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` ++ func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` ++} # func_split_long_opt may be replaced by extended shell implementation ++ ++exit_cmd=: ++ ++ ++ ++ ++ ++magic="%%%MAGIC variable%%%" ++magic_exe="%%%MAGIC EXE variable%%%" ++ ++# Global variables. ++nonopt= ++preserve_args= ++lo2o="s/\\.lo\$/.${objext}/" ++o2lo="s/\\.${objext}\$/.lo/" ++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= ++ ++# func_append var value ++# Append VALUE to the end of shell variable VAR. ++func_append () ++{ ++ eval "${1}=\$${1}\${2}" ++} # func_append may be replaced by extended shell implementation ++ ++# func_append_quoted var value ++# Quote VALUE and append to the end of shell variable VAR, separated ++# by a space. ++func_append_quoted () ++{ ++ func_quote_for_eval "${2}" ++ eval "${1}=\$${1}\\ \$func_quote_for_eval_result" ++} # func_append_quoted may be replaced by extended shell implementation ++ ++ ++# func_arith arithmetic-term... ++func_arith () ++{ ++ func_arith_result=`expr "${@}"` ++} # func_arith may be replaced by extended shell implementation ++ ++ ++# func_len string ++# STRING may not start with a hyphen. ++func_len () ++{ ++ func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` ++} # func_len may be replaced by extended shell implementation ++ ++ ++# func_lo2o object ++func_lo2o () ++{ ++ func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` ++} # func_lo2o may be replaced by extended shell implementation ++ ++ ++# func_xform libobj-or-source ++func_xform () ++{ ++ func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` ++} # func_xform may be replaced by extended shell implementation ++ ++ ++# func_fatal_configuration arg... ++# Echo program name prefixed message to standard error, followed by ++# a configuration failure hint, and exit. ++func_fatal_configuration () ++{ ++ func_error ${1+"$@"} ++ func_error "See the $PACKAGE documentation for more information." ++ func_fatal_error "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 "$build_libtool_libs" = yes; then ++ echo "enable shared libraries" ++ else ++ echo "disable shared libraries" ++ fi ++ if test "$build_old_libs" = yes; 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 ++} ++ ++ ++# Shorthand for --mode=foo, only valid as the first argument ++case $1 in ++clean|clea|cle|cl) ++ shift; set dummy --mode clean ${1+"$@"}; shift ++ ;; ++compile|compil|compi|comp|com|co|c) ++ shift; set dummy --mode compile ${1+"$@"}; shift ++ ;; ++execute|execut|execu|exec|exe|ex|e) ++ shift; set dummy --mode execute ${1+"$@"}; shift ++ ;; ++finish|finis|fini|fin|fi|f) ++ shift; set dummy --mode finish ${1+"$@"}; shift ++ ;; ++install|instal|insta|inst|ins|in|i) ++ shift; set dummy --mode install ${1+"$@"}; shift ++ ;; ++link|lin|li|l) ++ shift; set dummy --mode link ${1+"$@"}; shift ++ ;; ++uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) ++ shift; set dummy --mode uninstall ${1+"$@"}; shift ++ ;; ++esac ++ ++ ++ ++# Option defaults: ++opt_debug=: ++opt_dry_run=false ++opt_config=false ++opt_preserve_dup_deps=false ++opt_features=false ++opt_finish=false ++opt_help=false ++opt_help_all=false ++opt_silent=: ++opt_warning=: ++opt_verbose=: ++opt_silent=false ++opt_verbose=false ++ ++ ++# Parse options once, thoroughly. This comes as soon as possible in the ++# script to make things like `--version' happen as quickly as we can. ++{ ++ # this just eases exit handling ++ while test $# -gt 0; do ++ opt="$1" ++ shift ++ case $opt in ++ --debug|-x) opt_debug='set -x' ++ func_echo "enabling shell trace mode" ++ $opt_debug ++ ;; ++ --dry-run|--dryrun|-n) ++ opt_dry_run=: ++ ;; ++ --config) ++ opt_config=: ++func_config ++ ;; ++ --dlopen|-dlopen) ++ optarg="$1" ++ opt_dlopen="${opt_dlopen+$opt_dlopen ++}$optarg" ++ shift ++ ;; ++ --preserve-dup-deps) ++ opt_preserve_dup_deps=: ++ ;; ++ --features) ++ opt_features=: ++func_features ++ ;; ++ --finish) ++ opt_finish=: ++set dummy --mode finish ${1+"$@"}; shift ++ ;; ++ --help) ++ opt_help=: ++ ;; ++ --help-all) ++ opt_help_all=: ++opt_help=': help-all' ++ ;; ++ --mode) ++ test $# = 0 && func_missing_arg $opt && break ++ optarg="$1" ++ opt_mode="$optarg" ++case $optarg in ++ # Valid mode arguments: ++ clean|compile|execute|finish|install|link|relink|uninstall) ;; ++ ++ # Catch anything else as an error ++ *) func_error "invalid argument for $opt" ++ exit_cmd=exit ++ break ++ ;; ++esac ++ shift ++ ;; ++ --no-silent|--no-quiet) ++ opt_silent=false ++func_append preserve_args " $opt" ++ ;; ++ --no-warning|--no-warn) ++ opt_warning=false ++func_append preserve_args " $opt" ++ ;; ++ --no-verbose) ++ opt_verbose=false ++func_append preserve_args " $opt" ++ ;; ++ --silent|--quiet) ++ opt_silent=: ++func_append preserve_args " $opt" ++ opt_verbose=false ++ ;; ++ --verbose|-v) ++ opt_verbose=: ++func_append preserve_args " $opt" ++opt_silent=false ++ ;; ++ --tag) ++ test $# = 0 && func_missing_arg $opt && break ++ optarg="$1" ++ opt_tag="$optarg" ++func_append preserve_args " $opt $optarg" ++func_enable_tag "$optarg" ++ shift ++ ;; ++ ++ -\?|-h) func_usage ;; ++ --help) func_help ;; ++ --version) func_version ;; ++ ++ # Separate optargs to long options: ++ --*=*) ++ func_split_long_opt "$opt" ++ set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} ++ shift ++ ;; ++ ++ # Separate non-argument short options: ++ -\?*|-h*|-n*|-v*) ++ func_split_short_opt "$opt" ++ set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} ++ shift ++ ;; ++ ++ --) break ;; ++ -*) func_fatal_help "unrecognized option \`$opt'" ;; ++ *) set dummy "$opt" ${1+"$@"}; shift; break ;; ++ esac ++ done ++ ++ # Validate options: ++ ++ # save first non-option argument ++ if test "$#" -gt 0; then ++ nonopt="$opt" ++ shift ++ fi ++ ++ # preserve --debug ++ test "$opt_debug" = : || func_append preserve_args " --debug" ++ ++ case $host in ++ *cygwin* | *mingw* | *pw32* | *cegcc*) ++ # don't eliminate duplications in $postdeps and $predeps ++ opt_duplicate_compiler_generated_deps=: ++ ;; ++ *) ++ opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ++ ;; ++ esac ++ ++ $opt_help || { ++ # Sanity checks first: ++ func_check_version_match ++ ++ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then ++ func_fatal_configuration "not configured to build any kind of library" ++ fi ++ ++ # Darwin sucks ++ eval std_shrext=\"$shrext_cmds\" ++ ++ # Only execute mode is allowed to have -dlopen flags. ++ if test -n "$opt_dlopen" && test "$opt_mode" != execute; then ++ func_error "unrecognized option \`-dlopen'" ++ $ECHO "$help" 1>&2 ++ exit $EXIT_FAILURE ++ fi ++ ++ # Change the help message to a mode-specific one. ++ generic_help="$help" ++ help="Try \`$progname --help --mode=$opt_mode' for more information." ++ } ++ ++ ++ # Bail if the options were screwed ++ $exit_cmd $EXIT_FAILURE ++} ++ ++ ++ ++ ++## ----------- ## ++## Main. ## ++## ----------- ## ++ ++# func_lalib_p file ++# True iff FILE is a libtool `.la' library or `.lo' object file. ++# This function is only a basic sanity check; it will hardly flush out ++# determined imposters. ++func_lalib_p () ++{ ++ test -f "$1" && ++ $SED -e 4q "$1" 2>/dev/null \ ++ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 ++} ++ ++# func_lalib_unsafe_p file ++# True iff FILE is a libtool `.la' library or `.lo' object file. ++# This function implements the same check as func_lalib_p without ++# resorting to external programs. To this end, it redirects stdin and ++# closes it afterwards, without saving the original file descriptor. ++# As a safety measure, use it only where a negative result would be ++# fatal anyway. Works if `file' does not exist. ++func_lalib_unsafe_p () ++{ ++ lalib_p=no ++ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then ++ for lalib_p_l in 1 2 3 4 ++ do ++ read lalib_p_line ++ case "$lalib_p_line" in ++ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; ++ esac ++ done ++ exec 0<&5 5<&- ++ fi ++ test "$lalib_p" = yes ++} ++ ++# func_ltwrapper_script_p file ++# True iff FILE is a libtool wrapper script ++# This function is only a basic sanity check; it will hardly flush out ++# determined imposters. ++func_ltwrapper_script_p () ++{ ++ func_lalib_p "$1" ++} ++ ++# func_ltwrapper_executable_p file ++# True iff FILE is a libtool wrapper executable ++# This function is only a basic sanity check; it will hardly flush out ++# determined imposters. ++func_ltwrapper_executable_p () ++{ ++ func_ltwrapper_exec_suffix= ++ case $1 in ++ *.exe) ;; ++ *) func_ltwrapper_exec_suffix=.exe ;; ++ esac ++ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 ++} ++ ++# func_ltwrapper_scriptname file ++# Assumes file is an ltwrapper_executable ++# uses $file to determine the appropriate filename for a ++# temporary ltwrapper_script. ++func_ltwrapper_scriptname () ++{ ++ func_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 () ++{ ++ $opt_debug ++ save_ifs=$IFS; IFS='~' ++ for cmd in $1; do ++ IFS=$save_ifs ++ eval cmd=\"$cmd\" ++ func_show_eval "$cmd" "${2-:}" ++ done ++ IFS=$save_ifs ++} ++ ++ ++# func_source file ++# Source FILE, adding directory component if necessary. ++# Note that it is not necessary on cygwin/mingw to append a dot to ++# FILE even if both FILE and FILE.exe exist: automatic-append-.exe ++# behavior happens only for exec(3), not for open(2)! Also, sourcing ++# `FILE.' does not work on cygwin managed mounts. ++func_source () ++{ ++ $opt_debug ++ case $1 in ++ */* | *\\*) . "$1" ;; ++ *) . "./$1" ;; ++ esac ++} ++ ++ ++# func_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 () ++{ ++ $opt_debug ++ 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 "$build_libtool_libs" = yes; then ++ write_lobj=\'${2}\' ++ else ++ write_lobj=none ++ fi ++ ++ if test "$build_old_libs" = yes; then ++ write_oldobj=\'${3}\' ++ else ++ write_oldobj=none ++ fi ++ ++ $opt_dry_run || { ++ cat >${write_libobj}T </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 "$lt_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 () ++{ ++ $opt_debug ++ # 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ # awkward: cmd appends spaces to result ++ func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | ++ $SED -e 's/[ ]*$//' -e "$lt_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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ $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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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_mode_compile arg... ++func_mode_compile () ++{ ++ $opt_debug ++ # 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 "$build_libtool_libs" != yes && \ ++ func_fatal_configuration "can not 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_for_eval "$libobj" ++ test "X$libobj" != "X$func_quote_for_eval_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 "$build_old_libs" = yes; then ++ removelist="$obj $lobj $libobj ${libobj}T" ++ else ++ removelist="$lobj $libobj ${libobj}T" ++ fi ++ ++ # On Cygwin there's no "real" PIC flag so we must build both object types ++ case $host_os in ++ cygwin* | mingw* | pw32* | os2* | cegcc*) ++ pic_mode=default ++ ;; ++ esac ++ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then ++ # non-PIC code in shared libraries is not supported ++ pic_mode=default ++ fi ++ ++ # Calculate the filename of the output object if compiler does ++ # not support -o with -c ++ if test "$compiler_c_o" = no; then ++ output_obj=`$ECHO "$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 "$need_locks" = yes; then ++ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do ++ func_echo "Waiting for $lockfile to be removed" ++ sleep 2 ++ done ++ elif test "$need_locks" = warn; then ++ if test -f "$lockfile"; then ++ $ECHO "\ ++*** ERROR, $lockfile exists and contains: ++`cat $lockfile 2>/dev/null` ++ ++This indicates that another process is trying to use the same ++temporary object file, and libtool could not work around it because ++your compiler does not support \`-c' and \`-o' together. If you ++repeat this compilation, it may succeed, by chance, but you had better ++avoid parallel builds (make -j) in this platform, or get a better ++compiler." ++ ++ $opt_dry_run || $RM $removelist ++ exit $EXIT_FAILURE ++ fi ++ 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_for_eval "$srcfile" ++ qsrcfile=$func_quote_for_eval_result ++ ++ # Only build a PIC object if we are building libtool libraries. ++ if test "$build_libtool_libs" = yes; then ++ # Without this assignment, base_compile gets emptied. ++ fbsd_hideous_sh_bug=$base_compile ++ ++ if test "$pic_mode" != no; then ++ command="$base_compile $qsrcfile $pic_flag" ++ else ++ # Don't build PIC code ++ command="$base_compile $qsrcfile" ++ fi ++ ++ func_mkdir_p "$xdir$objdir" ++ ++ if test -z "$output_obj"; then ++ # Place PIC objects in $objdir ++ func_append command " -o $lobj" ++ fi ++ ++ func_show_eval_locale "$command" \ ++ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' ++ ++ if test "$need_locks" = warn && ++ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then ++ $ECHO "\ ++*** ERROR, $lockfile contains: ++`cat $lockfile 2>/dev/null` ++ ++but it should contain: ++$srcfile ++ ++This indicates that another process is trying to use the same ++temporary object file, and libtool could not work around it because ++your compiler does not support \`-c' and \`-o' together. If you ++repeat this compilation, it may succeed, by chance, but you had better ++avoid parallel builds (make -j) in this platform, or get a better ++compiler." ++ ++ $opt_dry_run || $RM $removelist ++ exit $EXIT_FAILURE ++ fi ++ ++ # Just move the object if needed, then go on to compile the next one ++ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then ++ func_show_eval '$MV "$output_obj" "$lobj"' \ ++ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' ++ fi ++ ++ # Allow error messages only from the first compilation. ++ if test "$suppress_opt" = yes; then ++ suppress_output=' >/dev/null 2>&1' ++ fi ++ fi ++ ++ # Only build a position-dependent object if we build old libraries. ++ if test "$build_old_libs" = yes; then ++ if test "$pic_mode" != yes; then ++ # Don't build PIC code ++ command="$base_compile $qsrcfile$pie_flag" ++ else ++ command="$base_compile $qsrcfile $pic_flag" ++ fi ++ if test "$compiler_c_o" = yes; then ++ 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 "$need_locks" = warn && ++ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then ++ $ECHO "\ ++*** ERROR, $lockfile contains: ++`cat $lockfile 2>/dev/null` ++ ++but it should contain: ++$srcfile ++ ++This indicates that another process is trying to use the same ++temporary object file, and libtool could not work around it because ++your compiler does not support \`-c' and \`-o' together. If you ++repeat this compilation, it may succeed, by chance, but you had better ++avoid parallel builds (make -j) in this platform, or get a better ++compiler." ++ ++ $opt_dry_run || $RM $removelist ++ exit $EXIT_FAILURE ++ fi ++ ++ # Just move the object if needed ++ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then ++ func_show_eval '$MV "$output_obj" "$obj"' \ ++ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' ++ fi ++ fi ++ ++ $opt_dry_run || { ++ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" ++ ++ # Unlock the critical section if it was locked ++ if test "$need_locks" != no; then ++ removelist=$lockfile ++ $RM "$lockfile" ++ fi ++ } ++ ++ exit $EXIT_SUCCESS ++} ++ ++$opt_help || { ++ test "$opt_mode" = compile && 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 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 ++ -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 ++ -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 () ++{ ++ $opt_debug ++ # The first argument is the command name. ++ cmd="$nonopt" ++ test -z "$cmd" && \ ++ func_fatal_help "you must specify a COMMAND" ++ ++ # Handle -dlopen flags immediately. ++ for file in $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 test "X$opt_dry_run" = Xfalse; then ++ if test -n "$shlibpath_var"; then ++ # Export the shlibpath_var. ++ eval "export $shlibpath_var" ++ fi ++ ++ # Restore saved environment variables ++ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES ++ do ++ eval "if test \"\${save_$lt_var+set}\" = set; then ++ $lt_var=\$save_$lt_var; export $lt_var ++ else ++ $lt_unset $lt_var ++ fi" ++ done ++ ++ # Now prepare to actually exec the command. ++ exec_cmd="\$cmd$args" ++ else ++ # Display what would be done. ++ if test -n "$shlibpath_var"; then ++ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" ++ echo "export $shlibpath_var" ++ fi ++ $ECHO "$cmd$args" ++ exit $EXIT_SUCCESS ++ fi ++} ++ ++test "$opt_mode" = execute && func_mode_execute ${1+"$@"} ++ ++ ++# func_mode_finish arg... ++func_mode_finish () ++{ ++ $opt_debug ++ 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_silent && 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 "$opt_mode" = finish && func_mode_finish ${1+"$@"} ++ ++ ++# func_mode_install arg... ++func_mode_install () ++{ ++ $opt_debug ++ # There may be an optional sh(1) argument at the beginning of ++ # install_prog (especially on Windows NT). ++ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || ++ # Allow the use of GNU shtool's install command. ++ case $nonopt in *shtool*) :;; *) false;; esac; then ++ # Aesthetically quote it. ++ func_quote_for_eval "$nonopt" ++ install_prog="$func_quote_for_eval_result " ++ arg=$1 ++ shift ++ else ++ install_prog= ++ arg=$nonopt ++ fi ++ ++ # The real first argument should be the name of the installation program. ++ # Aesthetically quote it. ++ func_quote_for_eval "$arg" ++ func_append install_prog "$func_quote_for_eval_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=no ++ 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=yes ;; ++ -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$prev" = x-m && 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_for_eval "$arg" ++ func_append install_prog " $func_quote_for_eval_result" ++ if test -n "$arg2"; then ++ func_quote_for_eval "$arg2" ++ fi ++ func_append install_shared_prog " $func_quote_for_eval_result" ++ done ++ ++ test -z "$install_prog" && \ ++ func_fatal_help "you must specify an install program" ++ ++ test -n "$prev" && \ ++ func_fatal_help "the \`$prev' option requires an argument" ++ ++ if test -n "$install_override_mode" && $no_mode; then ++ if $install_cp; then :; else ++ func_quote_for_eval "$install_override_mode" ++ func_append install_shared_prog " -m $func_quote_for_eval_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=yes ++ if test "$isdir" = yes; then ++ destdir="$dest" ++ destname= ++ else ++ func_dirname_and_basename "$dest" "" "." ++ destdir="$func_dirname_result" ++ destname="$func_basename_result" ++ ++ # Not a directory, so check to see that there is only one file specified. ++ set dummy $files; shift ++ test "$#" -gt 1 && \ ++ func_fatal_help "\`$dest' is not a directory" ++ fi ++ case $destdir in ++ [\\/]* | [A-Za-z]:[\\/]*) ;; ++ *) ++ for file in $files; do ++ case $file in ++ *.lo) ;; ++ *) ++ func_fatal_help "\`$destdir' must be an absolute directory name" ++ ;; ++ esac ++ done ++ ;; ++ esac ++ ++ # This variable tells wrapper scripts just to set variables rather ++ # than running their programs. ++ libtool_install_magic="$magic" ++ ++ staticlibs= ++ future_libdirs= ++ current_libdirs= ++ for file in $files; do ++ ++ # Do each installation. ++ case $file in ++ *.$libext) ++ # Do the static libraries later. ++ 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 ++ ;; ++ 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 "$build_old_libs" = yes; then ++ # Deduce the name of the old-style object file. ++ func_lo2o "$file" ++ staticobj=$func_lo2o_result ++ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' ++ fi ++ exit $EXIT_SUCCESS ++ ;; ++ ++ *) ++ # Figure out destination file name, if it wasn't already specified. ++ if test -n "$destname"; then ++ destfile="$destdir/$destname" ++ else ++ func_basename "$file" ++ destfile="$func_basename_result" ++ destfile="$destdir/$destfile" ++ fi ++ ++ # If the file is missing, and there is a .exe on the end, strip it ++ # because it is most likely a libtool script we actually want to ++ # install ++ stripped_ext="" ++ case $file in ++ *.exe) ++ if test ! -f "$file"; then ++ func_stripname '' '.exe' "$file" ++ file=$func_stripname_result ++ stripped_ext=".exe" ++ fi ++ ;; ++ esac ++ ++ # Do a test to see if this is really a libtool program. ++ case $host in ++ *cygwin* | *mingw*) ++ if func_ltwrapper_executable_p "$file"; then ++ func_ltwrapper_scriptname "$file" ++ wrapper=$func_ltwrapper_scriptname_result ++ else ++ func_stripname '' '.exe' "$file" ++ wrapper=$func_stripname_result ++ fi ++ ;; ++ *) ++ wrapper=$file ++ ;; ++ esac ++ if func_ltwrapper_script_p "$wrapper"; then ++ notinst_deplibs= ++ relink_command= ++ ++ func_source "$wrapper" ++ ++ # Check the variables that should have been set. ++ test -z "$generated_by_libtool_version" && \ ++ func_fatal_error "invalid libtool wrapper script \`$wrapper'" ++ ++ finalize=yes ++ for lib in $notinst_deplibs; do ++ # Check to see that each library is installed. ++ libdir= ++ if test -f "$lib"; then ++ func_source "$lib" ++ fi ++ libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test ++ if test -n "$libdir" && test ! -f "$libfile"; then ++ func_warning "\`$lib' has not been installed in \`$libdir'" ++ finalize=no ++ fi ++ done ++ ++ relink_command= ++ func_source "$wrapper" ++ ++ outputname= ++ if test "$fast_install" = no && test -n "$relink_command"; then ++ $opt_dry_run || { ++ if test "$finalize" = yes; then ++ tmpdir=`func_mktempdir` ++ func_basename "$file$stripped_ext" ++ file="$func_basename_result" ++ outputname="$tmpdir/$file" ++ # Replace the output file specification. ++ relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` ++ ++ $opt_silent || { ++ func_quote_for_expand "$relink_command" ++ eval "func_echo $func_quote_for_expand_result" ++ } ++ if eval "$relink_command"; then : ++ else ++ func_error "error: relink \`$file' with the above command before installing it" ++ $opt_dry_run || ${RM}r "$tmpdir" ++ continue ++ fi ++ file="$outputname" ++ else ++ func_warning "cannot relink \`$file'" ++ fi ++ } ++ else ++ # Install the binary that we compiled earlier. ++ file=`$ECHO "$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 "$opt_mode" = install && func_mode_install ${1+"$@"} ++ ++ ++# func_generate_dlsyms outputname originator pic_p ++# Extract symbols from dlprefiles and create ${outputname}S.o with ++# a dlpreopen symbol table. ++func_generate_dlsyms () ++{ ++ $opt_debug ++ my_outputname="$1" ++ my_originator="$2" ++ my_pic_p="${3-no}" ++ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` ++ my_dlsyms= ++ ++ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then ++ if test -n "$NM" && test -n "$global_symbol_pipe"; then ++ my_dlsyms="${my_outputname}S.c" ++ else ++ func_error "not configured to extract global symbols from dlpreopened files" ++ fi ++ fi ++ ++ if test -n "$my_dlsyms"; then ++ case $my_dlsyms in ++ "") ;; ++ *.c) ++ # Discover the nlist of each of the dlfiles. ++ nlist="$output_objdir/${my_outputname}.nm" ++ ++ func_show_eval "$RM $nlist ${nlist}S ${nlist}T" ++ ++ # Parse the name list into a source file. ++ func_verbose "creating $output_objdir/$my_dlsyms" ++ ++ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ ++/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ ++/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ ++ ++#ifdef __cplusplus ++extern \"C\" { ++#endif ++ ++#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 con'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 ++ ++/* External symbol declarations for the compiler. */\ ++" ++ ++ if test "$dlself" = yes; then ++ func_verbose "generating symbol list for \`$output'" ++ ++ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" ++ ++ # Add our own program objects to the symbol list. ++ progfiles=`$ECHO "$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 ++ ++ 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[]; ++LT_DLSYM_CONST lt_dlsymlist ++lt_${my_prefix}_LTX_preloaded_symbols[] = ++{\ ++ { \"$my_originator\", (void *) 0 }," ++ ++ case $need_lib_prefix in ++ no) ++ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ++ ;; ++ *) ++ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ++ ;; ++ esac ++ echo >> "$output_objdir/$my_dlsyms" "\ ++ {0, (void *) 0} ++}; ++ ++/* This works around a problem in FreeBSD linker */ ++#ifdef FREEBSD_WORKAROUND ++static const void *lt_preloaded_setup() { ++ return lt_${my_prefix}_LTX_preloaded_symbols; ++} ++#endif ++ ++#ifdef __cplusplus ++} ++#endif\ ++" ++ } # !$opt_dry_run ++ ++ pic_flag_for_symtable= ++ case "$compile_command " in ++ *" -static "*) ;; ++ *) ++ case $host in ++ # compiling the symbol table file with pic_flag works around ++ # a FreeBSD bug that causes programs to crash when -lm is ++ # linked before any other PIC object. But we must not use ++ # pic_flag when linking with -static. The problem exists in ++ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. ++ *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) ++ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; ++ *-*-hpux*) ++ pic_flag_for_symtable=" $pic_flag" ;; ++ *) ++ if test "X$my_pic_p" != Xno; then ++ pic_flag_for_symtable=" $pic_flag" ++ fi ++ ;; ++ esac ++ ;; ++ esac ++ symtab_cflags= ++ for arg in $LTCFLAGS; do ++ case $arg in ++ -pie | -fpie | -fPIE) ;; ++ *) 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"' ++ ++ # 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_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 () ++{ ++ $opt_debug ++ win32_libid_type="unknown" ++ win32_fileres=`file -L $1 2>/dev/null` ++ case $win32_fileres in ++ *ar\ archive\ import\ library*) # definitely import ++ win32_libid_type="x86 archive import" ++ ;; ++ *ar\ archive*) # could be an import, or static ++ # 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 ++ 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 ++ } ++ }'` ++ 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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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 which possess that section. Heuristic: eliminate ++ # all those which 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_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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ 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_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 () ++{ ++ $opt_debug ++ 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 () ++{ ++ $opt_debug ++ f_ex_an_ar_dir="$1"; shift ++ f_ex_an_ar_oldlib="$1" ++ if test "$lock_old_archive_extraction" = yes; 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 "$lock_old_archive_extraction" = yes; 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 () ++{ ++ $opt_debug ++ my_gentop="$1"; shift ++ my_oldlibs=${1+"$@"} ++ my_oldobjs="" ++ my_xlib="" ++ my_xabs="" ++ my_xdir="" ++ ++ for my_xlib in $my_oldlibs; do ++ # Extract the objects. ++ case $my_xlib in ++ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; ++ *) my_xabs=`pwd`"/$my_xlib" ;; ++ esac ++ func_basename "$my_xlib" ++ my_xlib="$func_basename_result" ++ my_xlib_u=$my_xlib ++ while :; do ++ case " $extracted_archives " in ++ *" $my_xlib_u "*) ++ func_arith $extracted_serial + 1 ++ extracted_serial=$func_arith_result ++ my_xlib_u=lt$extracted_serial-$my_xlib ;; ++ *) break ;; ++ esac ++ done ++ extracted_archives="$extracted_archives $my_xlib_u" ++ my_xdir="$my_gentop/$my_xlib_u" ++ ++ func_mkdir_p "$my_xdir" ++ ++ case $host in ++ *-darwin*) ++ func_verbose "Extracting $my_xabs" ++ # Do not bother doing anything if just a dry run ++ $opt_dry_run || { ++ darwin_orig_dir=`pwd` ++ cd $my_xdir || exit $? ++ darwin_archive=$my_xabs ++ darwin_curdir=`pwd` ++ darwin_base_archive=`basename "$darwin_archive"` ++ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` ++ if test -n "$darwin_arches"; then ++ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` ++ darwin_arch= ++ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" ++ for darwin_arch in $darwin_arches ; do ++ func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" ++ $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" ++ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" ++ func_extract_an_archive "`pwd`" "${darwin_base_archive}" ++ cd "$darwin_curdir" ++ $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" ++ done # $darwin_arches ++ ## Okay now we've a bunch of thin objects, gotta fatten them up :) ++ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` ++ darwin_file= ++ darwin_files= ++ for darwin_file in $darwin_filelist; do ++ darwin_files=`find unfat-$$ -name $darwin_file -print | 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 in which 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$TIMESTAMP) $VERSION ++# ++# The $output program cannot be directly executed until all the libtool ++# libraries that it depends on are installed. ++# ++# This wrapper script should never be moved out of the build directory. ++# If it is, it will not operate correctly. ++ ++# Sed substitution that helps us do robust quoting. It backslashifies ++# metacharacters that are still active within double-quoted strings. ++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\"" ++ ++ qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` ++ $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/ which is used only on ++# windows platforms, and (c) all begin with the string "--lt-" ++# (application programs are unlikely to have options which 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$TIMESTAMP) $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 "$fast_install" = yes; then ++ $ECHO "\ ++ program=lt-'$outputname'$exeext ++ progdir=\"\$thisdir/$objdir\" ++ ++ if test ! -f \"\$progdir/\$program\" || ++ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ ++ test \"X\$file\" != \"X\$progdir/\$program\"; }; then ++ ++ file=\"\$\$-\$program\" ++ ++ if test ! -d \"\$progdir\"; then ++ $MKDIR \"\$progdir\" ++ else ++ $RM \"\$progdir/\$file\" ++ fi" ++ ++ $ECHO "\ ++ ++ # relink executable if necessary ++ if test -n \"\$relink_command\"; then ++ if relink_command_output=\`eval \$relink_command 2>&1\`; then : ++ else ++ $ECHO \"\$relink_command_output\" >&2 ++ $RM \"\$progdir/\$file\" ++ exit 1 ++ fi ++ fi ++ ++ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || ++ { $RM \"\$progdir/\$program\"; ++ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } ++ $RM \"\$progdir/\$file\" ++ fi" ++ else ++ $ECHO "\ ++ program='$outputname' ++ progdir=\"\$thisdir/$objdir\" ++" ++ fi ++ ++ $ECHO "\ ++ ++ if test -f \"\$progdir/\$program\"; then" ++ ++ # 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 "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then ++ $ECHO "\ ++ # Add our own library path to $shlibpath_var ++ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" ++ ++ # Some systems cannot cope with colon-terminated $shlibpath_var ++ # The second colon is a workaround for a bug in BeOS R4 sed ++ $shlibpath_var=\`\$ECHO \"\$$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 ++ ++/* 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 platforms) ... */ ++#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 ++# ifndef _INTPTR_T_DEFINED ++# define _INTPTR_T_DEFINED ++# define intptr_t int ++# endif ++#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 ((void *) 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]; ++ int 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 = 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 (strcmp (str, pat) == 0) ++ *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 ++ int len = strlen (name) + 1 + strlen (value) + 1; ++ char *str = XMALLOC (char, len); ++ sprintf (str, "%s=%s", name, value); ++ if (putenv (str) != EXIT_SUCCESS) ++ { ++ XFREE (str); ++ } ++#endif ++ } ++} ++ ++char * ++lt_extend_str (const char *orig_value, const char *add, int to_end) ++{ ++ char *new_value; ++ if (orig_value && *orig_value) ++ { ++ int orig_value_len = strlen (orig_value); ++ int add_len = strlen (add); ++ new_value = XMALLOC (char, add_len + orig_value_len + 1); ++ if (to_end) ++ { ++ strcpy (new_value, orig_value); ++ strcpy (new_value + orig_value_len, add); ++ } ++ else ++ { ++ strcpy (new_value, add); ++ strcpy (new_value + add_len, orig_value); ++ } ++ } ++ else ++ { ++ new_value = xstrdup (add); ++ } ++ return new_value; ++} ++ ++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 #' */ ++ int len = strlen (new_value); ++ while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) ++ { ++ new_value[len-1] = '\0'; ++ } ++ lt_setenv (name, new_value); ++ XFREE (new_value); ++ } ++} ++ ++void ++lt_update_lib_path (const char *name, const char *value) ++{ ++ 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 () ++{ ++ $opt_debug ++ case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in ++ *import*) : ;; ++ *) false ;; ++ esac ++} ++ ++# func_mode_link arg... ++func_mode_link () ++{ ++ $opt_debug ++ case $host in ++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) ++ # It is impossible to link a dll without this setting, and ++ # we shouldn't force the makefile maintainer to figure out ++ # which system we are compiling for in order to pass an extra ++ # flag for every libtool invocation. ++ # allow_undefined=no ++ ++ # FIXME: Unfortunately, there are problems with the above when trying ++ # to make a dll which has undefined symbols, in which case not ++ # even a static library is built. For now, we need to specify ++ # -no-undefined on the libtool link line when we can be certain ++ # that all symbols are satisfied, otherwise we get a static library. ++ allow_undefined=yes ++ ;; ++ *) ++ allow_undefined=yes ++ ;; ++ esac ++ libtool_args=$nonopt ++ base_compile="$nonopt $@" ++ compile_command=$nonopt ++ finalize_command=$nonopt ++ ++ compile_rpath= ++ finalize_rpath= ++ compile_shlibpath= ++ finalize_shlibpath= ++ convenience= ++ old_convenience= ++ deplibs= ++ old_deplibs= ++ compiler_flags= ++ linker_flags= ++ dllsearchpath= ++ lib_search_path=`pwd` ++ inst_prefix_dir= ++ new_inherited_linker_flags= ++ ++ avoid_version=no ++ bindir= ++ dlfiles= ++ dlprefiles= ++ dlself=no ++ export_dynamic=no ++ export_symbols= ++ export_symbols_regex= ++ generated= ++ libobjs= ++ ltlibs= ++ module=no ++ no_install=no ++ objs= ++ non_pic_objects= ++ precious_files_regex= ++ prefer_static_libs=no ++ preload=no ++ prev= ++ prevarg= ++ release= ++ rpath= ++ xrpath= ++ perm_rpath= ++ temp_rpath= ++ thread_safe=no ++ vinfo= ++ vinfo_number=no ++ weak_libs= ++ single_module="${wl}-single_module" ++ func_infer_tag $base_compile ++ ++ # We need to know -static, to get the right output filenames. ++ for arg ++ do ++ case $arg in ++ -shared) ++ test "$build_libtool_libs" != yes && \ ++ func_fatal_configuration "can not build a shared library" ++ build_old_libs=no ++ break ++ ;; ++ -all-static | -static | -static-libtool-libs) ++ case $arg in ++ -all-static) ++ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then ++ func_warning "complete static linking is impossible in this configuration" ++ fi ++ if test -n "$link_static_flag"; then ++ dlopen_self=$dlopen_self_static ++ fi ++ prefer_static_libs=yes ++ ;; ++ -static) ++ if test -z "$pic_flag" && test -n "$link_static_flag"; then ++ dlopen_self=$dlopen_self_static ++ fi ++ prefer_static_libs=built ++ ;; ++ -static-libtool-libs) ++ if test -z "$pic_flag" && test -n "$link_static_flag"; then ++ dlopen_self=$dlopen_self_static ++ fi ++ prefer_static_libs=yes ++ ;; ++ esac ++ build_libtool_libs=no ++ build_old_libs=yes ++ break ++ ;; ++ esac ++ done ++ ++ # See if our shared archives depend on static archives. ++ test -n "$old_archive_from_new_cmds" && build_old_libs=yes ++ ++ # Go through the arguments, transforming them on the way. ++ while test "$#" -gt 0; do ++ arg="$1" ++ shift ++ func_quote_for_eval "$arg" ++ qarg=$func_quote_for_eval_unquoted_result ++ func_append libtool_args " $func_quote_for_eval_result" ++ ++ # If the previous option needs an argument, assign it. ++ if test -n "$prev"; then ++ case $prev in ++ output) ++ func_append compile_command " @OUTPUT@" ++ func_append finalize_command " @OUTPUT@" ++ ;; ++ esac ++ ++ case $prev in ++ bindir) ++ bindir="$arg" ++ prev= ++ continue ++ ;; ++ dlfiles|dlprefiles) ++ if test "$preload" = no; then ++ # Add the symbol object into the linking commands. ++ func_append compile_command " @SYMFILE@" ++ func_append finalize_command " @SYMFILE@" ++ preload=yes ++ fi ++ case $arg in ++ *.la | *.lo) ;; # We handle these cases below. ++ force) ++ if test "$dlself" = no; then ++ dlself=needless ++ export_dynamic=yes ++ fi ++ prev= ++ continue ++ ;; ++ self) ++ if test "$prev" = dlprefiles; then ++ dlself=yes ++ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then ++ dlself=yes ++ else ++ dlself=needless ++ export_dynamic=yes ++ fi ++ prev= ++ continue ++ ;; ++ *) ++ if test "$prev" = dlfiles; then ++ 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 ++ ;; ++ 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 "$pic_object" = none && ++ test "$non_pic_object" = none; then ++ func_fatal_error "cannot find name of object for \`$arg'" ++ fi ++ ++ # Extract subdirectory from the argument. ++ func_dirname "$arg" "/" "" ++ xdir="$func_dirname_result" ++ ++ if test "$pic_object" != none; then ++ # Prepend the subdirectory the object is found in. ++ pic_object="$xdir$pic_object" ++ ++ if test "$prev" = dlfiles; then ++ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then ++ 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 "$prev" = dlprefiles; 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 "$non_pic_object" != none; then ++ # Prepend the subdirectory the object is found in. ++ non_pic_object="$xdir$non_pic_object" ++ ++ # A standard non-PIC object ++ func_append non_pic_objects " $non_pic_object" ++ if test -z "$pic_object" || test "$pic_object" = none ; then ++ arg="$non_pic_object" ++ fi ++ else ++ # If the PIC object exists, use it instead. ++ # $xdir was prepended to $pic_object above. ++ non_pic_object="$pic_object" ++ func_append non_pic_objects " $non_pic_object" ++ fi ++ else ++ # Only an error if not doing a dry-run. ++ if $opt_dry_run; then ++ # Extract subdirectory from the argument. ++ func_dirname "$arg" "/" "" ++ xdir="$func_dirname_result" ++ ++ func_lo2o "$arg" ++ pic_object=$xdir$objdir/$func_lo2o_result ++ non_pic_object=$xdir$func_lo2o_result ++ func_append libobjs " $pic_object" ++ func_append non_pic_objects " $non_pic_object" ++ else ++ func_fatal_error "\`$arg' is not a valid libtool object" ++ fi ++ fi ++ done ++ else ++ func_fatal_error "link input file \`$arg' does not exist" ++ fi ++ arg=$save_arg ++ prev= ++ continue ++ ;; ++ precious_regex) ++ precious_files_regex="$arg" ++ prev= ++ continue ++ ;; ++ release) ++ release="-$arg" ++ prev= ++ continue ++ ;; ++ rpath | xrpath) ++ # We need an absolute path. ++ case $arg in ++ [\\/]* | [A-Za-z]:[\\/]*) ;; ++ *) ++ func_fatal_error "only absolute run-paths are allowed" ++ ;; ++ esac ++ if test "$prev" = rpath; then ++ case "$rpath " in ++ *" $arg "*) ;; ++ *) 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 ++ ;; ++ 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$arg" = "X-export-symbols"; then ++ prev=expsyms ++ else ++ prev=expsyms_regex ++ fi ++ continue ++ ;; ++ ++ -framework) ++ prev=framework ++ continue ++ ;; ++ ++ -inst-prefix-dir) ++ prev=inst_prefix ++ continue ++ ;; ++ ++ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* ++ # so, if we see these flags be careful not to treat them like -L ++ -L[A-Z][A-Z]*:*) ++ case $with_gcc/$host in ++ no/*-*-irix* | /*-*-irix*) ++ func_append compile_command " $arg" ++ func_append finalize_command " $arg" ++ ;; ++ esac ++ continue ++ ;; ++ ++ -L*) ++ func_stripname "-L" '' "$arg" ++ 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$arg" = "X-lc" || test "X$arg" = "X-lm"; 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$arg" = "X-lc" && continue ++ ;; ++ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) ++ # Do not include libc due to us having libc/libc_r. ++ test "X$arg" = "X-lc" && continue ++ ;; ++ *-*-rhapsody* | *-*-darwin1.[012]) ++ # Rhapsody C and math libraries are in the System framework ++ func_append deplibs " System.ltframework" ++ continue ++ ;; ++ *-*-sco3.2v5* | *-*-sco5v6*) ++ # Causes problems with __ctype ++ test "X$arg" = "X-lc" && continue ++ ;; ++ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) ++ # Compiler inserts libc in the correct place for threads to work ++ test "X$arg" = "X-lc" && continue ++ ;; ++ esac ++ elif test "X$arg" = "X-lc_r"; then ++ case $host in ++ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) ++ # Do not include libc_r directly, use -pthread flag. ++ continue ++ ;; ++ esac ++ fi ++ func_append deplibs " $arg" ++ continue ++ ;; ++ ++ -module) ++ module=yes ++ continue ++ ;; ++ ++ # Tru64 UNIX uses -model [arg] to determine the layout of C++ ++ # classes, name mangling, and exception handling. ++ # Darwin uses the -arch flag to determine output architecture. ++ -model|-arch|-isysroot|--sysroot) ++ func_append compiler_flags " $arg" ++ func_append compile_command " $arg" ++ func_append finalize_command " $arg" ++ prev=xcompiler ++ continue ++ ;; ++ ++ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ ++ |-threads|-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 ++ ;; ++ ++ -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_for_eval "$flag" ++ func_append arg " $func_quote_for_eval_result" ++ func_append compiler_flags " $func_quote_for_eval_result" ++ done ++ IFS="$save_ifs" ++ func_stripname ' ' '' "$arg" ++ arg=$func_stripname_result ++ ;; ++ ++ -Wl,*) ++ func_stripname '-Wl,' '' "$arg" ++ args=$func_stripname_result ++ arg= ++ save_ifs="$IFS"; IFS=',' ++ for flag in $args; do ++ IFS="$save_ifs" ++ func_quote_for_eval "$flag" ++ func_append arg " $wl$func_quote_for_eval_result" ++ func_append compiler_flags " $wl$func_quote_for_eval_result" ++ func_append linker_flags " $func_quote_for_eval_result" ++ done ++ IFS="$save_ifs" ++ func_stripname ' ' '' "$arg" ++ arg=$func_stripname_result ++ ;; ++ ++ -Xcompiler) ++ prev=xcompiler ++ continue ++ ;; ++ ++ -Xlinker) ++ prev=xlinker ++ continue ++ ;; ++ ++ -XCClinker) ++ prev=xcclinker ++ continue ++ ;; ++ ++ # -msg_* for osf cc ++ -msg_*) ++ func_quote_for_eval "$arg" ++ arg="$func_quote_for_eval_result" ++ ;; ++ ++ # 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 ++ # @file GCC response files ++ # -tp=* Portland pgcc target processor selection ++ # --sysroot=* for sysroot support ++ # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization ++ -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*|-flto*|-fwhopr*|-fuse-linker-plugin) ++ func_quote_for_eval "$arg" ++ arg="$func_quote_for_eval_result" ++ func_append compile_command " $arg" ++ func_append finalize_command " $arg" ++ func_append compiler_flags " $arg" ++ continue ++ ;; ++ ++ # Some other compiler flag. ++ -* | +*) ++ func_quote_for_eval "$arg" ++ arg="$func_quote_for_eval_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 "$pic_object" = none && ++ test "$non_pic_object" = none; then ++ func_fatal_error "cannot find name of object for \`$arg'" ++ fi ++ ++ # Extract subdirectory from the argument. ++ func_dirname "$arg" "/" "" ++ xdir="$func_dirname_result" ++ ++ if test "$pic_object" != none; then ++ # Prepend the subdirectory the object is found in. ++ pic_object="$xdir$pic_object" ++ ++ if test "$prev" = dlfiles; then ++ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then ++ 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 "$prev" = dlprefiles; 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 "$non_pic_object" != none; then ++ # Prepend the subdirectory the object is found in. ++ non_pic_object="$xdir$non_pic_object" ++ ++ # A standard non-PIC object ++ func_append non_pic_objects " $non_pic_object" ++ if test -z "$pic_object" || test "$pic_object" = none ; then ++ arg="$non_pic_object" ++ fi ++ else ++ # If the PIC object exists, use it instead. ++ # $xdir was prepended to $pic_object above. ++ non_pic_object="$pic_object" ++ func_append non_pic_objects " $non_pic_object" ++ fi ++ else ++ # Only an error if not doing a dry-run. ++ if $opt_dry_run; then ++ # Extract subdirectory from the argument. ++ func_dirname "$arg" "/" "" ++ xdir="$func_dirname_result" ++ ++ func_lo2o "$arg" ++ pic_object=$xdir$objdir/$func_lo2o_result ++ non_pic_object=$xdir$func_lo2o_result ++ func_append libobjs " $pic_object" ++ func_append non_pic_objects " $non_pic_object" ++ else ++ func_fatal_error "\`$arg' is not a valid libtool object" ++ fi ++ fi ++ ;; ++ ++ *.$libext) ++ # An archive. ++ func_append deplibs " $arg" ++ func_append old_deplibs " $arg" ++ continue ++ ;; ++ ++ *.la) ++ # A libtool-controlled library. ++ ++ func_resolve_sysroot "$arg" ++ if test "$prev" = dlfiles; then ++ # This library was specified with -dlopen. ++ func_append dlfiles " $func_resolve_sysroot_result" ++ prev= ++ elif test "$prev" = dlprefiles; 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_for_eval "$arg" ++ arg="$func_quote_for_eval_result" ++ ;; ++ esac # arg ++ ++ # Now actually substitute the argument into the commands. ++ if test -n "$arg"; then ++ func_append compile_command " $arg" ++ func_append finalize_command " $arg" ++ fi ++ done # argument parsing loop ++ ++ test -n "$prev" && \ ++ func_fatal_help "the \`$prevarg' option requires an argument" ++ ++ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then ++ eval arg=\"$export_dynamic_flag_spec\" ++ func_append compile_command " $arg" ++ func_append finalize_command " $arg" ++ fi ++ ++ oldlibs= ++ # calculate the name of the file, without its directory ++ func_basename "$output" ++ outputname="$func_basename_result" ++ libobjs_save="$libobjs" ++ ++ if test -n "$shlibpath_var"; then ++ # get the directories listed in $shlibpath_var ++ eval shlib_search_path=\`\$ECHO \"\${$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\" ++ ++ 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 "$linkmode" = lib; then ++ libs="$predeps $libs $compiler_lib_search_path $postdeps" ++ ++ # Compute libraries that are listed more than once in $predeps ++ # $postdeps and mark them as special (i.e., whose duplicates are ++ # not to be eliminated). ++ pre_post_deps= ++ if $opt_duplicate_compiler_generated_deps; then ++ for pre_post_dep in $predeps $postdeps; do ++ case "$pre_post_deps " in ++ *" $pre_post_dep "*) 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=no ++ newdlfiles= ++ newdlprefiles= ++ passes="conv scan dlopen dlpreopen link" ++ ;; ++ *) passes="conv" ++ ;; ++ esac ++ ++ for pass in $passes; do ++ # The preopen pass in lib mode reverses $deplibs; put it back here ++ # so that -L comes before libs that need it for instance... ++ if test "$linkmode,$pass" = "lib,link"; then ++ ## FIXME: Find the place where the list is rebuilt in the wrong ++ ## order, and fix it there properly ++ tmp_deplibs= ++ for deplib in $deplibs; do ++ tmp_deplibs="$deplib $tmp_deplibs" ++ done ++ deplibs="$tmp_deplibs" ++ fi ++ ++ if test "$linkmode,$pass" = "lib,link" || ++ test "$linkmode,$pass" = "prog,scan"; then ++ libs="$deplibs" ++ deplibs= ++ fi ++ if test "$linkmode" = prog; then ++ case $pass in ++ dlopen) libs="$dlfiles" ;; ++ dlpreopen) libs="$dlprefiles" ;; ++ link) ++ libs="$deplibs %DEPLIBS%" ++ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ++ ;; ++ esac ++ fi ++ if test "$linkmode,$pass" = "lib,dlpreopen"; then ++ # Collect and forward deplibs of preopened libtool libs ++ for lib in $dlprefiles; do ++ # Ignore non-libtool-libs ++ dependency_libs= ++ 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 "$pass" = dlopen; then ++ # Collect dlpreopened libraries ++ save_deplibs="$deplibs" ++ deplibs= ++ fi ++ ++ for deplib in $libs; do ++ lib= ++ found=no ++ case $deplib in ++ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ ++ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) ++ if test "$linkmode,$pass" = "prog,link"; then ++ compile_deplibs="$deplib $compile_deplibs" ++ finalize_deplibs="$deplib $finalize_deplibs" ++ else ++ func_append compiler_flags " $deplib" ++ if test "$linkmode" = lib ; then ++ case "$new_inherited_linker_flags " in ++ *" $deplib "*) ;; ++ * ) func_append new_inherited_linker_flags " $deplib" ;; ++ esac ++ fi ++ fi ++ continue ++ ;; ++ -l*) ++ if test "$linkmode" != lib && test "$linkmode" != prog; then ++ func_warning "\`-l' is ignored for archives/objects" ++ continue ++ fi ++ func_stripname '-l' '' "$deplib" ++ name=$func_stripname_result ++ if test "$linkmode" = lib; then ++ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" ++ else ++ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" ++ fi ++ for searchdir in $searchdirs; do ++ for search_ext in .la $std_shrext .so .a; do ++ # Search the libtool library ++ lib="$searchdir/lib${name}${search_ext}" ++ if test -f "$lib"; then ++ if test "$search_ext" = ".la"; then ++ found=yes ++ else ++ found=no ++ fi ++ break 2 ++ fi ++ done ++ done ++ if test "$found" != yes; then ++ # deplib doesn't seem to be a libtool library ++ if test "$linkmode,$pass" = "prog,link"; then ++ compile_deplibs="$deplib $compile_deplibs" ++ finalize_deplibs="$deplib $finalize_deplibs" ++ else ++ deplibs="$deplib $deplibs" ++ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" ++ fi ++ continue ++ else # deplib is a libtool library ++ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, ++ # We need to do some special things here, and not later. ++ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then ++ case " $predeps $postdeps " in ++ *" $deplib "*) ++ if func_lalib_p "$lib"; then ++ library_names= ++ old_library= ++ func_source "$lib" ++ for l in $old_library $library_names; do ++ ll="$l" ++ done ++ if test "X$ll" = "X$old_library" ; then # only static version available ++ found=no ++ func_dirname "$lib" "" "." ++ ladir="$func_dirname_result" ++ lib=$ladir/$old_library ++ if test "$linkmode,$pass" = "prog,link"; then ++ compile_deplibs="$deplib $compile_deplibs" ++ finalize_deplibs="$deplib $finalize_deplibs" ++ else ++ deplibs="$deplib $deplibs" ++ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" ++ fi ++ continue ++ fi ++ fi ++ ;; ++ *) ;; ++ esac ++ fi ++ fi ++ ;; # -l ++ *.ltframework) ++ if test "$linkmode,$pass" = "prog,link"; then ++ compile_deplibs="$deplib $compile_deplibs" ++ finalize_deplibs="$deplib $finalize_deplibs" ++ else ++ deplibs="$deplib $deplibs" ++ if test "$linkmode" = lib ; then ++ case "$new_inherited_linker_flags " in ++ *" $deplib "*) ;; ++ * ) func_append new_inherited_linker_flags " $deplib" ;; ++ esac ++ fi ++ fi ++ continue ++ ;; ++ -L*) ++ case $linkmode in ++ lib) ++ deplibs="$deplib $deplibs" ++ test "$pass" = conv && continue ++ newdependency_libs="$deplib $newdependency_libs" ++ func_stripname '-L' '' "$deplib" ++ func_resolve_sysroot "$func_stripname_result" ++ func_append newlib_search_path " $func_resolve_sysroot_result" ++ ;; ++ prog) ++ if test "$pass" = conv; then ++ deplibs="$deplib $deplibs" ++ continue ++ fi ++ if test "$pass" = scan; then ++ deplibs="$deplib $deplibs" ++ else ++ compile_deplibs="$deplib $compile_deplibs" ++ finalize_deplibs="$deplib $finalize_deplibs" ++ fi ++ func_stripname '-L' '' "$deplib" ++ 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 "$pass" = link; 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 "$pass" = conv; then ++ deplibs="$deplib $deplibs" ++ continue ++ fi ++ case $linkmode in ++ lib) ++ # Linking convenience modules into shared libraries is allowed, ++ # but linking other static libraries is non-portable. ++ case " $dlpreconveniencelibs " in ++ *" $deplib "*) ;; ++ *) ++ valid_a_lib=no ++ case $deplibs_check_method in ++ match_pattern*) ++ set dummy $deplibs_check_method; shift ++ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` ++ if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ ++ | $EGREP "$match_pattern_regex" > /dev/null; then ++ valid_a_lib=yes ++ fi ++ ;; ++ pass_all) ++ valid_a_lib=yes ++ ;; ++ esac ++ if test "$valid_a_lib" != yes; then ++ echo ++ $ECHO "*** Warning: Trying to link with static lib archive $deplib." ++ echo "*** I have the capability to make that library automatically link in when" ++ echo "*** you link to this library. But I can only do this if you have a" ++ echo "*** shared version of the library, which you do not appear to have" ++ echo "*** because the file extensions .$libext of this argument makes me believe" ++ echo "*** that it is just a static archive that I should not use here." ++ else ++ echo ++ $ECHO "*** Warning: Linking the shared library $output against the" ++ $ECHO "*** static library $deplib is not portable!" ++ deplibs="$deplib $deplibs" ++ fi ++ ;; ++ esac ++ continue ++ ;; ++ prog) ++ if test "$pass" != link; then ++ deplibs="$deplib $deplibs" ++ else ++ compile_deplibs="$deplib $compile_deplibs" ++ finalize_deplibs="$deplib $finalize_deplibs" ++ fi ++ continue ++ ;; ++ esac # linkmode ++ ;; # *.$libext ++ *.lo | *.$objext) ++ if test "$pass" = conv; then ++ deplibs="$deplib $deplibs" ++ elif test "$linkmode" = prog; then ++ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then ++ # If there is no dlopen support or we're linking statically, ++ # we need to preload. ++ func_append newdlprefiles " $deplib" ++ compile_deplibs="$deplib $compile_deplibs" ++ finalize_deplibs="$deplib $finalize_deplibs" ++ else ++ func_append newdlfiles " $deplib" ++ fi ++ fi ++ continue ++ ;; ++ %DEPLIBS%) ++ alldeplibs=yes ++ continue ++ ;; ++ esac # case $deplib ++ ++ if test "$found" = yes || test -f "$lib"; then : ++ else ++ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" ++ fi ++ ++ # Check to see that this really is a libtool archive. ++ func_lalib_unsafe_p "$lib" \ ++ || func_fatal_error "\`$lib' is not a valid libtool archive" ++ ++ func_dirname "$lib" "" "." ++ ladir="$func_dirname_result" ++ ++ dlname= ++ dlopen= ++ dlpreopen= ++ libdir= ++ library_names= ++ old_library= ++ inherited_linker_flags= ++ # If the library was installed with an old release of libtool, ++ # it will not redefine variables installed, or shouldnotlink ++ installed=yes ++ shouldnotlink=no ++ avoidtemprpath= ++ ++ ++ # Read the .la file ++ func_source "$lib" ++ ++ # Convert "-framework foo" to "foo.ltframework" ++ if test -n "$inherited_linker_flags"; then ++ tmp_inherited_linker_flags=`$ECHO "$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 "$linkmode,$pass" = "lib,link" || ++ test "$linkmode,$pass" = "prog,scan" || ++ { test "$linkmode" != prog && test "$linkmode" != lib; }; then ++ test -n "$dlopen" && func_append dlfiles " $dlopen" ++ test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" ++ fi ++ ++ if test "$pass" = conv; then ++ # Only check for convenience libraries ++ deplibs="$lib $deplibs" ++ if test -z "$libdir"; then ++ if test -z "$old_library"; then ++ func_fatal_error "cannot find name of link library for \`$lib'" ++ fi ++ # It is a libtool convenience library, so add in its objects. ++ func_append convenience " $ladir/$objdir/$old_library" ++ func_append old_convenience " $ladir/$objdir/$old_library" ++ 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 ++ elif test "$linkmode" != prog && test "$linkmode" != lib; then ++ func_fatal_error "\`$lib' is not a convenience library" ++ fi ++ continue ++ fi # $pass = conv ++ ++ ++ # Get the name of the library we link against. ++ linklib= ++ if test -n "$old_library" && ++ { test "$prefer_static_libs" = yes || ++ test "$prefer_static_libs,$installed" = "built,no"; }; 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 "$pass" = dlopen; then ++ if test -z "$libdir"; then ++ func_fatal_error "cannot -dlopen a convenience library: \`$lib'" ++ fi ++ if test -z "$dlname" || ++ test "$dlopen_support" != yes || ++ test "$build_libtool_libs" = no; then ++ # If there is no dlname, no dlopen support or we're linking ++ # statically, we need to preload. We also need to preload any ++ # dependent libraries so libltdl's deplib preloader doesn't ++ # bomb out in the load deplibs phase. ++ 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 "X$installed" = Xyes; 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 "X$hardcode_automatic" = Xyes && avoidtemprpath=yes ++ else ++ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then ++ dir="$ladir" ++ absdir="$abs_ladir" ++ # Remove this search path later ++ 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 "$pass" = dlpreopen; then ++ if test -z "$libdir" && test "$linkmode" = prog; 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 "$linkmode" = lib; then ++ deplibs="$dir/$old_library $deplibs" ++ elif test "$linkmode,$pass" = "prog,link"; then ++ compile_deplibs="$dir/$old_library $compile_deplibs" ++ finalize_deplibs="$dir/$old_library $finalize_deplibs" ++ else ++ deplibs="$lib $deplibs" # used for prog,scan pass ++ fi ++ continue ++ fi ++ ++ ++ if test "$linkmode" = prog && test "$pass" != link; then ++ func_append newlib_search_path " $ladir" ++ deplibs="$lib $deplibs" ++ ++ linkalldeplibs=no ++ if test "$link_all_deplibs" != no || test -z "$library_names" || ++ test "$build_libtool_libs" = no; then ++ linkalldeplibs=yes ++ fi ++ ++ tmp_libs= ++ for deplib in $dependency_libs; do ++ case $deplib in ++ -L*) func_stripname '-L' '' "$deplib" ++ func_resolve_sysroot "$func_stripname_result" ++ func_append newlib_search_path " $func_resolve_sysroot_result" ++ ;; ++ esac ++ # Need to link against all dependency_libs? ++ if test "$linkalldeplibs" = yes; then ++ deplibs="$deplib $deplibs" ++ else ++ # Need to hardcode shared library paths ++ # or/and link against static libraries ++ newdependency_libs="$deplib $newdependency_libs" ++ fi ++ if $opt_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 "$linkmode,$pass" = "prog,link"; then ++ if test -n "$library_names" && ++ { { test "$prefer_static_libs" = no || ++ test "$prefer_static_libs,$installed" = "built,yes"; } || ++ test -z "$old_library"; }; then ++ # We need to hardcode the library path ++ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then ++ # Make sure the rpath contains only unique directories. ++ case "$temp_rpath:" in ++ *"$absdir:"*) ;; ++ *) 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 test "$alldeplibs" = yes && ++ { test "$deplibs_check_method" = pass_all || ++ { test "$build_libtool_libs" = yes && ++ test -n "$library_names"; }; }; then ++ # We only need to search for static libraries ++ continue ++ fi ++ fi ++ ++ link_static=no # Whether the deplib will be linked statically ++ use_static_libs=$prefer_static_libs ++ if test "$use_static_libs" = built && test "$installed" = yes; then ++ use_static_libs=no ++ fi ++ if test -n "$library_names" && ++ { test "$use_static_libs" = no || test -z "$old_library"; }; then ++ case $host in ++ *cygwin* | *mingw* | *cegcc*) ++ # No point in relinking DLLs because paths are not encoded ++ func_append notinst_deplibs " $lib" ++ need_relink=no ++ ;; ++ *) ++ if test "$installed" = no; 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 "$shouldnotlink" = yes && test "$pass" = link; then ++ echo ++ if test "$linkmode" = prog; then ++ $ECHO "*** Warning: Linking the executable $output against the loadable module" ++ else ++ $ECHO "*** Warning: Linking the shared library $output against the loadable module" ++ fi ++ $ECHO "*** $linklib is not portable!" ++ fi ++ if test "$linkmode" = lib && ++ test "$hardcode_into_libs" = yes; then ++ # Hardcode the library path. ++ # Skip directories that are in the system default run-time ++ # search path. ++ case " $sys_lib_dlsearch_path " in ++ *" $absdir "*) ;; ++ *) ++ case "$compile_rpath " in ++ *" $absdir "*) ;; ++ *) 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*) ++ func_arith $current - $age ++ major=$func_arith_result ++ versuffix="-$major" ++ ;; ++ esac ++ eval soname=\"$soname_spec\" ++ else ++ soname="$realname" ++ fi ++ ++ # Make a new name for the extract_expsyms_cmds to use ++ soroot="$soname" ++ func_basename "$soroot" ++ soname="$func_basename_result" ++ func_stripname 'lib' '.dll' "$soname" ++ newlib=libimp-$func_stripname_result.a ++ ++ # If the library has no export list, then create one now ++ if test -f "$output_objdir/$soname-def"; then : ++ else ++ func_verbose "extracting exported symbol list from \`$soname'" ++ func_execute_cmds "$extract_expsyms_cmds" 'exit $?' ++ fi ++ ++ # Create $newlib ++ if test -f "$output_objdir/$newlib"; then :; else ++ func_verbose "generating import library for \`$soname'" ++ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' ++ fi ++ # make sure the library variables are pointing to the new library ++ dir=$output_objdir ++ linklib=$newlib ++ fi # test -n "$old_archive_from_expsyms_cmds" ++ ++ if test "$linkmode" = prog || test "$opt_mode" != relink; then ++ add_shlibpath= ++ add_dir= ++ add= ++ lib_linked=yes ++ case $hardcode_action in ++ immediate | unsupported) ++ if test "$hardcode_direct" = no; then ++ add="$dir/$linklib" ++ case $host in ++ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; ++ *-*-sysv4*uw2*) add_dir="-L$dir" ;; ++ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ ++ *-*-unixware7*) add_dir="-L$dir" ;; ++ *-*-darwin* ) ++ # if the lib is a (non-dlopened) module then we can not ++ # link against it, someone is ignoring the earlier warnings ++ if /usr/bin/file -L $add 2> /dev/null | ++ $GREP ": [^:]* bundle" >/dev/null ; then ++ if test "X$dlopenmodule" != "X$lib"; then ++ $ECHO "*** Warning: lib $linklib is a module, not a shared library" ++ if test -z "$old_library" ; then ++ echo ++ echo "*** And there doesn't seem to be a static archive available" ++ echo "*** The link will probably fail, sorry" ++ else ++ add="$dir/$old_library" ++ fi ++ elif test -n "$old_library"; then ++ add="$dir/$old_library" ++ fi ++ fi ++ esac ++ elif test "$hardcode_minus_L" = no; then ++ case $host in ++ *-*-sunos*) add_shlibpath="$dir" ;; ++ esac ++ add_dir="-L$dir" ++ add="-l$name" ++ elif test "$hardcode_shlibpath_var" = no; then ++ add_shlibpath="$dir" ++ add="-l$name" ++ else ++ lib_linked=no ++ fi ++ ;; ++ relink) ++ if test "$hardcode_direct" = yes && ++ test "$hardcode_direct_absolute" = no; then ++ add="$dir/$linklib" ++ elif test "$hardcode_minus_L" = yes; then ++ add_dir="-L$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 "$hardcode_shlibpath_var" = yes; then ++ add_shlibpath="$dir" ++ add="-l$name" ++ else ++ lib_linked=no ++ fi ++ ;; ++ *) lib_linked=no ;; ++ esac ++ ++ if test "$lib_linked" != yes; then ++ func_fatal_configuration "unsupported hardcode properties" ++ fi ++ ++ if test -n "$add_shlibpath"; then ++ case :$compile_shlibpath: in ++ *":$add_shlibpath:"*) ;; ++ *) func_append compile_shlibpath "$add_shlibpath:" ;; ++ esac ++ fi ++ if test "$linkmode" = prog; then ++ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" ++ test -n "$add" && compile_deplibs="$add $compile_deplibs" ++ else ++ test -n "$add_dir" && deplibs="$add_dir $deplibs" ++ test -n "$add" && deplibs="$add $deplibs" ++ if test "$hardcode_direct" != yes && ++ test "$hardcode_minus_L" != yes && ++ test "$hardcode_shlibpath_var" = yes; then ++ case :$finalize_shlibpath: in ++ *":$libdir:"*) ;; ++ *) func_append finalize_shlibpath "$libdir:" ;; ++ esac ++ fi ++ fi ++ fi ++ ++ if test "$linkmode" = prog || test "$opt_mode" = relink; then ++ add_shlibpath= ++ add_dir= ++ add= ++ # Finalize command for both is simple: just hardcode it. ++ if test "$hardcode_direct" = yes && ++ test "$hardcode_direct_absolute" = no; then ++ add="$libdir/$linklib" ++ elif test "$hardcode_minus_L" = yes; then ++ add_dir="-L$libdir" ++ add="-l$name" ++ elif test "$hardcode_shlibpath_var" = yes; then ++ case :$finalize_shlibpath: in ++ *":$libdir:"*) ;; ++ *) func_append finalize_shlibpath "$libdir:" ;; ++ esac ++ add="-l$name" ++ elif test "$hardcode_automatic" = yes; then ++ if test -n "$inst_prefix_dir" && ++ test -f "$inst_prefix_dir$libdir/$linklib" ; then ++ add="$inst_prefix_dir$libdir/$linklib" ++ else ++ add="$libdir/$linklib" ++ fi ++ else ++ # We cannot seem to hardcode it, guess we'll fake it. ++ add_dir="-L$libdir" ++ # Try looking first in the location we're being installed to. ++ if test -n "$inst_prefix_dir"; then ++ case $libdir in ++ [\\/]*) ++ func_append add_dir " -L$inst_prefix_dir$libdir" ++ ;; ++ esac ++ fi ++ add="-l$name" ++ fi ++ ++ if test "$linkmode" = prog; then ++ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" ++ test -n "$add" && finalize_deplibs="$add $finalize_deplibs" ++ else ++ test -n "$add_dir" && deplibs="$add_dir $deplibs" ++ test -n "$add" && deplibs="$add $deplibs" ++ fi ++ fi ++ elif test "$linkmode" = prog; then ++ # Here we assume that one of hardcode_direct or hardcode_minus_L ++ # is not unsupported. This is valid on all known static and ++ # shared platforms. ++ if test "$hardcode_direct" != unsupported; then ++ test -n "$old_library" && linklib="$old_library" ++ compile_deplibs="$dir/$linklib $compile_deplibs" ++ finalize_deplibs="$dir/$linklib $finalize_deplibs" ++ else ++ compile_deplibs="-l$name -L$dir $compile_deplibs" ++ finalize_deplibs="-l$name -L$dir $finalize_deplibs" ++ fi ++ elif test "$build_libtool_libs" = yes; then ++ # Not a shared library ++ if test "$deplibs_check_method" != pass_all; then ++ # We're trying link a shared library against a static one ++ # but the system doesn't support it. ++ ++ # Just print a warning and add the library to dependency_libs so ++ # that the program can be linked against the static library. ++ echo ++ $ECHO "*** Warning: This system can not link to static lib archive $lib." ++ echo "*** I have the capability to make that library automatically link in when" ++ echo "*** you link to this library. But I can only do this if you have a" ++ echo "*** shared version of the library, which you do not appear to have." ++ if test "$module" = yes; then ++ echo "*** But as you try to build a module library, libtool will still create " ++ echo "*** a static module, that should work as long as the dlopening application" ++ echo "*** is linked with the -dlopen flag to resolve symbols at runtime." ++ if test -z "$global_symbol_pipe"; then ++ echo ++ echo "*** However, this would only work if libtool was able to extract symbol" ++ echo "*** lists from a program, using \`nm' or equivalent, but libtool could" ++ echo "*** not find such a program. So, this module is probably useless." ++ echo "*** \`nm' from GNU binutils and a full rebuild may help." ++ fi ++ if test "$build_old_libs" = no; then ++ build_libtool_libs=module ++ build_old_libs=yes ++ else ++ build_libtool_libs=no ++ fi ++ fi ++ else ++ deplibs="$dir/$old_library $deplibs" ++ link_static=yes ++ fi ++ fi # link shared/static library? ++ ++ if test "$linkmode" = lib; then ++ if test -n "$dependency_libs" && ++ { test "$hardcode_into_libs" != yes || ++ test "$build_old_libs" = yes || ++ test "$link_static" = yes; }; then ++ # Extract -R from dependency_libs ++ temp_deplibs= ++ for libdir in $dependency_libs; do ++ case $libdir in ++ -R*) func_stripname '-R' '' "$libdir" ++ temp_xrpath=$func_stripname_result ++ case " $xrpath " in ++ *" $temp_xrpath "*) ;; ++ *) 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 "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" ++ # ... and its dependency_libs ++ tmp_libs= ++ for deplib in $dependency_libs; do ++ newdependency_libs="$deplib $newdependency_libs" ++ 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 "$link_all_deplibs" != no; then ++ # Add the search paths of all dependency libraries ++ for deplib in $dependency_libs; do ++ path= ++ case $deplib in ++ -L*) path="$deplib" ;; ++ *.la) ++ func_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 "$pass" = link; then ++ if test "$linkmode" = "prog"; then ++ compile_deplibs="$new_inherited_linker_flags $compile_deplibs" ++ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" ++ else ++ compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ++ fi ++ fi ++ dependency_libs="$newdependency_libs" ++ if test "$pass" = dlpreopen; then ++ # Link the dlpreopened libraries before other libraries ++ for deplib in $save_deplibs; do ++ deplibs="$deplib $deplibs" ++ done ++ fi ++ if test "$pass" != dlopen; then ++ if test "$pass" != conv; then ++ # Make sure lib_search_path contains only unique directories. ++ lib_search_path= ++ for dir in $newlib_search_path; do ++ case "$lib_search_path " in ++ *" $dir "*) ;; ++ *) func_append lib_search_path " $dir" ;; ++ esac ++ done ++ newlib_search_path= ++ fi ++ ++ if test "$linkmode,$pass" != "prog,link"; then ++ vars="deplibs" ++ else ++ vars="compile_deplibs finalize_deplibs" ++ fi ++ for var in $vars dependency_libs; do ++ # Add libraries to $var in reverse order ++ eval tmp_libs=\"\$$var\" ++ new_libs= ++ for deplib in $tmp_libs; do ++ # FIXME: Pedantically, this is the right thing to do, so ++ # that some nasty dependency loop isn't accidentally ++ # broken: ++ #new_libs="$deplib $new_libs" ++ # Pragmatically, this seems to cause very few problems in ++ # practice: ++ case $deplib in ++ -L*) new_libs="$deplib $new_libs" ;; ++ -R*) ;; ++ *) ++ # And here is the reason: when a library appears more ++ # than once as an explicit dependence of a library, or ++ # is implicitly linked in more than once by the ++ # compiler, it is considered special, and multiple ++ # occurrences thereof are not removed. Compare this ++ # with having the same library being listed as a ++ # dependency of multiple other libraries: in this case, ++ # we know (pedantically, we assume) the library does not ++ # need to be listed more than once, so we keep only the ++ # last copy. This is not always right, but it is rare ++ # enough that we require users that really mean to play ++ # such unportable linking tricks to link the library ++ # using -Wl,-lname, so that libtool does not consider it ++ # for duplicate removal. ++ case " $specialdeplibs " in ++ *" $deplib "*) new_libs="$deplib $new_libs" ;; ++ *) ++ case " $new_libs " in ++ *" $deplib "*) ;; ++ *) new_libs="$deplib $new_libs" ;; ++ esac ++ ;; ++ esac ++ ;; ++ esac ++ done ++ tmp_libs= ++ for deplib in $new_libs; do ++ case $deplib in ++ -L*) ++ case " $tmp_libs " in ++ *" $deplib "*) ;; ++ *) func_append tmp_libs " $deplib" ;; ++ esac ++ ;; ++ *) func_append tmp_libs " $deplib" ;; ++ esac ++ done ++ eval $var=\"$tmp_libs\" ++ done # for var ++ fi ++ # Last step: remove runtime libs from dependency_libs ++ # (they stay in deplibs) ++ tmp_libs= ++ for i in $dependency_libs ; do ++ case " $predeps $postdeps $compiler_lib_search_path " in ++ *" $i "*) ++ i="" ++ ;; ++ esac ++ if test -n "$i" ; then ++ func_append tmp_libs " $i" ++ fi ++ done ++ dependency_libs=$tmp_libs ++ done # for pass ++ if test "$linkmode" = prog; then ++ dlfiles="$newdlfiles" ++ fi ++ if test "$linkmode" = prog || test "$linkmode" = lib; then ++ dlprefiles="$newdlprefiles" ++ fi ++ ++ case $linkmode in ++ oldlib) ++ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then ++ func_warning "\`-dlopen' is ignored for archives" ++ fi ++ ++ case " $deplibs" in ++ *\ -l* | *\ -L*) ++ func_warning "\`-l' and \`-L' are ignored for archives" ;; ++ esac ++ ++ test -n "$rpath" && \ ++ func_warning "\`-rpath' is ignored for archives" ++ ++ test -n "$xrpath" && \ ++ func_warning "\`-R' is ignored for archives" ++ ++ test -n "$vinfo" && \ ++ func_warning "\`-version-info/-version-number' is ignored for archives" ++ ++ test -n "$release" && \ ++ func_warning "\`-release' is ignored for archives" ++ ++ test -n "$export_symbols$export_symbols_regex" && \ ++ func_warning "\`-export-symbols' is ignored for archives" ++ ++ # Now set the variables for building old libraries. ++ build_libtool_libs=no ++ oldlibs="$output" ++ 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 "$module" = no && \ ++ func_fatal_help "libtool library \`$output' must begin with \`lib'" ++ ++ if test "$need_lib_prefix" != no; then ++ # Add the "lib" prefix for modules if required ++ func_stripname '' '.la' "$outputname" ++ name=$func_stripname_result ++ eval shared_ext=\"$shrext_cmds\" ++ eval libname=\"$libname_spec\" ++ else ++ func_stripname '' '.la' "$outputname" ++ libname=$func_stripname_result ++ fi ++ ;; ++ esac ++ ++ if test -n "$objs"; then ++ if test "$deplibs_check_method" != pass_all; then ++ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" ++ else ++ echo ++ $ECHO "*** Warning: Linking the shared library $output against the non-libtool" ++ $ECHO "*** objects $objs is not portable!" ++ func_append libobjs " $objs" ++ fi ++ fi ++ ++ test "$dlself" != no && \ ++ func_warning "\`-dlopen self' is ignored for libtool libraries" ++ ++ set dummy $rpath ++ shift ++ test "$#" -gt 1 && \ ++ func_warning "ignoring multiple \`-rpath's for a libtool library" ++ ++ install_libdir="$1" ++ ++ oldlibs= ++ if test -z "$rpath"; then ++ if test "$build_libtool_libs" = yes; then ++ # Building a libtool convenience library. ++ # Some compilers have problems with a `.al' extension so ++ # convenience libraries should have the same extension an ++ # archive normally would. ++ oldlibs="$output_objdir/$libname.$libext $oldlibs" ++ build_libtool_libs=convenience ++ build_old_libs=yes ++ fi ++ ++ test -n "$vinfo" && \ ++ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" ++ ++ test -n "$release" && \ ++ func_warning "\`-release' is ignored for convenience libraries" ++ else ++ ++ # Parse the version information argument. ++ save_ifs="$IFS"; IFS=':' ++ set dummy $vinfo 0 0 0 ++ shift ++ IFS="$save_ifs" ++ ++ test -n "$7" && \ ++ func_fatal_help "too many parameters to \`-version-info'" ++ ++ # convert absolute version numbers to libtool ages ++ # this retains compatibility with .la files and attempts ++ # to make the code below a bit more comprehensible ++ ++ case $vinfo_number in ++ yes) ++ number_major="$1" ++ number_minor="$2" ++ number_revision="$3" ++ # ++ # There are really only two kinds -- those that ++ # use the current revision as the major version ++ # and those that subtract age and use age as ++ # a minor version. But, then there is irix ++ # which has an extra 1 added just for fun ++ # ++ case $version_type in ++ # correct linux to gnu/linux during the next big refactor ++ darwin|linux|osf|windows|none) ++ func_arith $number_major + $number_minor ++ current=$func_arith_result ++ age="$number_minor" ++ revision="$number_revision" ++ ;; ++ freebsd-aout|freebsd-elf|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 ++ ;; ++ *) ++ func_fatal_configuration "$modename: unknown library version type \`$version_type'" ++ ;; ++ esac ++ ;; ++ no) ++ current="$1" ++ revision="$2" ++ age="$3" ++ ;; ++ esac ++ ++ # Check that each of the things are valid numbers. ++ case $current in ++ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; ++ *) ++ func_error "CURRENT \`$current' must be a nonnegative integer" ++ func_fatal_error "\`$vinfo' is not valid version information" ++ ;; ++ esac ++ ++ case $revision in ++ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; ++ *) ++ func_error "REVISION \`$revision' must be a nonnegative integer" ++ func_fatal_error "\`$vinfo' is not valid version information" ++ ;; ++ esac ++ ++ case $age in ++ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; ++ *) ++ func_error "AGE \`$age' must be a nonnegative integer" ++ func_fatal_error "\`$vinfo' is not valid version information" ++ ;; ++ esac ++ ++ if test "$age" -gt "$current"; then ++ func_error "AGE \`$age' is greater than the current interface number \`$current'" ++ func_fatal_error "\`$vinfo' is not valid version information" ++ fi ++ ++ # Calculate the version variables. ++ major= ++ versuffix= ++ verstring= ++ case $version_type in ++ none) ;; ++ ++ darwin) ++ # Like Linux, but with the current version available in ++ # verstring for coding it into the library header ++ func_arith $current - $age ++ major=.$func_arith_result ++ versuffix="$major.$age.$revision" ++ # Darwin ld doesn't like 0 for these options... ++ func_arith $current + 1 ++ minor_current=$func_arith_result ++ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" ++ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ++ ;; ++ ++ freebsd-aout) ++ major=".$current" ++ versuffix=".$current.$revision"; ++ ;; ++ ++ freebsd-elf) ++ major=".$current" ++ versuffix=".$current" ++ ;; ++ ++ irix | nonstopux) ++ if test "X$lt_irix_increment" = "Xno"; then ++ func_arith $current - $age ++ else ++ func_arith $current - $age + 1 ++ fi ++ major=$func_arith_result ++ ++ case $version_type in ++ nonstopux) verstring_prefix=nonstopux ;; ++ *) verstring_prefix=sgi ;; ++ esac ++ verstring="$verstring_prefix$major.$revision" ++ ++ # Add in all the interfaces that we are compatible with. ++ loop=$revision ++ while test "$loop" -ne 0; do ++ func_arith $revision - $loop ++ iface=$func_arith_result ++ func_arith $loop - 1 ++ loop=$func_arith_result ++ verstring="$verstring_prefix$major.$iface:$verstring" ++ done ++ ++ # Before this point, $major must not contain `.'. ++ major=.$major ++ versuffix="$major.$revision" ++ ;; ++ ++ linux) # 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 "$loop" -ne 0; do ++ func_arith $current - $loop ++ iface=$func_arith_result ++ func_arith $loop - 1 ++ loop=$func_arith_result ++ verstring="$verstring:${iface}.0" ++ done ++ ++ # Make executables depend on our current version. ++ func_append verstring ":${current}.0" ++ ;; ++ ++ qnx) ++ major=".$current" ++ versuffix=".$current" ++ ;; ++ ++ sunos) ++ major=".$current" ++ versuffix=".$current.$revision" ++ ;; ++ ++ windows) ++ # Use '-' rather than '.', since we only want one ++ # extension on DOS 8.3 filesystems. ++ func_arith $current - $age ++ major=$func_arith_result ++ versuffix="-$major" ++ ;; ++ ++ *) ++ func_fatal_configuration "unknown library version type \`$version_type'" ++ ;; ++ esac ++ ++ # Clear the version info if we defaulted, and they specified a release. ++ if test -z "$vinfo" && test -n "$release"; then ++ major= ++ case $version_type in ++ darwin) ++ # we can't check for "0.0" in archive_cmds due to quoting ++ # problems, so we reset it completely ++ verstring= ++ ;; ++ *) ++ verstring="0.0" ++ ;; ++ esac ++ if test "$need_version" = no; then ++ versuffix= ++ else ++ versuffix=".0.0" ++ fi ++ fi ++ ++ # Remove version info from name if versioning should be avoided ++ if test "$avoid_version" = yes && test "$need_version" = no; then ++ major= ++ versuffix= ++ verstring="" ++ fi ++ ++ # Check to see if the archive will have undefined symbols. ++ if test "$allow_undefined" = yes; then ++ if test "$allow_undefined_flag" = unsupported; then ++ func_warning "undefined symbols not allowed in $host shared libraries" ++ build_libtool_libs=no ++ build_old_libs=yes ++ fi ++ else ++ # Don't allow undefined symbols. ++ allow_undefined_flag="$no_undefined_flag" ++ fi ++ ++ fi ++ ++ func_generate_dlsyms "$libname" "$libname" "yes" ++ func_append libobjs " $symfileobj" ++ test "X$libobjs" = "X " && libobjs= ++ ++ if test "$opt_mode" != relink; then ++ # Remove our outputs, but don't remove object files since they ++ # may have been created when compiling PIC objects. ++ removelist= ++ tempremovelist=`$ECHO "$output_objdir/*"` ++ for p in $tempremovelist; do ++ case $p in ++ *.$objext | *.gcno) ++ ;; ++ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) ++ if test "X$precious_files_regex" != "X"; then ++ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 ++ then ++ continue ++ fi ++ fi ++ 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 "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; 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 "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then ++ dependency_libs="$temp_xrpath $dependency_libs" ++ fi ++ fi ++ ++ # Make sure dlfiles contains only unique files that won't be dlpreopened ++ old_dlfiles="$dlfiles" ++ dlfiles= ++ for lib in $old_dlfiles; do ++ case " $dlprefiles $dlfiles " in ++ *" $lib "*) ;; ++ *) 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 "$build_libtool_libs" = yes; 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*) ++ # Do not include libc due to us having libc/libc_r. ++ ;; ++ *-*-sco3.2v5* | *-*-sco5v6*) ++ # Causes problems with __ctype ++ ;; ++ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) ++ # Compiler inserts libc in the correct place for threads to work ++ ;; ++ *) ++ # Add libc to deplibs on all other systems if necessary. ++ if test "$build_libtool_need_lc" = "yes"; then ++ 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 "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; 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 "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then ++ for i in $predeps $postdeps ; do ++ # can't use Xsed below, because $i might contain '/' ++ tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` ++ done ++ fi ++ case $tmp_deplibs in ++ *[!\ \ ]*) ++ echo ++ if test "X$deplibs_check_method" = "Xnone"; then ++ echo "*** Warning: inter-library dependencies are not supported in this platform." ++ else ++ echo "*** Warning: inter-library dependencies are not known to be supported." ++ fi ++ echo "*** All declared inter-library dependencies are being dropped." ++ droppeddeps=yes ++ ;; ++ 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 "$droppeddeps" = yes; then ++ if test "$module" = yes; then ++ echo ++ echo "*** Warning: libtool could not satisfy all declared inter-library" ++ $ECHO "*** dependencies of module $libname. Therefore, libtool will create" ++ echo "*** a static module, that should work as long as the dlopening" ++ echo "*** application is linked with the -dlopen flag." ++ if test -z "$global_symbol_pipe"; then ++ echo ++ echo "*** However, this would only work if libtool was able to extract symbol" ++ echo "*** lists from a program, using \`nm' or equivalent, but libtool could" ++ echo "*** not find such a program. So, this module is probably useless." ++ echo "*** \`nm' from GNU binutils and a full rebuild may help." ++ fi ++ if test "$build_old_libs" = no; then ++ oldlibs="$output_objdir/$libname.$libext" ++ build_libtool_libs=module ++ build_old_libs=yes ++ else ++ build_libtool_libs=no ++ fi ++ else ++ echo "*** The inter-library dependencies that have been dropped here will be" ++ echo "*** automatically added whenever a program is linked with this library" ++ echo "*** or is declared to -dlopen it." ++ ++ if test "$allow_undefined" = no; then ++ echo ++ echo "*** Since this library must not contain undefined symbols," ++ echo "*** because either the platform does not support them or" ++ echo "*** it was explicitly requested with -no-undefined," ++ echo "*** libtool will only create a static version of it." ++ if test "$build_old_libs" = no; then ++ oldlibs="$output_objdir/$libname.$libext" ++ build_libtool_libs=module ++ build_old_libs=yes ++ else ++ build_libtool_libs=no ++ fi ++ fi ++ fi ++ fi ++ # Done checking deplibs! ++ deplibs=$newdeplibs ++ fi ++ # Time to change all our "foo.ltframework" stuff back to "-framework foo" ++ case $host in ++ *-*-darwin*) ++ newdeplibs=`$ECHO " $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 "$build_libtool_libs" = yes; then ++ # Remove ${wl} instances when linking with ld. ++ # FIXME: should test the right _cmds variable. ++ case $archive_cmds in ++ *\$LD\ *) wl= ;; ++ esac ++ if test "$hardcode_into_libs" = yes; then ++ # Hardcode the library paths ++ hardcode_libdirs= ++ dep_rpath= ++ rpath="$finalize_rpath" ++ test "$opt_mode" != relink && rpath="$compile_rpath$rpath" ++ for libdir in $rpath; do ++ if test -n "$hardcode_libdir_flag_spec"; then ++ if test -n "$hardcode_libdir_separator"; then ++ 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 "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" ++ if test -n "$shlibpath"; then ++ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" ++ fi ++ ++ # Get the real and link names of the library. ++ eval shared_ext=\"$shrext_cmds\" ++ eval library_names=\"$library_names_spec\" ++ set dummy $library_names ++ shift ++ realname="$1" ++ shift ++ ++ if test -n "$soname_spec"; then ++ eval soname=\"$soname_spec\" ++ else ++ soname="$realname" ++ fi ++ if test -z "$dlname"; then ++ dlname=$soname ++ fi ++ ++ lib="$output_objdir/$realname" ++ linknames= ++ for link ++ do ++ 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 ++ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then ++ # and it's NOT already a .def file. Must figure out ++ # which of the given symbols are data symbols and tag ++ # them as such. So, trigger use of export_symbols_cmds. ++ # export_symbols gets reassigned inside the "prepare ++ # the list of exported symbols" if statement, so the ++ # include_expsyms logic still works. ++ orig_export_symbols="$export_symbols" ++ export_symbols= ++ always_export_symbols=yes ++ fi ++ fi ++ ;; ++ esac ++ ++ # Prepare the list of exported symbols ++ if test -z "$export_symbols"; then ++ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then ++ func_verbose "generating symbol list for \`$libname.la'" ++ export_symbols="$output_objdir/$libname.exp" ++ $opt_dry_run || $RM $export_symbols ++ cmds=$export_symbols_cmds ++ save_ifs="$IFS"; IFS='~' ++ for 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 "$try_normal_branch" = yes \ ++ && { 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 "X$skipped_export" != "X:"; then ++ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' ++ func_show_eval '$MV "${export_symbols}T" "$export_symbols"' ++ fi ++ fi ++ fi ++ ++ if test -n "$export_symbols" && test -n "$include_expsyms"; then ++ tmp_export_symbols="$export_symbols" ++ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" ++ $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' ++ fi ++ ++ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then ++ # The given exports_symbols file has to be filtered, so filter it. ++ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" ++ # FIXME: $output_objdir/$libname.filter potentially contains lots of ++ # 's' commands which not all seds can handle. GNU sed should be fine ++ # though. Also, the filter scales superlinearly with the number of ++ # global variables. join(1) would be nice here, but unfortunately ++ # isn't a blessed tool. ++ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter ++ 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 "$compiler_needs_object" = yes && ++ test -z "$libobjs"; then ++ # extract the archives, so we have objects to list. ++ # TODO: could optimize this to just extract one archive. ++ whole_archive_flag_spec= ++ fi ++ if test -n "$whole_archive_flag_spec"; then ++ save_libobjs=$libobjs ++ eval libobjs=\"\$libobjs $whole_archive_flag_spec\" ++ test "X$libobjs" = "X " && libobjs= ++ else ++ gentop="$output_objdir/${outputname}x" ++ 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 "$thread_safe" = yes && 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 "$opt_mode" = relink; then ++ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? ++ fi ++ ++ # Do each of the archive commands. ++ if test "$module" = yes && test -n "$module_cmds" ; then ++ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then ++ eval test_cmds=\"$module_expsym_cmds\" ++ cmds=$module_expsym_cmds ++ else ++ eval test_cmds=\"$module_cmds\" ++ cmds=$module_cmds ++ fi ++ else ++ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then ++ eval test_cmds=\"$archive_expsym_cmds\" ++ cmds=$archive_expsym_cmds ++ else ++ eval test_cmds=\"$archive_cmds\" ++ cmds=$archive_cmds ++ fi ++ fi ++ ++ if test "X$skipped_export" != "X:" && ++ func_len " $test_cmds" && ++ len=$func_len_result && ++ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then ++ : ++ else ++ # The command line is too long to link in one step, link piecewise ++ # or, if using GNU ld and skipped_export is not :, use a linker ++ # script. ++ ++ # Save the value of $output and $libobjs because we want to ++ # use them later. If we have whole_archive_flag_spec, we ++ # want to use save_libobjs as it was before ++ # whole_archive_flag_spec was expanded, because we can't ++ # assume the linker understands whole_archive_flag_spec. ++ # This may have to be revisited, in case too many ++ # convenience libraries get linked in and end up exceeding ++ # the spec. ++ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then ++ save_libobjs=$libobjs ++ fi ++ save_output=$output ++ 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 "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then ++ output=${output_objdir}/${output_la}.lnkscript ++ func_verbose "creating GNU ld script: $output" ++ echo 'INPUT (' > $output ++ for obj in $save_libobjs ++ do ++ 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 "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then ++ output=${output_objdir}/${output_la}.lnk ++ func_verbose "creating linker input file list: $output" ++ : > $output ++ set x $save_libobjs ++ shift ++ firstobj= ++ if test "$compiler_needs_object" = yes; then ++ firstobj="$1 " ++ shift ++ fi ++ for obj ++ do ++ 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 "X$objlist" = X || ++ test "$len" -lt "$max_cmd_len"; then ++ func_append objlist " $obj" ++ else ++ # The command $test_cmds is almost too long, add a ++ # command to the queue. ++ if test "$k" -eq 1 ; then ++ # The first file doesn't have a previous command to add. ++ 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 ++ ++ if ${skipped_export-false}; then ++ func_verbose "generating symbol list for \`$libname.la'" ++ export_symbols="$output_objdir/$libname.exp" ++ $opt_dry_run || $RM $export_symbols ++ libobjs=$output ++ # Append the command to create the export file. ++ test -z "$concat_cmds" || concat_cmds=$concat_cmds~ ++ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" ++ if test -n "$last_robj"; then ++ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" ++ fi ++ fi ++ ++ test -n "$save_libobjs" && ++ func_verbose "creating a temporary reloadable object file: $output" ++ ++ # Loop through the commands generated above and execute them. ++ save_ifs="$IFS"; IFS='~' ++ for cmd in $concat_cmds; do ++ IFS="$save_ifs" ++ $opt_silent || { ++ func_quote_for_expand "$cmd" ++ eval "func_echo $func_quote_for_expand_result" ++ } ++ $opt_dry_run || eval "$cmd" || { ++ lt_exit=$? ++ ++ # Restore the uninstalled library and exit ++ if test "$opt_mode" = relink; then ++ ( cd "$output_objdir" && \ ++ $RM "${realname}T" && \ ++ $MV "${realname}U" "$realname" ) ++ fi ++ ++ exit $lt_exit ++ } ++ done ++ IFS="$save_ifs" ++ ++ if test -n "$export_symbols_regex" && ${skipped_export-false}; then ++ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' ++ func_show_eval '$MV "${export_symbols}T" "$export_symbols"' ++ fi ++ fi ++ ++ if ${skipped_export-false}; then ++ if test -n "$export_symbols" && test -n "$include_expsyms"; then ++ tmp_export_symbols="$export_symbols" ++ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" ++ $opt_dry_run || eval '$ECHO "$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 ++ fi ++ ++ libobjs=$output ++ # Restore the value of output. ++ output=$save_output ++ ++ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then ++ eval libobjs=\"\$libobjs $whole_archive_flag_spec\" ++ test "X$libobjs" = "X " && libobjs= ++ fi ++ # Expand the library linking commands again to reset the ++ # value of $libobjs for piecewise linking. ++ ++ # Do each of the archive commands. ++ if test "$module" = yes && test -n "$module_cmds" ; then ++ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then ++ cmds=$module_expsym_cmds ++ else ++ cmds=$module_cmds ++ fi ++ else ++ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then ++ cmds=$archive_expsym_cmds ++ else ++ cmds=$archive_cmds ++ fi ++ fi ++ fi ++ ++ if test -n "$delfiles"; then ++ # Append the command to remove temporary files to $cmds. ++ eval cmds=\"\$cmds~\$RM $delfiles\" ++ fi ++ ++ # Add any objects from preloaded convenience libraries ++ if test -n "$dlprefiles"; then ++ gentop="$output_objdir/${outputname}x" ++ 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="$save_ifs" ++ eval cmd=\"$cmd\" ++ $opt_silent || { ++ func_quote_for_expand "$cmd" ++ eval "func_echo $func_quote_for_expand_result" ++ } ++ $opt_dry_run || eval "$cmd" || { ++ lt_exit=$? ++ ++ # Restore the uninstalled library and exit ++ if test "$opt_mode" = relink; then ++ ( cd "$output_objdir" && \ ++ $RM "${realname}T" && \ ++ $MV "${realname}U" "$realname" ) ++ fi ++ ++ exit $lt_exit ++ } ++ done ++ IFS="$save_ifs" ++ ++ # Restore the uninstalled library and exit ++ if test "$opt_mode" = relink; then ++ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? ++ ++ if test -n "$convenience"; then ++ if test -z "$whole_archive_flag_spec"; then ++ func_show_eval '${RM}r "$gentop"' ++ fi ++ fi ++ ++ exit $EXIT_SUCCESS ++ fi ++ ++ # Create links to the real library. ++ for linkname in $linknames; do ++ if test "$realname" != "$linkname"; then ++ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' ++ fi ++ done ++ ++ # If -module or -export-dynamic was specified, set the dlname. ++ if test "$module" = yes || test "$export_dynamic" = yes; then ++ # On all known operating systems, these are identical. ++ dlname="$soname" ++ fi ++ fi ++ ;; ++ ++ obj) ++ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then ++ func_warning "\`-dlopen' is ignored for objects" ++ fi ++ ++ case " $deplibs" in ++ *\ -l* | *\ -L*) ++ func_warning "\`-l' and \`-L' are ignored for objects" ;; ++ esac ++ ++ test -n "$rpath" && \ ++ func_warning "\`-rpath' is ignored for objects" ++ ++ test -n "$xrpath" && \ ++ func_warning "\`-R' is ignored for objects" ++ ++ test -n "$vinfo" && \ ++ func_warning "\`-version-info' is ignored for objects" ++ ++ test -n "$release" && \ ++ func_warning "\`-release' is ignored for objects" ++ ++ case $output in ++ *.lo) ++ test -n "$objs$old_deplibs" && \ ++ func_fatal_error "cannot build library object \`$output' from non-libtool objects" ++ ++ libobj=$output ++ func_lo2o "$libobj" ++ obj=$func_lo2o_result ++ ;; ++ *) ++ libobj= ++ obj="$output" ++ ;; ++ esac ++ ++ # Delete the old objects. ++ $opt_dry_run || $RM $obj $libobj ++ ++ # Objects from convenience libraries. This assumes ++ # single-version convenience libraries. Whenever we create ++ # different ones for PIC/non-PIC, this we'll have to duplicate ++ # the extraction. ++ reload_conv_objs= ++ gentop= ++ # reload_cmds runs $LD directly, so let us get rid of ++ # -Wl from whole_archive_flag_spec and hope we can get by with ++ # turning comma into space.. ++ wl= ++ ++ if test -n "$convenience"; then ++ if test -n "$whole_archive_flag_spec"; then ++ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" ++ reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` ++ 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 "$build_libtool_libs" != yes && 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" ### testsuite: skip nested quoting test ++ ++ output="$obj" ++ func_execute_cmds "$reload_cmds" 'exit $?' ++ ++ # Exit if we aren't doing a library object file. ++ if test -z "$libobj"; then ++ if test -n "$gentop"; then ++ func_show_eval '${RM}r "$gentop"' ++ fi ++ ++ exit $EXIT_SUCCESS ++ fi ++ ++ if test "$build_libtool_libs" != yes; then ++ if test -n "$gentop"; then ++ func_show_eval '${RM}r "$gentop"' ++ fi ++ ++ # Create an invalid libtool object if no PIC, so that we don't ++ # accidentally link it into a program. ++ # $show "echo timestamp > $libobj" ++ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? ++ exit $EXIT_SUCCESS ++ fi ++ ++ if test -n "$pic_flag" || test "$pic_mode" != default; then ++ # Only do commands if we really have different PIC objects. ++ reload_objs="$libobjs $reload_conv_objs" ++ output="$libobj" ++ func_execute_cmds "$reload_cmds" 'exit $?' ++ fi ++ ++ if test -n "$gentop"; then ++ func_show_eval '${RM}r "$gentop"' ++ fi ++ ++ exit $EXIT_SUCCESS ++ ;; ++ ++ prog) ++ case $host in ++ *cygwin*) func_stripname '' '.exe' "$output" ++ output=$func_stripname_result.exe;; ++ esac ++ test -n "$vinfo" && \ ++ func_warning "\`-version-info' is ignored for programs" ++ ++ test -n "$release" && \ ++ func_warning "\`-release' is ignored for programs" ++ ++ test "$preload" = yes \ ++ && test "$dlopen_support" = unknown \ ++ && test "$dlopen_self" = unknown \ ++ && test "$dlopen_self_static" = unknown && \ ++ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." ++ ++ case $host in ++ *-*-rhapsody* | *-*-darwin1.[012]) ++ # On Rhapsody replace the C library is the System framework ++ compile_deplibs=`$ECHO " $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 "$tagname" = CXX ; 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 "$build_old_libs" = yes; 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@" "no" ++ ++ # template prelinking step ++ if test -n "$prelink_cmds"; then ++ func_execute_cmds "$prelink_cmds" 'exit $?' ++ fi ++ ++ wrappers_required=yes ++ case $host in ++ *cegcc* | *mingw32ce*) ++ # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. ++ wrappers_required=no ++ ;; ++ *cygwin* | *mingw* ) ++ if test "$build_libtool_libs" != yes; then ++ wrappers_required=no ++ fi ++ ;; ++ *) ++ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then ++ wrappers_required=no ++ fi ++ ;; ++ esac ++ if test "$wrappers_required" = no; then ++ # Replace the output file specification. ++ compile_command=`$ECHO "$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 ++ fi ++ ++ if test -n "$compile_shlibpath$finalize_shlibpath"; then ++ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" ++ fi ++ if test -n "$finalize_shlibpath"; then ++ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" ++ fi ++ ++ compile_var= ++ finalize_var= ++ if test -n "$runpath_var"; then ++ if test -n "$perm_rpath"; then ++ # We should set the runpath_var. ++ rpath= ++ for dir in $perm_rpath; do ++ 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 "$no_install" = yes; then ++ # We don't need to create a wrapper script. ++ link_command="$compile_var$compile_command$compile_rpath" ++ # Replace the output file specification. ++ link_command=`$ECHO "$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 ++ ++ if test "$hardcode_action" = relink; then ++ # Fast installation is not supported ++ link_command="$compile_var$compile_command$compile_rpath" ++ relink_command="$finalize_var$finalize_command$finalize_rpath" ++ ++ func_warning "this platform does not like uninstalled shared libraries" ++ func_warning "\`$output' will be relinked during installation" ++ else ++ if test "$fast_install" != no; then ++ link_command="$finalize_var$compile_command$finalize_rpath" ++ if test "$fast_install" = yes; then ++ relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ++ else ++ # fast_install is set to needless ++ relink_command= ++ fi ++ else ++ link_command="$compile_var$compile_command$compile_rpath" ++ relink_command="$finalize_var$finalize_command$finalize_rpath" ++ fi ++ fi ++ ++ # Replace the output file specification. ++ link_command=`$ECHO "$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_for_eval "$var_value" ++ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" ++ fi ++ done ++ relink_command="(cd `pwd`; $relink_command)" ++ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` ++ fi ++ ++ # Only actually do things if not in dry run mode. ++ $opt_dry_run || { ++ # win32 will think the script is a binary if it has ++ # a .exe suffix, so we strip it off here. ++ case $output in ++ *.exe) func_stripname '' '.exe' "$output" ++ output=$func_stripname_result ;; ++ esac ++ # test for cygwin because mv fails w/o .exe extensions ++ case $host in ++ *cygwin*) ++ exeext=.exe ++ func_stripname '' '.exe' "$outputname" ++ outputname=$func_stripname_result ;; ++ *) exeext= ;; ++ esac ++ case $host in ++ *cygwin* | *mingw* ) ++ func_dirname_and_basename "$output" "" "." ++ output_name=$func_basename_result ++ output_path=$func_dirname_result ++ cwrappersource="$output_path/$objdir/lt-$output_name.c" ++ cwrapper="$output_path/$output_name.exe" ++ $RM $cwrappersource $cwrapper ++ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 ++ ++ func_emit_cwrapperexe_src > $cwrappersource ++ ++ # The wrapper executable is built using the $host compiler, ++ # because it contains $host paths and files. If cross- ++ # compiling, it, like the target executable, must be ++ # executed on the $host or under an emulation environment. ++ $opt_dry_run || { ++ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource ++ $STRIP $cwrapper ++ } ++ ++ # Now, create the wrapper script for func_source use: ++ func_ltwrapper_scriptname $cwrapper ++ $RM $func_ltwrapper_scriptname_result ++ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 ++ $opt_dry_run || { ++ # note: this script will not be executed, so do not chmod. ++ if test "x$build" = "x$host" ; then ++ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result ++ else ++ func_emit_wrapper no > $func_ltwrapper_scriptname_result ++ fi ++ } ++ ;; ++ * ) ++ $RM $output ++ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 ++ ++ func_emit_wrapper no > $output ++ chmod +x $output ++ ;; ++ esac ++ } ++ exit $EXIT_SUCCESS ++ ;; ++ esac ++ ++ # See if we need to build an old-fashioned archive. ++ for oldlib in $oldlibs; do ++ ++ if test "$build_libtool_libs" = convenience; then ++ oldobjs="$libobjs_save $symfileobj" ++ addlibs="$convenience" ++ build_libtool_libs=no ++ else ++ if test "$build_libtool_libs" = module; then ++ oldobjs="$libobjs_save" ++ build_libtool_libs=no ++ else ++ oldobjs="$old_deplibs $non_pic_objects" ++ if test "$preload" = yes && test -f "$symfileobj"; then ++ func_append oldobjs " $symfileobj" ++ fi ++ fi ++ addlibs="$old_convenience" ++ fi ++ ++ 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 "$build_libtool_libs" = yes; then ++ cmds=$old_archive_from_new_cmds ++ else ++ ++ # Add any objects from preloaded convenience libraries ++ if test -n "$dlprefiles"; then ++ gentop="$output_objdir/${outputname}x" ++ 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 "X$oldobjs" = "X" ; then ++ eval cmds=\"\$concat_cmds\" ++ else ++ eval cmds=\"\$concat_cmds~\$old_archive_cmds\" ++ fi ++ fi ++ fi ++ func_execute_cmds "$cmds" 'exit $?' ++ done ++ ++ test -n "$generated" && \ ++ func_show_eval "${RM}r$generated" ++ ++ # Now create the libtool archive. ++ case $output in ++ *.la) ++ old_library= ++ test "$build_old_libs" = yes && old_library="$libname.$libext" ++ func_verbose "creating $output" ++ ++ # Preserve any variables that may affect compiler behavior ++ for var in $variables_saved_for_relink; do ++ if eval test -z \"\${$var+set}\"; then ++ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" ++ elif eval var_value=\$$var; test -z "$var_value"; then ++ relink_command="$var=; export $var; $relink_command" ++ else ++ func_quote_for_eval "$var_value" ++ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" ++ fi ++ done ++ # Quote the link command for shipping. ++ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" ++ relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` ++ if test "$hardcode_automatic" = yes ; then ++ relink_command= ++ fi ++ ++ # Only create the output if not a dry run. ++ $opt_dry_run || { ++ for installed in no yes; do ++ if test "$installed" = yes; then ++ if test -z "$install_libdir"; then ++ break ++ fi ++ output="$output_objdir/$outputname"i ++ # Replace all uninstalled libtool libraries with the installed ones ++ newdependency_libs= ++ for deplib in $dependency_libs; do ++ case $deplib in ++ *.la) ++ func_basename "$deplib" ++ name="$func_basename_result" ++ 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 "x$bindir" != x ; ++ 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$TIMESTAMP) $VERSION ++# ++# Please DO NOT delete this file! ++# It is necessary for linking the library. ++ ++# The name that we can dlopen(3). ++dlname='$tdlname' ++ ++# Names of this library. ++library_names='$library_names' ++ ++# The name of the static archive. ++old_library='$old_library' ++ ++# Linker flags that can not go in dependency_libs. ++inherited_linker_flags='$new_inherited_linker_flags' ++ ++# Libraries that this one depends upon. ++dependency_libs='$dependency_libs' ++ ++# Names of additional weak libraries provided by this library ++weak_library_names='$weak_libs' ++ ++# Version information for $libname. ++current=$current ++age=$age ++revision=$revision ++ ++# Is this an already installed library? ++installed=$installed ++ ++# Should we warn about portability when linking against -modules? ++shouldnotlink=$module ++ ++# Files to dlopen/dlpreopen ++dlopen='$dlfiles' ++dlpreopen='$dlprefiles' ++ ++# Directory that this library needs to be installed in: ++libdir='$install_libdir'" ++ if test "$installed" = no && test "$need_relink" = yes; then ++ $ECHO >> $output "\ ++relink_command=\"$relink_command\"" ++ fi ++ done ++ } ++ ++ # Do a symbolic link so that the libtool archive can be found in ++ # LD_LIBRARY_PATH before the program is installed. ++ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ++ ;; ++ esac ++ exit $EXIT_SUCCESS ++} ++ ++{ test "$opt_mode" = link || test "$opt_mode" = relink; } && ++ func_mode_link ${1+"$@"} ++ ++ ++# func_mode_uninstall arg... ++func_mode_uninstall () ++{ ++ $opt_debug ++ RM="$nonopt" ++ files= ++ rmforce= ++ exit_status=0 ++ ++ # This variable tells wrapper scripts just to set variables rather ++ # than running their programs. ++ libtool_install_magic="$magic" ++ ++ for arg ++ do ++ case $arg in ++ -f) func_append RM " $arg"; rmforce=yes ;; ++ -*) 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 "X$dir" = X.; then ++ odir="$objdir" ++ else ++ odir="$dir/$objdir" ++ fi ++ func_basename "$file" ++ name="$func_basename_result" ++ test "$opt_mode" = uninstall && odir="$dir" ++ ++ # Remember odir for removal later, being careful to avoid duplicates ++ if test "$opt_mode" = clean; 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 test "$rmforce" = yes; then ++ continue ++ fi ++ ++ rmfiles="$file" ++ ++ case $name in ++ *.la) ++ # Possibly a libtool archive, so verify it. ++ if func_lalib_p "$file"; then ++ func_source $dir/$name ++ ++ # Delete the libtool libraries and symlinks. ++ for n in $library_names; do ++ 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" 'test "$rmforce" = yes || exit_status=1' ++ fi ++ ++ if test -n "$old_library"; then ++ # Do each command in the old_postuninstall commands. ++ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' ++ fi ++ # FIXME: should reinstall the best remaining shared library. ++ ;; ++ esac ++ fi ++ ;; ++ ++ *.lo) ++ # Possibly a libtool object, so verify it. ++ if func_lalib_p "$file"; then ++ ++ # Read the .lo file ++ func_source $dir/$name ++ ++ # Add PIC object to the list of files to remove. ++ if test -n "$pic_object" && ++ test "$pic_object" != none; then ++ 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 "$non_pic_object" != none; then ++ func_append rmfiles " $dir/$non_pic_object" ++ fi ++ fi ++ ;; ++ ++ *) ++ if test "$opt_mode" = clean ; then ++ noexename=$name ++ case $file in ++ *.exe) ++ func_stripname '' '.exe' "$file" ++ file=$func_stripname_result ++ func_stripname '' '.exe' "$name" ++ noexename=$func_stripname_result ++ # $file with .exe has already been added to rmfiles, ++ # add $file without .exe ++ 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 "$fast_install" = yes && 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 ++} ++ ++{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && ++ func_mode_uninstall ${1+"$@"} ++ ++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 ++# in which we disable both kinds of libraries. Given conflicting ++# choices, we go for a static library, that is the most portable, ++# since we can't tell whether shared libraries were disabled because ++# the user asked for that or because the platform doesn't support ++# them. This is particularly important on AIX, because we don't ++# support having both static and shared libraries enabled at the same ++# time on that platform, so we default to a shared-only configuration. ++# If a disable-shared tag is given, we'll fallback to a static-only ++# configuration. But we'll never go from static-only to shared-only. ++ ++# ### BEGIN LIBTOOL TAG CONFIG: disable-shared ++build_libtool_libs=no ++build_old_libs=yes ++# ### END LIBTOOL TAG CONFIG: disable-shared ++ ++# ### BEGIN LIBTOOL TAG CONFIG: disable-static ++build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` ++# ### END LIBTOOL TAG CONFIG: disable-static ++ ++# Local Variables: ++# mode:shell-script ++# sh-indentation:2 ++# End: ++# vi:sw=2 ++ +diff --git a/libclamav/libmspack-0.4alpha/m4/libtool.m4 b/libclamav/libmspack-0.4alpha/m4/libtool.m4 +new file mode 100644 +index 000000000000..828104cfde21 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/m4/libtool.m4 +@@ -0,0 +1,8001 @@ ++# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- ++# ++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, ++# 2006, 2007, 2008, 2009, 2010, 2011 Free Software ++# Foundation, Inc. ++# Written by Gordon Matzigkeit, 1996 ++# ++# This file is free software; the Free Software Foundation gives ++# unlimited permission to copy and/or distribute it, with or without ++# modifications, as long as this notice is preserved. ++ ++m4_define([_LT_COPYING], [dnl ++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, ++# 2006, 2007, 2008, 2009, 2010, 2011 Free Software ++# Foundation, Inc. ++# Written by Gordon Matzigkeit, 1996 ++# ++# This file is part of GNU Libtool. ++# ++# GNU Libtool is free software; you can redistribute it and/or ++# modify it under the terms of the GNU General Public License as ++# published by the Free Software Foundation; either version 2 of ++# the License, or (at your option) any later version. ++# ++# As a special exception to the GNU General Public License, ++# if you distribute this file as part of a program or library that ++# is built using GNU Libtool, you may include this file under the ++# same distribution terms that you use for the rest of that program. ++# ++# GNU Libtool is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with GNU Libtool; see the file COPYING. If not, a copy ++# can be downloaded from http://www.gnu.org/licenses/gpl.html, or ++# obtained by writing to the Free Software Foundation, Inc., ++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++]) ++ ++# serial 57 LT_INIT ++ ++ ++# LT_PREREQ(VERSION) ++# ------------------ ++# Complain and exit if this libtool version is less that VERSION. ++m4_defun([LT_PREREQ], ++[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, ++ [m4_default([$3], ++ [m4_fatal([Libtool version $1 or higher is required], ++ 63)])], ++ [$2])]) ++ ++ ++# _LT_CHECK_BUILDDIR ++# ------------------ ++# Complain if the absolute build directory name contains unusual characters ++m4_defun([_LT_CHECK_BUILDDIR], ++[case `pwd` in ++ *\ * | *\ *) ++ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; ++esac ++]) ++ ++ ++# LT_INIT([OPTIONS]) ++# ------------------ ++AC_DEFUN([LT_INIT], ++[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT ++AC_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_CC_BASENAME(CC) ++# ------------------- ++# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. ++m4_defun([_LT_CC_BASENAME], ++[for cc_temp in $1""; do ++ case $cc_temp in ++ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; ++ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; ++ \-*) ;; ++ *) break;; ++ esac ++done ++cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ++]) ++ ++ ++# _LT_FILEUTILS_DEFAULTS ++# ---------------------- ++# It is okay to use these file commands and assume they have been set ++# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. ++m4_defun([_LT_FILEUTILS_DEFAULTS], ++[: ${CP="cp -f"} ++: ${MV="mv -f"} ++: ${RM="rm -f"} ++])# _LT_FILEUTILS_DEFAULTS ++ ++ ++# _LT_SETUP ++# --------- ++m4_defun([_LT_SETUP], ++[AC_REQUIRE([AC_CANONICAL_HOST])dnl ++AC_REQUIRE([AC_CANONICAL_BUILD])dnl ++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_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 ++ ++_LT_CONFIG_LIBTOOL_INIT([ ++# See if we are running on zsh, and set the options which allow our ++# commands through without removal of \ escapes INIT. ++if test -n "\${ZSH_VERSION+set}" ; then ++ setopt NO_GLOB_SUBST ++fi ++]) ++if test -n "${ZSH_VERSION+set}" ; then ++ setopt NO_GLOB_SUBST ++fi ++ ++_LT_CHECK_OBJDIR ++ ++m4_require([_LT_TAG_COMPILER])dnl ++ ++case $host_os in ++aix3*) ++ # AIX sometimes has problems with the GCC collect2 program. For some ++ # reason, if we set the COLLECT_NAMES environment variable, the problems ++ # vanish in a puff of smoke. ++ if test "X${COLLECT_NAMES+set}" != Xset; then ++ COLLECT_NAMES= ++ export COLLECT_NAMES ++ fi ++ ;; ++esac ++ ++# Global variables: ++ofile=libtool ++can_build_shared=yes ++ ++# All known linkers require a `.a' archive for static linking (except MSVC, ++# which needs '.lib'). ++libext=a ++ ++with_gnu_ld="$lt_cv_prog_gnu_ld" ++ ++old_CC="$CC" ++old_CFLAGS="$CFLAGS" ++ ++# Set sane defaults for various variables ++test -z "$CC" && CC=cc ++test -z "$LTCC" && LTCC=$CC ++test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS ++test -z "$LD" && LD=ld ++test -z "$ac_objext" && ac_objext=o ++ ++_LT_CC_BASENAME([$compiler]) ++ ++# Only perform the check for file, if the check method requires it ++test -z "$MAGIC_CMD" && MAGIC_CMD=file ++case $deplibs_check_method in ++file_magic*) ++ if test "$file_magic_cmd" = '$MAGIC_CMD'; then ++ _LT_PATH_MAGIC ++ fi ++ ;; ++esac ++ ++# Use C for the default configuration in the libtool script ++LT_SUPPORTED_TAG([CC]) ++_LT_LANG_C_CONFIG ++_LT_LANG_DEFAULT_CONFIG ++_LT_CONFIG_COMMANDS ++])# _LT_SETUP ++ ++ ++# _LT_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\\"\\\`\\\\\\"" ++ ;; ++ *) ++ 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\\"\\\`\\\\\\"" ++ ;; ++ *) ++ 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 $lt_write_fail = 0 && 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 "$silent" = yes && ++ lt_config_lt_args="$lt_config_lt_args --quiet" ++exec AS_MESSAGE_LOG_FD>/dev/null ++$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false ++exec AS_MESSAGE_LOG_FD>>config.log ++$lt_cl_success || AS_EXIT(1) ++])# LT_OUTPUT ++ ++ ++# _LT_CONFIG(TAG) ++# --------------- ++# If TAG is the built-in tag, create an initial libtool script with a ++# default configuration from the untagged config vars. Otherwise add code ++# to config.status for appending the configuration named by TAG from the ++# matching tagged config vars. ++m4_defun([_LT_CONFIG], ++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++_LT_CONFIG_SAVE_COMMANDS([ ++ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl ++ m4_if(_LT_TAG, [C], [ ++ # See if we are running on zsh, and set the options which allow our ++ # commands through without removal of \ escapes. ++ if test -n "${ZSH_VERSION+set}" ; then ++ setopt NO_GLOB_SUBST ++ fi ++ ++ cfgfile="${ofile}T" ++ trap "$RM \"$cfgfile\"; exit 1" 1 2 15 ++ $RM "$cfgfile" ++ ++ cat <<_LT_EOF >> "$cfgfile" ++#! $SHELL ++ ++# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. ++# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION ++# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: ++# NOTE: Changes made to this file will be lost: look at ltmain.sh. ++# ++_LT_COPYING ++_LT_LIBTOOL_TAGS ++ ++# ### BEGIN LIBTOOL CONFIG ++_LT_LIBTOOL_CONFIG_VARS ++_LT_LIBTOOL_TAG_VARS ++# ### END LIBTOOL CONFIG ++ ++_LT_EOF ++ ++ case $host_os in ++ aix3*) ++ cat <<\_LT_EOF >> "$cfgfile" ++# AIX sometimes has problems with the GCC collect2 program. For some ++# reason, if we set the COLLECT_NAMES environment variable, the problems ++# vanish in a puff of smoke. ++if test "X${COLLECT_NAMES+set}" != Xset; then ++ COLLECT_NAMES= ++ export COLLECT_NAMES ++fi ++_LT_EOF ++ ;; ++ esac ++ ++ _LT_PROG_LTMAIN ++ ++ # We use sed instead of cat because bash on DJGPP gets confused if ++ # if finds mixed CR/LF and LF-only lines. Since sed operates in ++ # text mode, it properly converts lines to CR/LF. This bash problem ++ # is reportedly fixed, but why not run on old versions too? ++ sed '$q' "$ltmain" >> "$cfgfile" \ ++ || (rm -f "$cfgfile"; exit 1) ++ ++ _LT_PROG_REPLACE_SHELLFNS ++ ++ mv -f "$cfgfile" "$ofile" || ++ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") ++ chmod +x "$ofile" ++], ++[cat <<_LT_EOF >> "$ofile" ++ ++dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded ++dnl in a comment (ie after a #). ++# ### BEGIN LIBTOOL TAG CONFIG: $1 ++_LT_LIBTOOL_TAG_VARS(_LT_TAG) ++# ### END LIBTOOL TAG CONFIG: $1 ++_LT_EOF ++])dnl /m4_if ++], ++[m4_if([$1], [], [ ++ PACKAGE='$PACKAGE' ++ VERSION='$VERSION' ++ TIMESTAMP='$TIMESTAMP' ++ RM='$RM' ++ ofile='$ofile'], []) ++])dnl /_LT_CONFIG_SAVE_COMMANDS ++])# _LT_CONFIG ++ ++ ++# LT_SUPPORTED_TAG(TAG) ++# --------------------- ++# Trace this macro to discover what tags are supported by the libtool ++# --tag option, using: ++# autoconf --trace 'LT_SUPPORTED_TAG:$1' ++AC_DEFUN([LT_SUPPORTED_TAG], []) ++ ++ ++# C support is built-in for now ++m4_define([_LT_LANG_C_enabled], []) ++m4_define([_LT_TAGS], []) ++ ++ ++# LT_LANG(LANG) ++# ------------- ++# Enable libtool support for the given language if not already enabled. ++AC_DEFUN([LT_LANG], ++[AC_BEFORE([$0], [LT_OUTPUT])dnl ++m4_case([$1], ++ [C], [_LT_LANG(C)], ++ [C++], [_LT_LANG(CXX)], ++ [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 $_lt_result -eq 0; then ++ lt_cv_apple_cc_single_mod=yes ++ else ++ cat conftest.err >&AS_MESSAGE_LOG_FD ++ fi ++ rm -rf libconftest.dylib* ++ rm -f conftest.* ++ fi]) ++ ++ AC_CACHE_CHECK([for -exported_symbols_list linker flag], ++ [lt_cv_ld_exported_symbols_list], ++ [lt_cv_ld_exported_symbols_list=no ++ save_LDFLAGS=$LDFLAGS ++ echo "_main" > conftest.sym ++ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], ++ [lt_cv_ld_exported_symbols_list=yes], ++ [lt_cv_ld_exported_symbols_list=no]) ++ LDFLAGS="$save_LDFLAGS" ++ ]) ++ ++ 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 cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD ++ $AR cru 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 $_lt_result -eq 0 && $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*) # darwin 5.x on ++ # if running on 10.5 or later, the deployment target defaults ++ # to the OS version, if on x86, and 10.4, the deployment ++ # target defaults to 10.4. Don't you love it? ++ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in ++ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) ++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; ++ 10.[[012]]*) ++ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; ++ 10.*) ++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; ++ esac ++ ;; ++ esac ++ if test "$lt_cv_apple_cc_single_mod" = "yes"; then ++ _lt_dar_single_mod='$single_module' ++ fi ++ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then ++ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' ++ else ++ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' ++ fi ++ if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; 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 "$lt_cv_ld_force_load" = "yes"; 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*) _lt_dar_can_shared=yes ;; ++ *) _lt_dar_can_shared=$GCC ;; ++ esac ++ if test "$_lt_dar_can_shared" = "yes"; 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 "$lt_cv_apple_cc_single_mod" != "yes"; then ++ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" ++ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" ++ fi ++],[]) ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++]) ++ ++# _LT_SYS_MODULE_PATH_AIX([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 "${lt_cv_aix_libpath+set}" = 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 which will find a shell with a builtin ++# printf (which 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], ++[AC_MSG_CHECKING([for sysroot]) ++AC_ARG_WITH([sysroot], ++[ --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 "$GCC" = yes; 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 in which 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 "x$enable_libtool_lock" != xno && enable_libtool_lock=yes ++ ++# Some flags need to be propagated to the compiler or linker for good ++# libtool support. ++case $host in ++ia64-*-hpux*) ++ # Find out which ABI we are using. ++ echo 'int i;' > conftest.$ac_ext ++ if AC_TRY_EVAL(ac_compile); then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *ELF-32*) ++ HPUX_IA64_MODE="32" ++ ;; ++ *ELF-64*) ++ HPUX_IA64_MODE="64" ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++*-*-irix6*) ++ # Find out which ABI we are using. ++ echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext ++ if AC_TRY_EVAL(ac_compile); then ++ if test "$lt_cv_prog_gnu_ld" = yes; then ++ case `/usr/bin/file conftest.$ac_objext` in ++ *32-bit*) ++ LD="${LD-ld} -melf32bsmip" ++ ;; ++ *N32*) ++ LD="${LD-ld} -melf32bmipn32" ++ ;; ++ *64-bit*) ++ LD="${LD-ld} -melf64bmip" ++ ;; ++ esac ++ else ++ case `/usr/bin/file conftest.$ac_objext` in ++ *32-bit*) ++ LD="${LD-ld} -32" ++ ;; ++ *N32*) ++ LD="${LD-ld} -n32" ++ ;; ++ *64-bit*) ++ LD="${LD-ld} -64" ++ ;; ++ esac ++ fi ++ fi ++ rm -rf conftest* ++ ;; ++ ++x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ ++s390*-*linux*|s390*-*tpf*|sparc*-*linux*) ++ # Find out which ABI we are using. ++ echo 'int i;' > conftest.$ac_ext ++ if AC_TRY_EVAL(ac_compile); then ++ case `/usr/bin/file conftest.o` in ++ *32-bit*) ++ case $host in ++ x86_64-*kfreebsd*-gnu) ++ LD="${LD-ld} -m elf_i386_fbsd" ++ ;; ++ x86_64-*linux*) ++ LD="${LD-ld} -m elf_i386" ++ ;; ++ ppc64-*linux*|powerpc64-*linux*) ++ LD="${LD-ld} -m elf32ppclinux" ++ ;; ++ s390x-*linux*) ++ LD="${LD-ld} -m elf_s390" ++ ;; ++ sparc64-*linux*) ++ LD="${LD-ld} -m elf32_sparc" ++ ;; ++ esac ++ ;; ++ *64-bit*) ++ case $host in ++ x86_64-*kfreebsd*-gnu) ++ LD="${LD-ld} -m elf_x86_64_fbsd" ++ ;; ++ x86_64-*linux*) ++ LD="${LD-ld} -m elf_x86_64" ++ ;; ++ ppc*-*linux*|powerpc*-*linux*) ++ LD="${LD-ld} -m elf64ppc" ++ ;; ++ s390*-*linux*|s390*-*tpf*) ++ LD="${LD-ld} -m elf64_s390" ++ ;; ++ sparc*-*linux*) ++ LD="${LD-ld} -m elf64_sparc" ++ ;; ++ esac ++ ;; ++ esac ++ fi ++ rm -rf conftest* ++ ;; ++ ++*-*-sco3.2v5*) ++ # On SCO OpenServer 5, we need -belf to get full-featured binaries. ++ SAVE_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -belf" ++ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, ++ [AC_LANG_PUSH(C) ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) ++ AC_LANG_POP]) ++ if test x"$lt_cv_cc_needs_belf" != x"yes"; then ++ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf ++ CFLAGS="$SAVE_CFLAGS" ++ fi ++ ;; ++*-*solaris*) ++ # Find out which ABI we are using. ++ echo 'int i;' > conftest.$ac_ext ++ if AC_TRY_EVAL(ac_compile); then ++ case `/usr/bin/file conftest.o` in ++ *64-bit*) ++ case $lt_cv_prog_gnu_ld in ++ yes*) ++ case $host in ++ i?86-*-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} ++: ${AR_FLAGS=cru} ++_LT_DECL([], [AR], [1], [The archiver]) ++_LT_DECL([], [AR_FLAGS], [1], [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 "$ac_status" -eq 0; then ++ # Ensure the archiver fails upon bogus file names. ++ rm -f conftest.$ac_objext libconftest.a ++ AC_TRY_EVAL([lt_ar_try]) ++ if test "$ac_status" -ne 0; then ++ lt_cv_ar_at_file=@ ++ fi ++ fi ++ rm -f conftest.* libconftest.a ++ ]) ++ ]) ++ ++if test "x$lt_cv_ar_at_file" = xno; 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 ++ 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" ++ # 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 x"[$]$2" = xyes; then ++ m4_if([$5], , :, [$5]) ++else ++ m4_if([$6], , :, [$6]) ++fi ++])# _LT_COMPILER_OPTION ++ ++# Old name: ++AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) ++ ++ ++# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, ++# [ACTION-SUCCESS], [ACTION-FAILURE]) ++# ---------------------------------------------------- ++# Check whether the given linker option works ++AC_DEFUN([_LT_LINKER_OPTION], ++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_DECL_SED])dnl ++AC_CACHE_CHECK([$1], [$2], ++ [$2=no ++ save_LDFLAGS="$LDFLAGS" ++ LDFLAGS="$LDFLAGS $3" ++ echo "$lt_simple_link_test_code" > conftest.$ac_ext ++ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then ++ # The linker can only warn and ignore the option if not recognized ++ # So say no if there are warnings ++ if test -s conftest.err; then ++ # Append any errors to the config.log. ++ cat conftest.err 1>&AS_MESSAGE_LOG_FD ++ $ECHO "$_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 x"[$]$2" = xyes; then ++ m4_if([$4], , :, [$4]) ++else ++ m4_if([$5], , :, [$5]) ++fi ++])# _LT_LINKER_OPTION ++ ++# Old name: ++AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) ++ ++ ++# LT_CMD_MAX_LEN ++#--------------- ++AC_DEFUN([LT_CMD_MAX_LEN], ++[AC_REQUIRE([AC_CANONICAL_HOST])dnl ++# find the maximum length of command line arguments ++AC_MSG_CHECKING([the maximum length of command line arguments]) ++AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl ++ i=0 ++ teststring="ABCD" ++ ++ case $build_os in ++ msdosdjgpp*) ++ # On DJGPP, this test can blow up pretty badly due to problems in libc ++ # (any single argument exceeding 2000 bytes causes a buffer overrun ++ # during glob expansion). Even if it were fixed, the result of this ++ # check would be larger than it should be. ++ lt_cv_sys_max_cmd_len=12288; # 12K is about right ++ ;; ++ ++ gnu*) ++ # Under GNU Hurd, this test is not required because there is ++ # no limit to the length of command line arguments. ++ # Libtool will interpret -1 as no limit whatsoever ++ lt_cv_sys_max_cmd_len=-1; ++ ;; ++ ++ cygwin* | mingw* | cegcc*) ++ # On Win9x/ME, this test blows up -- it succeeds, but takes ++ # about 5 minutes as the teststring grows exponentially. ++ # Worse, since 9x/ME are not pre-emptively multitasking, ++ # you end up with a "frozen" computer, even though with patience ++ # the test eventually succeeds (with a max line length of 256k). ++ # Instead, let's just punt: use the minimum linelength reported by ++ # all of the supported platforms: 8192 (on NT/2K/XP). ++ lt_cv_sys_max_cmd_len=8192; ++ ;; ++ ++ 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; ++ ;; ++ ++ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) ++ # This has been around since 386BSD, at least. Likely further. ++ if test -x /sbin/sysctl; then ++ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` ++ elif test -x /usr/sbin/sysctl; then ++ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` ++ else ++ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs ++ fi ++ # And add a safety zone ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ++ ;; ++ ++ interix*) ++ # We know the value 262144 and hardcode it with a safety zone (like BSD) ++ lt_cv_sys_max_cmd_len=196608 ++ ;; ++ ++ 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"; 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 $i != 17 # 1/2 MB should be enough ++ do ++ i=`expr $i + 1` ++ teststring=$teststring$teststring ++ done ++ # Only check the string length outside the loop. ++ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` ++ teststring= ++ # Add a significant safety factor because C++ compilers can tack on ++ # massive amounts of additional arguments before passing them to the ++ # linker. It appears as though 1/2 is a usable value. ++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ++ fi ++ ;; ++ esac ++]) ++if test -n $lt_cv_sys_max_cmd_len ; then ++ AC_MSG_RESULT($lt_cv_sys_max_cmd_len) ++else ++ AC_MSG_RESULT(none) ++fi ++max_cmd_len=$lt_cv_sys_max_cmd_len ++_LT_DECL([], [max_cmd_len], [0], ++ [What is the maximum length of a command?]) ++])# LT_CMD_MAX_LEN ++ ++# Old name: ++AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) ++ ++ ++# _LT_HEADER_DLFCN ++# ---------------- ++m4_defun([_LT_HEADER_DLFCN], ++[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ++])# _LT_HEADER_DLFCN ++ ++ ++# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, ++# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) ++# ---------------------------------------------------------------- ++m4_defun([_LT_TRY_DLOPEN_SELF], ++[m4_require([_LT_HEADER_DLFCN])dnl ++if test "$cross_compiling" = yes; then : ++ [$4] ++else ++ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 ++ lt_status=$lt_dlunknown ++ cat > conftest.$ac_ext <<_LT_EOF ++[#line $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 -fvisbility=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 "x$enable_dlopen" != xyes; then ++ enable_dlopen=unknown ++ enable_dlopen_self=unknown ++ enable_dlopen_self_static=unknown ++else ++ lt_cv_dlopen=no ++ lt_cv_dlopen_libs= ++ ++ case $host_os in ++ beos*) ++ lt_cv_dlopen="load_add_on" ++ lt_cv_dlopen_libs= ++ lt_cv_dlopen_self=yes ++ ;; ++ ++ mingw* | pw32* | cegcc*) ++ lt_cv_dlopen="LoadLibrary" ++ lt_cv_dlopen_libs= ++ ;; ++ ++ cygwin*) ++ lt_cv_dlopen="dlopen" ++ lt_cv_dlopen_libs= ++ ;; ++ ++ darwin*) ++ # if libdl is installed we need to link against it ++ AC_CHECK_LIB([dl], [dlopen], ++ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ ++ lt_cv_dlopen="dyld" ++ lt_cv_dlopen_libs= ++ lt_cv_dlopen_self=yes ++ ]) ++ ;; ++ ++ *) ++ AC_CHECK_FUNC([shl_load], ++ [lt_cv_dlopen="shl_load"], ++ [AC_CHECK_LIB([dld], [shl_load], ++ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], ++ [AC_CHECK_FUNC([dlopen], ++ [lt_cv_dlopen="dlopen"], ++ [AC_CHECK_LIB([dl], [dlopen], ++ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], ++ [AC_CHECK_LIB([svld], [dlopen], ++ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], ++ [AC_CHECK_LIB([dld], [dld_link], ++ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ++ ]) ++ ]) ++ ]) ++ ]) ++ ]) ++ ;; ++ esac ++ ++ if test "x$lt_cv_dlopen" != xno; then ++ enable_dlopen=yes ++ else ++ enable_dlopen=no ++ fi ++ ++ case $lt_cv_dlopen in ++ dlopen) ++ save_CPPFLAGS="$CPPFLAGS" ++ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" ++ ++ save_LDFLAGS="$LDFLAGS" ++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" ++ ++ save_LIBS="$LIBS" ++ LIBS="$lt_cv_dlopen_libs $LIBS" ++ ++ AC_CACHE_CHECK([whether a program can dlopen itself], ++ lt_cv_dlopen_self, [dnl ++ _LT_TRY_DLOPEN_SELF( ++ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, ++ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ++ ]) ++ ++ if test "x$lt_cv_dlopen_self" = xyes; then ++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" ++ AC_CACHE_CHECK([whether a statically linked program can dlopen itself], ++ lt_cv_dlopen_self_static, [dnl ++ _LT_TRY_DLOPEN_SELF( ++ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, ++ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ++ ]) ++ fi ++ ++ CPPFLAGS="$save_CPPFLAGS" ++ LDFLAGS="$save_LDFLAGS" ++ LIBS="$save_LIBS" ++ ;; ++ esac ++ ++ case $lt_cv_dlopen_self in ++ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; ++ *) enable_dlopen_self=unknown ;; ++ esac ++ ++ case $lt_cv_dlopen_self_static in ++ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; ++ *) enable_dlopen_self_static=unknown ;; ++ esac ++fi ++_LT_DECL([dlopen_support], [enable_dlopen], [0], ++ [Whether dlopen is supported]) ++_LT_DECL([dlopen_self], [enable_dlopen_self], [0], ++ [Whether dlopen of programs is supported]) ++_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], ++ [Whether dlopen of statically linked programs is supported]) ++])# LT_SYS_DLOPEN_SELF ++ ++# Old name: ++AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) ++ ++ ++# _LT_COMPILER_C_O([TAGNAME]) ++# --------------------------- ++# Check to see if options -c and -o are simultaneously supported by compiler. ++# This macro does not hard code the compiler like AC_PROG_CC_C_O. ++m4_defun([_LT_COMPILER_C_O], ++[m4_require([_LT_DECL_SED])dnl ++m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_TAG_COMPILER])dnl ++AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], ++ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], ++ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no ++ $RM -r conftest 2>/dev/null ++ mkdir conftest ++ cd conftest ++ mkdir out ++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext ++ ++ lt_compiler_flag="-o out/conftest2.$ac_objext" ++ # Insert the option either (1) after the last *FLAGS variable, or ++ # (2) before a word containing "conftest.", or (3) at the end. ++ # Note that $ac_compile itself does not contain backslashes and begins ++ # with a dollar sign (not a hyphen), so the echo should work correctly. ++ lt_compile=`echo "$ac_compile" | $SED \ ++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ ++ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ ++ -e 's:$: $lt_compiler_flag:'` ++ (eval echo "\"\$as_me:$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 "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then ++ # do not overwrite the value of need_locks provided by the user ++ AC_MSG_CHECKING([if we can lock with hard links]) ++ hard_links=yes ++ $RM conftest* ++ ln conftest.a conftest.b 2>/dev/null && hard_links=no ++ touch conftest.a ++ ln conftest.a conftest.b 2>&5 || hard_links=no ++ ln conftest.a conftest.b 2>/dev/null && hard_links=no ++ AC_MSG_RESULT([$hard_links]) ++ if test "$hard_links" = no; then ++ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) ++ need_locks=warn ++ fi ++else ++ need_locks=no ++fi ++_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ++])# _LT_COMPILER_FILE_LOCKS ++ ++ ++# _LT_CHECK_OBJDIR ++# ---------------- ++m4_defun([_LT_CHECK_OBJDIR], ++[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], ++[rm -f .libs 2>/dev/null ++mkdir .libs 2>/dev/null ++if test -d .libs; then ++ lt_cv_objdir=.libs ++else ++ # MS-DOS does not allow filenames that begin with a dot. ++ lt_cv_objdir=_libs ++fi ++rmdir .libs 2>/dev/null]) ++objdir=$lt_cv_objdir ++_LT_DECL([], [objdir], [0], ++ [The name of the directory that contains temporary libtool files])dnl ++m4_pattern_allow([LT_OBJDIR])dnl ++AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", ++ [Define to the sub-directory in which libtool stores uninstalled libraries.]) ++])# _LT_CHECK_OBJDIR ++ ++ ++# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) ++# -------------------------------------- ++# Check hardcoding attributes. ++m4_defun([_LT_LINKER_HARDCODE_LIBPATH], ++[AC_MSG_CHECKING([how to hardcode library paths into programs]) ++_LT_TAGVAR(hardcode_action, $1)= ++if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || ++ test -n "$_LT_TAGVAR(runpath_var, $1)" || ++ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then ++ ++ # We can hardcode non-existent directories. ++ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && ++ # If the only mechanism to avoid hardcoding is shlibpath_var, we ++ # have to relink, otherwise we might link with an installed library ++ # when we should be linking with a yet-to-be-installed one ++ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && ++ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then ++ # Linking always hardcodes the temporary library directory. ++ _LT_TAGVAR(hardcode_action, $1)=relink ++ else ++ # We can link without hardcoding, and we can hardcode nonexisting dirs. ++ _LT_TAGVAR(hardcode_action, $1)=immediate ++ fi ++else ++ # We cannot hardcode anything, or else we can only hardcode existing ++ # directories. ++ _LT_TAGVAR(hardcode_action, $1)=unsupported ++fi ++AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) ++ ++if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || ++ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then ++ # Fast installation is not supported ++ enable_fast_install=no ++elif test "$shlibpath_overrides_runpath" = yes || ++ test "$enable_shared" = no; then ++ # Fast installation is not necessary ++ enable_fast_install=needless ++fi ++_LT_TAGDECL([], [hardcode_action], [0], ++ [How to hardcode a shared library path into an executable]) ++])# _LT_LINKER_HARDCODE_LIBPATH ++ ++ ++# _LT_CMD_STRIPLIB ++# ---------------- ++m4_defun([_LT_CMD_STRIPLIB], ++[m4_require([_LT_DECL_EGREP]) ++striplib= ++old_striplib= ++AC_MSG_CHECKING([whether stripping libraries is possible]) ++if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then ++ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" ++ test -z "$striplib" && striplib="$STRIP --strip-unneeded" ++ AC_MSG_RESULT([yes]) ++else ++# FIXME - insert some real tests, host_os isn't really good enough ++ case $host_os in ++ darwin*) ++ if test -n "$STRIP" ; then ++ striplib="$STRIP -x" ++ old_striplib="$STRIP -S" ++ AC_MSG_RESULT([yes]) ++ else ++ AC_MSG_RESULT([no]) ++ fi ++ ;; ++ *) ++ AC_MSG_RESULT([no]) ++ ;; ++ esac ++fi ++_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) ++_LT_DECL([], [striplib], [1]) ++])# _LT_CMD_STRIPLIB ++ ++ ++# _LT_SYS_DYNAMIC_LINKER([TAG]) ++# ----------------------------- ++# PORTME Fill in your ld.so characteristics ++m4_defun([_LT_SYS_DYNAMIC_LINKER], ++[AC_REQUIRE([AC_CANONICAL_HOST])dnl ++m4_require([_LT_DECL_EGREP])dnl ++m4_require([_LT_FILEUTILS_DEFAULTS])dnl ++m4_require([_LT_DECL_OBJDUMP])dnl ++m4_require([_LT_DECL_SED])dnl ++m4_require([_LT_CHECK_SHELL_FEATURES])dnl ++AC_MSG_CHECKING([dynamic linker characteristics]) ++m4_if([$1], ++ [], [ ++if test "$GCC" = yes; then ++ case $host_os in ++ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; ++ *) lt_awk_arg="/^libraries:/" ;; ++ esac ++ 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` ++ for lt_sys_path in $lt_search_path_spec; do ++ if test -d "$lt_sys_path/$lt_multi_os_dir"; then ++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" ++ else ++ test -d "$lt_sys_path" && \ ++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" ++ fi ++ done ++ lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' ++BEGIN {RS=" "; FS="/|\n";} { ++ lt_foo=""; ++ lt_count=0; ++ for (lt_i = NF; lt_i > 0; lt_i--) { ++ if ($lt_i != "" && $lt_i != ".") { ++ if ($lt_i == "..") { ++ lt_count++; ++ } else { ++ if (lt_count == 0) { ++ lt_foo="/" $lt_i lt_foo; ++ } else { ++ lt_count--; ++ } ++ } ++ } ++ } ++ if (lt_foo != "") { lt_freq[[lt_foo]]++; } ++ if (lt_freq[[lt_foo]] == 1) { print lt_foo; } ++}'` ++ # 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 "$host_cpu" = ia64; then ++ # AIX 5 supports IA64 ++ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' ++ shlibpath_var=LD_LIBRARY_PATH ++ else ++ # With GCC up to 2.95.x, collect2 would create an import file ++ # for dependence libraries. The import file would start with ++ # the line `#! .'. This would cause the generated library to ++ # depend on `.', always an invalid library. This was fixed in ++ # development snapshots of GCC prior to 3.0. ++ case $host_os in ++ aix4 | aix4.[[01]] | aix4.[[01]].*) ++ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' ++ echo ' yes ' ++ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then ++ : ++ else ++ can_build_shared=no ++ fi ++ ;; ++ esac ++ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct ++ # soname into executable. Probably we can add versioning support to ++ # collect2, so additional links can be useful in future. ++ if test "$aix_use_runtimelinking" = yes; then ++ # If using run time linking (on AIX 4.2 or later) use lib.so ++ # instead of lib.a to let people know that these are not ++ # typical AIX shared libraries. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ else ++ # We preserve .a as extension for shared libraries through AIX4.2 ++ # and later when we are not doing run time linking. ++ library_names_spec='${libname}${release}.a $libname.a' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ fi ++ shlibpath_var=LIBPATH ++ fi ++ ;; ++ ++amigaos*) ++ case $host_cpu in ++ powerpc) ++ # Since July 2007 AmigaOS4 officially supports .so libraries. ++ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ ;; ++ m68k) ++ library_names_spec='$libname.ixlibrary $libname.a' ++ # Create ${libname}_ixlibrary.a entries in /sys/libs. ++ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ++ ;; ++ esac ++ ;; ++ ++beos*) ++ library_names_spec='${libname}${shared_ext}' ++ dynamic_linker="$host_os ld.so" ++ shlibpath_var=LIBRARY_PATH ++ ;; ++ ++bsdi[[45]]*) ++ version_type=linux # 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*) ++ # Native MSVC ++ 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 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*) ++ # 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} $libname${shared_ext}' ++ need_version=no ++ need_lib_prefix=no ++ ;; ++ freebsd-*) ++ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' ++ need_version=yes ++ ;; ++ esac ++ shlibpath_var=LD_LIBRARY_PATH ++ case $host_os in ++ freebsd2.*) ++ shlibpath_overrides_runpath=yes ++ ;; ++ freebsd3.[[01]]* | freebsdelf3.[[01]]*) ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ ;; ++ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ ++ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) ++ shlibpath_overrides_runpath=no ++ hardcode_into_libs=yes ++ ;; ++ *) # from 4.6 on, and DragonFly ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ ;; ++ esac ++ ;; ++ ++gnu*) ++ version_type=linux # 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=no ++ hardcode_into_libs=yes ++ ;; ++ ++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=yes ++ 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 "X$HPUX_IA64_MODE" = X32; then ++ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" ++ else ++ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" ++ fi ++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ++ ;; ++ hppa*64*) ++ shrext_cmds='.sl' ++ hardcode_into_libs=yes ++ dynamic_linker="$host_os dld.sl" ++ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH ++ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" ++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ++ ;; ++ *) ++ shrext_cmds='.sl' ++ dynamic_linker="$host_os dld.sl" ++ shlibpath_var=SHLIB_PATH ++ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ ;; ++ esac ++ # HP-UX runs *really* slowly unless shared libraries are mode 555, ... ++ postinstall_cmds='chmod 555 $lib' ++ # 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 "$lt_cv_prog_gnu_ld" = yes; 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 ++ ;; ++ ++# This must be glibc/ELF. ++linux* | k*bsd*-gnu | kopensolaris*-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 ++ ++ # Append ld.so.conf contents to the search path ++ if test -f /etc/ld.so.conf; then ++ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` ++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" ++ fi ++ ++ # We used to test for /lib/ld.so.1 and disable shared libraries on ++ # powerpc, because MkLinux only supported shared libraries with the ++ # GNU dynamic linker. Since this was broken with cross compilers, ++ # most powerpc-linux boxes support dynamic linking these days and ++ # people can always --disable-shared, the test was removed, and we ++ # assume the GNU/Linux dynamic linker is in use. ++ dynamic_linker='GNU/Linux ld.so' ++ ;; ++ ++netbsdelf*-gnu) ++ version_type=linux ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=no ++ hardcode_into_libs=yes ++ dynamic_linker='NetBSD ld.elf_so' ++ ;; ++ ++netbsd*) ++ version_type=sunos ++ need_lib_prefix=no ++ need_version=no ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' ++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' ++ dynamic_linker='NetBSD (a.out) ld.so' ++ else ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ dynamic_linker='NetBSD ld.elf_so' ++ fi ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ ;; ++ ++newsos6) ++ version_type=linux # 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*) ++ version_type=sunos ++ sys_lib_dlsearch_path_spec="/usr/lib" ++ need_lib_prefix=no ++ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. ++ case $host_os in ++ openbsd3.3 | openbsd3.3.*) need_version=yes ;; ++ *) need_version=no ;; ++ esac ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' ++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' ++ shlibpath_var=LD_LIBRARY_PATH ++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ case $host_os in ++ openbsd2.[[89]] | openbsd2.[[89]].*) ++ shlibpath_overrides_runpath=no ++ ;; ++ *) ++ shlibpath_overrides_runpath=yes ++ ;; ++ esac ++ else ++ shlibpath_overrides_runpath=yes ++ fi ++ ;; ++ ++os2*) ++ libname_spec='$name' ++ shrext_cmds=".dll" ++ need_lib_prefix=no ++ library_names_spec='$libname${shared_ext} $libname.a' ++ dynamic_linker='OS/2 ld.exe' ++ shlibpath_var=LIBPATH ++ ;; ++ ++osf3* | osf4* | osf5*) ++ version_type=osf ++ need_lib_prefix=no ++ need_version=no ++ soname_spec='${libname}${release}${shared_ext}$major' ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ++ shlibpath_var=LD_LIBRARY_PATH ++ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" ++ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ++ ;; ++ ++rdos*) ++ dynamic_linker=no ++ ;; ++ ++solaris*) ++ version_type=linux # 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 "$with_gnu_ld" = yes; 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=freebsd-elf ++ need_lib_prefix=no ++ need_version=no ++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' ++ soname_spec='${libname}${release}${shared_ext}$major' ++ shlibpath_var=LD_LIBRARY_PATH ++ shlibpath_overrides_runpath=yes ++ hardcode_into_libs=yes ++ if test "$with_gnu_ld" = yes; then ++ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' ++ else ++ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' ++ case $host_os in ++ sco3.2v5*) ++ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ++ ;; ++ esac ++ fi ++ sys_lib_dlsearch_path_spec='/usr/lib' ++ ;; ++ ++tpf*) ++ # TPF is a cross-target only. Preferred cross-host = GNU/Linux. ++ version_type=linux # 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 "$dynamic_linker" = no && can_build_shared=no ++ ++variables_saved_for_relink="PATH $shlibpath_var $runpath_var" ++if test "$GCC" = yes; then ++ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" ++fi ++ ++if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then ++ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" ++fi ++if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then ++ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" ++fi ++ ++_LT_DECL([], [variables_saved_for_relink], [1], ++ [Variables whose values should be saved in libtool wrapper scripts and ++ restored at link time]) ++_LT_DECL([], [need_lib_prefix], [0], ++ [Do we need the "lib" prefix for modules?]) ++_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) ++_LT_DECL([], [version_type], [0], [Library versioning type]) ++_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) ++_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) ++_LT_DECL([], [shlibpath_overrides_runpath], [0], ++ [Is shlibpath searched before the hard-coded library search path?]) ++_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) ++_LT_DECL([], [library_names_spec], [1], ++ [[List of archive names. First name is the real one, the rest are links. ++ The last name is the one that the linker finds with -lNAME]]) ++_LT_DECL([], [soname_spec], [1], ++ [[The coded name of the library, if different from the real name]]) ++_LT_DECL([], [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], [2], ++ [Run-time system search path for libraries]) ++])# _LT_SYS_DYNAMIC_LINKER ++ ++ ++# _LT_PATH_TOOL_PREFIX(TOOL) ++# -------------------------- ++# find a file program which can recognize shared library ++AC_DEFUN([_LT_PATH_TOOL_PREFIX], ++[m4_require([_LT_DECL_EGREP])dnl ++AC_MSG_CHECKING([for $1]) ++AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, ++[case $MAGIC_CMD in ++[[\\/*] | ?:[\\/]*]) ++ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ++ ;; ++*) ++ lt_save_MAGIC_CMD="$MAGIC_CMD" ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++dnl $ac_dummy forces splitting on constant user-supplied paths. ++dnl POSIX.2 word splitting is done only on the output of word expansions, ++dnl not every word. This closes a longstanding sh security hole. ++ ac_dummy="m4_if([$2], , $PATH, [$2])" ++ for ac_dir in $ac_dummy; do ++ IFS="$lt_save_ifs" ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/$1; then ++ lt_cv_path_MAGIC_CMD="$ac_dir/$1" ++ if test -n "$file_magic_test_file"; then ++ case $deplibs_check_method in ++ "file_magic "*) ++ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` ++ MAGIC_CMD="$lt_cv_path_MAGIC_CMD" ++ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | ++ $EGREP "$file_magic_regex" > /dev/null; then ++ : ++ else ++ cat <<_LT_EOF 1>&2 ++ ++*** Warning: the command libtool uses to detect shared libraries, ++*** $file_magic_cmd, produces output that libtool cannot recognize. ++*** The result is that libtool may fail to recognize shared libraries ++*** as such. This will affect the creation of libtool libraries that ++*** depend on shared libraries, but programs linked with such libtool ++*** libraries will work regardless of this problem. Nevertheless, you ++*** may want to report the problem to your system manager and/or to ++*** bug-libtool@gnu.org ++ ++_LT_EOF ++ fi ;; ++ esac ++ fi ++ break ++ fi ++ done ++ IFS="$lt_save_ifs" ++ MAGIC_CMD="$lt_save_MAGIC_CMD" ++ ;; ++esac]) ++MAGIC_CMD="$lt_cv_path_MAGIC_CMD" ++if test -n "$MAGIC_CMD"; then ++ AC_MSG_RESULT($MAGIC_CMD) ++else ++ AC_MSG_RESULT(no) ++fi ++_LT_DECL([], [MAGIC_CMD], [0], ++ [Used to examine libraries when file_magic_cmd begins with "file"])dnl ++])# _LT_PATH_TOOL_PREFIX ++ ++# Old name: ++AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) ++ ++ ++# _LT_PATH_MAGIC ++# -------------- ++# find a file program which can recognize a shared library ++m4_defun([_LT_PATH_MAGIC], ++[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) ++if test -z "$lt_cv_path_MAGIC_CMD"; then ++ if test -n "$ac_tool_prefix"; then ++ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) ++ else ++ MAGIC_CMD=: ++ fi ++fi ++])# _LT_PATH_MAGIC ++ ++ ++# LT_PATH_LD ++# ---------- ++# find the pathname to the GNU or non-GNU linker ++AC_DEFUN([LT_PATH_LD], ++[AC_REQUIRE([AC_PROG_CC])dnl ++AC_REQUIRE([AC_CANONICAL_HOST])dnl ++AC_REQUIRE([AC_CANONICAL_BUILD])dnl ++m4_require([_LT_DECL_SED])dnl ++m4_require([_LT_DECL_EGREP])dnl ++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 "$withval" = no || with_gnu_ld=yes], ++ [with_gnu_ld=no])dnl ++ ++ac_prog=ld ++if test "$GCC" = yes; then ++ # Check if gcc -print-prog-name=ld gives a path. ++ AC_MSG_CHECKING([for ld used by $CC]) ++ case $host in ++ *-*-mingw*) ++ # gcc leaves a trailing carriage return which upsets mingw ++ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; ++ *) ++ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; ++ esac ++ case $ac_prog in ++ # Accept absolute paths. ++ [[\\/]]* | ?:[[\\/]]*) ++ re_direlt='/[[^/]][[^/]]*/\.\./' ++ # Canonicalize the pathname of ld ++ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` ++ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ++ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` ++ done ++ test -z "$LD" && LD="$ac_prog" ++ ;; ++ "") ++ # If it fails, then pretend we aren't using GCC. ++ ac_prog=ld ++ ;; ++ *) ++ # If it is relative, then search for the first ld in PATH. ++ with_gnu_ld=unknown ++ ;; ++ esac ++elif test "$with_gnu_ld" = yes; then ++ AC_MSG_CHECKING([for GNU ld]) ++else ++ AC_MSG_CHECKING([for non-GNU ld]) ++fi ++AC_CACHE_VAL(lt_cv_path_LD, ++[if test -z "$LD"; then ++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ++ for ac_dir in $PATH; do ++ IFS="$lt_save_ifs" ++ test -z "$ac_dir" && ac_dir=. ++ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then ++ lt_cv_path_LD="$ac_dir/$ac_prog" ++ # Check to see if the program is GNU ld. I'd rather use --version, ++ # but apparently some variants of GNU ld only accept -v. ++ # Break only if it was the GNU/non-GNU ld that we prefer. ++ case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then ++ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' ++ lt_cv_file_magic_cmd='func_win32_libid' ++ else ++ # 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*) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then ++ case $host_cpu in ++ i*86 ) ++ # Not sure whether the presence of OpenBSD here was a mistake. ++ # Let's accept both of them until this is cleared up. ++ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' ++ lt_cv_file_magic_cmd=/usr/bin/file ++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ++ ;; ++ esac ++ else ++ lt_cv_deplibs_check_method=pass_all ++ fi ++ ;; ++ ++gnu*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++haiku*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++hpux10.20* | hpux11*) ++ lt_cv_file_magic_cmd=/usr/bin/file ++ case $host_cpu in ++ ia64*) ++ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' ++ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ++ ;; ++ hppa*64*) ++ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-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) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++netbsd* | netbsdelf*-gnu) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then ++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' ++ else ++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' ++ fi ++ ;; ++ ++newos6*) ++ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' ++ lt_cv_file_magic_cmd=/usr/bin/file ++ lt_cv_file_magic_test_file=/usr/lib/libnls.so ++ ;; ++ ++*nto* | *qnx*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++openbsd*) ++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' ++ else ++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' ++ fi ++ ;; ++ ++osf3* | osf4* | osf5*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++rdos*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++solaris*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ ++sysv4 | sysv4.3*) ++ case $host_vendor in ++ motorola) ++ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' ++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ++ ;; ++ ncr) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ sequent) ++ lt_cv_file_magic_cmd='/bin/file' ++ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ++ ;; ++ sni) ++ lt_cv_file_magic_cmd='/bin/file' ++ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" ++ lt_cv_file_magic_test_file=/lib/libc.so ++ ;; ++ siemens) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ pc) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++ esac ++ ;; ++ ++tpf*) ++ lt_cv_deplibs_check_method=pass_all ++ ;; ++esac ++]) ++ ++file_magic_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 ++ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in ++ */dev/null* | *'Invalid file or object type'*) ++ lt_cv_path_NM="$tmp_nm -B" ++ break ++ ;; ++ *) ++ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in ++ */dev/null*) ++ lt_cv_path_NM="$tmp_nm -p" ++ break ++ ;; ++ *) ++ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but ++ continue # so that we can try to find one that supports BSD flags ++ ;; ++ esac ++ ;; ++ esac ++ fi ++ done ++ IFS="$lt_save_ifs" ++ done ++ : ${lt_cv_path_NM=no} ++fi]) ++if test "$lt_cv_path_NM" != "no"; then ++ NM="$lt_cv_path_NM" ++else ++ # Didn't find any BSD compatible name lister, look for dumpbin. ++ if test -n "$DUMPBIN"; then : ++ # Let the user override the test. ++ else ++ AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) ++ case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in ++ *COFF*) ++ DUMPBIN="$DUMPBIN -symbols" ++ ;; ++ *) ++ 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 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 "x$lt_cv_path_mainfest_tool" != xyes; then ++ MANIFEST_TOOL=: ++fi ++_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ++])# _LT_PATH_MANIFEST_TOOL ++ ++ ++# 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 "$GCC" = yes; 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 "$host_cpu" = ia64; then ++ symcode='[[ABCDEGRST]]' ++ fi ++ ;; ++irix* | nonstopux*) ++ symcode='[[BCDEGRST]]' ++ ;; ++osf*) ++ symcode='[[BCDEGQRST]]' ++ ;; ++solaris*) ++ symcode='[[BDRT]]' ++ ;; ++sco3.2v5*) ++ symcode='[[DT]]' ++ ;; ++sysv4.2uw2*) ++ symcode='[[DT]]' ++ ;; ++sysv5* | sco5v6* | unixware* | OpenUNIX*) ++ symcode='[[ABDT]]' ++ ;; ++sysv4) ++ symcode='[[DFNSTU]]' ++ ;; ++esac ++ ++# If we're using GNU nm, then use its standard symbol codes. ++case `$NM -V 2>&1` in ++*GNU* | *'with BFD'*) ++ symcode='[[ABCDGIRSTW]]' ;; ++esac ++ ++# Transform an extracted symbol line into a proper C declaration. ++# Some systems (esp. on ia64) link data and code symbols differently, ++# so use this general approach. ++lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" ++ ++# Transform an extracted symbol line into symbol name and symbol address ++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" ++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" ++ ++# Handle CRLF in mingw tool chain ++opt_cr= ++case $build_os in ++mingw*) ++ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ++ ;; ++esac ++ ++# Try without a prefix underscore, then with it. ++for ac_symprfx in "" "_"; do ++ ++ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. ++ symxfrm="\\1 $ac_symprfx\\2 \\2" ++ ++ # Write the raw and C identifiers. ++ if test "$lt_cv_nm_interface" = "MS dumpbin"; then ++ # Fake it for dumpbin and say T for any non-static function ++ # and D for any global variable. ++ # Also find C++ and __fastcall symbols from MSVC++, ++ # which start with @ or ?. ++ lt_cv_sys_global_symbol_pipe="$AWK ['"\ ++" {last_section=section; section=\$ 3};"\ ++" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ ++" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ ++" \$ 0!~/External *\|/{next};"\ ++" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ ++" {if(hide[section]) next};"\ ++" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ ++" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ ++" s[1]~/^[@?]/{print s[1], s[1]; next};"\ ++" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ ++" ' prfx=^$ac_symprfx]" ++ else ++ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" ++ fi ++ 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 con'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* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext ++ cat <<\_LT_EOF >> conftest.$ac_ext ++ {0, (void *) 0} ++}; ++ ++/* This works around a problem in FreeBSD linker */ ++#ifdef FREEBSD_WORKAROUND ++static const void *lt_preloaded_setup() { ++ return lt__PROGRAM__LTX_preloaded_symbols; ++} ++#endif ++ ++#ifdef __cplusplus ++} ++#endif ++_LT_EOF ++ # Now try linking the two files. ++ mv conftest.$ac_objext conftstm.$ac_objext ++ lt_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 "$pipe_works" = yes; then ++ break ++ else ++ lt_cv_sys_global_symbol_pipe= ++ fi ++done ++]) ++if test -z "$lt_cv_sys_global_symbol_pipe"; then ++ lt_cv_sys_global_symbol_to_cdecl= ++fi ++if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then ++ AC_MSG_RESULT(failed) ++else ++ AC_MSG_RESULT(ok) ++fi ++ ++# 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_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_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 "$GXX" = yes; then ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ++ case $host_os in ++ aix*) ++ # All AIX code is PIC. ++ if test "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ fi ++ ;; ++ ++ amigaos*) ++ case $host_cpu in ++ powerpc) ++ # see comment about AmigaOS4 .so support ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ m68k) ++ # FIXME: we need at least 68020 code to build shared libraries, but ++ # adding the `-m68020' flag to GCC prevents building anything better, ++ # like `-m68040'. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ++ ;; ++ esac ++ ;; ++ ++ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) ++ # PIC is the default for these OSes. ++ ;; ++ mingw* | cygwin* | os2* | pw32* | cegcc*) ++ # This hack is so that the source file can tell whether it is being ++ # built for inclusion in a dll (and should export symbols for example). ++ # Although the cygwin gcc ignores -fPIC, still need this for old-style ++ # (--disable-auto-import) libraries ++ m4_if([$1], [GCJ], [], ++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ++ ;; ++ darwin* | rhapsody*) ++ # PIC is the default on this platform ++ # Common symbols not allowed in MH_DYLIB files ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ++ ;; ++ *djgpp*) ++ # DJGPP does not support shared libraries at all ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)= ++ ;; ++ 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 "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ else ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' ++ fi ++ ;; ++ chorus*) ++ case $cc_basename in ++ cxch68*) ++ # Green Hills C++ Compiler ++ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ++ ;; ++ esac ++ ;; ++ 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*) ++ # FreeBSD uses GNU C++ ++ ;; ++ hpux9* | hpux10* | hpux11*) ++ case $cc_basename in ++ CC*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ++ if test "$host_cpu" != ia64; then ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ++ fi ++ ;; ++ aCC*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ++ case $host_cpu in ++ hppa*64*|ia64*) ++ # +Z the default ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ++ ;; ++ esac ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ interix*) ++ # This is c89, which is MS Visual C++ (no shared libs) ++ # Anyone wants to do a port? ++ ;; ++ irix5* | irix6* | nonstopux*) ++ case $cc_basename in ++ CC*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ # CC pic flag -KPIC is the default. ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ linux* | k*bsd*-gnu | kopensolaris*-gnu) ++ case $cc_basename in ++ KCC*) ++ # KAI C++ Compiler ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ ecpc* ) ++ # old Intel C++ for x86_64 which still supported -KPIC. ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ;; ++ icpc* ) ++ # Intel C++, used to be incompatible with GCC. ++ # ICC 10 doesn't accept -KPIC any more. ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ;; ++ pgCC* | pgcpp*) ++ # Portland Group C++ compiler ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ ;; ++ cxx*) ++ # Compaq C++ ++ # Make sure the PIC flag is empty. It appears that all Alpha ++ # Linux and Compaq Tru64 Unix objects are PIC. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)= ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ ;; ++ xlc* | xlC* | 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* | netbsdelf*-gnu) ++ ;; ++ *qnx* | *nto*) ++ # QNX uses GNU C++, but need to define -shared option too, otherwise ++ # it will coredump. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ++ ;; ++ osf3* | osf4* | osf5*) ++ case $cc_basename in ++ KCC*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ++ ;; ++ RCC*) ++ # Rational C++ 2.4.1 ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ++ ;; ++ cxx*) ++ # Digital/Compaq C++ ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ # Make sure the PIC flag is empty. It appears that all Alpha ++ # Linux and Compaq Tru64 Unix objects are PIC. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)= ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ ;; ++ *) ++ ;; ++ esac ++ ;; ++ psos*) ++ ;; ++ solaris*) ++ case $cc_basename in ++ CC* | 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 "$GCC" = yes; then ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ++ case $host_os in ++ aix*) ++ # All AIX code is PIC. ++ if test "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ fi ++ ;; ++ ++ amigaos*) ++ case $host_cpu in ++ powerpc) ++ # see comment about AmigaOS4 .so support ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ ;; ++ m68k) ++ # FIXME: we need at least 68020 code to build shared libraries, but ++ # adding the `-m68020' flag to GCC prevents building anything better, ++ # like `-m68040'. ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ++ ;; ++ esac ++ ;; ++ ++ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) ++ # PIC is the default for these OSes. ++ ;; ++ ++ mingw* | cygwin* | pw32* | os2* | cegcc*) ++ # This hack is so that the source file can tell whether it is being ++ # built for inclusion in a dll (and should export symbols for example). ++ # Although the cygwin gcc ignores -fPIC, still need this for old-style ++ # (--disable-auto-import) libraries ++ m4_if([$1], [GCJ], [], ++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ++ ;; ++ ++ darwin* | rhapsody*) ++ # PIC is the default on this platform ++ # Common symbols not allowed in MH_DYLIB files ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ++ ;; ++ ++ 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 "$host_cpu" = ia64; then ++ # AIX 5 now supports IA64 processor ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ++ else ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' ++ fi ++ ;; ++ ++ mingw* | cygwin* | pw32* | os2* | cegcc*) ++ # This hack is so that the source file can tell whether it is being ++ # built for inclusion in a dll (and should export symbols for example). ++ m4_if([$1], [GCJ], [], ++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ++ ;; ++ ++ hpux9* | hpux10* | hpux11*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but ++ # not for PA HP-UX. ++ case $host_cpu in ++ hppa*64*|ia64*) ++ # +Z the default ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ++ ;; ++ esac ++ # Is there a better lt_prog_compiler_static that works with the bundled CC? ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ++ ;; ++ ++ irix5* | irix6* | nonstopux*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ # PIC (with -KPIC) is the default. ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ++ ;; ++ ++ linux* | k*bsd*-gnu | kopensolaris*-gnu) ++ case $cc_basename in ++ # old Intel for x86_64 which still supported -KPIC. ++ ecc*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ;; ++ # icc used to be incompatible with GCC. ++ # ICC 10 doesn't accept -KPIC any more. ++ icc* | ifort*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ++ ;; ++ # Lahey Fortran 8.1. ++ lf95*) ++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' ++ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ++ ;; ++ 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' ++ ;; ++ 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 which do not support PIC, -DPIC is meaningless: ++ *djgpp*) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)= ++ ;; ++ *) ++ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ++ ;; ++esac ++ ++AC_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 AIX nm, but means don't demangle with GNU nm ++ # Also, AIX nm treats weak defined symbols like other global defined ++ # symbols, whereas GNU nm marks them as "W". ++ 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) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ else ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ fi ++ ;; ++ pw32*) ++ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ++ ;; ++ cygwin* | mingw* | cegcc*) ++ case $cc_basename in ++ cl*) ++ _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 ++ ;; ++ linux* | k*bsd*-gnu | gnu*) ++ _LT_TAGVAR(link_all_deplibs, $1)=no ++ ;; ++ *) ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ++ ;; ++ esac ++], [ ++ 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++ port hasn't been tested in a loooong time ++ # When not using gcc, we currently assume that we are using ++ # Microsoft Visual C++. ++ if test "$GCC" != yes; then ++ with_gnu_ld=no ++ fi ++ ;; ++ interix*) ++ # we just hope/assume this is gcc and not c89 (= MSVC++) ++ with_gnu_ld=yes ++ ;; ++ openbsd*) ++ with_gnu_ld=no ++ ;; ++ linux* | k*bsd*-gnu | gnu*) ++ _LT_TAGVAR(link_all_deplibs, $1)=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 "$with_gnu_ld" = yes; 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 "$lt_use_gnu_ld_interface" = yes; then ++ # If archive_cmds runs LD, not CC, wlarc should be empty ++ wlarc='${wl}' ++ ++ # Set some defaults for GNU ld with shared library support. These ++ # are reset later if shared libraries are not supported. Putting them ++ # here allows them to be overridden if necessary. ++ runpath_var=LD_RUN_PATH ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' ++ # ancient GNU ld didn't support --whole-archive et. al. ++ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then ++ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' ++ else ++ _LT_TAGVAR(whole_archive_flag_spec, $1)= ++ fi ++ supports_anon_versioning=no ++ case `$LD -v 2>&1` in ++ *GNU\ gold*) supports_anon_versioning=yes ;; ++ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 ++ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... ++ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... ++ *\ 2.11.*) ;; # other 2.11 versions ++ *) supports_anon_versioning=yes ;; ++ esac ++ ++ # See if GNU ld supports shared libraries. ++ case $host_os in ++ aix[[3-9]]*) ++ # On AIX/PPC, the GNU linker is very broken ++ if test "$host_cpu" != ia64; then ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ cat <<_LT_EOF 1>&2 ++ ++*** Warning: the GNU linker, at least up to release 2.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 (1st line ++ # is EXPORTS), use it as is; otherwise, prepend... ++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then ++ cp $export_symbols $output_objdir/$soname.def; ++ else ++ echo EXPORTS > $output_objdir/$soname.def; ++ cat $export_symbols >> $output_objdir/$soname.def; ++ fi~ ++ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ 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 ++ ;; ++ ++ interix[[3-9]]*) ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. ++ # Instead, shared libraries are loaded at an image base (0x10000000 by ++ # default) and relocated if they conflict, which is a slow very memory ++ # consuming and fragmenting process. To avoid this, we pick a random, ++ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link ++ # time. Moving up from 0x10000000 also allows more sbrk(2) space. ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ++ ;; ++ ++ gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) ++ tmp_diet=no ++ if test "$host_os" = linux-dietlibc; then ++ case $cc_basename in ++ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) ++ esac ++ fi ++ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ ++ && test "$tmp_diet" = no ++ then ++ tmp_addflag=' $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' ;; ++ 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 "x$supports_anon_versioning" = xyes; then ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ ++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ ++ echo "local: *; };" >> $output_objdir/$libname.ver~ ++ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' ++ fi ++ ++ case $cc_basename in ++ xlf* | 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 "x$supports_anon_versioning" = xyes; then ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ ++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ ++ echo "local: *; };" >> $output_objdir/$libname.ver~ ++ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' ++ fi ++ ;; ++ esac ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ netbsd* | netbsdelf*-gnu) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' ++ wlarc= ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $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 can not ++*** reliably create shared libraries on SCO systems. Therefore, libtool ++*** is disabling shared libraries support. We urge you to upgrade GNU ++*** binutils to release 2.16.91.0.3 or newer. Another option is to modify ++*** your PATH or compiler configuration so that the native linker is ++*** used, and then restart. ++ ++_LT_EOF ++ ;; ++ *) ++ # For security reasons, it is highly recommended that you always ++ # use absolute paths for naming shared libraries, and exclude the ++ # DT_RUNPATH tag from executables and libraries. But doing so ++ # requires that you compile everything twice, which is a pain. ++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ esac ++ ;; ++ ++ sunos4*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' ++ wlarc= ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ *) ++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $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 "$_LT_TAGVAR(ld_shlibs, $1)" = no; then ++ runpath_var= ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)= ++ _LT_TAGVAR(whole_archive_flag_spec, $1)= ++ fi ++ else ++ # PORTME fill in a description of your system's linker (not GNU ld) ++ case $host_os in ++ aix3*) ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ _LT_TAGVAR(always_export_symbols, $1)=yes ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' ++ # Note: this linker hardcodes the directories in LIBPATH if there ++ # are no directories specified by -L. ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then ++ # Neither direct hardcoding nor static linking is supported with a ++ # broken collect2. ++ _LT_TAGVAR(hardcode_direct, $1)=unsupported ++ fi ++ ;; ++ ++ aix[[4-9]]*) ++ if test "$host_cpu" = ia64; then ++ # On IA64, the linker does run time linking by default, so we don't ++ # have to do anything special. ++ aix_use_runtimelinking=no ++ exp_sym_flag='-Bexport' ++ no_entry_flag="" ++ else ++ # If we're using GNU nm, then we don't want the "-C" option. ++ # -C means demangle to AIX nm, but means don't demangle with GNU nm ++ # Also, AIX nm treats weak defined symbols like other global ++ # defined symbols, whereas GNU nm marks them as "W". ++ 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) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ else ++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' ++ fi ++ aix_use_runtimelinking=no ++ ++ # Test if we are trying to use run time linking or normal ++ # AIX style linking. If -brtl is somewhere in LDFLAGS, we ++ # need to do runtime linking. ++ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) ++ for ld_flag in $LDFLAGS; do ++ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then ++ aix_use_runtimelinking=yes ++ break ++ fi ++ done ++ ;; ++ esac ++ ++ exp_sym_flag='-bexport' ++ no_entry_flag='-bnoentry' ++ fi ++ ++ # When large executables or shared objects are built, AIX ld can ++ # have problems creating the table of contents. If linking a library ++ # or program results in "error TOC overflow" add -mminimal-toc to ++ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not ++ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. ++ ++ _LT_TAGVAR(archive_cmds, $1)='' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':' ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' ++ ++ if test "$GCC" = yes; then ++ case $host_os in aix4.[[012]]|aix4.[[012]].*) ++ # We only want to do this on AIX 4.2 and lower, the check ++ # below for broken collect2 doesn't work under 4.3+ ++ collect2name=`${CC} -print-prog-name=collect2` ++ if test -f "$collect2name" && ++ strings "$collect2name" | $GREP resolve_lib_name >/dev/null ++ then ++ # We have reworked collect2 ++ : ++ else ++ # We have old collect2 ++ _LT_TAGVAR(hardcode_direct, $1)=unsupported ++ # It fails to find uninstalled libraries when the uninstalled ++ # path is not listed in the libpath. Setting hardcode_minus_L ++ # to unsupported forces relinking ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)= ++ fi ++ ;; ++ esac ++ shared_flag='-shared' ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag="$shared_flag "'${wl}-G' ++ fi ++ _LT_TAGVAR(link_all_deplibs, $1)=no ++ else ++ # not using gcc ++ if test "$host_cpu" = ia64; then ++ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release ++ # chokes on -Wl,-G. The following line is correct: ++ shared_flag='-G' ++ else ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag='${wl}-G' ++ else ++ shared_flag='${wl}-bM:SRE' ++ fi ++ fi ++ fi ++ ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' ++ # It seems that -bexpall does not export symbols beginning with ++ # underscore (_), so it is better to generate a list of symbols to export. ++ _LT_TAGVAR(always_export_symbols, $1)=yes ++ if test "$aix_use_runtimelinking" = yes; then ++ # Warning - without using the other runtime loading flags (-brtl), ++ # -berok will link without error, but may produce a broken library. ++ _LT_TAGVAR(allow_undefined_flag, $1)='-berok' ++ # Determine the default libpath from the value encoded in an ++ # empty executable. ++ _LT_SYS_MODULE_PATH_AIX([$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 "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" ++ else ++ if test "$host_cpu" = ia64; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' ++ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" ++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" ++ else ++ # Determine the default libpath from the value encoded in an ++ # empty executable. ++ _LT_SYS_MODULE_PATH_AIX([$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 "$with_gnu_ld" = yes; 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 ++ # This is similar to how AIX traditionally builds its shared libraries. ++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' ++ fi ++ fi ++ ;; ++ ++ amigaos*) ++ case $host_cpu in ++ powerpc) ++ # see comment about AmigaOS4 .so support ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='' ++ ;; ++ m68k) ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ ;; ++ esac ++ ;; ++ ++ bsdi[[45]]*) ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ++ ;; ++ ++ cygwin* | mingw* | pw32* | cegcc*) ++ # When not using gcc, we currently assume that we are using ++ # Microsoft Visual C++. ++ # hardcode_libdir_flag_spec is actually meaningless, as there is ++ # no search path for DLLs. ++ case $cc_basename in ++ cl*) ++ # Native MSVC ++ _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~linknames=' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then ++ sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; ++ else ++ sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $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 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*) ++ _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 "$GCC" = yes; 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 $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ fi ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ ++ # hardcode_minus_L: Not really in the search PATH, ++ # but as the default location of the library. ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ ;; ++ ++ hpux10*) ++ if test "$GCC" = yes && test "$with_gnu_ld" = no; 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 "$with_gnu_ld" = no; 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 "$GCC" = yes && test "$with_gnu_ld" = no; then ++ case $host_cpu in ++ hppa*64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ++ ;; ++ ia64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $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 "$with_gnu_ld" = no; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ++ case $host_cpu in ++ hppa*64*|ia64*) ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ *) ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ ++ # hardcode_minus_L: Not really in the search PATH, ++ # but as the default location of the library. ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ ;; ++ esac ++ fi ++ ;; ++ ++ irix5* | irix6* | nonstopux*) ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $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 "$lt_cv_irix_exported_symbol" = yes; 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 ++ ;; ++ ++ netbsd* | netbsdelf*-gnu) ++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF ++ fi ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ newsos6) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ *nto* | *qnx*) ++ ;; ++ ++ openbsd*) ++ if test -f /usr/libexec/ld.so; then ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ else ++ case $host_os in ++ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ ;; ++ esac ++ fi ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ os2*) ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' ++ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ++ ;; ++ ++ osf3*) ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && 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 "$GCC" = yes; 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 "$GCC" = yes; 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 "$GCC" = yes; then ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ++ else ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ++ fi ++ ;; ++ esac ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ ;; ++ ++ sunos4*) ++ if test "x$host_vendor" = xsequent; then ++ # Use $CC to link under sequent, because it throws in some extra .o ++ # files that make .init and .fini sections work. ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' ++ fi ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ sysv4) ++ case $host_vendor in ++ sni) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ++ ;; ++ siemens) ++ ## LD is ld it makes a PLAMLIB ++ ## CC just makes a GrossModule. ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ ;; ++ motorola) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ++ ;; ++ esac ++ runpath_var='LD_RUN_PATH' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ sysv4.3*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ++ ;; ++ ++ sysv4*MP*) ++ if test -d /usr/nec; then ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ runpath_var=LD_RUN_PATH ++ hardcode_runpath_var=yes ++ _LT_TAGVAR(ld_shlibs, $1)=yes ++ fi ++ ;; ++ ++ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) ++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ runpath_var='LD_RUN_PATH' ++ ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ fi ++ ;; ++ ++ sysv5* | sco3.2v5* | sco5v6*) ++ # Note: We can NOT use -z defs as we might desire, because we do not ++ # link with -lc, and that would cause any symbols used from libc to ++ # always be unresolved, which means just about no library would ++ # ever link correctly. If we're not using GNU ld we use -z text ++ # though, which does catch some bad symbols but isn't as heavy-handed ++ # as -z defs. ++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' ++ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':' ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' ++ runpath_var='LD_RUN_PATH' ++ ++ if test "$GCC" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ else ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ fi ++ ;; ++ ++ uts4*) ++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ ++ *) ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ++ if test x$host_vendor = xsni; then ++ case $host in ++ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ++ ;; ++ esac ++ fi ++ fi ++]) ++AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) ++test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no ++ ++_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld ++ ++_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl ++_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl ++_LT_DECL([], [extract_expsyms_cmds], [2], ++ [The commands to extract the exported symbol list from a shared archive]) ++ ++# ++# Do we need to explicitly link libc? ++# ++case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in ++x|xyes) ++ # Assume -lc should be added ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes ++ ++ if test "$enable_shared" = yes && test "$GCC" = yes; then ++ case $_LT_TAGVAR(archive_cmds, $1) in ++ *'~'*) ++ # FIXME: we may have to deal with multi-command sequences. ++ ;; ++ '$CC '*) ++ # Test whether the compiler implicitly links with -lc since on some ++ # systems, -lgcc has to come before -lc. If gcc already passes -lc ++ # to ld, don't add -lc before -lgcc. ++ AC_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 which library types will actually be built ++ AC_MSG_CHECKING([if libtool supports shared libraries]) ++ AC_MSG_RESULT([$can_build_shared]) ++ ++ AC_MSG_CHECKING([whether to build shared libraries]) ++ test "$can_build_shared" = "no" && enable_shared=no ++ ++ # On AIX, shared libraries and static libraries use the same namespace, and ++ # are all built from PIC. ++ case $host_os in ++ aix3*) ++ test "$enable_shared" = yes && enable_static=no ++ if test -n "$RANLIB"; then ++ archive_cmds="$archive_cmds~\$RANLIB \$lib" ++ postinstall_cmds='$RANLIB $lib' ++ fi ++ ;; ++ ++ aix[[4-9]]*) ++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then ++ test "$enable_shared" = yes && enable_static=no ++ fi ++ ;; ++ esac ++ AC_MSG_RESULT([$enable_shared]) ++ ++ AC_MSG_CHECKING([whether to build static libraries]) ++ # Make sure either enable_shared or enable_static is yes. ++ test "$enable_shared" = yes || enable_static=yes ++ AC_MSG_RESULT([$enable_static]) ++ ++ _LT_CONFIG($1) ++fi ++AC_LANG_POP ++CC="$lt_save_CC" ++])# _LT_LANG_C_CONFIG ++ ++ ++# _LT_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 "X$CXX" != "Xno" && ++ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || ++ (test "X$CXX" != "Xg++"))) ; then ++ AC_PROG_CXXCPP ++else ++ _lt_caught_CXX_error=yes ++fi ++ ++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 "$_lt_caught_CXX_error" != yes; then ++ # Code to be used in simple compile tests ++ lt_simple_compile_test_code="int some_variable = 0;" ++ ++ # Code to be used in simple link tests ++ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' ++ ++ # ltmain only uses $CC for tagged configurations so make sure $CC is set. ++ _LT_TAG_COMPILER ++ ++ # save warnings/boilerplate of simple test code ++ _LT_COMPILER_BOILERPLATE ++ _LT_LINKER_BOILERPLATE ++ ++ # Allow CC to be a program name with arguments. ++ lt_save_CC=$CC ++ lt_save_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 "$GXX" = yes; then ++ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ++ else ++ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= ++ fi ++ ++ if test "$GXX" = yes; then ++ # Set up default GNU C++ configuration ++ ++ LT_PATH_LD ++ ++ # Check if GNU C++ uses GNU ld as the underlying linker, since the ++ # archiving commands below assume that GNU ld is being used. ++ if test "$with_gnu_ld" = yes; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC $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 "$host_cpu" = ia64; then ++ # On IA64, the linker does run time linking by default, so we don't ++ # have to do anything special. ++ aix_use_runtimelinking=no ++ exp_sym_flag='-Bexport' ++ no_entry_flag="" ++ else ++ aix_use_runtimelinking=no ++ ++ # Test if we are trying to use run time linking or normal ++ # AIX style linking. If -brtl is somewhere in LDFLAGS, we ++ # need to do runtime linking. ++ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) ++ for ld_flag in $LDFLAGS; do ++ case $ld_flag in ++ *-brtl*) ++ aix_use_runtimelinking=yes ++ break ++ ;; ++ esac ++ done ++ ;; ++ esac ++ ++ exp_sym_flag='-bexport' ++ no_entry_flag='-bnoentry' ++ fi ++ ++ # When large executables or shared objects are built, AIX ld can ++ # have problems creating the table of contents. If linking a library ++ # or program results in "error TOC overflow" add -mminimal-toc to ++ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not ++ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. ++ ++ _LT_TAGVAR(archive_cmds, $1)='' ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':' ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' ++ ++ if test "$GXX" = yes; then ++ case $host_os in aix4.[[012]]|aix4.[[012]].*) ++ # We only want to do this on AIX 4.2 and lower, the check ++ # below for broken collect2 doesn't work under 4.3+ ++ collect2name=`${CC} -print-prog-name=collect2` ++ if test -f "$collect2name" && ++ strings "$collect2name" | $GREP resolve_lib_name >/dev/null ++ then ++ # We have reworked collect2 ++ : ++ else ++ # We have old collect2 ++ _LT_TAGVAR(hardcode_direct, $1)=unsupported ++ # It fails to find uninstalled libraries when the uninstalled ++ # path is not listed in the libpath. Setting hardcode_minus_L ++ # to unsupported forces relinking ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)= ++ fi ++ esac ++ shared_flag='-shared' ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag="$shared_flag "'${wl}-G' ++ fi ++ else ++ # not using gcc ++ if test "$host_cpu" = ia64; then ++ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release ++ # chokes on -Wl,-G. The following line is correct: ++ shared_flag='-G' ++ else ++ if test "$aix_use_runtimelinking" = yes; then ++ shared_flag='${wl}-G' ++ else ++ shared_flag='${wl}-bM:SRE' ++ fi ++ fi ++ fi ++ ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' ++ # It seems that -bexpall does not export symbols beginning with ++ # underscore (_), so it is better to generate a list of symbols to ++ # export. ++ _LT_TAGVAR(always_export_symbols, $1)=yes ++ if test "$aix_use_runtimelinking" = yes; then ++ # Warning - without using the other runtime loading flags (-brtl), ++ # -berok will link without error, but may produce a broken library. ++ _LT_TAGVAR(allow_undefined_flag, $1)='-berok' ++ # Determine the default libpath from the value encoded in an empty ++ # executable. ++ _LT_SYS_MODULE_PATH_AIX([$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 "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" ++ else ++ if test "$host_cpu" = ia64; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' ++ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" ++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" ++ else ++ # Determine the default libpath from the value encoded in an ++ # empty executable. ++ _LT_SYS_MODULE_PATH_AIX([$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 "$with_gnu_ld" = yes; 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 ++ # This is similar to how AIX traditionally builds its shared ++ # libraries. ++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' ++ fi ++ fi ++ ;; ++ ++ beos*) ++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then ++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported ++ # Joseph Beckenbach says some releases of gcc ++ # support --undefined. This deserves some investigation. FIXME ++ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ ++ chorus*) ++ case $cc_basename in ++ *) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ;; ++ ++ cygwin* | mingw* | pw32* | cegcc*) ++ case $GXX,$cc_basename in ++ ,cl* | no,cl*) ++ # Native MSVC ++ # 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~linknames=' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then ++ $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; ++ else ++ $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $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 (1st line ++ # is EXPORTS), use it as is; otherwise, prepend... ++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then ++ cp $export_symbols $output_objdir/$soname.def; ++ else ++ echo EXPORTS > $output_objdir/$soname.def; ++ cat $export_symbols >> $output_objdir/$soname.def; ++ fi~ ++ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' ++ else ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ esac ++ ;; ++ darwin* | rhapsody*) ++ _LT_DARWIN_LINKER_FEATURES($1) ++ ;; ++ ++ dgux*) ++ case $cc_basename in ++ ec++*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ghcx*) ++ # Green Hills C++ Compiler ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ *) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ esac ++ ;; ++ ++ 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*) ++ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF ++ # conventions ++ _LT_TAGVAR(ld_shlibs, $1)=yes ++ ;; ++ ++ gnu*) ++ ;; ++ ++ 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 $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ # ++ # There doesn't appear to be a way to prevent this compiler from ++ # explicitly linking system object files so we need to strip them ++ # from the output so that they don't get included in the library ++ # dependencies. ++ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ++ ;; ++ *) ++ if test "$GXX" = yes; 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 $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ++ else ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ fi ++ ;; ++ esac ++ ;; ++ ++ hpux10*|hpux11*) ++ if test $with_gnu_ld = no; then ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=: ++ ++ case $host_cpu in ++ hppa*64*|ia64*) ++ ;; ++ *) ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ ;; ++ esac ++ fi ++ case $host_cpu in ++ hppa*64*|ia64*) ++ _LT_TAGVAR(hardcode_direct, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ ;; ++ *) ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, ++ # but as the default ++ # location of the library. ++ ;; ++ esac ++ ++ case $cc_basename in ++ CC*) ++ # FIXME: insert proper C++ library support ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ aCC*) ++ case $host_cpu in ++ hppa*64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ ia64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ *) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ esac ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ # ++ # There doesn't appear to be a way to prevent this compiler from ++ # explicitly linking system object files so we need to strip them ++ # from the output so that they don't get included in the library ++ # dependencies. ++ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ++ ;; ++ *) ++ if test "$GXX" = yes; then ++ if test $with_gnu_ld = no; then ++ case $host_cpu in ++ hppa*64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ ;; ++ ia64*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $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 "$GXX" = yes; then ++ if test "$with_gnu_ld" = no; 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) ++ 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 "x$supports_anon_versioning" = xyes; then ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ ++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ ++ echo "local: *; };" >> $output_objdir/$libname.ver~ ++ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' ++ fi ++ ;; ++ *) ++ case `$CC -V 2>&1 | sed 5q` in ++ *Sun\ C*) ++ # Sun C++ 5.9 ++ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; 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 ++ ;; ++ ++ openbsd2*) ++ # C++ shared libraries are fairly broken ++ _LT_TAGVAR(ld_shlibs, $1)=no ++ ;; ++ ++ openbsd*) ++ if test -f /usr/libexec/ld.so; then ++ _LT_TAGVAR(hardcode_direct, $1)=yes ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ++ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ++ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' ++ fi ++ output_verbose_link_cmd=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 "$GXX" = yes && test "$with_gnu_ld" = no; then ++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' ++ case $host in ++ osf3*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && 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 "$GXX" = yes && test "$with_gnu_ld" = no; then ++ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' ++ if $CC --version | $GREP -v '^2\.7' > /dev/null; then ++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ ++ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' ++ ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -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 $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ ++ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' ++ ++ # Commands to make compiler produce verbose output that lists ++ # what "hidden" libraries, object files and flags are used when ++ # linking a shared library. ++ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -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 can NOT use -z defs as we might desire, because we do not ++ # link with -lc, and that would cause any symbols used from libc to ++ # always be unresolved, which means just about no library would ++ # ever link correctly. If we're not using GNU ld we use -z text ++ # though, which does catch some bad symbols but isn't as heavy-handed ++ # as -z defs. ++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' ++ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' ++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no ++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' ++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':' ++ _LT_TAGVAR(link_all_deplibs, $1)=yes ++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' ++ runpath_var='LD_RUN_PATH' ++ ++ case $cc_basename in ++ CC*) ++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ++ _LT_TAGVAR(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 "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no ++ ++ _LT_TAGVAR(GCC, $1)="$GXX" ++ _LT_TAGVAR(LD, $1)="$LD" ++ ++ ## CAVEAT EMPTOR: ++ ## There is no encapsulation within the following macros, do not change ++ ## the running order or otherwise move them around unless you know exactly ++ ## what you are doing... ++ _LT_SYS_HIDDEN_LIBDEPS($1) ++ _LT_COMPILER_PIC($1) ++ _LT_COMPILER_C_O($1) ++ _LT_COMPILER_FILE_LOCKS($1) ++ _LT_LINKER_SHLIBS($1) ++ _LT_SYS_DYNAMIC_LINKER($1) ++ _LT_LINKER_HARDCODE_LIBPATH($1) ++ ++ _LT_CONFIG($1) ++ fi # test -n "$compiler" ++ ++ CC=$lt_save_CC ++ 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 "$_lt_caught_CXX_error" != yes ++ ++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 ${2} in ++ .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; ++ *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; 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 $p = "-L" || ++ test $p = "-R"; 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 "$pre_test_object_deps_done" = no; 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 "$pre_test_object_deps_done" = no; then ++ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then ++ _LT_TAGVAR(predep_objects, $1)="$p" ++ else ++ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" ++ fi ++ else ++ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then ++ _LT_TAGVAR(postdep_objects, $1)="$p" ++ else ++ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" ++ fi ++ fi ++ ;; ++ ++ *) ;; # Ignore the rest. ++ ++ esac ++ done ++ ++ # Clean up. ++ rm -f a.out a.exe ++else ++ echo "libtool.m4: error: problem compiling $1 test program" ++fi ++ ++$RM -f confest.$objext ++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)= ++ ;; ++ ++linux*) ++ case `$CC -V 2>&1 | sed 5q` in ++ *Sun\ C*) ++ # Sun C++ 5.9 ++ ++ # The more standards-conforming stlport4 library is ++ # incompatible with the Cstd library. Avoid specifying ++ # it if it's in CXXFLAGS. Ignore libCrun as ++ # -library=stlport4 depends on it. ++ case " $CXX $CXXFLAGS " in ++ *" -library=stlport4 "*) ++ solaris_use_stlport4=yes ++ ;; ++ esac ++ ++ if test "$solaris_use_stlport4" != yes; then ++ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' ++ fi ++ ;; ++ esac ++ ;; ++ ++solaris*) ++ case $cc_basename in ++ CC* | sunCC*) ++ # The more standards-conforming stlport4 library is ++ # incompatible with the Cstd library. Avoid specifying ++ # it if it's in CXXFLAGS. Ignore libCrun as ++ # -library=stlport4 depends on it. ++ case " $CXX $CXXFLAGS " in ++ *" -library=stlport4 "*) ++ solaris_use_stlport4=yes ++ ;; ++ esac ++ ++ # Adding this requires a known-good setup of shared libraries for ++ # Sun compiler versions before 5.6, else PIC objects from an old ++ # archive will be linked into the output, leading to subtle bugs. ++ if test "$solaris_use_stlport4" != yes; then ++ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' ++ fi ++ ;; ++ esac ++ ;; ++esac ++]) ++ ++case " $_LT_TAGVAR(postdeps, $1) " in ++*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; ++esac ++ _LT_TAGVAR(compiler_lib_search_dirs, $1)= ++if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then ++ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` ++fi ++_LT_TAGDECL([], [compiler_lib_search_dirs], [1], ++ [The directories searched by this compiler when creating a shared library]) ++_LT_TAGDECL([], [predep_objects], [1], ++ [Dependencies to place before and after the objects being linked to ++ create a shared library]) ++_LT_TAGDECL([], [postdep_objects], [1]) ++_LT_TAGDECL([], [predeps], [1]) ++_LT_TAGDECL([], [postdeps], [1]) ++_LT_TAGDECL([], [compiler_lib_search_path], [1], ++ [The library search path used internally by the compiler when linking ++ a shared library]) ++])# _LT_SYS_HIDDEN_LIBDEPS ++ ++ ++# _LT_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 "X$F77" = "Xno"; 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 "$_lt_disable_F77" != yes; then ++ # Code to be used in simple compile tests ++ lt_simple_compile_test_code="\ ++ subroutine t ++ return ++ end ++" ++ ++ # Code to be used in simple link tests ++ lt_simple_link_test_code="\ ++ program t ++ end ++" ++ ++ # ltmain only uses $CC for tagged configurations so make sure $CC is set. ++ _LT_TAG_COMPILER ++ ++ # save warnings/boilerplate of simple test code ++ _LT_COMPILER_BOILERPLATE ++ _LT_LINKER_BOILERPLATE ++ ++ # Allow CC to be a program name with arguments. ++ lt_save_CC="$CC" ++ lt_save_GCC=$GCC ++ 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 "$can_build_shared" = "no" && enable_shared=no ++ ++ # On AIX, shared libraries and static libraries use the same namespace, and ++ # are all built from PIC. ++ case $host_os in ++ aix3*) ++ test "$enable_shared" = yes && enable_static=no ++ if test -n "$RANLIB"; then ++ archive_cmds="$archive_cmds~\$RANLIB \$lib" ++ postinstall_cmds='$RANLIB $lib' ++ fi ++ ;; ++ aix[[4-9]]*) ++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then ++ test "$enable_shared" = yes && enable_static=no ++ fi ++ ;; ++ esac ++ AC_MSG_RESULT([$enable_shared]) ++ ++ AC_MSG_CHECKING([whether to build static libraries]) ++ # Make sure either enable_shared or enable_static is yes. ++ test "$enable_shared" = yes || enable_static=yes ++ AC_MSG_RESULT([$enable_static]) ++ ++ _LT_TAGVAR(GCC, $1)="$G77" ++ _LT_TAGVAR(LD, $1)="$LD" ++ ++ ## CAVEAT EMPTOR: ++ ## There is no encapsulation within the following macros, do not change ++ ## the running order or otherwise move them around unless you know exactly ++ ## what you are doing... ++ _LT_COMPILER_PIC($1) ++ _LT_COMPILER_C_O($1) ++ _LT_COMPILER_FILE_LOCKS($1) ++ _LT_LINKER_SHLIBS($1) ++ _LT_SYS_DYNAMIC_LINKER($1) ++ _LT_LINKER_HARDCODE_LIBPATH($1) ++ ++ _LT_CONFIG($1) ++ fi # test -n "$compiler" ++ ++ GCC=$lt_save_GCC ++ CC="$lt_save_CC" ++ CFLAGS="$lt_save_CFLAGS" ++fi # test "$_lt_disable_F77" != yes ++ ++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 "X$FC" = "Xno"; 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 "$_lt_disable_FC" != yes; then ++ # Code to be used in simple compile tests ++ lt_simple_compile_test_code="\ ++ subroutine t ++ return ++ end ++" ++ ++ # Code to be used in simple link tests ++ lt_simple_link_test_code="\ ++ program t ++ end ++" ++ ++ # ltmain only uses $CC for tagged configurations so make sure $CC is set. ++ _LT_TAG_COMPILER ++ ++ # save warnings/boilerplate of simple test code ++ _LT_COMPILER_BOILERPLATE ++ _LT_LINKER_BOILERPLATE ++ ++ # Allow CC to be a program name with arguments. ++ lt_save_CC="$CC" ++ lt_save_GCC=$GCC ++ 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 "$can_build_shared" = "no" && enable_shared=no ++ ++ # On AIX, shared libraries and static libraries use the same namespace, and ++ # are all built from PIC. ++ case $host_os in ++ aix3*) ++ test "$enable_shared" = yes && enable_static=no ++ if test -n "$RANLIB"; then ++ archive_cmds="$archive_cmds~\$RANLIB \$lib" ++ postinstall_cmds='$RANLIB $lib' ++ fi ++ ;; ++ aix[[4-9]]*) ++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then ++ test "$enable_shared" = yes && enable_static=no ++ fi ++ ;; ++ esac ++ AC_MSG_RESULT([$enable_shared]) ++ ++ AC_MSG_CHECKING([whether to build static libraries]) ++ # Make sure either enable_shared or enable_static is yes. ++ test "$enable_shared" = yes || enable_static=yes ++ AC_MSG_RESULT([$enable_static]) ++ ++ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" ++ _LT_TAGVAR(LD, $1)="$LD" ++ ++ ## CAVEAT EMPTOR: ++ ## There is no encapsulation within the following macros, do not change ++ ## the running order or otherwise move them around unless you know exactly ++ ## what you are doing... ++ _LT_SYS_HIDDEN_LIBDEPS($1) ++ _LT_COMPILER_PIC($1) ++ _LT_COMPILER_C_O($1) ++ _LT_COMPILER_FILE_LOCKS($1) ++ _LT_LINKER_SHLIBS($1) ++ _LT_SYS_DYNAMIC_LINKER($1) ++ _LT_LINKER_HARDCODE_LIBPATH($1) ++ ++ _LT_CONFIG($1) ++ fi # test -n "$compiler" ++ ++ GCC=$lt_save_GCC ++ CC=$lt_save_CC ++ CFLAGS=$lt_save_CFLAGS ++fi # test "$_lt_disable_FC" != yes ++ ++AC_LANG_POP ++])# _LT_LANG_FC_CONFIG ++ ++ ++# _LT_LANG_GCJ_CONFIG([TAG]) ++# -------------------------- ++# Ensure that the configuration variables for the GNU Java Compiler compiler ++# are suitably defined. These variables are subsequently used by _LT_CONFIG ++# to write the compiler configuration to `libtool'. ++m4_defun([_LT_LANG_GCJ_CONFIG], ++[AC_REQUIRE([LT_PROG_GCJ])dnl ++AC_LANG_SAVE ++ ++# Source file extension for Java test sources. ++ac_ext=java ++ ++# Object file extension for compiled Java test sources. ++objext=o ++_LT_TAGVAR(objext, $1)=$objext ++ ++# Code to be used in simple compile tests ++lt_simple_compile_test_code="class foo {}" ++ ++# Code to be used in simple link tests ++lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' ++ ++# ltmain only uses $CC for tagged configurations so make sure $CC is set. ++_LT_TAG_COMPILER ++ ++# save warnings/boilerplate of simple test code ++_LT_COMPILER_BOILERPLATE ++_LT_LINKER_BOILERPLATE ++ ++# Allow CC to be a program name with arguments. ++lt_save_CC=$CC ++lt_save_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 "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" ++ AC_SUBST(GCJFLAGS)])])[]dnl ++]) ++ ++# Old name: ++AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([LT_AC_PROG_GCJ], []) ++ ++ ++# LT_PROG_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_SED ++# ------------ ++# Check for a fully-functional sed program, that truncates ++# as few characters as possible. Prefer GNU sed if found. ++m4_defun([_LT_DECL_SED], ++[AC_PROG_SED ++test -z "$SED" && SED=sed ++Xsed="$SED -e 1s/^X//" ++_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) ++_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], ++ [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ++])# _LT_DECL_SED ++ ++m4_ifndef([AC_PROG_SED], [ ++############################################################ ++# NOTE: This macro has been submitted for inclusion into # ++# GNU Autoconf as AC_PROG_SED. When it is available in # ++# a released version of Autoconf we should remove this # ++# macro and use it instead. # ++############################################################ ++ ++m4_defun([AC_PROG_SED], ++[AC_MSG_CHECKING([for a sed that does not truncate output]) ++AC_CACHE_VAL(lt_cv_path_SED, ++[# Loop through the user's path and test for sed and gsed. ++# Then use that list of sed's as ones to test for truncation. ++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR ++for as_dir in $PATH ++do ++ IFS=$as_save_IFS ++ test -z "$as_dir" && as_dir=. ++ for lt_ac_prog in sed gsed; do ++ for ac_exec_ext in '' $ac_executable_extensions; do ++ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then ++ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" ++ fi ++ done ++ done ++done ++IFS=$as_save_IFS ++lt_ac_max=0 ++lt_ac_count=0 ++# Add /usr/xpg4/bin/sed as it is typically found on Solaris ++# along with /bin/sed that truncates output. ++for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do ++ test ! -f $lt_ac_sed && continue ++ cat /dev/null > conftest.in ++ lt_ac_count=0 ++ echo $ECHO_N "0123456789$ECHO_C" >conftest.in ++ # Check for GNU sed and select it if it is found. ++ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then ++ lt_cv_path_SED=$lt_ac_sed ++ break ++ fi ++ while true; do ++ cat conftest.in conftest.in >conftest.tmp ++ mv conftest.tmp conftest.in ++ cp conftest.in conftest.nl ++ echo >>conftest.nl ++ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break ++ cmp -s conftest.out conftest.nl || break ++ # 10000 chars as input seems more than enough ++ test $lt_ac_count -gt 10 && break ++ lt_ac_count=`expr $lt_ac_count + 1` ++ if test $lt_ac_count -gt $lt_ac_max; then ++ lt_ac_max=$lt_ac_count ++ lt_cv_path_SED=$lt_ac_sed ++ fi ++ done ++done ++]) ++SED=$lt_cv_path_SED ++AC_SUBST([SED]) ++AC_MSG_RESULT([$SED]) ++])#AC_PROG_SED ++])#m4_ifndef ++ ++# Old name: ++AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([LT_AC_PROG_SED], []) ++ ++ ++# _LT_CHECK_SHELL_FEATURES ++# ------------------------ ++# Find out whether the shell is Bourne or XSI compatible, ++# or has some other useful features. ++m4_defun([_LT_CHECK_SHELL_FEATURES], ++[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) ++# Try some XSI features ++xsi_shell=no ++( _lt_dummy="a/b/c" ++ test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ ++ = c,a/b,b/c, \ ++ && eval 'test $(( 1 + 1 )) -eq 2 \ ++ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ ++ && xsi_shell=yes ++AC_MSG_RESULT([$xsi_shell]) ++_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) ++ ++AC_MSG_CHECKING([whether the shell understands "+="]) ++lt_shell_append=no ++( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ ++ >/dev/null 2>&1 \ ++ && lt_shell_append=yes ++AC_MSG_RESULT([$lt_shell_append]) ++_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) ++ ++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then ++ lt_unset=unset ++else ++ lt_unset=false ++fi ++_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl ++ ++# test EBCDIC or ASCII ++case `echo X|tr X '\101'` in ++ A) # ASCII based system ++ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr ++ lt_SP2NL='tr \040 \012' ++ lt_NL2SP='tr \015\012 \040\040' ++ ;; ++ *) # EBCDIC based system ++ lt_SP2NL='tr \100 \n' ++ lt_NL2SP='tr \r\n \100\100' ++ ;; ++esac ++_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl ++_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ++])# _LT_CHECK_SHELL_FEATURES ++ ++ ++# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) ++# ------------------------------------------------------ ++# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and ++# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. ++m4_defun([_LT_PROG_FUNCTION_REPLACE], ++[dnl { ++sed -e '/^$1 ()$/,/^} # $1 /c\ ++$1 ()\ ++{\ ++m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) ++} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++test 0 -eq $? || _lt_function_replace_fail=: ++]) ++ ++ ++# _LT_PROG_REPLACE_SHELLFNS ++# ------------------------- ++# Replace existing portable implementations of several shell functions with ++# equivalent extended shell implementations where those features are available.. ++m4_defun([_LT_PROG_REPLACE_SHELLFNS], ++[if test x"$xsi_shell" = xyes; then ++ _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl ++ case ${1} in ++ */*) func_dirname_result="${1%/*}${2}" ;; ++ * ) func_dirname_result="${3}" ;; ++ esac]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl ++ func_basename_result="${1##*/}"]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl ++ case ${1} in ++ */*) func_dirname_result="${1%/*}${2}" ;; ++ * ) func_dirname_result="${3}" ;; ++ esac ++ func_basename_result="${1##*/}"]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl ++ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are ++ # positional parameters, so assign one to ordinary parameter first. ++ func_stripname_result=${3} ++ func_stripname_result=${func_stripname_result#"${1}"} ++ func_stripname_result=${func_stripname_result%"${2}"}]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl ++ func_split_long_opt_name=${1%%=*} ++ func_split_long_opt_arg=${1#*=}]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl ++ func_split_short_opt_arg=${1#??} ++ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl ++ case ${1} in ++ *.lo) func_lo2o_result=${1%.lo}.${objext} ;; ++ *) func_lo2o_result=${1} ;; ++ esac]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) ++fi ++ ++if test x"$lt_shell_append" = xyes; then ++ _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) ++ ++ _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl ++ func_quote_for_eval "${2}" ++dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ ++ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) ++ ++ # Save a `func_append' function call where possible by direct use of '+=' ++ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++ test 0 -eq $? || _lt_function_replace_fail=: ++else ++ # Save a `func_append' function call even when '+=' is not available ++ sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ ++ && mv -f "$cfgfile.tmp" "$cfgfile" \ ++ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") ++ test 0 -eq $? || _lt_function_replace_fail=: ++fi ++ ++if test x"$_lt_function_replace_fail" = x":"; then ++ AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) ++fi ++]) ++ ++# _LT_PATH_CONVERSION_FUNCTIONS ++# ----------------------------- ++# Determine which 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 +diff --git a/libclamav/libmspack-0.4alpha/m4/ltoptions.m4 b/libclamav/libmspack-0.4alpha/m4/ltoptions.m4 +new file mode 100644 +index 000000000000..5d9acd8e23bc +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/m4/ltoptions.m4 +@@ -0,0 +1,384 @@ ++# Helper functions for option handling. -*- Autoconf -*- ++# ++# Copyright (C) 2004, 2005, 2007, 2008, 2009 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 7 ltoptions.m4 ++ ++# This is to help aclocal find these macros, as it can't see m4_define. ++AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) ++ ++ ++# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) ++# ------------------------------------------ ++m4_define([_LT_MANGLE_OPTION], ++[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) ++ ++ ++# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) ++# --------------------------------------- ++# Set option OPTION-NAME for macro MACRO-NAME, and if there is a ++# matching handler defined, dispatch to it. Other OPTION-NAMEs are ++# saved as a flag. ++m4_define([_LT_SET_OPTION], ++[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl ++m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), ++ _LT_MANGLE_DEFUN([$1], [$2]), ++ [m4_warning([Unknown $1 option `$2'])])[]dnl ++]) ++ ++ ++# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) ++# ------------------------------------------------------------ ++# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. ++m4_define([_LT_IF_OPTION], ++[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) ++ ++ ++# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) ++# ------------------------------------------------------- ++# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME ++# are set. ++m4_define([_LT_UNLESS_OPTIONS], ++[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), ++ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), ++ [m4_define([$0_found])])])[]dnl ++m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ++])[]dnl ++]) ++ ++ ++# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) ++# ---------------------------------------- ++# OPTION-LIST is a space-separated list of Libtool options associated ++# with MACRO-NAME. If any OPTION has a matching handler declared with ++# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about ++# the unknown option and exit. ++m4_defun([_LT_SET_OPTIONS], ++[# Set options ++m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), ++ [_LT_SET_OPTION([$1], _LT_Option)]) ++ ++m4_if([$1],[LT_INIT],[ ++ dnl ++ dnl Simply set some default values (i.e off) if boolean options were not ++ dnl specified: ++ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ++ ]) ++ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ++ ]) ++ dnl ++ dnl If no reference was made to various pairs of opposing options, then ++ dnl we run the default mode handler for the pair. For example, if neither ++ dnl `shared' nor `disable-shared' was passed, we enable building of shared ++ dnl archives by default: ++ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) ++ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) ++ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) ++ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], ++ [_LT_ENABLE_FAST_INSTALL]) ++ ]) ++])# _LT_SET_OPTIONS ++ ++ ++## --------------------------------- ## ++## Macros to handle LT_INIT options. ## ++## --------------------------------- ## ++ ++# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) ++# ----------------------------------------- ++m4_define([_LT_MANGLE_DEFUN], ++[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) ++ ++ ++# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) ++# ----------------------------------------------- ++m4_define([LT_OPTION_DEFINE], ++[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ++])# LT_OPTION_DEFINE ++ ++ ++# dlopen ++# ------ ++LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ++]) ++ ++AU_DEFUN([AC_LIBTOOL_DLOPEN], ++[_LT_SET_OPTION([LT_INIT], [dlopen]) ++AC_DIAGNOSE([obsolete], ++[$0: Remove this warning and the call to _LT_SET_OPTION when you ++put the `dlopen' option into LT_INIT's first parameter.]) ++]) ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) ++ ++ ++# win32-dll ++# --------- ++# Declare package support for building win32 dll's. ++LT_OPTION_DEFINE([LT_INIT], [win32-dll], ++[enable_win32_dll=yes ++ ++case $host in ++*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) ++ AC_CHECK_TOOL(AS, as, false) ++ AC_CHECK_TOOL(DLLTOOL, dlltool, false) ++ AC_CHECK_TOOL(OBJDUMP, objdump, false) ++ ;; ++esac ++ ++test -z "$AS" && AS=as ++_LT_DECL([], [AS], [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_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=default]) ++ ++test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) ++ ++_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ++])# _LT_WITH_PIC ++ ++LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) ++LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) ++ ++# Old name: ++AU_DEFUN([AC_LIBTOOL_PICMODE], ++[_LT_SET_OPTION([LT_INIT], [pic-only]) ++AC_DIAGNOSE([obsolete], ++[$0: Remove this warning and the call to _LT_SET_OPTION when you ++put the `pic-only' option into LT_INIT's first parameter.]) ++]) ++ ++dnl aclocal-1.4 backwards compatibility: ++dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ++ ++## ----------------- ## ++## LTDL_INIT Options ## ++## ----------------- ## ++ ++m4_define([_LTDL_MODE], []) ++LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], ++ [m4_define([_LTDL_MODE], [nonrecursive])]) ++LT_OPTION_DEFINE([LTDL_INIT], [recursive], ++ [m4_define([_LTDL_MODE], [recursive])]) ++LT_OPTION_DEFINE([LTDL_INIT], [subproject], ++ [m4_define([_LTDL_MODE], [subproject])]) ++ ++m4_define([_LTDL_TYPE], []) ++LT_OPTION_DEFINE([LTDL_INIT], [installable], ++ [m4_define([_LTDL_TYPE], [installable])]) ++LT_OPTION_DEFINE([LTDL_INIT], [convenience], ++ [m4_define([_LTDL_TYPE], [convenience])]) +diff --git a/libclamav/libmspack-0.4alpha/m4/ltsugar.m4 b/libclamav/libmspack-0.4alpha/m4/ltsugar.m4 +new file mode 100644 +index 000000000000..9000a057d31d +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/m4/ltsugar.m4 +@@ -0,0 +1,123 @@ ++# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- ++# ++# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. ++# Written by Gary V. Vaughan, 2004 ++# ++# This file is free software; the Free Software Foundation gives ++# unlimited permission to copy and/or distribute it, with or without ++# modifications, as long as this notice is preserved. ++ ++# serial 6 ltsugar.m4 ++ ++# This is to help aclocal find these macros, as it can't see m4_define. ++AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) ++ ++ ++# lt_join(SEP, ARG1, [ARG2...]) ++# ----------------------------- ++# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their ++# associated separator. ++# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier ++# versions in m4sugar had bugs. ++m4_define([lt_join], ++[m4_if([$#], [1], [], ++ [$#], [2], [[$2]], ++ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) ++m4_define([_lt_join], ++[m4_if([$#$2], [2], [], ++ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) ++ ++ ++# lt_car(LIST) ++# lt_cdr(LIST) ++# ------------ ++# Manipulate m4 lists. ++# These macros are necessary as long as will still need to support ++# Autoconf-2.59 which quotes differently. ++m4_define([lt_car], [[$1]]) ++m4_define([lt_cdr], ++[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], ++ [$#], 1, [], ++ [m4_dquote(m4_shift($@))])]) ++m4_define([lt_unquote], $1) ++ ++ ++# lt_append(MACRO-NAME, STRING, [SEPARATOR]) ++# ------------------------------------------ ++# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. ++# Note that neither SEPARATOR nor STRING are expanded; they are appended ++# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). ++# No SEPARATOR is output if MACRO-NAME was previously undefined (different ++# than defined and empty). ++# ++# This macro is needed until we can rely on Autoconf 2.62, since earlier ++# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. ++m4_define([lt_append], ++[m4_define([$1], ++ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) ++ ++ ++ ++# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) ++# ---------------------------------------------------------- ++# Produce a SEP delimited list of all paired combinations of elements of ++# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list ++# has the form PREFIXmINFIXSUFFIXn. ++# Needed until we can rely on m4_combine added in Autoconf 2.62. ++m4_define([lt_combine], ++[m4_if(m4_eval([$# > 3]), [1], ++ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl ++[[m4_foreach([_Lt_prefix], [$2], ++ [m4_foreach([_Lt_suffix], ++ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, ++ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) ++ ++ ++# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) ++# ----------------------------------------------------------------------- ++# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited ++# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. ++m4_define([lt_if_append_uniq], ++[m4_ifdef([$1], ++ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], ++ [lt_append([$1], [$2], [$3])$4], ++ [$5])], ++ [lt_append([$1], [$2], [$3])$4])]) ++ ++ ++# lt_dict_add(DICT, KEY, VALUE) ++# ----------------------------- ++m4_define([lt_dict_add], ++[m4_define([$1($2)], [$3])]) ++ ++ ++# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) ++# -------------------------------------------- ++m4_define([lt_dict_add_subkey], ++[m4_define([$1($2:$3)], [$4])]) ++ ++ ++# lt_dict_fetch(DICT, KEY, [SUBKEY]) ++# ---------------------------------- ++m4_define([lt_dict_fetch], ++[m4_ifval([$3], ++ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), ++ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) ++ ++ ++# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) ++# ----------------------------------------------------------------- ++m4_define([lt_if_dict_fetch], ++[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], ++ [$5], ++ [$6])]) ++ ++ ++# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) ++# -------------------------------------------------------------- ++m4_define([lt_dict_filter], ++[m4_if([$5], [], [], ++ [lt_join(m4_quote(m4_default([$4], [[, ]])), ++ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), ++ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ++]) +diff --git a/libclamav/libmspack-0.4alpha/m4/ltversion.m4 b/libclamav/libmspack-0.4alpha/m4/ltversion.m4 +new file mode 100644 +index 000000000000..07a8602d48d6 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/m4/ltversion.m4 +@@ -0,0 +1,23 @@ ++# ltversion.m4 -- version numbers -*- Autoconf -*- ++# ++# Copyright (C) 2004 Free Software Foundation, Inc. ++# Written by Scott James Remnant, 2004 ++# ++# This file is free software; the Free Software Foundation gives ++# unlimited permission to copy and/or distribute it, with or without ++# modifications, as long as this notice is preserved. ++ ++# @configure_input@ ++ ++# serial 3337 ltversion.m4 ++# This file is part of GNU Libtool ++ ++m4_define([LT_PACKAGE_VERSION], [2.4.2]) ++m4_define([LT_PACKAGE_REVISION], [1.3337]) ++ ++AC_DEFUN([LTVERSION_VERSION], ++[macro_version='2.4.2' ++macro_revision='1.3337' ++_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) ++_LT_DECL(, macro_revision, 0) ++]) +diff --git a/libclamav/libmspack-0.4alpha/m4/lt~obsolete.m4 b/libclamav/libmspack-0.4alpha/m4/lt~obsolete.m4 +new file mode 100644 +index 000000000000..c573da90c5cc +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/m4/lt~obsolete.m4 +@@ -0,0 +1,98 @@ ++# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- ++# ++# Copyright (C) 2004, 2005, 2007, 2009 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])]) +diff --git a/libclamav/libmspack-0.4alpha/missing b/libclamav/libmspack-0.4alpha/missing +new file mode 100755 +index 000000000000..86a8fc31e3c2 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/missing +@@ -0,0 +1,331 @@ ++#! /bin/sh ++# Common stub for a few missing GNU programs while installing. ++ ++scriptversion=2012-01-06.13; # UTC ++ ++# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, ++# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. ++# Originally by Fran,cois Pinard , 1996. ++ ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation; either version 2, or (at your option) ++# any later version. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++ ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++# As a special exception to the GNU General Public License, if you ++# distribute this file as part of a program that contains a ++# configuration script generated by Autoconf, you may include it under ++# the same distribution terms that you use for the rest of that program. ++ ++if test $# -eq 0; then ++ echo 1>&2 "Try \`$0 --help' for more information" ++ exit 1 ++fi ++ ++run=: ++sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' ++sed_minuso='s/.* -o \([^ ]*\).*/\1/p' ++ ++# In the cases where this matters, `missing' is being run in the ++# srcdir already. ++if test -f configure.ac; then ++ configure_ac=configure.ac ++else ++ configure_ac=configure.in ++fi ++ ++msg="missing on your system" ++ ++case $1 in ++--run) ++ # Try to run requested program, and just exit if it succeeds. ++ run= ++ shift ++ "$@" && exit 0 ++ # Exit code 63 means version mismatch. This often happens ++ # when the user try to use an ancient version of a tool on ++ # a file that requires a minimum version. In this case we ++ # we should proceed has if the program had been absent, or ++ # if --run hadn't been passed. ++ if test $? = 63; then ++ run=: ++ msg="probably too old" ++ fi ++ ;; ++ ++ -h|--h|--he|--hel|--help) ++ echo "\ ++$0 [OPTION]... PROGRAM [ARGUMENT]... ++ ++Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an ++error status if there is no known handling for PROGRAM. ++ ++Options: ++ -h, --help display this help and exit ++ -v, --version output version information and exit ++ --run try to run the given command, and emulate it if it fails ++ ++Supported PROGRAM values: ++ aclocal touch file \`aclocal.m4' ++ autoconf touch file \`configure' ++ autoheader touch file \`config.h.in' ++ autom4te touch the output file, or create a stub one ++ automake touch all \`Makefile.in' files ++ bison create \`y.tab.[ch]', if possible, from existing .[ch] ++ flex create \`lex.yy.c', if possible, from existing .c ++ help2man touch the output file ++ lex create \`lex.yy.c', if possible, from existing .c ++ makeinfo touch the output file ++ yacc create \`y.tab.[ch]', if possible, from existing .[ch] ++ ++Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and ++\`g' are ignored when checking the name. ++ ++Send bug reports to ." ++ exit $? ++ ;; ++ ++ -v|--v|--ve|--ver|--vers|--versi|--versio|--version) ++ echo "missing $scriptversion (GNU Automake)" ++ exit $? ++ ;; ++ ++ -*) ++ echo 1>&2 "$0: Unknown \`$1' option" ++ echo 1>&2 "Try \`$0 --help' for more information" ++ exit 1 ++ ;; ++ ++esac ++ ++# normalize program name to check for. ++program=`echo "$1" | sed ' ++ s/^gnu-//; t ++ s/^gnu//; t ++ s/^g//; t'` ++ ++# Now exit if we have it, but it failed. Also exit now if we ++# don't have it and --version was passed (most likely to detect ++# the program). This is about non-GNU programs, so use $1 not ++# $program. ++case $1 in ++ lex*|yacc*) ++ # Not GNU programs, they don't have --version. ++ ;; ++ ++ *) ++ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then ++ # We have it, but it failed. ++ exit 1 ++ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then ++ # Could not run --version or --help. This is probably someone ++ # running `$TOOL --version' or `$TOOL --help' to check whether ++ # $TOOL exists and not knowing $TOOL uses missing. ++ exit 1 ++ fi ++ ;; ++esac ++ ++# If it does not exist, or fails to run (possibly an outdated version), ++# try to emulate it. ++case $program in ++ aclocal*) ++ echo 1>&2 "\ ++WARNING: \`$1' is $msg. You should only need it if ++ you modified \`acinclude.m4' or \`${configure_ac}'. You might want ++ to install the \`Automake' and \`Perl' packages. Grab them from ++ any GNU archive site." ++ touch aclocal.m4 ++ ;; ++ ++ autoconf*) ++ echo 1>&2 "\ ++WARNING: \`$1' is $msg. You should only need it if ++ you modified \`${configure_ac}'. You might want to install the ++ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU ++ archive site." ++ touch configure ++ ;; ++ ++ autoheader*) ++ echo 1>&2 "\ ++WARNING: \`$1' is $msg. You should only need it if ++ you modified \`acconfig.h' or \`${configure_ac}'. You might want ++ to install the \`Autoconf' and \`GNU m4' packages. Grab them ++ from any GNU archive site." ++ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` ++ test -z "$files" && files="config.h" ++ touch_files= ++ for f in $files; do ++ case $f in ++ *:*) touch_files="$touch_files "`echo "$f" | ++ sed -e 's/^[^:]*://' -e 's/:.*//'`;; ++ *) touch_files="$touch_files $f.in";; ++ esac ++ done ++ touch $touch_files ++ ;; ++ ++ automake*) ++ echo 1>&2 "\ ++WARNING: \`$1' is $msg. You should only need it if ++ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. ++ You might want to install the \`Automake' and \`Perl' packages. ++ Grab them from any GNU archive site." ++ find . -type f -name Makefile.am -print | ++ sed 's/\.am$/.in/' | ++ while read f; do touch "$f"; done ++ ;; ++ ++ autom4te*) ++ echo 1>&2 "\ ++WARNING: \`$1' is needed, but is $msg. ++ You might have modified some files without having the ++ proper tools for further handling them. ++ You can get \`$1' as part of \`Autoconf' from any GNU ++ archive site." ++ ++ file=`echo "$*" | sed -n "$sed_output"` ++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` ++ if test -f "$file"; then ++ touch $file ++ else ++ test -z "$file" || exec >$file ++ echo "#! /bin/sh" ++ echo "# Created by GNU Automake missing as a replacement of" ++ echo "# $ $@" ++ echo "exit 0" ++ chmod +x $file ++ exit 1 ++ fi ++ ;; ++ ++ bison*|yacc*) ++ echo 1>&2 "\ ++WARNING: \`$1' $msg. You should only need it if ++ you modified a \`.y' file. You may need the \`Bison' package ++ in order for those modifications to take effect. You can get ++ \`Bison' from any GNU archive site." ++ rm -f y.tab.c y.tab.h ++ if test $# -ne 1; then ++ eval LASTARG=\${$#} ++ case $LASTARG in ++ *.y) ++ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` ++ if test -f "$SRCFILE"; then ++ cp "$SRCFILE" y.tab.c ++ fi ++ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` ++ if test -f "$SRCFILE"; then ++ cp "$SRCFILE" y.tab.h ++ fi ++ ;; ++ esac ++ fi ++ if test ! -f y.tab.h; then ++ echo >y.tab.h ++ fi ++ if test ! -f y.tab.c; then ++ echo 'main() { return 0; }' >y.tab.c ++ fi ++ ;; ++ ++ lex*|flex*) ++ echo 1>&2 "\ ++WARNING: \`$1' is $msg. You should only need it if ++ you modified a \`.l' file. You may need the \`Flex' package ++ in order for those modifications to take effect. You can get ++ \`Flex' from any GNU archive site." ++ rm -f lex.yy.c ++ if test $# -ne 1; then ++ eval LASTARG=\${$#} ++ case $LASTARG in ++ *.l) ++ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` ++ if test -f "$SRCFILE"; then ++ cp "$SRCFILE" lex.yy.c ++ fi ++ ;; ++ esac ++ fi ++ if test ! -f lex.yy.c; then ++ echo 'main() { return 0; }' >lex.yy.c ++ fi ++ ;; ++ ++ help2man*) ++ echo 1>&2 "\ ++WARNING: \`$1' is $msg. You should only need it if ++ you modified a dependency of a manual page. You may need the ++ \`Help2man' package in order for those modifications to take ++ effect. You can get \`Help2man' from any GNU archive site." ++ ++ file=`echo "$*" | sed -n "$sed_output"` ++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` ++ if test -f "$file"; then ++ touch $file ++ else ++ test -z "$file" || exec >$file ++ echo ".ab help2man is required to generate this page" ++ exit $? ++ fi ++ ;; ++ ++ makeinfo*) ++ echo 1>&2 "\ ++WARNING: \`$1' is $msg. You should only need it if ++ you modified a \`.texi' or \`.texinfo' file, or any other file ++ indirectly affecting the aspect of the manual. The spurious ++ call might also be the consequence of using a buggy \`make' (AIX, ++ DU, IRIX). You might want to install the \`Texinfo' package or ++ the \`GNU make' package. Grab either from any GNU archive site." ++ # The file to touch is that specified with -o ... ++ file=`echo "$*" | sed -n "$sed_output"` ++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` ++ if test -z "$file"; then ++ # ... or it is the one specified with @setfilename ... ++ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` ++ file=`sed -n ' ++ /^@setfilename/{ ++ s/.* \([^ ]*\) *$/\1/ ++ p ++ q ++ }' $infile` ++ # ... or it is derived from the source name (dir/f.texi becomes f.info) ++ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info ++ fi ++ # If the file does not exist, the user really needs makeinfo; ++ # let's fail without touching anything. ++ test -f $file || exit 1 ++ touch $file ++ ;; ++ ++ *) ++ echo 1>&2 "\ ++WARNING: \`$1' is needed, and is $msg. ++ You might have modified some files without having the ++ proper tools for further handling them. Check the \`README' file, ++ it often tells you about the needed prerequisites for installing ++ this package. You may also peek at any GNU archive site, in case ++ some other package would contain this missing \`$1' program." ++ exit 1 ++ ;; ++esac ++ ++exit 0 ++ ++# Local variables: ++# eval: (add-hook 'write-file-hooks 'time-stamp) ++# time-stamp-start: "scriptversion=" ++# time-stamp-format: "%:y-%02m-%02d.%02H" ++# time-stamp-time-zone: "UTC" ++# time-stamp-end: "; # UTC" ++# End: +diff --git a/libclamav/libmspack-0.4alpha/mspack/cab.h b/libclamav/libmspack-0.4alpha/mspack/cab.h +new file mode 100644 +index 000000000000..9f449d1f29bd +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/cab.h +@@ -0,0 +1,127 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_CAB_H ++#define MSPACK_CAB_H 1 ++ ++#include ++#include ++#include ++ ++/* generic CAB definitions */ ++ ++/* structure offsets */ ++#define cfhead_Signature (0x00) ++#define cfhead_CabinetSize (0x08) ++#define cfhead_FileOffset (0x10) ++#define cfhead_MinorVersion (0x18) ++#define cfhead_MajorVersion (0x19) ++#define cfhead_NumFolders (0x1A) ++#define cfhead_NumFiles (0x1C) ++#define cfhead_Flags (0x1E) ++#define cfhead_SetID (0x20) ++#define cfhead_CabinetIndex (0x22) ++#define cfhead_SIZEOF (0x24) ++#define cfheadext_HeaderReserved (0x00) ++#define cfheadext_FolderReserved (0x02) ++#define cfheadext_DataReserved (0x03) ++#define cfheadext_SIZEOF (0x04) ++#define cffold_DataOffset (0x00) ++#define cffold_NumBlocks (0x04) ++#define cffold_CompType (0x06) ++#define cffold_SIZEOF (0x08) ++#define cffile_UncompressedSize (0x00) ++#define cffile_FolderOffset (0x04) ++#define cffile_FolderIndex (0x08) ++#define cffile_Date (0x0A) ++#define cffile_Time (0x0C) ++#define cffile_Attribs (0x0E) ++#define cffile_SIZEOF (0x10) ++#define cfdata_CheckSum (0x00) ++#define cfdata_CompressedSize (0x04) ++#define cfdata_UncompressedSize (0x06) ++#define cfdata_SIZEOF (0x08) ++ ++/* flags */ ++#define cffoldCOMPTYPE_MASK (0x000f) ++#define cffoldCOMPTYPE_NONE (0x0000) ++#define cffoldCOMPTYPE_MSZIP (0x0001) ++#define cffoldCOMPTYPE_QUANTUM (0x0002) ++#define cffoldCOMPTYPE_LZX (0x0003) ++#define cfheadPREV_CABINET (0x0001) ++#define cfheadNEXT_CABINET (0x0002) ++#define cfheadRESERVE_PRESENT (0x0004) ++#define cffileCONTINUED_FROM_PREV (0xFFFD) ++#define cffileCONTINUED_TO_NEXT (0xFFFE) ++#define cffileCONTINUED_PREV_AND_NEXT (0xFFFF) ++ ++/* CAB data blocks are <= 32768 bytes in uncompressed form. Uncompressed ++ * blocks have zero growth. MSZIP guarantees that it won't grow above ++ * uncompressed size by more than 12 bytes. LZX guarantees it won't grow ++ * more than 6144 bytes. Quantum has no documentation, but the largest ++ * block seen in the wild is 337 bytes above uncompressed size. ++ */ ++#define CAB_BLOCKMAX (32768) ++#define CAB_INPUTMAX (CAB_BLOCKMAX+6144) ++ ++/* CAB compression definitions */ ++ ++struct mscab_compressor_p { ++ struct mscab_compressor base; ++ struct mspack_system *system; ++ /* todo */ ++}; ++ ++/* CAB decompression definitions */ ++ ++struct mscabd_decompress_state { ++ struct mscabd_folder_p *folder; /* current folder we're extracting from */ ++ struct mscabd_folder_data *data; /* current folder split we're in */ ++ unsigned int offset; /* uncompressed offset within folder */ ++ unsigned int block; /* which block are we decompressing? */ ++ struct mspack_system sys; /* special I/O code for decompressor */ ++ int comp_type; /* type of compression used by folder */ ++ int (*decompress)(void *, off_t); /* decompressor code */ ++ void *state; /* decompressor state */ ++ struct mscabd_cabinet_p *incab; /* cabinet where input data comes from */ ++ struct mspack_file *infh; /* input file handle */ ++ struct mspack_file *outfh; /* output file handle */ ++ unsigned char *i_ptr, *i_end; /* input data consumed, end */ ++ unsigned char input[CAB_INPUTMAX]; /* one input block of data */ ++}; ++ ++struct mscab_decompressor_p { ++ struct mscab_decompressor base; ++ struct mscabd_decompress_state *d; ++ struct mspack_system *system; ++ int param[3]; /* !!! MATCH THIS TO NUM OF PARAMS IN MSPACK.H !!! */ ++ int error, read_error; ++}; ++ ++struct mscabd_cabinet_p { ++ struct mscabd_cabinet base; ++ off_t blocks_off; /* offset to data blocks */ ++ int block_resv; /* reserved space in data blocks */ ++}; ++ ++/* there is one of these for every cabinet a folder spans */ ++struct mscabd_folder_data { ++ struct mscabd_folder_data *next; ++ struct mscabd_cabinet_p *cab; /* cabinet file of this folder span */ ++ off_t offset; /* cabinet offset of first datablock */ ++}; ++ ++struct mscabd_folder_p { ++ struct mscabd_folder base; ++ struct mscabd_folder_data data; /* where are the data blocks? */ ++ struct mscabd_file *merge_prev; /* first file needing backwards merge */ ++ struct mscabd_file *merge_next; /* first file needing forwards merge */ ++}; ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/cabc.c b/libclamav/libmspack-0.4alpha/mspack/cabc.c +new file mode 100644 +index 000000000000..242e0347c3f9 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/cabc.c +@@ -0,0 +1,24 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* CAB compression implementation */ ++ ++#include ++#include ++ ++struct mscab_compressor * ++ mspack_create_cab_compressor(struct mspack_system *sys) ++{ ++ /* todo */ ++ return NULL; ++} ++ ++void mspack_destroy_cab_compressor(struct mscab_compressor *self) { ++ /* todo */ ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/cabd.c b/libclamav/libmspack-0.4alpha/mspack/cabd.c +new file mode 100644 +index 000000000000..cce5c60e869a +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/cabd.c +@@ -0,0 +1,1444 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2011 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* Cabinet (.CAB) files are a form of file archive. Each cabinet contains ++ * "folders", which are compressed spans of data. Each cabinet has ++ * "files", whose metadata is in the cabinet header, but whose actual data ++ * is stored compressed in one of the "folders". Cabinets can span more ++ * than one physical file on disk, in which case they are a "cabinet set", ++ * and usually the last folder of each cabinet extends into the next ++ * cabinet. ++ * ++ * For a complete description of the format, see the MSDN site: ++ * http://msdn.microsoft.com/en-us/library/bb267310.aspx ++ */ ++ ++/* CAB decompression implementation */ ++ ++#include ++#include ++#include ++ ++/* Notes on compliance with cabinet specification: ++ * ++ * One of the main changes between cabextract 0.6 and libmspack's cab ++ * decompressor is the move from block-oriented decompression to ++ * stream-oriented decompression. ++ * ++ * cabextract would read one data block from disk, decompress it with the ++ * appropriate method, then write the decompressed data. The CAB ++ * specification is specifically designed to work like this, as it ensures ++ * compression matches do not span the maximum decompressed block size ++ * limit of 32kb. ++ * ++ * However, the compression algorithms used are stream oriented, with ++ * specific hacks added to them to enforce the "individual 32kb blocks" ++ * rule in CABs. In other file formats, they do not have this limitation. ++ * ++ * In order to make more generalised decompressors, libmspack's CAB ++ * decompressor has moved from being block-oriented to more stream ++ * oriented. This also makes decompression slightly faster. ++ * ++ * However, this leads to incompliance with the CAB specification. The ++ * CAB controller can no longer ensure each block of input given to the ++ * decompressors is matched with their output. The "decompressed size" of ++ * each individual block is thrown away. ++ * ++ * Each CAB block is supposed to be seen as individually compressed. This ++ * means each consecutive data block can have completely different ++ * "uncompressed" sizes, ranging from 1 to 32768 bytes. However, in ++ * reality, all data blocks in a folder decompress to exactly 32768 bytes, ++ * excepting the final block. ++ * ++ * Given this situation, the decompression algorithms are designed to ++ * realign their input bitstreams on 32768 output-byte boundaries, and ++ * various other special cases have been made. libmspack will not ++ * correctly decompress LZX or Quantum compressed folders where the blocks ++ * do not follow this "32768 bytes until last block" pattern. It could be ++ * implemented if needed, but hopefully this is not necessary -- it has ++ * not been seen in over 3Gb of CAB archives. ++ */ ++ ++/* prototypes */ ++static struct mscabd_cabinet * cabd_open( ++ struct mscab_decompressor *base, const char *filename); ++static void cabd_close( ++ struct mscab_decompressor *base, struct mscabd_cabinet *origcab); ++static int cabd_read_headers( ++ struct mspack_system *sys, struct mspack_file *fh, ++ struct mscabd_cabinet_p *cab, off_t offset, int quiet); ++static char *cabd_read_string( ++ struct mspack_system *sys, struct mspack_file *fh, ++ struct mscabd_cabinet_p *cab, int *error); ++ ++static struct mscabd_cabinet *cabd_search( ++ struct mscab_decompressor *base, const char *filename); ++static int cabd_find( ++ struct mscab_decompressor_p *self, unsigned char *buf, ++ struct mspack_file *fh, const char *filename, off_t flen, ++ off_t *firstlen, struct mscabd_cabinet_p **firstcab); ++ ++static int cabd_prepend( ++ struct mscab_decompressor *base, struct mscabd_cabinet *cab, ++ struct mscabd_cabinet *prevcab); ++static int cabd_append( ++ struct mscab_decompressor *base, struct mscabd_cabinet *cab, ++ struct mscabd_cabinet *nextcab); ++static int cabd_merge( ++ struct mscab_decompressor *base, struct mscabd_cabinet *lcab, ++ struct mscabd_cabinet *rcab); ++static int cabd_can_merge_folders( ++ struct mspack_system *sys, struct mscabd_folder_p *lfol, ++ struct mscabd_folder_p *rfol); ++ ++static int cabd_extract( ++ struct mscab_decompressor *base, struct mscabd_file *file, ++ const char *filename); ++static int cabd_init_decomp( ++ struct mscab_decompressor_p *self, unsigned int ct); ++static void cabd_free_decomp( ++ struct mscab_decompressor_p *self); ++static int cabd_sys_read( ++ struct mspack_file *file, void *buffer, int bytes); ++static int cabd_sys_write( ++ struct mspack_file *file, void *buffer, int bytes); ++static int cabd_sys_read_block( ++ struct mspack_system *sys, struct mscabd_decompress_state *d, int *out, ++ int ignore_cksum); ++static unsigned int cabd_checksum( ++ unsigned char *data, unsigned int bytes, unsigned int cksum); ++static struct noned_state *noned_init( ++ struct mspack_system *sys, struct mspack_file *in, struct mspack_file *out, ++ int bufsize); ++ ++static int noned_decompress( ++ struct noned_state *s, off_t bytes); ++static void noned_free( ++ struct noned_state *state); ++ ++static int cabd_param( ++ struct mscab_decompressor *base, int param, int value); ++ ++static int cabd_error( ++ struct mscab_decompressor *base); ++ ++ ++/*************************************** ++ * MSPACK_CREATE_CAB_DECOMPRESSOR ++ *************************************** ++ * constructor ++ */ ++struct mscab_decompressor * ++ mspack_create_cab_decompressor(struct mspack_system *sys) ++{ ++ struct mscab_decompressor_p *self = NULL; ++ ++ if (!sys) sys = mspack_default_system; ++ if (!mspack_valid_system(sys)) return NULL; ++ ++ if ((self = (struct mscab_decompressor_p *) sys->alloc(sys, sizeof(struct mscab_decompressor_p)))) { ++ self->base.open = &cabd_open; ++ self->base.close = &cabd_close; ++ self->base.search = &cabd_search; ++ self->base.extract = &cabd_extract; ++ self->base.prepend = &cabd_prepend; ++ self->base.append = &cabd_append; ++ self->base.set_param = &cabd_param; ++ self->base.last_error = &cabd_error; ++ self->system = sys; ++ self->d = NULL; ++ self->error = MSPACK_ERR_OK; ++ ++ self->param[MSCABD_PARAM_SEARCHBUF] = 32768; ++ self->param[MSCABD_PARAM_FIXMSZIP] = 0; ++ self->param[MSCABD_PARAM_DECOMPBUF] = 4096; ++ } ++ return (struct mscab_decompressor *) self; ++} ++ ++/*************************************** ++ * MSPACK_DESTROY_CAB_DECOMPRESSOR ++ *************************************** ++ * destructor ++ */ ++void mspack_destroy_cab_decompressor(struct mscab_decompressor *base) { ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) base; ++ if (self) { ++ struct mspack_system *sys = self->system; ++ cabd_free_decomp(self); ++ if (self->d) { ++ if (self->d->infh) sys->close(self->d->infh); ++ sys->free(self->d); ++ } ++ sys->free(self); ++ } ++} ++ ++ ++/*************************************** ++ * CABD_OPEN ++ *************************************** ++ * opens a file and tries to read it as a cabinet file ++ */ ++static struct mscabd_cabinet *cabd_open(struct mscab_decompressor *base, ++ const char *filename) ++{ ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) base; ++ struct mscabd_cabinet_p *cab = NULL; ++ struct mspack_system *sys; ++ struct mspack_file *fh; ++ int error; ++ ++ if (!base) return NULL; ++ sys = self->system; ++ ++ if ((fh = sys->open(sys, filename, MSPACK_SYS_OPEN_READ))) { ++ if ((cab = (struct mscabd_cabinet_p *) sys->alloc(sys, sizeof(struct mscabd_cabinet_p)))) { ++ cab->base.filename = filename; ++ error = cabd_read_headers(sys, fh, cab, (off_t) 0, 0); ++ if (error) { ++ cabd_close(base, (struct mscabd_cabinet *) cab); ++ cab = NULL; ++ } ++ self->error = error; ++ } ++ else { ++ self->error = MSPACK_ERR_NOMEMORY; ++ } ++ sys->close(fh); ++ } ++ else { ++ self->error = MSPACK_ERR_OPEN; ++ } ++ return (struct mscabd_cabinet *) cab; ++} ++ ++/*************************************** ++ * CABD_CLOSE ++ *************************************** ++ * frees all memory associated with a given mscabd_cabinet. ++ */ ++static void cabd_close(struct mscab_decompressor *base, ++ struct mscabd_cabinet *origcab) ++{ ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) base; ++ struct mscabd_folder_data *dat, *ndat; ++ struct mscabd_cabinet *cab, *ncab; ++ struct mscabd_folder *fol, *nfol; ++ struct mscabd_file *fi, *nfi; ++ struct mspack_system *sys; ++ ++ if (!base) return; ++ sys = self->system; ++ ++ self->error = MSPACK_ERR_OK; ++ ++ while (origcab) { ++ /* free files */ ++ for (fi = origcab->files; fi; fi = nfi) { ++ nfi = fi->next; ++ sys->free(fi->filename); ++ sys->free(fi); ++ } ++ ++ /* free folders */ ++ for (fol = origcab->folders; fol; fol = nfol) { ++ nfol = fol->next; ++ ++ /* free folder decompression state if it has been decompressed */ ++ if (self->d && (self->d->folder == (struct mscabd_folder_p *) fol)) { ++ if (self->d->infh) sys->close(self->d->infh); ++ cabd_free_decomp(self); ++ sys->free(self->d); ++ self->d = NULL; ++ } ++ ++ /* free folder data segments */ ++ for (dat = ((struct mscabd_folder_p *)fol)->data.next; dat; dat = ndat) { ++ ndat = dat->next; ++ sys->free(dat); ++ } ++ sys->free(fol); ++ } ++ ++ /* free predecessor cabinets (and the original cabinet's strings) */ ++ for (cab = origcab; cab; cab = ncab) { ++ ncab = cab->prevcab; ++ sys->free(cab->prevname); ++ sys->free(cab->nextname); ++ sys->free(cab->previnfo); ++ sys->free(cab->nextinfo); ++ if (cab != origcab) sys->free(cab); ++ } ++ ++ /* free successor cabinets */ ++ for (cab = origcab->nextcab; cab; cab = ncab) { ++ ncab = cab->nextcab; ++ sys->free(cab->prevname); ++ sys->free(cab->nextname); ++ sys->free(cab->previnfo); ++ sys->free(cab->nextinfo); ++ sys->free(cab); ++ } ++ ++ /* free actual cabinet structure */ ++ cab = origcab->next; ++ sys->free(origcab); ++ ++ /* repeat full procedure again with the cab->next pointer (if set) */ ++ origcab = cab; ++ } ++} ++ ++/*************************************** ++ * CABD_READ_HEADERS ++ *************************************** ++ * reads the cabinet file header, folder list and file list. ++ * fills out a pre-existing mscabd_cabinet structure, allocates memory ++ * for folders and files as necessary ++ */ ++static int cabd_read_headers(struct mspack_system *sys, ++ struct mspack_file *fh, ++ struct mscabd_cabinet_p *cab, ++ off_t offset, int quiet) ++{ ++ int num_folders, num_files, folder_resv, i, x; ++ struct mscabd_folder_p *fol, *linkfol = NULL; ++ struct mscabd_file *file, *linkfile = NULL; ++ unsigned char buf[64]; ++ ++ /* initialise pointers */ ++ cab->base.next = NULL; ++ cab->base.files = NULL; ++ cab->base.folders = NULL; ++ cab->base.prevcab = cab->base.nextcab = NULL; ++ cab->base.prevname = cab->base.nextname = NULL; ++ cab->base.previnfo = cab->base.nextinfo = NULL; ++ ++ cab->base.base_offset = offset; ++ ++ /* seek to CFHEADER */ ++ if (sys->seek(fh, offset, MSPACK_SYS_SEEK_START)) { ++ return MSPACK_ERR_SEEK; ++ } ++ ++ /* read in the CFHEADER */ ++ if (sys->read(fh, &buf[0], cfhead_SIZEOF) != cfhead_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ ++ /* check for "MSCF" signature */ ++ if (EndGetI32(&buf[cfhead_Signature]) != 0x4643534D) { ++ return MSPACK_ERR_SIGNATURE; ++ } ++ ++ /* some basic header fields */ ++ cab->base.length = EndGetI32(&buf[cfhead_CabinetSize]); ++ cab->base.set_id = EndGetI16(&buf[cfhead_SetID]); ++ cab->base.set_index = EndGetI16(&buf[cfhead_CabinetIndex]); ++ ++ /* get the number of folders */ ++ num_folders = EndGetI16(&buf[cfhead_NumFolders]); ++ if (num_folders == 0) { ++ if (!quiet) sys->message(fh, "no folders in cabinet."); ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* get the number of files */ ++ num_files = EndGetI16(&buf[cfhead_NumFiles]); ++ if (num_files == 0) { ++ if (!quiet) sys->message(fh, "no files in cabinet."); ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* check cabinet version */ ++ if ((buf[cfhead_MajorVersion] != 1) && (buf[cfhead_MinorVersion] != 3)) { ++ if (!quiet) sys->message(fh, "WARNING; cabinet version is not 1.3"); ++ } ++ ++ /* read the reserved-sizes part of header, if present */ ++ cab->base.flags = EndGetI16(&buf[cfhead_Flags]); ++ if (cab->base.flags & cfheadRESERVE_PRESENT) { ++ if (sys->read(fh, &buf[0], cfheadext_SIZEOF) != cfheadext_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ cab->base.header_resv = EndGetI16(&buf[cfheadext_HeaderReserved]); ++ folder_resv = buf[cfheadext_FolderReserved]; ++ cab->block_resv = buf[cfheadext_DataReserved]; ++ ++ if (cab->base.header_resv > 60000) { ++ if (!quiet) sys->message(fh, "WARNING; reserved header > 60000."); ++ } ++ ++ /* skip the reserved header */ ++ if (cab->base.header_resv) { ++ if (sys->seek(fh, (off_t) cab->base.header_resv, MSPACK_SYS_SEEK_CUR)) { ++ return MSPACK_ERR_SEEK; ++ } ++ } ++ } ++ else { ++ cab->base.header_resv = 0; ++ folder_resv = 0; ++ cab->block_resv = 0; ++ } ++ ++ /* read name and info of preceeding cabinet in set, if present */ ++ if (cab->base.flags & cfheadPREV_CABINET) { ++ cab->base.prevname = cabd_read_string(sys, fh, cab, &x); if (x) return x; ++ cab->base.previnfo = cabd_read_string(sys, fh, cab, &x); if (x) return x; ++ } ++ ++ /* read name and info of next cabinet in set, if present */ ++ if (cab->base.flags & cfheadNEXT_CABINET) { ++ cab->base.nextname = cabd_read_string(sys, fh, cab, &x); if (x) return x; ++ cab->base.nextinfo = cabd_read_string(sys, fh, cab, &x); if (x) return x; ++ } ++ ++ /* read folders */ ++ for (i = 0; i < num_folders; i++) { ++ if (sys->read(fh, &buf[0], cffold_SIZEOF) != cffold_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ if (folder_resv) { ++ if (sys->seek(fh, (off_t) folder_resv, MSPACK_SYS_SEEK_CUR)) { ++ return MSPACK_ERR_SEEK; ++ } ++ } ++ ++ if (!(fol = (struct mscabd_folder_p *) sys->alloc(sys, sizeof(struct mscabd_folder_p)))) { ++ return MSPACK_ERR_NOMEMORY; ++ } ++ fol->base.next = NULL; ++ fol->base.comp_type = EndGetI16(&buf[cffold_CompType]); ++ fol->base.num_blocks = EndGetI16(&buf[cffold_NumBlocks]); ++ fol->data.next = NULL; ++ fol->data.cab = (struct mscabd_cabinet_p *) cab; ++ fol->data.offset = offset + (off_t) ++ ( (unsigned int) EndGetI32(&buf[cffold_DataOffset]) ); ++ fol->merge_prev = NULL; ++ fol->merge_next = NULL; ++ ++ /* link folder into list of folders */ ++ if (!linkfol) cab->base.folders = (struct mscabd_folder *) fol; ++ else linkfol->base.next = (struct mscabd_folder *) fol; ++ linkfol = fol; ++ } ++ ++ /* read files */ ++ for (i = 0; i < num_files; i++) { ++ if (sys->read(fh, &buf[0], cffile_SIZEOF) != cffile_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ ++ if (!(file = (struct mscabd_file *) sys->alloc(sys, sizeof(struct mscabd_file)))) { ++ return MSPACK_ERR_NOMEMORY; ++ } ++ ++ file->next = NULL; ++ file->length = EndGetI32(&buf[cffile_UncompressedSize]); ++ file->attribs = EndGetI16(&buf[cffile_Attribs]); ++ file->offset = EndGetI32(&buf[cffile_FolderOffset]); ++ ++ /* set folder pointer */ ++ x = EndGetI16(&buf[cffile_FolderIndex]); ++ if (x < cffileCONTINUED_FROM_PREV) { ++ /* normal folder index; count up to the correct folder. the folder ++ * pointer will be NULL if folder index is invalid */ ++ struct mscabd_folder *ifol = cab->base.folders; ++ while (x--) if (ifol) ifol = ifol->next; ++ file->folder = ifol; ++ ++ if (!ifol) { ++ sys->free(file); ++ D(("invalid folder index")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ } ++ else { ++ /* either CONTINUED_TO_NEXT, CONTINUED_FROM_PREV or ++ * CONTINUED_PREV_AND_NEXT */ ++ if ((x == cffileCONTINUED_TO_NEXT) || ++ (x == cffileCONTINUED_PREV_AND_NEXT)) ++ { ++ /* get last folder */ ++ struct mscabd_folder *ifol = cab->base.folders; ++ while (ifol->next) ifol = ifol->next; ++ file->folder = ifol; ++ ++ /* set "merge next" pointer */ ++ fol = (struct mscabd_folder_p *) ifol; ++ if (!fol->merge_next) fol->merge_next = file; ++ } ++ ++ if ((x == cffileCONTINUED_FROM_PREV) || ++ (x == cffileCONTINUED_PREV_AND_NEXT)) ++ { ++ /* get first folder */ ++ file->folder = cab->base.folders; ++ ++ /* set "merge prev" pointer */ ++ fol = (struct mscabd_folder_p *) file->folder; ++ if (!fol->merge_prev) fol->merge_prev = file; ++ } ++ } ++ ++ /* get time */ ++ x = EndGetI16(&buf[cffile_Time]); ++ file->time_h = x >> 11; ++ file->time_m = (x >> 5) & 0x3F; ++ file->time_s = (x << 1) & 0x3E; ++ ++ /* get date */ ++ x = EndGetI16(&buf[cffile_Date]); ++ file->date_d = x & 0x1F; ++ file->date_m = (x >> 5) & 0xF; ++ file->date_y = (x >> 9) + 1980; ++ ++ /* get filename */ ++ file->filename = cabd_read_string(sys, fh, cab, &x); ++ if (x) { ++ sys->free(file); ++ return x; ++ } ++ ++ /* link file entry into file list */ ++ if (!linkfile) cab->base.files = file; ++ else linkfile->next = file; ++ linkfile = file; ++ } ++ ++ return MSPACK_ERR_OK; ++} ++ ++static char *cabd_read_string(struct mspack_system *sys, ++ struct mspack_file *fh, ++ struct mscabd_cabinet_p *cab, int *error) ++{ ++ off_t base = sys->tell(fh); ++ char buf[256], *str; ++ unsigned int len, i, ok; ++ ++ /* read up to 256 bytes */ ++ len = sys->read(fh, &buf[0], 256); ++ ++ /* search for a null terminator in the buffer */ ++ for (i = 0, ok = 0; i < len; i++) if (!buf[i]) { ok = 1; break; } ++ if (!ok) { ++ *error = MSPACK_ERR_DATAFORMAT; ++ return NULL; ++ } ++ ++ len = i + 1; ++ ++ /* set the data stream to just after the string and return */ ++ if (sys->seek(fh, base + (off_t)len, MSPACK_SYS_SEEK_START)) { ++ *error = MSPACK_ERR_SEEK; ++ return NULL; ++ } ++ ++ if (!(str = (char *) sys->alloc(sys, len))) { ++ *error = MSPACK_ERR_NOMEMORY; ++ return NULL; ++ } ++ ++ sys->copy(&buf[0], str, len); ++ *error = MSPACK_ERR_OK; ++ return str; ++} ++ ++/*************************************** ++ * CABD_SEARCH, CABD_FIND ++ *************************************** ++ * cabd_search opens a file, finds its extent, allocates a search buffer, ++ * then reads through the whole file looking for possible cabinet headers. ++ * if it finds any, it tries to read them as real cabinets. returns a linked ++ * list of results ++ * ++ * cabd_find is the inner loop of cabd_search, to make it easier to ++ * break out of the loop and be sure that all resources are freed ++ */ ++static struct mscabd_cabinet *cabd_search(struct mscab_decompressor *base, ++ const char *filename) ++{ ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) base; ++ struct mscabd_cabinet_p *cab = NULL; ++ struct mspack_system *sys; ++ unsigned char *search_buf; ++ struct mspack_file *fh; ++ off_t filelen, firstlen = 0; ++ ++ if (!base) return NULL; ++ sys = self->system; ++ ++ /* allocate a search buffer */ ++ search_buf = (unsigned char *) sys->alloc(sys, (size_t) self->param[MSCABD_PARAM_SEARCHBUF]); ++ if (!search_buf) { ++ self->error = MSPACK_ERR_NOMEMORY; ++ return NULL; ++ } ++ ++ /* open file and get its full file length */ ++ if ((fh = sys->open(sys, filename, MSPACK_SYS_OPEN_READ))) { ++ if (!(self->error = mspack_sys_filelen(sys, fh, &filelen))) { ++ self->error = cabd_find(self, search_buf, fh, filename, ++ filelen, &firstlen, &cab); ++ } ++ ++ /* truncated / extraneous data warning: */ ++ if (firstlen && (firstlen != filelen) && ++ (!cab || (cab->base.base_offset == 0))) ++ { ++ if (firstlen < filelen) { ++ sys->message(fh, "WARNING; possible %" LD ++ " extra bytes at end of file.", ++ filelen - firstlen); ++ } ++ else { ++ sys->message(fh, "WARNING; file possibly truncated by %" LD " bytes.", ++ firstlen - filelen); ++ } ++ } ++ ++ sys->close(fh); ++ } ++ else { ++ self->error = MSPACK_ERR_OPEN; ++ } ++ ++ /* free the search buffer */ ++ sys->free(search_buf); ++ ++ return (struct mscabd_cabinet *) cab; ++} ++ ++static int cabd_find(struct mscab_decompressor_p *self, unsigned char *buf, ++ struct mspack_file *fh, const char *filename, off_t flen, ++ off_t *firstlen, struct mscabd_cabinet_p **firstcab) ++{ ++ struct mscabd_cabinet_p *cab, *link = NULL; ++ off_t caboff, offset, length; ++ struct mspack_system *sys = self->system; ++ unsigned char *p, *pend, state = 0; ++ unsigned int cablen_u32 = 0, foffset_u32 = 0; ++ int false_cabs = 0; ++ ++#ifndef LARGEFILE_SUPPORT ++ /* detect 32-bit off_t overflow */ ++ if (flen < 0) { ++ sys->message(fh, largefile_msg); ++ return MSPACK_ERR_OK; ++ } ++#endif ++ ++ /* search through the full file length */ ++ for (offset = 0; offset < flen; offset += length) { ++ /* search length is either the full length of the search buffer, or the ++ * amount of data remaining to the end of the file, whichever is less. */ ++ length = flen - offset; ++ if (length > self->param[MSCABD_PARAM_SEARCHBUF]) { ++ length = self->param[MSCABD_PARAM_SEARCHBUF]; ++ } ++ ++ /* fill the search buffer with data from disk */ ++ if (sys->read(fh, &buf[0], (int) length) != (int) length) { ++ return MSPACK_ERR_READ; ++ } ++ ++ /* FAQ avoidance strategy */ ++ if ((offset == 0) && (EndGetI32(&buf[0]) == 0x28635349)) { ++ sys->message(fh, "WARNING; found InstallShield header. " ++ "This is probably an InstallShield file. " ++ "Use UNSHIELD from www.synce.org to unpack it."); ++ } ++ ++ /* read through the entire buffer. */ ++ for (p = &buf[0], pend = &buf[length]; p < pend; ) { ++ switch (state) { ++ /* starting state */ ++ case 0: ++ /* we spend most of our time in this while loop, looking for ++ * a leading 'M' of the 'MSCF' signature */ ++ while (p < pend && *p != 0x4D) p++; ++ /* if we found tht 'M', advance state */ ++ if (p++ < pend) state = 1; ++ break; ++ ++ /* verify that the next 3 bytes are 'S', 'C' and 'F' */ ++ case 1: state = (*p++ == 0x53) ? 2 : 0; break; ++ case 2: state = (*p++ == 0x43) ? 3 : 0; break; ++ case 3: state = (*p++ == 0x46) ? 4 : 0; break; ++ ++ /* we don't care about bytes 4-7 (see default: for action) */ ++ ++ /* bytes 8-11 are the overall length of the cabinet */ ++ case 8: cablen_u32 = *p++; state++; break; ++ case 9: cablen_u32 |= *p++ << 8; state++; break; ++ case 10: cablen_u32 |= *p++ << 16; state++; break; ++ case 11: cablen_u32 |= *p++ << 24; state++; break; ++ ++ /* we don't care about bytes 12-15 (see default: for action) */ ++ ++ /* bytes 16-19 are the offset within the cabinet of the filedata */ ++ case 16: foffset_u32 = *p++; state++; break; ++ case 17: foffset_u32 |= *p++ << 8; state++; break; ++ case 18: foffset_u32 |= *p++ << 16; state++; break; ++ case 19: foffset_u32 |= *p++ << 24; ++ /* now we have recieved 20 bytes of potential cab header. work out ++ * the offset in the file of this potential cabinet */ ++ caboff = offset + (p - &buf[0]) - 20; ++ ++ /* should reading cabinet fail, restart search just after 'MSCF' */ ++ offset = caboff + 4; ++ ++ /* capture the "length of cabinet" field if there is a cabinet at ++ * offset 0 in the file, regardless of whether the cabinet can be ++ * read correctly or not */ ++ if (caboff == 0) *firstlen = (off_t) cablen_u32; ++ ++ /* check that the files offset is less than the alleged length of ++ * the cabinet, and that the offset + the alleged length are ++ * 'roughly' within the end of overall file length */ ++ if ((foffset_u32 < cablen_u32) && ++ ((caboff + (off_t) foffset_u32) < (flen + 32)) && ++ ((caboff + (off_t) cablen_u32) < (flen + 32)) ) ++ { ++ /* likely cabinet found -- try reading it */ ++ if (!(cab = (struct mscabd_cabinet_p *) sys->alloc(sys, sizeof(struct mscabd_cabinet_p)))) { ++ return MSPACK_ERR_NOMEMORY; ++ } ++ cab->base.filename = filename; ++ if (cabd_read_headers(sys, fh, cab, caboff, 1)) { ++ /* destroy the failed cabinet */ ++ cabd_close((struct mscab_decompressor *) self, ++ (struct mscabd_cabinet *) cab); ++ false_cabs++; ++ } ++ else { ++ /* cabinet read correctly! */ ++ ++ /* link the cab into the list */ ++ if (!link) *firstcab = cab; ++ else link->base.next = (struct mscabd_cabinet *) cab; ++ link = cab; ++ ++ /* cause the search to restart after this cab's data. */ ++ offset = caboff + (off_t) cablen_u32; ++ ++#ifndef LARGEFILE_SUPPORT ++ /* detect 32-bit off_t overflow */ ++ if (offset < caboff) { ++ sys->message(fh, largefile_msg); ++ return MSPACK_ERR_OK; ++ } ++#endif ++ } ++ } ++ ++ /* restart search */ ++ if (offset >= flen) return MSPACK_ERR_OK; ++ if (sys->seek(fh, offset, MSPACK_SYS_SEEK_START)) { ++ return MSPACK_ERR_SEEK; ++ } ++ length = 0; ++ p = pend; ++ state = 0; ++ break; ++ ++ /* for bytes 4-7 and 12-15, just advance state/pointer */ ++ default: ++ p++, state++; ++ } /* switch(state) */ ++ } /* for (... p < pend ...) */ ++ } /* for (... offset < length ...) */ ++ ++ if (false_cabs) { ++ D(("%d false cabinets found", false_cabs)) ++ } ++ ++ return MSPACK_ERR_OK; ++} ++ ++/*************************************** ++ * CABD_MERGE, CABD_PREPEND, CABD_APPEND ++ *************************************** ++ * joins cabinets together, also merges split folders between these two ++ * cabinets only. This includes freeing the duplicate folder and file(s) ++ * and allocating a further mscabd_folder_data structure to append to the ++ * merged folder's data parts list. ++ */ ++static int cabd_prepend(struct mscab_decompressor *base, ++ struct mscabd_cabinet *cab, ++ struct mscabd_cabinet *prevcab) ++{ ++ return cabd_merge(base, prevcab, cab); ++} ++ ++static int cabd_append(struct mscab_decompressor *base, ++ struct mscabd_cabinet *cab, ++ struct mscabd_cabinet *nextcab) ++{ ++ return cabd_merge(base, cab, nextcab); ++} ++ ++static int cabd_merge(struct mscab_decompressor *base, ++ struct mscabd_cabinet *lcab, ++ struct mscabd_cabinet *rcab) ++{ ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) base; ++ struct mscabd_folder_data *data, *ndata; ++ struct mscabd_folder_p *lfol, *rfol; ++ struct mscabd_file *fi, *rfi, *lfi; ++ struct mscabd_cabinet *cab; ++ struct mspack_system *sys; ++ ++ if (!self) return MSPACK_ERR_ARGS; ++ sys = self->system; ++ ++ /* basic args check */ ++ if (!lcab || !rcab || (lcab == rcab)) { ++ D(("lcab NULL, rcab NULL or lcab = rcab")) ++ return self->error = MSPACK_ERR_ARGS; ++ } ++ ++ /* check there's not already a cabinet attached */ ++ if (lcab->nextcab || rcab->prevcab) { ++ D(("cabs already joined")) ++ return self->error = MSPACK_ERR_ARGS; ++ } ++ ++ /* do not create circular cabinet chains */ ++ for (cab = lcab->prevcab; cab; cab = cab->prevcab) { ++ if (cab == rcab) {D(("circular!")) return self->error = MSPACK_ERR_ARGS;} ++ } ++ for (cab = rcab->nextcab; cab; cab = cab->nextcab) { ++ if (cab == lcab) {D(("circular!")) return self->error = MSPACK_ERR_ARGS;} ++ } ++ ++ /* warn about odd set IDs or indices */ ++ if (lcab->set_id != rcab->set_id) { ++ sys->message(NULL, "WARNING; merged cabinets with differing Set IDs."); ++ } ++ ++ if (lcab->set_index > rcab->set_index) { ++ sys->message(NULL, "WARNING; merged cabinets with odd order."); ++ } ++ ++ /* merging the last folder in lcab with the first folder in rcab */ ++ lfol = (struct mscabd_folder_p *) lcab->folders; ++ rfol = (struct mscabd_folder_p *) rcab->folders; ++ while (lfol->base.next) lfol = (struct mscabd_folder_p *) lfol->base.next; ++ ++ /* do we need to merge folders? */ ++ if (!lfol->merge_next && !rfol->merge_prev) { ++ /* no, at least one of the folders is not for merging */ ++ ++ /* attach cabs */ ++ lcab->nextcab = rcab; ++ rcab->prevcab = lcab; ++ ++ /* attach folders */ ++ lfol->base.next = (struct mscabd_folder *) rfol; ++ ++ /* attach files */ ++ fi = lcab->files; ++ while (fi->next) fi = fi->next; ++ fi->next = rcab->files; ++ } ++ else { ++ /* folder merge required - do the files match? */ ++ if (! cabd_can_merge_folders(sys, lfol, rfol)) { ++ return self->error = MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* allocate a new folder data structure */ ++ if (!(data = (struct mscabd_folder_data *) sys->alloc(sys, sizeof(struct mscabd_folder_data)))) { ++ return self->error = MSPACK_ERR_NOMEMORY; ++ } ++ ++ /* attach cabs */ ++ lcab->nextcab = rcab; ++ rcab->prevcab = lcab; ++ ++ /* append rfol's data to lfol */ ++ ndata = &lfol->data; ++ while (ndata->next) ndata = ndata->next; ++ ndata->next = data; ++ *data = rfol->data; ++ rfol->data.next = NULL; ++ ++ /* lfol becomes rfol. ++ * NOTE: special case, don't merge if rfol is merge prev and next, ++ * rfol->merge_next is going to be deleted, so keep lfol's version ++ * instead */ ++ lfol->base.num_blocks += rfol->base.num_blocks - 1; ++ if ((rfol->merge_next == NULL) || ++ (rfol->merge_next->folder != (struct mscabd_folder *) rfol)) ++ { ++ lfol->merge_next = rfol->merge_next; ++ } ++ ++ /* attach the rfol's folder (except the merge folder) */ ++ while (lfol->base.next) lfol = (struct mscabd_folder_p *) lfol->base.next; ++ lfol->base.next = rfol->base.next; ++ ++ /* free disused merge folder */ ++ sys->free(rfol); ++ ++ /* attach rfol's files */ ++ fi = lcab->files; ++ while (fi->next) fi = fi->next; ++ fi->next = rcab->files; ++ ++ /* delete all files from rfol's merge folder */ ++ lfi = NULL; ++ for (fi = lcab->files; fi ; fi = rfi) { ++ rfi = fi->next; ++ /* if file's folder matches the merge folder, unlink and free it */ ++ if (fi->folder == (struct mscabd_folder *) rfol) { ++ if (lfi) lfi->next = rfi; else lcab->files = rfi; ++ sys->free(fi->filename); ++ sys->free(fi); ++ } ++ else lfi = fi; ++ } ++ } ++ ++ /* all done! fix files and folders pointers in all cabs so they all ++ * point to the same list */ ++ for (cab = lcab->prevcab; cab; cab = cab->prevcab) { ++ cab->files = lcab->files; ++ cab->folders = lcab->folders; ++ } ++ ++ for (cab = lcab->nextcab; cab; cab = cab->nextcab) { ++ cab->files = lcab->files; ++ cab->folders = lcab->folders; ++ } ++ ++ return self->error = MSPACK_ERR_OK; ++} ++ ++/* decides if two folders are OK to merge */ ++static int cabd_can_merge_folders(struct mspack_system *sys, ++ struct mscabd_folder_p *lfol, ++ struct mscabd_folder_p *rfol) ++{ ++ struct mscabd_file *lfi, *rfi, *l, *r; ++ int matching = 1; ++ ++ /* check that both folders use the same compression method/settings */ ++ if (lfol->base.comp_type != rfol->base.comp_type) { ++ D(("folder merge: compression type mismatch")) ++ return 0; ++ } ++ ++ if (!(lfi = lfol->merge_next) || !(rfi = rfol->merge_prev)) { ++ D(("folder merge: one cabinet has no files to merge")) ++ return 0; ++ } ++ ++ /* for all files in lfol (which is the last folder in whichever cab and ++ * only has files to merge), compare them to the files from rfol. They ++ * should be identical in number and order. to verify this, check the ++ * offset and length of each file. */ ++ for (l=lfi, r=rfi; l; l=l->next, r=r->next) { ++ if (!r || (l->offset != r->offset) || (l->length != r->length)) { ++ matching = 0; ++ break; ++ } ++ } ++ ++ if (matching) return 1; ++ ++ /* if rfol does not begin with an identical copy of the files in lfol, make ++ * make a judgement call; if at least ONE file from lfol is in rfol, allow ++ * the merge with a warning about missing files. */ ++ matching = 0; ++ for (l = lfi; l; l = l->next) { ++ for (r = rfi; r; r = r->next) { ++ if (l->offset == r->offset && l->length == r->length) break; ++ } ++ if (r) matching = 1; else sys->message(NULL, ++ "WARNING; merged file %s not listed in both cabinets", l->filename); ++ } ++ return matching; ++} ++ ++ ++/*************************************** ++ * CABD_EXTRACT ++ *************************************** ++ * extracts a file from a cabinet ++ */ ++static int cabd_extract(struct mscab_decompressor *base, ++ struct mscabd_file *file, const char *filename) ++{ ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) base; ++ struct mscabd_folder_p *fol; ++ struct mspack_system *sys; ++ struct mspack_file *fh; ++ ++ if (!self) return MSPACK_ERR_ARGS; ++ if (!file) return self->error = MSPACK_ERR_ARGS; ++ ++ sys = self->system; ++ fol = (struct mscabd_folder_p *) file->folder; ++ ++ /* check if file can be extracted */ ++ if ((!fol) || (fol->merge_prev) || ++ (((file->offset + file->length) / CAB_BLOCKMAX) > fol->base.num_blocks)) ++ { ++ sys->message(NULL, "ERROR; file \"%s\" cannot be extracted, " ++ "cabinet set is incomplete.", file->filename); ++ return self->error = MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* allocate generic decompression state */ ++ if (!self->d) { ++ self->d = (struct mscabd_decompress_state *) sys->alloc(sys, sizeof(struct mscabd_decompress_state)); ++ if (!self->d) return self->error = MSPACK_ERR_NOMEMORY; ++ self->d->folder = NULL; ++ self->d->data = NULL; ++ self->d->sys = *sys; ++ self->d->sys.read = &cabd_sys_read; ++ self->d->sys.write = &cabd_sys_write; ++ self->d->state = NULL; ++ self->d->infh = NULL; ++ self->d->incab = NULL; ++ } ++ ++ /* do we need to change folder or reset the current folder? */ ++ if ((self->d->folder != fol) || (self->d->offset > file->offset)) { ++ /* do we need to open a new cab file? */ ++ if (!self->d->infh || (fol->data.cab != self->d->incab)) { ++ /* close previous file handle if from a different cab */ ++ if (self->d->infh) sys->close(self->d->infh); ++ self->d->incab = fol->data.cab; ++ self->d->infh = sys->open(sys, fol->data.cab->base.filename, ++ MSPACK_SYS_OPEN_READ); ++ if (!self->d->infh) return self->error = MSPACK_ERR_OPEN; ++ } ++ /* seek to start of data blocks */ ++ if (sys->seek(self->d->infh, fol->data.offset, MSPACK_SYS_SEEK_START)) { ++ return self->error = MSPACK_ERR_SEEK; ++ } ++ ++ /* set up decompressor */ ++ if (cabd_init_decomp(self, (unsigned int) fol->base.comp_type)) { ++ return self->error; ++ } ++ ++ /* initialise new folder state */ ++ self->d->folder = fol; ++ self->d->data = &fol->data; ++ self->d->offset = 0; ++ self->d->block = 0; ++ self->d->i_ptr = self->d->i_end = &self->d->input[0]; ++ ++ /* read_error lasts for the lifetime of a decompressor */ ++ self->read_error = MSPACK_ERR_OK; ++ } ++ ++ /* open file for output */ ++ if (!(fh = sys->open(sys, filename, MSPACK_SYS_OPEN_WRITE))) { ++ return self->error = MSPACK_ERR_OPEN; ++ } ++ ++ self->error = MSPACK_ERR_OK; ++ ++ /* if file has more than 0 bytes */ ++ if (file->length) { ++ off_t bytes; ++ int error; ++ /* get to correct offset. ++ * - use NULL fh to say 'no writing' to cabd_sys_write() ++ * - if cabd_sys_read() has an error, it will set self->read_error ++ * and pass back MSPACK_ERR_READ ++ */ ++ self->d->outfh = NULL; ++ if ((bytes = file->offset - self->d->offset)) { ++ error = self->d->decompress(self->d->state, bytes); ++ self->error = (error == MSPACK_ERR_READ) ? self->read_error : error; ++ } ++ ++ /* if getting to the correct offset was error free, unpack file */ ++ if (!self->error) { ++ self->d->outfh = fh; ++ error = self->d->decompress(self->d->state, (off_t) file->length); ++ self->error = (error == MSPACK_ERR_READ) ? self->read_error : error; ++ } ++ } ++ ++ /* close output file */ ++ sys->close(fh); ++ self->d->outfh = NULL; ++ ++ return self->error; ++} ++ ++/*************************************** ++ * CABD_INIT_DECOMP, CABD_FREE_DECOMP ++ *************************************** ++ * cabd_init_decomp initialises decompression state, according to which ++ * decompression method was used. relies on self->d->folder being the same ++ * as when initialised. ++ * ++ * cabd_free_decomp frees decompression state, according to which method ++ * was used. ++ */ ++static int cabd_init_decomp(struct mscab_decompressor_p *self, unsigned int ct) ++{ ++ struct mspack_file *fh = (struct mspack_file *) self; ++ ++ assert(self && self->d); ++ ++ /* free any existing decompressor */ ++ cabd_free_decomp(self); ++ ++ self->d->comp_type = ct; ++ ++ switch (ct & cffoldCOMPTYPE_MASK) { ++ case cffoldCOMPTYPE_NONE: ++ self->d->decompress = (int (*)(void *, off_t)) &noned_decompress; ++ self->d->state = noned_init(&self->d->sys, fh, fh, ++ self->param[MSCABD_PARAM_DECOMPBUF]); ++ break; ++ case cffoldCOMPTYPE_MSZIP: ++ self->d->decompress = (int (*)(void *, off_t)) &mszipd_decompress; ++ self->d->state = mszipd_init(&self->d->sys, fh, fh, ++ self->param[MSCABD_PARAM_DECOMPBUF], ++ self->param[MSCABD_PARAM_FIXMSZIP]); ++ break; ++ case cffoldCOMPTYPE_QUANTUM: ++ self->d->decompress = (int (*)(void *, off_t)) &qtmd_decompress; ++ self->d->state = qtmd_init(&self->d->sys, fh, fh, (int) (ct >> 8) & 0x1f, ++ self->param[MSCABD_PARAM_DECOMPBUF]); ++ break; ++ case cffoldCOMPTYPE_LZX: ++ self->d->decompress = (int (*)(void *, off_t)) &lzxd_decompress; ++ self->d->state = lzxd_init(&self->d->sys, fh, fh, (int) (ct >> 8) & 0x1f, 0, ++ self->param[MSCABD_PARAM_DECOMPBUF], (off_t)0,0); ++ break; ++ default: ++ return self->error = MSPACK_ERR_DATAFORMAT; ++ } ++ return self->error = (self->d->state) ? MSPACK_ERR_OK : MSPACK_ERR_NOMEMORY; ++} ++ ++static void cabd_free_decomp(struct mscab_decompressor_p *self) { ++ if (!self || !self->d || !self->d->folder || !self->d->state) return; ++ ++ switch (self->d->comp_type & cffoldCOMPTYPE_MASK) { ++ case cffoldCOMPTYPE_NONE: noned_free((struct noned_state *) self->d->state); break; ++ case cffoldCOMPTYPE_MSZIP: mszipd_free((struct mszipd_stream *) self->d->state); break; ++ case cffoldCOMPTYPE_QUANTUM: qtmd_free((struct qtmd_stream *) self->d->state); break; ++ case cffoldCOMPTYPE_LZX: lzxd_free((struct lzxd_stream *) self->d->state); break; ++ } ++ self->d->decompress = NULL; ++ self->d->state = NULL; ++} ++ ++/*************************************** ++ * CABD_SYS_READ, CABD_SYS_WRITE ++ *************************************** ++ * cabd_sys_read is the internal reader function which the decompressors ++ * use. will read data blocks (and merge split blocks) from the cabinet ++ * and serve the read bytes to the decompressors ++ * ++ * cabd_sys_write is the internal writer function which the decompressors ++ * use. it either writes data to disk (self->d->outfh) with the real ++ * sys->write() function, or does nothing with the data when ++ * self->d->outfh == NULL. advances self->d->offset ++ */ ++static int cabd_sys_read(struct mspack_file *file, void *buffer, int bytes) { ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) file; ++ unsigned char *buf = (unsigned char *) buffer; ++ struct mspack_system *sys = self->system; ++ int avail, todo, outlen, ignore_cksum; ++ ++ ignore_cksum = self->param[MSCABD_PARAM_FIXMSZIP] && ++ ((self->d->comp_type & cffoldCOMPTYPE_MASK) == cffoldCOMPTYPE_MSZIP); ++ ++ todo = bytes; ++ while (todo > 0) { ++ avail = self->d->i_end - self->d->i_ptr; ++ ++ /* if out of input data, read a new block */ ++ if (avail) { ++ /* copy as many input bytes available as possible */ ++ if (avail > todo) avail = todo; ++ sys->copy(self->d->i_ptr, buf, (size_t) avail); ++ self->d->i_ptr += avail; ++ buf += avail; ++ todo -= avail; ++ } ++ else { ++ /* out of data, read a new block */ ++ ++ /* check if we're out of input blocks, advance block counter */ ++ if (self->d->block++ >= self->d->folder->base.num_blocks) { ++ self->read_error = MSPACK_ERR_DATAFORMAT; ++ break; ++ } ++ ++ /* read a block */ ++ self->read_error = cabd_sys_read_block(sys, self->d, &outlen, ignore_cksum); ++ if (self->read_error) return -1; ++ ++ /* special Quantum hack -- trailer byte to allow the decompressor ++ * to realign itself. CAB Quantum blocks, unlike LZX blocks, can have ++ * anything from 0 to 4 trailing null bytes. */ ++ if ((self->d->comp_type & cffoldCOMPTYPE_MASK)==cffoldCOMPTYPE_QUANTUM) { ++ *self->d->i_end++ = 0xFF; ++ } ++ ++ /* is this the last block? */ ++ if (self->d->block >= self->d->folder->base.num_blocks) { ++ /* last block */ ++ if ((self->d->comp_type & cffoldCOMPTYPE_MASK) == cffoldCOMPTYPE_LZX) { ++ /* special LZX hack -- on the last block, inform LZX of the ++ * size of the output data stream. */ ++ lzxd_set_output_length((struct lzxd_stream *) self->d->state, (off_t) ++ ((self->d->block-1) * CAB_BLOCKMAX + outlen)); ++ } ++ } ++ else { ++ /* not the last block */ ++ if (outlen != CAB_BLOCKMAX) { ++ self->system->message(self->d->infh, ++ "WARNING; non-maximal data block"); ++ } ++ } ++ } /* if (avail) */ ++ } /* while (todo > 0) */ ++ return bytes - todo; ++} ++ ++static int cabd_sys_write(struct mspack_file *file, void *buffer, int bytes) { ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) file; ++ self->d->offset += bytes; ++ if (self->d->outfh) { ++ return self->system->write(self->d->outfh, buffer, bytes); ++ } ++ return bytes; ++} ++ ++/*************************************** ++ * CABD_SYS_READ_BLOCK ++ *************************************** ++ * reads a whole data block from a cab file. the block may span more than ++ * one cab file, if it does then the fragments will be reassembled ++ */ ++static int cabd_sys_read_block(struct mspack_system *sys, ++ struct mscabd_decompress_state *d, ++ int *out, int ignore_cksum) ++{ ++ unsigned char hdr[cfdata_SIZEOF]; ++ unsigned int cksum; ++ int len; ++ ++ /* reset the input block pointer and end of block pointer */ ++ d->i_ptr = d->i_end = &d->input[0]; ++ ++ do { ++ /* read the block header */ ++ if (sys->read(d->infh, &hdr[0], cfdata_SIZEOF) != cfdata_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ ++ /* skip any reserved block headers */ ++ if (d->data->cab->block_resv && ++ sys->seek(d->infh, (off_t) d->data->cab->block_resv, ++ MSPACK_SYS_SEEK_CUR)) ++ { ++ return MSPACK_ERR_SEEK; ++ } ++ ++ /* blocks must not be over CAB_INPUTMAX in size */ ++ len = EndGetI16(&hdr[cfdata_CompressedSize]); ++ if (((d->i_end - d->i_ptr) + len) > CAB_INPUTMAX) { ++ D(("block size > CAB_INPUTMAX (%ld + %d)", d->i_end - d->i_ptr, len)) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* blocks must not expand to more than CAB_BLOCKMAX */ ++ if (EndGetI16(&hdr[cfdata_UncompressedSize]) > CAB_BLOCKMAX) { ++ D(("block size > CAB_BLOCKMAX")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* read the block data */ ++ if (sys->read(d->infh, d->i_end, len) != len) { ++ return MSPACK_ERR_READ; ++ } ++ ++ /* perform checksum test on the block (if one is stored) */ ++ if ((cksum = EndGetI32(&hdr[cfdata_CheckSum]))) { ++ unsigned int sum2 = cabd_checksum(d->i_end, (unsigned int) len, 0); ++ if (cabd_checksum(&hdr[4], 4, sum2) != cksum) { ++ if (!ignore_cksum) return MSPACK_ERR_CHECKSUM; ++ sys->message(d->infh, "WARNING; bad block checksum found"); ++ } ++ } ++ ++ /* advance end of block pointer to include newly read data */ ++ d->i_end += len; ++ ++ /* uncompressed size == 0 means this block was part of a split block ++ * and it continues as the first block of the next cabinet in the set. ++ * otherwise, this is the last part of the block, and no more block ++ * reading needs to be done. ++ */ ++ /* EXIT POINT OF LOOP -- uncompressed size != 0 */ ++ if ((*out = EndGetI16(&hdr[cfdata_UncompressedSize]))) { ++ return MSPACK_ERR_OK; ++ } ++ ++ /* otherwise, advance to next cabinet */ ++ ++ /* close current file handle */ ++ sys->close(d->infh); ++ d->infh = NULL; ++ ++ /* advance to next member in the cabinet set */ ++ if (!(d->data = d->data->next)) { ++ D(("ran out of splits in cabinet set")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* open next cab file */ ++ d->incab = d->data->cab; ++ if (!(d->infh = sys->open(sys, d->incab->base.filename, ++ MSPACK_SYS_OPEN_READ))) ++ { ++ return MSPACK_ERR_OPEN; ++ } ++ ++ /* seek to start of data blocks */ ++ if (sys->seek(d->infh, d->data->offset, MSPACK_SYS_SEEK_START)) { ++ return MSPACK_ERR_SEEK; ++ } ++ } while (1); ++ ++ /* not reached */ ++ return MSPACK_ERR_OK; ++} ++ ++static unsigned int cabd_checksum(unsigned char *data, unsigned int bytes, ++ unsigned int cksum) ++{ ++ unsigned int len, ul = 0; ++ ++ for (len = bytes >> 2; len--; data += 4) { ++ cksum ^= ((data[0]) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24)); ++ } ++ ++ switch (bytes & 3) { ++ case 3: ul |= *data++ << 16; ++ case 2: ul |= *data++ << 8; ++ case 1: ul |= *data; ++ } ++ cksum ^= ul; ++ ++ return cksum; ++} ++ ++/*************************************** ++ * NONED_INIT, NONED_DECOMPRESS, NONED_FREE ++ *************************************** ++ * the "not compressed" method decompressor ++ */ ++struct noned_state { ++ struct mspack_system *sys; ++ struct mspack_file *i; ++ struct mspack_file *o; ++ unsigned char *buf; ++ int bufsize; ++}; ++ ++static struct noned_state *noned_init(struct mspack_system *sys, ++ struct mspack_file *in, ++ struct mspack_file *out, ++ int bufsize) ++{ ++ struct noned_state *state = (struct noned_state *) sys->alloc(sys, sizeof(struct noned_state)); ++ unsigned char *buf = (unsigned char *) sys->alloc(sys, (size_t) bufsize); ++ if (state && buf) { ++ state->sys = sys; ++ state->i = in; ++ state->o = out; ++ state->buf = buf; ++ state->bufsize = bufsize; ++ } ++ else { ++ sys->free(buf); ++ sys->free(state); ++ state = NULL; ++ } ++ return state; ++} ++ ++static int noned_decompress(struct noned_state *s, off_t bytes) { ++ int run; ++ while (bytes > 0) { ++ run = (bytes > s->bufsize) ? s->bufsize : (int) bytes; ++ if (s->sys->read(s->i, &s->buf[0], run) != run) return MSPACK_ERR_READ; ++ if (s->sys->write(s->o, &s->buf[0], run) != run) return MSPACK_ERR_WRITE; ++ bytes -= run; ++ } ++ return MSPACK_ERR_OK; ++} ++ ++static void noned_free(struct noned_state *state) { ++ struct mspack_system *sys; ++ if (state) { ++ sys = state->sys; ++ sys->free(state->buf); ++ sys->free(state); ++ } ++} ++ ++ ++/*************************************** ++ * CABD_PARAM ++ *************************************** ++ * allows a parameter to be set ++ */ ++static int cabd_param(struct mscab_decompressor *base, int param, int value) { ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) base; ++ if (!self) return MSPACK_ERR_ARGS; ++ ++ switch (param) { ++ case MSCABD_PARAM_SEARCHBUF: ++ if (value < 4) return MSPACK_ERR_ARGS; ++ self->param[MSCABD_PARAM_SEARCHBUF] = value; ++ break; ++ case MSCABD_PARAM_FIXMSZIP: ++ self->param[MSCABD_PARAM_FIXMSZIP] = value; ++ break; ++ case MSCABD_PARAM_DECOMPBUF: ++ if (value < 4) return MSPACK_ERR_ARGS; ++ self->param[MSCABD_PARAM_DECOMPBUF] = value; ++ break; ++ default: ++ return MSPACK_ERR_ARGS; ++ } ++ return MSPACK_ERR_OK; ++} ++ ++/*************************************** ++ * CABD_ERROR ++ *************************************** ++ * returns the last error that occurred ++ */ ++static int cabd_error(struct mscab_decompressor *base) { ++ struct mscab_decompressor_p *self = (struct mscab_decompressor_p *) base; ++ return (self) ? self->error : MSPACK_ERR_ARGS; ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/chm.h b/libclamav/libmspack-0.4alpha/mspack/chm.h +new file mode 100644 +index 000000000000..a85d2e173157 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/chm.h +@@ -0,0 +1,122 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_CHM_H ++#define MSPACK_CHM_H 1 ++ ++#include ++ ++/* generic CHM definitions */ ++ ++#define chmhead_Signature (0x0000) ++#define chmhead_Version (0x0004) ++#define chmhead_HeaderLen (0x0008) ++#define chmhead_Unknown1 (0x000C) ++#define chmhead_Timestamp (0x0010) ++#define chmhead_LanguageID (0x0014) ++#define chmhead_GUID1 (0x0018) ++#define chmhead_GUID2 (0x0028) ++#define chmhead_SIZEOF (0x0038) ++ ++#define chmhst_OffsetHS0 (0x0000) ++#define chmhst_LengthHS0 (0x0008) ++#define chmhst_OffsetHS1 (0x0010) ++#define chmhst_LengthHS1 (0x0018) ++#define chmhst_SIZEOF (0x0020) ++#define chmhst3_OffsetCS0 (0x0020) ++#define chmhst3_SIZEOF (0x0028) ++ ++#define chmhs0_Unknown1 (0x0000) ++#define chmhs0_Unknown2 (0x0004) ++#define chmhs0_FileLen (0x0008) ++#define chmhs0_Unknown3 (0x0010) ++#define chmhs0_Unknown4 (0x0014) ++#define chmhs0_SIZEOF (0x0018) ++ ++#define chmhs1_Signature (0x0000) ++#define chmhs1_Version (0x0004) ++#define chmhs1_HeaderLen (0x0008) ++#define chmhs1_Unknown1 (0x000C) ++#define chmhs1_ChunkSize (0x0010) ++#define chmhs1_Density (0x0014) ++#define chmhs1_Depth (0x0018) ++#define chmhs1_IndexRoot (0x001C) ++#define chmhs1_FirstPMGL (0x0020) ++#define chmhs1_LastPMGL (0x0024) ++#define chmhs1_Unknown2 (0x0028) ++#define chmhs1_NumChunks (0x002C) ++#define chmhs1_LanguageID (0x0030) ++#define chmhs1_GUID (0x0034) ++#define chmhs1_Unknown3 (0x0044) ++#define chmhs1_Unknown4 (0x0048) ++#define chmhs1_Unknown5 (0x004C) ++#define chmhs1_Unknown6 (0x0050) ++#define chmhs1_SIZEOF (0x0054) ++ ++#define pmgl_Signature (0x0000) ++#define pmgl_QuickRefSize (0x0004) ++#define pmgl_Unknown1 (0x0008) ++#define pmgl_PrevChunk (0x000C) ++#define pmgl_NextChunk (0x0010) ++#define pmgl_Entries (0x0014) ++#define pmgl_headerSIZEOF (0x0014) ++ ++#define pmgi_Signature (0x0000) ++#define pmgi_QuickRefSize (0x0004) ++#define pmgi_Entries (0x0008) ++#define pmgi_headerSIZEOF (0x000C) ++ ++#define lzxcd_Length (0x0000) ++#define lzxcd_Signature (0x0004) ++#define lzxcd_Version (0x0008) ++#define lzxcd_ResetInterval (0x000C) ++#define lzxcd_WindowSize (0x0010) ++#define lzxcd_CacheSize (0x0014) ++#define lzxcd_Unknown1 (0x0018) ++#define lzxcd_SIZEOF (0x001C) ++ ++#define lzxrt_Unknown1 (0x0000) ++#define lzxrt_NumEntries (0x0004) ++#define lzxrt_EntrySize (0x0008) ++#define lzxrt_TableOffset (0x000C) ++#define lzxrt_UncompLen (0x0010) ++#define lzxrt_CompLen (0x0018) ++#define lzxrt_FrameLen (0x0020) ++#define lzxrt_Entries (0x0028) ++#define lzxrt_headerSIZEOF (0x0028) ++ ++/* CHM compression definitions */ ++ ++struct mschm_compressor_p { ++ struct mschm_compressor base; ++ struct mspack_system *system; ++ char *temp_file; ++ int use_temp_file; ++ int error; ++}; ++ ++/* CHM decompression definitions */ ++struct mschmd_decompress_state { ++ struct mschmd_header *chm; /* CHM file being decompressed */ ++ off_t offset; /* uncompressed offset within folder */ ++ off_t inoffset; /* offset in input file */ ++ struct lzxd_stream *state; /* LZX decompressor state */ ++ struct mspack_system sys; /* special I/O code for decompressor */ ++ struct mspack_file *infh; /* input file handle */ ++ struct mspack_file *outfh; /* output file handle */ ++}; ++ ++struct mschm_decompressor_p { ++ struct mschm_decompressor base; ++ struct mspack_system *system; ++ struct mschmd_decompress_state *d; ++ int error; ++}; ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/chmc.c b/libclamav/libmspack-0.4alpha/mspack/chmc.c +new file mode 100644 +index 000000000000..72f6c5b389e4 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/chmc.c +@@ -0,0 +1,24 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* CHM compression implementation */ ++ ++#include ++#include ++ ++struct mschm_compressor * ++ mspack_create_chm_compressor(struct mspack_system *sys) ++{ ++ /* todo */ ++ return NULL; ++} ++ ++void mspack_destroy_chm_compressor(struct mschm_compressor *self) { ++ /* todo */ ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/chmd.c b/libclamav/libmspack-0.4alpha/mspack/chmd.c +new file mode 100644 +index 000000000000..19dc47b56ec0 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/chmd.c +@@ -0,0 +1,1392 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2011 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* CHM decompression implementation */ ++ ++#include ++#include ++ ++/* prototypes */ ++static struct mschmd_header * chmd_open( ++ struct mschm_decompressor *base, const char *filename); ++static struct mschmd_header * chmd_fast_open( ++ struct mschm_decompressor *base, const char *filename); ++static struct mschmd_header *chmd_real_open( ++ struct mschm_decompressor *base, const char *filename, int entire); ++static void chmd_close( ++ struct mschm_decompressor *base, struct mschmd_header *chm); ++static int chmd_read_headers( ++ struct mspack_system *sys, struct mspack_file *fh, ++ struct mschmd_header *chm, int entire); ++static int chmd_fast_find( ++ struct mschm_decompressor *base, struct mschmd_header *chm, ++ const char *filename, struct mschmd_file *f_ptr, int f_size); ++static unsigned char *read_chunk( ++ struct mschm_decompressor_p *self, struct mschmd_header *chm, ++ struct mspack_file *fh, unsigned int chunk); ++static int search_chunk( ++ struct mschmd_header *chm, const unsigned char *chunk, const char *filename, ++ const unsigned char **result, const unsigned char **result_end); ++static inline int compare( ++ const char *s1, const char *s2, int l1, int l2); ++static int chmd_extract( ++ struct mschm_decompressor *base, struct mschmd_file *file, ++ const char *filename); ++static int chmd_sys_write( ++ struct mspack_file *file, void *buffer, int bytes); ++static int chmd_init_decomp( ++ struct mschm_decompressor_p *self, struct mschmd_file *file); ++static int read_reset_table( ++ struct mschm_decompressor_p *self, struct mschmd_sec_mscompressed *sec, ++ int entry, off_t *length_ptr, off_t *offset_ptr); ++static int read_spaninfo( ++ struct mschm_decompressor_p *self, struct mschmd_sec_mscompressed *sec, ++ off_t *length_ptr); ++static int find_sys_file( ++ struct mschm_decompressor_p *self, struct mschmd_sec_mscompressed *sec, ++ struct mschmd_file **f_ptr, const char *name); ++static unsigned char *read_sys_file( ++ struct mschm_decompressor_p *self, struct mschmd_file *file); ++static int chmd_error( ++ struct mschm_decompressor *base); ++static int read_off64( ++ off_t *var, unsigned char *mem, struct mspack_system *sys, ++ struct mspack_file *fh); ++ ++/* filenames of the system files used for decompression. ++ * Content and ControlData are essential. ++ * ResetTable is preferred, but SpanInfo can be used if not available ++ */ ++static const char *content_name = "::DataSpace/Storage/MSCompressed/Content"; ++static const char *control_name = "::DataSpace/Storage/MSCompressed/ControlData"; ++static const char *spaninfo_name = "::DataSpace/Storage/MSCompressed/SpanInfo"; ++static const char *rtable_name = "::DataSpace/Storage/MSCompressed/Transform/" ++ "{7FC28940-9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/ResetTable"; ++ ++/*************************************** ++ * MSPACK_CREATE_CHM_DECOMPRESSOR ++ *************************************** ++ * constructor ++ */ ++struct mschm_decompressor * ++ mspack_create_chm_decompressor(struct mspack_system *sys) ++{ ++ struct mschm_decompressor_p *self = NULL; ++ ++ if (!sys) sys = mspack_default_system; ++ if (!mspack_valid_system(sys)) return NULL; ++ ++ if ((self = (struct mschm_decompressor_p *) sys->alloc(sys, sizeof(struct mschm_decompressor_p)))) { ++ self->base.open = &chmd_open; ++ self->base.close = &chmd_close; ++ self->base.extract = &chmd_extract; ++ self->base.last_error = &chmd_error; ++ self->base.fast_open = &chmd_fast_open; ++ self->base.fast_find = &chmd_fast_find; ++ self->system = sys; ++ self->error = MSPACK_ERR_OK; ++ self->d = NULL; ++ } ++ return (struct mschm_decompressor *) self; ++} ++ ++/*************************************** ++ * MSPACK_DESTROY_CAB_DECOMPRESSOR ++ *************************************** ++ * destructor ++ */ ++void mspack_destroy_chm_decompressor(struct mschm_decompressor *base) { ++ struct mschm_decompressor_p *self = (struct mschm_decompressor_p *) base; ++ if (self) { ++ struct mspack_system *sys = self->system; ++ if (self->d) { ++ if (self->d->infh) sys->close(self->d->infh); ++ if (self->d->state) lzxd_free(self->d->state); ++ sys->free(self->d); ++ } ++ sys->free(self); ++ } ++} ++ ++/*************************************** ++ * CHMD_OPEN ++ *************************************** ++ * opens a file and tries to read it as a CHM file. ++ * Calls chmd_real_open() with entire=1. ++ */ ++static struct mschmd_header *chmd_open(struct mschm_decompressor *base, ++ const char *filename) ++{ ++ return chmd_real_open(base, filename, 1); ++} ++ ++/*************************************** ++ * CHMD_FAST_OPEN ++ *************************************** ++ * opens a file and tries to read it as a CHM file, but does not read ++ * the file headers. Calls chmd_real_open() with entire=0 ++ */ ++static struct mschmd_header *chmd_fast_open(struct mschm_decompressor *base, ++ const char *filename) ++{ ++ return chmd_real_open(base, filename, 0); ++} ++ ++/*************************************** ++ * CHMD_REAL_OPEN ++ *************************************** ++ * the real implementation of chmd_open() and chmd_fast_open(). It simply ++ * passes the "entire" parameter to chmd_read_headers(), which will then ++ * either read all headers, or a bare mininum. ++ */ ++static struct mschmd_header *chmd_real_open(struct mschm_decompressor *base, ++ const char *filename, int entire) ++{ ++ struct mschm_decompressor_p *self = (struct mschm_decompressor_p *) base; ++ struct mschmd_header *chm = NULL; ++ struct mspack_system *sys; ++ struct mspack_file *fh; ++ int error; ++ ++ if (!base) return NULL; ++ sys = self->system; ++ ++ if ((fh = sys->open(sys, filename, MSPACK_SYS_OPEN_READ))) { ++ if ((chm = (struct mschmd_header *) sys->alloc(sys, sizeof(struct mschmd_header)))) { ++ chm->filename = filename; ++ error = chmd_read_headers(sys, fh, chm, entire); ++ if (error) { ++ /* if the error is DATAFORMAT, and there are some results, return ++ * partial results with a warning, rather than nothing */ ++ if (error == MSPACK_ERR_DATAFORMAT && (chm->files || chm->sysfiles)) { ++ sys->message(fh, "WARNING; contents are corrupt"); ++ error = MSPACK_ERR_OK; ++ } ++ else { ++ chmd_close(base, chm); ++ chm = NULL; ++ } ++ } ++ self->error = error; ++ } ++ else { ++ self->error = MSPACK_ERR_NOMEMORY; ++ } ++ sys->close(fh); ++ } ++ else { ++ self->error = MSPACK_ERR_OPEN; ++ } ++ return chm; ++} ++ ++/*************************************** ++ * CHMD_CLOSE ++ *************************************** ++ * frees all memory associated with a given mschmd_header ++ */ ++static void chmd_close(struct mschm_decompressor *base, ++ struct mschmd_header *chm) ++{ ++ struct mschm_decompressor_p *self = (struct mschm_decompressor_p *) base; ++ struct mschmd_file *fi, *nfi; ++ struct mspack_system *sys; ++ unsigned int i; ++ ++ if (!base) return; ++ sys = self->system; ++ ++ self->error = MSPACK_ERR_OK; ++ ++ /* free files */ ++ for (fi = chm->files; fi; fi = nfi) { ++ nfi = fi->next; ++ sys->free(fi); ++ } ++ for (fi = chm->sysfiles; fi; fi = nfi) { ++ nfi = fi->next; ++ sys->free(fi); ++ } ++ ++ /* if this CHM was being decompressed, free decompression state */ ++ if (self->d && (self->d->chm == chm)) { ++ if (self->d->infh) sys->close(self->d->infh); ++ if (self->d->state) lzxd_free(self->d->state); ++ sys->free(self->d); ++ self->d = NULL; ++ } ++ ++ /* if this CHM had a chunk cache, free it and contents */ ++ if (chm->chunk_cache) { ++ for (i = 0; i < chm->num_chunks; i++) sys->free(chm->chunk_cache[i]); ++ sys->free(chm->chunk_cache); ++ } ++ ++ sys->free(chm); ++} ++ ++/*************************************** ++ * CHMD_READ_HEADERS ++ *************************************** ++ * reads the basic CHM file headers. If the "entire" parameter is ++ * non-zero, all file entries will also be read. fills out a pre-existing ++ * mschmd_header structure, allocates memory for files as necessary ++ */ ++ ++/* The GUIDs found in CHM headers */ ++static const unsigned char guids[32] = { ++ /* {7C01FD10-7BAA-11D0-9E0C-00A0-C922-E6EC} */ ++ 0x10, 0xFD, 0x01, 0x7C, 0xAA, 0x7B, 0xD0, 0x11, ++ 0x9E, 0x0C, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEC, ++ /* {7C01FD11-7BAA-11D0-9E0C-00A0-C922-E6EC} */ ++ 0x11, 0xFD, 0x01, 0x7C, 0xAA, 0x7B, 0xD0, 0x11, ++ 0x9E, 0x0C, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEC ++}; ++ ++/* reads an encoded integer into a variable; 7 bits of data per byte, ++ * the high bit is used to indicate that there is another byte */ ++#define READ_ENCINT(var) do { \ ++ (var) = 0; \ ++ do { \ ++ if (p > end) goto chunk_end; \ ++ (var) = ((var) << 7) | (*p & 0x7F); \ ++ } while (*p++ & 0x80); \ ++} while (0) ++ ++static int chmd_read_headers(struct mspack_system *sys, struct mspack_file *fh, ++ struct mschmd_header *chm, int entire) ++{ ++ unsigned int section, name_len, x, errors, num_chunks; ++ unsigned char buf[0x54], *chunk = NULL, *name, *p, *end; ++ struct mschmd_file *fi, *link = NULL; ++ off_t offset, length; ++ int num_entries, i; ++ ++ /* initialise pointers */ ++ chm->files = NULL; ++ chm->sysfiles = NULL; ++ chm->chunk_cache = NULL; ++ chm->sec0.base.chm = chm; ++ chm->sec0.base.id = 0; ++ chm->sec1.base.chm = chm; ++ chm->sec1.base.id = 1; ++ chm->sec1.content = NULL; ++ chm->sec1.control = NULL; ++ chm->sec1.spaninfo = NULL; ++ chm->sec1.rtable = NULL; ++ ++ /* read the first header */ ++ if (sys->read(fh, &buf[0], chmhead_SIZEOF) != chmhead_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ ++ /* check ITSF signature */ ++ if (EndGetI32(&buf[chmhead_Signature]) != 0x46535449) { ++ return MSPACK_ERR_SIGNATURE; ++ } ++ ++ /* check both header GUIDs */ ++ if (mspack_memcmp(&buf[chmhead_GUID1], &guids[0], 32L) != 0) { ++ D(("incorrect GUIDs")) ++ return MSPACK_ERR_SIGNATURE; ++ } ++ ++ chm->version = EndGetI32(&buf[chmhead_Version]); ++ chm->timestamp = EndGetM32(&buf[chmhead_Timestamp]); ++ chm->language = EndGetI32(&buf[chmhead_LanguageID]); ++ if (chm->version > 3) { ++ sys->message(fh, "WARNING; CHM version > 3"); ++ } ++ ++ /* read the header section table */ ++ if (sys->read(fh, &buf[0], chmhst3_SIZEOF) != chmhst3_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ ++ /* chmhst3_OffsetCS0 does not exist in version 1 or 2 CHM files. ++ * The offset will be corrected later, once HS1 is read. ++ */ ++ if (read_off64(&offset, &buf[chmhst_OffsetHS0], sys, fh) || ++ read_off64(&chm->dir_offset, &buf[chmhst_OffsetHS1], sys, fh) || ++ read_off64(&chm->sec0.offset, &buf[chmhst3_OffsetCS0], sys, fh)) ++ { ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* seek to header section 0 */ ++ if (sys->seek(fh, offset, MSPACK_SYS_SEEK_START)) { ++ return MSPACK_ERR_SEEK; ++ } ++ ++ /* read header section 0 */ ++ if (sys->read(fh, &buf[0], chmhs0_SIZEOF) != chmhs0_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ if (read_off64(&chm->length, &buf[chmhs0_FileLen], sys, fh)) { ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* seek to header section 1 */ ++ if (sys->seek(fh, chm->dir_offset, MSPACK_SYS_SEEK_START)) { ++ return MSPACK_ERR_SEEK; ++ } ++ ++ /* read header section 1 */ ++ if (sys->read(fh, &buf[0], chmhs1_SIZEOF) != chmhs1_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ ++ chm->dir_offset = sys->tell(fh); ++ chm->chunk_size = EndGetI32(&buf[chmhs1_ChunkSize]); ++ chm->density = EndGetI32(&buf[chmhs1_Density]); ++ chm->depth = EndGetI32(&buf[chmhs1_Depth]); ++ chm->index_root = EndGetI32(&buf[chmhs1_IndexRoot]); ++ chm->num_chunks = EndGetI32(&buf[chmhs1_NumChunks]); ++ chm->first_pmgl = EndGetI32(&buf[chmhs1_FirstPMGL]); ++ chm->last_pmgl = EndGetI32(&buf[chmhs1_LastPMGL]); ++ ++ if (chm->version < 3) { ++ /* versions before 3 don't have chmhst3_OffsetCS0 */ ++ chm->sec0.offset = chm->dir_offset + (chm->chunk_size * chm->num_chunks); ++ } ++ ++ /* check if content offset or file size is wrong */ ++ if (chm->sec0.offset > chm->length) { ++ D(("content section begins after file has ended")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* ensure there are chunks and that chunk size is ++ * large enough for signature and num_entries */ ++ if (chm->chunk_size < (pmgl_Entries + 2)) { ++ D(("chunk size not large enough")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ if (chm->num_chunks == 0) { ++ D(("no chunks")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* The chunk_cache data structure is not great; large values for num_chunks ++ * or num_chunks*chunk_size can exhaust all memory. Until a better chunk ++ * cache is implemented, put arbitrary limits on num_chunks and chunk size. ++ */ ++ if (chm->num_chunks > 100000) { ++ D(("more than 100,000 chunks")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ if ((off_t)chm->chunk_size * (off_t)chm->num_chunks > chm->length) { ++ D(("chunks larger than entire file")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* common sense checks on header section 1 fields */ ++ if ((chm->chunk_size & (chm->chunk_size - 1)) != 0) { ++ sys->message(fh, "WARNING; chunk size is not a power of two"); ++ } ++ if (chm->first_pmgl != 0) { ++ sys->message(fh, "WARNING; first PMGL chunk is not zero"); ++ } ++ if (chm->first_pmgl > chm->last_pmgl) { ++ D(("first pmgl chunk is after last pmgl chunk")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ if (chm->index_root != 0xFFFFFFFF && chm->index_root > chm->num_chunks) { ++ D(("index_root outside valid range")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* if we are doing a quick read, stop here! */ ++ if (!entire) { ++ return MSPACK_ERR_OK; ++ } ++ ++ /* seek to the first PMGL chunk, and reduce the number of chunks to read */ ++ if ((x = chm->first_pmgl) != 0) { ++ if (sys->seek(fh,(off_t) (x * chm->chunk_size), MSPACK_SYS_SEEK_CUR)) { ++ return MSPACK_ERR_SEEK; ++ } ++ } ++ num_chunks = chm->last_pmgl - x + 1; ++ ++ if (!(chunk = (unsigned char *) sys->alloc(sys, (size_t)chm->chunk_size))) { ++ return MSPACK_ERR_NOMEMORY; ++ } ++ ++ /* read and process all chunks from FirstPMGL to LastPMGL */ ++ errors = 0; ++ while (num_chunks--) { ++ /* read next chunk */ ++ if (sys->read(fh, chunk, (int)chm->chunk_size) != (int)chm->chunk_size) { ++ sys->free(chunk); ++ return MSPACK_ERR_READ; ++ } ++ ++ /* process only directory (PMGL) chunks */ ++ if (EndGetI32(&chunk[pmgl_Signature]) != 0x4C474D50) continue; ++ ++ if (EndGetI32(&chunk[pmgl_QuickRefSize]) < 2) { ++ sys->message(fh, "WARNING; PMGL quickref area is too small"); ++ } ++ if (EndGetI32(&chunk[pmgl_QuickRefSize]) > ++ ((int)chm->chunk_size - pmgl_Entries)) ++ { ++ sys->message(fh, "WARNING; PMGL quickref area is too large"); ++ } ++ ++ p = &chunk[pmgl_Entries]; ++ end = &chunk[chm->chunk_size - 2]; ++ num_entries = EndGetI16(end); ++ ++ while (num_entries--) { ++ READ_ENCINT(name_len); name = p; p += name_len; ++ READ_ENCINT(section); ++ READ_ENCINT(offset); ++ READ_ENCINT(length); ++ ++ /* empty files and directory names are stored as a file entry at ++ * offset 0 with length 0. We want to keep empty files, but not ++ * directory names, which end with a "/" */ ++ if ((offset == 0) && (length == 0)) { ++ if ((name_len > 0) && (name[name_len-1] == '/')) continue; ++ } ++ ++ if (section > 1) { ++ sys->message(fh, "invalid section number '%u'.", section); ++ continue; ++ } ++ ++ if (!(fi = (struct mschmd_file *) sys->alloc(sys, sizeof(struct mschmd_file) + name_len + 1))) { ++ sys->free(chunk); ++ return MSPACK_ERR_NOMEMORY; ++ } ++ ++ fi->next = NULL; ++ fi->filename = (char *) &fi[1]; ++ fi->section = ((section == 0) ? (struct mschmd_section *) (&chm->sec0) ++ : (struct mschmd_section *) (&chm->sec1)); ++ fi->offset = offset; ++ fi->length = length; ++ sys->copy(name, fi->filename, (size_t) name_len); ++ fi->filename[name_len] = '\0'; ++ ++ if (name[0] == ':' && name[1] == ':') { ++ /* system file */ ++ if (mspack_memcmp(&name[2], &content_name[2], 31L) == 0) { ++ if (mspack_memcmp(&name[33], &content_name[33], 8L) == 0) { ++ chm->sec1.content = fi; ++ } ++ else if (mspack_memcmp(&name[33], &control_name[33], 11L) == 0) { ++ chm->sec1.control = fi; ++ } ++ else if (mspack_memcmp(&name[33], &spaninfo_name[33], 8L) == 0) { ++ chm->sec1.spaninfo = fi; ++ } ++ else if (mspack_memcmp(&name[33], &rtable_name[33], 72L) == 0) { ++ chm->sec1.rtable = fi; ++ } ++ } ++ fi->next = chm->sysfiles; ++ chm->sysfiles = fi; ++ } ++ else { ++ /* normal file */ ++ if (link) link->next = fi; else chm->files = fi; ++ link = fi; ++ } ++ } ++ ++ /* this is reached either when num_entries runs out, or if ++ * reading data from the chunk reached a premature end of chunk */ ++ chunk_end: ++ if (num_entries >= 0) { ++ D(("chunk ended before all entries could be read")) ++ errors++; ++ } ++ ++ } ++ sys->free(chunk); ++ return (errors > 0) ? MSPACK_ERR_DATAFORMAT : MSPACK_ERR_OK; ++} ++ ++/*************************************** ++ * CHMD_FAST_FIND ++ *************************************** ++ * uses PMGI index chunks and quickref data to quickly locate a file ++ * directly from the on-disk index. ++ * ++ * TODO: protect against infinite loops in chunks (where pgml_NextChunk ++ * or a PGMI index entry point to an already visited chunk) ++ */ ++static int chmd_fast_find(struct mschm_decompressor *base, ++ struct mschmd_header *chm, const char *filename, ++ struct mschmd_file *f_ptr, int f_size) ++{ ++ struct mschm_decompressor_p *self = (struct mschm_decompressor_p *) base; ++ struct mspack_system *sys; ++ struct mspack_file *fh; ++ const unsigned char *chunk, *p, *end; ++ int err = MSPACK_ERR_OK, result = -1; ++ unsigned int n, sec; ++ ++ if (!self || !chm || !f_ptr || (f_size != sizeof(struct mschmd_file))) { ++ return MSPACK_ERR_ARGS; ++ } ++ sys = self->system; ++ ++ /* clear the results structure */ ++ memset(f_ptr, 0, f_size); ++ ++ if (!(fh = sys->open(sys, chm->filename, MSPACK_SYS_OPEN_READ))) { ++ return MSPACK_ERR_OPEN; ++ } ++ ++ /* go through PMGI chunk hierarchy to reach PMGL chunk */ ++ if (chm->index_root < chm->num_chunks) { ++ n = chm->index_root; ++ for (;;) { ++ if (!(chunk = read_chunk(self, chm, fh, n))) { ++ sys->close(fh); ++ return self->error; ++ } ++ ++ /* search PMGI/PMGL chunk. exit early if no entry found */ ++ if ((result = search_chunk(chm, chunk, filename, &p, &end)) <= 0) { ++ break; ++ } ++ ++ /* found result. loop around for next chunk if this is PMGI */ ++ if (chunk[3] == 0x4C) break; else READ_ENCINT(n); ++ } ++ } ++ else { ++ /* PMGL chunks only, search from first_pmgl to last_pmgl */ ++ for (n = chm->first_pmgl; n <= chm->last_pmgl; ++ n = EndGetI32(&chunk[pmgl_NextChunk])) ++ { ++ if (!(chunk = read_chunk(self, chm, fh, n))) { ++ err = self->error; ++ break; ++ } ++ ++ /* search PMGL chunk. exit if file found */ ++ if ((result = search_chunk(chm, chunk, filename, &p, &end)) > 0) { ++ break; ++ } ++ ++ /* stop simple infinite loops: can't visit the same chunk twice */ ++ if ((int)n == EndGetI32(&chunk[pmgl_NextChunk])) { ++ break; ++ } ++ } ++ } ++ ++ /* if we found a file, read it */ ++ if (result > 0) { ++ READ_ENCINT(sec); ++ f_ptr->section = (sec == 0) ? (struct mschmd_section *) &chm->sec0 ++ : (struct mschmd_section *) &chm->sec1; ++ READ_ENCINT(f_ptr->offset); ++ READ_ENCINT(f_ptr->length); ++ } ++ else if (result < 0) { ++ err = MSPACK_ERR_DATAFORMAT; ++ } ++ ++ sys->close(fh); ++ return self->error = err; ++ ++ chunk_end: ++ D(("read beyond end of chunk entries")) ++ sys->close(fh); ++ return self->error = MSPACK_ERR_DATAFORMAT; ++} ++ ++/* reads the given chunk into memory, storing it in a chunk cache ++ * so it doesn't need to be read from disk more than once ++ */ ++static unsigned char *read_chunk(struct mschm_decompressor_p *self, ++ struct mschmd_header *chm, ++ struct mspack_file *fh, ++ unsigned int chunk_num) ++{ ++ struct mspack_system *sys = self->system; ++ unsigned char *buf; ++ ++ /* check arguments - most are already checked by chmd_fast_find */ ++ if (chunk_num > chm->num_chunks) return NULL; ++ ++ /* ensure chunk cache is available */ ++ if (!chm->chunk_cache) { ++ size_t size = sizeof(unsigned char *) * chm->num_chunks; ++ if (!(chm->chunk_cache = (unsigned char **) sys->alloc(sys, size))) { ++ self->error = MSPACK_ERR_NOMEMORY; ++ return NULL; ++ } ++ memset(chm->chunk_cache, 0, size); ++ } ++ ++ /* try to answer out of chunk cache */ ++ if (chm->chunk_cache[chunk_num]) return chm->chunk_cache[chunk_num]; ++ ++ /* need to read chunk - allocate memory for it */ ++ if (!(buf = (unsigned char *) sys->alloc(sys, chm->chunk_size))) { ++ self->error = MSPACK_ERR_NOMEMORY; ++ return NULL; ++ } ++ ++ /* seek to block and read it */ ++ if (sys->seek(fh, (off_t) (chm->dir_offset + (chunk_num * chm->chunk_size)), ++ MSPACK_SYS_SEEK_START)) ++ { ++ self->error = MSPACK_ERR_SEEK; ++ sys->free(buf); ++ return NULL; ++ } ++ if (sys->read(fh, buf, (int)chm->chunk_size) != (int)chm->chunk_size) { ++ self->error = MSPACK_ERR_READ; ++ sys->free(buf); ++ return NULL; ++ } ++ ++ /* check the signature. Is is PMGL or PMGI? */ ++ if (!((buf[0] == 0x50) && (buf[1] == 0x4D) && (buf[2] == 0x47) && ++ ((buf[3] == 0x4C) || (buf[3] == 0x49)))) ++ { ++ self->error = MSPACK_ERR_SEEK; ++ sys->free(buf); ++ return NULL; ++ } ++ ++ /* all OK. Store chunk in cache and return it */ ++ return chm->chunk_cache[chunk_num] = buf; ++} ++ ++/* searches a PMGI/PMGL chunk for a given filename entry. Returns -1 on ++ * data format error, 0 if entry definitely not found, 1 if entry ++ * found. In the latter case, *result and *result_end are set pointing ++ * to that entry's data (either the "next chunk" ENCINT for a PMGI or ++ * the section, offset and length ENCINTs for a PMGL). ++ * ++ * In the case of PMGL chunks, the entry has definitely been ++ * found. In the case of PMGI chunks, the entry which points to the ++ * chunk that may eventually contain that entry has been found. ++ */ ++static int search_chunk(struct mschmd_header *chm, ++ const unsigned char *chunk, ++ const char *filename, ++ const unsigned char **result, ++ const unsigned char **result_end) ++{ ++ const unsigned char *start, *end, *p; ++ unsigned int qr_size, num_entries, qr_entries, qr_density, name_len; ++ unsigned int L, R, M, sec, fname_len, entries_off, is_pmgl; ++ int cmp; ++ ++ fname_len = strlen(filename); ++ ++ /* PMGL chunk or PMGI chunk? (note: read_chunk() has already ++ * checked the rest of the characters in the chunk signature) */ ++ if (chunk[3] == 0x4C) { ++ is_pmgl = 1; ++ entries_off = pmgl_Entries; ++ } ++ else { ++ is_pmgl = 0; ++ entries_off = pmgi_Entries; ++ } ++ ++ /* Step 1: binary search first filename of each QR entry ++ * - target filename == entry ++ * found file ++ * - target filename < all entries ++ * file not found ++ * - target filename > all entries ++ * proceed to step 2 using final entry ++ * - target filename between two searched entries ++ * proceed to step 2 ++ */ ++ qr_size = EndGetI32(&chunk[pmgl_QuickRefSize]); ++ start = &chunk[chm->chunk_size - 2]; ++ end = &chunk[chm->chunk_size - qr_size]; ++ num_entries = EndGetI16(start); ++ qr_density = 1 + (1 << chm->density); ++ qr_entries = (num_entries + qr_density-1) / qr_density; ++ ++ if (num_entries == 0) { ++ D(("chunk has no entries")) ++ return -1; ++ } ++ ++ if (qr_size > chm->chunk_size) { ++ D(("quickref size > chunk size")) ++ return -1; ++ } ++ ++ *result_end = end; ++ ++ if (((int)qr_entries * 2) > (start - end)) { ++ D(("WARNING; more quickrefs than quickref space")) ++ qr_entries = 0; /* but we can live with it */ ++ } ++ ++ if (qr_entries > 0) { ++ L = 0; ++ R = qr_entries - 1; ++ do { ++ /* pick new midpoint */ ++ M = (L + R) >> 1; ++ ++ /* compare filename with entry QR points to */ ++ p = &chunk[entries_off + (M ? EndGetI16(start - (M << 1)) : 0)]; ++ READ_ENCINT(name_len); ++ if (p + name_len > end) goto chunk_end; ++ cmp = compare(filename, (char *)p, fname_len, name_len); ++ ++ if (cmp == 0) break; ++ else if (cmp < 0) { if (M) R = M - 1; else return 0; } ++ else if (cmp > 0) L = M + 1; ++ } while (L <= R); ++ M = (L + R) >> 1; ++ ++ if (cmp == 0) { ++ /* exact match! */ ++ p += name_len; ++ *result = p; ++ return 1; ++ } ++ ++ /* otherwise, read the group of entries for QR entry M */ ++ p = &chunk[entries_off + (M ? EndGetI16(start - (M << 1)) : 0)]; ++ num_entries -= (M * qr_density); ++ if (num_entries > qr_density) num_entries = qr_density; ++ } ++ else { ++ p = &chunk[entries_off]; ++ } ++ ++ /* Step 2: linear search through the set of entries reached in step 1. ++ * - filename == any entry ++ * found entry ++ * - filename < all entries (PMGI) or any entry (PMGL) ++ * entry not found, stop now ++ * - filename > all entries ++ * entry not found (PMGL) / maybe found (PMGI) ++ * - ++ */ ++ *result = NULL; ++ while (num_entries-- > 0) { ++ READ_ENCINT(name_len); ++ if (p + name_len > end) goto chunk_end; ++ cmp = compare(filename, (char *)p, fname_len, name_len); ++ p += name_len; ++ ++ if (cmp == 0) { ++ /* entry found */ ++ *result = p; ++ return 1; ++ } ++ ++ if (cmp < 0) { ++ /* entry not found (PMGL) / maybe found (PMGI) */ ++ break; ++ } ++ ++ /* read and ignore the rest of this entry */ ++ if (is_pmgl) { ++ READ_ENCINT(R); /* skip section */ ++ READ_ENCINT(R); /* skip offset */ ++ READ_ENCINT(R); /* skip length */ ++ } ++ else { ++ *result = p; /* store potential final result */ ++ READ_ENCINT(R); /* skip chunk number */ ++ } ++ } ++ ++ /* PMGL? not found. PMGI? maybe found */ ++ return (is_pmgl) ? 0 : (*result ? 1 : 0); ++ ++ chunk_end: ++ D(("reached end of chunk data while searching")) ++ return -1; ++} ++ ++#if HAVE_TOWLOWER ++# if HAVE_WCTYPE_H ++# include ++# endif ++# define TOLOWER(x) towlower(x) ++#elif HAVE_TOLOWER ++# if HAVE_CTYPE_H ++# include ++# endif ++# define TOLOWER(x) tolower(x) ++#else ++# define TOLOWER(x) (((x)<0||(x)>256)?(x):mspack_tolower_map[(x)]) ++/* Map of char -> lowercase char for the first 256 chars. Generated with: ++ * LC_CTYPE=en_GB.utf-8 perl -Mlocale -le 'print map{ord(lc chr).","} 0..255' ++ */ ++static const unsigned char mspack_tolower_map[256] = { ++ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27, ++ 28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52, ++ 53,54,55,56,57,58,59,60,61,62,63,64,97,98,99,100,101,102,103,104,105,106, ++ 107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,91,92,93,94, ++ 95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114, ++ 115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133, ++ 134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152, ++ 153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171, ++ 172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190, ++ 191,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241, ++ 242,243,244,245,246,215,248,249,250,251,252,253,254,223,224,225,226,227,228, ++ 229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247, ++ 248,249,250,251,252,253,254,255 ++}; ++#endif ++ ++/* decodes a UTF-8 character from s[] into c. Will not read past e. */ ++#define GET_UTF8_CHAR(s, e, c) do { \ ++ unsigned char x = *s++; \ ++ if (x < 0x80) c = x; \ ++ else if (x < 0xC0) c = -1; \ ++ else if (x < 0xE0) { \ ++ c = (s >= e) ? -1 : ((x & 0x1F) << 6) | (*s++ & 0x3F); \ ++ } \ ++ else if (x < 0xF0) { \ ++ c = (s+2 > e) ? -1 : ((x & 0x0F) << 12) | ((s[0] & 0x3F) << 6) \ ++ | (s[1] & 0x3F); \ ++ s += 2; \ ++ } \ ++ else if (x < 0xF8) { \ ++ c = (s+3 > e) ? -1 : ((x & 0x07) << 18) | ((s[0] & 0x3F) << 12) \ ++ | ((s[1] & 0x3F) << 6) | (s[2] & 0x3F); \ ++ s += 3; \ ++ } \ ++ else if (x < 0xFC) { \ ++ c = (s+4 > e) ? -1 : ((x & 0x03) << 24) | ((s[0] & 0x3F) << 18) \ ++ | ((s[1] & 0x3F) << 12)|((s[2] & 0x3F) << 6)|(s[3] & 0x3F); \ ++ s += 4; \ ++ } \ ++ else if (x < 0xFE) { \ ++ c = (s+5>e)?-1:((x&1)<<30)|((s[0]&0x3F)<<24)|((s[1]&0x3F)<<18)| \ ++ ((s[2] & 0x3F) << 12) | ((s[3] & 0x3F) << 6)|(s[4] & 0x3F); \ ++ s += 5; \ ++ } \ ++ else c = -1; \ ++} while (0) ++ ++/* case-insensitively compares two UTF8 encoded strings. String length for ++ * both strings must be provided, null bytes are not terminators */ ++static inline int compare(const char *s1, const char *s2, int l1, int l2) { ++ register const unsigned char *p1 = (const unsigned char *) s1; ++ register const unsigned char *p2 = (const unsigned char *) s2; ++ register const unsigned char *e1 = p1 + l1, *e2 = p2 + l2; ++ int c1, c2; ++ ++ while (p1 < e1 && p2 < e2) { ++ GET_UTF8_CHAR(p1, e1, c1); ++ GET_UTF8_CHAR(p2, e2, c2); ++ if (c1 == c2) continue; ++ c1 = TOLOWER(c1); ++ c2 = TOLOWER(c2); ++ if (c1 != c2) return c1 - c2; ++ } ++ return l1 - l2; ++} ++ ++ ++/*************************************** ++ * CHMD_EXTRACT ++ *************************************** ++ * extracts a file from a CHM helpfile ++ */ ++static int chmd_extract(struct mschm_decompressor *base, ++ struct mschmd_file *file, const char *filename) ++{ ++ struct mschm_decompressor_p *self = (struct mschm_decompressor_p *) base; ++ struct mspack_system *sys; ++ struct mschmd_header *chm; ++ struct mspack_file *fh; ++ off_t bytes; ++ ++ if (!self) return MSPACK_ERR_ARGS; ++ if (!file || !file->section) return self->error = MSPACK_ERR_ARGS; ++ sys = self->system; ++ chm = file->section->chm; ++ ++ /* create decompression state if it doesn't exist */ ++ if (!self->d) { ++ self->d = (struct mschmd_decompress_state *) sys->alloc(sys, sizeof(struct mschmd_decompress_state)); ++ if (!self->d) return self->error = MSPACK_ERR_NOMEMORY; ++ self->d->chm = chm; ++ self->d->offset = 0; ++ self->d->state = NULL; ++ self->d->sys = *sys; ++ self->d->sys.write = &chmd_sys_write; ++ self->d->infh = NULL; ++ self->d->outfh = NULL; ++ } ++ ++ /* open input chm file if not open, or the open one is a different chm */ ++ if (!self->d->infh || (self->d->chm != chm)) { ++ if (self->d->infh) sys->close(self->d->infh); ++ if (self->d->state) lzxd_free(self->d->state); ++ self->d->chm = chm; ++ self->d->offset = 0; ++ self->d->state = NULL; ++ self->d->infh = sys->open(sys, chm->filename, MSPACK_SYS_OPEN_READ); ++ if (!self->d->infh) return self->error = MSPACK_ERR_OPEN; ++ } ++ ++ /* open file for output */ ++ if (!(fh = sys->open(sys, filename, MSPACK_SYS_OPEN_WRITE))) { ++ return self->error = MSPACK_ERR_OPEN; ++ } ++ ++ /* if file is empty, simply creating it is enough */ ++ if (!file->length) { ++ sys->close(fh); ++ return self->error = MSPACK_ERR_OK; ++ } ++ ++ self->error = MSPACK_ERR_OK; ++ ++ switch (file->section->id) { ++ case 0: /* Uncompressed section file */ ++ /* simple seek + copy */ ++ if (sys->seek(self->d->infh, file->section->chm->sec0.offset ++ + file->offset, MSPACK_SYS_SEEK_START)) ++ { ++ self->error = MSPACK_ERR_SEEK; ++ } ++ else { ++ unsigned char buf[512]; ++ off_t length = file->length; ++ while (length > 0) { ++ int run = sizeof(buf); ++ if ((off_t)run > length) run = (int)length; ++ if (sys->read(self->d->infh, &buf[0], run) != run) { ++ self->error = MSPACK_ERR_READ; ++ break; ++ } ++ if (sys->write(fh, &buf[0], run) != run) { ++ self->error = MSPACK_ERR_WRITE; ++ break; ++ } ++ length -= run; ++ } ++ } ++ break; ++ ++ case 1: /* MSCompressed section file */ ++ /* (re)initialise compression state if we it is not yet initialised, ++ * or we have advanced too far and have to backtrack ++ */ ++ if (!self->d->state || (file->offset < self->d->offset)) { ++ if (self->d->state) { ++ lzxd_free(self->d->state); ++ self->d->state = NULL; ++ } ++ if (chmd_init_decomp(self, file)) break; ++ } ++ ++ /* seek to input data */ ++ if (sys->seek(self->d->infh, self->d->inoffset, MSPACK_SYS_SEEK_START)) { ++ self->error = MSPACK_ERR_SEEK; ++ break; ++ } ++ ++ /* get to correct offset. */ ++ self->d->outfh = NULL; ++ if ((bytes = file->offset - self->d->offset)) { ++ self->error = lzxd_decompress(self->d->state, bytes); ++ } ++ ++ /* if getting to the correct offset was error free, unpack file */ ++ if (!self->error) { ++ self->d->outfh = fh; ++ self->error = lzxd_decompress(self->d->state, file->length); ++ } ++ ++ /* save offset in input source stream, in case there is a section 0 ++ * file between now and the next section 1 file extracted */ ++ self->d->inoffset = sys->tell(self->d->infh); ++ ++ /* if an LZX error occured, the LZX decompressor is now useless */ ++ if (self->error) { ++ if (self->d->state) lzxd_free(self->d->state); ++ self->d->state = NULL; ++ } ++ break; ++ } ++ ++ sys->close(fh); ++ return self->error; ++} ++ ++/*************************************** ++ * CHMD_SYS_WRITE ++ *************************************** ++ * chmd_sys_write is the internal writer function which the decompressor ++ * uses. If either writes data to disk (self->d->outfh) with the real ++ * sys->write() function, or does nothing with the data when ++ * self->d->outfh == NULL. advances self->d->offset. ++ */ ++static int chmd_sys_write(struct mspack_file *file, void *buffer, int bytes) { ++ struct mschm_decompressor_p *self = (struct mschm_decompressor_p *) file; ++ self->d->offset += bytes; ++ if (self->d->outfh) { ++ return self->system->write(self->d->outfh, buffer, bytes); ++ } ++ return bytes; ++} ++ ++/*************************************** ++ * CHMD_INIT_DECOMP ++ *************************************** ++ * Initialises the LZX decompressor to decompress the compressed stream, ++ * from the nearest reset offset and length that is needed for the given ++ * file. ++ */ ++static int chmd_init_decomp(struct mschm_decompressor_p *self, ++ struct mschmd_file *file) ++{ ++ int window_size, window_bits, reset_interval, entry, err; ++ struct mspack_system *sys = self->system; ++ struct mschmd_sec_mscompressed *sec; ++ unsigned char *data; ++ off_t length, offset; ++ ++ sec = (struct mschmd_sec_mscompressed *) file->section; ++ ++ /* ensure we have a mscompressed content section */ ++ err = find_sys_file(self, sec, &sec->content, content_name); ++ if (err) return self->error = err; ++ ++ /* ensure we have a ControlData file */ ++ err = find_sys_file(self, sec, &sec->control, control_name); ++ if (err) return self->error = err; ++ ++ /* read ControlData */ ++ if (sec->control->length < lzxcd_SIZEOF) { ++ D(("ControlData file is too short")) ++ return self->error = MSPACK_ERR_DATAFORMAT; ++ } ++ if (!(data = read_sys_file(self, sec->control))) { ++ D(("can't read mscompressed control data file")) ++ return self->error; ++ } ++ ++ /* check LZXC signature */ ++ if (EndGetI32(&data[lzxcd_Signature]) != 0x43585A4C) { ++ sys->free(data); ++ return self->error = MSPACK_ERR_SIGNATURE; ++ } ++ ++ /* read reset_interval and window_size and validate version number */ ++ switch (EndGetI32(&data[lzxcd_Version])) { ++ case 1: ++ reset_interval = EndGetI32(&data[lzxcd_ResetInterval]); ++ window_size = EndGetI32(&data[lzxcd_WindowSize]); ++ break; ++ case 2: ++ reset_interval = EndGetI32(&data[lzxcd_ResetInterval]) * LZX_FRAME_SIZE; ++ window_size = EndGetI32(&data[lzxcd_WindowSize]) * LZX_FRAME_SIZE; ++ break; ++ default: ++ D(("bad controldata version")) ++ sys->free(data); ++ return self->error = MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* free ControlData */ ++ sys->free(data); ++ ++ /* find window_bits from window_size */ ++ switch (window_size) { ++ case 0x008000: window_bits = 15; break; ++ case 0x010000: window_bits = 16; break; ++ case 0x020000: window_bits = 17; break; ++ case 0x040000: window_bits = 18; break; ++ case 0x080000: window_bits = 19; break; ++ case 0x100000: window_bits = 20; break; ++ case 0x200000: window_bits = 21; break; ++ default: ++ D(("bad controldata window size")) ++ return self->error = MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* validate reset_interval */ ++ if (reset_interval % LZX_FRAME_SIZE) { ++ D(("bad controldata reset interval")) ++ return self->error = MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* which reset table entry would we like? */ ++ entry = file->offset / reset_interval; ++ /* convert from reset interval multiple (usually 64k) to 32k frames */ ++ entry *= reset_interval / LZX_FRAME_SIZE; ++ ++ /* read the reset table entry */ ++ if (read_reset_table(self, sec, entry, &length, &offset)) { ++ /* the uncompressed length given in the reset table is dishonest. ++ * the uncompressed data is always padded out from the given ++ * uncompressed length up to the next reset interval */ ++ length += reset_interval - 1; ++ length &= -reset_interval; ++ } ++ else { ++ /* if we can't read the reset table entry, just start from ++ * the beginning. Use spaninfo to get the uncompressed length */ ++ entry = 0; ++ offset = 0; ++ err = read_spaninfo(self, sec, &length); ++ } ++ if (err) return self->error = err; ++ ++ /* get offset of compressed data stream: ++ * = offset of uncompressed section from start of file ++ * + offset of compressed stream from start of uncompressed section ++ * + offset of chosen reset interval from start of compressed stream */ ++ self->d->inoffset = file->section->chm->sec0.offset + sec->content->offset + offset; ++ ++ /* set start offset and overall remaining stream length */ ++ self->d->offset = entry * LZX_FRAME_SIZE; ++ length -= self->d->offset; ++ ++ /* initialise LZX stream */ ++ self->d->state = lzxd_init(&self->d->sys, self->d->infh, ++ (struct mspack_file *) self, window_bits, ++ reset_interval / LZX_FRAME_SIZE, ++ 4096, length, 0); ++ if (!self->d->state) self->error = MSPACK_ERR_NOMEMORY; ++ return self->error; ++} ++ ++/*************************************** ++ * READ_RESET_TABLE ++ *************************************** ++ * Reads one entry out of the reset table. Also reads the uncompressed ++ * data length. Writes these to offset_ptr and length_ptr respectively. ++ * Returns non-zero for success, zero for failure. ++ */ ++static int read_reset_table(struct mschm_decompressor_p *self, ++ struct mschmd_sec_mscompressed *sec, ++ int entry, off_t *length_ptr, off_t *offset_ptr) ++{ ++ struct mspack_system *sys = self->system; ++ unsigned char *data; ++ unsigned int pos, entrysize; ++ ++ /* do we have a ResetTable file? */ ++ int err = find_sys_file(self, sec, &sec->rtable, rtable_name); ++ if (err) return 0; ++ ++ /* read ResetTable file */ ++ if (sec->rtable->length < lzxrt_headerSIZEOF) { ++ D(("ResetTable file is too short")) ++ return 0; ++ } ++ if (!(data = read_sys_file(self, sec->rtable))) { ++ D(("can't read reset table")) ++ return 0; ++ } ++ ++ /* check sanity of reset table */ ++ if (EndGetI32(&data[lzxrt_FrameLen]) != LZX_FRAME_SIZE) { ++ D(("bad reset table frame length")) ++ sys->free(data); ++ return 0; ++ } ++ ++ /* get the uncompressed length of the LZX stream */ ++ if (read_off64(length_ptr, &data[lzxrt_UncompLen], sys, self->d->infh)) { ++ sys->free(data); ++ return 0; ++ } ++ ++ entrysize = EndGetI32(&data[lzxrt_EntrySize]); ++ pos = EndGetI32(&data[lzxrt_TableOffset]) + (entry * entrysize); ++ ++ /* ensure reset table entry for this offset exists */ ++ if (entry < EndGetI32(&data[lzxrt_NumEntries]) && ++ pos <= (sec->rtable->length - entrysize)) ++ { ++ switch (entrysize) { ++ case 4: ++ *offset_ptr = EndGetI32(&data[pos]); ++ err = 0; ++ break; ++ case 8: ++ err = read_off64(offset_ptr, &data[pos], sys, self->d->infh); ++ break; ++ default: ++ D(("reset table entry size neither 4 nor 8")) ++ err = 1; ++ break; ++ } ++ } ++ else { ++ D(("bad reset interval")) ++ err = 1; ++ } ++ ++ /* free the reset table */ ++ sys->free(data); ++ ++ /* return success */ ++ return (err == 0); ++} ++ ++/*************************************** ++ * READ_SPANINFO ++ *************************************** ++ * Reads the uncompressed data length from the spaninfo file. ++ * Returns zero for success or a non-zero error code for failure. ++ */ ++static int read_spaninfo(struct mschm_decompressor_p *self, ++ struct mschmd_sec_mscompressed *sec, ++ off_t *length_ptr) ++{ ++ struct mspack_system *sys = self->system; ++ unsigned char *data; ++ ++ /* find SpanInfo file */ ++ int err = find_sys_file(self, sec, &sec->spaninfo, spaninfo_name); ++ if (err) return MSPACK_ERR_DATAFORMAT; ++ ++ /* check it's large enough */ ++ if (sec->spaninfo->length != 8) { ++ D(("SpanInfo file is wrong size")) ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* read the SpanInfo file */ ++ if (!(data = read_sys_file(self, sec->spaninfo))) { ++ D(("can't read SpanInfo file")) ++ return self->error; ++ } ++ ++ /* get the uncompressed length of the LZX stream */ ++ err = read_off64(length_ptr, data, sys, self->d->infh); ++ ++ sys->free(data); ++ return (err) ? MSPACK_ERR_DATAFORMAT : MSPACK_ERR_OK; ++} ++ ++/*************************************** ++ * FIND_SYS_FILE ++ *************************************** ++ * Uses chmd_fast_find to locate a system file, and fills out that system ++ * file's entry and links it into the list of system files. Returns zero ++ * for success, non-zero for both failure and the file not existing. ++ */ ++static int find_sys_file(struct mschm_decompressor_p *self, ++ struct mschmd_sec_mscompressed *sec, ++ struct mschmd_file **f_ptr, const char *name) ++{ ++ struct mspack_system *sys = self->system; ++ struct mschmd_file result; ++ ++ /* already loaded */ ++ if (*f_ptr) return MSPACK_ERR_OK; ++ ++ /* try using fast_find to find the file - return DATAFORMAT error if ++ * it fails, or successfully doesn't find the file */ ++ if (chmd_fast_find((struct mschm_decompressor *) self, sec->base.chm, ++ name, &result, (int)sizeof(result)) || !result.section) ++ { ++ return MSPACK_ERR_DATAFORMAT; ++ } ++ ++ if (!(*f_ptr = (struct mschmd_file *) sys->alloc(sys, sizeof(result)))) { ++ return MSPACK_ERR_NOMEMORY; ++ } ++ ++ /* copy result */ ++ *(*f_ptr) = result; ++ (*f_ptr)->filename = (char *) name; ++ ++ /* link file into sysfiles list */ ++ (*f_ptr)->next = sec->base.chm->sysfiles; ++ sec->base.chm->sysfiles = *f_ptr; ++ return MSPACK_ERR_OK; ++} ++ ++/*************************************** ++ * READ_SYS_FILE ++ *************************************** ++ * Allocates memory for a section 0 (uncompressed) file and reads it into ++ * memory. ++ */ ++static unsigned char *read_sys_file(struct mschm_decompressor_p *self, ++ struct mschmd_file *file) ++{ ++ struct mspack_system *sys = self->system; ++ unsigned char *data = NULL; ++ int len; ++ ++ if (!file || !file->section || (file->section->id != 0)) { ++ self->error = MSPACK_ERR_DATAFORMAT; ++ return NULL; ++ } ++ ++ len = (int) file->length; ++ ++ if (!(data = (unsigned char *) sys->alloc(sys, (size_t) len))) { ++ self->error = MSPACK_ERR_NOMEMORY; ++ return NULL; ++ } ++ if (sys->seek(self->d->infh, file->section->chm->sec0.offset ++ + file->offset, MSPACK_SYS_SEEK_START)) ++ { ++ self->error = MSPACK_ERR_SEEK; ++ sys->free(data); ++ return NULL; ++ } ++ if (sys->read(self->d->infh, data, len) != len) { ++ self->error = MSPACK_ERR_READ; ++ sys->free(data); ++ return NULL; ++ } ++ return data; ++} ++ ++/*************************************** ++ * CHMD_ERROR ++ *************************************** ++ * returns the last error that occurred ++ */ ++static int chmd_error(struct mschm_decompressor *base) { ++ struct mschm_decompressor_p *self = (struct mschm_decompressor_p *) base; ++ return (self) ? self->error : MSPACK_ERR_ARGS; ++} ++ ++/*************************************** ++ * READ_OFF64 ++ *************************************** ++ * Reads a 64-bit signed integer from memory in Intel byte order. ++ * If running on a system with a 64-bit off_t, this is simply done. ++ * If running on a system with a 32-bit off_t, offsets up to 0x7FFFFFFF ++ * are accepted, offsets beyond that cause an error message. ++ */ ++static int read_off64(off_t *var, unsigned char *mem, ++ struct mspack_system *sys, struct mspack_file *fh) ++{ ++#ifdef LARGEFILE_SUPPORT ++ *var = EndGetI64(mem); ++#else ++ *var = EndGetI32(mem); ++ if ((*var & 0x80000000) || EndGetI32(mem+4)) { ++ sys->message(fh, (char *)largefile_msg); ++ return 1; ++ } ++#endif ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/crc32.c b/libclamav/libmspack-0.4alpha/mspack/crc32.c +new file mode 100644 +index 000000000000..4bb0ef49ba29 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/crc32.c +@@ -0,0 +1,95 @@ ++/* ++ * COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or ++ * code or tables extracted from it, as desired without restriction. ++ * ++ * First, the polynomial itself and its table of feedback terms. The ++ * polynomial is ++ * X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 ++ * ++ * Note that we take it "backwards" and put the highest-order term in ++ * the lowest-order bit. The X^32 term is "implied"; the LSB is the ++ * X^31 term, etc. The X^0 term (usually shown as "+1") results in ++ * the MSB being 1 ++ * ++ * Note that the usual hardware shift register implementation, which ++ * is what we're using (we're merely optimizing it by doing eight-bit ++ * chunks at a time) shifts bits into the lowest-order term. In our ++ * implementation, that means shifting towards the right. Why do we ++ * do it this way? Because the calculated CRC must be transmitted in ++ * order from highest-order term to lowest-order term. UARTs transmit ++ * characters in order from LSB to MSB. By storing the CRC this way ++ * we hand it to the UART in the order low-byte to high-byte; the UART ++ * sends each low-bit to hight-bit; and the result is transmission bit ++ * by bit from highest- to lowest-order term without requiring any bit ++ * shuffling on our part. Reception works similarly ++ * ++ * The feedback terms table consists of 256, 32-bit entries. Notes ++ * ++ * The table can be generated at runtime if desired; code to do so ++ * is shown later. It might not be obvious, but the feedback ++ * terms simply represent the results of eight shift/xor opera ++ * tions for all combinations of data and CRC register values ++ * ++ * The values must be right-shifted by eight bits by the "updcrc ++ * logic; the shift must be unsigned (bring in zeroes). On some ++ * hardware you could probably optimize the shift in assembler by ++ * using byte-swap instructions ++ * polynomial $edb88320 ++ */ ++ ++#include "crc32.h" ++ ++const unsigned int crc32_table[256] = { ++ 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, ++ 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, ++ 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, ++ 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, ++ 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, ++ 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, ++ 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, ++ 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, ++ 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, ++ 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, ++ 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, ++ 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, ++ 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, ++ 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, ++ 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, ++ 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, ++ 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, ++ 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, ++ 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, ++ 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, ++ 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, ++ 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, ++ 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, ++ 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, ++ 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, ++ 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, ++ 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, ++ 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, ++ 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, ++ 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, ++ 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, ++ 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, ++ 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, ++ 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, ++ 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, ++ 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, ++ 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, ++ 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, ++ 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, ++ 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, ++ 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, ++ 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, ++ 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, ++ 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, ++ 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, ++ 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, ++ 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, ++ 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, ++ 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, ++ 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, ++ 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, ++ 0x2d02ef8dL ++}; +diff --git a/libclamav/libmspack-0.4alpha/mspack/crc32.h b/libclamav/libmspack-0.4alpha/mspack/crc32.h +new file mode 100644 +index 000000000000..8415f2eef602 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/crc32.h +@@ -0,0 +1,17 @@ ++#ifndef CRC32_H ++#define CRC32_H ++ ++extern const unsigned int crc32_table[256]; ++ ++/* Return a 32-bit CRC of the contents of the buffer. */ ++ ++static inline unsigned int ++crc32(unsigned int val, const void *ss, int len) ++{ ++ const unsigned char *s = ss; ++ while (--len >= 0) ++ val = crc32_table[(val ^ *s++) & 0xff] ^ (val >> 8); ++ return val; ++} ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/des.h b/libclamav/libmspack-0.4alpha/mspack/des.h +new file mode 100644 +index 000000000000..64a1ed27e4d4 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/des.h +@@ -0,0 +1,15 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_DES_H ++#define MSPACK_DES_H 1 ++ ++/* DES encryption / decryption definitions */ ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/hlp.h b/libclamav/libmspack-0.4alpha/mspack/hlp.h +new file mode 100644 +index 000000000000..b7486fa16068 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/hlp.h +@@ -0,0 +1,33 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_HLP_H ++#define MSPACK_HLP_H 1 ++ ++#include ++ ++/* generic HLP definitions */ ++ ++/* HLP compression definitions */ ++ ++struct mshlp_compressor_p { ++ struct mshlp_compressor base; ++ struct mspack_system *system; ++ /* todo */ ++}; ++ ++/* HLP decompression definitions */ ++ ++struct mshlp_decompressor_p { ++ struct mshlp_decompressor base; ++ struct mspack_system *system; ++ /* todo */ ++}; ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/hlpc.c b/libclamav/libmspack-0.4alpha/mspack/hlpc.c +new file mode 100644 +index 000000000000..60eabfe207d8 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/hlpc.c +@@ -0,0 +1,24 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* HLP compression implementation */ ++ ++#include ++#include ++ ++struct mshlp_compressor * ++ mspack_create_hlp_compressor(struct mspack_system *sys) ++{ ++ /* todo */ ++ return NULL; ++} ++ ++void mspack_destroy_hlp_compressor(struct mshlp_compressor *self) { ++ /* todo */ ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/hlpd.c b/libclamav/libmspack-0.4alpha/mspack/hlpd.c +new file mode 100644 +index 000000000000..43354f008f4f +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/hlpd.c +@@ -0,0 +1,24 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* HLP decompression implementation */ ++ ++#include ++#include ++ ++struct mshlp_decompressor * ++ mspack_create_hlp_decompressor(struct mspack_system *sys) ++{ ++ /* todo */ ++ return NULL; ++} ++ ++void mspack_destroy_hlp_decompressor(struct mshlp_decompressor *self) { ++ /* todo */ ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/kwaj.h b/libclamav/libmspack-0.4alpha/mspack/kwaj.h +new file mode 100644 +index 000000000000..09673c07793e +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/kwaj.h +@@ -0,0 +1,118 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2010 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_KWAJ_H ++#define MSPACK_KWAJ_H 1 ++ ++#include ++ ++/* generic KWAJ definitions */ ++#define kwajh_Signature1 (0x00) ++#define kwajh_Signature2 (0x04) ++#define kwajh_CompMethod (0x08) ++#define kwajh_DataOffset (0x0a) ++#define kwajh_Flags (0x0c) ++#define kwajh_SIZEOF (0x0e) ++ ++/* KWAJ compression definitions */ ++ ++struct mskwaj_compressor_p { ++ struct mskwaj_compressor base; ++ struct mspack_system *system; ++ /* todo */ ++ int param[2]; /* !!! MATCH THIS TO NUM OF PARAMS IN MSPACK.H !!! */ ++ int error; ++}; ++ ++/* KWAJ decompression definitions */ ++ ++struct mskwaj_decompressor_p { ++ struct mskwaj_decompressor base; ++ struct mspack_system *system; ++ int error; ++}; ++ ++struct mskwajd_header_p { ++ struct mskwajd_header base; ++ struct mspack_file *fh; ++}; ++ ++/* input buffer size during decompression - not worth parameterising IMHO */ ++#define KWAJ_INPUT_SIZE (2048) ++ ++/* huffman codes that are 9 bits or less are decoded immediately */ ++#define KWAJ_TABLEBITS (9) ++ ++/* number of codes in each huffman table */ ++#define KWAJ_MATCHLEN1_SYMS (16) ++#define KWAJ_MATCHLEN2_SYMS (16) ++#define KWAJ_LITLEN_SYMS (32) ++#define KWAJ_OFFSET_SYMS (64) ++#define KWAJ_LITERAL_SYMS (256) ++ ++/* define decoding table sizes */ ++#define KWAJ_TABLESIZE (1 << KWAJ_TABLEBITS) ++#if KWAJ_TABLESIZE < (KWAJ_MATCHLEN1_SYMS * 2) ++# define KWAJ_MATCHLEN1_TBLSIZE (KWAJ_MATCHLEN1_SYMS * 4) ++#else ++# define KWAJ_MATCHLEN1_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_MATCHLEN1_SYMS * 2)) ++#endif ++#if KWAJ_TABLESIZE < (KWAJ_MATCHLEN2_SYMS * 2) ++# define KWAJ_MATCHLEN2_TBLSIZE (KWAJ_MATCHLEN2_SYMS * 4) ++#else ++# define KWAJ_MATCHLEN2_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_MATCHLEN2_SYMS * 2)) ++#endif ++#if KWAJ_TABLESIZE < (KWAJ_LITLEN_SYMS * 2) ++# define KWAJ_LITLEN_TBLSIZE (KWAJ_LITLEN_SYMS * 4) ++#else ++# define KWAJ_LITLEN_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_LITLEN_SYMS * 2)) ++#endif ++#if KWAJ_TABLESIZE < (KWAJ_OFFSET_SYMS * 2) ++# define KWAJ_OFFSET_TBLSIZE (KWAJ_OFFSET_SYMS * 4) ++#else ++# define KWAJ_OFFSET_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_OFFSET_SYMS * 2)) ++#endif ++#if KWAJ_TABLESIZE < (KWAJ_LITERAL_SYMS * 2) ++# define KWAJ_LITERAL_TBLSIZE (KWAJ_LITERAL_SYMS * 4) ++#else ++# define KWAJ_LITERAL_TBLSIZE (KWAJ_TABLESIZE + (KWAJ_LITERAL_SYMS * 2)) ++#endif ++ ++struct kwajd_stream { ++ /* I/O buffering */ ++ struct mspack_system *sys; ++ struct mspack_file *input; ++ struct mspack_file *output; ++ unsigned char *i_ptr, *i_end; ++ unsigned int bit_buffer, bits_left; ++ int input_end; ++ ++ /* huffman code lengths */ ++ unsigned char MATCHLEN1_len [KWAJ_MATCHLEN1_SYMS]; ++ unsigned char MATCHLEN2_len [KWAJ_MATCHLEN2_SYMS]; ++ unsigned char LITLEN_len [KWAJ_LITLEN_SYMS]; ++ unsigned char OFFSET_len [KWAJ_OFFSET_SYMS]; ++ unsigned char LITERAL_len [KWAJ_LITERAL_SYMS]; ++ ++ /* huffman decoding tables */ ++ unsigned short MATCHLEN1_table [KWAJ_MATCHLEN1_TBLSIZE]; ++ unsigned short MATCHLEN2_table [KWAJ_MATCHLEN2_TBLSIZE]; ++ unsigned short LITLEN_table [KWAJ_LITLEN_TBLSIZE]; ++ unsigned short OFFSET_table [KWAJ_OFFSET_TBLSIZE]; ++ unsigned short LITERAL_table [KWAJ_LITERAL_TBLSIZE]; ++ ++ /* input buffer */ ++ unsigned char inbuf[KWAJ_INPUT_SIZE]; ++ ++ /* history window */ ++ unsigned char window[LZSS_WINDOW_SIZE]; ++}; ++ ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/kwajc.c b/libclamav/libmspack-0.4alpha/mspack/kwajc.c +new file mode 100644 +index 000000000000..b88ed7690a8a +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/kwajc.c +@@ -0,0 +1,24 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* KWAJ compression implementation */ ++ ++#include ++#include ++ ++struct mskwaj_compressor * ++ mspack_create_kwaj_compressor(struct mspack_system *sys) ++{ ++ /* todo */ ++ return NULL; ++} ++ ++void mspack_destroy_kwaj_compressor(struct mskwaj_compressor *self) { ++ /* todo */ ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/kwajd.c b/libclamav/libmspack-0.4alpha/mspack/kwajd.c +new file mode 100644 +index 000000000000..bd4ee87739a0 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/kwajd.c +@@ -0,0 +1,561 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2011 Stuart Caie. ++ * ++ * KWAJ is a format very similar to SZDD. KWAJ method 3 (LZH) was ++ * written by Jeff Johnson. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* KWAJ decompression implementation */ ++ ++#include ++#include ++#include ++ ++/* prototypes */ ++static struct mskwajd_header *kwajd_open( ++ struct mskwaj_decompressor *base, const char *filename); ++static void kwajd_close( ++ struct mskwaj_decompressor *base, struct mskwajd_header *hdr); ++static int kwajd_read_headers( ++ struct mspack_system *sys, struct mspack_file *fh, ++ struct mskwajd_header *hdr); ++static int kwajd_extract( ++ struct mskwaj_decompressor *base, struct mskwajd_header *hdr, ++ const char *filename); ++static int kwajd_decompress( ++ struct mskwaj_decompressor *base, const char *input, const char *output); ++static int kwajd_error( ++ struct mskwaj_decompressor *base); ++ ++static struct kwajd_stream *lzh_init( ++ struct mspack_system *sys, struct mspack_file *in, struct mspack_file *out); ++static int lzh_decompress( ++ struct kwajd_stream *kwaj); ++static void lzh_free( ++ struct kwajd_stream *kwaj); ++static int lzh_read_lens( ++ struct kwajd_stream *kwaj, ++ unsigned int type, unsigned int numsyms, ++ unsigned char *lens, unsigned short *table); ++static int lzh_read_input( ++ struct kwajd_stream *kwaj); ++ ++ ++/*************************************** ++ * MSPACK_CREATE_KWAJ_DECOMPRESSOR ++ *************************************** ++ * constructor ++ */ ++struct mskwaj_decompressor * ++ mspack_create_kwaj_decompressor(struct mspack_system *sys) ++{ ++ struct mskwaj_decompressor_p *self = NULL; ++ ++ if (!sys) sys = mspack_default_system; ++ if (!mspack_valid_system(sys)) return NULL; ++ ++ if ((self = (struct mskwaj_decompressor_p *) sys->alloc(sys, sizeof(struct mskwaj_decompressor_p)))) { ++ self->base.open = &kwajd_open; ++ self->base.close = &kwajd_close; ++ self->base.extract = &kwajd_extract; ++ self->base.decompress = &kwajd_decompress; ++ self->base.last_error = &kwajd_error; ++ self->system = sys; ++ self->error = MSPACK_ERR_OK; ++ } ++ return (struct mskwaj_decompressor *) self; ++} ++ ++/*************************************** ++ * MSPACK_DESTROY_KWAJ_DECOMPRESSOR ++ *************************************** ++ * destructor ++ */ ++void mspack_destroy_kwaj_decompressor(struct mskwaj_decompressor *base) ++{ ++ struct mskwaj_decompressor_p *self = (struct mskwaj_decompressor_p *) base; ++ if (self) { ++ struct mspack_system *sys = self->system; ++ sys->free(self); ++ } ++} ++ ++/*************************************** ++ * KWAJD_OPEN ++ *************************************** ++ * opens a KWAJ file without decompressing, reads header ++ */ ++static struct mskwajd_header *kwajd_open(struct mskwaj_decompressor *base, ++ const char *filename) ++{ ++ struct mskwaj_decompressor_p *self = (struct mskwaj_decompressor_p *) base; ++ struct mskwajd_header *hdr; ++ struct mspack_system *sys; ++ struct mspack_file *fh; ++ ++ if (!self) return NULL; ++ sys = self->system; ++ ++ fh = sys->open(sys, filename, MSPACK_SYS_OPEN_READ); ++ hdr = (struct mskwajd_header *) sys->alloc(sys, sizeof(struct mskwajd_header_p)); ++ if (fh && hdr) { ++ ((struct mskwajd_header_p *) hdr)->fh = fh; ++ self->error = kwajd_read_headers(sys, fh, hdr); ++ } ++ else { ++ if (!fh) self->error = MSPACK_ERR_OPEN; ++ if (!hdr) self->error = MSPACK_ERR_NOMEMORY; ++ } ++ ++ if (self->error) { ++ if (fh) sys->close(fh); ++ if (hdr) sys->free(hdr); ++ hdr = NULL; ++ } ++ ++ return hdr; ++} ++ ++/*************************************** ++ * KWAJD_CLOSE ++ *************************************** ++ * closes a KWAJ file ++ */ ++static void kwajd_close(struct mskwaj_decompressor *base, ++ struct mskwajd_header *hdr) ++{ ++ struct mskwaj_decompressor_p *self = (struct mskwaj_decompressor_p *) base; ++ struct mskwajd_header_p *hdr_p = (struct mskwajd_header_p *) hdr; ++ ++ if (!self || !self->system) return; ++ ++ /* close the file handle associated */ ++ self->system->close(hdr_p->fh); ++ ++ /* free the memory associated */ ++ self->system->free(hdr); ++ ++ self->error = MSPACK_ERR_OK; ++} ++ ++/*************************************** ++ * KWAJD_READ_HEADERS ++ *************************************** ++ * reads the headers of a KWAJ format file ++ */ ++static int kwajd_read_headers(struct mspack_system *sys, ++ struct mspack_file *fh, ++ struct mskwajd_header *hdr) ++{ ++ unsigned char buf[16]; ++ int i; ++ ++ /* read in the header */ ++ if (sys->read(fh, &buf[0], kwajh_SIZEOF) != kwajh_SIZEOF) { ++ return MSPACK_ERR_READ; ++ } ++ ++ /* check for "KWAJ" signature */ ++ if (((unsigned int) EndGetI32(&buf[kwajh_Signature1]) != 0x4A41574B) || ++ ((unsigned int) EndGetI32(&buf[kwajh_Signature2]) != 0xD127F088)) ++ { ++ return MSPACK_ERR_SIGNATURE; ++ } ++ ++ /* basic header fields */ ++ hdr->comp_type = EndGetI16(&buf[kwajh_CompMethod]); ++ hdr->data_offset = EndGetI16(&buf[kwajh_DataOffset]); ++ hdr->headers = EndGetI16(&buf[kwajh_Flags]); ++ hdr->length = 0; ++ hdr->filename = NULL; ++ hdr->extra = NULL; ++ hdr->extra_length = 0; ++ ++ /* optional headers */ ++ ++ /* 4 bytes: length of unpacked file */ ++ if (hdr->headers & MSKWAJ_HDR_HASLENGTH) { ++ if (sys->read(fh, &buf[0], 4) != 4) return MSPACK_ERR_READ; ++ hdr->length = EndGetI32(&buf[0]); ++ } ++ ++ /* 2 bytes: unknown purpose */ ++ if (hdr->headers & MSKWAJ_HDR_HASUNKNOWN1) { ++ if (sys->read(fh, &buf[0], 2) != 2) return MSPACK_ERR_READ; ++ } ++ ++ /* 2 bytes: length of section, then [length] bytes: unknown purpose */ ++ if (hdr->headers & MSKWAJ_HDR_HASUNKNOWN2) { ++ if (sys->read(fh, &buf[0], 2) != 2) return MSPACK_ERR_READ; ++ i = EndGetI16(&buf[0]); ++ if (sys->seek(fh, (off_t)i, MSPACK_SYS_SEEK_CUR)) return MSPACK_ERR_SEEK; ++ } ++ ++ /* filename and extension */ ++ if (hdr->headers & (MSKWAJ_HDR_HASFILENAME | MSKWAJ_HDR_HASFILEEXT)) { ++ off_t pos = sys->tell(fh); ++ char *fn = (char *) sys->alloc(sys, (size_t) 13); ++ ++ /* allocate memory for maximum length filename */ ++ if (! fn) return MSPACK_ERR_NOMEMORY; ++ hdr->filename = fn; ++ ++ /* copy filename if present */ ++ if (hdr->headers & MSKWAJ_HDR_HASFILENAME) { ++ if (sys->read(fh, &buf[0], 9) != 9) return MSPACK_ERR_READ; ++ for (i = 0; i < 9; i++, fn++) if (!(*fn = buf[i])) break; ++ pos += (i < 9) ? i+1 : 9; ++ if (sys->seek(fh, pos, MSPACK_SYS_SEEK_START)) ++ return MSPACK_ERR_SEEK; ++ } ++ ++ /* copy extension if present */ ++ if (hdr->headers & MSKWAJ_HDR_HASFILEEXT) { ++ *fn++ = '.'; ++ if (sys->read(fh, &buf[0], 4) != 4) return MSPACK_ERR_READ; ++ for (i = 0; i < 4; i++, fn++) if (!(*fn = buf[i])) break; ++ pos += (i < 4) ? i+1 : 4; ++ if (sys->seek(fh, pos, MSPACK_SYS_SEEK_START)) ++ return MSPACK_ERR_SEEK; ++ } ++ *fn = '\0'; ++ } ++ ++ /* 2 bytes: extra text length then [length] bytes of extra text data */ ++ if (hdr->headers & MSKWAJ_HDR_HASEXTRATEXT) { ++ if (sys->read(fh, &buf[0], 2) != 2) return MSPACK_ERR_READ; ++ i = EndGetI16(&buf[0]); ++ hdr->extra = (char *) sys->alloc(sys, (size_t)i+1); ++ if (! hdr->extra) return MSPACK_ERR_NOMEMORY; ++ if (sys->read(fh, hdr->extra, i) != i) return MSPACK_ERR_READ; ++ hdr->extra[i] = '\0'; ++ hdr->extra_length = i; ++ } ++ return MSPACK_ERR_OK; ++} ++ ++/*************************************** ++ * KWAJD_EXTRACT ++ *************************************** ++ * decompresses a KWAJ file ++ */ ++static int kwajd_extract(struct mskwaj_decompressor *base, ++ struct mskwajd_header *hdr, const char *filename) ++{ ++ struct mskwaj_decompressor_p *self = (struct mskwaj_decompressor_p *) base; ++ struct mspack_system *sys; ++ struct mspack_file *fh, *outfh; ++ ++ if (!self) return MSPACK_ERR_ARGS; ++ if (!hdr) return self->error = MSPACK_ERR_ARGS; ++ ++ sys = self->system; ++ fh = ((struct mskwajd_header_p *) hdr)->fh; ++ ++ /* seek to the compressed data */ ++ if (sys->seek(fh, hdr->data_offset, MSPACK_SYS_SEEK_START)) { ++ return self->error = MSPACK_ERR_SEEK; ++ } ++ ++ /* open file for output */ ++ if (!(outfh = sys->open(sys, filename, MSPACK_SYS_OPEN_WRITE))) { ++ return self->error = MSPACK_ERR_OPEN; ++ } ++ ++ self->error = MSPACK_ERR_OK; ++ ++ /* decompress based on format */ ++ if (hdr->comp_type == MSKWAJ_COMP_NONE || ++ hdr->comp_type == MSKWAJ_COMP_XOR) ++ { ++ /* NONE is a straight copy. XOR is a copy xored with 0xFF */ ++ unsigned char *buf = (unsigned char *) sys->alloc(sys, (size_t) KWAJ_INPUT_SIZE); ++ if (buf) { ++ int read, i; ++ while ((read = sys->read(fh, buf, KWAJ_INPUT_SIZE)) > 0) { ++ if (hdr->comp_type == MSKWAJ_COMP_XOR) { ++ for (i = 0; i < read; i++) buf[i] ^= 0xFF; ++ } ++ if (sys->write(outfh, buf, read) != read) { ++ self->error = MSPACK_ERR_WRITE; ++ break; ++ } ++ } ++ if (read < 0) self->error = MSPACK_ERR_READ; ++ sys->free(buf); ++ } ++ else { ++ self->error = MSPACK_ERR_NOMEMORY; ++ } ++ } ++ else if (hdr->comp_type == MSKWAJ_COMP_SZDD) { ++ self->error = lzss_decompress(sys, fh, outfh, KWAJ_INPUT_SIZE, ++ LZSS_MODE_EXPAND); ++ } ++ else if (hdr->comp_type == MSKWAJ_COMP_LZH) { ++ struct kwajd_stream *lzh = lzh_init(sys, fh, outfh); ++ self->error = (lzh) ? lzh_decompress(lzh) : MSPACK_ERR_NOMEMORY; ++ lzh_free(lzh); ++ } ++ else if (hdr->comp_type == MSKWAJ_COMP_MSZIP) { ++ struct mszipd_stream *zip = mszipd_init(sys,fh,outfh,KWAJ_INPUT_SIZE,0); ++ self->error = (zip) ? mszipd_decompress_kwaj(zip) : MSPACK_ERR_NOMEMORY; ++ mszipd_free(zip); ++ } ++ else { ++ self->error = MSPACK_ERR_DATAFORMAT; ++ } ++ ++ /* close output file */ ++ sys->close(outfh); ++ ++ return self->error; ++} ++ ++/*************************************** ++ * KWAJD_DECOMPRESS ++ *************************************** ++ * unpacks directly from input to output ++ */ ++static int kwajd_decompress(struct mskwaj_decompressor *base, ++ const char *input, const char *output) ++{ ++ struct mskwaj_decompressor_p *self = (struct mskwaj_decompressor_p *) base; ++ struct mskwajd_header *hdr; ++ int error; ++ ++ if (!self) return MSPACK_ERR_ARGS; ++ ++ if (!(hdr = kwajd_open(base, input))) return self->error; ++ error = kwajd_extract(base, hdr, output); ++ kwajd_close(base, hdr); ++ return self->error = error; ++} ++ ++/*************************************** ++ * KWAJD_ERROR ++ *************************************** ++ * returns the last error that occurred ++ */ ++static int kwajd_error(struct mskwaj_decompressor *base) ++{ ++ struct mskwaj_decompressor_p *self = (struct mskwaj_decompressor_p *) base; ++ return (self) ? self->error : MSPACK_ERR_ARGS; ++} ++ ++/*************************************** ++ * LZH_INIT, LZH_DECOMPRESS, LZH_FREE ++ *************************************** ++ * unpacks KWAJ method 3 files ++ */ ++ ++/* import bit-reading macros and code */ ++#define BITS_TYPE struct kwajd_stream ++#define BITS_VAR lzh ++#define BITS_ORDER_MSB ++#define BITS_NO_READ_INPUT ++#define READ_BYTES do { \ ++ if (i_ptr >= i_end) { \ ++ if ((err = lzh_read_input(lzh))) return err; \ ++ i_ptr = lzh->i_ptr; \ ++ i_end = lzh->i_end; \ ++ } \ ++ INJECT_BITS(*i_ptr++, 8); \ ++} while (0) ++#include ++ ++/* import huffman-reading macros and code */ ++#define TABLEBITS(tbl) KWAJ_TABLEBITS ++#define MAXSYMBOLS(tbl) KWAJ_##tbl##_SYMS ++#define HUFF_TABLE(tbl,idx) lzh->tbl##_table[idx] ++#define HUFF_LEN(tbl,idx) lzh->tbl##_len[idx] ++#define HUFF_ERROR return MSPACK_ERR_DATAFORMAT ++#include ++ ++/* In the KWAJ LZH format, there is no special 'eof' marker, it just ++ * ends. Depending on how many bits are left in the final byte when ++ * the stream ends, that might be enough to start another literal or ++ * match. The only easy way to detect that we've come to an end is to ++ * guard all bit-reading. We allow fake bits to be read once we reach ++ * the end of the stream, but we check if we then consumed any of ++ * those fake bits, after doing the READ_BITS / READ_HUFFSYM. This ++ * isn't how the default readbits.h read_input() works (it simply lets ++ * 2 fake bytes in then stops), so we implement our own. ++ */ ++#define READ_BITS_SAFE(val, n) do { \ ++ READ_BITS(val, n); \ ++ if (lzh->input_end && bits_left < lzh->input_end) \ ++ return MSPACK_ERR_OK; \ ++} while (0) ++ ++#define READ_HUFFSYM_SAFE(tbl, val) do { \ ++ READ_HUFFSYM(tbl, val); \ ++ if (lzh->input_end && bits_left < lzh->input_end) \ ++ return MSPACK_ERR_OK; \ ++} while (0) ++ ++#define BUILD_TREE(tbl, type) \ ++ STORE_BITS; \ ++ err = lzh_read_lens(lzh, type, MAXSYMBOLS(tbl), \ ++ &HUFF_LEN(tbl,0), &HUFF_TABLE(tbl,0)); \ ++ if (err) return err; \ ++ RESTORE_BITS; \ ++ if (make_decode_table(MAXSYMBOLS(tbl), TABLEBITS(tbl), \ ++ &HUFF_LEN(tbl,0), &HUFF_TABLE(tbl,0))) \ ++ return MSPACK_ERR_DATAFORMAT; ++ ++#define WRITE_BYTE do { \ ++ if (lzh->sys->write(lzh->output, &lzh->window[pos], 1) != 1) \ ++ return MSPACK_ERR_WRITE; \ ++} while (0) ++ ++static struct kwajd_stream *lzh_init(struct mspack_system *sys, ++ struct mspack_file *in, struct mspack_file *out) ++{ ++ struct kwajd_stream *lzh; ++ ++ if (!sys || !in || !out) return NULL; ++ if (!(lzh = (struct kwajd_stream *) sys->alloc(sys, sizeof(struct kwajd_stream)))) return NULL; ++ ++ lzh->sys = sys; ++ lzh->input = in; ++ lzh->output = out; ++ return lzh; ++} ++ ++static int lzh_decompress(struct kwajd_stream *lzh) ++{ ++ register unsigned int bit_buffer; ++ register int bits_left, i; ++ register unsigned short sym; ++ unsigned char *i_ptr, *i_end, lit_run = 0; ++ int j, pos = 0, len, offset, err; ++ unsigned int types[6]; ++ ++ /* reset global state */ ++ INIT_BITS; ++ RESTORE_BITS; ++ memset(&lzh->window[0], LZSS_WINDOW_FILL, (size_t) LZSS_WINDOW_SIZE); ++ ++ /* read 6 encoding types (for byte alignment) but only 5 are needed */ ++ for (i = 0; i < 6; i++) READ_BITS_SAFE(types[i], 4); ++ ++ /* read huffman table symbol lengths and build huffman trees */ ++ BUILD_TREE(MATCHLEN1, types[0]); ++ BUILD_TREE(MATCHLEN2, types[1]); ++ BUILD_TREE(LITLEN, types[2]); ++ BUILD_TREE(OFFSET, types[3]); ++ BUILD_TREE(LITERAL, types[4]); ++ ++ while (!lzh->input_end) { ++ if (lit_run) READ_HUFFSYM_SAFE(MATCHLEN2, len); ++ else READ_HUFFSYM_SAFE(MATCHLEN1, len); ++ ++ if (len > 0) { ++ len += 2; ++ lit_run = 0; /* not the end of a literal run */ ++ READ_HUFFSYM_SAFE(OFFSET, j); offset = j << 6; ++ READ_BITS_SAFE(j, 6); offset |= j; ++ ++ /* copy match as output and into the ring buffer */ ++ while (len-- > 0) { ++ lzh->window[pos] = lzh->window[(pos+4096-offset) & 4095]; ++ WRITE_BYTE; ++ pos++; pos &= 4095; ++ } ++ } ++ else { ++ READ_HUFFSYM_SAFE(LITLEN, len); len++; ++ lit_run = (len == 32) ? 0 : 1; /* end of a literal run? */ ++ while (len-- > 0) { ++ READ_HUFFSYM_SAFE(LITERAL, j); ++ /* copy as output and into the ring buffer */ ++ lzh->window[pos] = j; ++ WRITE_BYTE; ++ pos++; pos &= 4095; ++ } ++ } ++ } ++ return MSPACK_ERR_OK; ++} ++ ++static void lzh_free(struct kwajd_stream *lzh) ++{ ++ struct mspack_system *sys; ++ if (!lzh || !lzh->sys) return; ++ sys = lzh->sys; ++ sys->free(lzh); ++} ++ ++static int lzh_read_lens(struct kwajd_stream *lzh, ++ unsigned int type, unsigned int numsyms, ++ unsigned char *lens, unsigned short *table) ++{ ++ register unsigned int bit_buffer; ++ register int bits_left; ++ unsigned char *i_ptr, *i_end; ++ unsigned int i, c, sel; ++ int err; ++ ++ RESTORE_BITS; ++ switch (type) { ++ case 0: ++ i = numsyms; c = (i==16)?4: (i==32)?5: (i==64)?6: (i==256)?8 :0; ++ for (i = 0; i < numsyms; i++) lens[i] = c; ++ break; ++ ++ case 1: ++ READ_BITS_SAFE(c, 4); lens[0] = c; ++ for (i = 1; i < numsyms; i++) { ++ READ_BITS_SAFE(sel, 1); if (sel == 0) lens[i] = c; ++ else { READ_BITS_SAFE(sel, 1); if (sel == 0) lens[i] = ++c; ++ else { READ_BITS_SAFE(c, 4); lens[i] = c; }} ++ } ++ break; ++ ++ case 2: ++ READ_BITS_SAFE(c, 4); lens[0] = c; ++ for (i = 1; i < numsyms; i++) { ++ READ_BITS_SAFE(sel, 2); ++ if (sel == 3) READ_BITS_SAFE(c, 4); else c += (char) sel-1; ++ lens[i] = c; ++ } ++ break; ++ ++ case 3: ++ for (i = 0; i < numsyms; i++) { ++ READ_BITS_SAFE(c, 4); lens[i] = c; ++ } ++ break; ++ } ++ STORE_BITS; ++ return MSPACK_ERR_OK; ++} ++ ++static int lzh_read_input(struct kwajd_stream *lzh) { ++ int read; ++ if (lzh->input_end) { ++ lzh->input_end += 8; ++ lzh->inbuf[0] = 0; ++ read = 1; ++ } ++ else { ++ read = lzh->sys->read(lzh->input, &lzh->inbuf[0], KWAJ_INPUT_SIZE); ++ if (read < 0) return MSPACK_ERR_READ; ++ if (read == 0) { ++ lzh->input_end = 8; ++ lzh->inbuf[0] = 0; ++ read = 1; ++ } ++ } ++ ++ /* update i_ptr and i_end */ ++ lzh->i_ptr = &lzh->inbuf[0]; ++ lzh->i_end = &lzh->inbuf[read]; ++ return MSPACK_ERR_OK; ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/lit.h b/libclamav/libmspack-0.4alpha/mspack/lit.h +new file mode 100644 +index 000000000000..79ba44d87729 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/lit.h +@@ -0,0 +1,35 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_LIT_H ++#define MSPACK_LIT_H 1 ++ ++#include ++#include ++#include ++ ++/* generic LIT definitions */ ++ ++/* LIT compression definitions */ ++ ++struct mslit_compressor_p { ++ struct mslit_compressor base; ++ struct mspack_system *system; ++ /* todo */ ++}; ++ ++/* LIT decompression definitions */ ++ ++struct mslit_decompressor_p { ++ struct mslit_decompressor base; ++ struct mspack_system *system; ++ /* todo */ ++}; ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/litc.c b/libclamav/libmspack-0.4alpha/mspack/litc.c +new file mode 100644 +index 000000000000..a8a709af07af +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/litc.c +@@ -0,0 +1,24 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* LIT compression implementation */ ++ ++#include ++#include ++ ++struct mslit_compressor * ++ mspack_create_lit_compressor(struct mspack_system *sys) ++{ ++ /* todo */ ++ return NULL; ++} ++ ++void mspack_destroy_lit_compressor(struct mslit_compressor *self) { ++ /* todo */ ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/litd.c b/libclamav/libmspack-0.4alpha/mspack/litd.c +new file mode 100644 +index 000000000000..6e0dc9af27c4 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/litd.c +@@ -0,0 +1,24 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* LIT decompression implementation */ ++ ++#include ++#include ++ ++struct mslit_decompressor * ++ mspack_create_lit_decompressor(struct mspack_system *sys) ++{ ++ /* todo */ ++ return NULL; ++} ++ ++void mspack_destroy_lit_decompressor(struct mslit_decompressor *self) { ++ /* todo */ ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/lzss.h b/libclamav/libmspack-0.4alpha/mspack/lzss.h +new file mode 100644 +index 000000000000..55e761b5bf91 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/lzss.h +@@ -0,0 +1,66 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_LZSS_H ++#define MSPACK_LZSS_H 1 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* LZSS compression / decompression definitions */ ++ ++#define LZSS_WINDOW_SIZE (4096) ++#define LZSS_WINDOW_FILL (0x20) ++ ++#define LZSS_MODE_EXPAND (0) ++#define LZSS_MODE_MSHELP (1) ++#define LZSS_MODE_QBASIC (2) ++ ++/** ++ * Decompresses an LZSS stream. ++ * ++ * Input bytes will be read in as necessary using the system->read() ++ * function with the input file handle given. This will continue until ++ * system->read() returns 0 bytes, or an error. Errors will be passed ++ * out of the function as MSPACK_ERR_READ errors. Input streams should ++ * convey an "end of input stream" by refusing to supply all the bytes ++ * that LZSS asks for when they reach the end of the stream, rather ++ * than return an error code. ++ * ++ * Output bytes will be passed to the system->write() function, using ++ * the output file handle given. More than one call may be made to ++ * system->write(). ++ * ++ * As EXPAND.EXE (SZDD/KWAJ), Microsoft Help and QBasic have slightly ++ * different encodings for the control byte and matches, a "mode" ++ * parameter is allowed, to choose the encoding. ++ * ++ * @param system an mspack_system structure used to read from ++ * the input stream and write to the output ++ * stream, also to allocate and free memory. ++ * @param input an input stream with the LZSS data. ++ * @param output an output stream to write the decoded data to. ++ * @param input_buffer_size the number of bytes to use as an input ++ * bitstream buffer. ++ * @param mode one of #LZSS_MODE_EXPAND, #LZSS_MODE_MSHELP or ++ * #LZSS_MODE_QBASIC ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++extern int lzss_decompress(struct mspack_system *system, ++ struct mspack_file *input, ++ struct mspack_file *output, ++ int input_buffer_size, ++ int mode); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/lzssd.c b/libclamav/libmspack-0.4alpha/mspack/lzssd.c +new file mode 100644 +index 000000000000..df294bc13258 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/lzssd.c +@@ -0,0 +1,93 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2010 Stuart Caie. ++ * ++ * LZSS is a derivative of LZ77 and was created by James Storer and ++ * Thomas Szymanski in 1982. Haruhiko Okumura wrote a very popular C ++ * implementation. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#include ++#include ++ ++#define ENSURE_BYTES do { \ ++ if (i_ptr >= i_end) { \ ++ read = system->read(input, &inbuf[0], \ ++ input_buffer_size); \ ++ if (read <= 0) { \ ++ system->free(window); \ ++ return (read < 0) ? MSPACK_ERR_READ \ ++ : MSPACK_ERR_OK; \ ++ } \ ++ i_ptr = &inbuf[0]; i_end = &inbuf[read]; \ ++ } \ ++} while (0) ++ ++#define WRITE_BYTE do { \ ++ if (system->write(output, &window[pos], 1) != 1) { \ ++ system->free(window); \ ++ return MSPACK_ERR_WRITE; \ ++ } \ ++} while (0) ++ ++int lzss_decompress(struct mspack_system *system, ++ struct mspack_file *input, ++ struct mspack_file *output, ++ int input_buffer_size, ++ int mode) ++{ ++ unsigned char *window, *inbuf, *i_ptr, *i_end; ++ unsigned int pos, i, c, invert, mpos, len; ++ int read; ++ ++ /* check parameters */ ++ if (!system || input_buffer_size < 1 || (mode != LZSS_MODE_EXPAND && ++ mode != LZSS_MODE_MSHELP && mode != LZSS_MODE_QBASIC)) ++ { ++ return MSPACK_ERR_ARGS; ++ } ++ ++ /* allocate memory */ ++ window = (unsigned char *) system->alloc(system, LZSS_WINDOW_SIZE + input_buffer_size); ++ if (!window) return MSPACK_ERR_NOMEMORY; ++ ++ /* initialise decompression */ ++ inbuf = &window[LZSS_WINDOW_SIZE]; ++ memset(window, LZSS_WINDOW_FILL, (size_t) LZSS_WINDOW_SIZE); ++ pos = LZSS_WINDOW_SIZE - ((mode == LZSS_MODE_QBASIC) ? 18 : 16); ++ invert = (mode == LZSS_MODE_MSHELP) ? ~0 : 0; ++ i_ptr = i_end = &inbuf[0]; ++ ++ /* loop forever; exit condition is in ENSURE_BYTES macro */ ++ for (;;) { ++ ENSURE_BYTES; c = *i_ptr++ ^ invert; ++ for (i = 0x01; i & 0xFF; i <<= 1) { ++ if (c & i) { ++ /* literal */ ++ ENSURE_BYTES; window[pos] = *i_ptr++; ++ WRITE_BYTE; ++ pos++; pos &= LZSS_WINDOW_SIZE - 1; ++ } ++ else { ++ /* match */ ++ ENSURE_BYTES; mpos = *i_ptr++; ++ ENSURE_BYTES; mpos |= (*i_ptr & 0xF0) << 4; ++ len = (*i_ptr++ & 0x0F) + 3; ++ while (len--) { ++ window[pos] = window[mpos]; ++ WRITE_BYTE; ++ pos++; pos &= LZSS_WINDOW_SIZE - 1; ++ mpos++; mpos &= LZSS_WINDOW_SIZE - 1; ++ } ++ } ++ } ++ } ++ ++ /* not reached */ ++ system->free(window); ++ return MSPACK_ERR_OK; ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/lzx.h b/libclamav/libmspack-0.4alpha/mspack/lzx.h +new file mode 100644 +index 000000000000..4d3189ea5730 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/lzx.h +@@ -0,0 +1,221 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2013 Stuart Caie. ++ * ++ * The LZX method was created by Jonathan Forbes and Tomi Poutanen, adapted ++ * by Microsoft Corporation. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_LZX_H ++#define MSPACK_LZX_H 1 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* LZX compression / decompression definitions */ ++ ++/* some constants defined by the LZX specification */ ++#define LZX_MIN_MATCH (2) ++#define LZX_MAX_MATCH (257) ++#define LZX_NUM_CHARS (256) ++#define LZX_BLOCKTYPE_INVALID (0) /* also blocktypes 4-7 invalid */ ++#define LZX_BLOCKTYPE_VERBATIM (1) ++#define LZX_BLOCKTYPE_ALIGNED (2) ++#define LZX_BLOCKTYPE_UNCOMPRESSED (3) ++#define LZX_PRETREE_NUM_ELEMENTS (20) ++#define LZX_ALIGNED_NUM_ELEMENTS (8) /* aligned offset tree #elements */ ++#define LZX_NUM_PRIMARY_LENGTHS (7) /* this one missing from spec! */ ++#define LZX_NUM_SECONDARY_LENGTHS (249) /* length tree #elements */ ++ ++/* LZX huffman defines: tweak tablebits as desired */ ++#define LZX_PRETREE_MAXSYMBOLS (LZX_PRETREE_NUM_ELEMENTS) ++#define LZX_PRETREE_TABLEBITS (6) ++#define LZX_MAINTREE_MAXSYMBOLS (LZX_NUM_CHARS + 290*8) ++#define LZX_MAINTREE_TABLEBITS (12) ++#define LZX_LENGTH_MAXSYMBOLS (LZX_NUM_SECONDARY_LENGTHS+1) ++#define LZX_LENGTH_TABLEBITS (12) ++#define LZX_ALIGNED_MAXSYMBOLS (LZX_ALIGNED_NUM_ELEMENTS) ++#define LZX_ALIGNED_TABLEBITS (7) ++#define LZX_LENTABLE_SAFETY (64) /* table decoding overruns are allowed */ ++ ++#define LZX_FRAME_SIZE (32768) /* the size of a frame in LZX */ ++ ++struct lzxd_stream { ++ struct mspack_system *sys; /* I/O routines */ ++ struct mspack_file *input; /* input file handle */ ++ struct mspack_file *output; /* output file handle */ ++ ++ off_t offset; /* number of bytes actually output */ ++ off_t length; /* overall decompressed length of stream */ ++ ++ unsigned char *window; /* decoding window */ ++ unsigned int window_size; /* window size */ ++ unsigned int ref_data_size; /* LZX DELTA reference data size */ ++ unsigned int num_offsets; /* number of match_offset entries in table */ ++ unsigned int window_posn; /* decompression offset within window */ ++ unsigned int frame_posn; /* current frame offset within in window */ ++ unsigned int frame; /* the number of 32kb frames processed */ ++ unsigned int reset_interval; /* which frame do we reset the compressor? */ ++ ++ unsigned int R0, R1, R2; /* for the LRU offset system */ ++ unsigned int block_length; /* uncompressed length of this LZX block */ ++ unsigned int block_remaining; /* uncompressed bytes still left to decode */ ++ ++ signed int intel_filesize; /* magic header value used for transform */ ++ signed int intel_curpos; /* current offset in transform space */ ++ ++ unsigned char intel_started; /* has intel E8 decoding started? */ ++ unsigned char block_type; /* type of the current block */ ++ unsigned char header_read; /* have we started decoding at all yet? */ ++ unsigned char input_end; /* have we reached the end of input? */ ++ unsigned char is_delta; /* does stream follow LZX DELTA spec? */ ++ ++ int error; ++ ++ /* I/O buffering */ ++ unsigned char *inbuf, *i_ptr, *i_end, *o_ptr, *o_end; ++ unsigned int bit_buffer, bits_left, inbuf_size; ++ ++ /* huffman code lengths */ ++ unsigned char PRETREE_len [LZX_PRETREE_MAXSYMBOLS + LZX_LENTABLE_SAFETY]; ++ unsigned char MAINTREE_len [LZX_MAINTREE_MAXSYMBOLS + LZX_LENTABLE_SAFETY]; ++ unsigned char LENGTH_len [LZX_LENGTH_MAXSYMBOLS + LZX_LENTABLE_SAFETY]; ++ unsigned char ALIGNED_len [LZX_ALIGNED_MAXSYMBOLS + LZX_LENTABLE_SAFETY]; ++ ++ /* huffman decoding tables */ ++ unsigned short PRETREE_table [(1 << LZX_PRETREE_TABLEBITS) + ++ (LZX_PRETREE_MAXSYMBOLS * 2)]; ++ unsigned short MAINTREE_table[(1 << LZX_MAINTREE_TABLEBITS) + ++ (LZX_MAINTREE_MAXSYMBOLS * 2)]; ++ unsigned short LENGTH_table [(1 << LZX_LENGTH_TABLEBITS) + ++ (LZX_LENGTH_MAXSYMBOLS * 2)]; ++ unsigned short ALIGNED_table [(1 << LZX_ALIGNED_TABLEBITS) + ++ (LZX_ALIGNED_MAXSYMBOLS * 2)]; ++ unsigned char LENGTH_empty; ++ ++ /* this is used purely for doing the intel E8 transform */ ++ unsigned char e8_buf[LZX_FRAME_SIZE]; ++}; ++ ++/** ++ * Allocates and initialises LZX decompression state for decoding an LZX ++ * stream. ++ * ++ * This routine uses system->alloc() to allocate memory. If memory ++ * allocation fails, or the parameters to this function are invalid, ++ * NULL is returned. ++ * ++ * @param system an mspack_system structure used to read from ++ * the input stream and write to the output ++ * stream, also to allocate and free memory. ++ * @param input an input stream with the LZX data. ++ * @param output an output stream to write the decoded data to. ++ * @param window_bits the size of the decoding window, which must be ++ * between 15 and 21 inclusive for regular LZX ++ * data, or between 17 and 25 inclusive for ++ * LZX DELTA data. ++ * @param reset_interval the interval at which the LZX bitstream is ++ * reset, in multiples of LZX frames (32678 ++ * bytes), e.g. a value of 2 indicates the input ++ * stream resets after every 65536 output bytes. ++ * A value of 0 indicates that the bitstream never ++ * resets, such as in CAB LZX streams. ++ * @param input_buffer_size the number of bytes to use as an input ++ * bitstream buffer. ++ * @param output_length the length in bytes of the entirely ++ * decompressed output stream, if known in ++ * advance. It is used to correctly perform the ++ * Intel E8 transformation, which must stop 6 ++ * bytes before the very end of the ++ * decompressed stream. It is not otherwise used ++ * or adhered to. If the full decompressed ++ * length is known in advance, set it here. ++ * If it is NOT known, use the value 0, and call ++ * lzxd_set_output_length() once it is ++ * known. If never set, 4 of the final 6 bytes ++ * of the output stream may be incorrect. ++ * @param is_delta should be zero for all regular LZX data, ++ * non-zero for LZX DELTA encoded data. ++ * @return a pointer to an initialised lzxd_stream structure, or NULL if ++ * there was not enough memory or parameters to the function were wrong. ++ */ ++extern struct lzxd_stream *lzxd_init(struct mspack_system *system, ++ struct mspack_file *input, ++ struct mspack_file *output, ++ int window_bits, ++ int reset_interval, ++ int input_buffer_size, ++ off_t output_length, ++ char is_delta); ++ ++/* see description of output_length in lzxd_init() */ ++extern void lzxd_set_output_length(struct lzxd_stream *lzx, ++ off_t output_length); ++ ++/** ++ * Reads LZX DELTA reference data into the window and allows ++ * lzxd_decompress() to reference it. ++ * ++ * Call this before the first call to lzxd_decompress(). ++ ++ * @param lzx the LZX stream to apply this reference data to ++ * @param system an mspack_system implementation to use with the ++ * input param. Only read() will be called. ++ * @param input an input file handle to read reference data using ++ * system->read(). ++ * @param length the length of the reference data. Cannot be longer ++ * than the LZX window size. ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++extern int lzxd_set_reference_data(struct lzxd_stream *lzx, ++ struct mspack_system *system, ++ struct mspack_file *input, ++ unsigned int length); ++ ++/** ++ * Decompresses entire or partial LZX streams. ++ * ++ * The number of bytes of data that should be decompressed is given as the ++ * out_bytes parameter. If more bytes are decoded than are needed, they ++ * will be kept over for a later invocation. ++ * ++ * The output bytes will be passed to the system->write() function given in ++ * lzxd_init(), using the output file handle given in lzxd_init(). More than ++ * one call may be made to system->write(). ++ ++ * Input bytes will be read in as necessary using the system->read() ++ * function given in lzxd_init(), using the input file handle given in ++ * lzxd_init(). This will continue until system->read() returns 0 bytes, ++ * or an error. Errors will be passed out of the function as ++ * MSPACK_ERR_READ errors. Input streams should convey an "end of input ++ * stream" by refusing to supply all the bytes that LZX asks for when they ++ * reach the end of the stream, rather than return an error code. ++ * ++ * If any error code other than MSPACK_ERR_OK is returned, the stream ++ * should be considered unusable and lzxd_decompress() should not be ++ * called again on this stream. ++ * ++ * @param lzx LZX decompression state, as allocated by lzxd_init(). ++ * @param out_bytes the number of bytes of data to decompress. ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++extern int lzxd_decompress(struct lzxd_stream *lzx, off_t out_bytes); ++ ++/** ++ * Frees all state associated with an LZX data stream. This will call ++ * system->free() using the system pointer given in lzxd_init(). ++ * ++ * @param lzx LZX decompression state to free. ++ */ ++void lzxd_free(struct lzxd_stream *lzx); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/lzxc.c b/libclamav/libmspack-0.4alpha/mspack/lzxc.c +new file mode 100644 +index 000000000000..1207a0d747d5 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/lzxc.c +@@ -0,0 +1,18 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * The LZX method was created by Jonathan Forbes and Tomi Poutanen, adapted ++ * by Microsoft Corporation. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* LZX compression implementation */ ++ ++#include ++#include ++ ++/* todo */ +diff --git a/libclamav/libmspack-0.4alpha/mspack/lzxd.c b/libclamav/libmspack-0.4alpha/mspack/lzxd.c +new file mode 100644 +index 000000000000..b552e78414c1 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/lzxd.c +@@ -0,0 +1,895 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2013 Stuart Caie. ++ * ++ * The LZX method was created by Jonathan Forbes and Tomi Poutanen, adapted ++ * by Microsoft Corporation. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* LZX decompression implementation */ ++ ++#include ++#include ++ ++/* Microsoft's LZX document (in cab-sdk.exe) and their implementation ++ * of the com.ms.util.cab Java package do not concur. ++ * ++ * In the LZX document, there is a table showing the correlation between ++ * window size and the number of position slots. It states that the 1MB ++ * window = 40 slots and the 2MB window = 42 slots. In the implementation, ++ * 1MB = 42 slots, 2MB = 50 slots. The actual calculation is 'find the ++ * first slot whose position base is equal to or more than the required ++ * window size'. This would explain why other tables in the document refer ++ * to 50 slots rather than 42. ++ * ++ * The constant NUM_PRIMARY_LENGTHS used in the decompression pseudocode ++ * is not defined in the specification. ++ * ++ * The LZX document does not state the uncompressed block has an ++ * uncompressed length field. Where does this length field come from, so ++ * we can know how large the block is? The implementation has it as the 24 ++ * bits following after the 3 blocktype bits, before the alignment ++ * padding. ++ * ++ * The LZX document states that aligned offset blocks have their aligned ++ * offset huffman tree AFTER the main and length trees. The implementation ++ * suggests that the aligned offset tree is BEFORE the main and length ++ * trees. ++ * ++ * The LZX document decoding algorithm states that, in an aligned offset ++ * block, if an extra_bits value is 1, 2 or 3, then that number of bits ++ * should be read and the result added to the match offset. This is ++ * correct for 1 and 2, but not 3, where just a huffman symbol (using the ++ * aligned tree) should be read. ++ * ++ * Regarding the E8 preprocessing, the LZX document states 'No translation ++ * may be performed on the last 6 bytes of the input block'. This is ++ * correct. However, the pseudocode provided checks for the *E8 leader* ++ * up to the last 6 bytes. If the leader appears between -10 and -7 bytes ++ * from the end, this would cause the next four bytes to be modified, at ++ * least one of which would be in the last 6 bytes, which is not allowed ++ * according to the spec. ++ * ++ * The specification states that the huffman trees must always contain at ++ * least one element. However, many CAB files contain blocks where the ++ * length tree is completely empty (because there are no matches), and ++ * this is expected to succeed. ++ * ++ * The errors in LZX documentation appear have been corrected in the ++ * new documentation for the LZX DELTA format. ++ * ++ * http://msdn.microsoft.com/en-us/library/cc483133.aspx ++ * ++ * However, this is a different format, an extension of regular LZX. ++ * I have noticed the following differences, there may be more: ++ * ++ * The maximum window size has increased from 2MB to 32MB. This also ++ * increases the maximum number of position slots, etc. ++ * ++ * If the match length is 257 (the maximum possible), this signals ++ * a further length decoding step, that allows for matches up to ++ * 33024 bytes long. ++ * ++ * The format now allows for "reference data", supplied by the caller. ++ * If match offsets go further back than the number of bytes ++ * decompressed so far, that is them accessing the reference data. ++ */ ++ ++/* import bit-reading macros and code */ ++#define BITS_TYPE struct lzxd_stream ++#define BITS_VAR lzx ++#define BITS_ORDER_MSB ++#define READ_BYTES do { \ ++ unsigned char b0, b1; \ ++ READ_IF_NEEDED; b0 = *i_ptr++; \ ++ READ_IF_NEEDED; b1 = *i_ptr++; \ ++ INJECT_BITS((b1 << 8) | b0, 16); \ ++} while (0) ++#include ++ ++/* import huffman-reading macros and code */ ++#define TABLEBITS(tbl) LZX_##tbl##_TABLEBITS ++#define MAXSYMBOLS(tbl) LZX_##tbl##_MAXSYMBOLS ++#define HUFF_TABLE(tbl,idx) lzx->tbl##_table[idx] ++#define HUFF_LEN(tbl,idx) lzx->tbl##_len[idx] ++#define HUFF_ERROR return lzx->error = MSPACK_ERR_DECRUNCH ++#include ++ ++/* BUILD_TABLE(tbl) builds a huffman lookup table from code lengths */ ++#define BUILD_TABLE(tbl) \ ++ if (make_decode_table(MAXSYMBOLS(tbl), TABLEBITS(tbl), \ ++ &HUFF_LEN(tbl,0), &HUFF_TABLE(tbl,0))) \ ++ { \ ++ D(("failed to build %s table", #tbl)) \ ++ return lzx->error = MSPACK_ERR_DECRUNCH; \ ++ } ++ ++#define BUILD_TABLE_MAYBE_EMPTY(tbl) do { \ ++ lzx->tbl##_empty = 0; \ ++ if (make_decode_table(MAXSYMBOLS(tbl), TABLEBITS(tbl), \ ++ &HUFF_LEN(tbl,0), &HUFF_TABLE(tbl,0))) \ ++ { \ ++ for (i = 0; i < MAXSYMBOLS(tbl); i++) { \ ++ if (HUFF_LEN(tbl, i) > 0) { \ ++ D(("failed to build %s table", #tbl)) \ ++ return lzx->error = MSPACK_ERR_DECRUNCH; \ ++ } \ ++ } \ ++ /* empty tree - allow it, but don't decode symbols with it */ \ ++ lzx->tbl##_empty = 1; \ ++ } \ ++} while (0) ++ ++/* READ_LENGTHS(tablename, first, last) reads in code lengths for symbols ++ * first to last in the given table. The code lengths are stored in their ++ * own special LZX way. ++ */ ++#define READ_LENGTHS(tbl, first, last) do { \ ++ STORE_BITS; \ ++ if (lzxd_read_lens(lzx, &HUFF_LEN(tbl, 0), (first), \ ++ (unsigned int)(last))) return lzx->error; \ ++ RESTORE_BITS; \ ++} while (0) ++ ++static int lzxd_read_lens(struct lzxd_stream *lzx, unsigned char *lens, ++ unsigned int first, unsigned int last) ++{ ++ /* bit buffer and huffman symbol decode variables */ ++ register unsigned int bit_buffer; ++ register int bits_left, i; ++ register unsigned short sym; ++ unsigned char *i_ptr, *i_end; ++ ++ unsigned int x, y; ++ int z; ++ ++ RESTORE_BITS; ++ ++ /* read lengths for pretree (20 symbols, lengths stored in fixed 4 bits) */ ++ for (x = 0; x < 20; x++) { ++ READ_BITS(y, 4); ++ lzx->PRETREE_len[x] = y; ++ } ++ BUILD_TABLE(PRETREE); ++ ++ for (x = first; x < last; ) { ++ READ_HUFFSYM(PRETREE, z); ++ if (z == 17) { ++ /* code = 17, run of ([read 4 bits]+4) zeros */ ++ READ_BITS(y, 4); y += 4; ++ while (y--) lens[x++] = 0; ++ } ++ else if (z == 18) { ++ /* code = 18, run of ([read 5 bits]+20) zeros */ ++ READ_BITS(y, 5); y += 20; ++ while (y--) lens[x++] = 0; ++ } ++ else if (z == 19) { ++ /* code = 19, run of ([read 1 bit]+4) [read huffman symbol] */ ++ READ_BITS(y, 1); y += 4; ++ READ_HUFFSYM(PRETREE, z); ++ z = lens[x] - z; if (z < 0) z += 17; ++ while (y--) lens[x++] = z; ++ } ++ else { ++ /* code = 0 to 16, delta current length entry */ ++ z = lens[x] - z; if (z < 0) z += 17; ++ lens[x++] = z; ++ } ++ } ++ ++ STORE_BITS; ++ ++ return MSPACK_ERR_OK; ++} ++ ++/* LZX static data tables: ++ * ++ * LZX uses 'position slots' to represent match offsets. For every match, ++ * a small 'position slot' number and a small offset from that slot are ++ * encoded instead of one large offset. ++ * ++ * The number of slots is decided by how many are needed to encode the ++ * largest offset for a given window size. This is easy when the gap between ++ * slots is less than 128Kb, it's a linear relationship. But when extra_bits ++ * reaches its limit of 17 (because LZX can only ensure reading 17 bits of ++ * data at a time), we can only jump 128Kb at a time and have to start ++ * using more and more position slots as each window size doubles. ++ * ++ * position_base[] is an index to the position slot bases ++ * ++ * extra_bits[] states how many bits of offset-from-base data is needed. ++ * ++ * They are calculated as follows: ++ * extra_bits[i] = 0 where i < 4 ++ * extra_bits[i] = floor(i/2)-1 where i >= 4 && i < 36 ++ * extra_bits[i] = 17 where i >= 36 ++ * position_base[0] = 0 ++ * position_base[i] = position_base[i-1] + (1 << extra_bits[i-1]) ++ */ ++static const unsigned int position_slots[11] = { ++ 30, 32, 34, 36, 38, 42, 50, 66, 98, 162, 290 ++}; ++static const unsigned char extra_bits[36] = { ++ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, ++ 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16 ++}; ++static const unsigned int position_base[290] = { ++ 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, ++ 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576, 32768, ++ 49152, 65536, 98304, 131072, 196608, 262144, 393216, 524288, 655360, ++ 786432, 917504, 1048576, 1179648, 1310720, 1441792, 1572864, 1703936, ++ 1835008, 1966080, 2097152, 2228224, 2359296, 2490368, 2621440, 2752512, ++ 2883584, 3014656, 3145728, 3276800, 3407872, 3538944, 3670016, 3801088, ++ 3932160, 4063232, 4194304, 4325376, 4456448, 4587520, 4718592, 4849664, ++ 4980736, 5111808, 5242880, 5373952, 5505024, 5636096, 5767168, 5898240, ++ 6029312, 6160384, 6291456, 6422528, 6553600, 6684672, 6815744, 6946816, ++ 7077888, 7208960, 7340032, 7471104, 7602176, 7733248, 7864320, 7995392, ++ 8126464, 8257536, 8388608, 8519680, 8650752, 8781824, 8912896, 9043968, ++ 9175040, 9306112, 9437184, 9568256, 9699328, 9830400, 9961472, 10092544, ++ 10223616, 10354688, 10485760, 10616832, 10747904, 10878976, 11010048, ++ 11141120, 11272192, 11403264, 11534336, 11665408, 11796480, 11927552, ++ 12058624, 12189696, 12320768, 12451840, 12582912, 12713984, 12845056, ++ 12976128, 13107200, 13238272, 13369344, 13500416, 13631488, 13762560, ++ 13893632, 14024704, 14155776, 14286848, 14417920, 14548992, 14680064, ++ 14811136, 14942208, 15073280, 15204352, 15335424, 15466496, 15597568, ++ 15728640, 15859712, 15990784, 16121856, 16252928, 16384000, 16515072, ++ 16646144, 16777216, 16908288, 17039360, 17170432, 17301504, 17432576, ++ 17563648, 17694720, 17825792, 17956864, 18087936, 18219008, 18350080, ++ 18481152, 18612224, 18743296, 18874368, 19005440, 19136512, 19267584, ++ 19398656, 19529728, 19660800, 19791872, 19922944, 20054016, 20185088, ++ 20316160, 20447232, 20578304, 20709376, 20840448, 20971520, 21102592, ++ 21233664, 21364736, 21495808, 21626880, 21757952, 21889024, 22020096, ++ 22151168, 22282240, 22413312, 22544384, 22675456, 22806528, 22937600, ++ 23068672, 23199744, 23330816, 23461888, 23592960, 23724032, 23855104, ++ 23986176, 24117248, 24248320, 24379392, 24510464, 24641536, 24772608, ++ 24903680, 25034752, 25165824, 25296896, 25427968, 25559040, 25690112, ++ 25821184, 25952256, 26083328, 26214400, 26345472, 26476544, 26607616, ++ 26738688, 26869760, 27000832, 27131904, 27262976, 27394048, 27525120, ++ 27656192, 27787264, 27918336, 28049408, 28180480, 28311552, 28442624, ++ 28573696, 28704768, 28835840, 28966912, 29097984, 29229056, 29360128, ++ 29491200, 29622272, 29753344, 29884416, 30015488, 30146560, 30277632, ++ 30408704, 30539776, 30670848, 30801920, 30932992, 31064064, 31195136, ++ 31326208, 31457280, 31588352, 31719424, 31850496, 31981568, 32112640, ++ 32243712, 32374784, 32505856, 32636928, 32768000, 32899072, 33030144, ++ 33161216, 33292288, 33423360 ++}; ++ ++static void lzxd_reset_state(struct lzxd_stream *lzx) { ++ int i; ++ ++ lzx->R0 = 1; ++ lzx->R1 = 1; ++ lzx->R2 = 1; ++ lzx->header_read = 0; ++ lzx->block_remaining = 0; ++ lzx->block_type = LZX_BLOCKTYPE_INVALID; ++ ++ /* initialise tables to 0 (because deltas will be applied to them) */ ++ for (i = 0; i < LZX_MAINTREE_MAXSYMBOLS; i++) lzx->MAINTREE_len[i] = 0; ++ for (i = 0; i < LZX_LENGTH_MAXSYMBOLS; i++) lzx->LENGTH_len[i] = 0; ++} ++ ++/*-------- main LZX code --------*/ ++ ++struct lzxd_stream *lzxd_init(struct mspack_system *system, ++ struct mspack_file *input, ++ struct mspack_file *output, ++ int window_bits, ++ int reset_interval, ++ int input_buffer_size, ++ off_t output_length, ++ char is_delta) ++{ ++ unsigned int window_size = 1 << window_bits; ++ struct lzxd_stream *lzx; ++ ++ if (!system) return NULL; ++ ++ /* LZX DELTA window sizes are between 2^17 (128KiB) and 2^25 (32MiB), ++ * regular LZX windows are between 2^15 (32KiB) and 2^21 (2MiB) ++ */ ++ if (is_delta) { ++ if (window_bits < 17 || window_bits > 25) return NULL; ++ } ++ else { ++ if (window_bits < 15 || window_bits > 21) return NULL; ++ } ++ ++ input_buffer_size = (input_buffer_size + 1) & -2; ++ if (!input_buffer_size) return NULL; ++ ++ /* allocate decompression state */ ++ if (!(lzx = (struct lzxd_stream *) system->alloc(system, sizeof(struct lzxd_stream)))) { ++ return NULL; ++ } ++ ++ /* allocate decompression window and input buffer */ ++ lzx->window = (unsigned char *) system->alloc(system, (size_t) window_size); ++ lzx->inbuf = (unsigned char *) system->alloc(system, (size_t) input_buffer_size); ++ if (!lzx->window || !lzx->inbuf) { ++ system->free(lzx->window); ++ system->free(lzx->inbuf); ++ system->free(lzx); ++ return NULL; ++ } ++ ++ /* initialise decompression state */ ++ lzx->sys = system; ++ lzx->input = input; ++ lzx->output = output; ++ lzx->offset = 0; ++ lzx->length = output_length; ++ ++ lzx->inbuf_size = input_buffer_size; ++ lzx->window_size = 1 << window_bits; ++ lzx->ref_data_size = 0; ++ lzx->window_posn = 0; ++ lzx->frame_posn = 0; ++ lzx->frame = 0; ++ lzx->reset_interval = reset_interval; ++ lzx->intel_filesize = 0; ++ lzx->intel_curpos = 0; ++ lzx->intel_started = 0; ++ lzx->error = MSPACK_ERR_OK; ++ lzx->num_offsets = position_slots[window_bits - 15] << 3; ++ lzx->is_delta = is_delta; ++ ++ lzx->o_ptr = lzx->o_end = &lzx->e8_buf[0]; ++ lzxd_reset_state(lzx); ++ INIT_BITS; ++ return lzx; ++} ++ ++int lzxd_set_reference_data(struct lzxd_stream *lzx, ++ struct mspack_system *system, ++ struct mspack_file *input, ++ unsigned int length) ++{ ++ if (!lzx) return MSPACK_ERR_ARGS; ++ ++ if (!lzx->is_delta) { ++ D(("only LZX DELTA streams support reference data")) ++ return MSPACK_ERR_ARGS; ++ } ++ if (lzx->offset) { ++ D(("too late to set reference data after decoding starts")) ++ return MSPACK_ERR_ARGS; ++ } ++ if (length > lzx->window_size) { ++ D(("reference length (%u) is longer than the window", length)) ++ return MSPACK_ERR_ARGS; ++ } ++ if (length > 0 && (!system || !input)) { ++ D(("length > 0 but no system or input")) ++ return MSPACK_ERR_ARGS; ++ } ++ ++ lzx->ref_data_size = length; ++ if (length > 0) { ++ /* copy reference data */ ++ unsigned char *pos = &lzx->window[lzx->window_size - length]; ++ int bytes = system->read(input, pos, length); ++ /* length can't be more than 2^25, so no signedness problem */ ++ if (bytes < (int)length) return MSPACK_ERR_READ; ++ } ++ lzx->ref_data_size = length; ++ return MSPACK_ERR_OK; ++} ++ ++void lzxd_set_output_length(struct lzxd_stream *lzx, off_t out_bytes) { ++ if (lzx) lzx->length = out_bytes; ++} ++ ++int lzxd_decompress(struct lzxd_stream *lzx, off_t out_bytes) { ++ /* bitstream and huffman reading variables */ ++ register unsigned int bit_buffer; ++ register int bits_left, i=0; ++ unsigned char *i_ptr, *i_end; ++ register unsigned short sym; ++ ++ int match_length, length_footer, extra, verbatim_bits, bytes_todo; ++ int this_run, main_element, aligned_bits, j; ++ unsigned char *window, *runsrc, *rundest, buf[12]; ++ unsigned int frame_size=0, end_frame, match_offset, window_posn; ++ unsigned int R0, R1, R2; ++ ++ /* easy answers */ ++ if (!lzx || (out_bytes < 0)) return MSPACK_ERR_ARGS; ++ if (lzx->error) return lzx->error; ++ ++ /* flush out any stored-up bytes before we begin */ ++ i = lzx->o_end - lzx->o_ptr; ++ if ((off_t) i > out_bytes) i = (int) out_bytes; ++ if (i) { ++ if (lzx->sys->write(lzx->output, lzx->o_ptr, i) != i) { ++ return lzx->error = MSPACK_ERR_WRITE; ++ } ++ lzx->o_ptr += i; ++ lzx->offset += i; ++ out_bytes -= i; ++ } ++ if (out_bytes == 0) return MSPACK_ERR_OK; ++ ++ /* restore local state */ ++ RESTORE_BITS; ++ window = lzx->window; ++ window_posn = lzx->window_posn; ++ R0 = lzx->R0; ++ R1 = lzx->R1; ++ R2 = lzx->R2; ++ ++ end_frame = (unsigned int)((lzx->offset + out_bytes) / LZX_FRAME_SIZE) + 1; ++ ++ while (lzx->frame < end_frame) { ++ /* have we reached the reset interval? (if there is one?) */ ++ if (lzx->reset_interval && ((lzx->frame % lzx->reset_interval) == 0)) { ++ if (lzx->block_remaining) { ++ D(("%d bytes remaining at reset interval", lzx->block_remaining)) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ ++ /* re-read the intel header and reset the huffman lengths */ ++ lzxd_reset_state(lzx); ++ R0 = lzx->R0; ++ R1 = lzx->R1; ++ R2 = lzx->R2; ++ } ++ ++ /* LZX DELTA format has chunk_size, not present in LZX format */ ++ if (lzx->is_delta) { ++ ENSURE_BITS(16); ++ REMOVE_BITS(16); ++ } ++ ++ /* read header if necessary */ ++ if (!lzx->header_read) { ++ /* read 1 bit. if bit=0, intel filesize = 0. ++ * if bit=1, read intel filesize (32 bits) */ ++ j = 0; READ_BITS(i, 1); if (i) { READ_BITS(i, 16); READ_BITS(j, 16); } ++ lzx->intel_filesize = (i << 16) | j; ++ lzx->header_read = 1; ++ } ++ ++ /* calculate size of frame: all frames are 32k except the final frame ++ * which is 32kb or less. this can only be calculated when lzx->length ++ * has been filled in. */ ++ frame_size = LZX_FRAME_SIZE; ++ if (lzx->length && (lzx->length - lzx->offset) < (off_t)frame_size) { ++ frame_size = lzx->length - lzx->offset; ++ } ++ ++ /* decode until one more frame is available */ ++ bytes_todo = lzx->frame_posn + frame_size - window_posn; ++ while (bytes_todo > 0) { ++ /* initialise new block, if one is needed */ ++ if (lzx->block_remaining == 0) { ++ /* realign if previous block was an odd-sized UNCOMPRESSED block */ ++ if ((lzx->block_type == LZX_BLOCKTYPE_UNCOMPRESSED) && ++ (lzx->block_length & 1)) ++ { ++ READ_IF_NEEDED; ++ i_ptr++; ++ } ++ ++ /* read block type (3 bits) and block length (24 bits) */ ++ READ_BITS(lzx->block_type, 3); ++ READ_BITS(i, 16); READ_BITS(j, 8); ++ lzx->block_remaining = lzx->block_length = (i << 8) | j; ++ /*D(("new block t%d len %u", lzx->block_type, lzx->block_length))*/ ++ ++ /* read individual block headers */ ++ switch (lzx->block_type) { ++ case LZX_BLOCKTYPE_ALIGNED: ++ /* read lengths of and build aligned huffman decoding tree */ ++ for (i = 0; i < 8; i++) { READ_BITS(j, 3); lzx->ALIGNED_len[i] = j; } ++ BUILD_TABLE(ALIGNED); ++ /* no break -- rest of aligned header is same as verbatim */ ++ case LZX_BLOCKTYPE_VERBATIM: ++ /* read lengths of and build main huffman decoding tree */ ++ READ_LENGTHS(MAINTREE, 0, 256); ++ READ_LENGTHS(MAINTREE, 256, LZX_NUM_CHARS + lzx->num_offsets); ++ BUILD_TABLE(MAINTREE); ++ /* if the literal 0xE8 is anywhere in the block... */ ++ if (lzx->MAINTREE_len[0xE8] != 0) lzx->intel_started = 1; ++ /* read lengths of and build lengths huffman decoding tree */ ++ READ_LENGTHS(LENGTH, 0, LZX_NUM_SECONDARY_LENGTHS); ++ BUILD_TABLE_MAYBE_EMPTY(LENGTH); ++ break; ++ ++ case LZX_BLOCKTYPE_UNCOMPRESSED: ++ /* because we can't assume otherwise */ ++ lzx->intel_started = 1; ++ ++ /* read 1-16 (not 0-15) bits to align to bytes */ ++ ENSURE_BITS(16); ++ if (bits_left > 16) i_ptr -= 2; ++ bits_left = 0; bit_buffer = 0; ++ ++ /* read 12 bytes of stored R0 / R1 / R2 values */ ++ for (rundest = &buf[0], i = 0; i < 12; i++) { ++ READ_IF_NEEDED; ++ *rundest++ = *i_ptr++; ++ } ++ R0 = buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24); ++ R1 = buf[4] | (buf[5] << 8) | (buf[6] << 16) | (buf[7] << 24); ++ R2 = buf[8] | (buf[9] << 8) | (buf[10] << 16) | (buf[11] << 24); ++ break; ++ ++ default: ++ D(("bad block type")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ } ++ ++ /* decode more of the block: ++ * run = min(what's available, what's needed) */ ++ this_run = lzx->block_remaining; ++ if (this_run > bytes_todo) this_run = bytes_todo; ++ ++ /* assume we decode exactly this_run bytes, for now */ ++ bytes_todo -= this_run; ++ lzx->block_remaining -= this_run; ++ ++ /* decode at least this_run bytes */ ++ switch (lzx->block_type) { ++ case LZX_BLOCKTYPE_VERBATIM: ++ while (this_run > 0) { ++ READ_HUFFSYM(MAINTREE, main_element); ++ if (main_element < LZX_NUM_CHARS) { ++ /* literal: 0 to LZX_NUM_CHARS-1 */ ++ window[window_posn++] = main_element; ++ this_run--; ++ } ++ else { ++ /* match: LZX_NUM_CHARS + ((slot<<3) | length_header (3 bits)) */ ++ main_element -= LZX_NUM_CHARS; ++ ++ /* get match length */ ++ match_length = main_element & LZX_NUM_PRIMARY_LENGTHS; ++ if (match_length == LZX_NUM_PRIMARY_LENGTHS) { ++ if (lzx->LENGTH_empty) { ++ D(("LENGTH symbol needed but tree is empty")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ READ_HUFFSYM(LENGTH, length_footer); ++ match_length += length_footer; ++ } ++ match_length += LZX_MIN_MATCH; ++ ++ /* get match offset */ ++ switch ((match_offset = (main_element >> 3))) { ++ case 0: match_offset = R0; break; ++ case 1: match_offset = R1; R1=R0; R0 = match_offset; break; ++ case 2: match_offset = R2; R2=R0; R0 = match_offset; break; ++ case 3: match_offset = 1; R2=R1; R1=R0; R0 = match_offset; break; ++ default: ++ extra = (match_offset >= 36) ? 17 : extra_bits[match_offset]; ++ READ_BITS(verbatim_bits, extra); ++ match_offset = position_base[match_offset] - 2 + verbatim_bits; ++ R2 = R1; R1 = R0; R0 = match_offset; ++ } ++ ++ /* LZX DELTA uses max match length to signal even longer match */ ++ if (match_length == LZX_MAX_MATCH && lzx->is_delta) { ++ int extra_len = 0; ++ ENSURE_BITS(3); /* 4 entry huffman tree */ ++ if (PEEK_BITS(1) == 0) { ++ REMOVE_BITS(1); /* '0' -> 8 extra length bits */ ++ READ_BITS(extra_len, 8); ++ } ++ else if (PEEK_BITS(2) == 2) { ++ REMOVE_BITS(2); /* '10' -> 10 extra length bits + 0x100 */ ++ READ_BITS(extra_len, 10); ++ extra_len += 0x100; ++ } ++ else if (PEEK_BITS(3) == 6) { ++ REMOVE_BITS(3); /* '110' -> 12 extra length bits + 0x500 */ ++ READ_BITS(extra_len, 12); ++ extra_len += 0x500; ++ } ++ else { ++ REMOVE_BITS(3); /* '111' -> 15 extra length bits */ ++ READ_BITS(extra_len, 15); ++ } ++ match_length += extra_len; ++ } ++ ++ if ((window_posn + match_length) > lzx->window_size) { ++ D(("match ran over window wrap")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ ++ /* copy match */ ++ rundest = &window[window_posn]; ++ i = match_length; ++ /* does match offset wrap the window? */ ++ if (match_offset > window_posn) { ++ if (match_offset > lzx->offset && ++ (match_offset - window_posn) > lzx->ref_data_size) ++ { ++ D(("match offset beyond LZX stream")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ /* j = length from match offset to end of window */ ++ j = match_offset - window_posn; ++ if (j > (int) lzx->window_size) { ++ D(("match offset beyond window boundaries")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ runsrc = &window[lzx->window_size - j]; ++ if (j < i) { ++ /* if match goes over the window edge, do two copy runs */ ++ i -= j; while (j-- > 0) *rundest++ = *runsrc++; ++ runsrc = window; ++ } ++ while (i-- > 0) *rundest++ = *runsrc++; ++ } ++ else { ++ runsrc = rundest - match_offset; ++ while (i-- > 0) *rundest++ = *runsrc++; ++ } ++ ++ this_run -= match_length; ++ window_posn += match_length; ++ } ++ } /* while (this_run > 0) */ ++ break; ++ ++ case LZX_BLOCKTYPE_ALIGNED: ++ while (this_run > 0) { ++ READ_HUFFSYM(MAINTREE, main_element); ++ if (main_element < LZX_NUM_CHARS) { ++ /* literal: 0 to LZX_NUM_CHARS-1 */ ++ window[window_posn++] = main_element; ++ this_run--; ++ } ++ else { ++ /* match: LZX_NUM_CHARS + ((slot<<3) | length_header (3 bits)) */ ++ main_element -= LZX_NUM_CHARS; ++ ++ /* get match length */ ++ match_length = main_element & LZX_NUM_PRIMARY_LENGTHS; ++ if (match_length == LZX_NUM_PRIMARY_LENGTHS) { ++ if (lzx->LENGTH_empty) { ++ D(("LENGTH symbol needed but tree is empty")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ READ_HUFFSYM(LENGTH, length_footer); ++ match_length += length_footer; ++ } ++ match_length += LZX_MIN_MATCH; ++ ++ /* get match offset */ ++ switch ((match_offset = (main_element >> 3))) { ++ case 0: match_offset = R0; break; ++ case 1: match_offset = R1; R1 = R0; R0 = match_offset; break; ++ case 2: match_offset = R2; R2 = R0; R0 = match_offset; break; ++ default: ++ extra = (match_offset >= 36) ? 17 : extra_bits[match_offset]; ++ match_offset = position_base[match_offset] - 2; ++ if (extra > 3) { ++ /* verbatim and aligned bits */ ++ extra -= 3; ++ READ_BITS(verbatim_bits, extra); ++ match_offset += (verbatim_bits << 3); ++ READ_HUFFSYM(ALIGNED, aligned_bits); ++ match_offset += aligned_bits; ++ } ++ else if (extra == 3) { ++ /* aligned bits only */ ++ READ_HUFFSYM(ALIGNED, aligned_bits); ++ match_offset += aligned_bits; ++ } ++ else if (extra > 0) { /* extra==1, extra==2 */ ++ /* verbatim bits only */ ++ READ_BITS(verbatim_bits, extra); ++ match_offset += verbatim_bits; ++ } ++ else /* extra == 0 */ { ++ /* ??? not defined in LZX specification! */ ++ match_offset = 1; ++ } ++ /* update repeated offset LRU queue */ ++ R2 = R1; R1 = R0; R0 = match_offset; ++ } ++ ++ /* LZX DELTA uses max match length to signal even longer match */ ++ if (match_length == LZX_MAX_MATCH && lzx->is_delta) { ++ int extra_len = 0; ++ ENSURE_BITS(3); /* 4 entry huffman tree */ ++ if (PEEK_BITS(1) == 0) { ++ REMOVE_BITS(1); /* '0' -> 8 extra length bits */ ++ READ_BITS(extra_len, 8); ++ } ++ else if (PEEK_BITS(2) == 2) { ++ REMOVE_BITS(2); /* '10' -> 10 extra length bits + 0x100 */ ++ READ_BITS(extra_len, 10); ++ extra_len += 0x100; ++ } ++ else if (PEEK_BITS(3) == 6) { ++ REMOVE_BITS(3); /* '110' -> 12 extra length bits + 0x500 */ ++ READ_BITS(extra_len, 12); ++ extra_len += 0x500; ++ } ++ else { ++ REMOVE_BITS(3); /* '111' -> 15 extra length bits */ ++ READ_BITS(extra_len, 15); ++ } ++ match_length += extra_len; ++ } ++ ++ if ((window_posn + match_length) > lzx->window_size) { ++ D(("match ran over window wrap")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ ++ /* copy match */ ++ rundest = &window[window_posn]; ++ i = match_length; ++ /* does match offset wrap the window? */ ++ if (match_offset > window_posn) { ++ if (match_offset > lzx->offset && ++ (match_offset - window_posn) > lzx->ref_data_size) ++ { ++ D(("match offset beyond LZX stream")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ /* j = length from match offset to end of window */ ++ j = match_offset - window_posn; ++ if (j > (int) lzx->window_size) { ++ D(("match offset beyond window boundaries")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ runsrc = &window[lzx->window_size - j]; ++ if (j < i) { ++ /* if match goes over the window edge, do two copy runs */ ++ i -= j; while (j-- > 0) *rundest++ = *runsrc++; ++ runsrc = window; ++ } ++ while (i-- > 0) *rundest++ = *runsrc++; ++ } ++ else { ++ runsrc = rundest - match_offset; ++ while (i-- > 0) *rundest++ = *runsrc++; ++ } ++ ++ this_run -= match_length; ++ window_posn += match_length; ++ } ++ } /* while (this_run > 0) */ ++ break; ++ ++ case LZX_BLOCKTYPE_UNCOMPRESSED: ++ /* as this_run is limited not to wrap a frame, this also means it ++ * won't wrap the window (as the window is a multiple of 32k) */ ++ rundest = &window[window_posn]; ++ window_posn += this_run; ++ while (this_run > 0) { ++ if ((i = i_end - i_ptr) == 0) { ++ READ_IF_NEEDED; ++ } ++ else { ++ if (i > this_run) i = this_run; ++ lzx->sys->copy(i_ptr, rundest, (size_t) i); ++ rundest += i; ++ i_ptr += i; ++ this_run -= i; ++ } ++ } ++ break; ++ ++ default: ++ return lzx->error = MSPACK_ERR_DECRUNCH; /* might as well */ ++ } ++ ++ /* did the final match overrun our desired this_run length? */ ++ if (this_run < 0) { ++ if ((unsigned int)(-this_run) > lzx->block_remaining) { ++ D(("overrun went past end of block by %d (%d remaining)", ++ -this_run, lzx->block_remaining )) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ lzx->block_remaining -= -this_run; ++ } ++ } /* while (bytes_todo > 0) */ ++ ++ /* streams don't extend over frame boundaries */ ++ if ((window_posn - lzx->frame_posn) != frame_size) { ++ D(("decode beyond output frame limits! %d != %d", ++ window_posn - lzx->frame_posn, frame_size)) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ ++ /* re-align input bitstream */ ++ if (bits_left > 0) ENSURE_BITS(16); ++ if (bits_left & 15) REMOVE_BITS(bits_left & 15); ++ ++ /* check that we've used all of the previous frame first */ ++ if (lzx->o_ptr != lzx->o_end) { ++ D(("%ld avail bytes, new %d frame", lzx->o_end-lzx->o_ptr, frame_size)) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ ++ /* does this intel block _really_ need decoding? */ ++ if (lzx->intel_started && lzx->intel_filesize && ++ (lzx->frame <= 32768) && (frame_size > 10)) ++ { ++ unsigned char *data = &lzx->e8_buf[0]; ++ unsigned char *dataend = &lzx->e8_buf[frame_size - 10]; ++ signed int curpos = lzx->intel_curpos; ++ signed int filesize = lzx->intel_filesize; ++ signed int abs_off, rel_off; ++ ++ /* copy e8 block to the e8 buffer and tweak if needed */ ++ lzx->o_ptr = data; ++ lzx->sys->copy(&lzx->window[lzx->frame_posn], data, frame_size); ++ ++ while (data < dataend) { ++ if (*data++ != 0xE8) { curpos++; continue; } ++ abs_off = data[0] | (data[1]<<8) | (data[2]<<16) | (data[3]<<24); ++ if ((abs_off >= -curpos) && (abs_off < filesize)) { ++ rel_off = (abs_off >= 0) ? abs_off - curpos : abs_off + filesize; ++ data[0] = (unsigned char) rel_off; ++ data[1] = (unsigned char) (rel_off >> 8); ++ data[2] = (unsigned char) (rel_off >> 16); ++ data[3] = (unsigned char) (rel_off >> 24); ++ } ++ data += 4; ++ curpos += 5; ++ } ++ lzx->intel_curpos += frame_size; ++ } ++ else { ++ lzx->o_ptr = &lzx->window[lzx->frame_posn]; ++ if (lzx->intel_filesize) lzx->intel_curpos += frame_size; ++ } ++ lzx->o_end = &lzx->o_ptr[frame_size]; ++ ++ /* write a frame */ ++ i = (out_bytes < (off_t)frame_size) ? (unsigned int)out_bytes : frame_size; ++ if (lzx->sys->write(lzx->output, lzx->o_ptr, i) != i) { ++ return lzx->error = MSPACK_ERR_WRITE; ++ } ++ lzx->o_ptr += i; ++ lzx->offset += i; ++ out_bytes -= i; ++ ++ /* advance frame start position */ ++ lzx->frame_posn += frame_size; ++ lzx->frame++; ++ ++ /* wrap window / frame position pointers */ ++ if (window_posn == lzx->window_size) window_posn = 0; ++ if (lzx->frame_posn == lzx->window_size) lzx->frame_posn = 0; ++ ++ } /* while (lzx->frame < end_frame) */ ++ ++ if (out_bytes) { ++ D(("bytes left to output")) ++ return lzx->error = MSPACK_ERR_DECRUNCH; ++ } ++ ++ /* store local state */ ++ STORE_BITS; ++ lzx->window_posn = window_posn; ++ lzx->R0 = R0; ++ lzx->R1 = R1; ++ lzx->R2 = R2; ++ ++ return MSPACK_ERR_OK; ++} ++ ++void lzxd_free(struct lzxd_stream *lzx) { ++ struct mspack_system *sys; ++ if (lzx) { ++ sys = lzx->sys; ++ sys->free(lzx->inbuf); ++ sys->free(lzx->window); ++ sys->free(lzx); ++ } ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/mspack.h b/libclamav/libmspack-0.4alpha/mspack/mspack.h +new file mode 100755 +index 000000000000..9d05e23fec35 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/mspack.h +@@ -0,0 +1,2353 @@ ++/* libmspack -- a library for working with Microsoft compression formats. ++ * (C) 2003-2013 Stuart Caie ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * 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 Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ */ ++ ++/** \mainpage ++ * ++ * \section intro Introduction ++ * ++ * libmspack is a library which provides compressors and decompressors, ++ * archivers and dearchivers for Microsoft compression formats. ++ * ++ * \section formats Formats supported ++ * ++ * The following file formats are supported: ++ * - SZDD files, which use LZSS compression ++ * - KWAJ files, which use LZSS, LZSS+Huffman or deflate compression ++ * - .HLP (MS Help) files, which use LZSS compression ++ * - .CAB (MS Cabinet) files, which use deflate, LZX or Quantum compression ++ * - .CHM (HTML Help) files, which use LZX compression ++ * - .LIT (MS EBook) files, which use LZX compression and DES encryption ++ * - .LZX (Exchange Offline Addressbook) files, which use LZX compression ++ * ++ * To determine the capabilities of the library, and the binary ++ * compatibility version of any particular compressor or decompressor, use ++ * the mspack_version() function. The UNIX library interface version is ++ * defined as the highest-versioned library component. ++ * ++ * \section starting Getting started ++ * ++ * The macro MSPACK_SYS_SELFTEST() should be used to ensure the library can ++ * be used. In particular, it checks if the caller is using 32-bit file I/O ++ * when the library is compiled for 64-bit file I/O and vice versa. ++ * ++ * If compiled normally, the library includes basic file I/O and memory ++ * management functionality using the standard C library. This can be ++ * customised and replaced entirely by creating a mspack_system structure. ++ * ++ * A compressor or decompressor for the required format must be ++ * instantiated before it can be used. Each construction function takes ++ * one parameter, which is either a pointer to a custom mspack_system ++ * structure, or NULL to use the default. The instantiation returned, if ++ * not NULL, contains function pointers (methods) to work with the given ++ * file format. ++ * ++ * For compression: ++ * - mspack_create_cab_compressor() creates a mscab_compressor ++ * - mspack_create_chm_compressor() creates a mschm_compressor ++ * - mspack_create_lit_compressor() creates a mslit_compressor ++ * - mspack_create_hlp_compressor() creates a mshlp_compressor ++ * - mspack_create_szdd_compressor() creates a msszdd_compressor ++ * - mspack_create_kwaj_compressor() creates a mskwaj_compressor ++ * - mspack_create_oab_compressor() creates a msoab_compressor ++ * ++ * For decompression: ++ * - mspack_create_cab_decompressor() creates a mscab_decompressor ++ * - mspack_create_chm_decompressor() creates a mschm_decompressor ++ * - mspack_create_lit_decompressor() creates a mslit_decompressor ++ * - mspack_create_hlp_decompressor() creates a mshlp_decompressor ++ * - mspack_create_szdd_decompressor() creates a msszdd_decompressor ++ * - mspack_create_kwaj_decompressor() creates a mskwaj_decompressor ++ * - mspack_create_oab_decompressor() creates a msoab_decompressor ++ * ++ * Once finished working with a format, each kind of ++ * compressor/decompressor has its own specific destructor: ++ * - mspack_destroy_cab_compressor() ++ * - mspack_destroy_cab_decompressor() ++ * - mspack_destroy_chm_compressor() ++ * - mspack_destroy_chm_decompressor() ++ * - mspack_destroy_lit_compressor() ++ * - mspack_destroy_lit_decompressor() ++ * - mspack_destroy_hlp_compressor() ++ * - mspack_destroy_hlp_decompressor() ++ * - mspack_destroy_szdd_compressor() ++ * - mspack_destroy_szdd_decompressor() ++ * - mspack_destroy_kwaj_compressor() ++ * - mspack_destroy_kwaj_decompressor() ++ * - mspack_destroy_oab_compressor() ++ * - mspack_destroy_oab_decompressor() ++ * ++ * Destroying a compressor or decompressor does not destroy any objects, ++ * structures or handles that have been created using that compressor or ++ * decompressor. Ensure that everything created or opened is destroyed or ++ * closed before compressor/decompressor is itself destroyed. ++ * ++ * \section errors Error codes ++ * ++ * All compressors and decompressors use the same set of error codes. Most ++ * methods return an error code directly. For methods which do not ++ * return error codes directly, the error code can be obtained with the ++ * last_error() method. ++ * ++ * - #MSPACK_ERR_OK is used to indicate success. This error code is defined ++ * as zero, all other code are non-zero. ++ * - #MSPACK_ERR_ARGS indicates that a method was called with inappropriate ++ * arguments. ++ * - #MSPACK_ERR_OPEN indicates that mspack_system::open() failed. ++ * - #MSPACK_ERR_READ indicates that mspack_system::read() failed. ++ * - #MSPACK_ERR_WRITE indicates that mspack_system::write() failed. ++ * - #MSPACK_ERR_SEEK indicates that mspack_system::seek() failed. ++ * - #MSPACK_ERR_NOMEMORY indicates that mspack_system::alloc() failed. ++ * - #MSPACK_ERR_SIGNATURE indicates that the file being read does not ++ * have the correct "signature". It is probably not a valid file for ++ * whatever format is being read. ++ * - #MSPACK_ERR_DATAFORMAT indicates that the file being used or read ++ * is corrupt. ++ * - #MSPACK_ERR_CHECKSUM indicates that a data checksum has failed. ++ * - #MSPACK_ERR_CRUNCH indicates an error occured during compression. ++ * - #MSPACK_ERR_DECRUNCH indicates an error occured during decompression. ++ * ++ * \section threading Multi-threading ++ * ++ * libmspack methods are reentrant and multithreading-safe when each ++ * thread has its own compressor or decompressor. ++ ++ * You should not call multiple methods simultaneously on a single ++ * compressor or decompressor instance. ++ * ++ * If this may happen, you can either use one compressor or ++ * decompressor per thread, or you can use your preferred lock, ++ * semaphore or mutex library to ensure no more than one method on a ++ * compressor/decompressor is called simultaneously. libmspack will ++ * not do this locking for you. ++ * ++ * Example of incorrect behaviour: ++ * - thread 1 calls mspack_create_cab_decompressor() ++ * - thread 1 calls open() ++ * - thread 1 calls extract() for one file ++ * - thread 2 simultaneously calls extract() for another file ++ * ++ * Correct behaviour: ++ * - thread 1 calls mspack_create_cab_decompressor() ++ * - thread 2 calls mspack_create_cab_decompressor() ++ * - thread 1 calls its own open() / extract() ++ * - thread 2 simultaneously calls its own open() / extract() ++ * ++ * Also correct behaviour: ++ * - thread 1 calls mspack_create_cab_decompressor() ++ * - thread 1 locks a mutex for with the decompressor before ++ * calling any methods on it, and unlocks the mutex after each ++ * method returns. ++ * - thread 1 can share the results of open() with thread 2, and both ++ * can call extract(), provided they both guard against simultaneous ++ * use of extract(), and any other methods, with the mutex ++ */ ++ ++#ifndef LIB_MSPACK_H ++#define LIB_MSPACK_H 1 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#include ++#include ++ ++/** ++ * System self-test function, to ensure both library and calling program ++ * can use one another. ++ * ++ * A result of MSPACK_ERR_OK means the library and caller are ++ * compatible. Any other result indicates that the library and caller are ++ * not compatible and should not be used. In particular, a value of ++ * MSPACK_ERR_SEEK means the library and caller use different off_t ++ * datatypes. ++ * ++ * It should be used like so: ++ * ++ * @code ++ * int selftest_result; ++ * MSPACK_SYS_SELFTEST(selftest_result); ++ * if (selftest_result != MSPACK_ERR_OK) { ++ * fprintf(stderr, "incompatible with this build of libmspack\n"); ++ * exit(0); ++ * } ++ * @endcode ++ * ++ * @param result an int variable to store the result of the self-test ++ */ ++#define MSPACK_SYS_SELFTEST(result) do { \ ++ (result) = mspack_sys_selftest_internal(sizeof(off_t)); \ ++} while (0) ++ ++/** Part of the MSPACK_SYS_SELFTEST() macro, must not be used directly. */ ++extern int mspack_sys_selftest_internal(int); ++ ++/** ++ * Enquire about the binary compatibility version of a specific interface in ++ * the library. Currently, the following interfaces are defined: ++ * ++ * - #MSPACK_VER_LIBRARY: the overall library ++ * - #MSPACK_VER_SYSTEM: the mspack_system interface ++ * - #MSPACK_VER_MSCABD: the mscab_decompressor interface ++ * - #MSPACK_VER_MSCABC: the mscab_compressor interface ++ * - #MSPACK_VER_MSCHMD: the mschm_decompressor interface ++ * - #MSPACK_VER_MSCHMC: the mschm_compressor interface ++ * - #MSPACK_VER_MSLITD: the mslit_decompressor interface ++ * - #MSPACK_VER_MSLITC: the mslit_compressor interface ++ * - #MSPACK_VER_MSHLPD: the mshlp_decompressor interface ++ * - #MSPACK_VER_MSHLPC: the mshlp_compressor interface ++ * - #MSPACK_VER_MSSZDDD: the msszdd_decompressor interface ++ * - #MSPACK_VER_MSSZDDC: the msszdd_compressor interface ++ * - #MSPACK_VER_MSKWAJD: the mskwaj_decompressor interface ++ * - #MSPACK_VER_MSKWAJC: the mskwaj_compressor interface ++ * - #MSPACK_VER_MSOABD: the msoab_decompressor interface ++ * - #MSPACK_VER_MSOABC: the msoab_compressor interface ++ * ++ * The result of the function should be interpreted as follows: ++ * - -1: this interface is completely unknown to the library ++ * - 0: this interface is known, but non-functioning ++ * - 1: this interface has all basic functionality ++ * - 2, 3, ...: this interface has additional functionality, clearly marked ++ * in the documentation as "version 2", "version 3" and so on. ++ * ++ * @param entity the interface to request current version of ++ * @return the version of the requested interface ++ */ ++extern int mspack_version(int entity); ++ ++/** Pass to mspack_version() to get the overall library version */ ++#define MSPACK_VER_LIBRARY (0) ++/** Pass to mspack_version() to get the mspack_system version */ ++#define MSPACK_VER_SYSTEM (1) ++/** Pass to mspack_version() to get the mscab_decompressor version */ ++#define MSPACK_VER_MSCABD (2) ++/** Pass to mspack_version() to get the mscab_compressor version */ ++#define MSPACK_VER_MSCABC (3) ++/** Pass to mspack_version() to get the mschm_decompressor version */ ++#define MSPACK_VER_MSCHMD (4) ++/** Pass to mspack_version() to get the mschm_compressor version */ ++#define MSPACK_VER_MSCHMC (5) ++/** Pass to mspack_version() to get the mslit_decompressor version */ ++#define MSPACK_VER_MSLITD (6) ++/** Pass to mspack_version() to get the mslit_compressor version */ ++#define MSPACK_VER_MSLITC (7) ++/** Pass to mspack_version() to get the mshlp_decompressor version */ ++#define MSPACK_VER_MSHLPD (8) ++/** Pass to mspack_version() to get the mshlp_compressor version */ ++#define MSPACK_VER_MSHLPC (9) ++/** Pass to mspack_version() to get the msszdd_decompressor version */ ++#define MSPACK_VER_MSSZDDD (10) ++/** Pass to mspack_version() to get the msszdd_compressor version */ ++#define MSPACK_VER_MSSZDDC (11) ++/** Pass to mspack_version() to get the mskwaj_decompressor version */ ++#define MSPACK_VER_MSKWAJD (12) ++/** Pass to mspack_version() to get the mskwaj_compressor version */ ++#define MSPACK_VER_MSKWAJC (13) ++/** Pass to mspack_version() to get the msoab_decompressor version */ ++#define MSPACK_VER_MSOABD (14) ++/** Pass to mspack_version() to get the msoab_compressor version */ ++#define MSPACK_VER_MSOABC (15) ++ ++/* --- file I/O abstraction ------------------------------------------------ */ ++ ++/** ++ * A structure which abstracts file I/O and memory management. ++ * ++ * The library always uses the mspack_system structure for interaction ++ * with the file system and to allocate, free and copy all memory. It also ++ * uses it to send literal messages to the library user. ++ * ++ * When the library is compiled normally, passing NULL to a compressor or ++ * decompressor constructor will result in a default mspack_system being ++ * used, where all methods are implemented with the standard C library. ++ * However, all constructors support being given a custom created ++ * mspack_system structure, with the library user's own methods. This ++ * allows for more abstract interaction, such as reading and writing files ++ * directly to memory, or from a network socket or pipe. ++ * ++ * Implementors of an mspack_system structure should read all ++ * documentation entries for every structure member, and write methods ++ * which conform to those standards. ++ */ ++struct mspack_system { ++ /** ++ * Opens a file for reading, writing, appending or updating. ++ * ++ * @param self a self-referential pointer to the mspack_system ++ * structure whose open() method is being called. If ++ * this pointer is required by close(), read(), write(), ++ * seek() or tell(), it should be stored in the result ++ * structure at this time. ++ * @param filename the file to be opened. It is passed directly from the ++ * library caller without being modified, so it is up to ++ * the caller what this parameter actually represents. ++ * @param mode one of #MSPACK_SYS_OPEN_READ (open an existing file ++ * for reading), #MSPACK_SYS_OPEN_WRITE (open a new file ++ * for writing), #MSPACK_SYS_OPEN_UPDATE (open an existing ++ * file for reading/writing from the start of the file) or ++ * #MSPACK_SYS_OPEN_APPEND (open an existing file for ++ * reading/writing from the end of the file) ++ * @return a pointer to a mspack_file structure. This structure officially ++ * contains no members, its true contents are up to the ++ * mspack_system implementor. It should contain whatever is needed ++ * for other mspack_system methods to operate. Returning the NULL ++ * pointer indicates an error condition. ++ * @see close(), read(), write(), seek(), tell(), message() ++ */ ++ struct mspack_file * (*open)(struct mspack_system *self, ++ const char *filename, ++ int mode); ++ ++ /** ++ * Closes a previously opened file. If any memory was allocated for this ++ * particular file handle, it should be freed at this time. ++ * ++ * @param file the file to close ++ * @see open() ++ */ ++ void (*close)(struct mspack_file *file); ++ ++ /** ++ * Reads a given number of bytes from an open file. ++ * ++ * @param file the file to read from ++ * @param buffer the location where the read bytes should be stored ++ * @param bytes the number of bytes to read from the file. ++ * @return the number of bytes successfully read (this can be less than ++ * the number requested), zero to mark the end of file, or less ++ * than zero to indicate an error. ++ * @see open(), write() ++ */ ++ int (*read)(struct mspack_file *file, ++ void *buffer, ++ int bytes); ++ ++ /** ++ * Writes a given number of bytes to an open file. ++ * ++ * @param file the file to write to ++ * @param buffer the location where the written bytes should be read from ++ * @param bytes the number of bytes to write to the file. ++ * @return the number of bytes successfully written, this can be less ++ * than the number requested. Zero or less can indicate an error ++ * where no bytes at all could be written. All cases where less ++ * bytes were written than requested are considered by the library ++ * to be an error. ++ * @see open(), read() ++ */ ++ int (*write)(struct mspack_file *file, ++ void *buffer, ++ int bytes); ++ ++ /** ++ * Seeks to a specific file offset within an open file. ++ * ++ * Sometimes the library needs to know the length of a file. It does ++ * this by seeking to the end of the file with seek(file, 0, ++ * MSPACK_SYS_SEEK_END), then calling tell(). Implementations may want ++ * to make a special case for this. ++ * ++ * Due to the potentially varying 32/64 bit datatype off_t on some ++ * architectures, the #MSPACK_SYS_SELFTEST macro MUST be used before ++ * using the library. If not, the error caused by the library passing an ++ * inappropriate stackframe to seek() is subtle and hard to trace. ++ * ++ * @param file the file to be seeked ++ * @param offset an offset to seek, measured in bytes ++ * @param mode one of #MSPACK_SYS_SEEK_START (the offset should be ++ * measured from the start of the file), #MSPACK_SYS_SEEK_CUR ++ * (the offset should be measured from the current file offset) ++ * or #MSPACK_SYS_SEEK_END (the offset should be measured from ++ * the end of the file) ++ * @return zero for success, non-zero for an error ++ * @see open(), tell() ++ */ ++ int (*seek)(struct mspack_file *file, ++ off_t offset, ++ int mode); ++ ++ /** ++ * Returns the current file position (in bytes) of the given file. ++ * ++ * @param file the file whose file position is wanted ++ * @return the current file position of the file ++ * @see open(), seek() ++ */ ++ off_t (*tell)(struct mspack_file *file); ++ ++ /** ++ * Used to send messages from the library to the user. ++ * ++ * Occasionally, the library generates warnings or other messages in ++ * plain english to inform the human user. These are informational only ++ * and can be ignored if not wanted. ++ * ++ * @param file may be a file handle returned from open() if this message ++ * pertains to a specific open file, or NULL if not related to ++ * a specific file. ++ * @param format a printf() style format string. It does NOT include a ++ * trailing newline. ++ * @see open() ++ */ ++ void (*message)(struct mspack_file *file, ++ const char *format, ++ ...); ++ ++ /** ++ * Allocates memory. ++ * ++ * @param self a self-referential pointer to the mspack_system ++ * structure whose alloc() method is being called. ++ * @param bytes the number of bytes to allocate ++ * @result a pointer to the requested number of bytes, or NULL if ++ * not enough memory is available ++ * @see free() ++ */ ++ void * (*alloc)(struct mspack_system *self, ++ size_t bytes); ++ ++ /** ++ * Frees memory. ++ * ++ * @param ptr the memory to be freed. ++ * @see alloc() ++ */ ++ void (*free)(void *ptr); ++ ++ /** ++ * Copies from one region of memory to another. ++ * ++ * The regions of memory are guaranteed not to overlap, are usually less ++ * than 256 bytes, and may not be aligned. Please note that the source ++ * parameter comes before the destination parameter, unlike the standard ++ * C function memcpy(). ++ * ++ * @param src the region of memory to copy from ++ * @param dest the region of memory to copy to ++ * @param bytes the size of the memory region, in bytes ++ */ ++ void (*copy)(void *src, ++ void *dest, ++ size_t bytes); ++ ++ /** ++ * A null pointer to mark the end of mspack_system. It must equal NULL. ++ * ++ * Should the mspack_system structure extend in the future, this NULL ++ * will be seen, rather than have an invalid method pointer called. ++ */ ++ void *null_ptr; ++}; ++ ++/** mspack_system::open() mode: open existing file for reading. */ ++#define MSPACK_SYS_OPEN_READ (0) ++/** mspack_system::open() mode: open new file for writing */ ++#define MSPACK_SYS_OPEN_WRITE (1) ++/** mspack_system::open() mode: open existing file for writing */ ++#define MSPACK_SYS_OPEN_UPDATE (2) ++/** mspack_system::open() mode: open existing file for writing */ ++#define MSPACK_SYS_OPEN_APPEND (3) ++ ++/** mspack_system::seek() mode: seek relative to start of file */ ++#define MSPACK_SYS_SEEK_START (0) ++/** mspack_system::seek() mode: seek relative to current offset */ ++#define MSPACK_SYS_SEEK_CUR (1) ++/** mspack_system::seek() mode: seek relative to end of file */ ++#define MSPACK_SYS_SEEK_END (2) ++ ++/** ++ * A structure which represents an open file handle. The contents of this ++ * structure are determined by the implementation of the ++ * mspack_system::open() method. ++ */ ++struct mspack_file { ++ int dummy; ++}; ++ ++/* --- error codes --------------------------------------------------------- */ ++ ++/** Error code: no error */ ++#define MSPACK_ERR_OK (0) ++/** Error code: bad arguments to method */ ++#define MSPACK_ERR_ARGS (1) ++/** Error code: error opening file */ ++#define MSPACK_ERR_OPEN (2) ++/** Error code: error reading file */ ++#define MSPACK_ERR_READ (3) ++/** Error code: error writing file */ ++#define MSPACK_ERR_WRITE (4) ++/** Error code: seek error */ ++#define MSPACK_ERR_SEEK (5) ++/** Error code: out of memory */ ++#define MSPACK_ERR_NOMEMORY (6) ++/** Error code: bad "magic id" in file */ ++#define MSPACK_ERR_SIGNATURE (7) ++/** Error code: bad or corrupt file format */ ++#define MSPACK_ERR_DATAFORMAT (8) ++/** Error code: bad checksum or CRC */ ++#define MSPACK_ERR_CHECKSUM (9) ++/** Error code: error during compression */ ++#define MSPACK_ERR_CRUNCH (10) ++/** Error code: error during decompression */ ++#define MSPACK_ERR_DECRUNCH (11) ++ ++/* --- functions available in library -------------------------------------- */ ++ ++/** Creates a new CAB compressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mscab_compressor or NULL ++ */ ++extern struct mscab_compressor * ++ mspack_create_cab_compressor(struct mspack_system *sys); ++ ++/** Creates a new CAB decompressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mscab_decompressor or NULL ++ */ ++extern struct mscab_decompressor * ++ mspack_create_cab_decompressor(struct mspack_system *sys); ++ ++/** Destroys an existing CAB compressor. ++ * @param self the #mscab_compressor to destroy ++ */ ++extern void mspack_destroy_cab_compressor(struct mscab_compressor *self); ++ ++/** Destroys an existing CAB decompressor. ++ * @param self the #mscab_decompressor to destroy ++ */ ++extern void mspack_destroy_cab_decompressor(struct mscab_decompressor *self); ++ ++ ++/** Creates a new CHM compressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mschm_compressor or NULL ++ */ ++extern struct mschm_compressor * ++ mspack_create_chm_compressor(struct mspack_system *sys); ++ ++/** Creates a new CHM decompressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mschm_decompressor or NULL ++ */ ++extern struct mschm_decompressor * ++ mspack_create_chm_decompressor(struct mspack_system *sys); ++ ++/** Destroys an existing CHM compressor. ++ * @param self the #mschm_compressor to destroy ++ */ ++extern void mspack_destroy_chm_compressor(struct mschm_compressor *self); ++ ++/** Destroys an existing CHM decompressor. ++ * @param self the #mschm_decompressor to destroy ++ */ ++extern void mspack_destroy_chm_decompressor(struct mschm_decompressor *self); ++ ++ ++/** Creates a new LIT compressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mslit_compressor or NULL ++ */ ++extern struct mslit_compressor * ++ mspack_create_lit_compressor(struct mspack_system *sys); ++ ++/** Creates a new LIT decompressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mslit_decompressor or NULL ++ */ ++extern struct mslit_decompressor * ++ mspack_create_lit_decompressor(struct mspack_system *sys); ++ ++/** Destroys an existing LIT compressor. ++ * @param self the #mslit_compressor to destroy ++ */ ++extern void mspack_destroy_lit_compressor(struct mslit_compressor *self); ++ ++/** Destroys an existing LIT decompressor. ++ * @param self the #mslit_decompressor to destroy ++ */ ++extern void mspack_destroy_lit_decompressor(struct mslit_decompressor *self); ++ ++ ++/** Creates a new HLP compressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mshlp_compressor or NULL ++ */ ++extern struct mshlp_compressor * ++ mspack_create_hlp_compressor(struct mspack_system *sys); ++ ++/** Creates a new HLP decompressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mshlp_decompressor or NULL ++ */ ++extern struct mshlp_decompressor * ++ mspack_create_hlp_decompressor(struct mspack_system *sys); ++ ++/** Destroys an existing hlp compressor. ++ * @param self the #mshlp_compressor to destroy ++ */ ++extern void mspack_destroy_hlp_compressor(struct mshlp_compressor *self); ++ ++/** Destroys an existing hlp decompressor. ++ * @param self the #mshlp_decompressor to destroy ++ */ ++extern void mspack_destroy_hlp_decompressor(struct mshlp_decompressor *self); ++ ++ ++/** Creates a new SZDD compressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #msszdd_compressor or NULL ++ */ ++extern struct msszdd_compressor * ++ mspack_create_szdd_compressor(struct mspack_system *sys); ++ ++/** Creates a new SZDD decompressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #msszdd_decompressor or NULL ++ */ ++extern struct msszdd_decompressor * ++ mspack_create_szdd_decompressor(struct mspack_system *sys); ++ ++/** Destroys an existing SZDD compressor. ++ * @param self the #msszdd_compressor to destroy ++ */ ++extern void mspack_destroy_szdd_compressor(struct msszdd_compressor *self); ++ ++/** Destroys an existing SZDD decompressor. ++ * @param self the #msszdd_decompressor to destroy ++ */ ++extern void mspack_destroy_szdd_decompressor(struct msszdd_decompressor *self); ++ ++ ++/** Creates a new KWAJ compressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mskwaj_compressor or NULL ++ */ ++extern struct mskwaj_compressor * ++ mspack_create_kwaj_compressor(struct mspack_system *sys); ++ ++/** Creates a new KWAJ decompressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #mskwaj_decompressor or NULL ++ */ ++extern struct mskwaj_decompressor * ++ mspack_create_kwaj_decompressor(struct mspack_system *sys); ++ ++/** Destroys an existing KWAJ compressor. ++ * @param self the #mskwaj_compressor to destroy ++ */ ++extern void mspack_destroy_kwaj_compressor(struct mskwaj_compressor *self); ++ ++/** Destroys an existing KWAJ decompressor. ++ * @param self the #mskwaj_decompressor to destroy ++ */ ++extern void mspack_destroy_kwaj_decompressor(struct mskwaj_decompressor *self); ++ ++ ++/** Creates a new OAB compressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #msoab_compressor or NULL ++ */ ++extern struct msoab_compressor * ++ mspack_create_oab_compressor(struct mspack_system *sys); ++ ++/** Creates a new OAB decompressor. ++ * @param sys a custom mspack_system structure, or NULL to use the default ++ * @return a #msoab_decompressor or NULL ++ */ ++extern struct msoab_decompressor * ++ mspack_create_oab_decompressor(struct mspack_system *sys); ++ ++/** Destroys an existing OAB compressor. ++ * @param self the #msoab_compressor to destroy ++ */ ++extern void mspack_destroy_oab_compressor(struct msoab_compressor *self); ++ ++/** Destroys an existing OAB decompressor. ++ * @param self the #msoab_decompressor to destroy ++ */ ++extern void mspack_destroy_oab_decompressor(struct msoab_decompressor *self); ++ ++ ++/* --- support for .CAB (MS Cabinet) file format --------------------------- */ ++ ++/** ++ * A structure which represents a single cabinet file. ++ * ++ * All fields are READ ONLY. ++ * ++ * If this cabinet is part of a merged cabinet set, the #files and #folders ++ * fields are common to all cabinets in the set, and will be identical. ++ * ++ * @see mscab_decompressor::open(), mscab_decompressor::close(), ++ * mscab_decompressor::search() ++ */ ++struct mscabd_cabinet { ++ /** ++ * The next cabinet in a chained list, if this cabinet was opened with ++ * mscab_decompressor::search(). May be NULL to mark the end of the ++ * list. ++ */ ++ struct mscabd_cabinet *next; ++ ++ /** ++ * The filename of the cabinet. More correctly, the filename of the ++ * physical file that the cabinet resides in. This is given by the ++ * library user and may be in any format. ++ */ ++ const char *filename; ++ ++ /** The file offset of cabinet within the physical file it resides in. */ ++ off_t base_offset; ++ ++ /** The length of the cabinet file in bytes. */ ++ unsigned int length; ++ ++ /** The previous cabinet in a cabinet set, or NULL. */ ++ struct mscabd_cabinet *prevcab; ++ ++ /** The next cabinet in a cabinet set, or NULL. */ ++ struct mscabd_cabinet *nextcab; ++ ++ /** The filename of the previous cabinet in a cabinet set, or NULL. */ ++ char *prevname; ++ ++ /** The filename of the next cabinet in a cabinet set, or NULL. */ ++ char *nextname; ++ ++ /** The name of the disk containing the previous cabinet in a cabinet ++ * set, or NULL. ++ */ ++ char *previnfo; ++ ++ /** The name of the disk containing the next cabinet in a cabinet set, ++ * or NULL. ++ */ ++ char *nextinfo; ++ ++ /** A list of all files in the cabinet or cabinet set. */ ++ struct mscabd_file *files; ++ ++ /** A list of all folders in the cabinet or cabinet set. */ ++ struct mscabd_folder *folders; ++ ++ /** ++ * The set ID of the cabinet. All cabinets in the same set should have ++ * the same set ID. ++ */ ++ unsigned short set_id; ++ ++ /** ++ * The index number of the cabinet within the set. Numbering should ++ * start from 0 for the first cabinet in the set, and increment by 1 for ++ * each following cabinet. ++ */ ++ unsigned short set_index; ++ ++ /** ++ * The number of bytes reserved in the header area of the cabinet. ++ * ++ * If this is non-zero and flags has MSCAB_HDR_RESV set, this data can ++ * be read by the calling application. It is of the given length, ++ * located at offset (base_offset + MSCAB_HDR_RESV_OFFSET) in the ++ * cabinet file. ++ * ++ * @see flags ++ */ ++ unsigned short header_resv; ++ ++ /** ++ * Header flags. ++ * ++ * - MSCAB_HDR_PREVCAB indicates the cabinet is part of a cabinet set, and ++ * has a predecessor cabinet. ++ * - MSCAB_HDR_NEXTCAB indicates the cabinet is part of a cabinet set, and ++ * has a successor cabinet. ++ * - MSCAB_HDR_RESV indicates the cabinet has reserved header space. ++ * ++ * @see prevname, previnfo, nextname, nextinfo, header_resv ++ */ ++ int flags; ++}; ++ ++/** Offset from start of cabinet to the reserved header data (if present). */ ++#define MSCAB_HDR_RESV_OFFSET (0x28) ++ ++/** Cabinet header flag: cabinet has a predecessor */ ++#define MSCAB_HDR_PREVCAB (0x01) ++/** Cabinet header flag: cabinet has a successor */ ++#define MSCAB_HDR_NEXTCAB (0x02) ++/** Cabinet header flag: cabinet has reserved header space */ ++#define MSCAB_HDR_RESV (0x04) ++ ++/** ++ * A structure which represents a single folder in a cabinet or cabinet set. ++ * ++ * All fields are READ ONLY. ++ * ++ * A folder is a single compressed stream of data. When uncompressed, it ++ * holds the data of one or more files. A folder may be split across more ++ * than one cabinet. ++ */ ++struct mscabd_folder { ++ /** ++ * A pointer to the next folder in this cabinet or cabinet set, or NULL ++ * if this is the final folder. ++ */ ++ struct mscabd_folder *next; ++ ++ /** ++ * The compression format used by this folder. ++ * ++ * The macro MSCABD_COMP_METHOD() should be used on this field to get ++ * the algorithm used. The macro MSCABD_COMP_LEVEL() should be used to get ++ * the "compression level". ++ * ++ * @see MSCABD_COMP_METHOD(), MSCABD_COMP_LEVEL() ++ */ ++ int comp_type; ++ ++ /** ++ * The total number of data blocks used by this folder. This includes ++ * data blocks present in other files, if this folder spans more than ++ * one cabinet. ++ */ ++ unsigned int num_blocks; ++}; ++ ++/** ++ * Returns the compression method used by a folder. ++ * ++ * @param comp_type a mscabd_folder::comp_type value ++ * @return one of #MSCAB_COMP_NONE, #MSCAB_COMP_MSZIP, #MSCAB_COMP_QUANTUM ++ * or #MSCAB_COMP_LZX ++ */ ++#define MSCABD_COMP_METHOD(comp_type) ((comp_type) & 0x0F) ++/** ++ * Returns the compression level used by a folder. ++ * ++ * @param comp_type a mscabd_folder::comp_type value ++ * @return the compression level. This is only defined by LZX and Quantum ++ * compression ++ */ ++#define MSCABD_COMP_LEVEL(comp_type) (((comp_type) >> 8) & 0x1F) ++ ++/** Compression mode: no compression. */ ++#define MSCAB_COMP_NONE (0) ++/** Compression mode: MSZIP (deflate) compression. */ ++#define MSCAB_COMP_MSZIP (1) ++/** Compression mode: Quantum compression */ ++#define MSCAB_COMP_QUANTUM (2) ++/** Compression mode: LZX compression */ ++#define MSCAB_COMP_LZX (3) ++ ++/** ++ * A structure which represents a single file in a cabinet or cabinet set. ++ * ++ * All fields are READ ONLY. ++ */ ++struct mscabd_file { ++ /** ++ * The next file in the cabinet or cabinet set, or NULL if this is the ++ * final file. ++ */ ++ struct mscabd_file *next; ++ ++ /** ++ * The filename of the file. ++ * ++ * A null terminated string of up to 255 bytes in length, it may be in ++ * either ISO-8859-1 or UTF8 format, depending on the file attributes. ++ * ++ * @see attribs ++ */ ++ char *filename; ++ ++ /** The uncompressed length of the file, in bytes. */ ++ unsigned int length; ++ ++ /** ++ * File attributes. ++ * ++ * The following attributes are defined: ++ * - #MSCAB_ATTRIB_RDONLY indicates the file is write protected. ++ * - #MSCAB_ATTRIB_HIDDEN indicates the file is hidden. ++ * - #MSCAB_ATTRIB_SYSTEM indicates the file is a operating system file. ++ * - #MSCAB_ATTRIB_ARCH indicates the file is "archived". ++ * - #MSCAB_ATTRIB_EXEC indicates the file is an executable program. ++ * - #MSCAB_ATTRIB_UTF_NAME indicates the filename is in UTF8 format rather ++ * than ISO-8859-1. ++ */ ++ int attribs; ++ ++ /** File's last modified time, hour field. */ ++ char time_h; ++ /** File's last modified time, minute field. */ ++ char time_m; ++ /** File's last modified time, second field. */ ++ char time_s; ++ ++ /** File's last modified date, day field. */ ++ char date_d; ++ /** File's last modified date, month field. */ ++ char date_m; ++ /** File's last modified date, year field. */ ++ int date_y; ++ ++ /** A pointer to the folder that contains this file. */ ++ struct mscabd_folder *folder; ++ ++ /** The uncompressed offset of this file in its folder. */ ++ unsigned int offset; ++}; ++ ++/** mscabd_file::attribs attribute: file is read-only. */ ++#define MSCAB_ATTRIB_RDONLY (0x01) ++/** mscabd_file::attribs attribute: file is hidden. */ ++#define MSCAB_ATTRIB_HIDDEN (0x02) ++/** mscabd_file::attribs attribute: file is an operating system file. */ ++#define MSCAB_ATTRIB_SYSTEM (0x04) ++/** mscabd_file::attribs attribute: file is "archived". */ ++#define MSCAB_ATTRIB_ARCH (0x20) ++/** mscabd_file::attribs attribute: file is an executable program. */ ++#define MSCAB_ATTRIB_EXEC (0x40) ++/** mscabd_file::attribs attribute: filename is UTF8, not ISO-8859-1. */ ++#define MSCAB_ATTRIB_UTF_NAME (0x80) ++ ++/** mscab_decompressor::set_param() parameter: search buffer size. */ ++#define MSCABD_PARAM_SEARCHBUF (0) ++/** mscab_decompressor::set_param() parameter: repair MS-ZIP streams? */ ++#define MSCABD_PARAM_FIXMSZIP (1) ++/** mscab_decompressor::set_param() parameter: size of decompression buffer */ ++#define MSCABD_PARAM_DECOMPBUF (2) ++ ++/** TODO */ ++struct mscab_compressor { ++ int dummy; ++}; ++ ++/** ++ * A decompressor for .CAB (Microsoft Cabinet) files ++ * ++ * All fields are READ ONLY. ++ * ++ * @see mspack_create_cab_decompressor(), mspack_destroy_cab_decompressor() ++ */ ++struct mscab_decompressor { ++ /** ++ * Opens a cabinet file and reads its contents. ++ * ++ * If the file opened is a valid cabinet file, all headers will be read ++ * and a mscabd_cabinet structure will be returned, with a full list of ++ * folders and files. ++ * ++ * In the case of an error occuring, NULL is returned and the error code ++ * is available from last_error(). ++ * ++ * The filename pointer should be considered "in use" until close() is ++ * called on the cabinet. ++ * ++ * @param self a self-referential pointer to the mscab_decompressor ++ * instance being called ++ * @param filename the filename of the cabinet file. This is passed ++ * directly to mspack_system::open(). ++ * @return a pointer to a mscabd_cabinet structure, or NULL on failure ++ * @see close(), search(), last_error() ++ */ ++ struct mscabd_cabinet * (*open) (struct mscab_decompressor *self, ++ const char *filename); ++ ++ /** ++ * Closes a previously opened cabinet or cabinet set. ++ * ++ * This closes a cabinet, all cabinets associated with it via the ++ * mscabd_cabinet::next, mscabd_cabinet::prevcab and ++ * mscabd_cabinet::nextcab pointers, and all folders and files. All ++ * memory used by these entities is freed. ++ * ++ * The cabinet pointer is now invalid and cannot be used again. All ++ * mscabd_folder and mscabd_file pointers from that cabinet or cabinet ++ * set are also now invalid, and cannot be used again. ++ * ++ * If the cabinet pointer given was created using search(), it MUST be ++ * the cabinet pointer returned by search() and not one of the later ++ * cabinet pointers further along the mscabd_cabinet::next chain. ++ ++ * If extra cabinets have been added using append() or prepend(), these ++ * will all be freed, even if the cabinet pointer given is not the first ++ * cabinet in the set. Do NOT close() more than one cabinet in the set. ++ * ++ * The mscabd_cabinet::filename is not freed by the library, as it is ++ * not allocated by the library. The caller should free this itself if ++ * necessary, before it is lost forever. ++ * ++ * @param self a self-referential pointer to the mscab_decompressor ++ * instance being called ++ * @param cab the cabinet to close ++ * @see open(), search(), append(), prepend() ++ */ ++ void (*close)(struct mscab_decompressor *self, ++ struct mscabd_cabinet *cab); ++ ++ /** ++ * Searches a regular file for embedded cabinets. ++ * ++ * This opens a normal file with the given filename and will search the ++ * entire file for embedded cabinet files ++ * ++ * If any cabinets are found, the equivalent of open() is called on each ++ * potential cabinet file at the offset it was found. All successfully ++ * open()ed cabinets are kept in a list. ++ * ++ * The first cabinet found will be returned directly as the result of ++ * this method. Any further cabinets found will be chained in a list ++ * using the mscabd_cabinet::next field. ++ * ++ * In the case of an error occuring anywhere other than the simulated ++ * open(), NULL is returned and the error code is available from ++ * last_error(). ++ * ++ * If no error occurs, but no cabinets can be found in the file, NULL is ++ * returned and last_error() returns MSPACK_ERR_OK. ++ * ++ * The filename pointer should be considered in use until close() is ++ * called on the cabinet. ++ * ++ * close() should only be called on the result of search(), not on any ++ * subsequent cabinets in the mscabd_cabinet::next chain. ++ * ++ * @param self a self-referential pointer to the mscab_decompressor ++ * instance being called ++ * @param filename the filename of the file to search for cabinets. This ++ * is passed directly to mspack_system::open(). ++ * @return a pointer to a mscabd_cabinet structure, or NULL ++ * @see close(), open(), last_error() ++ */ ++ struct mscabd_cabinet * (*search) (struct mscab_decompressor *self, ++ const char *filename); ++ ++ /** ++ * Appends one mscabd_cabinet to another, forming or extending a cabinet ++ * set. ++ * ++ * This will attempt to append one cabinet to another such that ++ * (cab->nextcab == nextcab) && (nextcab->prevcab == cab) and ++ * any folders split between the two cabinets are merged. ++ * ++ * The cabinets MUST be part of a cabinet set -- a cabinet set is a ++ * cabinet that spans more than one physical cabinet file on disk -- and ++ * must be appropriately matched. ++ * ++ * It can be determined if a cabinet has further parts to load by ++ * examining the mscabd_cabinet::flags field: ++ * ++ * - if (flags & MSCAB_HDR_PREVCAB) is non-zero, there is a ++ * predecessor cabinet to open() and prepend(). Its MS-DOS ++ * case-insensitive filename is mscabd_cabinet::prevname ++ * - if (flags & MSCAB_HDR_NEXTCAB) is non-zero, there is a ++ * successor cabinet to open() and append(). Its MS-DOS case-insensitive ++ * filename is mscabd_cabinet::nextname ++ * ++ * If the cabinets do not match, an error code will be returned. Neither ++ * cabinet has been altered, and both should be closed seperately. ++ * ++ * Files and folders in a cabinet set are a single entity. All cabinets ++ * in a set use the same file list, which is updated as cabinets in the ++ * set are added. All pointers to mscabd_folder and mscabd_file ++ * structures in either cabinet must be discarded and re-obtained after ++ * merging. ++ * ++ * @param self a self-referential pointer to the mscab_decompressor ++ * instance being called ++ * @param cab the cabinet which will be appended to, ++ * predecessor of nextcab ++ * @param nextcab the cabinet which will be appended, ++ * successor of cab ++ * @return an error code, or MSPACK_ERR_OK if successful ++ * @see prepend(), open(), close() ++ */ ++ int (*append) (struct mscab_decompressor *self, ++ struct mscabd_cabinet *cab, ++ struct mscabd_cabinet *nextcab); ++ ++ /** ++ * Prepends one mscabd_cabinet to another, forming or extending a ++ * cabinet set. ++ * ++ * This will attempt to prepend one cabinet to another, such that ++ * (cab->prevcab == prevcab) && (prevcab->nextcab == cab). In ++ * all other respects, it is identical to append(). See append() for the ++ * full documentation. ++ * ++ * @param self a self-referential pointer to the mscab_decompressor ++ * instance being called ++ * @param cab the cabinet which will be prepended to, ++ * successor of prevcab ++ * @param prevcab the cabinet which will be prepended, ++ * predecessor of cab ++ * @return an error code, or MSPACK_ERR_OK if successful ++ * @see append(), open(), close() ++ */ ++ int (*prepend) (struct mscab_decompressor *self, ++ struct mscabd_cabinet *cab, ++ struct mscabd_cabinet *prevcab); ++ ++ /** ++ * Extracts a file from a cabinet or cabinet set. ++ * ++ * This extracts a compressed file in a cabinet and writes it to the given ++ * filename. ++ * ++ * The MS-DOS filename of the file, mscabd_file::filename, is NOT USED ++ * by extract(). The caller must examine this MS-DOS filename, copy and ++ * change it as necessary, create directories as necessary, and provide ++ * the correct filename as a parameter, which will be passed unchanged ++ * to the decompressor's mspack_system::open() ++ * ++ * If the file belongs to a split folder in a multi-part cabinet set, ++ * and not enough parts of the cabinet set have been loaded and appended ++ * or prepended, an error will be returned immediately. ++ * ++ * @param self a self-referential pointer to the mscab_decompressor ++ * instance being called ++ * @param file the file to be decompressed ++ * @param filename the filename of the file being written to ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*extract)(struct mscab_decompressor *self, ++ struct mscabd_file *file, ++ const char *filename); ++ ++ /** ++ * Sets a CAB decompression engine parameter. ++ * ++ * The following parameters are defined: ++ * - #MSCABD_PARAM_SEARCHBUF: How many bytes should be allocated as a ++ * buffer when using search()? The minimum value is 4. The default ++ * value is 32768. ++ * - #MSCABD_PARAM_FIXMSZIP: If non-zero, extract() will ignore bad ++ * checksums and recover from decompression errors in MS-ZIP ++ * compressed folders. The default value is 0 (don't recover). ++ * - #MSCABD_PARAM_DECOMPBUF: How many bytes should be used as an input ++ * bit buffer by decompressors? The minimum value is 4. The default ++ * value is 4096. ++ * ++ * @param self a self-referential pointer to the mscab_decompressor ++ * instance being called ++ * @param param the parameter to set ++ * @param value the value to set the parameter to ++ * @return MSPACK_ERR_OK if all is OK, or MSPACK_ERR_ARGS if there ++ * is a problem with either parameter or value. ++ * @see search(), extract() ++ */ ++ int (*set_param)(struct mscab_decompressor *self, ++ int param, ++ int value); ++ ++ /** ++ * Returns the error code set by the most recently called method. ++ * ++ * This is useful for open() and search(), which do not return an error ++ * code directly. ++ * ++ * @param self a self-referential pointer to the mscab_decompressor ++ * instance being called ++ * @return the most recent error code ++ * @see open(), search() ++ */ ++ int (*last_error)(struct mscab_decompressor *self); ++}; ++ ++/* --- support for .CHM (HTMLHelp) file format ----------------------------- */ ++ ++/** ++ * A structure which represents a file to be placed in a CHM helpfile. ++ * ++ * A contiguous array of these structures should be passed to ++ * mschm_compressor::generate(). The array list is terminated with an ++ * entry whose mschmc_file::section field is set to #MSCHMC_ENDLIST, the ++ * other fields in this entry are ignored. ++ */ ++struct mschmc_file { ++ /** One of #MSCHMC_ENDLIST, #MSCHMC_UNCOMP or #MSCHMC_MSCOMP. */ ++ int section; ++ ++ /** The filename of the source file that will be added to the CHM. This ++ * is passed directly to mspack_system::open(). */ ++ const char *filename; ++ ++ /** The full path and filename of the file within the CHM helpfile, a ++ * UTF-1 encoded null-terminated string. */ ++ char *chm_filename; ++ ++ /** The length of the file, in bytes. This will be adhered to strictly ++ * and a read error will be issued if this many bytes cannot be read ++ * from the real file at CHM generation time. */ ++ off_t length; ++}; ++ ++/** ++ * A structure which represents a section of a CHM helpfile. ++ * ++ * All fields are READ ONLY. ++ * ++ * Not used directly, but used as a generic base type for ++ * mschmd_sec_uncompressed and mschmd_sec_mscompressed. ++ */ ++struct mschmd_section { ++ /** A pointer to the CHM helpfile that contains this section. */ ++ struct mschmd_header *chm; ++ ++ /** ++ * The section ID. Either 0 for the uncompressed section ++ * mschmd_sec_uncompressed, or 1 for the LZX compressed section ++ * mschmd_sec_mscompressed. No other section IDs are known. ++ */ ++ unsigned int id; ++}; ++ ++/** ++ * A structure which represents the uncompressed section of a CHM helpfile. ++ * ++ * All fields are READ ONLY. ++ */ ++struct mschmd_sec_uncompressed { ++ /** Generic section data. */ ++ struct mschmd_section base; ++ ++ /** The file offset of where this section begins in the CHM helpfile. */ ++ off_t offset; ++}; ++ ++/** ++ * A structure which represents the LZX compressed section of a CHM helpfile. ++ * ++ * All fields are READ ONLY. ++ */ ++struct mschmd_sec_mscompressed { ++ /** Generic section data. */ ++ struct mschmd_section base; ++ ++ /** A pointer to the meta-file which represents all LZX compressed data. */ ++ struct mschmd_file *content; ++ ++ /** A pointer to the file which contains the LZX control data. */ ++ struct mschmd_file *control; ++ ++ /** A pointer to the file which contains the LZX reset table. */ ++ struct mschmd_file *rtable; ++ ++ /** A pointer to the file which contains the LZX span information. ++ * Available only in CHM decoder version 2 and above. ++ */ ++ struct mschmd_file *spaninfo; ++}; ++ ++/** ++ * A structure which represents a CHM helpfile. ++ * ++ * All fields are READ ONLY. ++ */ ++struct mschmd_header { ++ /** The version of the CHM file format used in this file. */ ++ unsigned int version; ++ ++ /** ++ * The "timestamp" of the CHM helpfile. ++ * ++ * It is the lower 32 bits of a 64-bit value representing the number of ++ * centiseconds since 1601-01-01 00:00:00 UTC, plus 42. It is not useful ++ * as a timestamp, but it is useful as a semi-unique ID. ++ */ ++ unsigned int timestamp; ++ ++ /** ++ * The default Language and Country ID (LCID) of the user who ran the ++ * HTMLHelp Compiler. This is not the language of the CHM file itself. ++ */ ++ unsigned int language; ++ ++ /** ++ * The filename of the CHM helpfile. This is given by the library user ++ * and may be in any format. ++ */ ++ const char *filename; ++ ++ /** The length of the CHM helpfile, in bytes. */ ++ off_t length; ++ ++ /** A list of all non-system files in the CHM helpfile. */ ++ struct mschmd_file *files; ++ ++ /** ++ * A list of all system files in the CHM helpfile. ++ * ++ * System files are files which begin with "::". They are meta-files ++ * generated by the CHM creation process. ++ */ ++ struct mschmd_file *sysfiles; ++ ++ /** The section 0 (uncompressed) data in this CHM helpfile. */ ++ struct mschmd_sec_uncompressed sec0; ++ ++ /** The section 1 (MSCompressed) data in this CHM helpfile. */ ++ struct mschmd_sec_mscompressed sec1; ++ ++ /** The file offset of the first PMGL/PMGI directory chunk. */ ++ off_t dir_offset; ++ ++ /** The number of PMGL/PMGI directory chunks in this CHM helpfile. */ ++ unsigned int num_chunks; ++ ++ /** The size of each PMGL/PMGI chunk, in bytes. */ ++ unsigned int chunk_size; ++ ++ /** The "density" of the quick-reference section in PMGL/PMGI chunks. */ ++ unsigned int density; ++ ++ /** The depth of the index tree. ++ * ++ * - if 1, there are no PMGI chunks, only PMGL chunks. ++ * - if 2, there is 1 PMGI chunk. All chunk indices point to PMGL chunks. ++ * - if 3, the root PMGI chunk points to secondary PMGI chunks, which in ++ * turn point to PMGL chunks. ++ * - and so on... ++ */ ++ unsigned int depth; ++ ++ /** ++ * The number of the root PMGI chunk. ++ * ++ * If there is no index in the CHM helpfile, this will be 0xFFFFFFFF. ++ */ ++ unsigned int index_root; ++ ++ /** ++ * The number of the first PMGL chunk. Usually zero. ++ * Available only in CHM decoder version 2 and above. ++ */ ++ unsigned int first_pmgl; ++ ++ /** ++ * The number of the last PMGL chunk. Usually num_chunks-1. ++ * Available only in CHM decoder version 2 and above. ++ */ ++ unsigned int last_pmgl; ++ ++ /** ++ * A cache of loaded chunks, filled in by mschm_decoder::fast_find(). ++ * Available only in CHM decoder version 2 and above. ++ */ ++ unsigned char **chunk_cache; ++}; ++ ++/** ++ * A structure which represents a file stored in a CHM helpfile. ++ * ++ * All fields are READ ONLY. ++ */ ++struct mschmd_file { ++ /** ++ * A pointer to the next file in the list, or NULL if this is the final ++ * file. ++ */ ++ struct mschmd_file *next; ++ ++ /** ++ * A pointer to the section that this file is located in. Indirectly, ++ * it also points to the CHM helpfile the file is located in. ++ */ ++ struct mschmd_section *section; ++ ++ /** The offset within the section data that this file is located at. */ ++ off_t offset; ++ ++ /** The length of this file, in bytes */ ++ off_t length; ++ ++ /** The filename of this file -- a null terminated string in UTF-8. */ ++ char *filename; ++}; ++ ++/** mschmc_file::section value: end of CHM file list */ ++#define MSCHMC_ENDLIST (0) ++/** mschmc_file::section value: this file is in the Uncompressed section */ ++#define MSCHMC_UNCOMP (1) ++/** mschmc_file::section value: this file is in the MSCompressed section */ ++#define MSCHMC_MSCOMP (2) ++ ++/** mschm_compressor::set_param() parameter: "timestamp" header */ ++#define MSCHMC_PARAM_TIMESTAMP (0) ++/** mschm_compressor::set_param() parameter: "language" header */ ++#define MSCHMC_PARAM_LANGUAGE (1) ++/** mschm_compressor::set_param() parameter: LZX window size */ ++#define MSCHMC_PARAM_LZXWINDOW (2) ++/** mschm_compressor::set_param() parameter: intra-chunk quickref density */ ++#define MSCHMC_PARAM_DENSITY (3) ++/** mschm_compressor::set_param() parameter: whether to create indices */ ++#define MSCHMC_PARAM_INDEX (4) ++ ++/** ++ * A compressor for .CHM (Microsoft HTMLHelp) files. ++ * ++ * All fields are READ ONLY. ++ * ++ * @see mspack_create_chm_compressor(), mspack_destroy_chm_compressor() ++ */ ++struct mschm_compressor { ++ /** ++ * Generates a CHM help file. ++ * ++ * The help file will contain up to two sections, an Uncompressed ++ * section and potentially an MSCompressed (LZX compressed) ++ * section. ++ * ++ * While the contents listing of a CHM file is always in lexical order, ++ * the file list passed in will be taken as the correct order for files ++ * within the sections. It is in your interest to place similar files ++ * together for better compression. ++ * ++ * There are two modes of generation, to use a temporary file or not to ++ * use one. See use_temporary_file() for the behaviour of generate() in ++ * these two different modes. ++ * ++ * @param self a self-referential pointer to the mschm_compressor ++ * instance being called ++ * @param file_list an array of mschmc_file structures, terminated ++ * with an entry whose mschmc_file::section field is ++ * #MSCHMC_ENDLIST. The order of the list is ++ * preserved within each section. The length of any ++ * mschmc_file::chm_filename string cannot exceed ++ * roughly 4096 bytes. Each source file must be able ++ * to supply as many bytes as given in the ++ * mschmc_file::length field. ++ * @param output_file the file to write the generated CHM helpfile to. ++ * This is passed directly to mspack_system::open() ++ * @return an error code, or MSPACK_ERR_OK if successful ++ * @see use_temporary_file() set_param() ++ */ ++ int (*generate)(struct mschm_compressor *self, ++ struct mschmc_file file_list[], ++ const char *output_file); ++ ++ /** ++ * Specifies whether a temporary file is used during CHM generation. ++ * ++ * The CHM file format includes data about the compressed section (such ++ * as its overall size) that is stored in the output CHM file prior to ++ * the compressed section itself. This unavoidably requires that the ++ * compressed section has to be generated, before these details can be ++ * set. There are several ways this can be handled. Firstly, the ++ * compressed section could be generated entirely in memory before ++ * writing any of the output CHM file. This approach is not used in ++ * libmspack, as the compressed section can exceed the addressable ++ * memory space on most architectures. ++ * ++ * libmspack has two options, either to write these unknowable sections ++ * with blank data, generate the compressed section, then re-open the ++ * output file for update once the compressed section has been ++ * completed, or to write the compressed section to a temporary file, ++ * then write the entire output file at once, performing a simple ++ * file-to-file copy for the compressed section. ++ * ++ * The simple solution of buffering the entire compressed section in ++ * memory can still be used, if desired. As the temporary file's ++ * filename is passed directly to mspack_system::open(), it is possible ++ * for a custom mspack_system implementation to hold this file in memory, ++ * without writing to a disk. ++ * ++ * If a temporary file is set, generate() performs the following ++ * sequence of events: the temporary file is opened for writing, the ++ * compression algorithm writes to the temporary file, the temporary ++ * file is closed. Then the output file is opened for writing and the ++ * temporary file is re-opened for reading. The output file is written ++ * and the temporary file is read from. Both files are then closed. The ++ * temporary file itself is not deleted. If that is desired, the ++ * temporary file should be deleted after the completion of generate(), ++ * if it exists. ++ * ++ * If a temporary file is set not to be used, generate() performs the ++ * following sequence of events: the output file is opened for writing, ++ * then it is written and closed. The output file is then re-opened for ++ * update, the appropriate sections are seek()ed to and re-written, then ++ * the output file is closed. ++ * ++ * @param self a self-referential pointer to the ++ * mschm_compressor instance being called ++ * @param use_temp_file non-zero if the temporary file should be used, ++ * zero if the temporary file should not be used. ++ * @param temp_file a file to temporarily write compressed data to, ++ * before opening it for reading and copying the ++ * contents to the output file. This is passed ++ * directly to mspack_system::open(). ++ * @return an error code, or MSPACK_ERR_OK if successful ++ * @see generate() ++ */ ++ int (*use_temporary_file)(struct mschm_compressor *self, ++ int use_temp_file, ++ const char *temp_file); ++ /** ++ * Sets a CHM compression engine parameter. ++ * ++ * The following parameters are defined: ++ ++ * - #MSCHMC_PARAM_TIMESTAMP: Sets the "timestamp" of the CHM file ++ * generated. This is not a timestamp, see mschmd_header::timestamp ++ * for a description. If this timestamp is 0, generate() will use its ++ * own algorithm for making a unique ID, based on the lengths and ++ * names of files in the CHM itself. Defaults to 0, any value between ++ * 0 and (2^32)-1 is valid. ++ * - #MSCHMC_PARAM_LANGUAGE: Sets the "language" of the CHM file ++ * generated. This is not the language used in the CHM file, but the ++ * language setting of the user who ran the HTMLHelp compiler. It ++ * defaults to 0x0409. The valid range is between 0x0000 and 0x7F7F. ++ * - #MSCHMC_PARAM_LZXWINDOW: Sets the size of the LZX history window, ++ * which is also the interval at which the compressed data stream can be ++ * randomly accessed. The value is not a size in bytes, but a power of ++ * two. The default value is 16 (which makes the window 2^16 bytes, or ++ * 64 kilobytes), the valid range is from 15 (32 kilobytes) to 21 (2 ++ * megabytes). ++ * - #MSCHMC_PARAM_DENSITY: Sets the "density" of quick reference ++ * entries stored at the end of directory listing chunk. Each chunk is ++ * 4096 bytes in size, and contains as many file entries as there is ++ * room for. At the other end of the chunk, a list of "quick reference" ++ * pointers is included. The offset of every 'N'th file entry is given a ++ * quick reference, where N = (2^density) + 1. The default density is ++ * 2. The smallest density is 0 (N=2), the maximum is 10 (N=1025). As ++ * each file entry requires at least 5 bytes, the maximum number of ++ * entries in a single chunk is roughly 800, so the maximum value 10 ++ * can be used to indicate there are no quickrefs at all. ++ * - #MSCHMC_PARAM_INDEX: Sets whether or not to include quick lookup ++ * index chunk(s), in addition to normal directory listing chunks. A ++ * value of zero means no index chunks will be created, a non-zero value ++ * means index chunks will be created. The default is zero, "don't ++ * create an index". ++ * ++ * @param self a self-referential pointer to the mschm_compressor ++ * instance being called ++ * @param param the parameter to set ++ * @param value the value to set the parameter to ++ * @return MSPACK_ERR_OK if all is OK, or MSPACK_ERR_ARGS if there ++ * is a problem with either parameter or value. ++ * @see generate() ++ */ ++ int (*set_param)(struct mschm_compressor *self, ++ int param, ++ unsigned int value); ++ ++ /** ++ * Returns the error code set by the most recently called method. ++ * ++ * @param self a self-referential pointer to the mschm_compressor ++ * instance being called ++ * @return the most recent error code ++ * @see set_param(), generate() ++ */ ++ int (*last_error)(struct mschm_compressor *self); ++}; ++ ++/** ++ * A decompressor for .CHM (Microsoft HTMLHelp) files ++ * ++ * All fields are READ ONLY. ++ * ++ * @see mspack_create_chm_decompressor(), mspack_destroy_chm_decompressor() ++ */ ++struct mschm_decompressor { ++ /** ++ * Opens a CHM helpfile and reads its contents. ++ * ++ * If the file opened is a valid CHM helpfile, all headers will be read ++ * and a mschmd_header structure will be returned, with a full list of ++ * files. ++ * ++ * In the case of an error occuring, NULL is returned and the error code ++ * is available from last_error(). ++ * ++ * The filename pointer should be considered "in use" until close() is ++ * called on the CHM helpfile. ++ * ++ * @param self a self-referential pointer to the mschm_decompressor ++ * instance being called ++ * @param filename the filename of the CHM helpfile. This is passed ++ * directly to mspack_system::open(). ++ * @return a pointer to a mschmd_header structure, or NULL on failure ++ * @see close() ++ */ ++ struct mschmd_header *(*open)(struct mschm_decompressor *self, ++ const char *filename); ++ ++ /** ++ * Closes a previously opened CHM helpfile. ++ * ++ * This closes a CHM helpfile, frees the mschmd_header and all ++ * mschmd_file structures associated with it (if any). This works on ++ * both helpfiles opened with open() and helpfiles opened with ++ * fast_open(). ++ * ++ * The CHM header pointer is now invalid and cannot be used again. All ++ * mschmd_file pointers referencing that CHM are also now invalid, and ++ * cannot be used again. ++ * ++ * @param self a self-referential pointer to the mschm_decompressor ++ * instance being called ++ * @param chm the CHM helpfile to close ++ * @see open(), fast_open() ++ */ ++ void (*close)(struct mschm_decompressor *self, ++ struct mschmd_header *chm); ++ ++ /** ++ * Extracts a file from a CHM helpfile. ++ * ++ * This extracts a file from a CHM helpfile and writes it to the given ++ * filename. The filename of the file, mscabd_file::filename, is not ++ * used by extract(), but can be used by the caller as a guide for ++ * constructing an appropriate filename. ++ * ++ * This method works both with files found in the mschmd_header::files ++ * and mschmd_header::sysfiles list and mschmd_file structures generated ++ * on the fly by fast_find(). ++ * ++ * @param self a self-referential pointer to the mschm_decompressor ++ * instance being called ++ * @param file the file to be decompressed ++ * @param filename the filename of the file being written to ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*extract)(struct mschm_decompressor *self, ++ struct mschmd_file *file, ++ const char *filename); ++ ++ /** ++ * Returns the error code set by the most recently called method. ++ * ++ * This is useful for open() and fast_open(), which do not return an ++ * error code directly. ++ * ++ * @param self a self-referential pointer to the mschm_decompressor ++ * instance being called ++ * @return the most recent error code ++ * @see open(), extract() ++ */ ++ int (*last_error)(struct mschm_decompressor *self); ++ ++ /** ++ * Opens a CHM helpfile quickly. ++ * ++ * If the file opened is a valid CHM helpfile, only essential headers ++ * will be read. A mschmd_header structure will be still be returned, as ++ * with open(), but the mschmd_header::files field will be NULL. No ++ * files details will be automatically read. The fast_find() method ++ * must be used to obtain file details. ++ * ++ * In the case of an error occuring, NULL is returned and the error code ++ * is available from last_error(). ++ * ++ * The filename pointer should be considered "in use" until close() is ++ * called on the CHM helpfile. ++ * ++ * @param self a self-referential pointer to the mschm_decompressor ++ * instance being called ++ * @param filename the filename of the CHM helpfile. This is passed ++ * directly to mspack_system::open(). ++ * @return a pointer to a mschmd_header structure, or NULL on failure ++ * @see open(), close(), fast_find(), extract() ++ */ ++ struct mschmd_header *(*fast_open)(struct mschm_decompressor *self, ++ const char *filename); ++ ++ /** ++ * Finds file details quickly. ++ * ++ * Instead of reading all CHM helpfile headers and building a list of ++ * files, fast_open() and fast_find() are intended for finding file ++ * details only when they are needed. The CHM file format includes an ++ * on-disk file index to allow this. ++ * ++ * Given a case-sensitive filename, fast_find() will search the on-disk ++ * index for that file. ++ * ++ * If the file was found, the caller-provided mschmd_file structure will ++ * be filled out like so: ++ * - section: the correct value for the found file ++ * - offset: the correct value for the found file ++ * - length: the correct value for the found file ++ * - all other structure elements: NULL or 0 ++ * ++ * If the file was not found, MSPACK_ERR_OK will still be returned as the ++ * result, but the caller-provided structure will be filled out like so: ++ * - section: NULL ++ * - offset: 0 ++ * - length: 0 ++ * - all other structure elements: NULL or 0 ++ * ++ * This method is intended to be used in conjunction with CHM helpfiles ++ * opened with fast_open(), but it also works with helpfiles opened ++ * using the regular open(). ++ * ++ * @param self a self-referential pointer to the mschm_decompressor ++ * instance being called ++ * @param chm the CHM helpfile to search for the file ++ * @param filename the filename of the file to search for ++ * @param f_ptr a pointer to a caller-provded mschmd_file structure ++ * @param f_size sizeof(struct mschmd_file) ++ * @return an error code, or MSPACK_ERR_OK if successful ++ * @see open(), close(), fast_find(), extract() ++ */ ++ int (*fast_find)(struct mschm_decompressor *self, ++ struct mschmd_header *chm, ++ const char *filename, ++ struct mschmd_file *f_ptr, ++ int f_size); ++}; ++ ++/* --- support for .LIT (EBook) file format -------------------------------- */ ++ ++/** TODO */ ++struct mslit_compressor { ++ int dummy; ++}; ++ ++/** TODO */ ++struct mslit_decompressor { ++ int dummy; ++}; ++ ++ ++/* --- support for .HLP (MS Help) file format ------------------------------ */ ++ ++/** TODO */ ++struct mshlp_compressor { ++ int dummy; ++}; ++ ++/** TODO */ ++struct mshlp_decompressor { ++ int dummy; ++}; ++ ++ ++/* --- support for SZDD file format ---------------------------------------- */ ++ ++/** msszdd_compressor::set_param() parameter: the missing character */ ++#define MSSZDDC_PARAM_MISSINGCHAR (0) ++ ++/** msszddd_header::format value - a regular SZDD file */ ++#define MSSZDD_FMT_NORMAL (0) ++ ++/** msszddd_header::format value - a special QBasic SZDD file */ ++#define MSSZDD_FMT_QBASIC (1) ++ ++/** ++ * A structure which represents an SZDD compressed file. ++ * ++ * All fields are READ ONLY. ++ */ ++struct msszddd_header { ++ /** The file format; either #MSSZDD_FMT_NORMAL or #MSSZDD_FMT_QBASIC */ ++ int format; ++ ++ /** The amount of data in the SZDD file once uncompressed. */ ++ off_t length; ++ ++ /** ++ * The last character in the filename, traditionally replaced with an ++ * underscore to show the file is compressed. The null character is used ++ * to show that this character has not been stored (e.g. because the ++ * filename is not known). Generally, only characters that may appear in ++ * an MS-DOS filename (except ".") are valid. ++ */ ++ char missing_char; ++}; ++ ++/** ++ * A compressor for the SZDD file format. ++ * ++ * All fields are READ ONLY. ++ * ++ * @see mspack_create_szdd_compressor(), mspack_destroy_szdd_compressor() ++ */ ++struct msszdd_compressor { ++ /** ++ * Reads an input file and creates a compressed output file in the ++ * SZDD compressed file format. The SZDD compression format is quick ++ * but gives poor compression. It is possible for the compressed output ++ * file to be larger than the input file. ++ * ++ * Conventionally, SZDD compressed files have the final character in ++ * their filename replaced with an underscore, to show they are ++ * compressed. The missing character is stored in the compressed file ++ * itself. This is due to the restricted filename conventions of MS-DOS, ++ * most operating systems, such as UNIX, simply append another file ++ * extension to the existing filename. As mspack does not deal with ++ * filenames, this is left up to you. If you wish to set the missing ++ * character stored in the file header, use set_param() with the ++ * #MSSZDDC_PARAM_MISSINGCHAR parameter. ++ * ++ * "Stream" compression (where the length of the input data is not ++ * known) is not possible. The length of the input data is stored in the ++ * header of the SZDD file and must therefore be known before any data ++ * is compressed. Due to technical limitations of the file format, the ++ * maximum size of uncompressed file that will be accepted is 2147483647 ++ * bytes. ++ * ++ * @param self a self-referential pointer to the msszdd_compressor ++ * instance being called ++ * @param input the name of the file to compressed. This is passed ++ * passed directly to mspack_system::open() ++ * @param output the name of the file to write compressed data to. ++ * This is passed directly to mspack_system::open(). ++ * @param length the length of the uncompressed file, or -1 to indicate ++ * that this should be determined automatically by using ++ * mspack_system::seek() on the input file. ++ * @return an error code, or MSPACK_ERR_OK if successful ++ * @see set_param() ++ */ ++ int (*compress)(struct msszdd_compressor *self, ++ const char *input, ++ const char *output, ++ off_t length); ++ ++ /** ++ * Sets an SZDD compression engine parameter. ++ * ++ * The following parameters are defined: ++ ++ * - #MSSZDDC_PARAM_CHARACTER: the "missing character", the last character ++ * in the uncompressed file's filename, which is traditionally replaced ++ * with an underscore to show the file is compressed. Traditionally, ++ * this can only be a character that is a valid part of an MS-DOS, ++ * filename, but libmspack permits any character between 0x00 and 0xFF ++ * to be stored. 0x00 is the default, and it represents "no character ++ * stored". ++ * ++ * @param self a self-referential pointer to the msszdd_compressor ++ * instance being called ++ * @param param the parameter to set ++ * @param value the value to set the parameter to ++ * @return MSPACK_ERR_OK if all is OK, or MSPACK_ERR_ARGS if there ++ * is a problem with either parameter or value. ++ * @see compress() ++ */ ++ int (*set_param)(struct msszdd_compressor *self, ++ int param, ++ unsigned int value); ++ ++ /** ++ * Returns the error code set by the most recently called method. ++ * ++ * @param self a self-referential pointer to the msszdd_compressor ++ * instance being called ++ * @return the most recent error code ++ * @see compress() ++ */ ++ int (*last_error)(struct mschm_decompressor *self); ++}; ++ ++/** ++ * A decompressor for SZDD compressed files. ++ * ++ * All fields are READ ONLY. ++ * ++ * @see mspack_create_szdd_decompressor(), mspack_destroy_szdd_decompressor() ++ */ ++struct msszdd_decompressor { ++ /** ++ * Opens a SZDD file and reads the header. ++ * ++ * If the file opened is a valid SZDD file, all headers will be read and ++ * a msszddd_header structure will be returned. ++ * ++ * In the case of an error occuring, NULL is returned and the error code ++ * is available from last_error(). ++ * ++ * The filename pointer should be considered "in use" until close() is ++ * called on the SZDD file. ++ * ++ * @param self a self-referential pointer to the msszdd_decompressor ++ * instance being called ++ * @param filename the filename of the SZDD compressed file. This is ++ * passed directly to mspack_system::open(). ++ * @return a pointer to a msszddd_header structure, or NULL on failure ++ * @see close() ++ */ ++ struct msszddd_header *(*open)(struct msszdd_decompressor *self, ++ const char *filename); ++ ++ /** ++ * Closes a previously opened SZDD file. ++ * ++ * This closes a SZDD file and frees the msszddd_header associated with ++ * it. ++ * ++ * The SZDD header pointer is now invalid and cannot be used again. ++ * ++ * @param self a self-referential pointer to the msszdd_decompressor ++ * instance being called ++ * @param szdd the SZDD file to close ++ * @see open() ++ */ ++ void (*close)(struct msszdd_decompressor *self, ++ struct msszddd_header *szdd); ++ ++ /** ++ * Extracts the compressed data from a SZDD file. ++ * ++ * This decompresses the compressed SZDD data stream and writes it to ++ * an output file. ++ * ++ * @param self a self-referential pointer to the msszdd_decompressor ++ * instance being called ++ * @param szdd the SZDD file to extract data from ++ * @param filename the filename to write the decompressed data to. This ++ * is passed directly to mspack_system::open(). ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*extract)(struct msszdd_decompressor *self, ++ struct msszddd_header *szdd, ++ const char *filename); ++ ++ /** ++ * Decompresses an SZDD file to an output file in one step. ++ * ++ * This opens an SZDD file as input, reads the header, then decompresses ++ * the compressed data immediately to an output file, finally closing ++ * both the input and output file. It is more convenient to use than ++ * open() then extract() then close(), if you do not need to know the ++ * SZDD output size or missing character. ++ * ++ * @param self a self-referential pointer to the msszdd_decompressor ++ * instance being called ++ * @param input the filename of the input SZDD file. This is passed ++ * directly to mspack_system::open(). ++ * @param output the filename to write the decompressed data to. This ++ * is passed directly to mspack_system::open(). ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*decompress)(struct msszdd_decompressor *self, ++ const char *input, ++ const char *output); ++ ++ /** ++ * Returns the error code set by the most recently called method. ++ * ++ * This is useful for open() which does not return an ++ * error code directly. ++ * ++ * @param self a self-referential pointer to the msszdd_decompressor ++ * instance being called ++ * @return the most recent error code ++ * @see open(), extract(), decompress() ++ */ ++ int (*last_error)(struct msszdd_decompressor *self); ++}; ++ ++/* --- support for KWAJ file format ---------------------------------------- */ ++ ++/** mskwaj_compressor::set_param() parameter: compression type */ ++#define MSKWAJC_PARAM_COMP_TYPE (0) ++ ++/** mskwaj_compressor::set_param() parameter: include the length of the ++ * uncompressed file in the header? ++ */ ++#define MSKWAJC_PARAM_INCLUDE_LENGTH (1) ++ ++/** KWAJ compression type: no compression. */ ++#define MSKWAJ_COMP_NONE (0) ++/** KWAJ compression type: no compression, 0xFF XOR "encryption". */ ++#define MSKWAJ_COMP_XOR (1) ++/** KWAJ compression type: LZSS (same method as SZDD) */ ++#define MSKWAJ_COMP_SZDD (2) ++/** KWAJ compression type: LZ+Huffman compression */ ++#define MSKWAJ_COMP_LZH (3) ++/** KWAJ compression type: MSZIP */ ++#define MSKWAJ_COMP_MSZIP (4) ++ ++/** KWAJ optional header flag: decompressed file length is included */ ++#define MSKWAJ_HDR_HASLENGTH (0x01) ++ ++/** KWAJ optional header flag: unknown 2-byte structure is included */ ++#define MSKWAJ_HDR_HASUNKNOWN1 (0x02) ++ ++/** KWAJ optional header flag: unknown multi-sized structure is included */ ++#define MSKWAJ_HDR_HASUNKNOWN2 (0x04) ++ ++/** KWAJ optional header flag: file name (no extension) is included */ ++#define MSKWAJ_HDR_HASFILENAME (0x08) ++ ++/** KWAJ optional header flag: file extension is included */ ++#define MSKWAJ_HDR_HASFILEEXT (0x10) ++ ++/** KWAJ optional header flag: extra text is included */ ++#define MSKWAJ_HDR_HASEXTRATEXT (0x20) ++ ++/** ++ * A structure which represents an KWAJ compressed file. ++ * ++ * All fields are READ ONLY. ++ */ ++struct mskwajd_header { ++ /** The compression type; should be one of #MSKWAJ_COMP_NONE, ++ * #MSKWAJ_COMP_XOR, #MSKWAJ_COMP_SZDD or #MSKWAJ_COMP_LZH ++ */ ++ unsigned short comp_type; ++ ++ /** The offset in the file where the compressed data stream begins */ ++ off_t data_offset; ++ ++ /** Flags indicating which optional headers were included. */ ++ int headers; ++ ++ /** The amount of uncompressed data in the file, or 0 if not present. */ ++ off_t length; ++ ++ /** output filename, or NULL if not present */ ++ char *filename; ++ ++ /** extra uncompressed data (usually text) in the header. ++ * This data can contain nulls so use extra_length to get the size. ++ */ ++ char *extra; ++ ++ /** length of extra uncompressed data in the header */ ++ unsigned short extra_length; ++}; ++ ++/** ++ * A compressor for the KWAJ file format. ++ * ++ * All fields are READ ONLY. ++ * ++ * @see mspack_create_kwaj_compressor(), mspack_destroy_kwaj_compressor() ++ */ ++struct mskwaj_compressor { ++ /** ++ * Reads an input file and creates a compressed output file in the ++ * KWAJ compressed file format. The KWAJ compression format is quick ++ * but gives poor compression. It is possible for the compressed output ++ * file to be larger than the input file. ++ * ++ * @param self a self-referential pointer to the mskwaj_compressor ++ * instance being called ++ * @param input the name of the file to compressed. This is passed ++ * passed directly to mspack_system::open() ++ * @param output the name of the file to write compressed data to. ++ * This is passed directly to mspack_system::open(). ++ * @param length the length of the uncompressed file, or -1 to indicate ++ * that this should be determined automatically by using ++ * mspack_system::seek() on the input file. ++ * @return an error code, or MSPACK_ERR_OK if successful ++ * @see set_param() ++ */ ++ int (*compress)(struct mskwaj_compressor *self, ++ const char *input, ++ const char *output, ++ off_t length); ++ ++ /** ++ * Sets an KWAJ compression engine parameter. ++ * ++ * The following parameters are defined: ++ * ++ * - #MSKWAJC_PARAM_COMP_TYPE: the compression method to use. Must ++ * be one of #MSKWAJC_COMP_NONE, #MSKWAJC_COMP_XOR, #MSKWAJ_COMP_SZDD ++ * or #MSKWAJ_COMP_LZH. The default is #MSKWAJ_COMP_LZH. ++ * ++ * - #MSKWAJC_PARAM_INCLUDE_LENGTH: a boolean; should the compressed ++ * output file should include the uncompressed length of the input ++ * file in the header? This adds 4 bytes to the size of the output ++ * file. A value of zero says "no", non-zero says "yes". The default ++ * is "no". ++ * ++ * @param self a self-referential pointer to the mskwaj_compressor ++ * instance being called ++ * @param param the parameter to set ++ * @param value the value to set the parameter to ++ * @return MSPACK_ERR_OK if all is OK, or MSPACK_ERR_ARGS if there ++ * is a problem with either parameter or value. ++ * @see generate() ++ */ ++ int (*set_param)(struct mskwaj_compressor *self, ++ int param, ++ unsigned int value); ++ ++ ++ /** ++ * Sets the original filename of the file before compression, ++ * which will be stored in the header of the output file. ++ * ++ * The filename should be a null-terminated string, it must be an ++ * MS-DOS "8.3" type filename (up to 8 bytes for the filename, then ++ * optionally a "." and up to 3 bytes for a filename extension). ++ * ++ * If NULL is passed as the filename, no filename is included in the ++ * header. This is the default. ++ * ++ * @param self a self-referential pointer to the mskwaj_compressor ++ * instance being called ++ * @param filename the original filename to use ++ * @return MSPACK_ERR_OK if all is OK, or MSPACK_ERR_ARGS if the ++ * filename is too long ++ */ ++ int (*set_filename)(struct mskwaj_compressor *self, ++ const char *filename); ++ ++ /** ++ * Sets arbitrary data that will be stored in the header of the ++ * output file, uncompressed. It can be up to roughly 64 kilobytes, ++ * as the overall size of the header must not exceed 65535 bytes. ++ * The data can contain null bytes if desired. ++ * ++ * If NULL is passed as the data pointer, or zero is passed as the ++ * length, no extra data is included in the header. This is the ++ * default. ++ * ++ * @param self a self-referential pointer to the mskwaj_compressor ++ * instance being called ++ * @param data a pointer to the data to be stored in the header ++ * @param bytes the length of the data in bytes ++ * @return MSPACK_ERR_OK if all is OK, or MSPACK_ERR_ARGS extra data ++ * is too long ++ */ ++ int (*set_extra_data)(struct mskwaj_compressor *self, ++ void *data, ++ size_t bytes); ++ ++ /** ++ * Returns the error code set by the most recently called method. ++ * ++ * @param self a self-referential pointer to the mskwaj_compressor ++ * instance being called ++ * @return the most recent error code ++ * @see compress() ++ */ ++ int (*last_error)(struct mschm_decompressor *self); ++}; ++ ++/** ++ * A decompressor for KWAJ compressed files. ++ * ++ * All fields are READ ONLY. ++ * ++ * @see mspack_create_kwaj_decompressor(), mspack_destroy_kwaj_decompressor() ++ */ ++struct mskwaj_decompressor { ++ /** ++ * Opens a KWAJ file and reads the header. ++ * ++ * If the file opened is a valid KWAJ file, all headers will be read and ++ * a mskwajd_header structure will be returned. ++ * ++ * In the case of an error occuring, NULL is returned and the error code ++ * is available from last_error(). ++ * ++ * The filename pointer should be considered "in use" until close() is ++ * called on the KWAJ file. ++ * ++ * @param self a self-referential pointer to the mskwaj_decompressor ++ * instance being called ++ * @param filename the filename of the KWAJ compressed file. This is ++ * passed directly to mspack_system::open(). ++ * @return a pointer to a mskwajd_header structure, or NULL on failure ++ * @see close() ++ */ ++ struct mskwajd_header *(*open)(struct mskwaj_decompressor *self, ++ const char *filename); ++ ++ /** ++ * Closes a previously opened KWAJ file. ++ * ++ * This closes a KWAJ file and frees the mskwajd_header associated ++ * with it. The KWAJ header pointer is now invalid and cannot be ++ * used again. ++ * ++ * @param self a self-referential pointer to the mskwaj_decompressor ++ * instance being called ++ * @param kwaj the KWAJ file to close ++ * @see open() ++ */ ++ void (*close)(struct mskwaj_decompressor *self, ++ struct mskwajd_header *kwaj); ++ ++ /** ++ * Extracts the compressed data from a KWAJ file. ++ * ++ * This decompresses the compressed KWAJ data stream and writes it to ++ * an output file. ++ * ++ * @param self a self-referential pointer to the mskwaj_decompressor ++ * instance being called ++ * @param kwaj the KWAJ file to extract data from ++ * @param filename the filename to write the decompressed data to. This ++ * is passed directly to mspack_system::open(). ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*extract)(struct mskwaj_decompressor *self, ++ struct mskwajd_header *kwaj, ++ const char *filename); ++ ++ /** ++ * Decompresses an KWAJ file to an output file in one step. ++ * ++ * This opens an KWAJ file as input, reads the header, then decompresses ++ * the compressed data immediately to an output file, finally closing ++ * both the input and output file. It is more convenient to use than ++ * open() then extract() then close(), if you do not need to know the ++ * KWAJ output size or output filename. ++ * ++ * @param self a self-referential pointer to the mskwaj_decompressor ++ * instance being called ++ * @param input the filename of the input KWAJ file. This is passed ++ * directly to mspack_system::open(). ++ * @param output the filename to write the decompressed data to. This ++ * is passed directly to mspack_system::open(). ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*decompress)(struct mskwaj_decompressor *self, ++ const char *input, ++ const char *output); ++ ++ /** ++ * Returns the error code set by the most recently called method. ++ * ++ * This is useful for open() which does not return an ++ * error code directly. ++ * ++ * @param self a self-referential pointer to the mskwaj_decompressor ++ * instance being called ++ * @return the most recent error code ++ * @see open(), search() ++ */ ++ int (*last_error)(struct mskwaj_decompressor *self); ++}; ++ ++/* --- support for .LZX (Offline Address Book) file format ----------------- */ ++ ++/** ++ * A compressor for the Offline Address Book (OAB) format. ++ * ++ * All fields are READ ONLY. ++ * ++ * @see mspack_create_oab_compressor(), mspack_destroy_oab_compressor() ++ */ ++struct msoab_compressor { ++ /** ++ * Compress a full OAB file. ++ * ++ * The input file will be read and the compressed contents written to the ++ * output file. ++ * ++ * @param self a self-referential pointer to the msoab_decompressor ++ * instance being called ++ * @param input the filename of the input file. This is passed ++ * directly to mspack_system::open(). ++ * @param output the filename of the output file. This is passed ++ * directly to mspack_system::open(). ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*compress) (struct msoab_compressor *self, ++ const char *input, ++ const char *output); ++ ++ /** ++ * Generate a compressed incremental OAB patch file. ++ * ++ * The two uncompressed files "input" and "base" will be read, and an ++ * incremental patch to generate "input" from "base" will be written to ++ * the output file. ++ * ++ * @param self a self-referential pointer to the msoab_compressor ++ * instance being called ++ * @param input the filename of the input file containing the new ++ * version of its contents. This is passed directly ++ * to mspack_system::open(). ++ * @param base the filename of the original base file containing ++ * the old version of its contents, against which the ++ * incremental patch shall generated. This is passed ++ * directly to mspack_system::open(). ++ * @param output the filename of the output file. This is passed ++ * directly to mspack_system::open(). ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*compress_incremental) (struct msoab_compressor *self, ++ const char *input, ++ const char *base, ++ const char *output); ++}; ++ ++/** ++ * A decompressor for .LZX (Offline Address Book) files ++ * ++ * All fields are READ ONLY. ++ * ++ * @see mspack_create_oab_decompressor(), mspack_destroy_oab_decompressor() ++ */ ++struct msoab_decompressor { ++ /** ++ * Decompresses a full Offline Address Book file. ++ * ++ * If the input file is a valid compressed Offline Address Book file, ++ * it will be read and the decompressed contents will be written to ++ * the output file. ++ * ++ * @param self a self-referential pointer to the msoab_decompressor ++ * instance being called ++ * @param input the filename of the input file. This is passed ++ * directly to mspack_system::open(). ++ * @param output the filename of the output file. This is passed ++ * directly to mspack_system::open(). ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*decompress) (struct msoab_decompressor *self, ++ const char *input, ++ const char *output); ++ ++ /** ++ * Decompresses an Offline Address Book with an incremental patch file. ++ * ++ * This requires both a full UNCOMPRESSED Offline Address Book file to ++ * act as the "base", and a compressed incremental patch file as input. ++ * If the input file is valid, it will be decompressed with reference to ++ * the base file, and the decompressed contents will be written to the ++ * output file. ++ * ++ * There is no way to tell what the right base file is for the given ++ * incremental patch, but if you get it wrong, this will usually result ++ * in incorrect data being decompressed, which will then fail a checksum ++ * test. ++ * ++ * @param self a self-referential pointer to the msoab_decompressor ++ * instance being called ++ * @param input the filename of the input file. This is passed ++ * directly to mspack_system::open(). ++ * @param base the filename of the base file to which the ++ * incremental patch shall be applied. This is passed ++ * directly to mspack_system::open(). ++ * @param output the filename of the output file. This is passed ++ * directly to mspack_system::open(). ++ * @return an error code, or MSPACK_ERR_OK if successful ++ */ ++ int (*decompress_incremental) (struct msoab_decompressor *self, ++ const char *input, ++ const char *base, ++ const char *output); ++}; ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/mszip.h b/libclamav/libmspack-0.4alpha/mspack/mszip.h +new file mode 100644 +index 000000000000..0fe79e4af516 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/mszip.h +@@ -0,0 +1,126 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * The deflate method was created by Phil Katz. MSZIP is equivalent to the ++ * deflate method. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_MSZIP_H ++#define MSPACK_MSZIP_H 1 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* MSZIP (deflate) compression / (inflate) decompression definitions */ ++ ++#define MSZIP_FRAME_SIZE (32768) /* size of LZ history window */ ++#define MSZIP_LITERAL_MAXSYMBOLS (288) /* literal/length huffman tree */ ++#define MSZIP_LITERAL_TABLEBITS (9) ++#define MSZIP_DISTANCE_MAXSYMBOLS (32) /* distance huffman tree */ ++#define MSZIP_DISTANCE_TABLEBITS (6) ++ ++/* if there are less direct lookup entries than symbols, the longer ++ * code pointers will be <= maxsymbols. This must not happen, or we ++ * will decode entries badly */ ++#if (1 << MSZIP_LITERAL_TABLEBITS) < (MSZIP_LITERAL_MAXSYMBOLS * 2) ++# define MSZIP_LITERAL_TABLESIZE (MSZIP_LITERAL_MAXSYMBOLS * 4) ++#else ++# define MSZIP_LITERAL_TABLESIZE ((1 << MSZIP_LITERAL_TABLEBITS) + \ ++ (MSZIP_LITERAL_MAXSYMBOLS * 2)) ++#endif ++ ++#if (1 << MSZIP_DISTANCE_TABLEBITS) < (MSZIP_DISTANCE_MAXSYMBOLS * 2) ++# define MSZIP_DISTANCE_TABLESIZE (MSZIP_DISTANCE_MAXSYMBOLS * 4) ++#else ++# define MSZIP_DISTANCE_TABLESIZE ((1 << MSZIP_DISTANCE_TABLEBITS) + \ ++ (MSZIP_DISTANCE_MAXSYMBOLS * 2)) ++#endif ++ ++struct mszipd_stream { ++ struct mspack_system *sys; /* I/O routines */ ++ struct mspack_file *input; /* input file handle */ ++ struct mspack_file *output; /* output file handle */ ++ unsigned int window_posn; /* offset within window */ ++ ++ /* inflate() will call this whenever the window should be emptied. */ ++ int (*flush_window)(struct mszipd_stream *, unsigned int); ++ ++ int error, repair_mode, bytes_output; ++ ++ /* I/O buffering */ ++ unsigned char *inbuf, *i_ptr, *i_end, *o_ptr, *o_end, input_end; ++ unsigned int bit_buffer, bits_left, inbuf_size; ++ ++ ++ /* huffman code lengths */ ++ unsigned char LITERAL_len[MSZIP_LITERAL_MAXSYMBOLS]; ++ unsigned char DISTANCE_len[MSZIP_DISTANCE_MAXSYMBOLS]; ++ ++ /* huffman decoding tables */ ++ unsigned short LITERAL_table [MSZIP_LITERAL_TABLESIZE]; ++ unsigned short DISTANCE_table[MSZIP_DISTANCE_TABLESIZE]; ++ ++ /* 32kb history window */ ++ unsigned char window[MSZIP_FRAME_SIZE]; ++}; ++ ++/* allocates MS-ZIP decompression stream for decoding the given stream. ++ * ++ * - uses system->alloc() to allocate memory ++ * ++ * - returns NULL if not enough memory ++ * ++ * - input_buffer_size is how many bytes to use as an input bitstream buffer ++ * ++ * - if repair_mode is non-zero, errors in decompression will be skipped ++ * and 'holes' left will be filled with zero bytes. This allows at least ++ * a partial recovery of erroneous data. ++ */ ++extern struct mszipd_stream *mszipd_init(struct mspack_system *system, ++ struct mspack_file *input, ++ struct mspack_file *output, ++ int input_buffer_size, ++ int repair_mode); ++ ++/* decompresses, or decompresses more of, an MS-ZIP stream. ++ * ++ * - out_bytes of data will be decompressed and the function will return ++ * with an MSPACK_ERR_OK return code. ++ * ++ * - decompressing will stop as soon as out_bytes is reached. if the true ++ * amount of bytes decoded spills over that amount, they will be kept for ++ * a later invocation of mszipd_decompress(). ++ * ++ * - the output bytes will be passed to the system->write() function given in ++ * mszipd_init(), using the output file handle given in mszipd_init(). More ++ * than one call may be made to system->write() ++ * ++ * - MS-ZIP will read input bytes as necessary using the system->read() ++ * function given in mszipd_init(), using the input file handle given in ++ * mszipd_init(). This will continue until system->read() returns 0 bytes, ++ * or an error. ++ */ ++extern int mszipd_decompress(struct mszipd_stream *zip, off_t out_bytes); ++ ++/* decompresses an entire MS-ZIP stream in a KWAJ file. Acts very much ++ * like mszipd_decompress(), but doesn't take an out_bytes parameter ++ */ ++extern int mszipd_decompress_kwaj(struct mszipd_stream *zip); ++ ++/* frees all stream associated with an MS-ZIP data stream ++ * ++ * - calls system->free() using the system pointer given in mszipd_init() ++ */ ++void mszipd_free(struct mszipd_stream *zip); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/mszipc.c b/libclamav/libmspack-0.4alpha/mspack/mszipc.c +new file mode 100644 +index 000000000000..2f1ecb2e8757 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/mszipc.c +@@ -0,0 +1,18 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * The deflate method was created by Phil Katz. MSZIP is equivalent to the ++ * deflate method. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* MS-ZIP compression implementation */ ++ ++#include ++#include ++ ++/* todo */ +diff --git a/libclamav/libmspack-0.4alpha/mspack/mszipd.c b/libclamav/libmspack-0.4alpha/mspack/mszipd.c +new file mode 100644 +index 000000000000..cd85bb9fa1ca +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/mszipd.c +@@ -0,0 +1,514 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2010 Stuart Caie. ++ * ++ * The deflate method was created by Phil Katz. MSZIP is equivalent to the ++ * deflate method. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* MS-ZIP decompression implementation. */ ++ ++#include ++#include ++ ++/* import bit-reading macros and code */ ++#define BITS_TYPE struct mszipd_stream ++#define BITS_VAR zip ++#define BITS_ORDER_LSB ++#define BITS_LSB_TABLE ++#define READ_BYTES do { \ ++ READ_IF_NEEDED; \ ++ INJECT_BITS(*i_ptr++, 8); \ ++} while (0) ++#include ++ ++/* import huffman macros and code */ ++#define TABLEBITS(tbl) MSZIP_##tbl##_TABLEBITS ++#define MAXSYMBOLS(tbl) MSZIP_##tbl##_MAXSYMBOLS ++#define HUFF_TABLE(tbl,idx) zip->tbl##_table[idx] ++#define HUFF_LEN(tbl,idx) zip->tbl##_len[idx] ++#define HUFF_ERROR return INF_ERR_HUFFSYM ++#include ++ ++#define FLUSH_IF_NEEDED do { \ ++ if (zip->window_posn == MSZIP_FRAME_SIZE) { \ ++ if (zip->flush_window(zip, MSZIP_FRAME_SIZE)) { \ ++ return INF_ERR_FLUSH; \ ++ } \ ++ zip->window_posn = 0; \ ++ } \ ++} while (0) ++ ++/* match lengths for literal codes 257.. 285 */ ++static const unsigned short lit_lengths[29] = { ++ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, ++ 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ++}; ++ ++/* match offsets for distance codes 0 .. 29 */ ++static const unsigned short dist_offsets[30] = { ++ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, ++ 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ++}; ++ ++/* extra bits required for literal codes 257.. 285 */ ++static const unsigned char lit_extrabits[29] = { ++ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, ++ 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 ++}; ++ ++/* extra bits required for distance codes 0 .. 29 */ ++static const unsigned char dist_extrabits[30] = { ++ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, ++ 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ++}; ++ ++/* the order of the bit length Huffman code lengths */ ++static const unsigned char bitlen_order[19] = { ++ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ++}; ++ ++/* inflate() error codes */ ++#define INF_ERR_BLOCKTYPE (-1) /* unknown block type */ ++#define INF_ERR_COMPLEMENT (-2) /* block size complement mismatch */ ++#define INF_ERR_FLUSH (-3) /* error from flush_window() callback */ ++#define INF_ERR_BITBUF (-4) /* too many bits in bit buffer */ ++#define INF_ERR_SYMLENS (-5) /* too many symbols in blocktype 2 header */ ++#define INF_ERR_BITLENTBL (-6) /* failed to build bitlens huffman table */ ++#define INF_ERR_LITERALTBL (-7) /* failed to build literals huffman table */ ++#define INF_ERR_DISTANCETBL (-8) /* failed to build distance huffman table */ ++#define INF_ERR_BITOVERRUN (-9) /* bitlen RLE code goes over table size */ ++#define INF_ERR_BADBITLEN (-10) /* invalid bit-length code */ ++#define INF_ERR_LITCODE (-11) /* out-of-range literal code */ ++#define INF_ERR_DISTCODE (-12) /* out-of-range distance code */ ++#define INF_ERR_DISTANCE (-13) /* somehow, distance is beyond 32k */ ++#define INF_ERR_HUFFSYM (-14) /* out of bits decoding huffman symbol */ ++ ++static int zip_read_lens(struct mszipd_stream *zip) { ++ /* for the bit buffer and huffman decoding */ ++ register unsigned int bit_buffer; ++ register int bits_left; ++ unsigned char *i_ptr, *i_end; ++ ++ /* bitlen Huffman codes -- immediate lookup, 7 bit max code length */ ++ unsigned short bl_table[(1 << 7)]; ++ unsigned char bl_len[19]; ++ ++ unsigned char lens[MSZIP_LITERAL_MAXSYMBOLS + MSZIP_DISTANCE_MAXSYMBOLS]; ++ unsigned int lit_codes, dist_codes, code, last_code=0, bitlen_codes, i, run; ++ ++ RESTORE_BITS; ++ ++ /* read the number of codes */ ++ READ_BITS(lit_codes, 5); lit_codes += 257; ++ READ_BITS(dist_codes, 5); dist_codes += 1; ++ READ_BITS(bitlen_codes, 4); bitlen_codes += 4; ++ if (lit_codes > MSZIP_LITERAL_MAXSYMBOLS) return INF_ERR_SYMLENS; ++ if (dist_codes > MSZIP_DISTANCE_MAXSYMBOLS) return INF_ERR_SYMLENS; ++ ++ /* read in the bit lengths in their unusual order */ ++ for (i = 0; i < bitlen_codes; i++) READ_BITS(bl_len[bitlen_order[i]], 3); ++ while (i < 19) bl_len[bitlen_order[i++]] = 0; ++ ++ /* create decoding table with an immediate lookup */ ++ if (make_decode_table(19, 7, &bl_len[0], &bl_table[0])) { ++ return INF_ERR_BITLENTBL; ++ } ++ ++ /* read literal / distance code lengths */ ++ for (i = 0; i < (lit_codes + dist_codes); i++) { ++ /* single-level huffman lookup */ ++ ENSURE_BITS(7); ++ code = bl_table[PEEK_BITS(7)]; ++ REMOVE_BITS(bl_len[code]); ++ ++ if (code < 16) lens[i] = last_code = code; ++ else { ++ switch (code) { ++ case 16: READ_BITS(run, 2); run += 3; code = last_code; break; ++ case 17: READ_BITS(run, 3); run += 3; code = 0; break; ++ case 18: READ_BITS(run, 7); run += 11; code = 0; break; ++ default: D(("bad code!: %u", code)) return INF_ERR_BADBITLEN; ++ } ++ if ((i + run) > (lit_codes + dist_codes)) return INF_ERR_BITOVERRUN; ++ while (run--) lens[i++] = code; ++ i--; ++ } ++ } ++ ++ /* copy LITERAL code lengths and clear any remaining */ ++ i = lit_codes; ++ zip->sys->copy(&lens[0], &zip->LITERAL_len[0], i); ++ while (i < MSZIP_LITERAL_MAXSYMBOLS) zip->LITERAL_len[i++] = 0; ++ ++ i = dist_codes; ++ zip->sys->copy(&lens[lit_codes], &zip->DISTANCE_len[0], i); ++ while (i < MSZIP_DISTANCE_MAXSYMBOLS) zip->DISTANCE_len[i++] = 0; ++ ++ STORE_BITS; ++ return 0; ++} ++ ++/* a clean implementation of RFC 1951 / inflate */ ++static int inflate(struct mszipd_stream *zip) { ++ unsigned int last_block, block_type, distance, length, this_run, i; ++ ++ /* for the bit buffer and huffman decoding */ ++ register unsigned int bit_buffer; ++ register int bits_left; ++ register unsigned short sym; ++ unsigned char *i_ptr, *i_end; ++ ++ RESTORE_BITS; ++ ++ do { ++ /* read in last block bit */ ++ READ_BITS(last_block, 1); ++ ++ /* read in block type */ ++ READ_BITS(block_type, 2); ++ ++ if (block_type == 0) { ++ /* uncompressed block */ ++ unsigned char lens_buf[4]; ++ ++ /* go to byte boundary */ ++ i = bits_left & 7; REMOVE_BITS(i); ++ ++ /* read 4 bytes of data, emptying the bit-buffer if necessary */ ++ for (i = 0; (bits_left >= 8); i++) { ++ if (i == 4) return INF_ERR_BITBUF; ++ lens_buf[i] = PEEK_BITS(8); ++ REMOVE_BITS(8); ++ } ++ if (bits_left != 0) return INF_ERR_BITBUF; ++ while (i < 4) { ++ READ_IF_NEEDED; ++ lens_buf[i++] = *i_ptr++; ++ } ++ ++ /* get the length and its complement */ ++ length = lens_buf[0] | (lens_buf[1] << 8); ++ i = lens_buf[2] | (lens_buf[3] << 8); ++ if (length != (~i & 0xFFFF)) return INF_ERR_COMPLEMENT; ++ ++ /* read and copy the uncompressed data into the window */ ++ while (length > 0) { ++ READ_IF_NEEDED; ++ ++ this_run = length; ++ if (this_run > (unsigned int)(i_end - i_ptr)) this_run = i_end - i_ptr; ++ if (this_run > (MSZIP_FRAME_SIZE - zip->window_posn)) ++ this_run = MSZIP_FRAME_SIZE - zip->window_posn; ++ ++ zip->sys->copy(i_ptr, &zip->window[zip->window_posn], this_run); ++ zip->window_posn += this_run; ++ i_ptr += this_run; ++ length -= this_run; ++ FLUSH_IF_NEEDED; ++ } ++ } ++ else if ((block_type == 1) || (block_type == 2)) { ++ /* Huffman-compressed LZ77 block */ ++ unsigned int match_posn, code; ++ ++ if (block_type == 1) { ++ /* block with fixed Huffman codes */ ++ i = 0; ++ while (i < 144) zip->LITERAL_len[i++] = 8; ++ while (i < 256) zip->LITERAL_len[i++] = 9; ++ while (i < 280) zip->LITERAL_len[i++] = 7; ++ while (i < 288) zip->LITERAL_len[i++] = 8; ++ for (i = 0; i < 32; i++) zip->DISTANCE_len[i] = 5; ++ } ++ else { ++ /* block with dynamic Huffman codes */ ++ STORE_BITS; ++ if ((i = zip_read_lens(zip))) return i; ++ RESTORE_BITS; ++ } ++ ++ /* now huffman lengths are read for either kind of block, ++ * create huffman decoding tables */ ++ if (make_decode_table(MSZIP_LITERAL_MAXSYMBOLS, MSZIP_LITERAL_TABLEBITS, ++ &zip->LITERAL_len[0], &zip->LITERAL_table[0])) ++ { ++ return INF_ERR_LITERALTBL; ++ } ++ ++ if (make_decode_table(MSZIP_DISTANCE_MAXSYMBOLS,MSZIP_DISTANCE_TABLEBITS, ++ &zip->DISTANCE_len[0], &zip->DISTANCE_table[0])) ++ { ++ return INF_ERR_DISTANCETBL; ++ } ++ ++ /* decode forever until end of block code */ ++ for (;;) { ++ READ_HUFFSYM(LITERAL, code); ++ if (code < 256) { ++ zip->window[zip->window_posn++] = (unsigned char) code; ++ FLUSH_IF_NEEDED; ++ } ++ else if (code == 256) { ++ /* END OF BLOCK CODE: loop break point */ ++ break; ++ } ++ else { ++ code -= 257; /* codes 257-285 are matches */ ++ if (code >= 29) return INF_ERR_LITCODE; /* codes 286-287 are illegal */ ++ READ_BITS_T(length, lit_extrabits[code]); ++ length += lit_lengths[code]; ++ ++ READ_HUFFSYM(DISTANCE, code); ++ if (code > 30) return INF_ERR_DISTCODE; ++ READ_BITS_T(distance, dist_extrabits[code]); ++ distance += dist_offsets[code]; ++ ++ /* match position is window position minus distance. If distance ++ * is more than window position numerically, it must 'wrap ++ * around' the frame size. */ ++ match_posn = ((distance > zip->window_posn) ? MSZIP_FRAME_SIZE : 0) ++ + zip->window_posn - distance; ++ ++ /* copy match */ ++ if (length < 12) { ++ /* short match, use slower loop but no loop setup code */ ++ while (length--) { ++ zip->window[zip->window_posn++] = zip->window[match_posn++]; ++ match_posn &= MSZIP_FRAME_SIZE - 1; ++ FLUSH_IF_NEEDED; ++ } ++ } ++ else { ++ /* longer match, use faster loop but with setup expense */ ++ unsigned char *runsrc, *rundest; ++ do { ++ this_run = length; ++ if ((match_posn + this_run) > MSZIP_FRAME_SIZE) ++ this_run = MSZIP_FRAME_SIZE - match_posn; ++ if ((zip->window_posn + this_run) > MSZIP_FRAME_SIZE) ++ this_run = MSZIP_FRAME_SIZE - zip->window_posn; ++ ++ rundest = &zip->window[zip->window_posn]; zip->window_posn += this_run; ++ runsrc = &zip->window[match_posn]; match_posn += this_run; ++ length -= this_run; ++ while (this_run--) *rundest++ = *runsrc++; ++ if (match_posn == MSZIP_FRAME_SIZE) match_posn = 0; ++ FLUSH_IF_NEEDED; ++ } while (length > 0); ++ } ++ ++ } /* else (code >= 257) */ ++ ++ } /* for(;;) -- break point at 'code == 256' */ ++ } ++ else { ++ /* block_type == 3 -- bad block type */ ++ return INF_ERR_BLOCKTYPE; ++ } ++ } while (!last_block); ++ ++ /* flush the remaining data */ ++ if (zip->window_posn) { ++ if (zip->flush_window(zip, zip->window_posn)) return INF_ERR_FLUSH; ++ } ++ STORE_BITS; ++ ++ /* return success */ ++ return 0; ++} ++ ++/* inflate() calls this whenever the window should be flushed. As ++ * MSZIP only expands to the size of the window, the implementation used ++ * simply keeps track of the amount of data flushed, and if more than 32k ++ * is flushed, an error is raised. ++ */ ++static int mszipd_flush_window(struct mszipd_stream *zip, ++ unsigned int data_flushed) ++{ ++ zip->bytes_output += data_flushed; ++ if (zip->bytes_output > MSZIP_FRAME_SIZE) { ++ D(("overflow: %u bytes flushed, total is now %u", ++ data_flushed, zip->bytes_output)) ++ return 1; ++ } ++ return 0; ++} ++ ++struct mszipd_stream *mszipd_init(struct mspack_system *system, ++ struct mspack_file *input, ++ struct mspack_file *output, ++ int input_buffer_size, ++ int repair_mode) ++{ ++ struct mszipd_stream *zip; ++ ++ if (!system) return NULL; ++ ++ input_buffer_size = (input_buffer_size + 1) & -2; ++ if (!input_buffer_size) return NULL; ++ ++ /* allocate decompression state */ ++ if (!(zip = (struct mszipd_stream *) system->alloc(system, sizeof(struct mszipd_stream)))) { ++ return NULL; ++ } ++ ++ /* allocate input buffer */ ++ zip->inbuf = (unsigned char *) system->alloc(system, (size_t) input_buffer_size); ++ if (!zip->inbuf) { ++ system->free(zip); ++ return NULL; ++ } ++ ++ /* initialise decompression state */ ++ zip->sys = system; ++ zip->input = input; ++ zip->output = output; ++ zip->inbuf_size = input_buffer_size; ++ zip->input_end = 0; ++ zip->error = MSPACK_ERR_OK; ++ zip->repair_mode = repair_mode; ++ zip->flush_window = &mszipd_flush_window; ++ ++ zip->i_ptr = zip->i_end = &zip->inbuf[0]; ++ zip->o_ptr = zip->o_end = NULL; ++ zip->bit_buffer = 0; zip->bits_left = 0; ++ return zip; ++} ++ ++int mszipd_decompress(struct mszipd_stream *zip, off_t out_bytes) { ++ /* for the bit buffer */ ++ register unsigned int bit_buffer; ++ register int bits_left; ++ unsigned char *i_ptr, *i_end; ++ ++ int i, state, error; ++ ++ /* easy answers */ ++ if (!zip || (out_bytes < 0)) return MSPACK_ERR_ARGS; ++ if (zip->error) return zip->error; ++ ++ /* flush out any stored-up bytes before we begin */ ++ i = zip->o_end - zip->o_ptr; ++ if ((off_t) i > out_bytes) i = (int) out_bytes; ++ if (i) { ++ if (zip->sys->write(zip->output, zip->o_ptr, i) != i) { ++ return zip->error = MSPACK_ERR_WRITE; ++ } ++ zip->o_ptr += i; ++ out_bytes -= i; ++ } ++ if (out_bytes == 0) return MSPACK_ERR_OK; ++ ++ ++ while (out_bytes > 0) { ++ /* unpack another block */ ++ RESTORE_BITS; ++ ++ /* skip to next read 'CK' header */ ++ i = bits_left & 7; REMOVE_BITS(i); /* align to bytestream */ ++ state = 0; ++ do { ++ READ_BITS(i, 8); ++ if (i == 'C') state = 1; ++ else if ((state == 1) && (i == 'K')) state = 2; ++ else state = 0; ++ } while (state != 2); ++ ++ /* inflate a block, repair and realign if necessary */ ++ zip->window_posn = 0; ++ zip->bytes_output = 0; ++ STORE_BITS; ++ if ((error = inflate(zip))) { ++ D(("inflate error %d", error)) ++ if (zip->repair_mode) { ++ /* recover partially-inflated buffers */ ++ if (zip->bytes_output == 0 && zip->window_posn > 0) { ++ zip->flush_window(zip, zip->window_posn); ++ } ++ zip->sys->message(NULL, "MSZIP error, %u bytes of data lost.", ++ MSZIP_FRAME_SIZE - zip->bytes_output); ++ for (i = zip->bytes_output; i < MSZIP_FRAME_SIZE; i++) { ++ zip->window[i] = '\0'; ++ } ++ zip->bytes_output = MSZIP_FRAME_SIZE; ++ } ++ else { ++ return zip->error = (error > 0) ? error : MSPACK_ERR_DECRUNCH; ++ } ++ } ++ zip->o_ptr = &zip->window[0]; ++ zip->o_end = &zip->o_ptr[zip->bytes_output]; ++ ++ /* write a frame */ ++ i = (out_bytes < (off_t)zip->bytes_output) ? ++ (int)out_bytes : zip->bytes_output; ++ if (zip->sys->write(zip->output, zip->o_ptr, i) != i) { ++ return zip->error = MSPACK_ERR_WRITE; ++ } ++ ++ /* mspack errors (i.e. read errors) are fatal and can't be recovered */ ++ if ((error > 0) && zip->repair_mode) return error; ++ ++ zip->o_ptr += i; ++ out_bytes -= i; ++ } ++ ++ if (out_bytes) { ++ D(("bytes left to output")) ++ return zip->error = MSPACK_ERR_DECRUNCH; ++ } ++ return MSPACK_ERR_OK; ++} ++ ++int mszipd_decompress_kwaj(struct mszipd_stream *zip) { ++ /* for the bit buffer */ ++ register unsigned int bit_buffer; ++ register int bits_left; ++ unsigned char *i_ptr, *i_end; ++ ++ int i, error, block_len; ++ ++ /* unpack blocks until block_len == 0 */ ++ for (;;) { ++ RESTORE_BITS; ++ ++ /* align to bytestream, read block_len */ ++ i = bits_left & 7; REMOVE_BITS(i); ++ READ_BITS(block_len, 8); ++ READ_BITS(i, 8); block_len |= i << 8; ++ ++ if (block_len == 0) break; ++ ++ /* read "CK" header */ ++ READ_BITS(i, 8); if (i != 'C') return MSPACK_ERR_DATAFORMAT; ++ READ_BITS(i, 8); if (i != 'K') return MSPACK_ERR_DATAFORMAT; ++ ++ /* inflate block */ ++ zip->window_posn = 0; ++ zip->bytes_output = 0; ++ STORE_BITS; ++ if ((error = inflate(zip))) { ++ D(("inflate error %d", error)) ++ return zip->error = (error > 0) ? error : MSPACK_ERR_DECRUNCH; ++ } ++ ++ /* write inflated block */ ++ if (zip->sys->write(zip->output, &zip->window[0], zip->bytes_output) ++ != zip->bytes_output) return zip->error = MSPACK_ERR_WRITE; ++ } ++ return MSPACK_ERR_OK; ++} ++ ++void mszipd_free(struct mszipd_stream *zip) { ++ struct mspack_system *sys; ++ if (zip) { ++ sys = zip->sys; ++ sys->free(zip->inbuf); ++ sys->free(zip); ++ } ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/oab.h b/libclamav/libmspack-0.4alpha/mspack/oab.h +new file mode 100644 +index 000000000000..565220888097 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/oab.h +@@ -0,0 +1,60 @@ ++/* This file is part of libmspack. ++ * © 2013 Intel Corporation ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_OAB_H ++#define MSPACK_OAB_H 1 ++ ++#include ++ ++/* generic OAB definitions */ ++ ++/* OAB compression definitions */ ++ ++struct msoab_compressor_p { ++ struct msoab_compressor base; ++ struct mspack_system *system; ++ /* todo */ ++}; ++ ++/* OAB decompression definitions */ ++ ++struct msoab_decompressor_p { ++ struct msoab_decompressor base; ++ struct mspack_system *system; ++ /* todo */ ++}; ++ ++#define oabhead_VersionHi (0x0000) ++#define oabhead_VersionLo (0x0004) ++#define oabhead_BlockMax (0x0008) ++#define oabhead_TargetSize (0x000c) ++#define oabhead_SIZEOF (0x0010) ++ ++#define oabblk_Flags (0x0000) ++#define oabblk_CompSize (0x0004) ++#define oabblk_UncompSize (0x0008) ++#define oabblk_CRC (0x000c) ++#define oabblk_SIZEOF (0x0010) ++ ++#define patchhead_VersionHi (0x0000) ++#define patchhead_VersionLo (0x0004) ++#define patchhead_BlockMax (0x0008) ++#define patchhead_SourceSize (0x000c) ++#define patchhead_TargetSize (0x0010) ++#define patchhead_SourceCRC (0x0014) ++#define patchhead_TargetCRC (0x0018) ++#define patchhead_SIZEOF (0x001c) ++ ++#define patchblk_PatchSize (0x0000) ++#define patchblk_TargetSize (0x0004) ++#define patchblk_SourceSize (0x0008) ++#define patchblk_CRC (0x000c) ++#define patchblk_SIZEOF (0x0010) ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/oabc.c b/libclamav/libmspack-0.4alpha/mspack/oabc.c +new file mode 100644 +index 000000000000..327ce61ba12c +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/oabc.c +@@ -0,0 +1,24 @@ ++/* This file is part of libmspack. ++ * © 2013 Intel Corporation ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* OAB compression implementation */ ++ ++#include ++#include ++ ++struct msoab_compressor * ++ mspack_create_oab_compressor(struct mspack_system *sys) ++{ ++ /* todo */ ++ return NULL; ++} ++ ++void mspack_destroy_oab_compressor(struct msoab_compressor *self) { ++ /* todo */ ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/oabd.c b/libclamav/libmspack-0.4alpha/mspack/oabd.c +new file mode 100644 +index 000000000000..e4b9e4bbc084 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/oabd.c +@@ -0,0 +1,408 @@ ++/* This file is part of libmspack. ++ * © 2013 Intel Corporation ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* The Exchange Online Addressbook (OAB or sometimes OAL) is distributed ++ * as a .LZX file in one of two forms. Either a "full download" containing ++ * the entire address list, or an incremental binary patch which should be ++ * applied to a previous version of the full decompressed data. ++ * ++ * The contents and format of the decompressed OAB are not handled here. ++ * ++ * For a complete description of the format, see the MSDN site: ++ * ++ * http://msdn.microsoft.com/en-us/library/cc463914 - [MS-OXOAB].pdf ++ * http://msdn.microsoft.com/en-us/library/cc483133 - [MS-PATCH].pdf ++ */ ++ ++/* OAB decompression implementation */ ++ ++#include ++#include ++#include ++#include ++ ++/* prototypes */ ++static int oabd_decompress(struct msoab_decompressor *self, const char *input, ++ const char *output); ++static int oabd_decompress_incremental(struct msoab_decompressor *self, ++ const char *input, const char *base, ++ const char *output); ++ ++struct msoab_decompressor * ++ mspack_create_oab_decompressor(struct mspack_system *sys) ++{ ++ struct msoab_decompressor_p *self = NULL; ++ ++ if (!sys) sys = mspack_default_system; ++ if (!mspack_valid_system(sys)) return NULL; ++ ++ if ((self = (struct msoab_decompressor_p *) sys->alloc(sys, sizeof(struct msoab_decompressor_p)))) { ++ self->base.decompress = &oabd_decompress; ++ self->base.decompress_incremental = &oabd_decompress_incremental; ++ self->system = sys; ++ } ++ return (struct msoab_decompressor *) self; ++} ++ ++void mspack_destroy_oab_decompressor(struct msoab_decompressor *base) { ++ struct msoab_decompressor_p *self = (struct msoab_decompressor_p *)base; ++ if (self) { ++ struct mspack_system *sys = self->system; ++ sys->free(self); ++ } ++} ++ ++struct oabd_file { ++ struct mspack_system *orig_sys; ++ struct mspack_file *orig_file; ++ unsigned int crc; ++ size_t available; ++}; ++ ++ ++static int oabd_sys_read (struct mspack_file *base_file, void *buf, int size) ++{ ++ struct oabd_file *file = (struct oabd_file *)base_file; ++ int bytes_read; ++ ++ if ((size_t)size > file->available) ++ size = file->available; ++ ++ bytes_read = file->orig_sys->read(file->orig_file, buf, size); ++ if (bytes_read < 0) ++ return bytes_read; ++ ++ file->available -= bytes_read; ++ return bytes_read; ++} ++ ++static int oabd_sys_write (struct mspack_file *base_file, void *buf, int size) ++{ ++ struct oabd_file *file = (struct oabd_file *)base_file; ++ int bytes_written = file->orig_sys->write(file->orig_file, buf, size); ++ ++ if (bytes_written > 0) ++ file->crc = crc32(file->crc, buf, bytes_written); ++ ++ return bytes_written; ++} ++ ++static int oabd_decompress(struct msoab_decompressor *_self, const char *input, ++ const char *output) ++{ ++ struct msoab_decompressor_p *self = (struct msoab_decompressor_p *) _self; ++ struct mspack_system *sys; ++ struct mspack_file *infh = NULL; ++ struct mspack_file *outfh = NULL; ++ unsigned char *buf = NULL; ++ unsigned char hdrbuf[oabhead_SIZEOF]; ++ unsigned int block_max, target_size; ++ struct lzxd_stream *lzx = NULL; ++ struct mspack_system oabd_sys; ++ struct oabd_file in_ofh, out_ofh; ++ unsigned int window_bits; ++ int ret = MSPACK_ERR_OK; ++ ++ if (!self) return MSPACK_ERR_ARGS; ++ sys = self->system; ++ ++ infh = sys->open(sys, input, MSPACK_SYS_OPEN_READ); ++ if (!infh) { ++ ret = MSPACK_ERR_OPEN; ++ goto out; ++ } ++ ++ if (sys->read(infh, hdrbuf, oabhead_SIZEOF) != oabhead_SIZEOF) { ++ ret = MSPACK_ERR_READ; ++ goto out; ++ } ++ ++ if (EndGetI32(&hdrbuf[oabhead_VersionHi]) != 3 || ++ EndGetI32(&hdrbuf[oabhead_VersionLo]) != 1) { ++ ret = MSPACK_ERR_SIGNATURE; ++ goto out; ++ } ++ ++ block_max = EndGetI32(&hdrbuf[oabhead_BlockMax]); ++ target_size = EndGetI32(&hdrbuf[oabhead_TargetSize]); ++ ++ /* We use it for reading block headers too */ ++ if (block_max < oabblk_SIZEOF) ++ block_max = oabblk_SIZEOF; ++ ++ outfh = sys->open(sys, output, MSPACK_SYS_OPEN_WRITE); ++ if (!outfh) { ++ ret = MSPACK_ERR_OPEN; ++ goto out; ++ } ++ ++ buf = sys->alloc(sys, block_max); ++ if (!buf) { ++ ret = MSPACK_ERR_NOMEMORY; ++ goto out; ++ } ++ ++ oabd_sys = *sys; ++ oabd_sys.read = oabd_sys_read; ++ oabd_sys.write = oabd_sys_write; ++ ++ in_ofh.orig_sys = sys; ++ in_ofh.orig_file = infh; ++ ++ out_ofh.orig_sys = sys; ++ out_ofh.orig_file = outfh; ++ ++ while (target_size) { ++ unsigned int blk_csize, blk_dsize, blk_crc, blk_flags; ++ ++ if (sys->read(infh, buf, oabblk_SIZEOF) != oabblk_SIZEOF) { ++ ret = MSPACK_ERR_READ; ++ goto out; ++ } ++ blk_flags = EndGetI32(&buf[oabblk_Flags]); ++ blk_csize = EndGetI32(&buf[oabblk_CompSize]); ++ blk_dsize = EndGetI32(&buf[oabblk_UncompSize]); ++ blk_crc = EndGetI32(&buf[oabblk_CRC]); ++ ++ if (blk_dsize > block_max || blk_dsize > target_size || blk_flags > 1) { ++ ret = MSPACK_ERR_DATAFORMAT; ++ goto out; ++ } ++ ++ if (!blk_flags) { ++ /* Uncompressed block */ ++ if (blk_dsize != blk_csize) { ++ ret = MSPACK_ERR_DATAFORMAT; ++ goto out; ++ } ++ if (sys->read(infh, buf, blk_dsize) != (int)blk_dsize) { ++ ret = MSPACK_ERR_READ; ++ goto out; ++ } ++ if (sys->write(outfh, buf, blk_dsize) != (int)blk_dsize) { ++ ret = MSPACK_ERR_WRITE; ++ goto out; ++ } ++ } else { ++ /* LZX compressed block */ ++ window_bits = 17; ++ ++ while (window_bits < 25 && (1U << window_bits) < blk_dsize) ++ window_bits++; ++ ++ in_ofh.available = blk_csize; ++ out_ofh.crc = 0xffffffff; ++ ++ lzx = lzxd_init(&oabd_sys, (void *)&in_ofh, (void *)&out_ofh, window_bits, ++ 0, 4096, blk_dsize, 1); ++ if (!lzx) { ++ ret = MSPACK_ERR_NOMEMORY; ++ goto out; ++ } ++ ++ ret = lzxd_decompress(lzx, blk_dsize); ++ if (ret != MSPACK_ERR_OK) ++ goto out; ++ ++ lzxd_free(lzx); ++ lzx = NULL; ++ ++ /* Consume any trailing padding bytes before the next block */ ++ while (in_ofh.available) { ++ int count = block_max; ++ if ((size_t)count > in_ofh.available) ++ count = in_ofh.available; ++ ++ count = sys->read(infh, buf, count); ++ if (count < 0) { ++ ret = MSPACK_ERR_READ; ++ goto out; ++ } ++ in_ofh.available -= count; ++ } ++ ++ if (out_ofh.crc != blk_crc) { ++ ret = MSPACK_ERR_CHECKSUM; ++ goto out; ++ } ++ } ++ target_size -= blk_dsize; ++ } ++ ++ out: ++ if (lzx) ++ lzxd_free(lzx); ++ if (buf) ++ sys->free(buf); ++ if (outfh) ++ sys->close(outfh); ++ if (infh) ++ sys->close(infh); ++ ++ return ret; ++} ++ ++static int oabd_decompress_incremental(struct msoab_decompressor *_self, ++ const char *input, const char *base, ++ const char *output) ++{ ++ struct msoab_decompressor_p *self = (struct msoab_decompressor_p *) _self; ++ struct mspack_system *sys; ++ struct mspack_file *infh = NULL; ++ struct mspack_file *basefh = NULL; ++ struct mspack_file *outfh = NULL; ++ unsigned char *buf = NULL; ++ unsigned char hdrbuf[patchhead_SIZEOF]; ++ unsigned int block_max, source_size, target_size, source_crc, target_crc; ++ struct lzxd_stream *lzx = NULL; ++ struct mspack_system oabd_sys; ++ struct oabd_file in_ofh, out_ofh; ++ unsigned int window_bits, window_size; ++ int ret = MSPACK_ERR_OK; ++ ++ if (!self) return MSPACK_ERR_ARGS; ++ sys = self->system; ++ ++ infh = sys->open(sys, input, MSPACK_SYS_OPEN_READ); ++ if (!infh) { ++ ret = MSPACK_ERR_OPEN; ++ goto out; ++ } ++ ++ if (sys->read(infh, hdrbuf, patchhead_SIZEOF) != patchhead_SIZEOF) { ++ ret = MSPACK_ERR_READ; ++ goto out; ++ } ++ ++ if (EndGetI32(&hdrbuf[patchhead_VersionHi]) != 3 || ++ EndGetI32(&hdrbuf[patchhead_VersionLo]) != 2) { ++ ret = MSPACK_ERR_SIGNATURE; ++ goto out; ++ } ++ ++ block_max = EndGetI32(&hdrbuf[patchhead_BlockMax]); ++ source_size = EndGetI32(&hdrbuf[patchhead_SourceSize]); ++ target_size = EndGetI32(&hdrbuf[patchhead_TargetSize]); ++ source_crc = EndGetI32(&hdrbuf[patchhead_SourceCRC]); ++ target_crc = EndGetI32(&hdrbuf[patchhead_TargetCRC]); ++ ++ /* We use it for reading block headers too */ ++ if (block_max < patchblk_SIZEOF) ++ block_max = patchblk_SIZEOF; ++ ++ basefh = sys->open(sys, base, MSPACK_SYS_OPEN_READ); ++ if (!basefh) { ++ ret = MSPACK_ERR_OPEN; ++ goto out; ++ } ++ ++ outfh = sys->open(sys, output, MSPACK_SYS_OPEN_WRITE); ++ if (!outfh) { ++ ret = MSPACK_ERR_OPEN; ++ goto out; ++ } ++ ++ buf = sys->alloc(sys, block_max); ++ if (!buf) { ++ ret = MSPACK_ERR_NOMEMORY; ++ goto out; ++ } ++ ++ oabd_sys = *sys; ++ oabd_sys.read = oabd_sys_read; ++ oabd_sys.write = oabd_sys_write; ++ ++ in_ofh.orig_sys = sys; ++ in_ofh.orig_file = infh; ++ ++ out_ofh.orig_sys = sys; ++ out_ofh.orig_file = outfh; ++ ++ while (target_size) { ++ unsigned int blk_csize, blk_dsize, blk_ssize, blk_crc; ++ ++ if (sys->read(infh, buf, patchblk_SIZEOF) != patchblk_SIZEOF) { ++ ret = MSPACK_ERR_READ; ++ goto out; ++ } ++ blk_csize = EndGetI32(&buf[patchblk_PatchSize]); ++ blk_dsize = EndGetI32(&buf[patchblk_TargetSize]); ++ blk_ssize = EndGetI32(&buf[patchblk_SourceSize]); ++ blk_crc = EndGetI32(&buf[patchblk_CRC]); ++ ++ if (blk_dsize > block_max || blk_dsize > target_size || ++ blk_ssize > block_max) { ++ ret = MSPACK_ERR_DATAFORMAT; ++ goto out; ++ } ++ ++ ++ window_size = (blk_ssize + 32767) & ~32767; ++ window_size += blk_dsize; ++ window_bits = 17; ++ ++ while (window_bits < 25 && (1U << window_bits) < window_size) ++ window_bits++; ++ ++ in_ofh.available = blk_csize; ++ out_ofh.crc = 0xffffffff; ++ ++ lzx = lzxd_init(&oabd_sys, (void *)&in_ofh, (void *)&out_ofh, window_bits, ++ 0, 4096, blk_dsize, 1); ++ if (!lzx) { ++ ret = MSPACK_ERR_NOMEMORY; ++ goto out; ++ } ++ ret = lzxd_set_reference_data(lzx, sys, basefh, blk_ssize); ++ if (ret != MSPACK_ERR_OK) ++ goto out; ++ ++ ret = lzxd_decompress(lzx, blk_dsize); ++ if (ret != MSPACK_ERR_OK) ++ goto out; ++ ++ lzxd_free(lzx); ++ lzx = NULL; ++ ++ /* Consume any trailing padding bytes before the next block */ ++ while (in_ofh.available) { ++ int count = block_max; ++ if ((size_t)count > in_ofh.available) ++ count = in_ofh.available; ++ ++ count = sys->read(infh, buf, count); ++ if (count < 0) { ++ ret = MSPACK_ERR_READ; ++ goto out; ++ } ++ in_ofh.available -= count; ++ } ++ ++ if (out_ofh.crc != blk_crc) { ++ ret = MSPACK_ERR_CHECKSUM; ++ goto out; ++ } ++ ++ target_size -= blk_dsize; ++ } ++ ++ out: ++ if (lzx) ++ lzxd_free(lzx); ++ if (buf) ++ sys->free(buf); ++ if (outfh) ++ sys->close(outfh); ++ if (basefh) ++ sys->close(basefh); ++ if (infh) ++ sys->close(infh); ++ ++ return ret; ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/qtm.h b/libclamav/libmspack-0.4alpha/mspack/qtm.h +new file mode 100644 +index 000000000000..ab0bb4c32cc2 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/qtm.h +@@ -0,0 +1,128 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * The Quantum method was created by David Stafford, adapted by Microsoft ++ * Corporation. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_QTM_H ++#define MSPACK_QTM_H 1 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* Quantum compression / decompression definitions */ ++ ++#define QTM_FRAME_SIZE (32768) ++ ++struct qtmd_modelsym { ++ unsigned short sym, cumfreq; ++}; ++ ++struct qtmd_model { ++ int shiftsleft, entries; ++ struct qtmd_modelsym *syms; ++}; ++ ++struct qtmd_stream { ++ struct mspack_system *sys; /* I/O routines */ ++ struct mspack_file *input; /* input file handle */ ++ struct mspack_file *output; /* output file handle */ ++ ++ unsigned char *window; /* decoding window */ ++ unsigned int window_size; /* window size */ ++ unsigned int window_posn; /* decompression offset within window */ ++ unsigned int frame_todo; /* bytes remaining for current frame */ ++ ++ unsigned short H, L, C; /* high/low/current: arith coding state */ ++ unsigned char header_read; /* have we started decoding a new frame? */ ++ ++ int error; ++ ++ /* I/O buffers */ ++ unsigned char *inbuf, *i_ptr, *i_end, *o_ptr, *o_end; ++ unsigned int bit_buffer, inbuf_size; ++ unsigned char bits_left, input_end; ++ ++ /* four literal models, each representing 64 symbols ++ * model0 for literals from 0 to 63 (selector = 0) ++ * model1 for literals from 64 to 127 (selector = 1) ++ * model2 for literals from 128 to 191 (selector = 2) ++ * model3 for literals from 129 to 255 (selector = 3) */ ++ struct qtmd_model model0, model1, model2, model3; ++ ++ /* three match models. ++ * model4 for match with fixed length of 3 bytes ++ * model5 for match with fixed length of 4 bytes ++ * model6 for variable length match, encoded with model6len model */ ++ struct qtmd_model model4, model5, model6, model6len; ++ ++ /* selector model. 0-6 to say literal (0,1,2,3) or match (4,5,6) */ ++ struct qtmd_model model7; ++ ++ /* symbol arrays for all models */ ++ struct qtmd_modelsym m0sym[64 + 1]; ++ struct qtmd_modelsym m1sym[64 + 1]; ++ struct qtmd_modelsym m2sym[64 + 1]; ++ struct qtmd_modelsym m3sym[64 + 1]; ++ struct qtmd_modelsym m4sym[24 + 1]; ++ struct qtmd_modelsym m5sym[36 + 1]; ++ struct qtmd_modelsym m6sym[42 + 1], m6lsym[27 + 1]; ++ struct qtmd_modelsym m7sym[7 + 1]; ++}; ++ ++/* allocates Quantum decompression state for decoding the given stream. ++ * ++ * - returns NULL if window_bits is outwith the range 10 to 21 (inclusive). ++ * ++ * - uses system->alloc() to allocate memory ++ * ++ * - returns NULL if not enough memory ++ * ++ * - window_bits is the size of the Quantum window, from 1Kb (10) to 2Mb (21). ++ * ++ * - input_buffer_size is the number of bytes to use to store bitstream data. ++ */ ++extern struct qtmd_stream *qtmd_init(struct mspack_system *system, ++ struct mspack_file *input, ++ struct mspack_file *output, ++ int window_bits, ++ int input_buffer_size); ++ ++/* decompresses, or decompresses more of, a Quantum stream. ++ * ++ * - out_bytes of data will be decompressed and the function will return ++ * with an MSPACK_ERR_OK return code. ++ * ++ * - decompressing will stop as soon as out_bytes is reached. if the true ++ * amount of bytes decoded spills over that amount, they will be kept for ++ * a later invocation of qtmd_decompress(). ++ * ++ * - the output bytes will be passed to the system->write() function given in ++ * qtmd_init(), using the output file handle given in qtmd_init(). More ++ * than one call may be made to system->write() ++ * ++ * - Quantum will read input bytes as necessary using the system->read() ++ * function given in qtmd_init(), using the input file handle given in ++ * qtmd_init(). This will continue until system->read() returns 0 bytes, ++ * or an error. ++ */ ++extern int qtmd_decompress(struct qtmd_stream *qtm, off_t out_bytes); ++ ++/* frees all state associated with a Quantum data stream ++ * ++ * - calls system->free() using the system pointer given in qtmd_init() ++ */ ++void qtmd_free(struct qtmd_stream *qtm); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/qtmd.c b/libclamav/libmspack-0.4alpha/mspack/qtmd.c +new file mode 100644 +index 000000000000..12b27f5608c4 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/qtmd.c +@@ -0,0 +1,489 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * The Quantum method was created by David Stafford, adapted by Microsoft ++ * Corporation. ++ * ++ * This decompressor is based on an implementation by Matthew Russotto, used ++ * with permission. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* Quantum decompression implementation */ ++ ++/* This decompressor was researched and implemented by Matthew Russotto. It ++ * has since been tidied up by Stuart Caie. More information can be found at ++ * http://www.speakeasy.org/~russotto/quantumcomp.html ++ */ ++ ++#include ++#include ++ ++/* import bit-reading macros and code */ ++#define BITS_TYPE struct qtmd_stream ++#define BITS_VAR qtm ++#define BITS_ORDER_MSB ++#define READ_BYTES do { \ ++ unsigned char b0, b1; \ ++ READ_IF_NEEDED; b0 = *i_ptr++; \ ++ READ_IF_NEEDED; b1 = *i_ptr++; \ ++ INJECT_BITS((b0 << 8) | b1, 16); \ ++} while (0) ++#include ++ ++/* Quantum static data tables: ++ * ++ * Quantum uses 'position slots' to represent match offsets. For every ++ * match, a small 'position slot' number and a small offset from that slot ++ * are encoded instead of one large offset. ++ * ++ * position_base[] is an index to the position slot bases ++ * ++ * extra_bits[] states how many bits of offset-from-base data is needed. ++ * ++ * length_base[] and length_extra[] are equivalent in function, but are ++ * used for encoding selector 6 (variable length match) match lengths, ++ * instead of match offsets. ++ * ++ * They are generated with the following code: ++ * unsigned int i, offset; ++ * for (i = 0, offset = 0; i < 42; i++) { ++ * position_base[i] = offset; ++ * extra_bits[i] = ((i < 2) ? 0 : (i - 2)) >> 1; ++ * offset += 1 << extra_bits[i]; ++ * } ++ * for (i = 0, offset = 0; i < 26; i++) { ++ * length_base[i] = offset; ++ * length_extra[i] = (i < 2 ? 0 : i - 2) >> 2; ++ * offset += 1 << length_extra[i]; ++ * } ++ * length_base[26] = 254; length_extra[26] = 0; ++ */ ++static const unsigned int position_base[42] = { ++ 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, ++ 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576, 32768, 49152, ++ 65536, 98304, 131072, 196608, 262144, 393216, 524288, 786432, 1048576, 1572864 ++}; ++static const unsigned char extra_bits[42] = { ++ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, ++ 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19 ++}; ++static const unsigned char length_base[27] = { ++ 0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 14, 18, 22, 26, ++ 30, 38, 46, 54, 62, 78, 94, 110, 126, 158, 190, 222, 254 ++}; ++static const unsigned char length_extra[27] = { ++ 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, ++ 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 ++}; ++ ++ ++/* Arithmetic decoder: ++ * ++ * GET_SYMBOL(model, var) fetches the next symbol from the stated model ++ * and puts it in var. ++ * ++ * If necessary, qtmd_update_model() is called. ++ */ ++#define GET_SYMBOL(model, var) do { \ ++ range = ((H - L) & 0xFFFF) + 1; \ ++ symf = ((((C - L + 1) * model.syms[0].cumfreq)-1) / range) & 0xFFFF; \ ++ \ ++ for (i = 1; i < model.entries; i++) { \ ++ if (model.syms[i].cumfreq <= symf) break; \ ++ } \ ++ (var) = model.syms[i-1].sym; \ ++ \ ++ range = (H - L) + 1; \ ++ symf = model.syms[0].cumfreq; \ ++ H = L + ((model.syms[i-1].cumfreq * range) / symf) - 1; \ ++ L = L + ((model.syms[i].cumfreq * range) / symf); \ ++ \ ++ do { model.syms[--i].cumfreq += 8; } while (i > 0); \ ++ if (model.syms[0].cumfreq > 3800) qtmd_update_model(&model); \ ++ \ ++ while (1) { \ ++ if ((L & 0x8000) != (H & 0x8000)) { \ ++ if ((L & 0x4000) && !(H & 0x4000)) { \ ++ /* underflow case */ \ ++ C ^= 0x4000; L &= 0x3FFF; H |= 0x4000; \ ++ } \ ++ else break; \ ++ } \ ++ L <<= 1; H = (H << 1) | 1; \ ++ ENSURE_BITS(1); \ ++ C = (C << 1) | PEEK_BITS(1); \ ++ REMOVE_BITS(1); \ ++ } \ ++} while (0) ++ ++static void qtmd_update_model(struct qtmd_model *model) { ++ struct qtmd_modelsym tmp; ++ int i, j; ++ ++ if (--model->shiftsleft) { ++ for (i = model->entries - 1; i >= 0; i--) { ++ /* -1, not -2; the 0 entry saves this */ ++ model->syms[i].cumfreq >>= 1; ++ if (model->syms[i].cumfreq <= model->syms[i+1].cumfreq) { ++ model->syms[i].cumfreq = model->syms[i+1].cumfreq + 1; ++ } ++ } ++ } ++ else { ++ model->shiftsleft = 50; ++ for (i = 0; i < model->entries; i++) { ++ /* no -1, want to include the 0 entry */ ++ /* this converts cumfreqs into frequencies, then shifts right */ ++ model->syms[i].cumfreq -= model->syms[i+1].cumfreq; ++ model->syms[i].cumfreq++; /* avoid losing things entirely */ ++ model->syms[i].cumfreq >>= 1; ++ } ++ ++ /* now sort by frequencies, decreasing order -- this must be an ++ * inplace selection sort, or a sort with the same (in)stability ++ * characteristics */ ++ for (i = 0; i < model->entries - 1; i++) { ++ for (j = i + 1; j < model->entries; j++) { ++ if (model->syms[i].cumfreq < model->syms[j].cumfreq) { ++ tmp = model->syms[i]; ++ model->syms[i] = model->syms[j]; ++ model->syms[j] = tmp; ++ } ++ } ++ } ++ ++ /* then convert frequencies back to cumfreq */ ++ for (i = model->entries - 1; i >= 0; i--) { ++ model->syms[i].cumfreq += model->syms[i+1].cumfreq; ++ } ++ } ++} ++ ++/* Initialises a model to decode symbols from [start] to [start]+[len]-1 */ ++static void qtmd_init_model(struct qtmd_model *model, ++ struct qtmd_modelsym *syms, int start, int len) ++{ ++ int i; ++ ++ model->shiftsleft = 4; ++ model->entries = len; ++ model->syms = syms; ++ ++ for (i = 0; i <= len; i++) { ++ syms[i].sym = start + i; /* actual symbol */ ++ syms[i].cumfreq = len - i; /* current frequency of that symbol */ ++ } ++} ++ ++ ++/*-------- main Quantum code --------*/ ++ ++struct qtmd_stream *qtmd_init(struct mspack_system *system, ++ struct mspack_file *input, ++ struct mspack_file *output, ++ int window_bits, int input_buffer_size) ++{ ++ unsigned int window_size = 1 << window_bits; ++ struct qtmd_stream *qtm; ++ int i; ++ ++ if (!system) return NULL; ++ ++ /* Quantum supports window sizes of 2^10 (1Kb) through 2^21 (2Mb) */ ++ if (window_bits < 10 || window_bits > 21) return NULL; ++ ++ input_buffer_size = (input_buffer_size + 1) & -2; ++ if (input_buffer_size < 2) return NULL; ++ ++ /* allocate decompression state */ ++ if (!(qtm = (struct qtmd_stream *) system->alloc(system, sizeof(struct qtmd_stream)))) { ++ return NULL; ++ } ++ ++ /* allocate decompression window and input buffer */ ++ qtm->window = (unsigned char *) system->alloc(system, (size_t) window_size); ++ qtm->inbuf = (unsigned char *) system->alloc(system, (size_t) input_buffer_size); ++ if (!qtm->window || !qtm->inbuf) { ++ system->free(qtm->window); ++ system->free(qtm->inbuf); ++ system->free(qtm); ++ return NULL; ++ } ++ ++ /* initialise decompression state */ ++ qtm->sys = system; ++ qtm->input = input; ++ qtm->output = output; ++ qtm->inbuf_size = input_buffer_size; ++ qtm->window_size = window_size; ++ qtm->window_posn = 0; ++ qtm->frame_todo = QTM_FRAME_SIZE; ++ qtm->header_read = 0; ++ qtm->error = MSPACK_ERR_OK; ++ ++ qtm->i_ptr = qtm->i_end = &qtm->inbuf[0]; ++ qtm->o_ptr = qtm->o_end = &qtm->window[0]; ++ qtm->input_end = 0; ++ qtm->bits_left = 0; ++ qtm->bit_buffer = 0; ++ ++ /* initialise arithmetic coding models ++ * - model 4 depends on window size, ranges from 20 to 24 ++ * - model 5 depends on window size, ranges from 20 to 36 ++ * - model 6pos depends on window size, ranges from 20 to 42 ++ */ ++ i = window_bits * 2; ++ qtmd_init_model(&qtm->model0, &qtm->m0sym[0], 0, 64); ++ qtmd_init_model(&qtm->model1, &qtm->m1sym[0], 64, 64); ++ qtmd_init_model(&qtm->model2, &qtm->m2sym[0], 128, 64); ++ qtmd_init_model(&qtm->model3, &qtm->m3sym[0], 192, 64); ++ qtmd_init_model(&qtm->model4, &qtm->m4sym[0], 0, (i > 24) ? 24 : i); ++ qtmd_init_model(&qtm->model5, &qtm->m5sym[0], 0, (i > 36) ? 36 : i); ++ qtmd_init_model(&qtm->model6, &qtm->m6sym[0], 0, i); ++ qtmd_init_model(&qtm->model6len, &qtm->m6lsym[0], 0, 27); ++ qtmd_init_model(&qtm->model7, &qtm->m7sym[0], 0, 7); ++ ++ /* all ok */ ++ return qtm; ++} ++ ++int qtmd_decompress(struct qtmd_stream *qtm, off_t out_bytes) { ++ unsigned int frame_todo, frame_end, window_posn, match_offset, range; ++ unsigned char *window, *i_ptr, *i_end, *runsrc, *rundest; ++ int i, j, selector, extra, sym, match_length; ++ unsigned short H, L, C, symf; ++ ++ register unsigned int bit_buffer; ++ register unsigned char bits_left; ++ ++ /* easy answers */ ++ if (!qtm || (out_bytes < 0)) return MSPACK_ERR_ARGS; ++ if (qtm->error) return qtm->error; ++ ++ /* flush out any stored-up bytes before we begin */ ++ i = qtm->o_end - qtm->o_ptr; ++ if ((off_t) i > out_bytes) i = (int) out_bytes; ++ if (i) { ++ if (qtm->sys->write(qtm->output, qtm->o_ptr, i) != i) { ++ return qtm->error = MSPACK_ERR_WRITE; ++ } ++ qtm->o_ptr += i; ++ out_bytes -= i; ++ } ++ if (out_bytes == 0) return MSPACK_ERR_OK; ++ ++ /* restore local state */ ++ RESTORE_BITS; ++ window = qtm->window; ++ window_posn = qtm->window_posn; ++ frame_todo = qtm->frame_todo; ++ H = qtm->H; ++ L = qtm->L; ++ C = qtm->C; ++ ++ /* while we do not have enough decoded bytes in reserve: */ ++ while ((qtm->o_end - qtm->o_ptr) < out_bytes) { ++ /* read header if necessary. Initialises H, L and C */ ++ if (!qtm->header_read) { ++ H = 0xFFFF; L = 0; READ_BITS(C, 16); ++ qtm->header_read = 1; ++ } ++ ++ /* decode more, up to the number of bytes needed, the frame boundary, ++ * or the window boundary, whichever comes first */ ++ frame_end = window_posn + (out_bytes - (qtm->o_end - qtm->o_ptr)); ++ if ((window_posn + frame_todo) < frame_end) { ++ frame_end = window_posn + frame_todo; ++ } ++ if (frame_end > qtm->window_size) { ++ frame_end = qtm->window_size; ++ } ++ ++ while (window_posn < frame_end) { ++ GET_SYMBOL(qtm->model7, selector); ++ if (selector < 4) { ++ /* literal byte */ ++ struct qtmd_model *mdl = (selector == 0) ? &qtm->model0 : ++ ((selector == 1) ? &qtm->model1 : ++ ((selector == 2) ? &qtm->model2 : ++ &qtm->model3)); ++ GET_SYMBOL((*mdl), sym); ++ window[window_posn++] = sym; ++ frame_todo--; ++ } ++ else { ++ /* match repeated string */ ++ switch (selector) { ++ case 4: /* selector 4 = fixed length match (3 bytes) */ ++ GET_SYMBOL(qtm->model4, sym); ++ READ_MANY_BITS(extra, extra_bits[sym]); ++ match_offset = position_base[sym] + extra + 1; ++ match_length = 3; ++ break; ++ ++ case 5: /* selector 5 = fixed length match (4 bytes) */ ++ GET_SYMBOL(qtm->model5, sym); ++ READ_MANY_BITS(extra, extra_bits[sym]); ++ match_offset = position_base[sym] + extra + 1; ++ match_length = 4; ++ break; ++ ++ case 6: /* selector 6 = variable length match */ ++ GET_SYMBOL(qtm->model6len, sym); ++ READ_MANY_BITS(extra, length_extra[sym]); ++ match_length = length_base[sym] + extra + 5; ++ ++ GET_SYMBOL(qtm->model6, sym); ++ READ_MANY_BITS(extra, extra_bits[sym]); ++ match_offset = position_base[sym] + extra + 1; ++ break; ++ ++ default: ++ /* should be impossible, model7 can only return 0-6 */ ++ D(("got %d from selector", selector)) ++ return qtm->error = MSPACK_ERR_DECRUNCH; ++ } ++ ++ rundest = &window[window_posn]; ++ frame_todo -= match_length; ++ ++ /* does match destination wrap the window? This situation is possible ++ * where the window size is less than the 32k frame size, but matches ++ * must not go beyond a frame boundary */ ++ if ((window_posn + match_length) > qtm->window_size) { ++ /* copy first part of match, before window end */ ++ i = qtm->window_size - window_posn; ++ j = window_posn - match_offset; ++ while (i--) *rundest++ = window[j++ & (qtm->window_size - 1)]; ++ ++ /* flush currently stored data */ ++ i = (&window[qtm->window_size] - qtm->o_ptr); ++ ++ /* this should not happen, but if it does then this code ++ * can't handle the situation (can't flush up to the end of ++ * the window, but can't break out either because we haven't ++ * finished writing the match). bail out in this case */ ++ if (i > out_bytes) { ++ D(("during window-wrap match; %d bytes to flush but only need %d", ++ i, (int) out_bytes)) ++ return qtm->error = MSPACK_ERR_DECRUNCH; ++ } ++ if (qtm->sys->write(qtm->output, qtm->o_ptr, i) != i) { ++ return qtm->error = MSPACK_ERR_WRITE; ++ } ++ out_bytes -= i; ++ qtm->o_ptr = &window[0]; ++ qtm->o_end = &window[0]; ++ ++ /* copy second part of match, after window wrap */ ++ rundest = &window[0]; ++ i = match_length - (qtm->window_size - window_posn); ++ while (i--) *rundest++ = window[j++ & (qtm->window_size - 1)]; ++ window_posn = window_posn + match_length - qtm->window_size; ++ ++ break; /* because "window_posn < frame_end" has now failed */ ++ } ++ else { ++ /* normal match - output won't wrap window or frame end */ ++ i = match_length; ++ ++ /* does match _offset_ wrap the window? */ ++ if (match_offset > window_posn) { ++ /* j = length from match offset to end of window */ ++ j = match_offset - window_posn; ++ if (j > (int) qtm->window_size) { ++ D(("match offset beyond window boundaries")) ++ return qtm->error = MSPACK_ERR_DECRUNCH; ++ } ++ runsrc = &window[qtm->window_size - j]; ++ if (j < i) { ++ /* if match goes over the window edge, do two copy runs */ ++ i -= j; while (j-- > 0) *rundest++ = *runsrc++; ++ runsrc = window; ++ } ++ while (i-- > 0) *rundest++ = *runsrc++; ++ } ++ else { ++ runsrc = rundest - match_offset; ++ while (i-- > 0) *rundest++ = *runsrc++; ++ } ++ window_posn += match_length; ++ } ++ } /* if (window_posn+match_length > frame_end) */ ++ } /* while (window_posn < frame_end) */ ++ ++ qtm->o_end = &window[window_posn]; ++ ++ /* if we subtracted too much from frame_todo, it will ++ * wrap around past zero and go above its max value */ ++ if (frame_todo > QTM_FRAME_SIZE) { ++ D(("overshot frame alignment")) ++ return qtm->error = MSPACK_ERR_DECRUNCH; ++ } ++ ++ /* another frame completed? */ ++ if (frame_todo == 0) { ++ /* re-align input */ ++ if (bits_left & 7) REMOVE_BITS(bits_left & 7); ++ ++ /* special Quantum hack -- cabd.c injects a trailer byte to allow the ++ * decompressor to realign itself. CAB Quantum blocks, unlike LZX ++ * blocks, can have anything from 0 to 4 trailing null bytes. */ ++ do { READ_BITS(i, 8); } while (i != 0xFF); ++ ++ qtm->header_read = 0; ++ ++ frame_todo = QTM_FRAME_SIZE; ++ } ++ ++ /* window wrap? */ ++ if (window_posn == qtm->window_size) { ++ /* flush all currently stored data */ ++ i = (qtm->o_end - qtm->o_ptr); ++ /* break out if we have more than enough to finish this request */ ++ if (i >= out_bytes) break; ++ if (qtm->sys->write(qtm->output, qtm->o_ptr, i) != i) { ++ return qtm->error = MSPACK_ERR_WRITE; ++ } ++ out_bytes -= i; ++ qtm->o_ptr = &window[0]; ++ qtm->o_end = &window[0]; ++ window_posn = 0; ++ } ++ ++ } /* while (more bytes needed) */ ++ ++ if (out_bytes) { ++ i = (int) out_bytes; ++ if (qtm->sys->write(qtm->output, qtm->o_ptr, i) != i) { ++ return qtm->error = MSPACK_ERR_WRITE; ++ } ++ qtm->o_ptr += i; ++ } ++ ++ /* store local state */ ++ ++ STORE_BITS; ++ qtm->window_posn = window_posn; ++ qtm->frame_todo = frame_todo; ++ qtm->H = H; ++ qtm->L = L; ++ qtm->C = C; ++ ++ return MSPACK_ERR_OK; ++} ++ ++void qtmd_free(struct qtmd_stream *qtm) { ++ struct mspack_system *sys; ++ if (qtm) { ++ sys = qtm->sys; ++ sys->free(qtm->window); ++ sys->free(qtm->inbuf); ++ sys->free(qtm); ++ } ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/readbits.h b/libclamav/libmspack-0.4alpha/mspack/readbits.h +new file mode 100644 +index 000000000000..457cbdd7d4cc +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/readbits.h +@@ -0,0 +1,207 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2010 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_READBITS_H ++#define MSPACK_READBITS_H 1 ++ ++/* this header defines macros that read data streams by ++ * the individual bits ++ * ++ * INIT_BITS initialises bitstream state in state structure ++ * STORE_BITS stores bitstream state in state structure ++ * RESTORE_BITS restores bitstream state from state structure ++ * ENSURE_BITS(n) ensure there are at least N bits in the bit buffer ++ * READ_BITS(var,n) takes N bits from the buffer and puts them in var ++ * PEEK_BITS(n) extracts without removing N bits from the bit buffer ++ * REMOVE_BITS(n) removes N bits from the bit buffer ++ * ++ * READ_BITS simply calls ENSURE_BITS, PEEK_BITS and REMOVE_BITS, ++ * which means it's limited to reading the number of bits you can ++ * ensure at any one time. It also fails if asked to read zero bits. ++ * If you need to read zero bits, or more bits than can be ensured in ++ * one go, use READ_MANY_BITS instead. ++ * ++ * These macros have variable names baked into them, so to use them ++ * you have to define some macros: ++ * - BITS_TYPE: the type name of your state structure ++ * - BITS_VAR: the variable that points to your state structure ++ * - define BITS_ORDER_MSB if bits are read from the MSB, or ++ * define BITS_ORDER_LSB if bits are read from the LSB ++ * - READ_BYTES: some code that reads more data into the bit buffer, ++ * it should use READ_IF_NEEDED (calls read_input if the byte buffer ++ * is empty), then INJECT_BITS(data,n) to put data from the byte ++ * buffer into the bit buffer. ++ * ++ * You also need to define some variables and structure members: ++ * - unsigned char *i_ptr; // current position in the byte buffer ++ * - unsigned char *i_end; // end of the byte buffer ++ * - unsigned int bit_buffer; // the bit buffer itself ++ * - unsigned int bits_left; // number of bits remaining ++ * ++ * If you use read_input() and READ_IF_NEEDED, they also expect these ++ * structure members: ++ * - struct mspack_system *sys; // to access sys->read() ++ * - unsigned int error; // to record/return read errors ++ * - unsigned char input_end; // to mark reaching the EOF ++ * - unsigned char *inbuf; // the input byte buffer ++ * - unsigned int inbuf_size; // the size of the input byte buffer ++ * ++ * Your READ_BYTES implementation should read data from *i_ptr and ++ * put them in the bit buffer. READ_IF_NEEDED will call read_input() ++ * if i_ptr reaches i_end, and will fill up inbuf and set i_ptr to ++ * the start of inbuf and i_end to the end of inbuf. ++ * ++ * If you're reading in MSB order, the routines work by using the area ++ * beyond the MSB and the LSB of the bit buffer as a free source of ++ * zeroes when shifting. This avoids having to mask any bits. So we ++ * have to know the bit width of the bit buffer variable. We use ++ * and CHAR_BIT to find the size of the bit buffer in bits. ++ * ++ * If you are reading in LSB order, bits need to be masked. Normally ++ * this is done by computing the mask: N bits are masked by the value ++ * (1< ++#endif ++#ifndef CHAR_BIT ++# define CHAR_BIT (8) ++#endif ++#define BITBUF_WIDTH (sizeof(bit_buffer) * CHAR_BIT) ++ ++#define INIT_BITS do { \ ++ BITS_VAR->i_ptr = &BITS_VAR->inbuf[0]; \ ++ BITS_VAR->i_end = &BITS_VAR->inbuf[0]; \ ++ BITS_VAR->bit_buffer = 0; \ ++ BITS_VAR->bits_left = 0; \ ++ BITS_VAR->input_end = 0; \ ++} while (0) ++ ++#define STORE_BITS do { \ ++ BITS_VAR->i_ptr = i_ptr; \ ++ BITS_VAR->i_end = i_end; \ ++ BITS_VAR->bit_buffer = bit_buffer; \ ++ BITS_VAR->bits_left = bits_left; \ ++} while (0) ++ ++#define RESTORE_BITS do { \ ++ i_ptr = BITS_VAR->i_ptr; \ ++ i_end = BITS_VAR->i_end; \ ++ bit_buffer = BITS_VAR->bit_buffer; \ ++ bits_left = BITS_VAR->bits_left; \ ++} while (0) ++ ++#define ENSURE_BITS(nbits) do { \ ++ while (bits_left < (nbits)) READ_BYTES; \ ++} while (0) ++ ++#define READ_BITS(val, nbits) do { \ ++ ENSURE_BITS(nbits); \ ++ (val) = PEEK_BITS(nbits); \ ++ REMOVE_BITS(nbits); \ ++} while (0) ++ ++#define READ_MANY_BITS(val, bits) do { \ ++ unsigned char needed = (bits), bitrun; \ ++ (val) = 0; \ ++ while (needed > 0) { \ ++ if (bits_left <= (BITBUF_WIDTH - 16)) READ_BYTES; \ ++ bitrun = (bits_left < needed) ? bits_left : needed; \ ++ (val) = ((val) << bitrun) | PEEK_BITS(bitrun); \ ++ REMOVE_BITS(bitrun); \ ++ needed -= bitrun; \ ++ } \ ++} while (0) ++ ++#ifdef BITS_ORDER_MSB ++# define PEEK_BITS(nbits) (bit_buffer >> (BITBUF_WIDTH - (nbits))) ++# define REMOVE_BITS(nbits) ((bit_buffer <<= (nbits)), (bits_left -= (nbits))) ++# define INJECT_BITS(bitdata,nbits) ((bit_buffer |= \ ++ (bitdata) << (BITBUF_WIDTH - (nbits) - bits_left)), (bits_left += (nbits))) ++#else /* BITS_ORDER_LSB */ ++# define PEEK_BITS(nbits) (bit_buffer & ((1 << (nbits))-1)) ++# define REMOVE_BITS(nbits) ((bit_buffer >>= (nbits)), (bits_left -= (nbits))) ++# define INJECT_BITS(bitdata,nbits) ((bit_buffer |= \ ++ (bitdata) << bits_left), (bits_left += (nbits))) ++#endif ++ ++#ifdef BITS_LSB_TABLE ++/* lsb_bit_mask[n] = (1 << n) - 1 */ ++static const unsigned short lsb_bit_mask[17] = { ++ 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, ++ 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff ++}; ++# define PEEK_BITS_T(nbits) (bit_buffer & lsb_bit_mask[(nbits)]) ++# define READ_BITS_T(val, nbits) do { \ ++ ENSURE_BITS(nbits); \ ++ (val) = PEEK_BITS_T(nbits); \ ++ REMOVE_BITS(nbits); \ ++} while (0) ++#endif ++ ++#ifndef BITS_NO_READ_INPUT ++# define READ_IF_NEEDED do { \ ++ if (i_ptr >= i_end) { \ ++ if (read_input(BITS_VAR)) \ ++ return BITS_VAR->error; \ ++ i_ptr = BITS_VAR->i_ptr; \ ++ i_end = BITS_VAR->i_end; \ ++ } \ ++} while (0) ++ ++static int read_input(BITS_TYPE *p) { ++ int read = p->sys->read(p->input, &p->inbuf[0], (int)p->inbuf_size); ++ if (read < 0) return p->error = MSPACK_ERR_READ; ++ ++ /* we might overrun the input stream by asking for bits we don't use, ++ * so fake 2 more bytes at the end of input */ ++ if (read == 0) { ++ if (p->input_end) { ++ D(("out of input bytes")) ++ return p->error = MSPACK_ERR_READ; ++ } ++ else { ++ read = 2; ++ p->inbuf[0] = p->inbuf[1] = 0; ++ p->input_end = 1; ++ } ++ } ++ ++ /* update i_ptr and i_end */ ++ p->i_ptr = &p->inbuf[0]; ++ p->i_end = &p->inbuf[read]; ++ return MSPACK_ERR_OK; ++} ++#endif ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/readhuff.h b/libclamav/libmspack-0.4alpha/mspack/readhuff.h +new file mode 100644 +index 000000000000..bb15c0a12362 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/readhuff.h +@@ -0,0 +1,173 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2010 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_READHUFF_H ++#define MSPACK_READHUFF_H 1 ++ ++/* This implements a fast Huffman tree decoding system. ++ */ ++ ++#if !(defined(BITS_ORDER_MSB) || defined(BITS_ORDER_LSB)) ++# error "readhuff.h is used in conjunction with readbits.h, include that first" ++#endif ++#if !(defined(TABLEBITS) && defined(MAXSYMBOLS)) ++# error "define TABLEBITS(tbl) and MAXSYMBOLS(tbl) before using readhuff.h" ++#endif ++#if !(defined(HUFF_TABLE) && defined(HUFF_LEN)) ++# error "define HUFF_TABLE(tbl) and HUFF_LEN(tbl) before using readhuff.h" ++#endif ++#ifndef HUFF_ERROR ++# error "define HUFF_ERROR before using readhuff.h" ++#endif ++#ifndef HUFF_MAXBITS ++# define HUFF_MAXBITS 16 ++#endif ++ ++/* Decodes the next huffman symbol from the input bitstream into var. ++ * Do not use this macro on a table unless build_decode_table() succeeded. ++ */ ++#define READ_HUFFSYM(tbl, var) do { \ ++ ENSURE_BITS(HUFF_MAXBITS); \ ++ sym = HUFF_TABLE(tbl, PEEK_BITS(TABLEBITS(tbl))); \ ++ if (sym >= MAXSYMBOLS(tbl)) HUFF_TRAVERSE(tbl); \ ++ (var) = sym; \ ++ i = HUFF_LEN(tbl, sym); \ ++ REMOVE_BITS(i); \ ++} while (0) ++ ++#ifdef BITS_ORDER_LSB ++# define HUFF_TRAVERSE(tbl) do { \ ++ i = TABLEBITS(tbl) - 1; \ ++ do { \ ++ if (i++ > HUFF_MAXBITS) HUFF_ERROR; \ ++ sym = HUFF_TABLE(tbl, \ ++ (sym << 1) | ((bit_buffer >> i) & 1)); \ ++ } while (sym >= MAXSYMBOLS(tbl)); \ ++} while (0) ++#else ++#define HUFF_TRAVERSE(tbl) do { \ ++ i = 1 << (BITBUF_WIDTH - TABLEBITS(tbl)); \ ++ do { \ ++ if ((i >>= 1) == 0) HUFF_ERROR; \ ++ sym = HUFF_TABLE(tbl, \ ++ (sym << 1) | ((bit_buffer & i) ? 1 : 0)); \ ++ } while (sym >= MAXSYMBOLS(tbl)); \ ++} while (0) ++#endif ++ ++/* make_decode_table(nsyms, nbits, length[], table[]) ++ * ++ * This function was originally coded by David Tritscher. ++ * It builds a fast huffman decoding table from ++ * a canonical huffman code lengths table. ++ * ++ * nsyms = total number of symbols in this huffman tree. ++ * nbits = any symbols with a code length of nbits or less can be decoded ++ * in one lookup of the table. ++ * length = A table to get code lengths from [0 to nsyms-1] ++ * table = The table to fill up with decoded symbols and pointers. ++ * Should be ((1<> 1; /* don't do 0 length codes */ ++ ++ /* fill entries for codes short enough for a direct mapping */ ++ for (bit_num = 1; bit_num <= nbits; bit_num++) { ++ for (sym = 0; sym < nsyms; sym++) { ++ if (length[sym] != bit_num) continue; ++#ifdef BITS_ORDER_MSB ++ leaf = pos; ++#else ++ /* reverse the significant bits */ ++ fill = length[sym]; reverse = pos >> (nbits - fill); leaf = 0; ++ do {leaf <<= 1; leaf |= reverse & 1; reverse >>= 1;} while (--fill); ++#endif ++ ++ if((pos += bit_mask) > table_mask) return 1; /* table overrun */ ++ ++ /* fill all possible lookups of this symbol with the symbol itself */ ++#ifdef BITS_ORDER_MSB ++ for (fill = bit_mask; fill-- > 0;) table[leaf++] = sym; ++#else ++ fill = bit_mask; next_symbol = 1 << bit_num; ++ do { table[leaf] = sym; leaf += next_symbol; } while (--fill); ++#endif ++ } ++ bit_mask >>= 1; ++ } ++ ++ /* exit with success if table is now complete */ ++ if (pos == table_mask) return 0; ++ ++ /* mark all remaining table entries as unused */ ++ for (sym = pos; sym < table_mask; sym++) { ++#ifdef BITS_ORDER_MSB ++ table[sym] = 0xFFFF; ++#else ++ reverse = sym; leaf = 0; fill = nbits; ++ do { leaf <<= 1; leaf |= reverse & 1; reverse >>= 1; } while (--fill); ++ table[leaf] = 0xFFFF; ++#endif ++ } ++ ++ /* next_symbol = base of allocation for long codes */ ++ next_symbol = ((table_mask >> 1) < nsyms) ? nsyms : (table_mask >> 1); ++ ++ /* give ourselves room for codes to grow by up to 16 more bits. ++ * codes now start at bit nbits+16 and end at (nbits+16-codelength) */ ++ pos <<= 16; ++ table_mask <<= 16; ++ bit_mask = 1 << 15; ++ ++ for (bit_num = nbits+1; bit_num <= HUFF_MAXBITS; bit_num++) { ++ for (sym = 0; sym < nsyms; sym++) { ++ if (length[sym] != bit_num) continue; ++ ++#ifdef BITS_ORDER_MSB ++ leaf = pos >> 16; ++#else ++ /* leaf = the first nbits of the code, reversed */ ++ reverse = pos >> 16; leaf = 0; fill = nbits; ++ do {leaf <<= 1; leaf |= reverse & 1; reverse >>= 1;} while (--fill); ++#endif ++ for (fill = 0; fill < (bit_num - nbits); fill++) { ++ /* if this path hasn't been taken yet, 'allocate' two entries */ ++ if (table[leaf] == 0xFFFF) { ++ table[(next_symbol << 1) ] = 0xFFFF; ++ table[(next_symbol << 1) + 1 ] = 0xFFFF; ++ table[leaf] = next_symbol++; ++ } ++ ++ /* follow the path and select either left or right for next bit */ ++ leaf = table[leaf] << 1; ++ if ((pos >> (15-fill)) & 1) leaf++; ++ } ++ table[leaf] = sym; ++ ++ if ((pos += bit_mask) > table_mask) return 1; /* table overflow */ ++ } ++ bit_mask >>= 1; ++ } ++ ++ /* full table? */ ++ return (pos == table_mask) ? 0 : 1; ++} ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/sha.h b/libclamav/libmspack-0.4alpha/mspack/sha.h +new file mode 100644 +index 000000000000..360521519beb +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/sha.h +@@ -0,0 +1,15 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_LZSS_H ++#define MSPACK_LZSS_H 1 ++ ++/* SHA-1 message digest definitions */ ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/system.c b/libclamav/libmspack-0.4alpha/mspack/system.c +new file mode 100644 +index 000000000000..978a4d7e2357 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/system.c +@@ -0,0 +1,239 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++ ++#ifndef LARGEFILE_SUPPORT ++const char *largefile_msg = "library not compiled to support large files."; ++#endif ++ ++ ++int mspack_version(int entity) { ++ switch (entity) { ++ /* CHM decoder version 1 -> 2 changes: ++ * - added mschmd_sec_mscompressed::spaninfo ++ * - added mschmd_header::first_pmgl ++ * - added mschmd_header::last_pmgl ++ * - added mschmd_header::chunk_cache; ++ */ ++ case MSPACK_VER_MSCHMD: ++ return 2; ++ case MSPACK_VER_LIBRARY: ++ case MSPACK_VER_SYSTEM: ++ case MSPACK_VER_MSCABD: ++ case MSPACK_VER_MSSZDDD: ++ case MSPACK_VER_MSKWAJD: ++ case MSPACK_VER_MSOABD: ++ return 1; ++ case MSPACK_VER_MSCABC: ++ case MSPACK_VER_MSCHMC: ++ case MSPACK_VER_MSLITD: ++ case MSPACK_VER_MSLITC: ++ case MSPACK_VER_MSHLPD: ++ case MSPACK_VER_MSHLPC: ++ case MSPACK_VER_MSSZDDC: ++ case MSPACK_VER_MSKWAJC: ++ case MSPACK_VER_MSOABC: ++ return 0; ++ } ++ return -1; ++} ++ ++int mspack_sys_selftest_internal(int offt_size) { ++ return (sizeof(off_t) == offt_size) ? MSPACK_ERR_OK : MSPACK_ERR_SEEK; ++} ++ ++/* validates a system structure */ ++int mspack_valid_system(struct mspack_system *sys) { ++ return (sys != NULL) && (sys->open != NULL) && (sys->close != NULL) && ++ (sys->read != NULL) && (sys->write != NULL) && (sys->seek != NULL) && ++ (sys->tell != NULL) && (sys->message != NULL) && (sys->alloc != NULL) && ++ (sys->free != NULL) && (sys->copy != NULL) && (sys->null_ptr == NULL); ++} ++ ++/* returns the length of a file opened for reading */ ++int mspack_sys_filelen(struct mspack_system *system, ++ struct mspack_file *file, off_t *length) ++{ ++ off_t current; ++ ++ if (!system || !file || !length) return MSPACK_ERR_OPEN; ++ ++ /* get current offset */ ++ current = system->tell(file); ++ ++ /* seek to end of file */ ++ if (system->seek(file, (off_t) 0, MSPACK_SYS_SEEK_END)) { ++ return MSPACK_ERR_SEEK; ++ } ++ ++ /* get offset of end of file */ ++ *length = system->tell(file); ++ ++ /* seek back to original offset */ ++ if (system->seek(file, current, MSPACK_SYS_SEEK_START)) { ++ return MSPACK_ERR_SEEK; ++ } ++ ++ return MSPACK_ERR_OK; ++} ++ ++ ++ ++/* definition of mspack_default_system -- if the library is compiled with ++ * MSPACK_NO_DEFAULT_SYSTEM, no default system will be provided. Otherwise, ++ * an appropriate default system (e.g. the standard C library, or some native ++ * API calls) ++ */ ++ ++#ifdef MSPACK_NO_DEFAULT_SYSTEM ++struct mspack_system *mspack_default_system = NULL; ++#else ++ ++/* implementation of mspack_default_system for standard C library */ ++ ++#include ++#include ++#include ++#include ++ ++struct mspack_file_p { ++ FILE *fh; ++ const char *name; ++}; ++ ++static struct mspack_file *msp_open(struct mspack_system *self, ++ const char *filename, int mode) ++{ ++ struct mspack_file_p *fh; ++ const char *fmode; ++ ++ switch (mode) { ++ case MSPACK_SYS_OPEN_READ: fmode = "rb"; break; ++ case MSPACK_SYS_OPEN_WRITE: fmode = "wb"; break; ++ case MSPACK_SYS_OPEN_UPDATE: fmode = "r+b"; break; ++ case MSPACK_SYS_OPEN_APPEND: fmode = "ab"; break; ++ default: return NULL; ++ } ++ ++ if ((fh = (struct mspack_file_p *) malloc(sizeof(struct mspack_file_p)))) { ++ fh->name = filename; ++ if ((fh->fh = fopen(filename, fmode))) return (struct mspack_file *) fh; ++ free(fh); ++ } ++ return NULL; ++} ++ ++static void msp_close(struct mspack_file *file) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++ if (self) { ++ fclose(self->fh); ++ free(self); ++ } ++} ++ ++static int msp_read(struct mspack_file *file, void *buffer, int bytes) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++ if (self && buffer && bytes >= 0) { ++ size_t count = fread(buffer, 1, (size_t) bytes, self->fh); ++ if (!ferror(self->fh)) return (int) count; ++ } ++ return -1; ++} ++ ++static int msp_write(struct mspack_file *file, void *buffer, int bytes) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++ if (self && buffer && bytes >= 0) { ++ size_t count = fwrite(buffer, 1, (size_t) bytes, self->fh); ++ if (!ferror(self->fh)) return (int) count; ++ } ++ return -1; ++} ++ ++static int msp_seek(struct mspack_file *file, off_t offset, int mode) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++ if (self) { ++ switch (mode) { ++ case MSPACK_SYS_SEEK_START: mode = SEEK_SET; break; ++ case MSPACK_SYS_SEEK_CUR: mode = SEEK_CUR; break; ++ case MSPACK_SYS_SEEK_END: mode = SEEK_END; break; ++ default: return -1; ++ } ++#ifdef HAVE_FSEEKO ++ return fseeko(self->fh, offset, mode); ++#else ++ return fseek(self->fh, offset, mode); ++#endif ++ } ++ return -1; ++} ++ ++static off_t msp_tell(struct mspack_file *file) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++#ifdef HAVE_FSEEKO ++ return (self) ? (off_t) ftello(self->fh) : 0; ++#else ++ return (self) ? (off_t) ftell(self->fh) : 0; ++#endif ++} ++ ++static void msp_msg(struct mspack_file *file, const char *format, ...) { ++ va_list ap; ++ if (file) fprintf(stderr, "%s: ", ((struct mspack_file_p *) file)->name); ++ va_start(ap, format); ++ vfprintf(stderr, format, ap); ++ va_end(ap); ++ fputc((int) '\n', stderr); ++ fflush(stderr); ++} ++ ++static void *msp_alloc(struct mspack_system *self, size_t bytes) { ++#ifdef DEBUG ++ /* make uninitialised data obvious */ ++ char *buf = malloc(bytes + 8); ++ if (buf) memset(buf, 0xDC, bytes); ++ *((size_t *)buf) = bytes; ++ return &buf[8]; ++#else ++ return malloc(bytes); ++#endif ++} ++ ++static void msp_free(void *buffer) { ++#ifdef DEBUG ++ char *buf = buffer; ++ size_t bytes; ++ if (buf) { ++ buf -= 8; ++ bytes = *((size_t *)buf); ++ /* make freed data obvious */ ++ memset(buf, 0xED, bytes); ++ free(buf); ++ } ++#else ++ free(buffer); ++#endif ++} ++ ++static void msp_copy(void *src, void *dest, size_t bytes) { ++ memcpy(dest, src, bytes); ++} ++ ++static struct mspack_system msp_system = { ++ &msp_open, &msp_close, &msp_read, &msp_write, &msp_seek, ++ &msp_tell, &msp_msg, &msp_alloc, &msp_free, &msp_copy, NULL ++}; ++ ++struct mspack_system *mspack_default_system = &msp_system; ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/system.h b/libclamav/libmspack-0.4alpha/mspack/system.h +new file mode 100644 +index 000000000000..4a400850aa52 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/system.h +@@ -0,0 +1,124 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_SYSTEM_H ++#define MSPACK_SYSTEM_H 1 ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* ensure config.h is read before mspack.h */ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++ ++/* fix for problem with GCC 4 and glibc (thanks to Ville Skytta) ++ * http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=150429 ++ */ ++#ifdef read ++# undef read ++#endif ++ ++#ifdef DEBUG ++# include ++/* Old GCCs don't have __func__, but __FUNCTION__: ++ * http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html ++ */ ++# if __STDC_VERSION__ < 199901L ++# if __GNUC__ >= 2 ++# define __func__ __FUNCTION__ ++# else ++# define __func__ "" ++# endif ++# endif ++# define D(x) do { printf("%s:%d (%s) ",__FILE__, __LINE__, __func__); \ ++ printf x ; fputc('\n', stdout); fflush(stdout);} while (0); ++#else ++# define D(x) ++#endif ++ ++/* CAB supports searching through files over 4GB in size, and the CHM file ++ * format actively uses 64-bit offsets. These can only be fully supported ++ * if the system the code runs on supports large files. If not, the library ++ * will work as normal using only 32-bit arithmetic, but if an offset ++ * greater than 2GB is detected, an error message indicating the library ++ * can't support the file should be printed. ++ */ ++#ifdef HAVE_LIMITS_H ++# include ++#endif ++ ++#if ((defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS >= 64) || \ ++ (defined(FILESIZEBITS) && FILESIZEBITS >= 64) || \ ++ (defined(SIZEOF_OFF_T) && SIZEOF_OFF_T >= 8) || \ ++ defined(_LARGEFILE_SOURCE) || defined(_LARGEFILE64_SOURCE)) ++# define LARGEFILE_SUPPORT ++# define LD "lld" ++# define LU "llu" ++#else ++extern const char *largefile_msg; ++# define LD "ld" ++# define LU "lu" ++#endif ++ ++/* endian-neutral reading of little-endian data */ ++#define __egi32(a,n) ( ((((unsigned char *) a)[n+3]) << 24) | \ ++ ((((unsigned char *) a)[n+2]) << 16) | \ ++ ((((unsigned char *) a)[n+1]) << 8) | \ ++ ((((unsigned char *) a)[n+0]))) ++#define EndGetI64(a) ((((unsigned long long int) __egi32(a,4)) << 32) | \ ++ ((unsigned int) __egi32(a,0))) ++#define EndGetI32(a) __egi32(a,0) ++#define EndGetI16(a) ((((a)[1])<<8)|((a)[0])) ++ ++/* endian-neutral reading of big-endian data */ ++#define EndGetM32(a) (((((unsigned char *) a)[0]) << 24) | \ ++ ((((unsigned char *) a)[1]) << 16) | \ ++ ((((unsigned char *) a)[2]) << 8) | \ ++ ((((unsigned char *) a)[3]))) ++#define EndGetM16(a) ((((a)[0])<<8)|((a)[1])) ++ ++extern struct mspack_system *mspack_default_system; ++ ++/* returns the length of a file opened for reading */ ++extern int mspack_sys_filelen(struct mspack_system *system, ++ struct mspack_file *file, off_t *length); ++ ++/* validates a system structure */ ++extern int mspack_valid_system(struct mspack_system *sys); ++ ++#if HAVE_STRINGS_H ++# include ++#endif ++ ++#if HAVE_STRING_H ++# include ++#endif ++ ++#if HAVE_MEMCMP ++# define mspack_memcmp memcmp ++#else ++/* inline memcmp() */ ++static inline int mspack_memcmp(const void *s1, const void *s2, size_t n) { ++ unsigned char *c1 = (unsigned char *) s1; ++ unsigned char *c2 = (unsigned char *) s2; ++ if (n == 0) return 0; ++ while (--n && (*c1 == *c2)) c1++, c2++; ++ return *c1 - *c2; ++} ++#endif ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/szdd.h b/libclamav/libmspack-0.4alpha/mspack/szdd.h +new file mode 100644 +index 000000000000..e07c6b7c8edd +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/szdd.h +@@ -0,0 +1,39 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++#ifndef MSPACK_SZDD_H ++#define MSPACK_SZDD_H 1 ++ ++#include ++ ++/* input buffer size during decompression - not worth parameterising IMHO */ ++#define SZDD_INPUT_SIZE (2048) ++ ++/* SZDD compression definitions */ ++ ++struct msszdd_compressor_p { ++ struct msszdd_compressor base; ++ struct mspack_system *system; ++ int error; ++}; ++ ++/* SZDD decompression definitions */ ++ ++struct msszdd_decompressor_p { ++ struct msszdd_decompressor base; ++ struct mspack_system *system; ++ int error; ++}; ++ ++struct msszddd_header_p { ++ struct msszddd_header base; ++ struct mspack_file *fh; ++}; ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/mspack/szddc.c b/libclamav/libmspack-0.4alpha/mspack/szddc.c +new file mode 100644 +index 000000000000..cdd39a630532 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/szddc.c +@@ -0,0 +1,24 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2004 Stuart Caie. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* SZDD compression implementation */ ++ ++#include ++#include ++ ++struct msszdd_compressor * ++ mspack_create_szdd_compressor(struct mspack_system *sys) ++{ ++ /* todo */ ++ return NULL; ++} ++ ++void mspack_destroy_szdd_compressor(struct msszdd_compressor *self) { ++ /* todo */ ++} +diff --git a/libclamav/libmspack-0.4alpha/mspack/szddd.c b/libclamav/libmspack-0.4alpha/mspack/szddd.c +new file mode 100644 +index 000000000000..99c5aa465852 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/mspack/szddd.c +@@ -0,0 +1,247 @@ ++/* This file is part of libmspack. ++ * (C) 2003-2010 Stuart Caie. ++ * ++ * SZDD is a format used in the MS-DOS commands COMPRESS.EXE and ++ * EXPAND.EXE. The compression method is attributed to Steven Zeck, ++ * however it's pretty much identical to LZSS. ++ * ++ * libmspack is free software; you can redistribute it and/or modify it under ++ * the terms of the GNU Lesser General Public License (LGPL) version 2.1 ++ * ++ * For further details, see the file COPYING.LIB distributed with libmspack ++ */ ++ ++/* SZDD decompression implementation */ ++ ++#include ++#include ++ ++/* prototypes */ ++static struct msszddd_header *szddd_open( ++ struct msszdd_decompressor *base, const char *filename); ++static void szddd_close( ++ struct msszdd_decompressor *base, struct msszddd_header *hdr); ++static int szddd_read_headers( ++ struct mspack_system *sys, struct mspack_file *fh, ++ struct msszddd_header *hdr); ++static int szddd_extract( ++ struct msszdd_decompressor *base, struct msszddd_header *hdr, ++ const char *filename); ++static int szddd_decompress( ++ struct msszdd_decompressor *base, const char *input, const char *output); ++static int szddd_error( ++ struct msszdd_decompressor *base); ++ ++/*************************************** ++ * MSPACK_CREATE_SZDD_DECOMPRESSOR ++ *************************************** ++ * constructor ++ */ ++struct msszdd_decompressor * ++ mspack_create_szdd_decompressor(struct mspack_system *sys) ++{ ++ struct msszdd_decompressor_p *self = NULL; ++ ++ if (!sys) sys = mspack_default_system; ++ if (!mspack_valid_system(sys)) return NULL; ++ ++ if ((self = (struct msszdd_decompressor_p *) sys->alloc(sys, sizeof(struct msszdd_decompressor_p)))) { ++ self->base.open = &szddd_open; ++ self->base.close = &szddd_close; ++ self->base.extract = &szddd_extract; ++ self->base.decompress = &szddd_decompress; ++ self->base.last_error = &szddd_error; ++ self->system = sys; ++ self->error = MSPACK_ERR_OK; ++ } ++ return (struct msszdd_decompressor *) self; ++} ++ ++/*************************************** ++ * MSPACK_DESTROY_SZDD_DECOMPRESSOR ++ *************************************** ++ * destructor ++ */ ++void mspack_destroy_szdd_decompressor(struct msszdd_decompressor *base) ++{ ++ struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; ++ if (self) { ++ struct mspack_system *sys = self->system; ++ sys->free(self); ++ } ++} ++ ++/*************************************** ++ * SZDDD_OPEN ++ *************************************** ++ * opens an SZDD file without decompressing, reads header ++ */ ++static struct msszddd_header *szddd_open(struct msszdd_decompressor *base, ++ const char *filename) ++{ ++ struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; ++ struct msszddd_header *hdr; ++ struct mspack_system *sys; ++ struct mspack_file *fh; ++ ++ if (!self) return NULL; ++ sys = self->system; ++ ++ fh = sys->open(sys, filename, MSPACK_SYS_OPEN_READ); ++ hdr = (struct msszddd_header *) sys->alloc(sys, sizeof(struct msszddd_header_p)); ++ if (fh && hdr) { ++ ((struct msszddd_header_p *) hdr)->fh = fh; ++ self->error = szddd_read_headers(sys, fh, hdr); ++ } ++ else { ++ if (!fh) self->error = MSPACK_ERR_OPEN; ++ if (!hdr) self->error = MSPACK_ERR_NOMEMORY; ++ } ++ ++ if (self->error) { ++ if (fh) sys->close(fh); ++ if (hdr) sys->free(hdr); ++ hdr = NULL; ++ } ++ ++ return hdr; ++} ++ ++/*************************************** ++ * SZDDD_CLOSE ++ *************************************** ++ * closes an SZDD file ++ */ ++static void szddd_close(struct msszdd_decompressor *base, ++ struct msszddd_header *hdr) ++{ ++ struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; ++ struct msszddd_header_p *hdr_p = (struct msszddd_header_p *) hdr; ++ ++ if (!self || !self->system) return; ++ ++ /* close the file handle associated */ ++ self->system->close(hdr_p->fh); ++ ++ /* free the memory associated */ ++ self->system->free(hdr); ++ ++ self->error = MSPACK_ERR_OK; ++} ++ ++/*************************************** ++ * SZDDD_READ_HEADERS ++ *************************************** ++ * reads the headers of an SZDD format file ++ */ ++static unsigned char szdd_signature_expand[8] = { ++ 0x53, 0x5A, 0x44, 0x44, 0x88, 0xF0, 0x27, 0x33 ++}; ++static unsigned char szdd_signature_qbasic[8] = { ++ 0x53, 0x5A, 0x20, 0x88, 0xF0, 0x27, 0x33, 0xD1 ++}; ++ ++static int szddd_read_headers(struct mspack_system *sys, ++ struct mspack_file *fh, ++ struct msszddd_header *hdr) ++{ ++ unsigned char buf[8]; ++ ++ /* read and check signature */ ++ if (sys->read(fh, buf, 8) != 8) return MSPACK_ERR_READ; ++ ++ if ((mspack_memcmp(buf, szdd_signature_expand, 8) == 0)) { ++ /* common SZDD */ ++ hdr->format = MSSZDD_FMT_NORMAL; ++ ++ /* read the rest of the header */ ++ if (sys->read(fh, buf, 6) != 6) return MSPACK_ERR_READ; ++ if (buf[0] != 0x41) return MSPACK_ERR_DATAFORMAT; ++ hdr->missing_char = buf[1]; ++ hdr->length = EndGetI32(&buf[2]); ++ } ++ else if ((mspack_memcmp(buf, szdd_signature_qbasic, 8) == 0)) { ++ /* special QBasic SZDD */ ++ hdr->format = MSSZDD_FMT_QBASIC; ++ if (sys->read(fh, buf, 4) != 4) return MSPACK_ERR_READ; ++ hdr->missing_char = '\0'; ++ hdr->length = EndGetI32(buf); ++ } ++ else { ++ return MSPACK_ERR_SIGNATURE; ++ } ++ return MSPACK_ERR_OK; ++} ++ ++/*************************************** ++ * SZDDD_EXTRACT ++ *************************************** ++ * decompresses an SZDD file ++ */ ++static int szddd_extract(struct msszdd_decompressor *base, ++ struct msszddd_header *hdr, const char *filename) ++{ ++ struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; ++ struct mspack_file *fh, *outfh; ++ struct mspack_system *sys; ++ off_t data_offset; ++ ++ if (!self) return MSPACK_ERR_ARGS; ++ if (!hdr) return self->error = MSPACK_ERR_ARGS; ++ sys = self->system; ++ ++ fh = ((struct msszddd_header_p *) hdr)->fh; ++ ++ /* seek to the compressed data */ ++ data_offset = (hdr->format == MSSZDD_FMT_NORMAL) ? 14 : 12; ++ if (sys->seek(fh, data_offset, MSPACK_SYS_SEEK_START)) { ++ return self->error = MSPACK_ERR_SEEK; ++ } ++ ++ /* open file for output */ ++ if (!(outfh = sys->open(sys, filename, MSPACK_SYS_OPEN_WRITE))) { ++ return self->error = MSPACK_ERR_OPEN; ++ } ++ ++ /* decompress the data */ ++ self->error = lzss_decompress(sys, fh, outfh, SZDD_INPUT_SIZE, ++ hdr->format == MSSZDD_FMT_NORMAL ++ ? LZSS_MODE_EXPAND ++ : LZSS_MODE_QBASIC); ++ ++ /* close output file */ ++ sys->close(outfh); ++ ++ return self->error; ++} ++ ++/*************************************** ++ * SZDDD_DECOMPRESS ++ *************************************** ++ * unpacks directly from input to output ++ */ ++static int szddd_decompress(struct msszdd_decompressor *base, ++ const char *input, const char *output) ++{ ++ struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; ++ struct msszddd_header *hdr; ++ int error; ++ ++ if (!self) return MSPACK_ERR_ARGS; ++ ++ if (!(hdr = szddd_open(base, input))) return self->error; ++ error = szddd_extract(base, hdr, output); ++ szddd_close(base, hdr); ++ return self->error = error; ++} ++ ++/*************************************** ++ * SZDDD_ERROR ++ *************************************** ++ * returns the last error that occurred ++ */ ++static int szddd_error(struct msszdd_decompressor *base) ++{ ++ struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base; ++ return (self) ? self->error : MSPACK_ERR_ARGS; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/cabd_md5.c b/libclamav/libmspack-0.4alpha/test/cabd_md5.c +new file mode 100644 +index 000000000000..6a00dbda3f0d +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/cabd_md5.c +@@ -0,0 +1,161 @@ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++/** ++ * Matches a cabinet's filename case-insensitively in the filesystem and ++ * returns the case-correct form. ++ * ++ * @param origcab if this is non-NULL, the pathname part of this filename ++ * will be extracted, and the search will be conducted in ++ * that directory. ++ * @param cabname the internal CAB filename to search for. ++ * @return a copy of the full, case-correct filename of the given cabinet ++ * filename, or NULL if the specified filename does not exist on disk. ++ */ ++static char *find_cabinet_file(char *origcab, char *cabname) { ++ struct dirent *entry; ++ struct stat st_buf; ++ int found = 0, len; ++ char *tail, *cab; ++ DIR *dir; ++ ++ /* ensure we have a cabinet name at all */ ++ if (!cabname || !cabname[0]) return NULL; ++ ++ /* find if there's a directory path in the origcab */ ++ tail = origcab ? strrchr(origcab, '/') : NULL; ++ len = (tail - origcab) + 1; ++ ++ /* allocate memory for our copy */ ++ if (!(cab = (char *) malloc((tail ? len : 2) + strlen(cabname) + 1))) return NULL; ++ ++ /* add the directory path from the original cabinet name, or "." */ ++ if (tail) memcpy(cab, origcab, (size_t) len); ++ else cab[0]='.', cab[1]='/', len=2; ++ cab[len] = '\0'; ++ ++ /* try accessing the cabinet with its current name (case-sensitive) */ ++ strcpy(&cab[len], cabname); ++ if (stat(cab, &st_buf) == 0) { ++ found = 1; ++ } ++ else { ++ /* cabinet was not found, look for it in the current dir */ ++ cab[len] = '\0'; ++ if ((dir = opendir(cab))) { ++ while ((entry = readdir(dir))) { ++ if (strcasecmp(cabname, entry->d_name) == 0) { ++ strcat(cab, entry->d_name); ++ found = (stat(cab, &st_buf) == 0); ++ break; ++ } ++ } ++ closedir(dir); ++ } ++ } ++ ++ if (!found || !S_ISREG(st_buf.st_mode)) { ++ /* cabinet not found, or not a regular file */ ++ free(cab); ++ cab = NULL; ++ } ++ ++ return cab; ++} ++ ++ ++int main(int argc, char *argv[]) { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab, *c, *c2; ++ struct mscabd_file *file; ++ char *cabname, *newname; ++ int err; ++ ++ setbuf(stdout, NULL); ++ setbuf(stderr, NULL); ++ ++ /* if self-test reveals an error */ ++ MSPACK_SYS_SELFTEST(err); ++ if (err) return 1; ++ ++ if (!(cabd = mspack_create_cab_decompressor(&read_files_write_md5))) { ++ fprintf(stderr, "can't make decompressor\n"); ++ return 1; ++ } ++ ++ for (argv++; (cabname = *argv); argv++) { ++ printf("*** %s\n", cabname); ++ ++ if (!(cab = cabd->open(cabd, cabname))) { ++ fprintf(stderr, "cab open error: %s\n", ERROR(cabd)); ++ continue; ++ } ++ ++ /* prepend any spanning cabinets */ ++ for (c = cab; c && (c->flags & MSCAB_HDR_PREVCAB); c = c->prevcab) { ++ if (!(newname = find_cabinet_file(cabname, c->prevname))) { ++ fprintf(stderr, "%s: can't find \"%s\" to prepend\n", ++ cabname, c->prevname); ++ break; ++ } ++ if (!(c2 = cabd->open(cabd, newname))) { ++ fprintf(stderr, "%s: error opening \"%s\" for prepend: %s\n", ++ cabname, newname, ERROR(cabd)); ++ break; ++ } ++ if (cabd->prepend(cabd, c, c2) != MSPACK_ERR_OK) { ++ fprintf(stderr, "%s: error prepending \"%s\": %s\n", ++ cabname, newname, ERROR(cabd)); ++ break; ++ } ++ } ++ ++ /* append any spanning cabinets */ ++ for (c = cab; c && (c->flags & MSCAB_HDR_NEXTCAB); c = c->nextcab) { ++ if (!(newname = find_cabinet_file(cabname, c->nextname))) { ++ fprintf(stderr, "%s: can't find \"%s\" to append\n", ++ cabname, c->nextname); ++ break; ++ } ++ if (!(c2 = cabd->open(cabd, newname))) { ++ fprintf(stderr, "%s: error opening \"%s\" for append: %s\n", ++ cabname, newname, ERROR(cabd)); ++ break; ++ } ++ if (cabd->append(cabd, c, c2) != MSPACK_ERR_OK) { ++ fprintf(stderr, "%s: error appending \"%s\": %s\n", ++ cabname, newname, ERROR(cabd)); ++ break; ++ } ++ } ++ ++ /* extract files */ ++ for (file = cab->files; file; file = file->next ) { ++ if (cabd->extract(cabd, file, NULL) == MSPACK_ERR_OK) { ++ printf("%s %s\n", md5_string, file->filename); ++ } ++ else { ++ fprintf(stderr, "%s: error extracting \"%s\": %s\n", ++ cabname, file->filename, ERROR(cabd)); ++ } ++ } ++ ++ /* free all resources */ ++ for (c2 = cab->prevcab; c2; c2 = c2->prevcab) free((void*)c2->filename); ++ for (c2 = cab->nextcab; c2; c2 = c2->nextcab) free((void*)c2->filename); ++ cabd->close(cabd, cab); ++ } ++ mspack_destroy_cab_decompressor(cabd); ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/cabd_memory.c b/libclamav/libmspack-0.4alpha/test/cabd_memory.c +new file mode 100644 +index 000000000000..f7a78972c8e4 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/cabd_memory.c +@@ -0,0 +1,179 @@ ++/* An implementation of the mspack_system interface using only memory */ ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++/* use a pointer to a mem_buf structure as "filenames" */ ++struct mem_buf { ++ void *data; ++ size_t length; ++}; ++ ++struct mem_file { ++ char *data; ++ size_t length, posn; ++}; ++ ++static void *mem_alloc(struct mspack_system *self, size_t bytes) { ++ /* put your memory allocator here */ ++ return malloc(bytes); ++} ++ ++static void mem_free(void *buffer) { ++ /* put your memory deallocator here */ ++ free(buffer); ++} ++ ++static void mem_copy(void *src, void *dest, size_t bytes) { ++ /* put your own memory copy routine here */ ++ memcpy(dest, src, bytes); ++} ++ ++static void mem_msg(struct mem_file *file, const char *format, ...) { ++ /* put your own printf-type routine here, or leave it empty */ ++} ++ ++static struct mem_file *mem_open(struct mspack_system *self, ++ struct mem_buf *fn, int mode) ++{ ++ struct mem_file *fh; ++ if (!fn || !fn->data || !fn->length) return NULL; ++ if ((fh = (struct mem_file *) mem_alloc(self, sizeof(struct mem_file)))) { ++ fh->data = (char *) fn->data; ++ fh->length = fn->length; ++ fh->posn = (mode == MSPACK_SYS_OPEN_APPEND) ? fn->length : 0; ++ } ++ return fh; ++} ++ ++static void mem_close(struct mem_file *fh) { ++ if (fh) mem_free(fh); ++} ++ ++static int mem_read(struct mem_file *fh, void *buffer, int bytes) { ++ int todo; ++ if (!fh || !buffer || bytes < 0) return -1; ++ todo = fh->length - fh->posn; ++ if (todo > bytes) todo = bytes; ++ if (todo > 0) mem_copy(&fh->data[fh->posn], buffer, (size_t) todo); ++ fh->posn += todo; return todo; ++} ++ ++static int mem_write(struct mem_file *fh, void *buffer, int bytes) { ++ int todo; ++ if (!fh || !buffer || bytes < 0) return -1; ++ todo = fh->length - fh->posn; ++ if (todo > bytes) todo = bytes; ++ if (todo > 0) mem_copy(buffer, &fh->data[fh->posn], (size_t) todo); ++ fh->posn += todo; return todo; ++} ++ ++static int mem_seek(struct mem_file *fh, off_t offset, int mode) { ++ if (!fh) return 1; ++ switch (mode) { ++ case MSPACK_SYS_SEEK_START: break; ++ case MSPACK_SYS_SEEK_CUR: offset += (off_t) fh->posn; break; ++ case MSPACK_SYS_SEEK_END: offset += (off_t) fh->length; break; ++ default: return 1; ++ } ++ if ((offset < 0) || (offset > (off_t) fh->length)) return 1; ++ fh->posn = (size_t) offset; ++ return 0; ++} ++ ++static off_t mem_tell(struct mem_file *fh) { ++ return (fh) ? (off_t) fh->posn : -1; ++} ++ ++static struct mspack_system mem_system = { ++ (struct mspack_file * (*)(struct mspack_system *, const char *, int)) &mem_open, ++ (void (*)(struct mspack_file *)) &mem_close, ++ (int (*)(struct mspack_file *, void *, int)) &mem_read, ++ (int (*)(struct mspack_file *, void *, int)) &mem_write, ++ (int (*)(struct mspack_file *, off_t, int)) &mem_seek, ++ (off_t (*)(struct mspack_file *)) &mem_tell, ++ (void (*)(struct mspack_file *, const char *, ...)) &mem_msg, ++ &mem_alloc, ++ &mem_free, ++ &mem_copy, ++ NULL ++}; ++ ++/* example of usage with mscab_decompressor */ ++ ++/* a simple cabinet */ ++static unsigned char embedded_cab[] = { ++ 0x4D,0x53,0x43,0x46,0x00,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x00,0x00,0x00, ++ 0x00,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x01,0x00,0x02,0x00, ++ 0x00,0x00,0x22,0x06,0x00,0x00,0x5E,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x4D, ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x22,0xBA,0x59,0x20,0x00, ++ 0x68,0x65,0x6C,0x6C,0x6F,0x2E,0x63,0x00,0x4A,0x00,0x00,0x00,0x4D,0x00,0x00, ++ 0x00,0x00,0x00,0x6C,0x22,0xE7,0x59,0x20,0x00,0x77,0x65,0x6C,0x63,0x6F,0x6D, ++ 0x65,0x2E,0x63,0x00,0xBD,0x5A,0xA6,0x30,0x97,0x00,0x97,0x00,0x23,0x69,0x6E, ++ 0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x73,0x74,0x64,0x69,0x6F,0x2E,0x68,0x3E, ++ 0x0D,0x0A,0x0D,0x0A,0x76,0x6F,0x69,0x64,0x20,0x6D,0x61,0x69,0x6E,0x28,0x76, ++ 0x6F,0x69,0x64,0x29,0x0D,0x0A,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x70,0x72, ++ 0x69,0x6E,0x74,0x66,0x28,0x22,0x48,0x65,0x6C,0x6C,0x6F,0x2C,0x20,0x77,0x6F, ++ 0x72,0x6C,0x64,0x21,0x5C,0x6E,0x22,0x29,0x3B,0x0D,0x0A,0x7D,0x0D,0x0A,0x23, ++ 0x69,0x6E,0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x73,0x74,0x64,0x69,0x6F,0x2E, ++ 0x68,0x3E,0x0D,0x0A,0x0D,0x0A,0x76,0x6F,0x69,0x64,0x20,0x6D,0x61,0x69,0x6E, ++ 0x28,0x76,0x6F,0x69,0x64,0x29,0x0D,0x0A,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20, ++ 0x70,0x72,0x69,0x6E,0x74,0x66,0x28,0x22,0x57,0x65,0x6C,0x63,0x6F,0x6D,0x65, ++ 0x21,0x5C,0x6E,0x22,0x29,0x3B,0x0D,0x0A,0x7D,0x0D,0x0A,0x0D,0x0A ++}; ++ ++int main() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ struct mscabd_file *file; ++ struct mem_buf source = { &embedded_cab[0], sizeof(embedded_cab) }; ++ struct mem_buf output; ++ int err; ++ ++ /* if self-test reveals an error */ ++ MSPACK_SYS_SELFTEST(err); ++ if (err) return 1; ++ ++ /* create a cab decompressor using our custom mspack_system interface */ ++ if ((cabd = mspack_create_cab_decompressor(&mem_system))) { ++ ++ /* open a cab file direct from memory */ ++ if ((cab = cabd->open(cabd, (char *) &source))) { ++ ++ /* for all files */ ++ for (file = cab->files; file; file = file->next) { ++ /* fill out our "filename" (memory pointer and length) */ ++ output.data = (char *) malloc(file->length); ++ output.length = file->length; ++ ++ /* let cabd extract this file to our memory buffer */ ++ if (output.data && cabd->extract(cabd, file, (char *) &output)) { ++ exit(1); ++ } ++ ++ /* dump the memory buffer to stdout (for display purposes) */ ++ printf("Filename: %s\nContents:\n", file->filename); ++ fwrite(output.data, 1, output.length, stdout); ++ ++ /* free our buffer */ ++ free(output.data); ++ } ++ cabd->close(cabd, cab); ++ } ++ else { ++ fprintf(stderr, "can't open cabinet (%d)\n", cabd->last_error(cabd)); ++ } ++ mspack_destroy_cab_decompressor(cabd); ++ } ++ else { ++ fprintf(stderr, "can't make decompressor\n"); ++ } ++ return 0; ++ ++} +diff --git a/libclamav/libmspack-0.4alpha/test/cabd_test.c b/libclamav/libmspack-0.4alpha/test/cabd_test.c +new file mode 100644 +index 000000000000..5e8851ce9f0e +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/cabd_test.c +@@ -0,0 +1,386 @@ ++/* cabinet decompression regression test suite */ ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++unsigned int test_count = 0; ++ ++#define TEST(x) do {\ ++ test_count++; \ ++ if (!(x)) {printf("%s:%d FAILED %s\n",__FUNCTION__,__LINE__,#x);exit(1);} \ ++} while (0) ++ ++/* open where cab file doesn't exist */ ++void cabd_open_test_01() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ cab = cabd->open(cabd, "!!!FILE_WHICH_DOES_NOT_EXIST"); ++ TEST(cab == NULL); ++ TEST(cabd->last_error(cabd) == MSPACK_ERR_OPEN); ++ ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++/* normal cab file with 2 files and one folder. ++ * check ALL headers are read correctly */ ++void cabd_open_test_02() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ struct mscabd_folder *folder; ++ struct mscabd_file *file; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ cab = cabd->open(cabd, "test_files/cabd/normal_2files_1folder.cab"); ++ TEST(cab != NULL); ++ ++ TEST(cab->next == NULL); ++ TEST(cab->base_offset == 0); ++ TEST(cab->length == 253); ++ TEST(cab->prevcab == NULL); TEST(cab->nextcab == NULL); ++ TEST(cab->prevname == NULL); TEST(cab->nextname == NULL); ++ TEST(cab->previnfo == NULL); TEST(cab->nextinfo == NULL); ++ TEST(cab->set_id = 1570); TEST(cab->set_index == 0); ++ TEST(cab->header_resv == 0); ++ TEST(cab->flags == 0); ++ ++ folder = cab->folders; ++ TEST(folder != NULL); ++ TEST(folder->next == NULL); ++ TEST(folder->comp_type == 0); ++ TEST(folder->num_blocks == 1); ++ ++ file = cab->files; ++ TEST(file != NULL); ++ TEST(strcmp(file->filename, "hello.c") == 0); ++ TEST(file->length == 77); ++ TEST(file->attribs == 0x20); ++ TEST(file->time_h == 11);TEST(file->time_m == 13);TEST(file->time_s == 52); ++ TEST(file->date_d == 12);TEST(file->date_m == 3);TEST(file->date_y == 1997); ++ TEST(file->folder == folder); TEST(file->offset == 0); ++ ++ file = file->next; ++ TEST(file != NULL); ++ TEST(strcmp(file->filename, "welcome.c") == 0); ++ TEST(file->length == 74); ++ TEST(file->attribs == 0x20); ++ TEST(file->time_h == 11);TEST(file->time_m == 15);TEST(file->time_s == 14); ++ TEST(file->date_d == 12);TEST(file->date_m == 3);TEST(file->date_y == 1997); ++ TEST(file->folder == folder); TEST(file->offset == 77); ++ ++ cabd->close(cabd, cab); ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++/* cabs with reserve headers set, ensure they all load correctly */ ++void cabd_open_test_03() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ unsigned int i; ++ const char *files[] = { ++ "test_files/cabd/reserve_---.cab", ++ "test_files/cabd/reserve_--D.cab", ++ "test_files/cabd/reserve_-F-.cab", ++ "test_files/cabd/reserve_-FD.cab", ++ "test_files/cabd/reserve_H--.cab", ++ "test_files/cabd/reserve_H-D.cab", ++ "test_files/cabd/reserve_HF-.cab", ++ "test_files/cabd/reserve_HFD.cab" ++ }; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ for (i = 0; i < (sizeof(files)/sizeof(char *)); i++) { ++ cab = cabd->open(cabd, files[i]); ++ TEST(cab != NULL); ++ TEST(cab->files != NULL); ++ TEST(cab->files->next != NULL); ++ TEST(strcmp(cab->files->filename, "test1.txt") == 0); ++ TEST(strcmp(cab->files->next->filename, "test2.txt") == 0); ++ cabd->close(cabd, cab); ++ } ++ ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++/* some bad cabs, should not load */ ++void cabd_open_test_04() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ /* cab has enough data for a header, but does not contain real cab data ++ * result should be MSPACK_ERR_SIGNATURE */ ++ cab = cabd->open(cabd, "test_files/cabd/bad_signature.cab"); ++ TEST(cab == NULL); ++ ++ /* cab has 0 folders */ ++ cab = cabd->open(cabd, "test_files/cabd/bad_nofolders.cab"); ++ TEST(cab == NULL); ++ ++ /* cab has 0 files */ ++ cab = cabd->open(cabd, "test_files/cabd/bad_nofiles.cab"); ++ TEST(cab == NULL); ++ ++ /* second file in the cab has a folder index for a non-existant folder */ ++ cab = cabd->open(cabd, "test_files/cabd/bad_folderindex.cab"); ++ TEST(cab == NULL); ++ ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++/* cabs which have been cut short ++ * result should be MSPACK_ERR_READ for missing headers or ++ * MSPACK_ERR_DATAFORMAT for missing/partial strings. ++ * If only data blocks are missing, the cab should open() ++ */ ++void cabd_open_test_05() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ unsigned int i; ++ const char *files[] = { ++ "test_files/cabd/partial_shortheader.cab", ++ "test_files/cabd/partial_shortextheader.cab", ++ "test_files/cabd/partial_nofolder.cab", ++ "test_files/cabd/partial_shortfolder.cab", ++ "test_files/cabd/partial_nofiles.cab", ++ "test_files/cabd/partial_shortfile1.cab", ++ "test_files/cabd/partial_shortfile2.cab" ++ }; ++ const char *str_files[] = { ++ "test_files/cabd/partial_str_nopname.cab", ++ "test_files/cabd/partial_str_shortpname.cab", ++ "test_files/cabd/partial_str_nopinfo.cab", ++ "test_files/cabd/partial_str_shortpinfo.cab", ++ "test_files/cabd/partial_str_nonname.cab", ++ "test_files/cabd/partial_str_shortnname.cab", ++ "test_files/cabd/partial_str_noninfo.cab", ++ "test_files/cabd/partial_str_shortninfo.cab", ++ "test_files/cabd/partial_str_nofname.cab", ++ "test_files/cabd/partial_str_shortfname.cab", ++ }; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ for (i = 0; i < (sizeof(files)/sizeof(char *)); i++) { ++ cab = cabd->open(cabd, files[i]); ++ TEST(cab == NULL); ++ TEST(cabd->last_error(cabd) == MSPACK_ERR_READ); ++ } ++ ++ for (i = 0; i < (sizeof(str_files)/sizeof(char *)); i++) { ++ cab = cabd->open(cabd, str_files[i]); ++ TEST(cab == NULL); ++ TEST(cabd->last_error(cabd) == MSPACK_ERR_DATAFORMAT); ++ } ++ ++ /* lack of data blocks should NOT be a problem for merely reading */ ++ cab = cabd->open(cabd, "test_files/cabd/partial_nodata.cab"); ++ TEST(cab != NULL); ++ ++ cabd->close(cabd, cab); ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++/* open cab with 255 character filename (maximum allowed) */ ++void cabd_open_test_06() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ cab = cabd->open(cabd, "test_files/cabd/normal_255c_filename.cab"); ++ TEST(cab != NULL); ++ ++ cabd->close(cabd, cab); ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++ ++/* open where search file doesn't exist */ ++void cabd_search_test_01() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ cab = cabd->search(cabd, "!!!FILE_WHICH_DOES_NOT_EXIST"); ++ TEST(cab == NULL); ++ TEST(cabd->last_error(cabd) == MSPACK_ERR_OPEN); ++ ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++/* search file using 1-byte buffer */ ++void cabd_search_test_02() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ cabd->set_param(cabd, MSCABD_PARAM_SEARCHBUF, 1); ++ cab = cabd->search(cabd, "test_files/cabd/search_basic.cab"); ++ cabd->set_param(cabd, MSCABD_PARAM_SEARCHBUF, 32768); ++ ++ TEST(cab != NULL); ++ TEST(cab->files != NULL); ++ TEST(cab->base_offset == 6); ++ TEST(cab->files->next != NULL); ++ TEST(strcmp(cab->files->filename, "hello.c") == 0); ++ TEST(strcmp(cab->files->next->filename, "welcome.c") == 0); ++ ++ TEST(cab->next != NULL); ++ TEST(cab->next->base_offset == 265); ++ TEST(cab->next->files != NULL); ++ TEST(cab->next->files->next != NULL); ++ TEST(strcmp(cab->next->files->filename, "hello.c") == 0); ++ TEST(strcmp(cab->next->files->next->filename, "welcome.c") == 0); ++ ++ TEST(cab->next->next == NULL); ++ ++ cabd->close(cabd, cab); ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++/* tricky searches */ ++void cabd_search_test_03() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ /* there is only ONE cab in this file. it is prepended by 4 bytes, "MSCF" ++ * (heh) and reserved fields in the real cab are filled in so the fake one ++ * looks real to the scanner but not the real reader ++ */ ++ cab = cabd->search(cabd, "test_files/cabd/search_tricky1.cab"); ++ TEST(cab != NULL); ++ TEST(cab->next == NULL); ++ TEST(cab->files != NULL); ++ TEST(cab->base_offset == 4); ++ TEST(cab->files->next != NULL); ++ TEST(strcmp(cab->files->filename, "hello.c") == 0); ++ TEST(strcmp(cab->files->next->filename, "welcome.c") == 0); ++ ++ cabd->close(cabd, cab); ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++/* basic parameter failures */ ++void cabd_merge_test_01() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab1, *cab2; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ cab1 = cabd->open(cabd, "test_files/cabd/multi_basic_pt1.cab"); ++ cab2 = cabd->open(cabd, "test_files/cabd/multi_basic_pt2.cab"); ++ TEST(cab1 != NULL); ++ TEST(cab2 != NULL); ++ TEST(cabd->append(cabd, cab1, NULL) != MSPACK_ERR_OK); ++ TEST(cabd->append(cabd, NULL, cab1) != MSPACK_ERR_OK); ++ TEST(cabd->append(cabd, cab1, cab1) != MSPACK_ERR_OK); ++ TEST(cabd->prepend(cabd, cab1, NULL) != MSPACK_ERR_OK); ++ TEST(cabd->prepend(cabd, NULL, cab1) != MSPACK_ERR_OK); ++ TEST(cabd->prepend(cabd, cab1, cab1) != MSPACK_ERR_OK); ++ ++ /* merge cabs, then try merging again every other way */ ++ TEST(cabd->append(cabd, cab1, cab2) == MSPACK_ERR_OK); ++ TEST(cabd->append(cabd, cab2, cab1) != MSPACK_ERR_OK); ++ TEST(cabd->prepend(cabd, cab1, cab2) != MSPACK_ERR_OK); ++ TEST(cabd->prepend(cabd, cab2, cab1) != MSPACK_ERR_OK); ++ TEST(cabd->append(cabd, cab1, cab2) != MSPACK_ERR_OK); ++ ++ cabd->close(cabd, cab1); ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++/* test merging a normal 5 part single folder cabinet set with slightly ++ * haphazard ordering. should still merge fine */ ++void cabd_merge_test_02() { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab[5]; ++ ++ cabd = mspack_create_cab_decompressor(NULL); ++ TEST(cabd != NULL); ++ ++ cab[0] = cabd->open(cabd, "test_files/cabd/multi_basic_pt1.cab"); ++ cab[1] = cabd->open(cabd, "test_files/cabd/multi_basic_pt2.cab"); ++ cab[2] = cabd->open(cabd, "test_files/cabd/multi_basic_pt3.cab"); ++ cab[3] = cabd->open(cabd, "test_files/cabd/multi_basic_pt4.cab"); ++ cab[4] = cabd->open(cabd, "test_files/cabd/multi_basic_pt5.cab"); ++ TEST(cab[0] != NULL); ++ TEST(cab[1] != NULL); ++ TEST(cab[2] != NULL); ++ TEST(cab[3] != NULL); ++ TEST(cab[4] != NULL); ++ TEST(cabd->append(cabd, cab[0], cab[1]) == MSPACK_ERR_OK); ++ TEST(cabd->prepend(cabd, cab[2], cab[1]) == MSPACK_ERR_OK); ++ TEST(cabd->append(cabd, cab[3], cab[4]) == MSPACK_ERR_OK); ++ TEST(cabd->prepend(cabd, cab[3], cab[2]) == MSPACK_ERR_OK); ++ ++ TEST(cab[0]->files != NULL); ++ TEST(cab[0]->files->next != NULL); ++ TEST(cab[0]->files->next->next != NULL); ++ TEST(cab[0]->files->next->next->next == NULL); ++ TEST(cab[0]->files == cab[1]->files); ++ TEST(cab[1]->files == cab[2]->files); ++ TEST(cab[2]->files == cab[3]->files); ++ TEST(cab[3]->files == cab[4]->files); ++ ++ TEST(cab[0]->folders != NULL); ++ TEST(cab[0]->folders->next == NULL); ++ TEST(cab[0]->folders == cab[1]->folders); ++ TEST(cab[1]->folders == cab[2]->folders); ++ TEST(cab[2]->folders == cab[3]->folders); ++ TEST(cab[3]->folders == cab[4]->folders); ++ ++ cabd->close(cabd, cab[0]); ++ mspack_destroy_cab_decompressor(cabd); ++} ++ ++int main() { ++ int selftest; ++ ++ MSPACK_SYS_SELFTEST(selftest); ++ TEST(selftest == MSPACK_ERR_OK); ++ ++ cabd_open_test_01(); ++ cabd_open_test_02(); ++ cabd_open_test_03(); ++ cabd_open_test_04(); ++ cabd_open_test_05(); ++ cabd_open_test_06(); ++ ++ cabd_search_test_01(); ++ cabd_search_test_02(); ++ cabd_search_test_03(); ++ ++ cabd_merge_test_01(); ++ cabd_merge_test_02(); ++ ++ /* extract() tests */ ++ ++ printf("ALL %d TESTS PASSED.\n", test_count); ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/cabrip.c b/libclamav/libmspack-0.4alpha/test/cabrip.c +new file mode 100644 +index 000000000000..5df9a44b3920 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/cabrip.c +@@ -0,0 +1,81 @@ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++ ++#define BUF_SIZE (1024*4096) ++char buf[BUF_SIZE]; ++ ++void rip(char *fname, off_t offset, unsigned int length) { ++ static unsigned int counter = 1; ++ struct stat st_buf; ++ char outname[13]; ++ FILE *in, *out; ++ ++ do { ++ snprintf(outname, 13, "%08u.cab", counter++); ++ } while (stat(outname, &st_buf) == 0); ++ ++ printf("ripping %s offset %" LD " length %u to %s\n", ++ fname, offset, length, outname); ++ ++ if ((in = fopen(fname, "rb"))) { ++#ifdef HAVE_FSEEKO ++ if (!fseeko(in, offset, SEEK_SET)) { ++#else ++ if (!fseek(in, offset, SEEK_SET)) { ++#endif ++ if ((out = fopen(outname, "wb"))) { ++ while (length > 0) { ++ unsigned int run = BUF_SIZE; ++ if (run > length) run = length; ++ if (fread(&buf[0], 1, run, in) != run) { ++ perror(fname); ++ break; ++ } ++ if (fwrite(&buf[0], 1, run, out) != run) { ++ perror(outname); ++ break; ++ } ++ length -= run; ++ } ++ fclose(out); ++ } ++ else { ++ perror(outname); ++ } ++ } ++ else { ++ perror(fname); ++ } ++ fclose(in); ++ } ++ else { ++ perror(fname); ++ } ++} ++ ++int main(int argc, char *argv[]) { ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab, *c; ++ int err; ++ ++ MSPACK_SYS_SELFTEST(err); ++ if (err) return 0; ++ ++ if ((cabd = mspack_create_cab_decompressor(NULL))) { ++ for (argv++; *argv; argv++) { ++ if ((cab = cabd->search(cabd, *argv))) { ++ for (c = cab; c; c = c->next) rip(*argv, c->base_offset, c->length); ++ cabd->close(cabd, cab); ++ } ++ } ++ mspack_destroy_cab_decompressor(cabd); ++ } ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/chmd_find.c b/libclamav/libmspack-0.4alpha/test/chmd_find.c +new file mode 100644 +index 000000000000..c30a972c57d8 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/chmd_find.c +@@ -0,0 +1,95 @@ ++/* chmd_find: tests fast-find functionality ++ */ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++void find(struct mschm_decompressor *chmd, struct mschmd_header *chm, ++ char *archive, char *filename, struct mschmd_file *compare) ++{ ++ struct mschmd_file result; ++ if (chmd->fast_find(chmd, chm, filename, &result, sizeof(result))) { ++ fprintf(stderr, "%s: find error on \"%s\": %s\n", ++ archive, filename, ERROR(chmd)); ++ } ++ else if (!result.section) { ++ if (compare) { ++ fprintf(stderr, "%s: file \"%s\" not found\n", archive, filename); ++ } ++ else { ++ printf("%s: file \"%s\" not found\n", archive, filename); ++ } ++ } ++ else { ++ printf("%s\n", filename); ++ printf(" section: %d\n", result.section->id); ++ printf(" offset: %" LD "\n", result.offset); ++ printf(" length: %" LD "\n", result.length); ++ if (compare) { ++ if (result.section->id != compare->section->id) { ++ fprintf(stderr, "%s: found file \"%s\" section is wrong " ++ "(%d vs %d)\n", archive, filename, ++ result.section->id, compare->section->id); ++ } ++ ++ if (result.offset != compare->offset) { ++ fprintf(stderr, "%s: found file \"%s\" offset is wrong " ++ "(%" LD " vs %" LD ")\n", archive, filename, ++ result.offset, compare->offset); ++ } ++ ++ if (result.length != compare->length) { ++ fprintf(stderr, "%s: found file \"%s\" length is wrong " ++ "(%" LD " vs %" LD ")\n", archive, filename, ++ result.length, compare->length); ++ } ++ } ++ } ++} ++ ++int main(int argc, char *argv[]) { ++ struct mschm_decompressor *chmd; ++ struct mschmd_header *chm, *chm2; ++ unsigned int i; ++ ++ if (argc < 2 || argc > 3) { ++ printf("Usage: %s [filename to find]\n", argv[0]); ++ return 1; ++ } ++ ++ MSPACK_SYS_SELFTEST(i); ++ if (i) return 0; ++ ++ if ((chmd = mspack_create_chm_decompressor(NULL))) { ++ if ((chm = chmd->fast_open(chmd, argv[1]))) { ++ if (argv[2]) { ++ find(chmd, chm, argv[1], argv[2], NULL); ++ } ++ else { ++ if ((chm2 = chmd->open(chmd, argv[1]))) { ++ struct mschmd_file *file; ++ for (file = chm2->files; file; file = file->next) { ++ find(chmd, chm, argv[1], file->filename, file); ++ } ++ } ++ else { ++ printf("%s: can't open -- %s\n", argv[1], ERROR(chmd)); ++ } ++ } ++ chmd->close(chmd, chm); ++ } ++ else { ++ printf("%s: can't open -- %s\n", argv[1], ERROR(chmd)); ++ } ++ mspack_destroy_chm_decompressor(chmd); ++ } ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/chmd_md5.c b/libclamav/libmspack-0.4alpha/test/chmd_md5.c +new file mode 100644 +index 000000000000..6187fa460914 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/chmd_md5.c +@@ -0,0 +1,67 @@ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++static int sortfunc(const void *a, const void *b) { ++ off_t diff = ++ ((* ((struct mschmd_file **) a))->offset) - ++ ((* ((struct mschmd_file **) b))->offset); ++ return (diff < 0) ? -1 : ((diff > 0) ? 1 : 0); ++} ++ ++int main(int argc, char *argv[]) { ++ struct mschm_decompressor *chmd; ++ struct mschmd_header *chm; ++ struct mschmd_file *file, **f; ++ unsigned int numf, i; ++ int err; ++ ++ setbuf(stdout, NULL); ++ setbuf(stderr, NULL); ++ ++ MSPACK_SYS_SELFTEST(err); ++ if (err) return 0; ++ ++ if ((chmd = mspack_create_chm_decompressor(&read_files_write_md5))) { ++ for (argv++; *argv; argv++) { ++ printf("*** %s\n", *argv); ++ if ((chm = chmd->open(chmd, *argv))) { ++ ++ /* extract in order of the offset into content section - faster */ ++ for (numf=0, file=chm->files; file; file = file->next) numf++; ++ if ((f = (struct mschmd_file **) calloc(numf, sizeof(struct mschmd_file *)))) { ++ for (i=0, file=chm->files; file; file = file->next) f[i++] = file; ++ qsort(f, numf, sizeof(struct mschmd_file *), &sortfunc); ++ for (i = 0; i < numf; i++) { ++ if (chmd->extract(chmd, f[i], NULL)) { ++ fprintf(stderr, "%s: extract error on \"%s\": %s\n", ++ *argv, f[i]->filename, ERROR(chmd)); ++ } ++ else { ++ printf("%s %s\n", md5_string, f[i]->filename); ++ } ++ } ++ free(f); ++ } ++ ++ chmd->close(chmd, chm); ++ } ++ else { ++ fprintf(stderr, "%s: can't open -- %s\n", *argv, ERROR(chmd)); ++ } ++ } ++ mspack_destroy_chm_decompressor(chmd); ++ } ++ else { ++ fprintf(stderr, "%s: can't make CHM decompressor\n", *argv); ++ } ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/chmd_order.c b/libclamav/libmspack-0.4alpha/test/chmd_order.c +new file mode 100644 +index 000000000000..cb7f47d0e99f +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/chmd_order.c +@@ -0,0 +1,144 @@ ++/* chmd_order: test that extracting a CHM file in different ways works ++ * and all give the same results: ++ * - extracting files in the order they're listed (generally alphabetical) ++ * - extracting files ordered by their content section offset ++ * - extracting files using fast_find() to find them ++ * - extracting files from two chms at the same time with one decompressor ++ */ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++struct my_file { ++ struct mschmd_file *file; ++ struct mschmd_file result; ++ char ordered[32], sorted[32], fast_find[32], mixed[32]; ++}; ++ ++static int sortfunc(const void *a, const void *b) { ++ off_t diff = ++ ((struct my_file *) a)->file->offset - ++ ((struct my_file *) b)->file->offset; ++ return (diff < 0) ? -1 : ((diff > 0) ? 1 : 0); ++} ++ ++int main(int argc, char *argv[]) { ++ struct mschm_decompressor *chmd; ++ struct mschmd_header *chm, *chm2; ++ struct mschmd_file *file; ++ struct my_file *f; ++ unsigned int N, i; ++ ++ MSPACK_SYS_SELFTEST(i); ++ if (i) return 0; ++ ++ if ((chmd = mspack_create_chm_decompressor(&read_files_write_md5))) { ++ for (argv++; *argv; argv++) { ++ printf("%s\n", *argv); ++ ++ if ((chm = chmd->open(chmd, *argv))) { ++ if ((chm2 = chmd->fast_open(chmd, *argv))) { ++ ++ /* count the number of files, allocate a results structure */ ++ for (N=0, file = chm->files; file; file = file->next) N++; ++ if ((f = (struct my_file *) calloc(N, sizeof(struct my_file)))) { ++ ++ /* fill out results structure while doing ordered extraction */ ++ for (i = 0, file = chm->files; file; file = file->next, i++) { ++ printf("OX %s\n", file->filename); ++ f[i].file = file; ++ if (chmd->extract(chmd, file, NULL)) { ++ fprintf(stderr, "%s: O extract error on \"%s\": %s\n", ++ *argv, file->filename, ERROR(chmd)); ++ continue; ++ } ++ memcpy(&f[i].ordered[0], md5_string, 32); ++ } ++ ++ /* sort the list into offset order */ ++ qsort(f, N, sizeof(struct my_file), &sortfunc); ++ ++ /* extract in offset order */ ++ for (i = 0; i < N; i++) { ++ printf("SX %s\n", f[i].file->filename); ++ if (chmd->extract(chmd, f[i].file, NULL)) { ++ fprintf(stderr, "%s: S extract error on \"%s\": %s\n", ++ *argv, f[i].file->filename, ERROR(chmd)); ++ continue; ++ } ++ memcpy(&f[i].sorted[0], md5_string, 32); ++ } ++ ++ /* extract using fast_find */ ++ for (i = 0; i < N; i++) { ++ printf("FX %s\n", f[i].file->filename); ++ ++ if (chmd->fast_find(chmd, chm2, ++ f[i].file->filename, ++ &f[i].result, sizeof(struct mschmd_file))) ++ { ++ fprintf(stderr, "%s: find error on \"%s\": %s\n", ++ *argv, f[i].file->filename, ERROR(chmd)); ++ continue; ++ } ++ if (!f[i].result.section) { ++ fprintf(stderr, "%s: can't find file \"%s\"\n", ++ *argv, f[i].file->filename); ++ continue; ++ } ++ if (chmd->extract(chmd, &f[i].result, NULL)) { ++ fprintf(stderr, "%s: F extract error on \"%s\": %s\n", ++ *argv, f[i].file->filename, ERROR(chmd)); ++ continue; ++ } ++ memcpy(&f[i].fast_find[0], md5_string, 32); ++ } ++ ++ /* extract two chms at once */ ++ for (i = 0; i < N; i++) { ++ printf("MX %s\n", f[i].file->filename); ++ chmd->extract(chmd, f[i].file, NULL); ++ if (chmd->extract(chmd, &f[i].result, NULL)) { ++ fprintf(stderr, "%s: M extract error on \"%s\": %s\n", ++ *argv, f[i].file->filename, ERROR(chmd)); ++ continue; ++ } ++ memcpy(&f[i].mixed[0], md5_string, 32); ++ } ++ ++ /* check all the MD5 sums match */ ++ for (i = 0; i < N; i++) { ++ if (memcmp(&f[i].ordered, &f[i].sorted, 32) || ++ memcmp(&f[i].ordered, &f[i].fast_find, 32) || ++ memcmp(&f[i].ordered, &f[i].mixed, 32)) ++ { ++ fprintf(stderr, "%s: sums mismatch on %s " ++ "(O=%32.32s,S=%32.32s,F=%32.32s,M=%32.32s)\n", ++ *argv, f[i].file->filename, ++ &f[i].ordered[0], &f[i].sorted[0], ++ &f[i].fast_find[0], &f[i].mixed[0]); ++ } ++ } ++ ++ free(f); ++ } ++ chmd->close(chmd, chm2); ++ } ++ chmd->close(chmd, chm); ++ } ++ else { ++ printf("%s: can't open -- %s\n", *argv, ERROR(chmd)); ++ } ++ } ++ mspack_destroy_chm_decompressor(chmd); ++ } ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/chminfo.c b/libclamav/libmspack-0.4alpha/test/chminfo.c +new file mode 100644 +index 000000000000..b21ec6427b42 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/chminfo.c +@@ -0,0 +1,284 @@ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define FILENAME ".chminfo-temp" ++ ++unsigned char *load_sys_data(struct mschm_decompressor *chmd, ++ struct mschmd_header *chm, ++ const char *filename, ++ off_t *length_ptr) ++{ ++ struct mschmd_file *file; ++ unsigned char *data; ++ FILE *fh; ++ ++ for (file = chm->sysfiles; file; file = file->next) { ++ if (strcmp(file->filename, filename) == 0) break; ++ } ++ if (!file || file->section->id != 0) return NULL; ++ if (chmd->extract(chmd, file, FILENAME)) return NULL; ++ if (length_ptr) *length_ptr = file->length; ++ if (!(data = (unsigned char *) malloc((size_t) file->length))) return NULL; ++ if ((fh = fopen(FILENAME, "rb"))) { ++ fread(data, (size_t) file->length, 1, fh); ++ fclose(fh); ++ } ++ else { ++ free(data); ++ data = NULL; ++ } ++ unlink(FILENAME); ++ return data; ++} ++ ++char *guid(unsigned char *data) { ++ static char result[43]; ++ snprintf(result, sizeof(result), ++ "{%08X-%04X-%04X-%04X-%02X%02X%02X%02X%02X%02X%02X%02X}", ++ EndGetI32(&data[0]), ++ data[4] | (data[5] << 8), ++ data[6] | (data[7] << 8), ++ data[8] | (data[9] << 8), ++ data[10], data[11], data[12], data[13], ++ data[14], data[15], data[16], data[17]); ++ return result; ++} ++ ++#define READ_ENCINT(var, label) do { \ ++ (var) = 0; \ ++ do { \ ++ if (p > &chunk[chm->chunk_size-2]) goto label; \ ++ (var) = ((var) << 7) | (*p & 0x7F); \ ++ } while (*p++ & 0x80); \ ++} while (0) ++ ++void print_dir(struct mschmd_header *chm, char *filename) { ++ unsigned char dir[0x54], *chunk; ++ unsigned int i; ++ FILE *fh; ++ ++ if (!(chunk = (unsigned char *) malloc(chm->chunk_size))) return; ++ ++ if ((fh = fopen(filename, "rb"))) { ++#ifdef HAVE_FSEEKO ++ fseeko(fh, chm->dir_offset - 84, SEEK_SET); ++#else ++ fseek(fh, chm->dir_offset - 84, SEEK_SET); ++#endif ++ fread(&dir[0], 84, 1, fh); ++ printf(" chmhs1_Signature = %4.4s\n", &dir[0]); ++ printf(" chmhs1_Version = %d\n", EndGetI32(&dir[4])); ++ printf(" chmhs1_HeaderLen = %d\n", EndGetI32(&dir[8])); ++ printf(" chmhs1_Unknown1 = %d\n", EndGetI32(&dir[12])); ++ printf(" chmhs1_ChunkSize = %d\n", EndGetI32(&dir[16])); ++ printf(" chmhs1_Density = %d\n", EndGetI32(&dir[20])); ++ printf(" chmhs1_Depth = %d\n", EndGetI32(&dir[24])); ++ printf(" chmhs1_IndexRoot = %d\n", EndGetI32(&dir[28])); ++ printf(" chmhs1_FirstPMGL = %d\n", EndGetI32(&dir[32])); ++ printf(" chmhs1_LastPMGL = %d\n", EndGetI32(&dir[36])); ++ printf(" chmhs1_Unknown2 = %d\n", EndGetI32(&dir[40])); ++ printf(" chmhs1_NumChunks = %d\n", EndGetI32(&dir[44])); ++ printf(" chmhs1_LanguageID = %d\n", EndGetI32(&dir[48])); ++ printf(" chmhs1_GUID = %s\n", guid(&dir[52])); ++ printf(" chmhs1_Unknown3 = %d\n", EndGetI32(&dir[68])); ++ printf(" chmhs1_Unknown4 = %d\n", EndGetI32(&dir[72])); ++ printf(" chmhs1_Unknown5 = %d\n", EndGetI32(&dir[76])); ++ printf(" chmhs1_Unknown6 = %d\n", EndGetI32(&dir[80])); ++ ++ for (i = 0; i < chm->num_chunks; i++) { ++ unsigned int num_entries, quickref_size, j, k; ++ unsigned char *p, *name; ++ printf(" CHUNK %u:\n", i); ++ fread(chunk, chm->chunk_size, 1, fh); ++ ++ if ((chunk[0] == 'P') && (chunk[1] == 'M') && ++ (chunk[2] == 'G') && (chunk[3] == 'L')) ++ { ++ k = chm->chunk_size - 2; ++ num_entries = chunk[k] | (chunk[k+1] << 8); ++ quickref_size = EndGetI32(&chunk[4]); ++ if (quickref_size > (chm->chunk_size - 20)) { ++ printf(" QR size of %d too large (max is %d)\n", ++ quickref_size, chm->chunk_size - 20); ++ quickref_size = chm->chunk_size - 20; ++ } ++ printf(" PMGL entries=%u qrsize=%u zero=%u prev=%d next=%d\n", ++ num_entries, quickref_size, EndGetI32(&chunk[8]), ++ EndGetI32(&chunk[12]), EndGetI32(&chunk[16])); ++ ++ printf(" QR: entry %4u = offset %u\n", 0, 20); ++ j = (1 << chm->density) + 1; ++ while (j < num_entries) { ++ k -= 2; ++ if (k < (chm->chunk_size - quickref_size)) break; ++ printf(" QR: entry %4u = offset %u\n", ++ j, (chunk[k] | (chunk[k+1] << 8)) + 20); ++ j += (1 << chm->density) + 1; ++ } ++ ++ p = &chunk[20]; ++ for (j = 0; j < num_entries; j++) { ++ unsigned int name_len = 0, section = 0, offset = 0, length = 0; ++ printf(" %4d: ", (int) (p - &chunk[0])); ++ READ_ENCINT(name_len, PMGL_end); name = p; p += name_len; ++ READ_ENCINT(section, PMGL_end); ++ READ_ENCINT(offset, PMGL_end); ++ READ_ENCINT(length, PMGL_end); ++ printf("sec=%u off=%-10u len=%-10u name=\"",section,offset,length); ++ if (name_len) fwrite(name, 1, name_len, stdout); ++ printf("\"\n"); ++ } ++ PMGL_end: ++ if (j != num_entries) printf("premature end of chunk\n"); ++ ++ } ++ else if ((chunk[0] == 'P') && (chunk[1] == 'M') && ++ (chunk[2] == 'G') && (chunk[3] == 'I')) ++ { ++ k = chm->chunk_size - 2; ++ num_entries = chunk[k] | (chunk[k+1] << 8); ++ quickref_size = EndGetI32(&chunk[4]); ++ printf(" PMGI entries=%u free=%u\n", num_entries, quickref_size); ++ ++ printf(" QR: entry %4u = offset %u\n", 0, 8); ++ j = (1 << chm->density) + 1; ++ while (j < num_entries) { ++ k -= 2; ++ printf(" QR: entry %4u = offset %u\n", ++ j, (chunk[k] | (chunk[k+1] << 8)) + 8); ++ j += (1 << chm->density) + 1; ++ } ++ ++ p = &chunk[8]; ++ for (j = 0; j < num_entries; j++) { ++ unsigned int name_len, section; ++ printf(" %4d: ", (int) (p - &chunk[0])); ++ READ_ENCINT(name_len, PMGI_end); name = p; p += name_len; ++ READ_ENCINT(section, PMGI_end); ++ printf("chunk=%-4u name=\"",section); ++ if (name_len) fwrite(name, 1, name_len, stdout); ++ printf("\"\n"); ++ } ++ PMGI_end: ++ if (j != num_entries) printf("premature end of chunk\n"); ++ } ++ else { ++ printf(" unknown format\n"); ++ } ++ } ++ ++ fclose(fh); ++ } ++} ++ ++ ++int main(int argc, char *argv[]) { ++ struct mschm_decompressor *chmd; ++ struct mschmd_header *chm; ++ struct mschmd_file *file; ++ unsigned int numf, i; ++ unsigned char *data; ++ off_t pos, len; ++ ++ setbuf(stdout, NULL); ++ setbuf(stderr, NULL); ++ ++ MSPACK_SYS_SELFTEST(i); ++ if (i) return 0; ++ ++ if ((chmd = mspack_create_chm_decompressor(NULL))) { ++ for (argv++; *argv; argv++) { ++ printf("%s\n", *argv); ++ if ((chm = chmd->open(chmd, *argv))) { ++ printf(" chmhead_Version %u\n", chm->version); ++ printf(" chmhead_Timestamp %u\n", chm->timestamp); ++ printf(" chmhead_LanguageID %u\n", chm->language); ++ printf(" chmhs0_FileLen %" LD "\n", chm->length); ++ printf(" chmhst_OffsetHS1 %" LD "\n", chm->dir_offset); ++ printf(" chmhst3_OffsetCS0 %" LD "\n", chm->sec0.offset); ++ ++ print_dir(chm, *argv); ++ ++ if ((data = load_sys_data(chmd, chm, ++ "::DataSpace/Storage/MSCompressed/ControlData", &len))) ++ { ++ printf(" lzxcd_Length %u\n", EndGetI32(&data[0])); ++ printf(" lzxcd_Signature %4.4s\n", &data[4]); ++ printf(" lzxcd_Version %u\n", EndGetI32(&data[8])); ++ printf(" lzxcd_ResetInterval %u\n", EndGetI32(&data[12])); ++ printf(" lzxcd_WindowSize %u\n", EndGetI32(&data[16])); ++ printf(" lzxcd_CacheSize %u\n", EndGetI32(&data[20])); ++ printf(" lzxcd_Unknown1 %u\n", EndGetI32(&data[24])); ++ free(data); ++ } ++ ++ if ((data = load_sys_data(chmd, chm, ++ "::DataSpace/Storage/MSCompressed/Transform/{7FC28940-" ++ "9D31-11D0-9B27-00A0C91E9C7C}/InstanceData/ResetTable", &len))) ++ { ++ off_t contents = chm->sec0.offset; ++ printf(" lzxrt_Unknown1 %u\n", EndGetI32(&data[0])); ++ printf(" lzxrt_NumEntries %u\n", EndGetI32(&data[4])); ++ printf(" lzxrt_EntrySize %u\n", EndGetI32(&data[8])); ++ printf(" lzxrt_TableOffset %u\n", EndGetI32(&data[12])); ++ printf(" lzxrt_UncompLen %" LU "\n", EndGetI64(&data[16])); ++ printf(" lzxrt_CompLen %" LU "\n", EndGetI64(&data[24])); ++ printf(" lzxrt_FrameLen %u\n", EndGetI32(&data[32])); ++ ++ for (file = chm->sysfiles; file; file = file->next) { ++ if (strcmp(file->filename, ++ "::DataSpace/Storage/MSCompressed/Content") == 0) ++ { ++ contents += file->offset; ++ break; ++ } ++ } ++ ++ printf(" - reset table (uncomp offset -> stream offset " ++ "[real offset, length in file]\n"); ++ ++ numf = EndGetI32(&data[4]); ++ pos = ((unsigned int) EndGetI32(&data[12])); ++ switch (EndGetI32(&data[8])) { ++ case 4: ++ for (i = 0; i < numf && pos < len; i++, pos += 4) { ++ unsigned int rtdata = EndGetI32(&data[pos]); ++ printf(" %-10u -> %-10u [ %" LU " %u ]\n", ++ i * EndGetI32(&data[32]), ++ rtdata, ++ contents + rtdata, ++ (i == (numf-1)) ++ ? (EndGetI32(&data[24]) - rtdata) ++ : (EndGetI32(&data[pos + 4]) - rtdata) ++ ); ++ } ++ break; ++ case 8: ++ for (i = 0; i < numf && pos < len; i++, pos += 8) { ++ unsigned long long int rtdata = EndGetI64(&data[pos]); ++ printf(" %-10" LU " -> %-10" LU " [ %" LU " %" LU " ]\n", ++ i * EndGetI64(&data[32]), rtdata, contents + rtdata, ++ (i == (numf-1)) ++ ? (EndGetI64(&data[24]) - rtdata) ++ : (EndGetI64(&data[pos + 8]) - rtdata) ++ ); ++ } ++ break; ++ } ++ free(data); ++ } ++ chmd->close(chmd, chm); ++ } ++ } ++ mspack_destroy_chm_decompressor(chmd); ++ } ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/chmx.c b/libclamav/libmspack-0.4alpha/test/chmx.c +new file mode 100644 +index 000000000000..0d0b3c2221ef +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/chmx.c +@@ -0,0 +1,216 @@ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++mode_t user_umask; ++ ++#define FILENAME ".test.chmx" ++ ++/** ++ * Ensures that all directory components in a filepath exist. New directory ++ * components are created, if necessary. ++ * ++ * @param path the filepath to check ++ * @return non-zero if all directory components in a filepath exist, zero ++ * if components do not exist and cannot be created ++ */ ++static int ensure_filepath(char *path) { ++ struct stat st_buf; ++ char *p; ++ int ok; ++ ++ for (p = &path[1]; *p; p++) { ++ if (*p != '/') continue; ++ *p = '\0'; ++ ok = (stat(path, &st_buf) == 0) && S_ISDIR(st_buf.st_mode); ++ if (!ok) ok = (mkdir(path, 0777 & ~user_umask) == 0); ++ *p = '/'; ++ if (!ok) return 0; ++ } ++ return 1; ++} ++ ++/** ++ * Creates a UNIX filename from the internal CAB filename and the given ++ * parameters. ++ * ++ * @param fname the internal CAB filename. ++ * @param dir a directory path to prepend to the output filename. ++ * @param lower if non-zero, filename should be made lower-case. ++ * @param isunix if zero, MS-DOS path seperators are used in the internal ++ * CAB filename. If non-zero, UNIX path seperators are used. ++ * @param utf8 if non-zero, the internal CAB filename is encoded in UTF8. ++ * @return a freshly allocated and created filename, or NULL if there was ++ * not enough memory. ++ * @see unix_path_seperators() ++ */ ++static char *create_output_name(unsigned char *fname, unsigned char *dir, ++ int lower, int isunix, int utf8) ++{ ++ unsigned char *p, *name, c, *fe, sep, slash; ++ unsigned int x; ++ ++ sep = (isunix) ? '/' : '\\'; /* the path-seperator */ ++ slash = (isunix) ? '\\' : '/'; /* the other slash */ ++ ++ /* length of filename */ ++ x = strlen((char *) fname); ++ /* UTF8 worst case scenario: tolower() expands all chars from 1 to 3 bytes */ ++ if (utf8) x *= 3; ++ /* length of output directory */ ++ if (dir) x += strlen((char *) dir); ++ ++ if (!(name = (unsigned char *) malloc(x + 2))) { ++ fprintf(stderr, "out of memory!\n"); ++ return NULL; ++ } ++ ++ /* start with blank name */ ++ *name = '\0'; ++ ++ /* add output directory if needed */ ++ if (dir) { ++ strcpy((char *) name, (char *) dir); ++ strcat((char *) name, "/"); ++ } ++ ++ /* remove leading slashes */ ++ while (*fname == sep) fname++; ++ ++ /* copy from fi->filename to new name, converting MS-DOS slashes to UNIX ++ * slashes as we go. Also lowercases characters if needed. ++ */ ++ p = &name[strlen((char *)name)]; ++ fe = &fname[strlen((char *)fname)]; ++ ++ if (utf8) { ++ /* UTF8 translates two-byte unicode characters into 1, 2 or 3 bytes. ++ * %000000000xxxxxxx -> %0xxxxxxx ++ * %00000xxxxxyyyyyy -> %110xxxxx %10yyyyyy ++ * %xxxxyyyyyyzzzzzz -> %1110xxxx %10yyyyyy %10zzzzzz ++ * ++ * Therefore, the inverse is as follows: ++ * First char: ++ * 0x00 - 0x7F = one byte char ++ * 0x80 - 0xBF = invalid ++ * 0xC0 - 0xDF = 2 byte char (next char only 0x80-0xBF is valid) ++ * 0xE0 - 0xEF = 3 byte char (next 2 chars only 0x80-0xBF is valid) ++ * 0xF0 - 0xFF = invalid ++ */ ++ do { ++ if (fname >= fe) { ++ free(name); ++ return NULL; ++ } ++ ++ /* get next UTF8 char */ ++ if ((c = *fname++) < 0x80) x = c; ++ else { ++ if ((c >= 0xC0) && (c < 0xE0)) { ++ x = (c & 0x1F) << 6; ++ x |= *fname++ & 0x3F; ++ } ++ else if ((c >= 0xE0) && (c < 0xF0)) { ++ x = (c & 0xF) << 12; ++ x |= (*fname++ & 0x3F) << 6; ++ x |= *fname++ & 0x3F; ++ } ++ else x = '?'; ++ } ++ ++ /* whatever is the path seperator -> '/' ++ * whatever is the other slash -> '\\' ++ * otherwise, if lower is set, the lowercase version */ ++ if (x == sep) x = '/'; ++ else if (x == slash) x = '\\'; ++ else if (lower) x = (unsigned int) tolower((int) x); ++ ++ /* integer back to UTF8 */ ++ if (x < 0x80) { ++ *p++ = (unsigned char) x; ++ } ++ else if (x < 0x800) { ++ *p++ = 0xC0 | (x >> 6); ++ *p++ = 0x80 | (x & 0x3F); ++ } ++ else { ++ *p++ = 0xE0 | (x >> 12); ++ *p++ = 0x80 | ((x >> 6) & 0x3F); ++ *p++ = 0x80 | (x & 0x3F); ++ } ++ } while (x); ++ } ++ else { ++ /* regular non-utf8 version */ ++ do { ++ c = *fname++; ++ if (c == sep) c = '/'; ++ else if (c == slash) c = '\\'; ++ else if (lower) c = (unsigned char) tolower((int) c); ++ } while ((*p++ = c)); ++ } ++ return (char *) name; ++} ++ ++static int sortfunc(const void *a, const void *b) { ++ off_t diff = ++ ((* ((struct mschmd_file **) a))->offset) - ++ ((* ((struct mschmd_file **) b))->offset); ++ return (diff < 0) ? -1 : ((diff > 0) ? 1 : 0); ++} ++ ++int main(int argc, char *argv[]) { ++ struct mschm_decompressor *chmd; ++ struct mschmd_header *chm; ++ struct mschmd_file *file, **f; ++ unsigned int numf, i; ++ ++ setbuf(stdout, NULL); ++ setbuf(stderr, NULL); ++ user_umask = umask(0); umask(user_umask); ++ ++ MSPACK_SYS_SELFTEST(i); ++ if (i) return 0; ++ ++ if ((chmd = mspack_create_chm_decompressor(NULL))) { ++ for (argv++; *argv; argv++) { ++ printf("%s\n", *argv); ++ if ((chm = chmd->open(chmd, *argv))) { ++ ++ /* build an ordered list of files for maximum extraction speed */ ++ for (numf=0, file=chm->files; file; file = file->next) numf++; ++ if ((f = (struct mschmd_file **) calloc(numf, sizeof(struct mschmd_file *)))) { ++ for (i=0, file=chm->files; file; file = file->next) f[i++] = file; ++ qsort(f, numf, sizeof(struct mschmd_file *), &sortfunc); ++ ++ for (i = 0; i < numf; i++) { ++ char *outname = create_output_name((unsigned char *)f[i]->filename,NULL,0,1,0); ++ printf("Extracting %s\n", outname); ++ ensure_filepath(outname); ++ if (chmd->extract(chmd, f[i], outname)) { ++ printf("%s: extract error on \"%s\": %s\n", ++ *argv, f[i]->filename, ERROR(chmd)); ++ } ++ free(outname); ++ } ++ free(f); ++ } ++ chmd->close(chmd, chm); ++ } ++ else { ++ printf("%s: can't open -- %s\n", *argv, ERROR(chmd)); ++ } ++ } ++ mspack_destroy_chm_decompressor(chmd); ++ } ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/error.h b/libclamav/libmspack-0.4alpha/test/error.h +new file mode 100644 +index 000000000000..b1d627b27c09 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/error.h +@@ -0,0 +1,22 @@ ++#define ERROR(base) error_msg(base->last_error(base)) ++ ++const char *error_msg(int error) { ++ static char buf[32]; ++ switch (error) { ++ case MSPACK_ERR_OK: return "no error"; ++ case MSPACK_ERR_ARGS: return "bad arguments to library function"; ++ case MSPACK_ERR_OPEN: return "error opening file"; ++ case MSPACK_ERR_READ: return "read error"; ++ case MSPACK_ERR_WRITE: return "write error"; ++ case MSPACK_ERR_SEEK: return "seek error"; ++ case MSPACK_ERR_NOMEMORY: return "out of memory"; ++ case MSPACK_ERR_SIGNATURE: return "bad signature"; ++ case MSPACK_ERR_DATAFORMAT: return "error in data format"; ++ case MSPACK_ERR_CHECKSUM: return "checksum error"; ++ case MSPACK_ERR_CRUNCH: return "compression error"; ++ case MSPACK_ERR_DECRUNCH: return "decompression error"; ++ } ++ ++ snprintf(buf, sizeof(buf), "unknown error %d", error); ++ return buf; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/expand.c b/libclamav/libmspack-0.4alpha/test/expand.c +new file mode 100644 +index 000000000000..215ef7ba17d5 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/expand.c +@@ -0,0 +1,79 @@ ++/* acts like Microsoft's EXPAND.EXE */ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++int main(int argc, char *argv[]) { ++ struct msszdd_decompressor *szddd; ++ struct mskwaj_decompressor *kwajd; ++ struct msszddd_header *szdd; ++ struct mskwajd_header *kwaj; ++ int err; ++ ++ if (argc != 3) { ++ fprintf(stderr, "Usage: %s \n", argv[0]); ++ return 1; ++ } ++ ++ /* if self-test reveals an error */ ++ MSPACK_SYS_SELFTEST(err); ++ if (err) return 1; ++ ++ szddd = mspack_create_szdd_decompressor(NULL); ++ kwajd = mspack_create_kwaj_decompressor(NULL); ++ ++ if (!szddd || !kwajd) { ++ fprintf(stderr, "can't make either SZDD or KWAJ decompressor\n"); ++ mspack_destroy_szdd_decompressor(szddd); ++ mspack_destroy_kwaj_decompressor(kwajd); ++ return 1; ++ } ++ ++ /* open then extract; try SZDD */ ++ if ((szdd = szddd->open(szddd, argv[1]))) { ++ if (szddd->extract(szddd, szdd, argv[2]) != MSPACK_ERR_OK) { ++ fprintf(stderr, "%s: SZDD extract error: %s\n", argv[2], ERROR(szddd)); ++ } ++ szddd->close(szddd, szdd); ++ } ++ else { ++ if (szddd->last_error(szddd) == MSPACK_ERR_SIGNATURE) { ++ /* try KWAJ */ ++ if ((kwaj = kwajd->open(kwajd, argv[1]))) { ++ if (kwajd->extract(kwajd, kwaj, argv[2]) != MSPACK_ERR_OK) { ++ fprintf(stderr, "%s: KWAJ extract error: %s\n", argv[2], ERROR(kwajd)); ++ } ++ kwajd->close(kwajd, kwaj); ++ } ++ else { ++ fprintf(stderr, "%s: KWAJ open error: %s\n", argv[1], ERROR(kwajd)); ++ } ++ } ++ else { ++ fprintf(stderr, "%s: SZDD open error: %s\n", argv[1], ERROR(szddd)); ++ } ++ } ++ ++ /* decompress in a single step; try KWAJ */ ++ if (kwajd->decompress(kwajd, argv[1], argv[2]) != MSPACK_ERR_OK) { ++ if (kwajd->last_error(kwajd) == MSPACK_ERR_SIGNATURE) { ++ if (szddd->decompress(szddd, argv[1], argv[2]) != MSPACK_ERR_OK) { ++ fprintf(stderr, "%s -> %s: SZDD decompress error: %s\n", argv[1], argv[2], ERROR(szddd)); ++ } ++ } ++ else { ++ fprintf(stderr, "%s -> %s: KWAJ decompress error: %s\n", argv[1], argv[2], ERROR(kwajd)); ++ } ++ } ++ ++ mspack_destroy_szdd_decompressor(szddd); ++ mspack_destroy_kwaj_decompressor(kwajd); ++ return 0; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/md5.c b/libclamav/libmspack-0.4alpha/test/md5.c +new file mode 100644 +index 000000000000..208740689392 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/md5.c +@@ -0,0 +1,457 @@ ++/* md5.c - Functions to compute MD5 message digest of files or memory blocks ++ according to the definition of MD5 in RFC 1321 from April 1992. ++ Copyright (C) 1995, 1996, 2001, 2003 Free Software Foundation, Inc. ++ NOTE: The canonical source of this file is maintained with the GNU C ++ Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. ++ ++ 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, write to the Free Software Foundation, ++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++/* Written by Ulrich Drepper , 1995. */ ++ ++#ifdef HAVE_CONFIG_H ++# include ++#endif ++ ++#include ++ ++#if STDC_HEADERS || defined _LIBC ++# include ++# include ++#else ++# ifndef HAVE_MEMCPY ++# define memcpy(d, s, n) bcopy ((s), (d), (n)) ++# endif ++#endif ++ ++#include ++ ++#ifdef _LIBC ++# include ++# if __BYTE_ORDER == __BIG_ENDIAN ++# define WORDS_BIGENDIAN 1 ++# endif ++/* We need to keep the namespace clean so define the MD5 function ++ protected using leading __ . */ ++# define md5_init_ctx __md5_init_ctx ++# define md5_process_block __md5_process_block ++# define md5_process_bytes __md5_process_bytes ++# define md5_finish_ctx __md5_finish_ctx ++# define md5_read_ctx __md5_read_ctx ++# define md5_stream __md5_stream ++# define md5_buffer __md5_buffer ++#endif ++ ++#ifdef WORDS_BIGENDIAN ++# define SWAP(n) \ ++ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) ++#else ++# define SWAP(n) (n) ++#endif ++ ++#define BLOCKSIZE 4096 ++/* Ensure that BLOCKSIZE is a multiple of 64. */ ++#if BLOCKSIZE % 64 != 0 ++/* FIXME-someday (soon?): use #error instead of this kludge. */ ++"invalid BLOCKSIZE" ++#endif ++ ++/* This array contains the bytes used to pad the buffer to the next ++ 64-byte boundary. (RFC 1321, 3.1: Step 1) */ ++static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; ++ ++ ++/* Initialize structure containing state of computation. ++ (RFC 1321, 3.3: Step 3) */ ++void ++md5_init_ctx (struct md5_ctx *ctx) ++{ ++ ctx->A = 0x67452301; ++ ctx->B = 0xefcdab89; ++ ctx->C = 0x98badcfe; ++ ctx->D = 0x10325476; ++ ++ ctx->total[0] = ctx->total[1] = 0; ++ ctx->buflen = 0; ++} ++ ++/* Put result from CTX in first 16 bytes following RESBUF. The result ++ must be in little endian byte order. ++ ++ IMPORTANT: On some systems it is required that RESBUF is correctly ++ aligned for a 32 bits value. */ ++void * ++md5_read_ctx (const struct md5_ctx *ctx, void *resbuf) ++{ ++ ((md5_uint32 *) resbuf)[0] = SWAP (ctx->A); ++ ((md5_uint32 *) resbuf)[1] = SWAP (ctx->B); ++ ((md5_uint32 *) resbuf)[2] = SWAP (ctx->C); ++ ((md5_uint32 *) resbuf)[3] = SWAP (ctx->D); ++ ++ return resbuf; ++} ++ ++/* Process the remaining bytes in the internal buffer and the usual ++ prolog according to the standard and write the result to RESBUF. ++ ++ IMPORTANT: On some systems it is required that RESBUF is correctly ++ aligned for a 32 bits value. */ ++void * ++md5_finish_ctx (struct md5_ctx *ctx, void *resbuf) ++{ ++ /* Take yet unprocessed bytes into account. */ ++ md5_uint32 bytes = ctx->buflen; ++ size_t pad; ++ ++ /* Now count remaining bytes. */ ++ ctx->total[0] += bytes; ++ if (ctx->total[0] < bytes) ++ ++ctx->total[1]; ++ ++ pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; ++ memcpy (&ctx->buffer[bytes], fillbuf, pad); ++ ++ /* Put the 64-bit file length in *bits* at the end of the buffer. */ ++ *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3); ++ *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) | ++ (ctx->total[0] >> 29)); ++ ++ /* Process last bytes. */ ++ md5_process_block (ctx->buffer, bytes + pad + 8, ctx); ++ ++ return md5_read_ctx (ctx, resbuf); ++} ++ ++/* Compute MD5 message digest for bytes read from STREAM. The ++ resulting message digest number will be written into the 16 bytes ++ beginning at RESBLOCK. */ ++int ++md5_stream (FILE *stream, void *resblock) ++{ ++ struct md5_ctx ctx; ++ char buffer[BLOCKSIZE + 72]; ++ size_t sum; ++ ++ /* Initialize the computation context. */ ++ md5_init_ctx (&ctx); ++ ++ /* Iterate over full file contents. */ ++ while (1) ++ { ++ /* We read the file in blocks of BLOCKSIZE bytes. One call of the ++ computation function processes the whole buffer so that with the ++ next round of the loop another block can be read. */ ++ size_t n; ++ sum = 0; ++ ++ /* Read block. Take care for partial reads. */ ++ while (1) ++ { ++ n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); ++ ++ sum += n; ++ ++ if (sum == BLOCKSIZE) ++ break; ++ ++ if (n == 0) ++ { ++ /* Check for the error flag IFF N == 0, so that we don't ++ exit the loop after a partial read due to e.g., EAGAIN ++ or EWOULDBLOCK. */ ++ if (ferror (stream)) ++ return 1; ++ goto process_partial_block; ++ } ++ ++ /* We've read at least one byte, so ignore errors. But always ++ check for EOF, since feof may be true even though N > 0. ++ Otherwise, we could end up calling fread after EOF. */ ++ if (feof (stream)) ++ goto process_partial_block; ++ } ++ ++ /* Process buffer with BLOCKSIZE bytes. Note that ++ BLOCKSIZE % 64 == 0 ++ */ ++ md5_process_block (buffer, BLOCKSIZE, &ctx); ++ } ++ ++ process_partial_block:; ++ ++ /* Process any remaining bytes. */ ++ if (sum > 0) ++ md5_process_bytes (buffer, sum, &ctx); ++ ++ /* Construct result in desired memory. */ ++ md5_finish_ctx (&ctx, resblock); ++ return 0; ++} ++ ++/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The ++ result is always in little endian byte order, so that a byte-wise ++ output yields to the wanted ASCII representation of the message ++ digest. */ ++void * ++md5_buffer (const char *buffer, size_t len, void *resblock) ++{ ++ struct md5_ctx ctx; ++ ++ /* Initialize the computation context. */ ++ md5_init_ctx (&ctx); ++ ++ /* Process whole buffer but last len % 64 bytes. */ ++ md5_process_bytes (buffer, len, &ctx); ++ ++ /* Put result in desired memory area. */ ++ return md5_finish_ctx (&ctx, resblock); ++} ++ ++ ++void ++md5_process_bytes ( const void *buffer, size_t len, struct md5_ctx *ctx) ++{ ++ /* When we already have some bits in our internal buffer concatenate ++ both inputs first. */ ++ if (ctx->buflen != 0) ++ { ++ size_t left_over = ctx->buflen; ++ size_t add = 128 - left_over > len ? len : 128 - left_over; ++ ++ memcpy (&ctx->buffer[left_over], buffer, add); ++ ctx->buflen += add; ++ ++ if (ctx->buflen > 64) ++ { ++ md5_process_block (ctx->buffer, ctx->buflen & ~63, ctx); ++ ++ ctx->buflen &= 63; ++ /* The regions in the following copy operation cannot overlap. */ ++ memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63], ++ ctx->buflen); ++ } ++ ++ buffer = (const char *) buffer + add; ++ len -= add; ++ } ++ ++ /* Process available complete blocks. */ ++ if (len >= 64) ++ { ++#if !_STRING_ARCH_unaligned ++/* To check alignment gcc has an appropriate operator. Other ++ compilers don't. */ ++# if __GNUC__ >= 2 ++# define UNALIGNED_P(p) (((md5_uintptr) p) % __alignof__ (md5_uint32) != 0) ++# else ++# define UNALIGNED_P(p) (((md5_uintptr) p) % sizeof (md5_uint32) != 0) ++# endif ++ if (UNALIGNED_P (buffer)) ++ while (len > 64) ++ { ++ memcpy (ctx->buffer, buffer, 64); ++ md5_process_block (ctx->buffer, 64, ctx); ++ buffer = (const char *) buffer + 64; ++ len -= 64; ++ } ++ else ++#endif ++ { ++ md5_process_block (buffer, len & ~63, ctx); ++ buffer = (const char *) buffer + (len & ~63); ++ len &= 63; ++ } ++ } ++ ++ /* Move remaining bytes in internal buffer. */ ++ if (len > 0) ++ { ++ size_t left_over = ctx->buflen; ++ ++ memcpy (&ctx->buffer[left_over], buffer, len); ++ left_over += len; ++ if (left_over >= 64) ++ { ++ md5_process_block (ctx->buffer, 64, ctx); ++ left_over -= 64; ++ memcpy (ctx->buffer, &ctx->buffer[64], left_over); ++ } ++ ctx->buflen = left_over; ++ } ++} ++ ++ ++/* These are the four functions used in the four steps of the MD5 algorithm ++ and defined in the RFC 1321. The first function is a little bit optimized ++ (as found in Colin Plumbs public domain implementation). */ ++/* #define FF(b, c, d) ((b & c) | (~b & d)) */ ++#define FF(b, c, d) (d ^ (b & (c ^ d))) ++#define FG(b, c, d) FF (d, b, c) ++#define FH(b, c, d) (b ^ c ^ d) ++#define FI(b, c, d) (c ^ (b | ~d)) ++ ++/* Process LEN bytes of BUFFER, accumulating context into CTX. ++ It is assumed that LEN % 64 == 0. */ ++ ++void ++md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx) ++{ ++ md5_uint32 correct_words[16]; ++ const md5_uint32 *words = (const md5_uint32 *) buffer; ++ size_t nwords = len / sizeof (md5_uint32); ++ const md5_uint32 *endp = words + nwords; ++ md5_uint32 A = ctx->A; ++ md5_uint32 B = ctx->B; ++ md5_uint32 C = ctx->C; ++ md5_uint32 D = ctx->D; ++ ++ /* First increment the byte count. RFC 1321 specifies the possible ++ length of the file up to 2^64 bits. Here we only compute the ++ number of bytes. Do a double word increment. */ ++ ctx->total[0] += len; ++ if (ctx->total[0] < len) ++ ++ctx->total[1]; ++ ++ /* Process all bytes in the buffer with 64 bytes in each round of ++ the loop. */ ++ while (words < endp) ++ { ++ md5_uint32 *cwp = correct_words; ++ md5_uint32 A_save = A; ++ md5_uint32 B_save = B; ++ md5_uint32 C_save = C; ++ md5_uint32 D_save = D; ++ ++ /* First round: using the given function, the context and a constant ++ the next context is computed. Because the algorithms processing ++ unit is a 32-bit word and it is determined to work on words in ++ little endian byte order we perhaps have to change the byte order ++ before the computation. To reduce the work for the next steps ++ we store the swapped words in the array CORRECT_WORDS. */ ++ ++#define OP(a, b, c, d, s, T) \ ++ do \ ++ { \ ++ a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \ ++ ++words; \ ++ a = rol (a, s); \ ++ a += b; \ ++ } \ ++ while (0) ++ ++ /* Before we start, one word to the strange constants. ++ They are defined in RFC 1321 as ++ ++ T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64, or ++ perl -e 'foreach(1..64){printf "0x%08x\n", int (4294967296 * abs (sin $_))}' ++ */ ++ ++ /* Round 1. */ ++ OP (A, B, C, D, 7, 0xd76aa478); ++ OP (D, A, B, C, 12, 0xe8c7b756); ++ OP (C, D, A, B, 17, 0x242070db); ++ OP (B, C, D, A, 22, 0xc1bdceee); ++ OP (A, B, C, D, 7, 0xf57c0faf); ++ OP (D, A, B, C, 12, 0x4787c62a); ++ OP (C, D, A, B, 17, 0xa8304613); ++ OP (B, C, D, A, 22, 0xfd469501); ++ OP (A, B, C, D, 7, 0x698098d8); ++ OP (D, A, B, C, 12, 0x8b44f7af); ++ OP (C, D, A, B, 17, 0xffff5bb1); ++ OP (B, C, D, A, 22, 0x895cd7be); ++ OP (A, B, C, D, 7, 0x6b901122); ++ OP (D, A, B, C, 12, 0xfd987193); ++ OP (C, D, A, B, 17, 0xa679438e); ++ OP (B, C, D, A, 22, 0x49b40821); ++ ++ /* For the second to fourth round we have the possibly swapped words ++ in CORRECT_WORDS. Redefine the macro to take an additional first ++ argument specifying the function to use. */ ++#undef OP ++#define OP(f, a, b, c, d, k, s, T) \ ++ do \ ++ { \ ++ a += f (b, c, d) + correct_words[k] + T; \ ++ a = rol (a, s); \ ++ a += b; \ ++ } \ ++ while (0) ++ ++ /* Round 2. */ ++ OP (FG, A, B, C, D, 1, 5, 0xf61e2562); ++ OP (FG, D, A, B, C, 6, 9, 0xc040b340); ++ OP (FG, C, D, A, B, 11, 14, 0x265e5a51); ++ OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); ++ OP (FG, A, B, C, D, 5, 5, 0xd62f105d); ++ OP (FG, D, A, B, C, 10, 9, 0x02441453); ++ OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); ++ OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); ++ OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); ++ OP (FG, D, A, B, C, 14, 9, 0xc33707d6); ++ OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); ++ OP (FG, B, C, D, A, 8, 20, 0x455a14ed); ++ OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); ++ OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); ++ OP (FG, C, D, A, B, 7, 14, 0x676f02d9); ++ OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); ++ ++ /* Round 3. */ ++ OP (FH, A, B, C, D, 5, 4, 0xfffa3942); ++ OP (FH, D, A, B, C, 8, 11, 0x8771f681); ++ OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); ++ OP (FH, B, C, D, A, 14, 23, 0xfde5380c); ++ OP (FH, A, B, C, D, 1, 4, 0xa4beea44); ++ OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); ++ OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); ++ OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); ++ OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); ++ OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); ++ OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); ++ OP (FH, B, C, D, A, 6, 23, 0x04881d05); ++ OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); ++ OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); ++ OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); ++ OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); ++ ++ /* Round 4. */ ++ OP (FI, A, B, C, D, 0, 6, 0xf4292244); ++ OP (FI, D, A, B, C, 7, 10, 0x432aff97); ++ OP (FI, C, D, A, B, 14, 15, 0xab9423a7); ++ OP (FI, B, C, D, A, 5, 21, 0xfc93a039); ++ OP (FI, A, B, C, D, 12, 6, 0x655b59c3); ++ OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); ++ OP (FI, C, D, A, B, 10, 15, 0xffeff47d); ++ OP (FI, B, C, D, A, 1, 21, 0x85845dd1); ++ OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); ++ OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); ++ OP (FI, C, D, A, B, 6, 15, 0xa3014314); ++ OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); ++ OP (FI, A, B, C, D, 4, 6, 0xf7537e82); ++ OP (FI, D, A, B, C, 11, 10, 0xbd3af235); ++ OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); ++ OP (FI, B, C, D, A, 9, 21, 0xeb86d391); ++ ++ /* Add the starting values of the context. */ ++ A += A_save; ++ B += B_save; ++ C += C_save; ++ D += D_save; ++ } ++ ++ /* Put checksum in context given as argument. */ ++ ctx->A = A; ++ ctx->B = B; ++ ctx->C = C; ++ ctx->D = D; ++} +diff --git a/libclamav/libmspack-0.4alpha/test/md5.h b/libclamav/libmspack-0.4alpha/test/md5.h +new file mode 100644 +index 000000000000..0d22a70a2ccd +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/md5.h +@@ -0,0 +1,165 @@ ++/* md5.h - Declaration of functions and data types used for MD5 sum ++ computing library functions. ++ Copyright (C) 1995, 1996, 1999 Free Software Foundation, Inc. ++ NOTE: The canonical source of this file is maintained with the GNU C ++ Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. ++ ++ 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, write to the Free Software Foundation, ++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#ifndef _MD5_H ++#define _MD5_H 1 ++ ++#include ++ ++#if defined HAVE_LIMITS_H || _LIBC ++# include ++#endif ++ ++/* The following contortions are an attempt to use the C preprocessor ++ to determine an unsigned integral type that is 32 bits wide. An ++ alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but ++ doing that would require that the configure script compile and *run* ++ the resulting executable. Locally running cross-compiled executables ++ is usually not possible. */ ++ ++#ifdef _LIBC ++# include ++typedef uint32_t md5_uint32; ++typedef uintptr_t md5_uintptr; ++#else ++# if defined __STDC__ && __STDC__ ++# define UINT_MAX_32_BITS 4294967295U ++# else ++# define UINT_MAX_32_BITS 0xFFFFFFFF ++# endif ++ ++/* If UINT_MAX isn't defined, assume it's a 32-bit type. ++ This should be valid for all systems GNU cares about because ++ that doesn't include 16-bit systems, and only modern systems ++ (that certainly have ) have 64+-bit integral types. */ ++ ++# ifndef UINT_MAX ++# define UINT_MAX UINT_MAX_32_BITS ++# endif ++ ++# if UINT_MAX == UINT_MAX_32_BITS ++ typedef unsigned int md5_uint32; ++# else ++# if USHRT_MAX == UINT_MAX_32_BITS ++ typedef unsigned short md5_uint32; ++# else ++# if ULONG_MAX == UINT_MAX_32_BITS ++ typedef unsigned long md5_uint32; ++# else ++ /* The following line is intended to evoke an error. ++ Using #error is not portable enough. */ ++ "Cannot determine unsigned 32-bit data type." ++# endif ++# endif ++# endif ++/* We have to make a guess about the integer type equivalent in size ++ to pointers which should always be correct. */ ++typedef unsigned long int md5_uintptr; ++#endif ++ ++#undef __P ++#if defined (__STDC__) && __STDC__ ++#define __P(x) x ++#else ++#define __P(x) () ++#endif ++ ++/* Structure to save state of computation between the single steps. */ ++struct md5_ctx ++{ ++ md5_uint32 A; ++ md5_uint32 B; ++ md5_uint32 C; ++ md5_uint32 D; ++ ++ md5_uint32 total[2]; ++ md5_uint32 buflen; ++ char buffer[128]; ++}; ++ ++/* ++ * The following three functions are build up the low level used in ++ * the functions `md5_stream' and `md5_buffer'. ++ */ ++ ++/* Initialize structure containing state of computation. ++ (RFC 1321, 3.3: Step 3) */ ++extern void md5_init_ctx __P ((struct md5_ctx *ctx)); ++ ++/* Starting with the result of former calls of this function (or the ++ initialization function update the context for the next LEN bytes ++ starting at BUFFER. ++ It is necessary that LEN is a multiple of 64!!! */ ++extern void md5_process_block __P ((const void *buffer, size_t len, ++ struct md5_ctx *ctx)); ++ ++/* Starting with the result of former calls of this function (or the ++ initialization function update the context for the next LEN bytes ++ starting at BUFFER. ++ It is NOT required that LEN is a multiple of 64. */ ++extern void md5_process_bytes __P ((const void *buffer, size_t len, ++ struct md5_ctx *ctx)); ++ ++/* Process the remaining bytes in the buffer and put result from CTX ++ in first 16 bytes following RESBUF. The result is always in little ++ endian byte order, so that a byte-wise output yields to the wanted ++ ASCII representation of the message digest. ++ ++ IMPORTANT: On some systems it is required that RESBUF be correctly ++ aligned for a 32 bits value. */ ++extern void *md5_finish_ctx __P ((struct md5_ctx *ctx, void *resbuf)); ++ ++ ++/* Put result from CTX in first 16 bytes following RESBUF. The result is ++ always in little endian byte order, so that a byte-wise output yields ++ to the wanted ASCII representation of the message digest. ++ ++ IMPORTANT: On some systems it is required that RESBUF is correctly ++ aligned for a 32 bits value. */ ++extern void *md5_read_ctx __P ((const struct md5_ctx *ctx, void *resbuf)); ++ ++ ++/* Compute MD5 message digest for bytes read from STREAM. The ++ resulting message digest number will be written into the 16 bytes ++ beginning at RESBLOCK. */ ++extern int md5_stream __P ((FILE *stream, void *resblock)); ++ ++/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The ++ result is always in little endian byte order, so that a byte-wise ++ output yields to the wanted ASCII representation of the message ++ digest. */ ++extern void *md5_buffer __P ((const char *buffer, size_t len, void *resblock)); ++ ++/* The following is from gnupg-1.0.2's cipher/bithelp.h. */ ++/* Rotate a 32 bit integer by n bytes */ ++#if defined __GNUC__ && defined __i386__ ++static inline md5_uint32 ++rol(md5_uint32 x, int n) ++{ ++ __asm__("roll %%cl,%0" ++ :"=r" (x) ++ :"0" (x),"c" (n)); ++ return x; ++} ++#else ++# define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) ++#endif ++ ++#endif +diff --git a/libclamav/libmspack-0.4alpha/test/md5_fh.h b/libclamav/libmspack-0.4alpha/test/md5_fh.h +new file mode 100644 +index 000000000000..385426e2e81f +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/md5_fh.h +@@ -0,0 +1,123 @@ ++/* an mspack_system implementation which reads one or more files, and ++ * only writes to one file; the file is not actually written to, but ++ * an MD5 sum is computed and is available once the written-to file is ++ * closed. You can use anything for the written-to filename, NULL is ++ * probably the most obvious. The code is not multithreadable. ++ */ ++ ++#include ++#include ++#include ++ ++struct md5_ctx md5_context; ++char md5_string[33]; ++ ++struct mspack_file_p { ++ FILE *fh; ++}; ++ ++static struct mspack_file *m_open(struct mspack_system *self, const char *filename, int mode) { ++ struct mspack_file_p *fh; ++ if (mode != MSPACK_SYS_OPEN_WRITE && ++ mode != MSPACK_SYS_OPEN_READ) return NULL; ++ ++ if ((fh = (struct mspack_file_p *) malloc(sizeof(struct mspack_file_p)))) { ++ if (mode == MSPACK_SYS_OPEN_WRITE) { ++ fh->fh = NULL; ++ md5_init_ctx(&md5_context); ++ return (struct mspack_file *) fh; ++ } ++ else { ++ if ((fh->fh = fopen(filename, "rb"))) ++ return (struct mspack_file *) fh; ++ } ++ /* error - free file handle and return NULL */ ++ free(fh); ++ } ++ return NULL; ++} ++ ++static void m_close(struct mspack_file *file) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++ if (self) { ++ if (self->fh) fclose(self->fh); ++ else { ++ unsigned char md5[16]; ++ md5_finish_ctx(&md5_context, (void *) &md5); ++ snprintf(md5_string, sizeof(md5_string), ++ "%02x%02x%02x%02x%02x%02x%02x%02x" ++ "%02x%02x%02x%02x%02x%02x%02x%02x", ++ md5[0], md5[1], md5[2], md5[3], ++ md5[4], md5[5], md5[6], md5[7], ++ md5[8], md5[9], md5[10], md5[11], ++ md5[12], md5[13], md5[14], md5[15]); ++ } ++ free(self); ++ } ++} ++ ++static int m_read(struct mspack_file *file, void *buffer, int bytes) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++ if (self && self->fh && buffer && bytes >= 0) { ++ size_t count = fread(buffer, 1, bytes, self->fh); ++ if (!ferror(self->fh)) return (int) count; ++ } ++ return -1; ++} ++ ++static int m_write(struct mspack_file *file, void *buffer, int bytes) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++ if (!self || self->fh || !buffer || bytes < 0) return -1; ++ md5_process_bytes(buffer, bytes, &md5_context); ++ return bytes; ++} ++ ++static int m_seek(struct mspack_file *file, off_t offset, int mode) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++ if (self && self->fh) { ++ switch (mode) { ++ case MSPACK_SYS_SEEK_START: mode = SEEK_SET; break; ++ case MSPACK_SYS_SEEK_CUR: mode = SEEK_CUR; break; ++ case MSPACK_SYS_SEEK_END: mode = SEEK_END; break; ++ default: return -1; ++ } ++#if HAVE_FSEEKO ++ return fseeko(self->fh, offset, mode); ++#else ++ return fseek(self->fh, offset, mode); ++#endif ++ } ++ return -1; ++} ++ ++static off_t m_tell(struct mspack_file *file) { ++ struct mspack_file_p *self = (struct mspack_file_p *) file; ++#if HAVE_FSEEKO ++ return (self && self->fh) ? (off_t) ftello(self->fh) : 0; ++#else ++ return (self && self->fh) ? (off_t) ftell(self->fh) : 0; ++#endif ++} ++ ++static void m_msg(struct mspack_file *file, const char *format, ...) { ++ va_list ap; ++ va_start(ap, format); ++ vfprintf(stderr, format, ap); ++ va_end(ap); ++ fputc((int) '\n', stderr); ++ fflush(stderr); ++} ++static void *m_alloc(struct mspack_system *self, size_t bytes) { ++ return malloc(bytes); ++} ++static void m_free(void *buffer) { ++ free(buffer); ++} ++static void m_copy(void *src, void *dest, size_t bytes) { ++ memcpy(dest, src, bytes); ++} ++ ++static struct mspack_system read_files_write_md5 = { ++ &m_open, &m_close, &m_read, &m_write, &m_seek, ++ &m_tell, &m_msg, &m_alloc, &m_free, &m_copy, NULL ++}; +diff --git a/libclamav/libmspack-0.4alpha/test/multifh.c b/libclamav/libmspack-0.4alpha/test/multifh.c +new file mode 100644 +index 000000000000..f7ed758c4da1 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/multifh.c +@@ -0,0 +1,435 @@ ++/* An implementation of the mspack_system interface which can access many ++ * things: ++ * - regular disk files ++ * - already opened stdio FILE* file pointers ++ * - open file descriptors ++ * - blocks of memory ++ */ ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++#include ++ ++/* definitions */ ++ ++#define MTYPE_DISKFILE (0x01) ++#define MTYPE_STDIOFH (0x02) ++#define MTYPE_FILEDESC (0x03) ++#define MTYPE_MEMORY (0x04) ++ ++struct m_filename { ++ unsigned char type; /* one of MTYPE_DISKFILE, STDIOFH, FILEDESC or MEMORY */ ++ const char *filename; /* the user-friendly printable filename (may be NULL) */ ++ union { ++ const char *diskfile; /* char *filename for MTYPE_DISKFILE */ ++ FILE *stdiofh; /* FILE *existing_fh for MTYPE_STDIOFH */ ++ int filedesc; /* int file_descriptor for MTYPE_FILEDESC */ ++ struct { ++ unsigned char *data; ++ size_t length; ++ } memory; ++ } x; ++}; ++ ++struct m_file { ++ struct m_filename *file; /* pointer back to the m_filename data */ ++ union { ++ FILE *fh; /* only used in DISKFILE, STDIOFH and FILEDESC types */ ++ size_t position; /* only used in MEMORY types */ ++ } x; ++}; ++ ++/* ------------------------------------------------------------------------ */ ++/* mspack_system implementation */ ++ ++static void *m_alloc(struct mspack_system *self, size_t bytes) { ++ return malloc(bytes); ++} ++ ++static void m_free(void *buffer) { ++ free(buffer); ++} ++ ++static void m_copy(void *src, void *dest, size_t bytes) { ++ memcpy(dest, src, bytes); ++} ++ ++/* A message printer that prints to stderr */ ++static void m_msg(struct m_file *file, const char *format, ...) { ++ va_list ap; ++ if (file && file->file && file->file->filename) { ++ fprintf(stderr, "%s: ", file->file->filename); ++ } ++ va_start(ap, format); ++ vfprintf(stderr, format, ap); ++ va_end(ap); ++ fputc((int) '\n', stderr); ++ fflush(stderr); ++} ++ ++ ++static struct m_file *m_open_mem(struct mspack_system *self, ++ struct m_filename *fn, int mode) ++{ ++ struct m_file *fh; ++ ++ /* validate arguments of the filename */ ++ if (!fn->x.memory.data) return NULL; ++ if (!fn->x.memory.length) return NULL; ++ ++ if ((fh = (struct m_file *) m_alloc(self, sizeof(struct m_file)))) { ++ fh->x.position = (mode == MSPACK_SYS_OPEN_APPEND) ? ++ fn->x.memory.length : 0; ++ fh->file = fn; ++ } ++ return fh; ++} ++ ++static struct m_file *m_open_file(struct mspack_system *self, ++ struct m_filename *fn, int mode) ++{ ++ struct m_file *fh; ++ const char *fmode; ++ int fd; ++ ++ switch (mode) { ++ case MSPACK_SYS_OPEN_READ: fmode = "rb"; break; ++ case MSPACK_SYS_OPEN_WRITE: fmode = "wb"; break; ++ case MSPACK_SYS_OPEN_UPDATE: fmode = "r+b"; break; ++ case MSPACK_SYS_OPEN_APPEND: fmode = "ab"; break; ++ default: return NULL; ++ } ++ ++ /* validate the arguments in the provided filename */ ++ switch (fn->type) { ++ case MTYPE_DISKFILE: if (!fn->x.diskfile) return NULL; break; ++ case MTYPE_STDIOFH: if (!fn->x.stdiofh) return NULL; break; ++ case MTYPE_FILEDESC: if (fn->x.filedesc < 0) return NULL; break; ++ } ++ ++ /* allocate memory for the file handle */ ++ if (!(fh = (struct m_file *) m_alloc(self, sizeof(struct m_file)))) return NULL; ++ ++ /* open or duplicate the filehandle */ ++ switch (fn->type) { ++ case MTYPE_DISKFILE: ++ fh->x.fh = fopen(fn->x.diskfile, fmode); ++ break; ++ ++ case MTYPE_STDIOFH: ++ fd = fileno(fn->x.stdiofh); ++ fh->x.fh = (fd >= 0) ? fdopen(fd, fmode) : NULL; ++ break; ++ ++ case MTYPE_FILEDESC: ++ fh->x.fh = fdopen(fn->x.filedesc, fmode); ++ break; ++ } ++ ++ /* validate the new stdio filehandle */ ++ if (fh->x.fh) { ++ fh->file = fn; ++ } ++ else { ++ free(fh); ++ fh = NULL; ++ } ++ ++ return fh; ++} ++ ++static struct m_file *m_open(struct mspack_system *self, ++ struct m_filename *fn, int mode) ++{ ++ if (!self || !fn) return NULL; ++ ++ switch (fn->type) { ++ case MTYPE_DISKFILE: ++ case MTYPE_STDIOFH: ++ case MTYPE_FILEDESC: ++ return m_open_file(self, fn, mode); ++ ++ case MTYPE_MEMORY: ++ return m_open_mem(self, fn, mode); ++ } ++ return NULL; ++} ++ ++static void m_close(struct m_file *fh) { ++ if (!fh || !fh->file) return; ++ if (fh->file->type != MTYPE_MEMORY) fclose(fh->x.fh); ++ m_free(fh); ++} ++ ++ ++static int m_read(struct m_file *fh, void *buffer, int bytes) { ++ if (!fh || !fh->file || !buffer || bytes < 0) return -1; ++ ++ if (fh->file->type == MTYPE_MEMORY) { ++ int count = fh->file->x.memory.length - fh->x.position; ++ if (count > bytes) count = bytes; ++ if (count > 0) { ++ m_copy(&fh->file->x.memory.data[fh->x.position], buffer, (size_t) count); ++ } ++ fh->x.position += count; ++ return count; ++ } ++ else { ++ size_t count = fread(buffer, 1, (size_t) bytes, fh->x.fh); ++ if (!ferror(fh->x.fh)) return (int) count; ++ } ++ return -1; ++} ++ ++ ++static int m_write(struct m_file *fh, void *buffer, int bytes) { ++ if (!fh || !fh->file || !buffer || bytes < 0) return -1; ++ ++ if (fh->file->type == MTYPE_MEMORY) { ++ int count = fh->file->x.memory.length - fh->x.position; ++ if (count > bytes) count = bytes; ++ if (count > 0) { ++ m_copy(buffer, &fh->file->x.memory.data[fh->x.position], (size_t) count); ++ } ++ fh->x.position += count; ++ return count; ++ } ++ else { ++ size_t count = fwrite(buffer, 1, (size_t) bytes, fh->x.fh); ++ if (!ferror(fh->x.fh)) return (int) count; ++ } ++ return -1; ++} ++ ++ ++static int m_seek(struct m_file *fh, off_t offset, int mode) { ++ if (!fh || !fh->file) return 1; ++ ++ if (fh->file->type == MTYPE_MEMORY) { ++ switch (mode) { ++ case MSPACK_SYS_SEEK_START: ++ break; ++ case MSPACK_SYS_SEEK_CUR: ++ offset += (off_t) fh->x.position; ++ break; ++ case MSPACK_SYS_SEEK_END: ++ offset += (off_t) fh->file->x.memory.length; ++ break; ++ default: ++ return 1; ++ } ++ ++ if (offset < 0) return 1; ++ if (offset > (off_t) fh->file->x.memory.length) return 1; ++ fh->x.position = (size_t) offset; ++ return 0; ++ } ++ ++ /* file IO based method */ ++ switch (mode) { ++ case MSPACK_SYS_SEEK_START: mode = SEEK_SET; break; ++ case MSPACK_SYS_SEEK_CUR: mode = SEEK_CUR; break; ++ case MSPACK_SYS_SEEK_END: mode = SEEK_END; break; ++ default: return 1; ++ } ++#if HAVE_FSEEKO ++ return fseeko(fh->x.fh, offset, mode); ++#else ++ return fseek(fh->x.fh, offset, mode); ++#endif ++} ++ ++ ++static off_t m_tell(struct m_file *fh) { ++ if (!fh || !fh->file) return -1; ++ if (fh->file->type == MTYPE_MEMORY) { ++ return (off_t) fh->x.position; ++ } ++#if HAVE_FSEEKO ++ return (off_t) ftello(fh->x.fh); ++#else ++ return (off_t) ftell(fh->x.fh); ++#endif ++} ++ ++ ++static struct mspack_system multi_system = { ++ (struct mspack_file * (*)(struct mspack_system *, const char *, int)) &m_open, ++ (void (*)(struct mspack_file *)) &m_close, ++ (int (*)(struct mspack_file *, void *, int)) &m_read, ++ (int (*)(struct mspack_file *, void *, int)) &m_write, ++ (int (*)(struct mspack_file *, off_t, int)) &m_seek, ++ (off_t (*)(struct mspack_file *)) &m_tell, ++ (void (*)(struct mspack_file *, const char *, ...)) &m_msg, ++ &m_alloc, ++ &m_free, ++ &m_copy, ++ NULL ++}; ++ ++/* ------------------------------------------------------------------------ */ ++/* constructors and destructor */ ++ ++const char *create_filename(const char *filename) { ++ struct m_filename *fn; ++ ++ if (!filename) return NULL; /* filename must not be null */ ++ ++ if ((fn = (struct m_filename *) malloc(sizeof(struct m_filename)))) { ++ fn->type = MTYPE_DISKFILE; ++ fn->filename = filename; /* pretty-printable filename */ ++ fn->x.diskfile = filename; ++ } ++ return (const char *) fn; ++} ++ ++const char *create_filename_from_handle(FILE *fh) { ++ struct m_filename *fn; ++ ++ if (!fh) return NULL; /* file handle must not be null */ ++ ++ if ((fn = (struct m_filename *) malloc(sizeof(struct m_filename)))) { ++ fn->type = MTYPE_STDIOFH; ++ fn->filename = NULL; /* pretty-printable filename */ ++ fn->x.stdiofh = fh; ++ } ++ return (const char *) fn; ++} ++ ++const char *create_filename_from_descriptor(int fd) { ++ struct m_filename *fn; ++ ++ if (fd < 0) return NULL; /* file descriptor must be valid */ ++ ++ if ((fn = (struct m_filename *) malloc(sizeof(struct m_filename)))) { ++ fn->type = MTYPE_FILEDESC; ++ fn->filename = NULL; /* pretty-printable filename */ ++ fn->x.filedesc = fd; ++ } ++ return (const char *) fn; ++} ++ ++const char *create_filename_from_memory(void *data, size_t length) { ++ struct m_filename *fn; ++ ++ if (!data) return NULL; /* data pointer must not be NULL */ ++ if (length == 0) return NULL; /* length must not be zero */ ++ ++ if ((fn = (struct m_filename *) malloc(sizeof(struct m_filename)))) { ++ fn->type = MTYPE_MEMORY; ++ fn->filename = NULL; /* pretty-printable filename */ ++ fn->x.memory.data = (unsigned char *) data; ++ fn->x.memory.length = length; ++ } ++ return (const char *) fn; ++} ++ ++void set_filename_printable_name(const char *filename, const char *name) { ++ struct m_filename *fn = (struct m_filename *) filename; ++ if (!fn) return; ++ /* very basic validation of structure */ ++ if ((fn->type < MTYPE_DISKFILE) || (fn->type > MTYPE_MEMORY)) return; ++ fn->filename = name; ++} ++ ++void free_filename(const char *filename) { ++ free((void *) filename); ++} ++ ++/* ------------------------------------------------------------------------ */ ++/* example of usage with mscab_decompressor */ ++ ++/* a simple cabinet */ ++static unsigned char memory_cab[] = { ++ 0x4D,0x53,0x43,0x46,0x00,0x00,0x00,0x00,0xFD,0x00,0x00,0x00,0x00,0x00,0x00, ++ 0x00,0x2C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0x01,0x00,0x02,0x00, ++ 0x00,0x00,0x22,0x06,0x00,0x00,0x5E,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x4D, ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x22,0xBA,0x59,0x20,0x00, ++ 0x68,0x65,0x6C,0x6C,0x6F,0x2E,0x63,0x00,0x4A,0x00,0x00,0x00,0x4D,0x00,0x00, ++ 0x00,0x00,0x00,0x6C,0x22,0xE7,0x59,0x20,0x00,0x77,0x65,0x6C,0x63,0x6F,0x6D, ++ 0x65,0x2E,0x63,0x00,0xBD,0x5A,0xA6,0x30,0x97,0x00,0x97,0x00,0x23,0x69,0x6E, ++ 0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x73,0x74,0x64,0x69,0x6F,0x2E,0x68,0x3E, ++ 0x0D,0x0A,0x0D,0x0A,0x76,0x6F,0x69,0x64,0x20,0x6D,0x61,0x69,0x6E,0x28,0x76, ++ 0x6F,0x69,0x64,0x29,0x0D,0x0A,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20,0x70,0x72, ++ 0x69,0x6E,0x74,0x66,0x28,0x22,0x48,0x65,0x6C,0x6C,0x6F,0x2C,0x20,0x77,0x6F, ++ 0x72,0x6C,0x64,0x21,0x5C,0x6E,0x22,0x29,0x3B,0x0D,0x0A,0x7D,0x0D,0x0A,0x23, ++ 0x69,0x6E,0x63,0x6C,0x75,0x64,0x65,0x20,0x3C,0x73,0x74,0x64,0x69,0x6F,0x2E, ++ 0x68,0x3E,0x0D,0x0A,0x0D,0x0A,0x76,0x6F,0x69,0x64,0x20,0x6D,0x61,0x69,0x6E, ++ 0x28,0x76,0x6F,0x69,0x64,0x29,0x0D,0x0A,0x7B,0x0D,0x0A,0x20,0x20,0x20,0x20, ++ 0x70,0x72,0x69,0x6E,0x74,0x66,0x28,0x22,0x57,0x65,0x6C,0x63,0x6F,0x6D,0x65, ++ 0x21,0x5C,0x6E,0x22,0x29,0x3B,0x0D,0x0A,0x7D,0x0D,0x0A,0x0D,0x0A ++}; ++ ++int main() { ++ const char *mem_cab, *std_out, *std_err, *example; ++ struct mscab_decompressor *cabd; ++ struct mscabd_cabinet *cab; ++ struct mscabd_file *file; ++ int err; ++ ++ mem_cab = create_filename_from_memory(&memory_cab[0], sizeof(memory_cab)); ++ if (!mem_cab) exit(1); ++ ++ std_out = create_filename_from_descriptor(1); ++ if (!std_out) exit(1); ++ ++ std_err = create_filename_from_handle(stderr); ++ if (!std_err) exit(1); ++ ++ example = create_filename("example.txt"); ++ if (!example) exit(1); ++ ++ set_filename_printable_name(mem_cab, "internal"); ++ set_filename_printable_name(std_out, "stdout"); ++ set_filename_printable_name(std_err, "stderr"); ++ ++ /* if self-test reveals an error */ ++ MSPACK_SYS_SELFTEST(err); ++ if (err) exit(1); ++ ++ /* create a cab decompressor using our custom mspack_system interface */ ++ if ((cabd = mspack_create_cab_decompressor(&multi_system))) { ++ ++ /* open a cab file direct from memory */ ++ if ((cab = cabd->open(cabd, mem_cab))) { ++ ++ /* first file in the cabinet: print it to stdout */ ++ file = cab->files; ++ if (cabd->extract(cabd, file, std_out)) { ++ exit(1); ++ } ++ ++ /* second file in the cabinet: print it to stderr */ ++ file = file->next; ++ if (cabd->extract(cabd, file, std_err)) { ++ exit(1); ++ } ++ /* also write it to "example.txt" */ ++ if (cabd->extract(cabd, file, example)) { ++ exit(1); ++ } ++ cabd->close(cabd, cab); ++ } ++ else { ++ fprintf(stderr, "can't open cabinet (%d)\n", cabd->last_error(cabd)); ++ } ++ mspack_destroy_cab_decompressor(cabd); ++ } ++ else { ++ fprintf(stderr, "can't make decompressor\n"); ++ } ++ ++ free_filename(example); ++ free_filename(std_err); ++ free_filename(std_out); ++ free_filename(mem_cab); ++ ++ return 0; ++ ++} +diff --git a/libclamav/libmspack-0.4alpha/test/oabx.c b/libclamav/libmspack-0.4alpha/test/oabx.c +new file mode 100644 +index 000000000000..53f675c68219 +--- /dev/null ++++ b/libclamav/libmspack-0.4alpha/test/oabx.c +@@ -0,0 +1,41 @@ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include ++ ++int main(int argc, char *argv[]) { ++ struct msoab_decompressor *oabd; ++ int err; ++ ++ setbuf(stdout, NULL); ++ setbuf(stderr, NULL); ++ ++ MSPACK_SYS_SELFTEST(err); ++ if (err) return 0; ++ ++ if ((oabd = mspack_create_oab_decompressor(NULL))) { ++ if (argc == 3) { ++ err = oabd->decompress(oabd, argv[1], argv[2]); ++ if (err) fprintf(stderr, "%s -> %s: %s\n", argv[1], argv[2], error_msg(err)); ++ } ++ else if (argc == 4) { ++ err = oabd->decompress_incremental(oabd, argv[2], argv[1], argv[3]); ++ if (err) fprintf(stderr, "%s + %s -> %s: %s\n", argv[1], argv[2], argv[3], error_msg(err)); ++ } ++ else { ++ fprintf(stderr, "Usage: %s \n", *argv); ++ fprintf(stderr, " or %s \n", *argv); ++ } ++ mspack_destroy_oab_decompressor(oabd); ++ } ++ else { ++ fprintf(stderr, "%s: can't make OAB decompressor\n", *argv); ++ } ++ return 0; ++} diff --git a/recipes-security/clamav/clamav-0.98.5/0012-allow-to-use-internal-libmspack-if-the-external-is-n.patch b/recipes-security/clamav/clamav-0.98.5/0012-allow-to-use-internal-libmspack-if-the-external-is-n.patch new file mode 100644 index 0000000..798aeba --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0012-allow-to-use-internal-libmspack-if-the-external-is-n.patch @@ -0,0 +1,106 @@ +From 2bb998ed68841356499fe5c5cde875e87563572c Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Wed, 30 Jul 2014 21:59:17 +0200 +Subject: allow to use internal libmspack if the external is not available + +Signed-off-by: Sebastian Andrzej Siewior +--- + configure.ac | 16 ++++++++++++++-- + libclamav/Makefile.am | 30 +++++++++++++++++++++++++++++- + 2 files changed, 43 insertions(+), 3 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 02caad29410a..5abe018a00b0 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -131,6 +131,18 @@ m4_include([m4/reorganization/libs/curl.m4]) + + m4_include([m4/reorganization/substitutions.m4]) + ++PKG_CHECK_MODULES([LIBMSPACK], [libmspack], ++ use_internal_mspack=no, use_internal_mspack=yes) ++ ++AM_CONDITIONAL([USE_INTERNAL_MSPACK], test "x$use_internal_mspack" = "xyes") ++ ++if test "x$use_internal_mspack" = "xyes"; then ++ mspack_msg="Internal" ++ AC_CONFIG_SUBDIRS([libclamav/libmspack-0.4alpha]) ++else ++ mspack_msg="External, $LIBMSPACK_CFLAGS $LIBMSPACK_LIBS" ++fi ++ + AM_CONDITIONAL([ENABLE_CLAMSUBMIT], [test "$have_curl" = "yes"]) + + AC_CONFIG_FILES([ +@@ -178,8 +190,6 @@ fi + AM_CONDITIONAL([ENABLE_LLVM], + [test "$subdirfailed" != "yes" && test "$enable_llvm" != "no"]) + +-PKG_CHECK_MODULES([LIBMSPACK], [libmspack]) +- + no_recursion="yes"; + AC_OUTPUT([libclamav/Makefile]) + +@@ -236,6 +246,8 @@ if test "x$PCRE_HOME" = "x"; then + else + CL_MSG_STATUS([pcre ],[$PCRE_HOME],[$have_pcre]) + fi ++CL_MSG_STATUS([preclass ],[$LIBJSON_HOME],[$have_json]) ++CL_MSG_STATUS([libmspack ],[yes],[$mspack_msg]) + if test "x$XML_LIBS" = "x"; then + CL_MSG_STATUS([dmg and xar ],[no],[]) + else +diff --git a/libclamav/Makefile.am b/libclamav/Makefile.am +index 538e83dcdd03..6d2cf920d6e2 100644 +--- a/libclamav/Makefile.am ++++ b/libclamav/Makefile.am +@@ -122,11 +122,12 @@ libclamav_internal_utils_nothreads_la_SOURCES=str.c\ + libclamav_internal_utils_nothreads_la_LDFLAGS=-static @SSL_LDFLAGS@ @JSON_LDFLAGS@ + libclamav_internal_utils_nothreads_la_CFLAGS=$(AM_CFLAGS) -DCL_NOTHREADS @SSL_CPPFLAGS@ @JSON_CPPFLAGS@ + libclamav_internal_utils_nothreads_la_LIBADD=@SSL_LIBS@ @JSON_LIBS@ ++SUBDIRS= + + if ENABLE_LLVM + LLVMLIBADD=c++/libclamavcxx.la -lstdc++ -lm + LLVMDEP=c++/libclamavcxx.la +-SUBDIRS=c++ ++SUBDIRS+=c++ + else + LLVMLIBADD=libclamav_nocxx.la + LLVMDEP=libclamav_nocxx.la +@@ -147,8 +148,35 @@ if VERSIONSCRIPT + libclamav_la_LDFLAGS += -Wl,@VERSIONSCRIPTFLAG@,@top_srcdir@/libclamav/libclamav.map + endif + ++if USE_INTERNAL_MSPACK ++SUBDIRS += libmspack-0.4alpha ++libclamav_la_CFLAGS += -I@top_srcdir@/libclamav/libmspack-0.4alpha/mspack ++libclamav_la_LIBADD += @top_builddir@/libclamav/libmspack-0.4alpha/.libs/cabc.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/system.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/kwajd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/hlpc.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/chmd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/qtmd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/litc.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/oabc.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/lzxd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/litd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/crc32.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/lzssd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/kwajc.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/cabd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/szddd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/lzxc.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/mszipd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/szddc.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/oabd.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/chmc.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/mszipc.o \ ++ @top_builddir@/libclamav/libmspack-0.4alpha/.libs/hlpd.o ++else + libclamav_la_CFLAGS += $(LIBMSPACK_CFLAGS) + libclamav_la_LDFLAGS += $(LIBMSPACK_LIBS) ++endif + + include_HEADERS = clamav.h + diff --git a/recipes-security/clamav/clamav-0.98.5/0013-fix-autoreconf-with-embedded-libmspack.patch b/recipes-security/clamav/clamav-0.98.5/0013-fix-autoreconf-with-embedded-libmspack.patch new file mode 100644 index 0000000..f7175d3 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0013-fix-autoreconf-with-embedded-libmspack.patch @@ -0,0 +1,27 @@ +From b1ab1a88f38c9d9cea2433dac33b8ecb31b3c799 Mon Sep 17 00:00:00 2001 +From: Andreas Cadhalpun +Date: Mon, 22 Sep 2014 21:50:05 +0200 +Subject: fix autoreconf with embedded libmspack + +--- + libclamav/libmspack-0.4alpha/NEWS | 1 + + libclamav/libmspack-0.4alpha/configure.ac | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/libclamav/libmspack-0.4alpha/NEWS b/libclamav/libmspack-0.4alpha/NEWS +index e69de29bb2d1..8d1c8b69c3fc 100644 +--- a/libclamav/libmspack-0.4alpha/NEWS ++++ b/libclamav/libmspack-0.4alpha/NEWS +@@ -0,0 +1 @@ ++ +diff --git a/libclamav/libmspack-0.4alpha/configure.ac b/libclamav/libmspack-0.4alpha/configure.ac +index 55fb6ce5ee9d..1fc98577f152 100644 +--- a/libclamav/libmspack-0.4alpha/configure.ac ++++ b/libclamav/libmspack-0.4alpha/configure.ac +@@ -46,5 +46,5 @@ AC_SYS_LARGEFILE + AC_FUNC_FSEEKO + + # Checks for library functions. +-AC_CONFIG_FILES([Makefile doc/Makefile doc/Doxyfile libmspack.pc]) ++AC_CONFIG_FILES([Makefile libmspack.pc]) + AC_OUTPUT diff --git a/recipes-security/clamav/clamav-0.98.5/0014-remove-AC_CONFIG_SRCDIR-llvm-configure-from-libclama.patch b/recipes-security/clamav/clamav-0.98.5/0014-remove-AC_CONFIG_SRCDIR-llvm-configure-from-libclama.patch new file mode 100644 index 0000000..8bd2491 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0014-remove-AC_CONFIG_SRCDIR-llvm-configure-from-libclama.patch @@ -0,0 +1,23 @@ +From 573da4644d9dbcff3107c4bc3a8a346a5ba0b84d Mon Sep 17 00:00:00 2001 +From: Andreas Cadhalpun +Date: Tue, 14 Oct 2014 20:16:04 +0200 +Subject: remove AC_CONFIG_SRCDIR([llvm/configure]) from + libclamav/c++/configure.ac to allow compilation without the + libclamav/c++/llvm directory + +--- + libclamav/c++/configure.ac | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/libclamav/c++/configure.ac b/libclamav/c++/configure.ac +index 3c7c7e26fbf8..43e187ff1f56 100644 +--- a/libclamav/c++/configure.ac ++++ b/libclamav/c++/configure.ac +@@ -16,7 +16,6 @@ dnl MA 02110-1301, USA. + AC_PREREQ([2.59]) + AC_INIT([libclamavc++],[devel],[http://bugs.clamav.net]) + AC_CONFIG_AUX_DIR([config]) +-AC_CONFIG_SRCDIR([llvm/configure]) + AC_CONFIG_MACRO_DIR([m4]) + AC_CONFIG_HEADER([clamavcxx-config.h]) + AC_CANONICAL_TARGET diff --git a/recipes-security/clamav/clamav-0.98.5/0015-bb-10731-Allow-to-specificy-a-group-for-the-socket-o.patch b/recipes-security/clamav/clamav-0.98.5/0015-bb-10731-Allow-to-specificy-a-group-for-the-socket-o.patch new file mode 100644 index 0000000..8619a51 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0015-bb-10731-Allow-to-specificy-a-group-for-the-socket-o.patch @@ -0,0 +1,229 @@ +From 9ba0bd8840f8be4cccaf8134b65a012dffdd8ae0 Mon Sep 17 00:00:00 2001 +From: Shawn Webb +Date: Thu, 31 Jul 2014 11:50:23 -0400 +Subject: bb#10731 - Allow to specificy a group for the socket of which the + user is not a member + +Signed-off-by: Sebastian Andrzej Siewior +--- + clamav-milter/clamav-milter.c | 193 +++++++++++++++++++++--------------------- + 1 file changed, 98 insertions(+), 95 deletions(-) + +diff --git a/clamav-milter/clamav-milter.c b/clamav-milter/clamav-milter.c +index 2c7a4d7d3414..99e7fe7fac04 100644 +--- a/clamav-milter/clamav-milter.c ++++ b/clamav-milter/clamav-milter.c +@@ -116,6 +116,104 @@ int main(int argc, char **argv) { + } + } + ++ if(!(my_socket = optget(opts, "MilterSocket")->strarg)) { ++ logg("!Please configure the MilterSocket directive\n"); ++ logg_close(); ++ optfree(opts); ++ return 1; ++ } ++ ++ if(smfi_setconn(my_socket) == MI_FAILURE) { ++ logg("!smfi_setconn failed\n"); ++ logg_close(); ++ optfree(opts); ++ return 1; ++ } ++ if(smfi_register(descr) == MI_FAILURE) { ++ logg("!smfi_register failed\n"); ++ logg_close(); ++ optfree(opts); ++ return 1; ++ } ++ opt = optget(opts, "FixStaleSocket"); ++ umsk = umask(0777); /* socket is created with 000 to avoid races */ ++ if(smfi_opensocket(opt->enabled) == MI_FAILURE) { ++ logg("!Failed to create socket %s\n", my_socket); ++ logg_close(); ++ optfree(opts); ++ return 1; ++ } ++ umask(umsk); /* restore umask */ ++ if(strncmp(my_socket, "inet:", 5) && strncmp(my_socket, "inet6:", 6)) { ++ /* set group ownership and perms on the local socket */ ++ char *sock_name = my_socket; ++ mode_t sock_mode; ++ if(!strncmp(my_socket, "unix:", 5)) ++ sock_name += 5; ++ if(!strncmp(my_socket, "local:", 6)) ++ sock_name += 6; ++ if(*my_socket == ':') ++ sock_name ++; ++ ++ if(optget(opts, "MilterSocketGroup")->enabled) { ++ char *gname = optget(opts, "MilterSocketGroup")->strarg, *end; ++ gid_t sock_gid = strtol(gname, &end, 10); ++ if(*end) { ++ struct group *pgrp = getgrnam(gname); ++ if(!pgrp) { ++ logg("!Unknown group %s\n", gname); ++ logg_close(); ++ optfree(opts); ++ return 1; ++ } ++ sock_gid = pgrp->gr_gid; ++ } ++ if(chown(sock_name, -1, sock_gid)) { ++ logg("!Failed to change socket ownership to group %s\n", gname); ++ logg_close(); ++ optfree(opts); ++ return 1; ++ } ++ } ++ ++ if ((opt = optget(opts, "User"))->enabled) { ++ struct passwd *user; ++ if ((user = getpwnam(opt->strarg)) == NULL) { ++ logg("ERROR: Can't get information about user %s.\n", ++ opt->strarg); ++ logg_close(); ++ optfree(opts); ++ return 1; ++ } ++ ++ if(chown(sock_name, user->pw_uid, -1)) { ++ logg("!Failed to change socket ownership to user %s\n", user->pw_name); ++ optfree(opts); ++ logg_close(); ++ return 1; ++ } ++ } ++ ++ if(optget(opts, "MilterSocketMode")->enabled) { ++ char *end; ++ sock_mode = strtol(optget(opts, "MilterSocketMode")->strarg, &end, 8); ++ if(*end) { ++ logg("!Invalid MilterSocketMode %s\n", optget(opts, "MilterSocketMode")->strarg); ++ logg_close(); ++ optfree(opts); ++ return 1; ++ } ++ } else ++ sock_mode = 0777 & ~umsk; ++ ++ if(chmod(sock_name, sock_mode & 0666)) { ++ logg("!Cannot set milter socket permission to %s\n", optget(opts, "MilterSocketMode")->strarg); ++ logg_close(); ++ optfree(opts); ++ return 1; ++ } ++ } ++ + if(geteuid() == 0 && (opt = optget(opts, "User"))->enabled) { + struct passwd *user = NULL; + if((user = getpwnam(opt->strarg)) == NULL) { +@@ -248,15 +346,6 @@ int main(int argc, char **argv) { + + multircpt = optget(opts, "SupportMultipleRecipients")->enabled; + +- if(!(my_socket = optget(opts, "MilterSocket")->strarg)) { +- logg("!Please configure the MilterSocket directive\n"); +- localnets_free(); +- whitelist_free(); +- logg_close(); +- optfree(opts); +- return 1; +- } +- + if(!optget(opts, "Foreground")->enabled) { + if(daemonize() == -1) { + logg("!daemonize() failed\n"); +@@ -271,92 +360,6 @@ int main(int argc, char **argv) { + logg("^Can't change current working directory to root\n"); + } + +- if(smfi_setconn(my_socket) == MI_FAILURE) { +- logg("!smfi_setconn failed\n"); +- localnets_free(); +- whitelist_free(); +- logg_close(); +- optfree(opts); +- return 1; +- } +- if(smfi_register(descr) == MI_FAILURE) { +- logg("!smfi_register failed\n"); +- localnets_free(); +- whitelist_free(); +- logg_close(); +- optfree(opts); +- return 1; +- } +- opt = optget(opts, "FixStaleSocket"); +- umsk = umask(0777); /* socket is created with 000 to avoid races */ +- if(smfi_opensocket(opt->enabled) == MI_FAILURE) { +- logg("!Failed to create socket %s\n", my_socket); +- localnets_free(); +- whitelist_free(); +- logg_close(); +- optfree(opts); +- return 1; +- } +- umask(umsk); /* restore umask */ +- if(strncmp(my_socket, "inet:", 5) && strncmp(my_socket, "inet6:", 6)) { +- /* set group ownership and perms on the local socket */ +- char *sock_name = my_socket; +- mode_t sock_mode; +- if(!strncmp(my_socket, "unix:", 5)) +- sock_name += 5; +- if(!strncmp(my_socket, "local:", 6)) +- sock_name += 6; +- if(*my_socket == ':') +- sock_name ++; +- +- if(optget(opts, "MilterSocketGroup")->enabled) { +- char *gname = optget(opts, "MilterSocketGroup")->strarg, *end; +- gid_t sock_gid = strtol(gname, &end, 10); +- if(*end) { +- struct group *pgrp = getgrnam(gname); +- if(!pgrp) { +- logg("!Unknown group %s\n", gname); +- localnets_free(); +- whitelist_free(); +- logg_close(); +- optfree(opts); +- return 1; +- } +- sock_gid = pgrp->gr_gid; +- } +- if(chown(sock_name, -1, sock_gid)) { +- logg("!Failed to change socket ownership to group %s\n", gname); +- localnets_free(); +- whitelist_free(); +- logg_close(); +- optfree(opts); +- return 1; +- } +- } +- if(optget(opts, "MilterSocketMode")->enabled) { +- char *end; +- sock_mode = strtol(optget(opts, "MilterSocketMode")->strarg, &end, 8); +- if(*end) { +- logg("!Invalid MilterSocketMode %s\n", optget(opts, "MilterSocketMode")->strarg); +- localnets_free(); +- whitelist_free(); +- logg_close(); +- optfree(opts); +- return 1; +- } +- } else +- sock_mode = 0777 & ~umsk; +- +- if(chmod(sock_name, sock_mode & 0666)) { +- logg("!Cannot set milter socket permission to %s\n", optget(opts, "MilterSocketMode")->strarg); +- localnets_free(); +- whitelist_free(); +- logg_close(); +- optfree(opts); +- return 1; +- } +- } +- + maxfilesize = optget(opts, "MaxFileSize")->numarg; + if(!maxfilesize) { + logg("^Invalid MaxFileSize, using default (%d)\n", CLI_DEFAULT_MAXFILESIZE); diff --git a/recipes-security/clamav/clamav-0.98.5/0016-clamav-milter-add-additinal-SMFIF_-flags-before-invo.patch b/recipes-security/clamav/clamav-0.98.5/0016-clamav-milter-add-additinal-SMFIF_-flags-before-invo.patch new file mode 100644 index 0000000..621c6dc --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0016-clamav-milter-add-additinal-SMFIF_-flags-before-invo.patch @@ -0,0 +1,86 @@ +From dbc72db36eced2d3ca7c5b7f14970528c435429e Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Sun, 26 Oct 2014 12:11:09 +0100 +Subject: clamav-milter: add additinal SMFIF_* flags before invoking + smfi_register() + +unfortunately after the shifting of the code (so that the socket could +be part of a group which is not part of the clamav user) I forgot (or +did not see it) to have the header flags added before the +smfi_register() was invoked. As a result the socket was working but it +was unable to add the X-Virus-Scanned & X-Virus-Status flags. This +patch fixes the issue. + +https://bugzilla.clamav.net/show_bug.cgi?id=10731 + +Signed-off-by: Sebastian Andrzej Siewior +--- + clamav-milter/clamav-milter.c | 48 ++++++++++++++++++++++++------------------- + 1 file changed, 27 insertions(+), 21 deletions(-) + +diff --git a/clamav-milter/clamav-milter.c b/clamav-milter/clamav-milter.c +index 99e7fe7fac04..22db98ab7c5e 100644 +--- a/clamav-milter/clamav-milter.c ++++ b/clamav-milter/clamav-milter.c +@@ -116,6 +116,33 @@ int main(int argc, char **argv) { + } + } + ++ pt = optget(opts, "AddHeader")->strarg; ++ if (strcasecmp(pt, "No")) { ++ char myname[255]; ++ ++ if (((opt = optget(opts, "ReportHostname"))->enabled && ++ strncpy(myname, opt->strarg, sizeof(myname))) || ++ !gethostname(myname, sizeof(myname))) { ++ ++ myname[sizeof(myname)-1] = '\0'; ++ snprintf(xvirushdr, sizeof(xvirushdr), "clamav-milter %s at %s", ++ get_version(), myname); ++ } else { ++ snprintf(xvirushdr, sizeof(xvirushdr), "clamav-milter %s", ++ get_version()); ++ } ++ xvirushdr[sizeof(xvirushdr)-1] = '\0'; ++ ++ descr.xxfi_flags |= SMFIF_ADDHDRS; ++ ++ if (strcasecmp(pt, "Add")) { /* Replace or Yes */ ++ descr.xxfi_flags |= SMFIF_CHGHDRS; ++ addxvirus = 1; ++ } else { /* Add */ ++ addxvirus = 2; ++ } ++ } ++ + if(!(my_socket = optget(opts, "MilterSocket")->strarg)) { + logg("!Please configure the MilterSocket directive\n"); + logg_close(); +@@ -323,27 +350,6 @@ int main(int argc, char **argv) { + return 1; + } + +- pt = optget(opts, "AddHeader")->strarg; +- if(strcasecmp(pt, "No")) { +- char myname[255]; +- +- if(((opt = optget(opts, "ReportHostname"))->enabled && strncpy(myname, opt->strarg, sizeof(myname))) || !gethostname(myname, sizeof(myname))) { +- myname[sizeof(myname)-1] = '\0'; +- snprintf(xvirushdr, sizeof(xvirushdr), "clamav-milter %s at %s", get_version(), myname); +- } else +- snprintf(xvirushdr, sizeof(xvirushdr), "clamav-milter %s", get_version()); +- xvirushdr[sizeof(xvirushdr)-1] = '\0'; +- +- descr.xxfi_flags |= SMFIF_ADDHDRS; +- +- if(strcasecmp(pt, "Add")) { /* Replace or Yes */ +- descr.xxfi_flags |= SMFIF_CHGHDRS; +- addxvirus = 1; +- } else { /* Add */ +- addxvirus = 2; +- } +- } +- + multircpt = optget(opts, "SupportMultipleRecipients")->enabled; + + if(!optget(opts, "Foreground")->enabled) { diff --git a/recipes-security/clamav/clamav-0.98.5/0017-Bump-.so-version-number.patch b/recipes-security/clamav/clamav-0.98.5/0017-Bump-.so-version-number.patch new file mode 100644 index 0000000..2af0d0e --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0017-Bump-.so-version-number.patch @@ -0,0 +1,22 @@ +From 6569ca8a084191f9fedde16abf8fa15b6ebef4fe Mon Sep 17 00:00:00 2001 +From: Shawn Webb +Date: Wed, 19 Nov 2014 11:51:22 -0500 +Subject: Bump .so version number + +--- + m4/reorganization/version.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/m4/reorganization/version.m4 b/m4/reorganization/version.m4 +index ea263b28e647..f4fe8b1e150e 100644 +--- a/m4/reorganization/version.m4 ++++ b/m4/reorganization/version.m4 +@@ -3,7 +3,7 @@ dnl VERSION="devel-`date +%Y%m%d`" + VERSION="0.98.5" + + LC_CURRENT=7 +-LC_REVISION=22 ++LC_REVISION=24 + LC_AGE=1 + LIBCLAMAV_VERSION="$LC_CURRENT":"$LC_REVISION":"$LC_AGE" + AC_SUBST([LIBCLAMAV_VERSION]) diff --git a/recipes-security/clamav/clamav-0.98.5/0018-llvm-don-t-use-system-libs.patch b/recipes-security/clamav/clamav-0.98.5/0018-llvm-don-t-use-system-libs.patch new file mode 100644 index 0000000..5b1a606 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/0018-llvm-don-t-use-system-libs.patch @@ -0,0 +1,26 @@ +From 169677f7699f78d483c84b4ab54943ea622535c8 Mon Sep 17 00:00:00 2001 +From: Sebastian Andrzej Siewior +Date: Wed, 19 Nov 2014 23:04:32 +0100 +Subject: llvm: don't use --system-libs + +this continues the saga of not linking the .a files so we don't care +about the libs llvm links against (like -ledit) + +Signed-off-by: Sebastian Andrzej Siewior +--- + libclamav/c++/configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libclamav/c++/configure.ac b/libclamav/c++/configure.ac +index 43e187ff1f56..2d2d47b9d24c 100644 +--- a/libclamav/c++/configure.ac ++++ b/libclamav/c++/configure.ac +@@ -115,7 +115,7 @@ if test "x$llvmconfig" != "x"; then + if test $llvmver_test -ge 350; then + dnl LLVM 3.5.0 and after splits linker flags into two sets + ldflags=`$llvmconfig --ldflags` +- syslibs=`$llvmconfig --system-libs` ++ syslibs= + AC_SUBST(LLVMCONFIG_LDFLAGS, ["$ldflags $syslibs"]) + else + AC_SUBST(LLVMCONFIG_LDFLAGS, [`$llvmconfig --ldflags`]) diff --git a/recipes-security/clamav/clamav-0.98.5/clamav-0001-clamdscan.patch b/recipes-security/clamav/clamav-0.98.5/clamav-0001-clamdscan.patch new file mode 100644 index 0000000..2effdeb --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/clamav-0001-clamdscan.patch @@ -0,0 +1,21 @@ +Fixes build error + +proto.c: In function 'dconnect': +proto.c:86:67: error: invalid application of 'sizeof' to incomplete type 'struct sockaddr_un' +if (connect(sockd, (struct sockaddr *)&nixsock, sizeof(nixsock)) == 0) + +Patch sent upstream: http://lurker.clamav.net/message/20140928.130829.5494fd68.en.html + +Signed-off-by: Bernd Kuhls + +diff -uNr a/clamdscan/proto.c b/clamdscan/proto.c +--- a/clamdscan/proto.c 2014-05-06 20:39:56.000000000 +0200 ++++ b/clamdscan/proto.c 2014-05-10 10:41:44.000000000 +0200 +@@ -35,6 +35,7 @@ + #include + #include + #include ++#include + #ifdef HAVE_SYS_SELECT_H + #include + #endif diff --git a/recipes-security/clamav/clamav-0.98.5/clamav-freshclam.service b/recipes-security/clamav/clamav-0.98.5/clamav-freshclam.service new file mode 100644 index 0000000..0c909fb --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/clamav-freshclam.service @@ -0,0 +1,12 @@ +[Unit] +Description=ClamAV virus database updater +Documentation=man:freshclam(1) man:freshclam.conf(5) http://www.clamav.net/lang/en/doc/ +# If user wants it run from cron, don't start the daemon. +ConditionPathExists=!/etc/cron.d/clamav-freshclam + +[Service] +ExecStart=/usr/bin/freshclam -d --foreground=true +StandardOutput=syslog + +[Install] +WantedBy=multi-user.target diff --git a/recipes-security/clamav/clamav-0.98.5/clamav-milter.conf.sample b/recipes-security/clamav/clamav-0.98.5/clamav-milter.conf.sample new file mode 100644 index 0000000..ed0d519 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/clamav-milter.conf.sample @@ -0,0 +1,293 @@ +## +## Example config file for clamav-milter +## + +# Comment or remove the line below. +Example + + +## +## Main options +## + +# Define the interface through which we communicate with sendmail +# This option is mandatory! Possible formats are: +# [[unix|local]:]/path/to/file - to specify a unix domain socket +# inet:port@[hostname|ip-address] - to specify an ipv4 socket +# inet6:port@[hostname|ip-address] - to specify an ipv6 socket +# +# Default: no default +#MilterSocket /tmp/clamav-milter.socket +#MilterSocket inet:7357 + +# Define the group ownership for the (unix) milter socket. +# Default: disabled (the primary group of the user running clamd) +#MilterSocketGroup virusgroup + +# Sets the permissions on the (unix) milter socket to the specified mode. +# Default: disabled (obey umask) +#MilterSocketMode 660 + +# Remove stale socket after unclean shutdown. +# +# Default: yes +#FixStaleSocket yes + +# Run as another user (clamav-milter must be started by root for this option to work) +# +# Default: unset (don't drop privileges) +#User clamav + +# Initialize supplementary group access (clamav-milter must be started by root). +# +# Default: no +#AllowSupplementaryGroups no + +# Waiting for data from clamd will timeout after this time (seconds). +# Value of 0 disables the timeout. +# +# Default: 120 +#ReadTimeout 300 + +# Don't fork into background. +# +# Default: no +#Foreground yes + +# Chroot to the specified directory. +# Chrooting is performed just after reading the config file and before dropping privileges. +# +# Default: unset (don't chroot) +#Chroot /newroot + +# This option allows you to save a process identifier of the listening +# daemon (main thread). +# +# Default: disabled +#PidFile /var/run/clamav/clamav-milter.pid + +# Optional path to the global temporary directory. +# Default: system specific (usually /tmp or /var/tmp). +# +#TemporaryDirectory /var/tmp + +## +## Clamd options +## + +# Define the clamd socket to connect to for scanning. +# This option is mandatory! Syntax: +# ClamdSocket unix:path +# ClamdSocket tcp:host:port +# The first syntax specifies a local unix socket (needs an absolute path) e.g.: +# ClamdSocket unix:/var/run/clamd/clamd.socket +# The second syntax specifies a tcp local or remote tcp socket: the +# host can be a hostname or an ip address; the ":port" field is only required +# for IPv6 addresses, otherwise it defaults to 3310, e.g.: +# ClamdSocket tcp:192.168.0.1 +# +# This option can be repeated several times with different sockets or even +# with the same socket: clamd servers will be selected in a round-robin fashion. +# +# Default: no default +ClamdSocket /var/run/clamav/clamd + + +## +## Exclusions +## + +# Messages originating from these hosts/networks will not be scanned +# This option takes a host(name)/mask pair in CIRD notation and can be +# repeated several times. If "/mask" is omitted, a host is assumed. +# To specify a locally orignated, non-smtp, email use the keyword "local" +# +# Default: unset (scan everything regardless of the origin) +#LocalNet local +#LocalNet 192.168.0.0/24 +#LocalNet 1111:2222:3333::/48 + +# This option specifies a file which contains a list of basic POSIX regular +# expressions. Addresses (sent to or from - see below) matching these regexes +# will not be scanned. Optionally each line can start with the string "From:" +# or "To:" (note: no whitespace after the colon) indicating if it is, +# respectively, the sender or recipient that is to be whitelisted. +# If the field is missing, "To:" is assumed. +# Lines starting with #, : or ! are ignored. +# +# Default unset (no exclusion applied) +#Whitelist /etc/whitelisted_addresses + +# Messages from authenticated SMTP users matching this extended POSIX +# regular expression (egrep-like) will not be scanned. +# As an alternative, a file containing a plain (not regex) list of names (one +# per line) can be specified using the prefix "file:". +# e.g. SkipAuthenticated file:/etc/good_guys +# +# Note: this is the AUTH login name! +# +# Default: unset (no whitelisting based on SMTP auth) +#SkipAuthenticated ^(tom|dick|henry)$ + +# Messages larger than this value won't be scanned. +# Make sure this value is lower or equal than StreamMaxLength in clamd.conf +# +# Default: 25M +#MaxFileSize 10M + + +## +## Actions +## + +# The following group of options controls the delievery process under +# different circumstances. +# The following actions are available: +# - Accept +# The message is accepted for delievery +# - Reject +# Immediately refuse delievery (a 5xx error is returned to the peer) +# - Defer +# Return a temporary failure message (4xx) to the peer +# - Blackhole (not available for OnFail) +# Like Accept but the message is sent to oblivion +# - Quarantine (not available for OnFail) +# Like Accept but message is quarantined instead of being delivered +# +# NOTE: In Sendmail the quarantine queue can be examined via mailq -qQ +# For Postfix this causes the message to be placed on hold +# +# Action to be performed on clean messages (mostly useful for testing) +# Default: Accept +#OnClean Accept + +# Action to be performed on infected messages +# Default: Quarantine +#OnInfected Quarantine + +# Action to be performed on error conditions (this includes failure to +# allocate data structures, no scanners available, network timeouts, +# unknown scanner replies and the like) +# Default: Defer +#OnFail Defer + +# This option allows to set a specific rejection reason for infected messages +# and it's therefore only useful together with "OnInfected Reject" +# The string "%v", if present, will be replaced with the virus name. +# Default: MTA specific +#RejectMsg + +# If this option is set to "Replace" (or "Yes"), an "X-Virus-Scanned" and an +# "X-Virus-Status" headers will be attached to each processed message, possibly +# replacing existing headers. +# If it is set to Add, the X-Virus headers are added possibly on top of the +# existing ones. +# Note that while "Replace" can potentially break DKIM signatures, "Add" may +# confuse procmail and similar filters. +# Default: no +#AddHeader Replace + +# When AddHeader is in use, this option allows to arbitrary set the reported +# hostname. This may be desirable in order to avoid leaking internal names. +# If unset the real machine name is used. +# Default: disabled +#ReportHostname my.mail.server.name + +# Execute a command (possibly searching PATH) when an infected message is found. +# The following parameters are passed to the invoked program in this order: +# virus name, queue id, sender, destination, subject, message id, message date. +# Note #1: this requires MTA macroes to be available (see LogInfected below) +# Note #2: the process is invoked in the context of clamav-milter +# Note #3: clamav-milter will wait for the process to exit. Be quick or fork to +# avoid unnecessary delays in email delievery +# Default: disabled +#VirusAction /usr/local/bin/my_infected_message_handler + +## +## Logging options +## + +# Uncomment this option to enable logging. +# LogFile must be writable for the user running daemon. +# A full path is required. +# +# Default: disabled +#LogFile /var/log/clamav/clamav-milter.log + +# By default the log file is locked for writing - the lock protects against +# running clamav-milter multiple times. +# This option disables log file locking. +# +# Default: no +#LogFileUnlock yes + +# Maximum size of the log file. +# Value of 0 disables the limit. +# You may use 'M' or 'm' for megabytes (1M = 1m = 1048576 bytes) +# and 'K' or 'k' for kilobytes (1K = 1k = 1024 bytes). To specify the size +# in bytes just don't use modifiers. If LogFileMaxSize is enabled, log +# rotation (the LogRotate option) will always be enabled. +# +# Default: 1M +#LogFileMaxSize 2M + +# Log time with each message. +# +# Default: no +#LogTime yes + +# Use system logger (can work together with LogFile). +# +# Default: no +#LogSyslog yes + +# Specify the type of syslog messages - please refer to 'man syslog' +# for facility names. +# +# Default: LOG_LOCAL6 +#LogFacility LOG_MAIL + +# Enable verbose logging. +# +# Default: no +#LogVerbose yes + +# Enable log rotation. Always enabled when LogFileMaxSize is enabled. +# Default: no +#LogRotate yes + +# This option allows to tune what is logged when a message is infected. +# Possible values are Off (the default - nothing is logged), +# Basic (minimal info logged), Full (verbose info logged) +# Note: +# For this to work properly in sendmail, make sure the msg_id, mail_addr, +# rcpt_addr and i macroes are available in eom. In other words add a line like: +# Milter.macros.eom={msg_id}, {mail_addr}, {rcpt_addr}, i +# to your .cf file. Alternatively use the macro: +# define(`confMILTER_MACROS_EOM', `{msg_id}, {mail_addr}, {rcpt_addr}, i') +# Postfix should be working fine with the default settings. +# +# Default: disabled +#LogInfected Basic + +# This option allows to tune what is logged when no threat is found in a scanned message. +# See LogInfected for possible values and caveats. +# Useful in debugging but drastically increases the log size. +# Default: disabled +#LogClean Basic + +# This option affects the behaviour of LogInfected, LogClean and VirusAction +# when a message with multiple recipients is scanned: +# If SupportMultipleRecipients is off (the default) +# then one single log entry is generated for the message and, in case the +# message is determined to be malicious, the command indicated by VirusAction +# is executed just once. In both cases only the last recipient is reported. +# If SupportMultipleRecipients is on: +# then one line is logged for each recipient and the command indicated +# by VirusAction is also executed once for each recipient. +# +# Note: although it's probably a good idea to enable this option, the default value +# is currently set to off for legacy reasons. +# Default: no +#SupportMultipleRecipients yes + diff --git a/recipes-security/clamav/clamav-0.98.5/clamav.service b/recipes-security/clamav/clamav-0.98.5/clamav.service new file mode 100644 index 0000000..f13191f --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/clamav.service @@ -0,0 +1,17 @@ +[Unit] +Description=Clam AntiVirus userspace daemon +Documentation=man:clamd(8) man:clamd.conf(5) http://www.clamav.net/lang/en/doc/ +Requires=clamav-daemon.socket +# Check for database existence +ConditionPathExistsGlob=/usr/share/clamav/main.{c[vl]d,inc} +ConditionPathExistsGlob=/usr/share/clamav/daily.{c[vl]d,inc} + +[Service] +ExecStart=/usr/sbin/clamd --foreground=true +# Reload the database +ExecReload=/bin/kill -USR2 $MAINPID +StandardOutput=syslog + +[Install] +WantedBy=multi-user.target +Also=clamav-daemon.socket diff --git a/recipes-security/clamav/clamav-0.98.5/clamd.conf b/recipes-security/clamav/clamav-0.98.5/clamd.conf new file mode 100644 index 0000000..0457785 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/clamd.conf @@ -0,0 +1,595 @@ +# Uncomment this option to enable logging. +# LogFile must be writable for the user running daemon. +# A full path is required. +# Default: disabled +LogFile /tmp/clamd.log + +# By default the log file is locked for writing - the lock protects against +# running clamd multiple times (if want to run another clamd, please +# copy the configuration file, change the LogFile variable, and run +# the daemon with --config-file option). +# This option disables log file locking. +# Default: no +LogFileUnlock yes + +# Maximum size of the log file. +# Value of 0 disables the limit. +# You may use 'M' or 'm' for megabytes (1M = 1m = 1048576 bytes) +# and 'K' or 'k' for kilobytes (1K = 1k = 1024 bytes). To specify the size +# in bytes just don't use modifiers. If LogFileMaxSize is enabled, log +# rotation (the LogRotate option) will always be enabled. +# Default: 1M +LogFileMaxSize 2M + +# Log time with each message. +# Default: no +LogTime yes + +# Also log clean files. Useful in debugging but drastically increases the +# log size. +# Default: no +#LogClean yes + +# Use system logger (can work together with LogFile). +# Default: no +#LogSyslog yes + +# Specify the type of syslog messages - please refer to 'man syslog' +# for facility names. +# Default: LOG_LOCAL6 +#LogFacility LOG_MAIL + +# Enable verbose logging. +# Default: no +#LogVerbose yes + +# Enable log rotation. Always enabled when LogFileMaxSize is enabled. +# Default: no +#LogRotate yes + +# Log additional information about the infected file, such as its +# size and hash, together with the virus name. +ExtendedDetectionInfo yes + +# This option allows you to save a process identifier of the listening +# daemon (main thread). +# Default: disabled +PidFile /var/run/clamd.pid + +# Optional path to the global temporary directory. +# Default: system specific (usually /tmp or /var/tmp). +TemporaryDirectory /var/tmp + +# Path to the database directory. +# Default: hardcoded (depends on installation options) +DatabaseDirectory /var/lib/clamav + +# Only load the official signatures published by the ClamAV project. +# Default: no +#OfficialDatabaseOnly no + +# The daemon can work in local mode, network mode or both. +# Due to security reasons we recommend the local mode. + +# Path to a local socket file the daemon will listen on. +# Default: disabled (must be specified by a user) +LocalSocket /tmp/clamd.socket + +# Sets the group ownership on the unix socket. +# Default: disabled (the primary group of the user running clamd) +#LocalSocketGroup virusgroup + +# Sets the permissions on the unix socket to the specified mode. +# Default: disabled (socket is world accessible) +#LocalSocketMode 660 + +# Remove stale socket after unclean shutdown. +# Default: yes +#FixStaleSocket yes + +# TCP port address. +# Default: no +#TCPSocket 3310 + +# TCP address. +# By default we bind to INADDR_ANY, probably not wise. +# Enable the following to provide some degree of protection +# from the outside world. This option can be specified multiple +# times if you want to listen on multiple IPs. IPv6 is now supported. +# Default: no +#TCPAddr 127.0.0.1 + +# Maximum length the queue of pending connections may grow to. +# Default: 200 +#MaxConnectionQueueLength 30 + +# Clamd uses FTP-like protocol to receive data from remote clients. +# If you are using clamav-milter to balance load between remote clamd daemons +# on firewall servers you may need to tune the options below. + +# Close the connection when the data size limit is exceeded. +# The value should match your MTA's limit for a maximum attachment size. +# Default: 25M +#StreamMaxLength 10M + +# Limit port range. +# Default: 1024 +#StreamMinPort 30000 +# Default: 2048 +#StreamMaxPort 32000 + +# Maximum number of threads running at the same time. +# Default: 10 +#MaxThreads 20 + +# Waiting for data from a client socket will timeout after this time (seconds). +# Default: 120 +#ReadTimeout 300 + +# This option specifies the time (in seconds) after which clamd should +# timeout if a client doesn't provide any initial command after connecting. +# Default: 5 +#CommandReadTimeout 5 + +# This option specifies how long to wait (in miliseconds) if the send buffer is full. +# Keep this value low to prevent clamd hanging +# +# Default: 500 +#SendBufTimeout 200 + +# Maximum number of queued items (including those being processed by MaxThreads threads) +# It is recommended to have this value at least twice MaxThreads if possible. +# WARNING: you shouldn't increase this too much to avoid running out of file descriptors, +# the following condition should hold: +# MaxThreads*MaxRecursion + (MaxQueue - MaxThreads) + 6< RLIMIT_NOFILE (usual max is 1024) +# +# Default: 100 +#MaxQueue 200 + +# Waiting for a new job will timeout after this time (seconds). +# Default: 30 +#IdleTimeout 60 + +# Don't scan files and directories matching regex +# This directive can be used multiple times +# Default: scan all +#ExcludePath ^/proc/ +#ExcludePath ^/sys/ + +# Maximum depth directories are scanned at. +# Default: 15 +#MaxDirectoryRecursion 20 + +# Follow directory symlinks. +# Default: no +#FollowDirectorySymlinks yes + +# Follow regular file symlinks. +# Default: no +#FollowFileSymlinks yes + +# Scan files and directories on other filesystems. +# Default: yes +#CrossFilesystems yes + +# Perform a database check. +# Default: 600 (10 min) +#SelfCheck 600 + +# Execute a command when virus is found. In the command string %v will +# be replaced with the virus name. +# Default: no +#VirusEvent /usr/local/bin/send_sms 123456789 "VIRUS ALERT: %v" + +# Run as another user (clamd must be started by root for this option to work) +# Default: don't drop privileges +User clamav + +# Initialize supplementary group access (clamd must be started by root). +# Default: no +#AllowSupplementaryGroups no + +# Stop daemon when libclamav reports out of memory condition. +#ExitOnOOM yes + +# Don't fork into background. +# Default: no +#Foreground yes + +# Enable debug messages in libclamav. +# Default: no +#Debug yes + +# Do not remove temporary files (for debug purposes). +# Default: no +#LeaveTemporaryFiles yes + +# Permit use of the ALLMATCHSCAN command. If set to no, clamd will reject +# any ALLMATCHSCAN command as invalid. +# Default: yes +#AllowAllMatchScan no + +# Detect Possibly Unwanted Applications. +# Default: no +#DetectPUA yes + +# Exclude a specific PUA category. This directive can be used multiple times. +# See https://github.com/vrtadmin/clamav-faq/blob/master/faq/faq-pua.md for +# the complete list of PUA categories. +# Default: Load all categories (if DetectPUA is activated) +#ExcludePUA NetTool +#ExcludePUA PWTool + +# Only include a specific PUA category. This directive can be used multiple +# times. +# Default: Load all categories (if DetectPUA is activated) +#IncludePUA Spy +#IncludePUA Scanner +#IncludePUA RAT + +# In some cases (eg. complex malware, exploits in graphic files, and others), +# ClamAV uses special algorithms to provide accurate detection. This option +# controls the algorithmic detection. +# Default: yes +#AlgorithmicDetection yes + +# This option causes memory or nested map scans to dump the content to disk. +# If you turn on this option, more data is written to disk and is available +# when the LeaveTemporaryFiles option is enabled. +#ForceToDisk yes + +# This option allows you to disable the caching feature of the engine. By +# default, the engine will store an MD5 in a cache of any files that are +# not flagged as virus or that hit limits checks. Disabling the cache will +# have a negative performance impact on large scans. +# Default: no +#DisableCache yes + +## +## Executable files +## + +# PE stands for Portable Executable - it's an executable file format used +# in all 32 and 64-bit versions of Windows operating systems. This option allows +# ClamAV to perform a deeper analysis of executable files and it's also +# required for decompression of popular executable packers such as UPX, FSG, +# and Petite. If you turn off this option, the original files will still be +# scanned, but without additional processing. +# Default: yes +#ScanPE yes + +# Certain PE files contain an authenticode signature. By default, we check +# the signature chain in the PE file against a database of trusted and +# revoked certificates if the file being scanned is marked as a virus. +# If any certificate in the chain validates against any trusted root, but +# does not match any revoked certificate, the file is marked as whitelisted. +# If the file does match a revoked certificate, the file is marked as virus. +# The following setting completely turns off authenticode verification. +# Default: no +#DisableCertCheck yes + +# Executable and Linking Format is a standard format for UN*X executables. +# This option allows you to control the scanning of ELF files. +# If you turn off this option, the original files will still be scanned, but +# without additional processing. +# Default: yes +#ScanELF yes + +# With this option clamav will try to detect broken executables (both PE and +# ELF) and mark them as Broken.Executable. +# Default: no +#DetectBrokenExecutables yes + + +## +## Documents +## + +# This option enables scanning of OLE2 files, such as Microsoft Office +# documents and .msi files. +# If you turn off this option, the original files will still be scanned, but +# without additional processing. +# Default: yes +#ScanOLE2 yes + +# With this option enabled OLE2 files with VBA macros, which were not +# detected by signatures will be marked as "Heuristics.OLE2.ContainsMacros". +# Default: no +#OLE2BlockMacros no + +# This option enables scanning within PDF files. +# If you turn off this option, the original files will still be scanned, but +# without decoding and additional processing. +# Default: yes +#ScanPDF yes + +# This option enables scanning within SWF files. +# If you turn off this option, the original files will still be scanned, but +# without decoding and additional processing. +# Default: yes +#ScanSWF yes + + +## +## Mail files +## + +# Enable internal e-mail scanner. +# If you turn off this option, the original files will still be scanned, but +# without parsing individual messages/attachments. +# Default: yes +#ScanMail yes + +# Scan RFC1341 messages split over many emails. +# You will need to periodically clean up $TemporaryDirectory/clamav-partial directory. +# WARNING: This option may open your system to a DoS attack. +# Never use it on loaded servers. +# Default: no +#ScanPartialMessages yes + +# With this option enabled ClamAV will try to detect phishing attempts by using +# signatures. +# Default: yes +#PhishingSignatures yes + +# Scan URLs found in mails for phishing attempts using heuristics. +# Default: yes +#PhishingScanURLs yes + +# Always block SSL mismatches in URLs, even if the URL isn't in the database. +# This can lead to false positives. +# +# Default: no +#PhishingAlwaysBlockSSLMismatch no + +# Always block cloaked URLs, even if URL isn't in database. +# This can lead to false positives. +# +# Default: no +#PhishingAlwaysBlockCloak no + +# Detect partition intersections in raw disk images using heuristics. +# Default: no +#PartitionIntersection no + +# Allow heuristic match to take precedence. +# When enabled, if a heuristic scan (such as phishingScan) detects +# a possible virus/phish it will stop scan immediately. Recommended, saves CPU +# scan-time. +# When disabled, virus/phish detected by heuristic scans will be reported only at +# the end of a scan. If an archive contains both a heuristically detected +# virus/phish, and a real malware, the real malware will be reported +# +# Keep this disabled if you intend to handle "*.Heuristics.*" viruses +# differently from "real" malware. +# If a non-heuristically-detected virus (signature-based) is found first, +# the scan is interrupted immediately, regardless of this config option. +# +# Default: no +#HeuristicScanPrecedence yes + + +## +## Data Loss Prevention (DLP) +## + +# Enable the DLP module +# Default: No +#StructuredDataDetection yes + +# This option sets the lowest number of Credit Card numbers found in a file +# to generate a detect. +# Default: 3 +#StructuredMinCreditCardCount 5 + +# This option sets the lowest number of Social Security Numbers found +# in a file to generate a detect. +# Default: 3 +#StructuredMinSSNCount 5 + +# With this option enabled the DLP module will search for valid +# SSNs formatted as xxx-yy-zzzz +# Default: yes +#StructuredSSNFormatNormal yes + +# With this option enabled the DLP module will search for valid +# SSNs formatted as xxxyyzzzz +# Default: no +#StructuredSSNFormatStripped yes + + +## +## HTML +## + +# Perform HTML normalisation and decryption of MS Script Encoder code. +# Default: yes +# If you turn off this option, the original files will still be scanned, but +# without additional processing. +#ScanHTML yes + + +## +## Archives +## + +# ClamAV can scan within archives and compressed files. +# If you turn off this option, the original files will still be scanned, but +# without unpacking and additional processing. +# Default: yes +#ScanArchive yes + +# Mark encrypted archives as viruses (Encrypted.Zip, Encrypted.RAR). +# Default: no +#ArchiveBlockEncrypted no + + +## +## Limits +## + +# The options below protect your system against Denial of Service attacks +# using archive bombs. + +# This option sets the maximum amount of data to be scanned for each input file. +# Archives and other containers are recursively extracted and scanned up to this +# value. +# Value of 0 disables the limit +# Note: disabling this limit or setting it too high may result in severe damage +# to the system. +# Default: 100M +#MaxScanSize 150M + +# Files larger than this limit won't be scanned. Affects the input file itself +# as well as files contained inside it (when the input file is an archive, a +# document or some other kind of container). +# Value of 0 disables the limit. +# Note: disabling this limit or setting it too high may result in severe damage +# to the system. +# Default: 25M +#MaxFileSize 30M + +# Nested archives are scanned recursively, e.g. if a Zip archive contains a RAR +# file, all files within it will also be scanned. This options specifies how +# deeply the process should be continued. +# Note: setting this limit too high may result in severe damage to the system. +# Default: 16 +#MaxRecursion 10 + +# Number of files to be scanned within an archive, a document, or any other +# container file. +# Value of 0 disables the limit. +# Note: disabling this limit or setting it too high may result in severe damage +# to the system. +# Default: 10000 +#MaxFiles 15000 + +# Maximum size of a file to check for embedded PE. Files larger than this value +# will skip the additional analysis step. +# Note: disabling this limit or setting it too high may result in severe damage +# to the system. +# Default: 10M +#MaxEmbeddedPE 10M + +# Maximum size of a HTML file to normalize. HTML files larger than this value +# will not be normalized or scanned. +# Note: disabling this limit or setting it too high may result in severe damage +# to the system. +# Default: 10M +#MaxHTMLNormalize 10M + +# Maximum size of a normalized HTML file to scan. HTML files larger than this +# value after normalization will not be scanned. +# Note: disabling this limit or setting it too high may result in severe damage +# to the system. +# Default: 2M +#MaxHTMLNoTags 2M + +# Maximum size of a script file to normalize. Script content larger than this +# value will not be normalized or scanned. +# Note: disabling this limit or setting it too high may result in severe damage +# to the system. +# Default: 5M +#MaxScriptNormalize 5M + +# Maximum size of a ZIP file to reanalyze type recognition. ZIP files larger +# than this value will skip the step to potentially reanalyze as PE. +# Note: disabling this limit or setting it too high may result in severe damage +# to the system. +# Default: 1M +#MaxZipTypeRcg 1M + +# This option sets the maximum number of partitions of a raw disk image to be scanned. +# Raw disk images with more partitions than this value will have up to the value number +# partitions scanned. Negative values are not allowed. +# Note: setting this limit too high may result in severe damage or impact performance. +# Default: 50 +#MaxPartitions 128 + +# This option sets the maximum number of icons within a PE to be scanned. +# PE files with more icons than this value will have up to the value number icons scanned. +# Negative values are not allowed. +# WARNING: setting this limit too high may result in severe damage or impact performance. +# Default: 100 +#MaxIconsPE 200 + +## +## On-access Scan Settings +## + +# Enable on-access scanning. Currently, this is supported via fanotify. +# Clamuko/Dazuko support has been deprecated. +# Default: no +#ScanOnAccess yes + +# Don't scan files larger than OnAccessMaxFileSize +# Value of 0 disables the limit. +# Default: 5M +#OnAccessMaxFileSize 10M + +# Set the include paths (all files inside them will be scanned). You can have +# multiple OnAccessIncludePath directives but each directory must be added +# in a separate line. (On-access scan only) +# Default: disabled +#OnAccessIncludePath /home +#OnAccessIncludePath /students + +# Set the exclude paths. All subdirectories are also excluded. +# (On-access scan only) +# Default: disabled +#OnAccessExcludePath /home/bofh + +# With this option you can whitelist specific UIDs. Processes with these UIDs +# will be able to access all files. +# This option can be used multiple times (one per line). +# Default: disabled +#OnAccessExcludeUID 0 + + +## +## Bytecode +## + +# With this option enabled ClamAV will load bytecode from the database. +# It is highly recommended you keep this option on, otherwise you'll miss detections for many new viruses. +# Default: yes +#Bytecode yes + +# Set bytecode security level. +# Possible values: +# None - no security at all, meant for debugging. DO NOT USE THIS ON PRODUCTION SYSTEMS +# This value is only available if clamav was built with --enable-debug! +# TrustSigned - trust bytecode loaded from signed .c[lv]d files, +# insert runtime safety checks for bytecode loaded from other sources +# Paranoid - don't trust any bytecode, insert runtime checks for all +# Recommended: TrustSigned, because bytecode in .cvd files already has these checks +# Note that by default only signed bytecode is loaded, currently you can only +# load unsigned bytecode in --enable-debug mode. +# +# Default: TrustSigned +#BytecodeSecurity TrustSigned + +# Set bytecode timeout in miliseconds. +# +# Default: 5000 +# BytecodeTimeout 1000 + +## +## Statistics gathering and submitting +## + +# Enable statistical reporting. +# Default: no +#StatsEnabled yes + +# Disable submission of individual PE sections for files flagged as malware. +# Default: no +#StatsPEDisabled yes + +# HostID in the form of an UUID to use when submitting statistical information. +# Default: auto +#StatsHostID auto + +# Time in seconds to wait for the stats server to come back with a response +# Default: 10 +#StatsTimeout 10 diff --git a/recipes-security/clamav/clamav-0.98.5/freshclam.conf b/recipes-security/clamav/clamav-0.98.5/freshclam.conf new file mode 100644 index 0000000..100724f --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/freshclam.conf @@ -0,0 +1,224 @@ +# Path to the database directory. +# WARNING: It must match clamd.conf's directive! +# Default: hardcoded (depends on installation options) +DatabaseDirectory /var/lib/clamav + +# Path to the log file (make sure it has proper permissions) +# Default: disabled +UpdateLogFile /var/log/clamav/freshclam.log + +# Maximum size of the log file. +# Value of 0 disables the limit. +# You may use 'M' or 'm' for megabytes (1M = 1m = 1048576 bytes) +# and 'K' or 'k' for kilobytes (1K = 1k = 1024 bytes). +# in bytes just don't use modifiers. If LogFileMaxSize is enabled, +# log rotation (the LogRotate option) will always be enabled. +# Default: 1M +LogFileMaxSize 2M + +# Log time with each message. +# Default: no +LogTime yes + +# Enable verbose logging. +# Default: no +#LogVerbose yes + +# Use system logger (can work together with UpdateLogFile). +# Default: no +#LogSyslog yes + +# Specify the type of syslog messages - please refer to 'man syslog' +# for facility names. +# Default: LOG_LOCAL6 +#LogFacility LOG_MAIL + +# Enable log rotation. Always enabled when LogFileMaxSize is enabled. +# Default: no +#LogRotate yes + +# This option allows you to save the process identifier of the daemon +# Default: disabled +PidFile /var/run/freshclam.pid + +# By default when started freshclam drops privileges and switches to the +# "clamav" user. This directive allows you to change the database owner. +# Default: clamav (may depend on installation options) +DatabaseOwner clamav + +# Initialize supplementary group access (freshclam must be started by root). +# Default: no +#AllowSupplementaryGroups yes + +# Use DNS to verify virus database version. Freshclam uses DNS TXT records +# to verify database and software versions. With this directive you can change +# the database verification domain. +# WARNING: Do not touch it unless you're configuring freshclam to use your +# own database verification domain. +# Default: current.cvd.clamav.net +#DNSDatabaseInfo current.cvd.clamav.net + +# Uncomment the following line and replace XY with your country +# code. See http://www.iana.org/cctld/cctld-whois.htm for the full list. +# You can use db.XY.ipv6.clamav.net for IPv6 connections. +#DatabaseMirror db.XY.clamav.net + +# database.clamav.net is a round-robin record which points to our most +# reliable mirrors. It's used as a fall back in case db.XY.clamav.net is +# not working. DO NOT TOUCH the following line unless you know what you +# are doing. +DatabaseMirror database.clamav.net + +# How many attempts to make before giving up. +# Default: 3 (per mirror) +#MaxAttempts 5 + +# With this option you can control scripted updates. It's highly recommended +# to keep it enabled. +# Default: yes +#ScriptedUpdates yes + +# By default freshclam will keep the local databases (.cld) uncompressed to +# make their handling faster. With this option you can enable the compression; +# the change will take effect with the next database update. +# Default: no +#CompressLocalDatabase no + +# With this option you can provide custom sources (http:// or file://) for +# database files. This option can be used multiple times. +# Default: no custom URLs +#DatabaseCustomURL http://myserver.com/mysigs.ndb +#DatabaseCustomURL file:///mnt/nfs/local.hdb + +# This option allows you to easily point freshclam to private mirrors. +# If PrivateMirror is set, freshclam does not attempt to use DNS +# to determine whether its databases are out-of-date, instead it will +# use the If-Modified-Since request or directly check the headers of the +# remote database files. For each database, freshclam first attempts +# to download the CLD file. If that fails, it tries to download the +# CVD file. This option overrides DatabaseMirror, DNSDatabaseInfo +# and ScriptedUpdates. It can be used multiple times to provide +# fall-back mirrors. +# Default: disabled +#PrivateMirror mirror1.mynetwork.com +#PrivateMirror mirror2.mynetwork.com + +# Number of database checks per day. +# Default: 12 (every two hours) +#Checks 24 + +# Proxy settings +# Default: disabled +#HTTPProxyServer myproxy.com +#HTTPProxyPort 1234 +#HTTPProxyUsername myusername +#HTTPProxyPassword mypass + +# If your servers are behind a firewall/proxy which applies User-Agent +# filtering you can use this option to force the use of a different +# User-Agent header. +# Default: clamav/version_number +#HTTPUserAgent SomeUserAgentIdString + +# Use aaa.bbb.ccc.ddd as client address for downloading databases. Useful for +# multi-homed systems. +# Default: Use OS'es default outgoing IP address. +#LocalIPAddress aaa.bbb.ccc.ddd + +# Send the RELOAD command to clamd. +# Default: no +#NotifyClamd /path/to/clamd.conf + +# Run command after successful database update. +# Default: disabled +#OnUpdateExecute command + +# Run command when database update process fails. +# Default: disabled +#OnErrorExecute command + +# Run command when freshclam reports outdated version. +# In the command string %v will be replaced by the new version number. +# Default: disabled +#OnOutdatedExecute command + +# Don't fork into background. +# Default: no +#Foreground yes + +# Enable debug messages in libclamav. +# Default: no +#Debug yes + +# Timeout in seconds when connecting to database server. +# Default: 30 +#ConnectTimeout 60 + +# Timeout in seconds when reading from database server. +# Default: 30 +#ReceiveTimeout 60 + +# With this option enabled, freshclam will attempt to load new +# databases into memory to make sure they are properly handled +# by libclamav before replacing the old ones. +# Default: yes +#TestDatabases yes + +# When enabled freshclam will submit statistics to the ClamAV Project about +# the latest virus detections in your environment. The ClamAV maintainers +# will then use this data to determine what types of malware are the most +# detected in the field and in what geographic area they are. +# Freshclam will connect to clamd in order to get recent statistics. +# Default: no +#SubmitDetectionStats /path/to/clamd.conf + +# Country of origin of malware/detection statistics (for statistical +# purposes only). The statistics collector at ClamAV.net will look up +# your IP address to determine the geographical origin of the malware +# reported by your installation. If this installation is mainly used to +# scan data which comes from a different location, please enable this +# option and enter a two-letter code (see http://www.iana.org/domains/root/db/) +# of the country of origin. +# Default: disabled +#DetectionStatsCountry country-code + +# This option enables support for our "Personal Statistics" service. +# When this option is enabled, the information on malware detected by +# your clamd installation is made available to you through our website. +# To get your HostID, log on http://www.stats.clamav.net and add a new +# host to your host list. Once you have the HostID, uncomment this option +# and paste the HostID here. As soon as your freshclam starts submitting +# information to our stats collecting service, you will be able to view +# the statistics of this clamd installation by logging into +# http://www.stats.clamav.net with the same credentials you used to +# generate the HostID. For more information refer to: +# http://www.clamav.net/documentation.html#cctts +# This feature requires SubmitDetectionStats to be enabled. +# Default: disabled +#DetectionStatsHostID unique-id + +# This option enables support for Google Safe Browsing. When activated for +# the first time, freshclam will download a new database file (safebrowsing.cvd) +# which will be automatically loaded by clamd and clamscan during the next +# reload, provided that the heuristic phishing detection is turned on. This +# database includes information about websites that may be phishing sites or +# possible sources of malware. When using this option, it's mandatory to run +# freshclam at least every 30 minutes. +# Freshclam uses the ClamAV's mirror infrastructure to distribute the +# database and its updates but all the contents are provided under Google's +# terms of use. See http://www.google.com/transparencyreport/safebrowsing +# and http://www.clamav.net/documentation.html#safebrowsing +# for more information. +# Default: disabled +#SafeBrowsing yes + +# This option enables downloading of bytecode.cvd, which includes additional +# detection mechanisms and improvements to the ClamAV engine. +# Default: enabled +#Bytecode yes + +# Download an additional 3rd party signature database distributed through +# the ClamAV mirrors. +# This option can be used multiple times. +#ExtraDatabase dbname1 +#ExtraDatabase dbname2 diff --git a/recipes-security/clamav/clamav-0.98.5/series b/recipes-security/clamav/clamav-0.98.5/series new file mode 100644 index 0000000..3b09681 --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/series @@ -0,0 +1,18 @@ +0001-Change-paths-in-sample-conf-file-to-match-Debian.patch +0002-Add-an-additional-n-after-the-number-in-the-pidfile.patch +0003-unit_tests-increment-test-timeout-from-40secs-to-5mi.patch +0004-Fix-compiling-on-Hurd.patch +0005-Workaround-a-bug-in-libc-on-Hurd.patch +0006-remove-unnecessary-harmful-flags-from-libclamav.pc.patch +0007-libclamav-use-libmspack.patch +0008-Add-upstream-systemd-support-for-clamav-daemon-and-c.patch +0009-fix-ssize_t-size_t-off_t-printf-modifier.patch +0010-hardcode-LLVM-linker-flag-because-llvm-config-return.patch +0011-Add-libmspack-library-from-upstream-without-unnecess.patch +0012-allow-to-use-internal-libmspack-if-the-external-is-n.patch +0013-fix-autoreconf-with-embedded-libmspack.patch +0014-remove-AC_CONFIG_SRCDIR-llvm-configure-from-libclama.patch +0015-bb-10731-Allow-to-specificy-a-group-for-the-socket-o.patch +0016-clamav-milter-add-additinal-SMFIF_-flags-before-invo.patch +0017-Bump-.so-version-number.patch +0018-llvm-don-t-use-system-libs.patch diff --git a/recipes-security/clamav/clamav-0.98.5/volatiles.03_clamav b/recipes-security/clamav/clamav-0.98.5/volatiles.03_clamav new file mode 100644 index 0000000..ee2153c --- /dev/null +++ b/recipes-security/clamav/clamav-0.98.5/volatiles.03_clamav @@ -0,0 +1,3 @@ +# +d clamav clamav 0755 /var/log/clamav none +f clamav clamav 0655 /var/log/clamav/freshclam.log none diff --git a/recipes-security/clamav/clamav_0.98.5.bb b/recipes-security/clamav/clamav_0.98.5.bb new file mode 100644 index 0000000..73c9ab2 --- /dev/null +++ b/recipes-security/clamav/clamav_0.98.5.bb @@ -0,0 +1,135 @@ +SUMMARY = "ClamAV anti-virus utility for Unix - command-line interface" +DESCRIPTION = "ClamAV is an open source antivirus engine for detecting trojans, viruses, malware & other malicious threats." +HOMEPAGE = "http://www.clamav.net/index.html" +SECTION = "security" +LICENSE = "LGPL-2.1" +DEPENDS = "libtool db openssl zlib ncurses bzip2" + +LIC_FILES_CHKSUM = "file://COPYING.LGPL;beginline=2;endline=3;md5=4b89c05acc71195e9a06edfa2fa7d092" + +SRC_URI = "${DEBIAN_MIRROR}/main/c/${BPN}/${BPN}_${PV}+dfsg.orig.tar.xz;name=archive \ + file://0001-Change-paths-in-sample-conf-file-to-match-Debian.patch \ + file://0002-Add-an-additional-n-after-the-number-in-the-pidfile.patch \ + file://0003-unit_tests-increment-test-timeout-from-40secs-to-5mi.patch \ + file://0004-Fix-compiling-on-Hurd.patch \ + file://0005-Workaround-a-bug-in-libc-on-Hurd.patch \ + file://0006-remove-unnecessary-harmful-flags-from-libclamav.pc.patch \ + file://0007-libclamav-use-libmspack.patch \ + file://0008-Add-upstream-systemd-support-for-clamav-daemon-and-c.patch \ + file://0009-fix-ssize_t-size_t-off_t-printf-modifier.patch \ + file://0010-hardcode-LLVM-linker-flag-because-llvm-config-return.patch \ + file://0011-Add-libmspack-library-from-upstream-without-unnecess.patch \ + file://0012-allow-to-use-internal-libmspack-if-the-external-is-n.patch \ + file://0013-fix-autoreconf-with-embedded-libmspack.patch \ + file://0014-remove-AC_CONFIG_SRCDIR-llvm-configure-from-libclama.patch \ + file://0015-bb-10731-Allow-to-specificy-a-group-for-the-socket-o.patch \ + file://0016-clamav-milter-add-additinal-SMFIF_-flags-before-invo.patch \ + file://0017-Bump-.so-version-number.patch \ + file://0018-llvm-don-t-use-system-libs.patch \ + file://clamav-0001-clamdscan.patch \ + file://clamd.conf \ + file://freshclam.conf \ + file://volatiles.03_clamav \ +" + +SRC_URI[archive.md5sum] = "34d5e8698e57ce45c4a8c3c2cb211cf3" +SRC_URI[archive.sha256sum] = "0e353f646a0add17ca42e75ccfc7edf4f8b7c1acc972a86c317543f6b365db2d" + +inherit autotools-brokensep pkgconfig useradd + +S = "${WORKDIR}/${BPN}-${PV}+dfsg" + +PACKAGECONFIG ??= "" +PACKAGECONFIG += " ${@bb.utils.contains("DISTRO_FEATURES", "ipv6", "ipv6", "", d)}" +PACKAGECONFIG[xml] = "--with-xml=${STAGING_LIBDIR}/.., --with-xml=no, libxml2," +PACKAGECONFIG[json] = "--with-libjson=${STAGING_LIBDIR}, --without-libjson, json," +PACKAGECONFIG[curl] = "--with-libcurl=${STAGING_LIBDIR}, --without-libcurl, curl," +PACKAGECONFIG[ipv6] = "--enable-ipv6, --disable-ipv6" + +UID = "clamav" +GID = "clamav" + +EXTRA_OECONF += " --with-user=${UID} --with-group=${GID} \ + --without-libcheck-prefix \ + --disable-unrar \ + --disable-llvm \ + --with-openssl=${STAGING_LIBDIR}/.. \ + --with-zlib=${STAGING_LIBDIR}/.. \ + --with-libbz2-prefix=${STAGING_DIR}${prefix} \ + --with-libcurses-prefix=${STAGING_LIBDIR}/.. \ +" + +do_install_append () { + install -d ${D}/${sysconfdir} + install -d ${D}/${localstatedir}/lib/clamav + install -d ${D}${sysconfdir}/clamav ${D}${sysconfdir}/default/volatiles + + install -m 644 ${WORKDIR}/clamd.conf ${D}/${sysconfdir} + install -m 644 ${WORKDIR}/freshclam.conf ${D}/${sysconfdir} + install -m 0644 ${WORKDIR}/volatiles.03_clamav ${D}${sysconfdir}/default/volatiles/volatiles.03_clamav +} + +pkg_postinst_${PN} () { + if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then + ${sysconfdir}/init.d/populate-volatile.sh update + fi + chown ${UID}:${GID} ${localstatedir}/lib/clamav +} + + +PACKAGES = "${PN} ${PN}-dev ${PN}-dbg ${PN}-daemon ${PN}-doc \ + ${PN}-clamdscan ${PN}-freshclam ${PN}-libclamav6 ${PN}-staticdev" + +FILES_${PN} = "${bindir}/clambc ${bindir}/clamscan ${bibdir}/clamsubmit \ + ${bindir}/sigtool ${mandir}/man1/clambc* ${mandir}/man1/clamscan* \ + ${mandir}/man1/sigtool* ${mandir}/man1/clambsubmit* \ + ${docdir}/clamav/* " + +FILES_${PN}-clamdscan = " ${bindir}/clamdscan \ + ${docdir}/clamdscan/* \ + ${mandir}/man1/clamdscan* \ + " + +FILES_${PN}-daemon = "${bindir}/clamconf ${bindir}/clamdtop ${sbindir}/clamd \ + ${mandir}/man1/clamconf* ${mandir}/man1/clamdtop* \ + ${mandir}/man5/clamd* ${mandir}/man8/clamd* \ + ${sysconfdir}/clamd.conf* \ + ${systemd_unitdir}/system/clamav-daemon/* \ + ${docdir}/clamav-daemon/* ${sysconfdir}/clamav-daemon \ + ${sysconfdir}/logcheck/ignore.d.server/clamav-daemon " + +FILES_${PN}-freshclam = "${bindir}/freshclam \ + ${sysconfdir}/freshclam.conf* \ + ${sysconfdir}/clamav ${sysconfdir}/default/volatiles \ + ${localstatedir}/lib/clamav \ + ${docdir}/${PN}-freshclam ${mandir}/man1/freshclam.* \ + ${mandir}/man5/freshclam.conf.*" + +FILES_${PN}-dev = " ${bindir}/clamav-config ${libdir}/*.la \ + ${libdir}/pkgconfig/*.pc \ + ${mandir}/man1/clamav-config.* \ + ${includedir}/*.h ${docdir}/libclamav* " + +FILES_${PN}-staticdev = "${libdir}/*.a" + +FILES_${PN}-libclamav6 = "${libdir}/libclamav.so* ${libdir}/libmspack.so*\ + ${docdir}/libclamav6/* " + +FILES_${PN}-doc = "${mandir}/man/* \ + ${datadir}/man/* \ + ${docdir}/* " + +INSANE_SKIP_${PN}-libclamav6 = "dev-so" + +USERADD_PACKAGES = "${PN}" +GROUPADD_PARAM_${PN} = "--system ${UID}" +USERADD_PARAM_${PN} = "--system -g ${GID} --home-dir \ + ${localstatedir}/spool/${BPN} \ + --no-create-home --shell /bin/false ${BPN}" + +RPROVIDES_${PN} += "${PN}-systemd" +RREPLACES_${PN} += "${PN}-systemd" +RCONFLICTS_${PN} += "${PN}-systemd" +SYSTEMD_SERVICE_${PN} = "${BPN}.service" + +RDEPENDS_${PN} += "openssl ncurses-libncurses libbz2 ncurses-libtinfo clamav-freshclam clamav-libclamav6"